ripple 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/package.json +2 -2
- package/src/compiler/phases/1-parse/index.js +48 -349
- package/src/compiler/phases/2-analyze/index.js +343 -52
- package/src/compiler/phases/3-transform/client/index.js +28 -160
- package/src/compiler/phases/3-transform/segments.js +0 -7
- package/src/compiler/phases/3-transform/server/index.js +31 -154
- package/src/compiler/types/acorn.d.ts +1 -1
- package/src/compiler/types/estree.d.ts +1 -1
- package/src/compiler/types/import.d.ts +0 -2
- package/src/compiler/types/index.d.ts +5 -17
- package/src/compiler/types/parse.d.ts +1 -17
- package/src/compiler/utils.js +53 -20
- package/src/runtime/index-client.js +2 -13
- package/src/runtime/index-server.js +2 -2
- package/src/runtime/internal/client/bindings.js +3 -1
- package/src/runtime/internal/client/composite.js +3 -2
- package/src/runtime/internal/client/events.js +1 -1
- package/src/runtime/internal/client/head.js +3 -4
- package/src/runtime/internal/client/index.js +0 -1
- package/src/runtime/internal/client/runtime.js +0 -52
- package/src/runtime/internal/server/index.js +31 -55
- package/tests/client/array/array.copy-within.test.ripple +12 -12
- package/tests/client/array/array.derived.test.ripple +46 -46
- package/tests/client/array/array.iteration.test.ripple +10 -10
- package/tests/client/array/array.mutations.test.ripple +20 -20
- package/tests/client/array/array.to-methods.test.ripple +6 -6
- package/tests/client/async-suspend.test.ripple +5 -5
- package/tests/client/basic/basic.attributes.test.ripple +81 -81
- package/tests/client/basic/basic.collections.test.ripple +9 -9
- package/tests/client/basic/basic.components.test.ripple +28 -28
- package/tests/client/basic/basic.errors.test.ripple +46 -18
- package/tests/client/basic/basic.events.test.ripple +37 -37
- package/tests/client/basic/basic.get-set.test.ripple +6 -6
- package/tests/client/basic/basic.reactivity.test.ripple +58 -203
- package/tests/client/basic/basic.rendering.test.ripple +19 -19
- package/tests/client/basic/basic.utilities.test.ripple +3 -3
- package/tests/client/boundaries.test.ripple +12 -12
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.ripple.snap +5 -5
- package/tests/client/compiler/compiler.assignments.test.ripple +19 -19
- package/tests/client/compiler/compiler.basic.test.ripple +46 -27
- package/tests/client/compiler/compiler.tracked-access.test.ripple +2 -2
- package/tests/client/composite/composite.dynamic-components.test.ripple +9 -9
- package/tests/client/composite/composite.props.test.ripple +14 -16
- package/tests/client/composite/composite.reactivity.test.ripple +69 -70
- package/tests/client/composite/composite.render.test.ripple +3 -3
- package/tests/client/computed-properties.test.ripple +4 -4
- package/tests/client/date.test.ripple +42 -42
- package/tests/client/dynamic-elements.test.ripple +44 -45
- package/tests/client/events.test.ripple +70 -70
- package/tests/client/for.test.ripple +25 -25
- package/tests/client/head.test.ripple +19 -19
- package/tests/client/html.test.ripple +3 -3
- package/tests/client/input-value.test.ripple +84 -84
- package/tests/client/lazy-destructuring.test.ripple +138 -26
- package/tests/client/map.test.ripple +16 -16
- package/tests/client/media-query.test.ripple +7 -7
- package/tests/client/portal.test.ripple +11 -11
- package/tests/client/ref.test.ripple +4 -4
- package/tests/client/return.test.ripple +52 -52
- package/tests/client/set.test.ripple +6 -6
- package/tests/client/svg.test.ripple +5 -5
- package/tests/client/switch.test.ripple +44 -44
- package/tests/client/try.test.ripple +5 -5
- package/tests/client/url/url.derived.test.ripple +6 -6
- package/tests/client/url-search-params/url-search-params.derived.test.ripple +8 -8
- package/tests/client/url-search-params/url-search-params.iteration.test.ripple +10 -10
- package/tests/client/url-search-params/url-search-params.mutation.test.ripple +10 -10
- package/tests/client/url-search-params/url-search-params.retrieval.test.ripple +18 -18
- package/tests/client/url-search-params/url-search-params.serialization.test.ripple +2 -2
- package/tests/hydration/compiled/client/events.js +25 -25
- package/tests/hydration/compiled/client/for.js +70 -66
- package/tests/hydration/compiled/client/head.js +25 -25
- package/tests/hydration/compiled/client/hmr.js +2 -2
- package/tests/hydration/compiled/client/html.js +3 -3
- package/tests/hydration/compiled/client/if-children.js +24 -24
- package/tests/hydration/compiled/client/if.js +18 -18
- package/tests/hydration/compiled/client/mixed-control-flow.js +9 -9
- package/tests/hydration/compiled/client/portal.js +3 -3
- package/tests/hydration/compiled/client/reactivity.js +16 -16
- package/tests/hydration/compiled/client/return.js +40 -40
- package/tests/hydration/compiled/client/switch.js +12 -12
- package/tests/hydration/compiled/server/events.js +19 -19
- package/tests/hydration/compiled/server/for.js +41 -41
- package/tests/hydration/compiled/server/head.js +26 -26
- package/tests/hydration/compiled/server/hmr.js +2 -2
- package/tests/hydration/compiled/server/html.js +2 -2
- package/tests/hydration/compiled/server/if-children.js +16 -16
- package/tests/hydration/compiled/server/if.js +11 -11
- package/tests/hydration/compiled/server/mixed-control-flow.js +6 -6
- package/tests/hydration/compiled/server/portal.js +2 -2
- package/tests/hydration/compiled/server/reactivity.js +16 -16
- package/tests/hydration/compiled/server/return.js +25 -25
- package/tests/hydration/compiled/server/switch.js +8 -8
- package/tests/hydration/components/events.ripple +25 -25
- package/tests/hydration/components/for.ripple +66 -66
- package/tests/hydration/components/head.ripple +16 -16
- package/tests/hydration/components/hmr.ripple +2 -2
- package/tests/hydration/components/html.ripple +3 -3
- package/tests/hydration/components/if-children.ripple +24 -24
- package/tests/hydration/components/if.ripple +18 -18
- package/tests/hydration/components/mixed-control-flow.ripple +9 -9
- package/tests/hydration/components/portal.ripple +3 -3
- package/tests/hydration/components/reactivity.ripple +16 -16
- package/tests/hydration/components/return.ripple +40 -40
- package/tests/hydration/components/switch.ripple +20 -20
- package/tests/server/await.test.ripple +3 -3
- package/tests/server/basic.attributes.test.ripple +34 -34
- package/tests/server/basic.components.test.ripple +10 -10
- package/tests/server/basic.test.ripple +38 -40
- package/tests/server/compiler.test.ripple +22 -0
- package/tests/server/composite.props.test.ripple +12 -14
- package/tests/server/dynamic-elements.test.ripple +15 -15
- package/tests/server/head.test.ripple +11 -11
- package/tests/server/lazy-destructuring.test.ripple +92 -13
- package/tsconfig.typecheck.json +4 -0
- package/types/index.d.ts +0 -19
- package/tests/client/__snapshots__/tracked-expression.test.ripple.snap +0 -34
- package/tests/client/tracked-expression.test.ripple +0 -26
|
@@ -4,16 +4,16 @@ describe('RippleArray > derived', () => {
|
|
|
4
4
|
it('handles array methods that return values (map, filter, etc.)', () => {
|
|
5
5
|
component ArrayTest() {
|
|
6
6
|
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
7
|
-
let doubled = track(() => items.map((x) => x * 2));
|
|
8
|
-
let filtered = track(() => items.filter((x) => x % 2 === 0));
|
|
9
|
-
let reduced = track(() => items.reduce((acc, val) => acc + val, 0));
|
|
10
|
-
let includes = track(() => items.includes(3));
|
|
7
|
+
let &[doubled] = track(() => items.map((x) => x * 2));
|
|
8
|
+
let &[filtered] = track(() => items.filter((x) => x % 2 === 0));
|
|
9
|
+
let &[reduced] = track(() => items.reduce((acc, val) => acc + val, 0));
|
|
10
|
+
let &[includes] = track(() => items.includes(3));
|
|
11
11
|
|
|
12
12
|
<button onClick={() => items.push(6)}>{'add item'}</button>
|
|
13
|
-
<pre>{JSON.stringify(
|
|
14
|
-
<pre>{JSON.stringify(
|
|
15
|
-
<pre>{
|
|
16
|
-
<pre>{
|
|
13
|
+
<pre>{JSON.stringify(doubled)}</pre>
|
|
14
|
+
<pre>{JSON.stringify(filtered)}</pre>
|
|
15
|
+
<pre>{reduced}</pre>
|
|
16
|
+
<pre>{includes.toString()}</pre>
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
render(ArrayTest);
|
|
@@ -39,11 +39,11 @@ describe('RippleArray > derived', () => {
|
|
|
39
39
|
it('handles concat method with reactivity', () => {
|
|
40
40
|
component ArrayTest() {
|
|
41
41
|
let items = new RippleArray(1, 2, 3);
|
|
42
|
-
let concatenated = track(() => items.concat([4, 5], 6, [7, 8]));
|
|
42
|
+
let &[concatenated] = track(() => items.concat([4, 5], 6, [7, 8]));
|
|
43
43
|
|
|
44
44
|
<button onClick={() => items.push(3.5)}>{'add to original'}</button>
|
|
45
45
|
<pre>{JSON.stringify(items)}</pre>
|
|
46
|
-
<pre>{JSON.stringify(
|
|
46
|
+
<pre>{JSON.stringify(concatenated)}</pre>
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
render(ArrayTest);
|
|
@@ -65,11 +65,11 @@ describe('RippleArray > derived', () => {
|
|
|
65
65
|
it('handles array slice method with reactivity', () => {
|
|
66
66
|
component ArrayTest() {
|
|
67
67
|
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
68
|
-
let sliced = track(() => items.slice(1, 4));
|
|
68
|
+
let &[sliced] = track(() => items.slice(1, 4));
|
|
69
69
|
|
|
70
70
|
<button onClick={() => (items[2] = 30)}>{'change middle'}</button>
|
|
71
71
|
<pre>{JSON.stringify(items)}</pre>
|
|
72
|
-
<pre>{JSON.stringify(
|
|
72
|
+
<pre>{JSON.stringify(sliced)}</pre>
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
render(ArrayTest);
|
|
@@ -91,8 +91,8 @@ describe('RippleArray > derived', () => {
|
|
|
91
91
|
it('handles find and findIndex methods with reactivity', () => {
|
|
92
92
|
component ArrayTest() {
|
|
93
93
|
let items = new RippleArray(5, 10, 15, 20, 25);
|
|
94
|
-
let found = track(() => items.find((x) => x > 12));
|
|
95
|
-
let foundIndex = track(() => items.findIndex((x) => x > 12));
|
|
94
|
+
let &[found] = track(() => items.find((x) => x > 12));
|
|
95
|
+
let &[foundIndex] = track(() => items.findIndex((x) => x > 12));
|
|
96
96
|
|
|
97
97
|
<button
|
|
98
98
|
onClick={() => {
|
|
@@ -102,8 +102,8 @@ describe('RippleArray > derived', () => {
|
|
|
102
102
|
>
|
|
103
103
|
{'update values'}
|
|
104
104
|
</button>
|
|
105
|
-
<pre>{
|
|
106
|
-
<pre>{
|
|
105
|
+
<pre>{found}</pre>
|
|
106
|
+
<pre>{foundIndex}</pre>
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
render(ArrayTest);
|
|
@@ -125,8 +125,8 @@ describe('RippleArray > derived', () => {
|
|
|
125
125
|
it('handles findLast and findLastIndex methods with reactivity', () => {
|
|
126
126
|
component ArrayTest() {
|
|
127
127
|
let items = new RippleArray(5, 15, 10, 20, 15);
|
|
128
|
-
let foundLast = track(() => items.findLast((x) => x === 15));
|
|
129
|
-
let foundLastIndex = track(() => items.findLastIndex((x) => x === 15));
|
|
128
|
+
let &[foundLast] = track(() => items.findLast((x) => x === 15));
|
|
129
|
+
let &[foundLastIndex] = track(() => items.findLastIndex((x) => x === 15));
|
|
130
130
|
|
|
131
131
|
<button
|
|
132
132
|
onClick={() => {
|
|
@@ -136,8 +136,8 @@ describe('RippleArray > derived', () => {
|
|
|
136
136
|
>
|
|
137
137
|
{'update values'}
|
|
138
138
|
</button>
|
|
139
|
-
<pre>{
|
|
140
|
-
<pre>{
|
|
139
|
+
<pre>{foundLast}</pre>
|
|
140
|
+
<pre>{foundLastIndex}</pre>
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
render(ArrayTest);
|
|
@@ -159,7 +159,7 @@ describe('RippleArray > derived', () => {
|
|
|
159
159
|
it('handles every method with reactivity', () => {
|
|
160
160
|
component ArrayTest() {
|
|
161
161
|
let items = new RippleArray(2, 4, 6, 8);
|
|
162
|
-
let allEven = track(() => items.every((x) => x % 2 === 0));
|
|
162
|
+
let &[allEven] = track(() => items.every((x) => x % 2 === 0));
|
|
163
163
|
|
|
164
164
|
<button onClick={() => items.push(3)}>{'add odd'}</button>
|
|
165
165
|
<button
|
|
@@ -170,7 +170,7 @@ describe('RippleArray > derived', () => {
|
|
|
170
170
|
>
|
|
171
171
|
{'ensure all even'}
|
|
172
172
|
</button>
|
|
173
|
-
<pre>{
|
|
173
|
+
<pre>{allEven.toString()}</pre>
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
render(ArrayTest);
|
|
@@ -195,11 +195,11 @@ describe('RippleArray > derived', () => {
|
|
|
195
195
|
it('handles flat method with reactivity', () => {
|
|
196
196
|
component ArrayTest() {
|
|
197
197
|
let items = new RippleArray<number | number[]>([1, 2], [3, 4], 5);
|
|
198
|
-
let flattened = track(() => items.flat());
|
|
198
|
+
let &[flattened] = track(() => items.flat());
|
|
199
199
|
|
|
200
200
|
<button onClick={() => (items[0] = [6, 7, 8])}>{'change nested'}</button>
|
|
201
201
|
<pre>{JSON.stringify(items)}</pre>
|
|
202
|
-
<pre>{JSON.stringify(
|
|
202
|
+
<pre>{JSON.stringify(flattened)}</pre>
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
render(ArrayTest);
|
|
@@ -221,11 +221,11 @@ describe('RippleArray > derived', () => {
|
|
|
221
221
|
it('handles flatMap method with reactivity', () => {
|
|
222
222
|
component ArrayTest() {
|
|
223
223
|
let items = new RippleArray(1, 2, 3);
|
|
224
|
-
let flatMapped = track(() => items.flatMap((x) => [x, x * 2]));
|
|
224
|
+
let &[flatMapped] = track(() => items.flatMap((x) => [x, x * 2]));
|
|
225
225
|
|
|
226
226
|
<button onClick={() => items.push(4)}>{'add item'}</button>
|
|
227
227
|
<pre>{JSON.stringify(items)}</pre>
|
|
228
|
-
<pre>{JSON.stringify(
|
|
228
|
+
<pre>{JSON.stringify(flatMapped)}</pre>
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
render(ArrayTest);
|
|
@@ -247,11 +247,11 @@ describe('RippleArray > derived', () => {
|
|
|
247
247
|
it('handles join method with reactivity', () => {
|
|
248
248
|
component ArrayTest() {
|
|
249
249
|
let items = new RippleArray('apple', 'banana', 'cherry');
|
|
250
|
-
let joined = track(() => items.join(', '));
|
|
250
|
+
let &[joined] = track(() => items.join(', '));
|
|
251
251
|
|
|
252
252
|
<button onClick={() => items.push('date')}>{'add item'}</button>
|
|
253
253
|
<pre>{JSON.stringify(items)}</pre>
|
|
254
|
-
<pre>{
|
|
254
|
+
<pre>{joined}</pre>
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
render(ArrayTest);
|
|
@@ -275,7 +275,7 @@ describe('RippleArray > derived', () => {
|
|
|
275
275
|
it('handles lastIndexOf method with reactivity', () => {
|
|
276
276
|
component ArrayTest() {
|
|
277
277
|
let items = new RippleArray(1, 2, 3, 2, 1);
|
|
278
|
-
let lastIndex = track(() => items.lastIndexOf(2));
|
|
278
|
+
let &[lastIndex] = track(() => items.lastIndexOf(2));
|
|
279
279
|
|
|
280
280
|
<button
|
|
281
281
|
onClick={() => {
|
|
@@ -285,7 +285,7 @@ describe('RippleArray > derived', () => {
|
|
|
285
285
|
{'add duplicate'}
|
|
286
286
|
</button>
|
|
287
287
|
<pre>{JSON.stringify(items)}</pre>
|
|
288
|
-
<pre>{
|
|
288
|
+
<pre>{lastIndex}</pre>
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
render(ArrayTest);
|
|
@@ -307,11 +307,11 @@ describe('RippleArray > derived', () => {
|
|
|
307
307
|
it('handles reduceRight method with reactivity', () => {
|
|
308
308
|
component ArrayTest() {
|
|
309
309
|
let items = new RippleArray('a', 'b', 'c');
|
|
310
|
-
let reduced = track(() => items.reduceRight((acc, val) => acc + val, ''));
|
|
310
|
+
let &[reduced] = track(() => items.reduceRight((acc, val) => acc + val, ''));
|
|
311
311
|
|
|
312
312
|
<button onClick={() => items.push('d')}>{'add item'}</button>
|
|
313
313
|
<pre>{JSON.stringify(items)}</pre>
|
|
314
|
-
<pre>{
|
|
314
|
+
<pre>{reduced}</pre>
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
render(ArrayTest);
|
|
@@ -333,7 +333,7 @@ describe('RippleArray > derived', () => {
|
|
|
333
333
|
it('handles some method with reactivity', () => {
|
|
334
334
|
component ArrayTest() {
|
|
335
335
|
let items = new RippleArray(1, 3, 5, 7);
|
|
336
|
-
let hasEven = track(() => items.some((x) => x % 2 === 0));
|
|
336
|
+
let &[hasEven] = track(() => items.some((x) => x % 2 === 0));
|
|
337
337
|
|
|
338
338
|
<button onClick={() => items.push(2)}>{'add even'}</button>
|
|
339
339
|
<button
|
|
@@ -344,7 +344,7 @@ describe('RippleArray > derived', () => {
|
|
|
344
344
|
>
|
|
345
345
|
{'ensure all odd'}
|
|
346
346
|
</button>
|
|
347
|
-
<pre>{
|
|
347
|
+
<pre>{hasEven.toString()}</pre>
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
render(ArrayTest);
|
|
@@ -369,7 +369,7 @@ describe('RippleArray > derived', () => {
|
|
|
369
369
|
it('handles toLocaleString method with reactivity', () => {
|
|
370
370
|
component ArrayTest() {
|
|
371
371
|
let items = new RippleArray(1000, 2000, 3000);
|
|
372
|
-
let localized = track(() => items.toLocaleString('en-US'));
|
|
372
|
+
let &[localized] = track(() => items.toLocaleString('en-US'));
|
|
373
373
|
|
|
374
374
|
<button
|
|
375
375
|
onClick={() => {
|
|
@@ -379,7 +379,7 @@ describe('RippleArray > derived', () => {
|
|
|
379
379
|
{'add item'}
|
|
380
380
|
</button>
|
|
381
381
|
<pre>{JSON.stringify(items)}</pre>
|
|
382
|
-
<pre>{
|
|
382
|
+
<pre>{localized}</pre>
|
|
383
383
|
}
|
|
384
384
|
|
|
385
385
|
render(ArrayTest);
|
|
@@ -401,11 +401,11 @@ describe('RippleArray > derived', () => {
|
|
|
401
401
|
it('handles toString method with reactivity', () => {
|
|
402
402
|
component ArrayTest() {
|
|
403
403
|
let items = new RippleArray(1, 2, 3);
|
|
404
|
-
let string = track(() => items.toString());
|
|
404
|
+
let &[string] = track(() => items.toString());
|
|
405
405
|
|
|
406
406
|
<button onClick={() => items.push(4)}>{'add item'}</button>
|
|
407
407
|
<pre>{JSON.stringify(items)}</pre>
|
|
408
|
-
<pre>{
|
|
408
|
+
<pre>{string}</pre>
|
|
409
409
|
}
|
|
410
410
|
|
|
411
411
|
render(ArrayTest);
|
|
@@ -431,11 +431,11 @@ describe('RippleArray > derived', () => {
|
|
|
431
431
|
|
|
432
432
|
component ArrayTest() {
|
|
433
433
|
let items = new RippleArray(1, 2, 3, 4);
|
|
434
|
-
let withReplaced = track(() => items.with(2, 30));
|
|
434
|
+
let &[withReplaced] = track(() => items.with(2, 30));
|
|
435
435
|
|
|
436
436
|
<button onClick={() => (items[2] = 50)}>{'change original'}</button>
|
|
437
437
|
<pre>{JSON.stringify(items)}</pre>
|
|
438
|
-
<pre>{JSON.stringify(
|
|
438
|
+
<pre>{JSON.stringify(withReplaced)}</pre>
|
|
439
439
|
}
|
|
440
440
|
|
|
441
441
|
render(ArrayTest);
|
|
@@ -479,16 +479,16 @@ describe('RippleArray > derived', () => {
|
|
|
479
479
|
it('handles at method with reactivity', () => {
|
|
480
480
|
component ArrayTest() {
|
|
481
481
|
let items = new RippleArray(10, 20, 30, 40, 50);
|
|
482
|
-
let atIndex2 = track(() => items.at(2));
|
|
483
|
-
let atNegative1 = track(() => items.at(-1));
|
|
484
|
-
let atNegative2 = track(() => items.at(-2));
|
|
482
|
+
let &[atIndex2] = track(() => items.at(2));
|
|
483
|
+
let &[atNegative1] = track(() => items.at(-1));
|
|
484
|
+
let &[atNegative2] = track(() => items.at(-2));
|
|
485
485
|
|
|
486
486
|
<button onClick={() => (items[2] = 300)}>{'change index 2'}</button>
|
|
487
487
|
<button onClick={() => (items[items.length - 1] = 500)}>{'change last'}</button>
|
|
488
488
|
<pre>{JSON.stringify(items)}</pre>
|
|
489
|
-
<pre>{
|
|
490
|
-
<pre>{
|
|
491
|
-
<pre>{
|
|
489
|
+
<pre>{atIndex2}</pre>
|
|
490
|
+
<pre>{atNegative1}</pre>
|
|
491
|
+
<pre>{atNegative2}</pre>
|
|
492
492
|
}
|
|
493
493
|
|
|
494
494
|
render(ArrayTest);
|
|
@@ -4,11 +4,11 @@ describe('RippleArray > iteration', () => {
|
|
|
4
4
|
it('handles entries method with reactivity', () => {
|
|
5
5
|
component ArrayTest() {
|
|
6
6
|
let items = new RippleArray('a', 'b', 'c');
|
|
7
|
-
let entries = track(() => Array.from(items.entries()));
|
|
7
|
+
let &[entries] = track(() => Array.from(items.entries()));
|
|
8
8
|
|
|
9
9
|
<button onClick={() => items.push('d')}>{'add item'}</button>
|
|
10
10
|
<pre>{JSON.stringify(items)}</pre>
|
|
11
|
-
<pre>{JSON.stringify(
|
|
11
|
+
<pre>{JSON.stringify(entries)}</pre>
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
render(ArrayTest);
|
|
@@ -32,11 +32,11 @@ describe('RippleArray > iteration', () => {
|
|
|
32
32
|
it('handles keys method with reactivity', () => {
|
|
33
33
|
component ArrayTest() {
|
|
34
34
|
let items = new RippleArray('a', 'b', 'c');
|
|
35
|
-
let keys = track(() => Array.from(items.keys()));
|
|
35
|
+
let &[keys] = track(() => Array.from(items.keys()));
|
|
36
36
|
|
|
37
37
|
<button onClick={() => items.push('d')}>{'add item'}</button>
|
|
38
38
|
<pre>{JSON.stringify(items)}</pre>
|
|
39
|
-
<pre>{JSON.stringify(
|
|
39
|
+
<pre>{JSON.stringify(keys)}</pre>
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
render(ArrayTest);
|
|
@@ -58,11 +58,11 @@ describe('RippleArray > iteration', () => {
|
|
|
58
58
|
it('handles values method with reactivity', () => {
|
|
59
59
|
component ArrayTest() {
|
|
60
60
|
let items = new RippleArray('a', 'b', 'c');
|
|
61
|
-
let values = track(() => Array.from(items.values()));
|
|
61
|
+
let &[values] = track(() => Array.from(items.values()));
|
|
62
62
|
|
|
63
63
|
<button onClick={() => items.push('d')}>{'add item'}</button>
|
|
64
64
|
<pre>{JSON.stringify(items)}</pre>
|
|
65
|
-
<pre>{JSON.stringify(
|
|
65
|
+
<pre>{JSON.stringify(values)}</pre>
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
render(ArrayTest);
|
|
@@ -84,20 +84,20 @@ describe('RippleArray > iteration', () => {
|
|
|
84
84
|
it('handles Symbol.iterator with reactivity', () => {
|
|
85
85
|
component ArrayTest() {
|
|
86
86
|
let items = new RippleArray(1, 2, 3);
|
|
87
|
-
let sum = track(0);
|
|
87
|
+
let &[sum] = track(0);
|
|
88
88
|
|
|
89
89
|
effect(() => {
|
|
90
|
-
|
|
90
|
+
sum = 0;
|
|
91
91
|
for (const item of items) {
|
|
92
92
|
untrack(() => {
|
|
93
|
-
|
|
93
|
+
sum += item;
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
97
|
|
|
98
98
|
<button onClick={() => items.push(4)}>{'add item'}</button>
|
|
99
99
|
<pre>{JSON.stringify(items)}</pre>
|
|
100
|
-
<pre>{
|
|
100
|
+
<pre>{sum}</pre>
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
render(ArrayTest);
|
|
@@ -35,13 +35,13 @@ describe('RippleArray > mutations', () => {
|
|
|
35
35
|
it('handles push and pop operations with reactivity', () => {
|
|
36
36
|
component ArrayTest() {
|
|
37
37
|
let items = new RippleArray(1, 2, 3);
|
|
38
|
-
let lastItem = track(() => items[items.length - 1]);
|
|
38
|
+
let &[lastItem] = track(() => items[items.length - 1]);
|
|
39
39
|
|
|
40
40
|
<button onClick={() => items.push(4)}>{'push'}</button>
|
|
41
41
|
<button onClick={() => items.pop()}>{'pop'}</button>
|
|
42
42
|
<pre>{JSON.stringify(items)}</pre>
|
|
43
43
|
<pre>{items.length}</pre>
|
|
44
|
-
<pre>{
|
|
44
|
+
<pre>{lastItem}</pre>
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
render(ArrayTest);
|
|
@@ -74,13 +74,13 @@ describe('RippleArray > mutations', () => {
|
|
|
74
74
|
it('handles shift and unshift operations with reactivity', () => {
|
|
75
75
|
component ArrayTest() {
|
|
76
76
|
let items = new RippleArray(2, 3, 4);
|
|
77
|
-
let firstItem = track(() => items[0]);
|
|
77
|
+
let &[firstItem] = track(() => items[0]);
|
|
78
78
|
|
|
79
79
|
<button onClick={() => items.unshift(1)}>{'unshift'}</button>
|
|
80
80
|
<button onClick={() => items.shift()}>{'shift'}</button>
|
|
81
81
|
<pre>{JSON.stringify(items)}</pre>
|
|
82
82
|
<pre>{items.length}</pre>
|
|
83
|
-
<pre>{
|
|
83
|
+
<pre>{firstItem}</pre>
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
render(ArrayTest);
|
|
@@ -113,12 +113,12 @@ describe('RippleArray > mutations', () => {
|
|
|
113
113
|
it('handles splice operation with reactivity', () => {
|
|
114
114
|
component ArrayTest() {
|
|
115
115
|
let items: RippleArray<number | string> = new RippleArray(1, 2, 3, 4, 5);
|
|
116
|
-
let middleItem = track(() => items[2]);
|
|
116
|
+
let &[middleItem] = track(() => items[2]);
|
|
117
117
|
|
|
118
118
|
<button onClick={() => items.splice(1, 2, 'a', 'b')}>{'splice'}</button>
|
|
119
119
|
<pre>{JSON.stringify(items)}</pre>
|
|
120
120
|
<pre>{items.length}</pre>
|
|
121
|
-
<pre>{
|
|
121
|
+
<pre>{middleItem}</pre>
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
render(ArrayTest);
|
|
@@ -142,11 +142,11 @@ describe('RippleArray > mutations', () => {
|
|
|
142
142
|
it('handles fill operation with reactivity', () => {
|
|
143
143
|
component ArrayTest() {
|
|
144
144
|
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
145
|
-
let secondItem = track(() => items[1]);
|
|
145
|
+
let &[secondItem] = track(() => items[1]);
|
|
146
146
|
|
|
147
147
|
<button onClick={() => items.fill(0, 1, 4)}>{'fill'}</button>
|
|
148
148
|
<pre>{JSON.stringify(items)}</pre>
|
|
149
|
-
<pre>{
|
|
149
|
+
<pre>{secondItem}</pre>
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
render(ArrayTest);
|
|
@@ -168,13 +168,13 @@ describe('RippleArray > mutations', () => {
|
|
|
168
168
|
it('handles reverse operation with reactivity', () => {
|
|
169
169
|
component ArrayTest() {
|
|
170
170
|
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
171
|
-
let firstItem = track(() => items[0]);
|
|
172
|
-
let lastItem = track(() => items[4]);
|
|
171
|
+
let &[firstItem] = track(() => items[0]);
|
|
172
|
+
let &[lastItem] = track(() => items[4]);
|
|
173
173
|
|
|
174
174
|
<button onClick={() => items.reverse()}>{'reverse'}</button>
|
|
175
175
|
<pre>{JSON.stringify(items)}</pre>
|
|
176
|
-
<pre>{
|
|
177
|
-
<pre>{
|
|
176
|
+
<pre>{firstItem}</pre>
|
|
177
|
+
<pre>{lastItem}</pre>
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
render(ArrayTest);
|
|
@@ -198,12 +198,12 @@ describe('RippleArray > mutations', () => {
|
|
|
198
198
|
it('handles sort operation with reactivity', () => {
|
|
199
199
|
component ArrayTest() {
|
|
200
200
|
let items = new RippleArray(5, 3, 1, 4, 2);
|
|
201
|
-
let secondItem = track(() => items[1]);
|
|
201
|
+
let &[secondItem] = track(() => items[1]);
|
|
202
202
|
|
|
203
203
|
<button onClick={() => items.sort()}>{'sort ascending'}</button>
|
|
204
204
|
<button onClick={() => items.sort((a, b) => b - a)}>{'sort descending'}</button>
|
|
205
205
|
<pre>{JSON.stringify(items)}</pre>
|
|
206
|
-
<pre>{
|
|
206
|
+
<pre>{secondItem}</pre>
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
render(ArrayTest);
|
|
@@ -288,12 +288,12 @@ describe('RippleArray > mutations', () => {
|
|
|
288
288
|
it('handles array index access with reactivity', () => {
|
|
289
289
|
component ArrayTest() {
|
|
290
290
|
let items = new RippleArray(10, 20, 30);
|
|
291
|
-
let firstItem = track(() => items[0]);
|
|
292
|
-
let secondItem = track(() => items[1]);
|
|
291
|
+
let &[firstItem] = track(() => items[0]);
|
|
292
|
+
let &[secondItem] = track(() => items[1]);
|
|
293
293
|
|
|
294
294
|
<button onClick={() => (items[0] = 100)}>{'change first'}</button>
|
|
295
|
-
<pre>{
|
|
296
|
-
<pre>{
|
|
295
|
+
<pre>{firstItem}</pre>
|
|
296
|
+
<pre>{secondItem}</pre>
|
|
297
297
|
<pre>{items[0]}</pre>
|
|
298
298
|
<pre>{items[1]}</pre>
|
|
299
299
|
}
|
|
@@ -321,12 +321,12 @@ describe('RippleArray > mutations', () => {
|
|
|
321
321
|
it('handles length property for reactivity', () => {
|
|
322
322
|
component ArrayTest() {
|
|
323
323
|
let items = new RippleArray(1, 2, 3);
|
|
324
|
-
let length = track(() => items.length);
|
|
324
|
+
let &[length] = track(() => items.length);
|
|
325
325
|
|
|
326
326
|
<button onClick={() => (items.length = 5)}>{'expand'}</button>
|
|
327
327
|
<button onClick={() => (items.length = 2)}>{'shrink'}</button>
|
|
328
328
|
<pre>{JSON.stringify(items)}</pre>
|
|
329
|
-
<pre>{
|
|
329
|
+
<pre>{length}</pre>
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
render(ArrayTest);
|
|
@@ -8,11 +8,11 @@ describe('RippleArray > to* methods', () => {
|
|
|
8
8
|
|
|
9
9
|
component ArrayTest() {
|
|
10
10
|
let items = new RippleArray(1, 2, 3, 4);
|
|
11
|
-
let reversed = track(() => items.toReversed());
|
|
11
|
+
let &[reversed] = track(() => items.toReversed());
|
|
12
12
|
|
|
13
13
|
<button onClick={() => items.push(5)}>{'add item'}</button>
|
|
14
14
|
<pre>{JSON.stringify(items)}</pre>
|
|
15
|
-
<pre>{JSON.stringify(
|
|
15
|
+
<pre>{JSON.stringify(reversed)}</pre>
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
render(ArrayTest);
|
|
@@ -38,11 +38,11 @@ describe('RippleArray > to* methods', () => {
|
|
|
38
38
|
|
|
39
39
|
component ArrayTest() {
|
|
40
40
|
let items = new RippleArray(3, 1, 4, 2);
|
|
41
|
-
let sorted = track(() => items.toSorted());
|
|
41
|
+
let &[sorted] = track(() => items.toSorted());
|
|
42
42
|
|
|
43
43
|
<button onClick={() => items.push(0)}>{'add item'}</button>
|
|
44
44
|
<pre>{JSON.stringify(items)}</pre>
|
|
45
|
-
<pre>{JSON.stringify(
|
|
45
|
+
<pre>{JSON.stringify(sorted)}</pre>
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
render(ArrayTest);
|
|
@@ -68,11 +68,11 @@ describe('RippleArray > to* methods', () => {
|
|
|
68
68
|
|
|
69
69
|
component ArrayTest() {
|
|
70
70
|
let items = new RippleArray<string | number>(1, 2, 3, 4, 5);
|
|
71
|
-
let spliced = track(() => items.toSpliced(1, 2, 'a', 'b'));
|
|
71
|
+
let &[spliced] = track(() => items.toSpliced(1, 2, 'a', 'b'));
|
|
72
72
|
|
|
73
73
|
<button onClick={() => (items[2] = 30)}>{'change item'}</button>
|
|
74
74
|
<pre>{JSON.stringify(items)}</pre>
|
|
75
|
-
<pre>{JSON.stringify(
|
|
75
|
+
<pre>{JSON.stringify(spliced)}</pre>
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
render(ArrayTest);
|
|
@@ -4,9 +4,9 @@ describe('async suspense', () => {
|
|
|
4
4
|
it('hides child content during re-suspension when tracked dependency changes', async () => {
|
|
5
5
|
let resolve_fn: (() => void) | null = null;
|
|
6
6
|
|
|
7
|
-
component Child({
|
|
7
|
+
component Child({ countTracked }: { countTracked: any }) {
|
|
8
8
|
await track(() => {
|
|
9
|
-
|
|
9
|
+
countTracked.value;
|
|
10
10
|
return new Promise<void>((resolve) => {
|
|
11
11
|
resolve_fn = resolve;
|
|
12
12
|
});
|
|
@@ -16,15 +16,15 @@ describe('async suspense', () => {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
component App() {
|
|
19
|
-
let count = track(0);
|
|
19
|
+
let &[count, countTracked] = track(0);
|
|
20
20
|
|
|
21
21
|
try {
|
|
22
|
-
<Child {
|
|
22
|
+
<Child {countTracked} />
|
|
23
23
|
} pending {
|
|
24
24
|
<div class="pending">{'pending...'}</div>
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
<button onClick={() =>
|
|
27
|
+
<button onClick={() => count++}>{'Increment'}</button>
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
render(App);
|