diff --git a/.changeset/eighty-bikes-camp.md b/.changeset/eighty-bikes-camp.md new file mode 100644 index 000000000000..273e6ad9968e --- /dev/null +++ b/.changeset/eighty-bikes-camp.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: handle private fields in `class` in `.svelte.js` files diff --git a/packages/svelte/src/compiler/phases/2-analyze/validation.js b/packages/svelte/src/compiler/phases/2-analyze/validation.js index f04fe2fbf1eb..8804321fff61 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/validation.js +++ b/packages/svelte/src/compiler/phases/2-analyze/validation.js @@ -551,6 +551,28 @@ export const validation_runes_js = { }, UpdateExpression(node, { state }) { validate_assignment(node, node.argument, state); + }, + ClassBody(node, context) { + /** @type {string[]} */ + const private_derived_state = []; + + for (const definition of node.body) { + if ( + definition.type === 'PropertyDefinition' && + definition.key.type === 'PrivateIdentifier' && + definition.value?.type === 'CallExpression' + ) { + const rune = get_rune(definition.value, context.state.scope); + if (rune === '$derived') { + private_derived_state.push(definition.key.name); + } + } + } + + context.next({ + ...context.state, + private_derived_state + }); } }; @@ -693,26 +715,5 @@ export const validation_runes = merge(validation, a11y_validators, { } } }, - ClassBody(node, context) { - /** @type {string[]} */ - const private_derived_state = []; - - for (const definition of node.body) { - if ( - definition.type === 'PropertyDefinition' && - definition.key.type === 'PrivateIdentifier' && - definition.value?.type === 'CallExpression' - ) { - const rune = get_rune(definition.value, context.state.scope); - if (rune === '$derived') { - private_derived_state.push(definition.key.name); - } - } - } - - context.next({ - ...context.state, - private_derived_state - }); - } + ClassBody: validation_runes_js.ClassBody });