Skip to content

Commit a47827e

Browse files
committed
return instance _and_ props in runes mode, move flushSync into shared code, don't set accessors in runes mode
1 parent 758ac00 commit a47827e

File tree

10 files changed

+39
-41
lines changed

10 files changed

+39
-41
lines changed

packages/svelte/tests/runtime-legacy/shared.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ async function common_setup(cwd: string, runes: boolean | undefined, config: Run
131131
generate: 'client',
132132
...config.compileOptions,
133133
immutable: config.immutable,
134-
accessors: 'accessors' in config ? config.accessors : true,
134+
accessors: 'accessors' in config ? config.accessors : runes ? undefined : true,
135135
runes
136136
};
137137

@@ -284,20 +284,35 @@ async function run_test_variant(
284284
};
285285

286286
let instance: any;
287-
let props: any;
287+
let component: any;
288288

289289
if (runes) {
290-
props = proxy({ ...(config.props || {}) });
291-
290+
const props: any = proxy({ ...(config.props || {}) });
292291
const render = variant === 'hydrate' ? hydrate : mount;
292+
293293
instance = render(mod.default, {
294294
target,
295295
props,
296296
intro: config.intro,
297297
recover: config.recover ?? false
298298
});
299+
300+
component = new Proxy(instance, {
301+
get(target, key) {
302+
if (key in target) return target[key];
303+
return props[key];
304+
},
305+
set(target, key, value) {
306+
if (key in target) {
307+
target[key] = value;
308+
} else {
309+
flushSync(() => (props[key] = value));
310+
}
311+
return true;
312+
}
313+
});
299314
} else {
300-
instance = createClassComponent({
315+
instance = component = createClassComponent({
301316
component: mod.default,
302317
props: config.props,
303318
target,
@@ -336,7 +351,7 @@ async function run_test_variant(
336351
htmlEqualWithOptions: assert_html_equal_with_options
337352
},
338353
variant,
339-
component: runes ? props : instance,
354+
component,
340355
mod,
341356
target,
342357
snapshot,

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-2/_config.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -28,7 +27,7 @@ export default test({
2827

2928
logs.length = 0;
3029

31-
flushSync(() => (component.n += 1));
30+
component.n += 1;
3231

3332
assert.deepEqual(logs, [
3433
'parent: $effect.pre 1',

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-3/_config.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -23,7 +22,7 @@ export default test({
2322

2423
logs.length = 0;
2524

26-
flushSync(() => (component.n += 1));
25+
component.n += 1;
2726

2827
assert.deepEqual(logs, [
2928
'parent: render 1',

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-4/_config.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -27,8 +26,7 @@ export default test({
2726
]);
2827

2928
logs.length = 0;
30-
31-
flushSync(() => (component.n += 1));
29+
component.n += 1;
3230

3331
assert.deepEqual(logs, [
3432
'parent: $effect.pre 1',

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-5/_config.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -10,7 +9,7 @@ export default test({
109
assert.deepEqual(logs, ['$effect.pre 0', 'another $effect.pre 1', 'render n0', 'render i1']);
1110

1211
logs.length = 0;
13-
flushSync(() => (component.n += 1));
12+
component.n += 1;
1413

1514
assert.deepEqual(logs, ['$effect.pre 1', 'another $effect.pre 2', 'render n1', 'render i2']);
1615
}

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children/_config.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -23,8 +22,7 @@ export default test({
2322
]);
2423

2524
logs.length = 0;
26-
27-
flushSync(() => (component.n += 1));
25+
component.n += 1;
2826

2927
assert.deepEqual(logs, [
3028
'parent: $effect.pre 1',

packages/svelte/tests/runtime-runes/samples/props-default-value-lazy-accessors/_config.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from '../../../../src/index-client.js';
21
import { test } from '../../test';
32

43
// Tests that default values only fire lazily when the prop is undefined, and every time
@@ -13,24 +12,20 @@ export default test({
1312
html: `<p>props: 0 0 0 0 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn`,
1413

1514
async test({ assert, target, component }) {
16-
flushSync(() => {
17-
component.p0 = undefined;
18-
component.p1 = undefined;
19-
component.p2 = undefined;
20-
component.p3 = undefined;
21-
});
15+
component.p0 = undefined;
16+
component.p1 = undefined;
17+
component.p2 = undefined;
18+
component.p3 = undefined;
2219

2320
assert.htmlEqual(
2421
target.innerHTML,
2522
`<p>props: 1 1 1 1 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn`
2623
);
2724

28-
flushSync(() => {
29-
component.p4 = undefined;
30-
component.p5 = undefined;
31-
component.p6 = undefined;
32-
component.p7 = undefined;
33-
});
25+
component.p4 = undefined;
26+
component.p5 = undefined;
27+
component.p6 = undefined;
28+
component.p7 = undefined;
3429

3530
assert.htmlEqual(
3631
target.innerHTML,

packages/svelte/tests/runtime-runes/samples/props-quoted/_config.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -9,7 +8,7 @@ export default test({
98
html: `hello`,
109

1110
async test({ assert, target, component }) {
12-
flushSync(() => (component['kebab-case'] = 'goodbye'));
11+
component['kebab-case'] = 'goodbye';
1312
assert.htmlEqual(target.innerHTML, `goodbye`);
1413
}
1514
});

packages/svelte/tests/runtime-runes/samples/props/_config.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { flushSync } from 'svelte';
21
import { test } from '../../test';
32

43
export default test({
@@ -14,10 +13,10 @@ export default test({
1413
html: `x 1 2 3 z`,
1514

1615
async test({ assert, target, component }) {
17-
flushSync(() => (component.foo = 'y'));
16+
component.foo = 'y';
1817
assert.htmlEqual(target.innerHTML, `y 1 2 3 z`);
1918

20-
flushSync(() => (component.bar = 'w'));
19+
component.bar = 'w';
2120
assert.htmlEqual(target.innerHTML, `y 1 2 3 w`);
2221
}
2322
});
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
import { flushSync } from '../../../../src/index-client.js';
21
import { test } from '../../test';
32

43
export default test({
54
test({ assert, component, target }) {
65
const div = /** @type {HTMLDivElement & { foo?: number }} */ (target.querySelector('div'));
76

87
assert.equal(div.foo, undefined);
9-
flushSync(() => {
10-
component.foo = 2;
11-
component.visible = false;
12-
});
8+
component.foo = 2;
9+
component.visible = false;
1310
assert.equal(div.foo, 2);
1411
}
1512
});

0 commit comments

Comments
 (0)