File tree Expand file tree Collapse file tree 12 files changed +250
-6
lines changed
tests/runtime-runes/samples
side-effect-derived-array
side-effect-derived-object
side-effect-derived-primitive Expand file tree Collapse file tree 12 files changed +250
-6
lines changed Original file line number Diff line number Diff line change 11/** @import { Source } from '#client' */
22import { DEV } from 'esm-env' ;
3- import { set , source } from '../internal/client/reactivity/sources.js' ;
3+ import { set , source , state } from '../internal/client/reactivity/sources.js' ;
44import { label , tag } from '../internal/client/dev/tracing.js' ;
55import { get } from '../internal/client/runtime.js' ;
66import { increment } from './utils.js' ;
@@ -54,8 +54,8 @@ import { increment } from './utils.js';
5454export class SvelteMap extends Map {
5555 /** @type {Map<K, Source<number>> } */
5656 #sources = new Map ( ) ;
57- #version = source ( 0 ) ;
58- #size = source ( 0 ) ;
57+ #version = state ( 0 ) ;
58+ #size = state ( 0 ) ;
5959
6060 /**
6161 * @param {Iterable<readonly [K, V]> | null | undefined } [value]
Original file line number Diff line number Diff line change 11/** @import { Source } from '#client' */
22import { DEV } from 'esm-env' ;
3- import { source , set } from '../internal/client/reactivity/sources.js' ;
3+ import { source , set , state } from '../internal/client/reactivity/sources.js' ;
44import { label , tag } from '../internal/client/dev/tracing.js' ;
55import { get } from '../internal/client/runtime.js' ;
66import { increment } from './utils.js' ;
@@ -48,8 +48,8 @@ var inited = false;
4848export class SvelteSet extends Set {
4949 /** @type {Map<T, Source<boolean>> } */
5050 #sources = new Map ( ) ;
51- #version = source ( 0 ) ;
52- #size = source ( 0 ) ;
51+ #version = state ( 0 ) ;
52+ #size = state ( 0 ) ;
5353
5454 /**
5555 * @param {Iterable<T> | null | undefined } [value]
Original file line number Diff line number Diff line change 1+ import { flushSync } from 'svelte' ;
2+ import { test } from '../../test' ;
3+
4+ export default test ( {
5+ compileOptions : {
6+ dev : true ,
7+ runes : true
8+ } ,
9+
10+ test ( { assert, target } ) {
11+ const [ button1 , button2 ] = target . querySelectorAll ( 'button' ) ;
12+
13+ assert . throws ( ( ) => {
14+ button1 ?. click ( ) ;
15+ flushSync ( ) ;
16+ } , / s t a t e _ u n s a f e _ m u t a t i o n / ) ;
17+
18+ assert . doesNotThrow ( ( ) => {
19+ button2 ?. click ( ) ;
20+ flushSync ( ) ;
21+ } ) ;
22+ }
23+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ let visibleExternal = $state (false );
3+ let external = $state ([]);
4+ const throws = $derived .by (() => {
5+ external .push (1 );
6+ return external;
7+ });
8+
9+ let visibleInternal = $state (false )
10+ const works = $derived .by (() => {
11+ let internal = $state ([]);
12+ internal .push (1 );
13+ return internal;
14+ });
15+ </script >
16+
17+ <button onclick ={() => (visibleExternal = true )}>external</button >
18+ {#if visibleExternal }
19+ {throws }
20+ {/if }
21+ <button onclick ={() => (visibleInternal = true )}>internal</button >
22+ {#if visibleInternal }
23+ {works }
24+ {/if }
25+
Original file line number Diff line number Diff line change 1+ import { flushSync } from 'svelte' ;
2+ import { test } from '../../test' ;
3+
4+ export default test ( {
5+ compileOptions : {
6+ dev : true ,
7+ runes : true
8+ } ,
9+
10+ test ( { assert, target } ) {
11+ const [ button1 , button2 ] = target . querySelectorAll ( 'button' ) ;
12+
13+ assert . throws ( ( ) => {
14+ button1 ?. click ( ) ;
15+ flushSync ( ) ;
16+ } , / s t a t e _ u n s a f e _ m u t a t i o n / ) ;
17+
18+ assert . doesNotThrow ( ( ) => {
19+ button2 ?. click ( ) ;
20+ flushSync ( ) ;
21+ } ) ;
22+ }
23+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ import { SvelteMap } from ' svelte/reactivity' ;
3+
4+ let visibleExternal = $state (false );
5+ let external = new SvelteMap ();
6+ const throws = $derived .by (() => {
7+ external .set (1 , 1 );
8+ return external;
9+ });
10+
11+ let visibleInternal = $state (false );
12+ const works = $derived .by (() => {
13+ let internal = new SvelteMap ();
14+ internal .set (1 , 1 );
15+ return internal;
16+ });
17+ </script >
18+
19+ <button onclick ={() => (visibleExternal = true )}>external</button >
20+ {#if visibleExternal }
21+ {throws }
22+ {/if }
23+ <button onclick ={() => (visibleInternal = true )}>internal</button >
24+ {#if visibleInternal }
25+ {works }
26+ {/if }
27+
Original file line number Diff line number Diff line change 1+ import { flushSync } from 'svelte' ;
2+ import { test } from '../../test' ;
3+
4+ export default test ( {
5+ compileOptions : {
6+ dev : true ,
7+ runes : true
8+ } ,
9+
10+ test ( { assert, target } ) {
11+ const [ button1 , button2 ] = target . querySelectorAll ( 'button' ) ;
12+
13+ assert . throws ( ( ) => {
14+ button1 ?. click ( ) ;
15+ flushSync ( ) ;
16+ } , / s t a t e _ u n s a f e _ m u t a t i o n / ) ;
17+
18+ assert . doesNotThrow ( ( ) => {
19+ button2 ?. click ( ) ;
20+ flushSync ( ) ;
21+ } ) ;
22+ }
23+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ let visibleExternal = $state (false );
3+ let external = $state ({ v: 1 });
4+ const throws = $derived .by (() => {
5+ external .v = 2 ;
6+ return external;
7+ });
8+
9+ let visibleInternal = $state (false )
10+ const works = $derived .by (() => {
11+ let internal = $state ({ v: 1 });
12+ internal .v = 2 ;
13+ return internal;
14+ });
15+ </script >
16+
17+ <button onclick ={() => (visibleExternal = true )}>external</button >
18+ {#if visibleExternal }
19+ {throws }
20+ {/if }
21+ <button onclick ={() => (visibleInternal = true )}>internal</button >
22+ {#if visibleInternal }
23+ {works }
24+ {/if }
25+
Original file line number Diff line number Diff line change 1+ import { flushSync } from 'svelte' ;
2+ import { test } from '../../test' ;
3+
4+ export default test ( {
5+ compileOptions : {
6+ dev : true ,
7+ runes : true
8+ } ,
9+
10+ test ( { assert, target } ) {
11+ const [ button1 , button2 ] = target . querySelectorAll ( 'button' ) ;
12+
13+ assert . throws ( ( ) => {
14+ button1 ?. click ( ) ;
15+ flushSync ( ) ;
16+ } , / s t a t e _ u n s a f e _ m u t a t i o n / ) ;
17+
18+ assert . doesNotThrow ( ( ) => {
19+ button2 ?. click ( ) ;
20+ flushSync ( ) ;
21+ } ) ;
22+ }
23+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ let visibleExternal = $state (false );
3+ let external = $state (1 );
4+ const throws = $derived .by (() => {
5+ external = 2 ;
6+ return external;
7+ });
8+
9+ let visibleInternal = $state (false );
10+ const works = $derived .by (() => {
11+ let internal = $state (1 );
12+ internal = 2 ;
13+ return internal;
14+ });
15+ </script >
16+
17+ <button onclick ={() => (visibleExternal = true )}>external</button >
18+ {#if visibleExternal }
19+ {throws }
20+ {/if }
21+ <button onclick ={() => (visibleInternal = true )}>internal</button >
22+ {#if visibleInternal }
23+ {works }
24+ {/if }
25+
You can’t perform that action at this time.
0 commit comments