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} - - \ 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: ` - - - -

{"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, - ` - - - -

{"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} - - \ 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: ` - - - -

{"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, - ` - - - -

{"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 @@ - - - \ 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: ` - -

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, - ` - -

count: 11

- ` - ); - - await button.dispatchEvent(click); - - assert.equal(component.x, 12); - assert.htmlEqual( - target.innerHTML, - ` - -

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 @@ - - - \ 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: ` - -

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, - ` - -

count: 1

- ` - ); - - await button.dispatchEvent(click); - - assert.equal(component.x, 2); - assert.htmlEqual( - target.innerHTML, - ` - -

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 @@