diff --git a/.changeset/odd-taxis-retire.md b/.changeset/odd-taxis-retire.md
deleted file mode 100644
index b60a450c3a..0000000000
--- a/.changeset/odd-taxis-retire.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"svelte": patch
----
-
-fix: disallow exporting props, derived and reassigned state from within components
diff --git a/packages/svelte/src/compiler/errors.js b/packages/svelte/src/compiler/errors.js
index 050e7ec432..a0ff66085a 100644
--- a/packages/svelte/src/compiler/errors.js
+++ b/packages/svelte/src/compiler/errors.js
@@ -170,12 +170,8 @@ const runes = {
'invalid-legacy-export': () => `Cannot use \`export let\` in runes mode — use $props instead`,
/** @param {string} rune */
'invalid-rune-usage': (rune) => `Cannot use ${rune} rune in non-runes mode`,
- 'invalid-state-export': () =>
- `Cannot export state if it is reassigned. Either export a function returning the state value or only mutate the state value's properties`,
- 'invalid-derived-export': () =>
- `Cannot export derived state. To expose the current derived value, export a function returning its value`,
- 'invalid-prop-export': () =>
- `Cannot export properties. To expose the current value of a property, export a function returning its value`,
+ 'invalid-state-export': () => `Cannot export state if it is reassigned`,
+ 'invalid-derived-export': () => `Cannot export derived state`,
'invalid-props-id': () => `$props() can only be used with an object destructuring pattern`,
'invalid-props-pattern': () =>
`$props() assignment must not contain nested properties or computed keys`,
diff --git a/packages/svelte/src/compiler/phases/2-analyze/validation.js b/packages/svelte/src/compiler/phases/2-analyze/validation.js
index 959f508742..35374d2f1e 100644
--- a/packages/svelte/src/compiler/phases/2-analyze/validation.js
+++ b/packages/svelte/src/compiler/phases/2-analyze/validation.js
@@ -733,10 +733,6 @@ function validate_export(node, scope, name) {
const binding = scope.get(name);
if (!binding) return;
- if (binding.kind === 'prop') {
- error(node, 'invalid-prop-export');
- }
-
if (binding.kind === 'derived') {
error(node, 'invalid-derived-export');
}
@@ -964,20 +960,10 @@ export const validation_runes = merge(validation, a11y_validators, {
if (node.label.name !== '$' || path.at(-1)?.type !== 'Program') return;
error(node, 'invalid-legacy-reactive-statement');
},
- ExportNamedDeclaration(node, { state, next }) {
+ ExportNamedDeclaration(node, { state }) {
if (node.declaration?.type !== 'VariableDeclaration') return;
-
- // visit children, so bindings are correctly initialised
- next();
-
- for (const declarator of node.declaration.declarations) {
- for (const id of extract_identifiers(declarator.id)) {
- validate_export(node, state.scope, id.name);
- }
- }
-
- if (state.analysis.instance.scope !== state.scope) return;
if (node.declaration.kind !== 'let') return;
+ if (state.analysis.instance.scope !== state.scope) return;
error(node, 'invalid-legacy-export');
},
ExportSpecifier(node, { state }) {
diff --git a/packages/svelte/tests/compiler-errors/samples/export-derived-state/_config.js b/packages/svelte/tests/compiler-errors/samples/export-derived-state/_config.js
index 31ee52b2ba..1c171d19c0 100644
--- a/packages/svelte/tests/compiler-errors/samples/export-derived-state/_config.js
+++ b/packages/svelte/tests/compiler-errors/samples/export-derived-state/_config.js
@@ -3,7 +3,7 @@ import { test } from '../../test';
export default test({
error: {
code: 'invalid-derived-export',
- message:
- 'Cannot export derived state. To expose the current derived value, export a function returning its value'
+ message: 'Cannot export derived state',
+ position: [24, 66]
}
});
diff --git a/packages/svelte/tests/compiler-errors/samples/export-derived-state/main.svelte b/packages/svelte/tests/compiler-errors/samples/export-derived-state/main.svelte
deleted file mode 100644
index 634022db6a..0000000000
--- a/packages/svelte/tests/compiler-errors/samples/export-derived-state/main.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/packages/svelte/tests/compiler-errors/samples/export-state-2/_config.js b/packages/svelte/tests/compiler-errors/samples/export-state-2/_config.js
deleted file mode 100644
index 09fc4498fa..0000000000
--- a/packages/svelte/tests/compiler-errors/samples/export-state-2/_config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- error: {
- code: 'invalid-state-export',
- message:
- "Cannot export state if it is reassigned. Either export a function returning the state value or only mutate the state value's properties",
- position: [59, 99]
- }
-});
diff --git a/packages/svelte/tests/compiler-errors/samples/export-state-2/main.svelte b/packages/svelte/tests/compiler-errors/samples/export-state-2/main.svelte
deleted file mode 100644
index ed98777664..0000000000
--- a/packages/svelte/tests/compiler-errors/samples/export-state-2/main.svelte
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/packages/svelte/tests/compiler-errors/samples/export-state/_config.js b/packages/svelte/tests/compiler-errors/samples/export-state/_config.js
index a8e8b4b258..5ddb2a859a 100644
--- a/packages/svelte/tests/compiler-errors/samples/export-state/_config.js
+++ b/packages/svelte/tests/compiler-errors/samples/export-state/_config.js
@@ -3,8 +3,7 @@ import { test } from '../../test';
export default test({
error: {
code: 'invalid-state-export',
- message:
- "Cannot export state if it is reassigned. Either export a function returning the state value or only mutate the state value's properties",
+ message: 'Cannot export state if it is reassigned',
position: [46, 86]
}
});
diff --git a/packages/svelte/tests/compiler-errors/samples/runes-export-named-state/_config.js b/packages/svelte/tests/compiler-errors/samples/runes-export-named-state/_config.js
index 1eac29db14..a42a651141 100644
--- a/packages/svelte/tests/compiler-errors/samples/runes-export-named-state/_config.js
+++ b/packages/svelte/tests/compiler-errors/samples/runes-export-named-state/_config.js
@@ -3,8 +3,7 @@ import { test } from '../../test';
export default test({
error: {
code: 'invalid-state-export',
- message:
- "Cannot export state if it is reassigned. Either export a function returning the state value or only mutate the state value's properties",
+ message: 'Cannot export state if it is reassigned',
position: [28, 53]
}
});
diff --git a/packages/svelte/tests/compiler-errors/samples/runes-export-prop/_config.js b/packages/svelte/tests/compiler-errors/samples/runes-export-prop/_config.js
deleted file mode 100644
index ce8f97e0d1..0000000000
--- a/packages/svelte/tests/compiler-errors/samples/runes-export-prop/_config.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- error: {
- code: 'invalid-prop-export',
- message:
- 'Cannot export properties. To expose the current value of a property, export a function returning its value'
- }
-});
diff --git a/packages/svelte/tests/compiler-errors/samples/runes-export-prop/main.svelte b/packages/svelte/tests/compiler-errors/samples/runes-export-prop/main.svelte
deleted file mode 100644
index 3d3fd554fa..0000000000
--- a/packages/svelte/tests/compiler-errors/samples/runes-export-prop/main.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-