|
|
|
@ -11,17 +11,16 @@ const regex_starts_with_closing_script_tag = /^<\/script\s*>/;
|
|
|
|
* @returns {string}
|
|
|
|
* @returns {string}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
function get_context(parser, attributes, start) {
|
|
|
|
function get_context(parser, attributes, start) {
|
|
|
|
const context = attributes.find((attribute) => attribute.name === 'context');
|
|
|
|
const context = attributes.find((attribute) => attribute.name === 'context');
|
|
|
|
if (!context)
|
|
|
|
if (!context) return 'default';
|
|
|
|
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
@ -31,35 +30,31 @@ function get_context(parser, attributes, start) {
|
|
|
|
* @returns {Script}
|
|
|
|
* @returns {Script}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
export default function read_script(parser, start, attributes) {
|
|
|
|
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.read(regex_starts_with_closing_script_tag);
|
|
|
|
parser.template.slice(0, script_start).replace(regex_not_newline_characters, ' ') + data;
|
|
|
|
|
|
|
|
parser.read(regex_starts_with_closing_script_tag);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @type {Program}
|
|
|
|
* @type {Program}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
let ast;
|
|
|
|
let ast;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
ast = acorn.parse(source);
|
|
|
|
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.start = script_start;
|
|
|
|
ast.start = script_start;
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
type: 'Script',
|
|
|
|
type: 'Script',
|
|
|
|
start,
|
|
|
|
start,
|
|
|
|
end: parser.index,
|
|
|
|
end: parser.index,
|
|
|
|
context: get_context(parser, attributes, start),
|
|
|
|
context: get_context(parser, attributes, start),
|
|
|
|
content: ast
|
|
|
|
content: ast
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|