diff --git a/.changeset/smooth-kids-protect.md b/.changeset/smooth-kids-protect.md new file mode 100644 index 000000000000..0fb92314608b --- /dev/null +++ b/.changeset/smooth-kids-protect.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +breaking: don't allow children in svelte:options diff --git a/packages/svelte/src/compiler/phases/1-parse/state/element.js b/packages/svelte/src/compiler/phases/1-parse/state/element.js index 42c48a89ad74..bfaee9572d13 100644 --- a/packages/svelte/src/compiler/phases/1-parse/state/element.js +++ b/packages/svelte/src/compiler/phases/1-parse/state/element.js @@ -101,7 +101,7 @@ export default function tag(parser) { if (root_only_meta_tags.has(name)) { if (is_closing_tag) { if ( - (name === 'svelte:window' || name === 'svelte:body' || name === 'svelte:document') && + ['svelte:options', 'svelte:window', 'svelte:body', 'svelte:document'].includes(name) && /** @type {import('#compiler').ElementLike} */ (parent).fragment.nodes.length ) { error( diff --git a/packages/svelte/tests/compiler-errors/samples/options-children/_config.js b/packages/svelte/tests/compiler-errors/samples/options-children/_config.js new file mode 100644 index 000000000000..d08406c499f3 --- /dev/null +++ b/packages/svelte/tests/compiler-errors/samples/options-children/_config.js @@ -0,0 +1,9 @@ +import { test } from '../../test'; + +export default test({ + error: { + code: 'invalid-element-content', + message: ' cannot have children', + position: [16, 16] + } +}); diff --git a/packages/svelte/tests/compiler-errors/samples/options-children/main.svelte b/packages/svelte/tests/compiler-errors/samples/options-children/main.svelte new file mode 100644 index 000000000000..ed05227a9f09 --- /dev/null +++ b/packages/svelte/tests/compiler-errors/samples/options-children/main.svelte @@ -0,0 +1 @@ +contents