diff --git a/package-lock.json b/package-lock.json index 31faeb2720c..40564caf5d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "svelte", "version": "3.46.4", "license": "MIT", "devDependencies": { diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index 7de0f88413b..5fef07e7023 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -84,7 +84,7 @@ export default function tag(parser: Parser) { parser.current().children.length ) { parser.error( - parser_errors.invalid_element_content(slug, name), + parser_errors.invalid_element_content(slug, name), parser.current().children[0].start ); } @@ -197,6 +197,14 @@ export default function tag(parser: Parser) { parser.eat('>', true); + // A leading newline character immediately following the pre element start tag is stripped + // See spec: https://www.w3.org/TR/2011/WD-html5-20110113/grouping-content.html#the-pre-element + if (!is_closing_tag && name === 'pre') { + if (!parser.eat('\r\n')) { + parser.eat('\n'); + } + } + if (self_closing) { // don't push self-closing elements onto the stack element.end = parser.index; @@ -258,7 +266,7 @@ function read_tag_name(parser: Parser) { const match = fuzzymatch(name.slice(7), valid_meta_tags); parser.error( - parser_errors.invalid_tag_name_svelte_element(valid_meta_tags, match), + parser_errors.invalid_tag_name_svelte_element(valid_meta_tags, match), start ); } diff --git a/test/parser/samples/leading-newline-after-pre-tag/input.svelte b/test/parser/samples/leading-newline-after-pre-tag/input.svelte new file mode 100644 index 00000000000..e2434473255 --- /dev/null +++ b/test/parser/samples/leading-newline-after-pre-tag/input.svelte @@ -0,0 +1,3 @@ +
+test
+
diff --git a/test/parser/samples/leading-newline-after-pre-tag/output.json b/test/parser/samples/leading-newline-after-pre-tag/output.json new file mode 100644 index 00000000000..7fbae4300dc --- /dev/null +++ b/test/parser/samples/leading-newline-after-pre-tag/output.json @@ -0,0 +1,25 @@ +{ + "html": { + "start": 0, + "end": 17, + "type": "Fragment", + "children": [ + { + "start": 0, + "end": 17, + "type": "Element", + "name": "pre", + "attributes": [], + "children": [ + { + "start": 6, + "end": 11, + "type": "Text", + "raw": "test\n", + "data": "test\n" + } + ] + } + ] + } +}