diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
index feb9174187a0..091cf74442b0 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
@@ -795,31 +795,51 @@ function serialize_inline_component(node, component_name, context) {
push_prop(
b.get(attribute.name, [
b.return(
- b.call(
- '$.exposable',
- b.thunk(
- /** @type {import('estree').Expression} */ (context.visit(attribute.expression))
- )
- )
+ context.state.analysis.immutable
+ ? /** @type {import('estree').Expression} */ (context.visit(attribute.expression))
+ : b.call(
+ '$.exposable',
+ b.thunk(
+ /** @type {import('estree').Expression} */ (
+ context.visit(attribute.expression)
+ )
+ )
+ )
)
])
);
- // If the binding is just a reference to a top level state variable
- // we don't need a setter as the inner component can write to the signal directly
- const binding =
- attribute.expression.type !== 'Identifier'
- ? null
- : context.state.scope.get(attribute.expression.name);
- if (
- binding === null ||
- (binding.kind !== 'state' && binding.kind !== 'prop' && binding.kind !== 'rest_prop')
- ) {
+
+ if (attribute.expression.type === 'Identifier') {
const assignment = b.assignment('=', attribute.expression, b.id('$$value'));
push_prop(
b.set(attribute.name, [
b.stmt(serialize_set_binding(assignment, context, () => context.visit(assignment)))
])
);
+ } else {
+ if (context.state.analysis.immutable) {
+ const assignment = b.assignment('=', attribute.expression, b.id('$$value'));
+ push_prop(
+ b.set(attribute.name, [
+ b.stmt(
+ b.assignment(
+ '=',
+ /** @type {import('estree').MemberExpression} */ (
+ context.visit(attribute.expression)
+ ),
+ b.id('$$value')
+ )
+ )
+ ])
+ );
+ } else {
+ const assignment = b.assignment('=', attribute.expression, b.id('$$value'));
+ push_prop(
+ b.set(attribute.name, [
+ b.stmt(serialize_set_binding(assignment, context, () => context.visit(assignment)))
+ ])
+ );
+ }
}
}
}
diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js
index 2d3e5204c733..a8ec627008d7 100644
--- a/packages/svelte/src/internal/client/runtime.js
+++ b/packages/svelte/src/internal/client/runtime.js
@@ -1,7 +1,7 @@
import { DEV } from 'esm-env';
import { subscribe_to_store } from '../../store/utils.js';
import { EMPTY_FUNC, run_all } from '../common.js';
-import { get_descriptors, is_array } from './utils.js';
+import { get_descriptor, get_descriptors, is_array } from './utils.js';
export const SOURCE = 1;
export const DERIVED = 1 << 1;
@@ -1470,88 +1470,82 @@ export function is_store(val) {
*/
export function prop_source(props_obj, key, immutable, default_value, call_default_value) {
const props = is_signal(props_obj) ? get(props_obj) : props_obj;
- const possible_signal = /** @type {import('./types.js').MaybeSignal} */ (
- expose(() => props[key])
- );
- const update_bound_prop = Object.getOwnPropertyDescriptor(props, key)?.set;
+ const desc = get_descriptor(props, key);
+ const setter = desc && desc.set;
+
let value = props[key];
- const should_set_default_value = value === undefined && default_value !== undefined;
+ let was_defined = value !== undefined;
- if (
- is_signal(possible_signal) &&
- possible_signal.v === value &&
- update_bound_prop === undefined
- ) {
- if (should_set_default_value) {
- set(
- possible_signal,
- // @ts-expect-error would need a cumbersome method overload to type this
- call_default_value ? default_value() : default_value
- );
+ /** @type {import('./types.js').SourceSignal | undefined} */
+ let exposed = undefined;
+
+ if (setter !== undefined) {
+ if (default_value !== undefined) {
+ // TODO consolidate all these random runtime errors
+ throw new Error('Cannot use fallback values with bind:');
}
- return possible_signal;
+
+ exposed = expose(() => props[key]);
}
- if (should_set_default_value) {
- value =
- // @ts-expect-error would need a cumbersome method overload to type this
- call_default_value ? default_value() : default_value;
+ if (!was_defined && default_value !== undefined) {
+ value = call_default_value ? /** @type {() => V} */ (default_value)() : default_value;
}
const source_signal = immutable ? source(value) : mutable_source(value);
- // Synchronize prop changes with source signal.
- // Needs special equality checking because the prop in the
- // parent could be changed through `foo.bar = 'new value'`.
- let ignore_next1 = false;
- let ignore_next2 = false;
- let did_update_to_defined = !should_set_default_value;
+ let updating = false;
+ let initial = true;
- let mount = true;
+ // sync parent to child
sync_effect(() => {
const props = is_signal(props_obj) ? get(props_obj) : props_obj;
- // Before if to ensure signal dependency is registered
- const propagating_value = props[key];
- if (mount) {
- mount = false;
+ const value = props[key];
+
+ // console.log('ptc', { key, value, initial, updating });
+
+ if (initial) {
+ initial = false;
return;
}
- if (ignore_next1) {
- ignore_next1 = false;
- return;
+
+ if (updating) return;
+ updating = true;
+
+ if (value !== undefined) {
+ was_defined = true;
}
- if (
- // Ensure that updates from undefined to undefined are ignored
- (did_update_to_defined || propagating_value !== undefined) &&
- not_equal(immutable, propagating_value, source_signal.v)
- ) {
- ignore_next2 = true;
- did_update_to_defined = true;
- // TODO figure out why we need it this way and the explain in a comment;
- // some tests fail is we just do set_signal_value(source_signal, propagating_value)
- untrack(() => set_signal_value(source_signal, propagating_value));
+ if (was_defined) {
+ set(source_signal, value);
}
+
+ updating = false;
});
- if (is_signal(possible_signal) && update_bound_prop !== undefined) {
- let ignore_first = !should_set_default_value;
+ // sync child to parent
+ // TODO get rid of the props signal, so we can just write these as `$$props.foo = ...`
+ // instead of mucking about with effects (we can probably delete sync_effect)
+ if (setter) {
+ let initial = true;
+
sync_effect(() => {
- // Before if to ensure signal dependency is registered
- const propagating_value = get(source_signal);
- if (ignore_first) {
- ignore_first = false;
- return;
- }
- if (ignore_next2) {
- ignore_next2 = false;
+ const value = get(source_signal);
+
+ // console.log('ctp', { key, value, initial });
+
+ if (initial) {
+ initial = false;
return;
}
- if (not_equal(immutable, propagating_value, possible_signal.v)) {
- ignore_next1 = true;
- did_update_to_defined = true;
- untrack(() => update_bound_prop(propagating_value));
+ if (updating) return;
+
+ setter(value);
+
+ // legacy
+ if (exposed) {
+ set(exposed, exposed.v);
}
});
}
diff --git a/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/Counter.svelte b/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/Counter.svelte
index 406be1a8e129..b026d2c6592d 100644
--- a/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/Counter.svelte
+++ b/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/Counter.svelte
@@ -3,7 +3,7 @@
diff --git a/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/main.svelte b/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/main.svelte
index b58be56768d0..dbe6c71eb30c 100644
--- a/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/main.svelte
+++ b/packages/svelte/tests/runtime-browser/custom-elements-samples/nested/main.svelte
@@ -4,7 +4,7 @@
import { setContext } from "svelte";
import Counter from "./Counter.svelte";
- export let count;
+ export let count = 0;
export let counter;
setContext("context", "works");
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/Child.svelte b/packages/svelte/tests/runtime-legacy/samples/binding-backflow/Child.svelte
deleted file mode 100644
index 4e0f779b1228..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/Child.svelte
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-child: {value?.foo} | updates: {updates.length}
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/Parent.svelte b/packages/svelte/tests/runtime-legacy/samples/binding-backflow/Parent.svelte
deleted file mode 100644
index d987cd109420..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/Parent.svelte
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-parent: {value?.foo} | updates: {updates.length}
-
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-backflow/_config.js
deleted file mode 100644
index 9e1561f40e17..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/_config.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- get props() {
- return {
- configs: [
- { testcase: 'parent_override_child_default', value: { foo: 'mon' } },
- { testcase: 'child_default_populate_parent', value: undefined },
- { testcase: 'reactive_update', value: { foo: 'mon' } },
- { testcase: 'reactive_mutate', value: { foo: 'mon' } },
- { testcase: 'init_update', value: { foo: 'mon' } },
- { testcase: 'init_mutate', value: { foo: 'mon' } }
- ]
- };
- },
-
- async test({ assert, component }) {
- const parents = component.parents;
-
- // first testcase should update once
- // the rest should update twice
- let p;
- p = parents['parent_override_child_default'];
- assert.deepEqual(p.value, { foo: 'mon' });
- assert.equal(p.updates.length, 1);
-
- p = parents['child_default_populate_parent'];
- assert.deepEqual(p.value, { foo: 'kid' });
- assert.equal(p.updates.length, 2);
-
- p = parents['reactive_update'];
- assert.deepEqual(p.value, { foo: 'kid' });
- assert.equal(p.updates.length, 2);
-
- p = parents['reactive_mutate'];
- assert.deepEqual(p.value, { foo: 'kid' });
- assert.equal(p.updates.length, 2);
-
- p = parents['init_update'];
- assert.deepEqual(p.value, { foo: 'kid' });
- assert.equal(p.updates.length, 2);
-
- p = parents['init_mutate'];
- assert.deepEqual(p.value, { foo: 'kid' });
- assert.equal(p.updates.length, 2);
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/main.svelte b/packages/svelte/tests/runtime-legacy/samples/binding-backflow/main.svelte
deleted file mode 100644
index f7cfd4472d17..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/binding-backflow/main.svelte
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-{#each configs as config}
-
-{/each}
diff --git a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/Foo.svelte b/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/Foo.svelte
deleted file mode 100644
index 7be8cc4f949a..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/Foo.svelte
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-bar in Foo: {bar}
-baz in Foo: {baz}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js b/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js
deleted file mode 100644
index 9814833e2a86..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- async test({ assert, component }) {
- const { foo, p } = component;
-
- /** @type {string[]} */
- const values = [];
-
- Object.defineProperty(p.childNodes[0], 'nodeValue', {
- set(value) {
- values.push(value);
- }
- });
-
- await foo.double();
-
- assert.deepEqual(values, ['6']);
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/main.svelte b/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/main.svelte
deleted file mode 100644
index 003f89c6d9c9..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/main.svelte
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-{bar + baz}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/Widget.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/Widget.svelte
deleted file mode 100644
index 7d173df21045..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/Widget.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/_config.js
deleted file mode 100644
index 9292ce73db1b..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/_config.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
- 42
- `
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/main.svelte
deleted file mode 100644
index a262c675ea7f..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-aliased/main.svelte
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-{bar}
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/One.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/One.svelte
deleted file mode 100644
index f86da72ff2c1..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/One.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-{#each list as item, j}
-
-{/each}
-
-
- click me
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/Two.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/Two.svelte
deleted file mode 100644
index b33a987b7598..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/Two.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/_config.js
deleted file mode 100644
index 54ce1a678ff2..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/_config.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
- click me
- click me
-
- {"value":"0:0"}
-
- `,
-
- async test({ assert, target, window }) {
- const button = target.querySelectorAll('button')[1];
-
- await button.dispatchEvent(new window.Event('click', { bubbles: true }));
- await Promise.resolve();
-
- assert.htmlEqual(
- target.innerHTML,
- `
- click me
- click me
-
- {"value":"0:0"}
- {"value":"1:0"}
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/main.svelte
deleted file mode 100644
index d6e941261853..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-d/main.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-{obj.a.map(JSON.stringify)}
-{obj.b.map(JSON.stringify)}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/One.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/One.svelte
deleted file mode 100644
index f86da72ff2c1..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/One.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-{#each list as item, j}
-
-{/each}
-
-
- click me
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/Two.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/Two.svelte
deleted file mode 100644
index a622f559e2a4..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/Two.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/_config.js
deleted file mode 100644
index 3867ef6a5eec..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/_config.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
- click me
- click me
-
- {"value":{"i":0,"j":0}}
-
- `,
-
- async test({ assert, target, window }) {
- const button = target.querySelectorAll('button')[1];
-
- await button.dispatchEvent(new window.Event('click', { bubbles: true }));
- await Promise.resolve();
-
- assert.htmlEqual(
- target.innerHTML,
- `
- click me
- click me
-
- {"value":{"i":0,"j":0}}
- {"value":{"i":1,"j":0}}
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/main.svelte
deleted file mode 100644
index d6e941261853..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-blowback-e/main.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-{obj.a.map(JSON.stringify)}
-{obj.b.map(JSON.stringify)}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Bar.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Bar.svelte
deleted file mode 100644
index a2357b74b54c..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Bar.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-y: {y}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Baz.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Baz.svelte
deleted file mode 100644
index 569f7647543e..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Baz.svelte
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Foo.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Foo.svelte
deleted file mode 100644
index 12835d604931..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/Foo.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-y: {y}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/_config.js
deleted file mode 100644
index 56f4070de815..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/_config.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- // This test failed in Svelte 4, because the Bar y binding is activated before the
- // Baz x binding, meaning that by the time Foo is created, we already
- // have a value for y which Foo won't override. Easily worked around,
- // probably impossible to 'fix', so this test is left here for info
- // purposes but will probably remain skipped indefinitely - or rather,
- // it's okay if it needs to be skipped again sometime in the future.
- html: `
- y: foo
- y: foo
- `,
-
- test({ assert, component, target }) {
- component.x = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- y: foo
- y: foo
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/main.svelte
deleted file mode 100644
index 568fb031fbd8..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional-b/main.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-y: {y}
-
-
-
-{#if x}
-
-{:else}
-
-{/if}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Bar.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Bar.svelte
deleted file mode 100644
index a2357b74b54c..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Bar.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-y: {y}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Baz.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Baz.svelte
deleted file mode 100644
index 569f7647543e..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Baz.svelte
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Foo.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Foo.svelte
deleted file mode 100644
index 12835d604931..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/Foo.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-y: {y}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/_config.js
deleted file mode 100644
index 5c96bbf869a0..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/_config.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
- y: bar
- y: bar
- `,
-
- test({ assert, component, target }) {
- component.x = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- y: bar
- y: bar
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/main.svelte
deleted file mode 100644
index fee850a65ad2..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-conditional/main.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-y: {y}
-
-{#if x}
-
-{:else}
-
-{/if}
-
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Bar.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Bar.svelte
deleted file mode 100644
index d5ce18c8c895..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Bar.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-Bar: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Foo.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Foo.svelte
deleted file mode 100644
index 9c7ae240b7af..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/Foo.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-Foo: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/_config.js
deleted file mode 100644
index 19f837942515..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/_config.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
- Foo: yes
- x in parent: yes
- `,
-
- async test({ assert, component, target }) {
- component.a = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- Bar: yes
- x in parent: yes
- `
- );
-
- component.a = true;
- assert.equal(component.x, 'yes');
- component.x = undefined;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- Foo:
- x in parent:
- `
- );
-
- component.a = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- Bar: no
- x in parent: no
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/main.svelte
deleted file mode 100644
index e6edf3b1f79b..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-b/main.svelte
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-{#if a}
-
-{:else}
-
-{/if}
-
-x in parent: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Bar.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Bar.svelte
deleted file mode 100644
index d5ce18c8c895..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Bar.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-Bar: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Foo.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Foo.svelte
deleted file mode 100644
index 9c7ae240b7af..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/Foo.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-Foo: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/_config.js
deleted file mode 100644
index 19f837942515..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/_config.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
- Foo: yes
- x in parent: yes
- `,
-
- async test({ assert, component, target }) {
- component.a = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- Bar: yes
- x in parent: yes
- `
- );
-
- component.a = true;
- assert.equal(component.x, 'yes');
- component.x = undefined;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- Foo:
- x in parent:
- `
- );
-
- component.a = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- Bar: no
- x in parent: no
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/main.svelte
deleted file mode 100644
index 426ef04bad81..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child-c/main.svelte
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-x in parent: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/Counter.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/Counter.svelte
deleted file mode 100644
index 4ac9541b6506..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/Counter.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-+1
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/_config.js
deleted file mode 100644
index b63198d2bc92..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/_config.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { ok, test } from '../../test';
-
-export default test({
- html: `
- +1
- count: 10
- `,
-
- async test({ assert, component, target, window }) {
- const click = new window.MouseEvent('click', { bubbles: true });
- const button = target.querySelector('button');
- ok(button);
-
- await button.dispatchEvent(click);
-
- assert.equal(component.x, 11);
- assert.htmlEqual(
- target.innerHTML,
- `
- +1
- count: 11
- `
- );
-
- await button.dispatchEvent(click);
-
- assert.equal(component.x, 12);
- assert.htmlEqual(
- target.innerHTML,
- `
- +1
- count: 12
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/main.svelte
deleted file mode 100644
index e38b72daae49..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-parent-supercedes-child/main.svelte
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-count: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-store/Input.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-store/Input.svelte
deleted file mode 100644
index 792104bec8c0..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-store/Input.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-store/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding-store/_config.js
deleted file mode 100644
index c41af3ea5679..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-store/_config.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- html: `
-
-
-
- `,
- ssrHtml: `
-
-
-
- `,
-
- async test({ assert, component, target, window }) {
- let count = 0;
- component.callback = () => {
- count++;
- };
-
- const [input1, input2] = target.querySelectorAll('input');
-
- input1.value = '1';
- await input1.dispatchEvent(new window.Event('input'));
- await Promise.resolve();
-
- assert.htmlEqual(
- target.innerHTML,
- `
-
-
- 1
- `
- );
- assert.equal(input1.value, '1');
- assert.equal(input2.value, '1');
- assert.equal(count, 1);
-
- input2.value = '123';
- await input2.dispatchEvent(new window.Event('input'));
- await Promise.resolve();
-
- assert.htmlEqual(
- target.innerHTML,
- `
-
-
- 123
- `
- );
- assert.equal(input1.value, '123');
- assert.equal(input2.value, '123');
- assert.equal(count, 2);
-
- input1.value = '456';
- await input1.dispatchEvent(new window.Event('input'));
- await Promise.resolve();
-
- assert.htmlEqual(
- target.innerHTML,
- `
-
-
- 456
- `
- );
- assert.equal(input1.value, '456');
- assert.equal(input2.value, '456');
- assert.equal(count, 3);
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding-store/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding-store/main.svelte
deleted file mode 100644
index dba08e527680..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding-store/main.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-{$value.value}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding/Counter.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding/Counter.svelte
deleted file mode 100644
index 4ac9541b6506..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding/Counter.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-+1
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-binding/_config.js
deleted file mode 100644
index 07a3441f4cdd..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding/_config.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { ok, test } from '../../test';
-
-export default test({
- html: `
- +1
- count: 0
- `,
-
- async test({ assert, component, target, window }) {
- const click = new window.MouseEvent('click', { bubbles: true });
- const button = target.querySelector('button');
- ok(button);
-
- await button.dispatchEvent(click);
-
- assert.equal(component.x, 1);
- assert.htmlEqual(
- target.innerHTML,
- `
- +1
- count: 1
- `
- );
-
- await button.dispatchEvent(click);
-
- assert.equal(component.x, 2);
- assert.htmlEqual(
- target.innerHTML,
- `
- +1
- count: 2
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-binding/main.svelte b/packages/svelte/tests/runtime-legacy/samples/component-binding/main.svelte
deleted file mode 100644
index 3a582fe7bd98..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/component-binding/main.svelte
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-count: {x}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/deconflict-value/Widget.svelte b/packages/svelte/tests/runtime-legacy/samples/deconflict-value/Widget.svelte
deleted file mode 100644
index 909dc03c893e..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/deconflict-value/Widget.svelte
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/packages/svelte/tests/runtime-legacy/samples/deconflict-value/_config.js b/packages/svelte/tests/runtime-legacy/samples/deconflict-value/_config.js
deleted file mode 100644
index d004cd7ed312..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/deconflict-value/_config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- skip_if_ssr: 'permanent',
-
- html: `
- Reactive: foo
- Value: foo
- `
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/deconflict-value/main.svelte b/packages/svelte/tests/runtime-legacy/samples/deconflict-value/main.svelte
deleted file mode 100644
index 07b7c2e1f00a..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/deconflict-value/main.svelte
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-Reactive: {reactive}
-Value: {value}
diff --git a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Green.svelte b/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Green.svelte
deleted file mode 100644
index 613d3ff52a9e..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Green.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-green {foo}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Red.svelte b/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Red.svelte
deleted file mode 100644
index b83dfe150e9f..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/Red.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-red {foo}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/_config.js b/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/_config.js
deleted file mode 100644
index 99c06d257314..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/_config.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- get props() {
- return { x: true };
- },
-
- html: `
- parent green
- green green
- `,
-
- test({ assert, component, target }) {
- component.foo = undefined;
- component.x = false;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- parent red
- red red
- `
- );
-
- component.foo = undefined;
- component.x = true;
-
- assert.htmlEqual(
- target.innerHTML,
- `
- parent green
- green green
- `
- );
- }
-});
diff --git a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/main.svelte b/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/main.svelte
deleted file mode 100644
index 019718e5cb89..000000000000
--- a/packages/svelte/tests/runtime-legacy/samples/dynamic-component-bindings-recreated-b/main.svelte
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-parent {foo}
-
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/Select.svelte b/packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/Select.svelte
index 6f5dadf00101..e31ffe20d56e 100644
--- a/packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/Select.svelte
+++ b/packages/svelte/tests/runtime-legacy/samples/spread-element-select-value-undefined/Select.svelte
@@ -1,7 +1,7 @@
diff --git a/packages/svelte/tests/runtime-legacy/shared.ts b/packages/svelte/tests/runtime-legacy/shared.ts
index a1944d47e5f3..50290d250d41 100644
--- a/packages/svelte/tests/runtime-legacy/shared.ts
+++ b/packages/svelte/tests/runtime-legacy/shared.ts
@@ -92,7 +92,8 @@ afterAll(() => {
export function runtime_suite(runes: boolean) {
return suite_with_variants(
- ['dom', 'hydrate', 'ssr'],
+ // ['dom', 'hydrate', 'ssr'],
+ ['dom'],
(variant, config) => {
if (variant === 'hydrate') {
if (config.skip_if_hydrate === 'permanent') return 'no-test';
diff --git a/packages/svelte/tests/runtime-runes/samples/class-state-derived-unowned/main.svelte b/packages/svelte/tests/runtime-runes/samples/class-state-derived-unowned/main.svelte
index 58b96457dbb6..03d862af5c5d 100644
--- a/packages/svelte/tests/runtime-runes/samples/class-state-derived-unowned/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/class-state-derived-unowned/main.svelte
@@ -1,11 +1,11 @@
diff --git a/packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/_config.js b/packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/_config.js
index 602d71a38b0c..bbbc3448ad5a 100644
--- a/packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/event-attribute-bubble/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -6,36 +7,31 @@ export default test({
async test({ assert, target }) {
const [b1, b2, b3] = target.querySelectorAll('button');
- b1?.click();
- await Promise.resolve();
+ flushSync(() => b1?.click());
assert.htmlEqual(
target.innerHTML,
'1 1 change handler '
);
- b2?.click();
- await Promise.resolve();
+ flushSync(() => b2?.click());
assert.htmlEqual(
target.innerHTML,
'2 2 change handler '
);
- b3?.click();
- await Promise.resolve();
+ flushSync(() => b3?.click());
assert.htmlEqual(
target.innerHTML,
'2 2 change handler '
);
- b1?.click();
- await Promise.resolve();
+ flushSync(() => b1?.click());
assert.htmlEqual(
target.innerHTML,
'1 1 change handler '
);
- b2?.click();
- await Promise.resolve();
+ flushSync(() => b2?.click());
assert.htmlEqual(
target.innerHTML,
'0 0 change handler '
diff --git a/packages/svelte/tests/runtime-runes/samples/props-bound-fallback/_config.js b/packages/svelte/tests/runtime-runes/samples/props-bound-fallback/_config.js
index 7d4900a7452a..6dc700cee54c 100644
--- a/packages/svelte/tests/runtime-runes/samples/props-bound-fallback/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/props-bound-fallback/_config.js
@@ -12,5 +12,7 @@ export default test({
await btn?.click();
assert.htmlEqual(target.innerHTML, `1 1 `);
- }
+ },
+
+ error: `Cannot use fallback values with bind:`
});
diff --git a/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/_config.js b/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/_config.js
index dc10606695af..f4b1f09ec97e 100644
--- a/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/_config.js
@@ -10,7 +10,6 @@ export default test({
readonly:
readonlyWithDefault: 1
binding:
- bindingWithDefault: 1
set bindings to 5
set bindings to undefined
@@ -20,27 +19,24 @@ export default test({
readonly: 0
readonlyWithDefault: 0
binding: 0
- bindingWithDefault: 0
set bindings to 5
set bindings to undefined
-
+
bindings undefined:
readonly:
readonlyWithDefault: 1
binding:
- bindingWithDefault: 1
set bindings to 5
set bindings to undefined
-
+
bindings defined:
readonly: 0
readonlyWithDefault: 0
binding: 0
- bindingWithDefault: 0
set bindings to 5
set bindings to undefined
@@ -50,19 +46,13 @@ export default test({
readonly_undefined:
readonlyWithDefault_undefined:
binding_undefined:
- bindingWithDefault_undefined:
readonly_defined: 0
readonlyWithDefault_defined: 0
binding_defined: 0
- bindingWithDefault_defined: 0
bind_readonly_undefined:
- bind_readonlyWithDefault_undefined: 1
bind_binding_undefined:
- bind_bindingWithDefault_undefined: 1
bind_readonly_defined: 0
- bind_readonlyWithDefault_defined: 0
bind_binding_defined: 0
- bind_bindingWithDefault_defined: 0
set everything to 10
@@ -93,64 +83,54 @@ export default test({
`
props undefined:
- readonly:
+ readonly:
readonlyWithDefault: 1
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
props defined:
readonly: 0
readonlyWithDefault: 0
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
bindings undefined:
readonly:
readonlyWithDefault: 1
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
bindings defined:
readonly: 0
readonlyWithDefault: 0
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
Main:
readonly_undefined:
readonlyWithDefault_undefined:
binding_undefined:
- bindingWithDefault_undefined:
readonly_defined: 0
readonlyWithDefault_defined: 0
binding_defined: 0
- bindingWithDefault_defined: 0
bind_readonly_undefined:
- bind_readonlyWithDefault_undefined: 1
bind_binding_undefined:
- bind_bindingWithDefault_undefined:
bind_readonly_defined: 0
- bind_readonlyWithDefault_defined: 0
bind_binding_defined:
- bind_bindingWithDefault_defined:
-
+
set everything to 10
set everything to undefined
`
@@ -169,61 +149,51 @@ export default test({
readonly:
readonlyWithDefault: 1
binding: 5
- bindingWithDefault: 5
set bindings to 5
set bindings to undefined
-
+
props defined:
readonly: 0
readonlyWithDefault: 0
binding: 5
- bindingWithDefault: 5
set bindings to 5
set bindings to undefined
-
+
bindings undefined:
readonly:
readonlyWithDefault: 1
binding: 5
- bindingWithDefault: 5
set bindings to 5
set bindings to undefined
-
+
bindings defined:
readonly: 0
readonlyWithDefault: 0
binding: 5
- bindingWithDefault: 5
set bindings to 5
set bindings to undefined
-
+
Main:
readonly_undefined:
readonlyWithDefault_undefined:
binding_undefined:
- bindingWithDefault_undefined:
readonly_defined: 0
readonlyWithDefault_defined: 0
binding_defined: 0
- bindingWithDefault_defined: 0
bind_readonly_undefined:
- bind_readonlyWithDefault_undefined: 1
bind_binding_undefined: 5
- bind_bindingWithDefault_undefined: 5
bind_readonly_defined: 0
- bind_readonlyWithDefault_defined: 0
bind_binding_defined: 5
- bind_bindingWithDefault_defined: 5
-
+
set everything to 10
set everything to undefined
`
@@ -239,61 +209,51 @@ export default test({
readonly: 10
readonlyWithDefault: 10
binding: 10
- bindingWithDefault: 10
set bindings to 5
set bindings to undefined
-
+
props defined:
readonly: 10
readonlyWithDefault: 10
binding: 10
- bindingWithDefault: 10
set bindings to 5
set bindings to undefined
-
+
bindings undefined:
readonly: 10
readonlyWithDefault: 10
binding: 10
- bindingWithDefault: 10
set bindings to 5
set bindings to undefined
-
+
bindings defined:
readonly: 10
readonlyWithDefault: 10
binding: 10
- bindingWithDefault: 10
set bindings to 5
set bindings to undefined
-
+
Main:
readonly_undefined: 10
readonlyWithDefault_undefined: 10
binding_undefined: 10
- bindingWithDefault_undefined: 10
readonly_defined: 10
readonlyWithDefault_defined: 10
binding_defined: 10
- bindingWithDefault_defined: 10
bind_readonly_undefined: 10
- bind_readonlyWithDefault_undefined: 10
bind_binding_undefined: 10
- bind_bindingWithDefault_undefined: 10
bind_readonly_defined: 10
- bind_readonlyWithDefault_defined: 10
bind_binding_defined: 10
- bind_bindingWithDefault_defined: 10
-
+
set everything to 10
set everything to undefined
`
@@ -309,61 +269,51 @@ export default test({
readonly:
readonlyWithDefault:
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
props defined:
readonly:
readonlyWithDefault:
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
bindings undefined:
readonly:
readonlyWithDefault:
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
bindings defined:
readonly:
readonlyWithDefault:
binding:
- bindingWithDefault:
set bindings to 5
set bindings to undefined
-
+
Main:
readonly_undefined:
readonlyWithDefault_undefined:
binding_undefined:
- bindingWithDefault_undefined:
readonly_defined:
readonlyWithDefault_defined:
binding_defined:
- bindingWithDefault_defined:
bind_readonly_undefined:
- bind_readonlyWithDefault_undefined:
bind_binding_undefined:
- bind_bindingWithDefault_undefined:
bind_readonly_defined:
- bind_readonlyWithDefault_defined:
bind_binding_defined:
- bind_bindingWithDefault_defined:
-
+
set everything to 10
set everything to undefined
`
diff --git a/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/inner.svelte b/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/inner.svelte
index 80416bd34675..9c66d82b7f56 100644
--- a/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/inner.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/inner.svelte
@@ -1,20 +1,17 @@
readonly: {readonly}
readonlyWithDefault: {readonlyWithDefault}
binding: {binding}
- bindingWithDefault: {bindingWithDefault}
{
binding = 5;
- bindingWithDefault = 5;
}}>set bindings to 5
{
binding = undefined;
- bindingWithDefault = undefined;
}}>set bindings to undefined
diff --git a/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/main.svelte b/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/main.svelte
index d80295b002be..a8793bb9530e 100644
--- a/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/props-default-value-behavior/main.svelte
@@ -4,19 +4,13 @@
let readonly_undefined = $state();
let readonlyWithDefault_undefined = $state();
let binding_undefined = $state();
- let bindingWithDefault_undefined = $state();
let readonly_defined = $state(0);
let readonlyWithDefault_defined = $state(0);
let binding_defined = $state(0);
- let bindingWithDefault_defined = $state(0);
let bind_readonly_undefined = $state();
- let bind_readonlyWithDefault_undefined = $state();
let bind_binding_undefined = $state();
- let bind_bindingWithDefault_undefined = $state();
let bind_readonly_defined = $state(0);
- let bind_readonlyWithDefault_defined = $state(0);
let bind_binding_defined = $state(0);
- let bind_bindingWithDefault_defined = $state(0);
props undefined:
@@ -24,7 +18,6 @@
readonly={readonly_undefined}
readonlyWithDefault={readonlyWithDefault_undefined}
binding={binding_undefined}
- bindingWithDefault={bindingWithDefault_undefined}
/>
props defined:
@@ -32,23 +25,20 @@
readonly={readonly_defined}
readonlyWithDefault={readonlyWithDefault_defined}
binding={binding_defined}
- bindingWithDefault={bindingWithDefault_defined}
/>
bindings undefined:
bindings defined:
@@ -56,55 +46,37 @@
readonly_undefined: {readonly_undefined}
readonlyWithDefault_undefined: {readonlyWithDefault_undefined}
binding_undefined: {binding_undefined}
- bindingWithDefault_undefined: {bindingWithDefault_undefined}
readonly_defined: {readonly_defined}
readonlyWithDefault_defined: {readonlyWithDefault_defined}
binding_defined: {binding_defined}
- bindingWithDefault_defined: {bindingWithDefault_defined}
bind_readonly_undefined: {bind_readonly_undefined}
- bind_readonlyWithDefault_undefined: {bind_readonlyWithDefault_undefined}
bind_binding_undefined: {bind_binding_undefined}
- bind_bindingWithDefault_undefined: {bind_bindingWithDefault_undefined}
bind_readonly_defined: {bind_readonly_defined}
- bind_readonlyWithDefault_defined: {bind_readonlyWithDefault_defined}
bind_binding_defined: {bind_binding_defined}
- bind_bindingWithDefault_defined: {bind_bindingWithDefault_defined}
{
readonly_undefined = 10;
readonlyWithDefault_undefined = 10;
binding_undefined = 10;
- bindingWithDefault_undefined = 10;
readonly_defined = 10;
readonlyWithDefault_defined = 10;
binding_defined = 10;
- bindingWithDefault_defined = 10;
bind_readonly_undefined = 10;
- bind_readonlyWithDefault_undefined = 10;
bind_binding_undefined = 10;
- bind_bindingWithDefault_undefined = 10;
bind_readonly_defined = 10;
- bind_readonlyWithDefault_defined = 10;
bind_binding_defined = 10;
- bind_bindingWithDefault_defined = 10;
}}>set everything to 10
{
readonly_undefined = undefined;
readonlyWithDefault_undefined = undefined;
binding_undefined = undefined;
- bindingWithDefault_undefined = undefined;
readonly_defined = undefined;
readonlyWithDefault_defined = undefined;
binding_defined = undefined;
- bindingWithDefault_defined = undefined;
bind_readonly_undefined = undefined;
- bind_readonlyWithDefault_undefined = undefined;
bind_binding_undefined = undefined;
- bind_bindingWithDefault_undefined = undefined;
bind_readonly_defined = undefined;
- bind_readonlyWithDefault_defined = undefined;
bind_binding_defined = undefined;
- bind_bindingWithDefault_defined = undefined;
}}>set everything to undefined