diff --git a/src/compiler/parse/read/script.ts b/src/compiler/parse/read/script.ts
index cb59dc6d76..e7b5e14cee 100644
--- a/src/compiler/parse/read/script.ts
+++ b/src/compiler/parse/read/script.ts
@@ -3,7 +3,7 @@ import { Parser } from '../index';
import { Script } from '../../interfaces';
import { Node, Program } from 'estree';
-const script_closing_tag = '';
+// const script_closing_tag = '';
function get_context(parser: Parser, attributes: any[], start: number): string {
const context = attributes.find(attribute => attribute.name === 'context');
@@ -28,19 +28,22 @@ function get_context(parser: Parser, attributes: any[], start: number): string {
return value;
}
+
+const RE_SCRIPT_END = /<\/script\s*>/;
+
export default function read_script(parser: Parser, start: number, attributes: Node[]): Script {
const script_start = parser.index;
- const script_end = parser.template.indexOf(script_closing_tag, script_start);
-
- if (script_end === -1) parser.error({
+ const script_end = RE_SCRIPT_END.exec(parser.template.slice(script_start));
+
+ if (!script_end) parser.error({
code: `unclosed-script`,
message: `
+
+
Hello {name}!
\ No newline at end of file
diff --git a/test/parser/samples/script-whitespace-after-tagname/output.json b/test/parser/samples/script-whitespace-after-tagname/output.json
new file mode 100644
index 0000000000..903c392685
--- /dev/null
+++ b/test/parser/samples/script-whitespace-after-tagname/output.json
@@ -0,0 +1,150 @@
+{
+ "html": {
+ "start": 51,
+ "end": 73,
+ "type": "Fragment",
+ "children": [
+ {
+ "start": 49,
+ "end": 51,
+ "type": "Text",
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "start": 51,
+ "end": 73,
+ "type": "Element",
+ "name": "h1",
+ "attributes": [],
+ "children": [
+ {
+ "start": 55,
+ "end": 61,
+ "type": "Text",
+ "raw": "Hello ",
+ "data": "Hello "
+ },
+ {
+ "start": 61,
+ "end": 67,
+ "type": "MustacheTag",
+ "expression": {
+ "type": "Identifier",
+ "start": 62,
+ "end": 66,
+ "loc": {
+ "start": {
+ "line": 10,
+ "column": 11
+ },
+ "end": {
+ "line": 10,
+ "column": 15
+ }
+ },
+ "name": "name"
+ }
+ },
+ {
+ "start": 67,
+ "end": 68,
+ "type": "Text",
+ "raw": "!",
+ "data": "!"
+ }
+ ]
+ }
+ ]
+ },
+ "instance": {
+ "type": "Script",
+ "start": 0,
+ "end": 49,
+ "context": "default",
+ "content": {
+ "type": "Program",
+ "start": 8,
+ "end": 30,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 0
+ },
+ "end": {
+ "line": 3,
+ "column": 0
+ }
+ },
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 10,
+ "end": 29,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 1
+ },
+ "end": {
+ "line": 2,
+ "column": 20
+ }
+ },
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 14,
+ "end": 28,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 5
+ },
+ "end": {
+ "line": 2,
+ "column": 19
+ }
+ },
+ "id": {
+ "type": "Identifier",
+ "start": 14,
+ "end": 18,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 5
+ },
+ "end": {
+ "line": 2,
+ "column": 9
+ }
+ },
+ "name": "name"
+ },
+ "init": {
+ "type": "Literal",
+ "start": 21,
+ "end": 28,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 12
+ },
+ "end": {
+ "line": 2,
+ "column": 19
+ }
+ },
+ "value": "world",
+ "raw": "'world'"
+ }
+ }
+ ],
+ "kind": "let"
+ }
+ ],
+ "sourceType": "module"
+ }
+ }
+}
\ No newline at end of file