Convert src/compiler/parse/read/script.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent d05f719ec4
commit 7cf38f27c5

@ -1,52 +1,56 @@
import * as acorn from '../acorn'; import * as acorn from '../acorn';
import { Parser } from '../index';
import { Script } from '../../interfaces';
import { Node, Program } from 'estree';
import parser_errors from '../errors'; import parser_errors from '../errors';
import { regex_not_newline_characters } from '../../utils/patterns'; import { regex_not_newline_characters } from '../../utils/patterns';
const regex_closing_script_tag = /<\/script\s*>/; const regex_closing_script_tag = /<\/script\s*>/;
const regex_starts_with_closing_script_tag = /^<\/script\s*>/; const regex_starts_with_closing_script_tag = /^<\/script\s*>/;
function get_context(parser: Parser, attributes: any[], start: number): string { /**
* @param {Parser} parser
* @param {any[]} attributes
* @param {number} start
* @returns {string}
*/
function get_context(parser, attributes, start) {
const context = attributes.find((attribute) => attribute.name === 'context'); const context = attributes.find((attribute) => attribute.name === 'context');
if (!context) return 'default'; if (!context)
return 'default';
if (context.value.length !== 1 || context.value[0].type !== 'Text') { if (context.value.length !== 1 || context.value[0].type !== 'Text') {
parser.error(parser_errors.invalid_script_context_attribute, start); parser.error(parser_errors.invalid_script_context_attribute, start);
} }
const value = context.value[0].data; const value = context.value[0].data;
if (value !== 'module') { if (value !== 'module') {
parser.error(parser_errors.invalid_script_context_value, context.start); parser.error(parser_errors.invalid_script_context_value, context.start);
} }
return value; return value;
} }
export default function read_script(parser: Parser, start: number, attributes: Node[]): Script { /**
* @param {Parser} parser
* @param {number} start
* @param {Node[]} attributes
* @returns {Script}
*/
export default function read_script(parser, start, attributes) {
const script_start = parser.index; const script_start = parser.index;
const data = parser.read_until(regex_closing_script_tag, parser_errors.unclosed_script); const data = parser.read_until(regex_closing_script_tag, parser_errors.unclosed_script);
if (parser.index >= parser.template.length) { if (parser.index >= parser.template.length) {
parser.error(parser_errors.unclosed_script); parser.error(parser_errors.unclosed_script);
} }
const source = parser.template.slice(0, script_start).replace(regex_not_newline_characters, ' ') + data;
const source =
parser.template.slice(0, script_start).replace(regex_not_newline_characters, ' ') + data;
parser.read(regex_starts_with_closing_script_tag); parser.read(regex_starts_with_closing_script_tag);
let ast: Program; /**
* @type {Program}
*/
let ast;
try { try {
ast = acorn.parse(source) as any as Program; ast = acorn.parse(source);
} catch (err) { }
catch (err) {
parser.acorn_error(err); parser.acorn_error(err);
} }
// TODO is this necessary? // TODO is this necessary?
(ast as any).start = script_start; ast.start = script_start;
return { return {
type: 'Script', type: 'Script',
start, start,
@ -55,3 +59,7 @@ export default function read_script(parser: Parser, start: number, attributes: N
content: ast content: ast
}; };
} }

Loading…
Cancel
Save