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.
Files changed (119) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +2 -2
  3. package/src/compiler/phases/1-parse/index.js +48 -349
  4. package/src/compiler/phases/2-analyze/index.js +343 -52
  5. package/src/compiler/phases/3-transform/client/index.js +28 -160
  6. package/src/compiler/phases/3-transform/segments.js +0 -7
  7. package/src/compiler/phases/3-transform/server/index.js +31 -154
  8. package/src/compiler/types/acorn.d.ts +1 -1
  9. package/src/compiler/types/estree.d.ts +1 -1
  10. package/src/compiler/types/import.d.ts +0 -2
  11. package/src/compiler/types/index.d.ts +5 -17
  12. package/src/compiler/types/parse.d.ts +1 -17
  13. package/src/compiler/utils.js +53 -20
  14. package/src/runtime/index-client.js +2 -13
  15. package/src/runtime/index-server.js +2 -2
  16. package/src/runtime/internal/client/bindings.js +3 -1
  17. package/src/runtime/internal/client/composite.js +3 -2
  18. package/src/runtime/internal/client/events.js +1 -1
  19. package/src/runtime/internal/client/head.js +3 -4
  20. package/src/runtime/internal/client/index.js +0 -1
  21. package/src/runtime/internal/client/runtime.js +0 -52
  22. package/src/runtime/internal/server/index.js +31 -55
  23. package/tests/client/array/array.copy-within.test.ripple +12 -12
  24. package/tests/client/array/array.derived.test.ripple +46 -46
  25. package/tests/client/array/array.iteration.test.ripple +10 -10
  26. package/tests/client/array/array.mutations.test.ripple +20 -20
  27. package/tests/client/array/array.to-methods.test.ripple +6 -6
  28. package/tests/client/async-suspend.test.ripple +5 -5
  29. package/tests/client/basic/basic.attributes.test.ripple +81 -81
  30. package/tests/client/basic/basic.collections.test.ripple +9 -9
  31. package/tests/client/basic/basic.components.test.ripple +28 -28
  32. package/tests/client/basic/basic.errors.test.ripple +46 -18
  33. package/tests/client/basic/basic.events.test.ripple +37 -37
  34. package/tests/client/basic/basic.get-set.test.ripple +6 -6
  35. package/tests/client/basic/basic.reactivity.test.ripple +58 -203
  36. package/tests/client/basic/basic.rendering.test.ripple +19 -19
  37. package/tests/client/basic/basic.utilities.test.ripple +3 -3
  38. package/tests/client/boundaries.test.ripple +12 -12
  39. package/tests/client/compiler/__snapshots__/compiler.assignments.test.ripple.snap +5 -5
  40. package/tests/client/compiler/compiler.assignments.test.ripple +19 -19
  41. package/tests/client/compiler/compiler.basic.test.ripple +46 -27
  42. package/tests/client/compiler/compiler.tracked-access.test.ripple +2 -2
  43. package/tests/client/composite/composite.dynamic-components.test.ripple +9 -9
  44. package/tests/client/composite/composite.props.test.ripple +14 -16
  45. package/tests/client/composite/composite.reactivity.test.ripple +69 -70
  46. package/tests/client/composite/composite.render.test.ripple +3 -3
  47. package/tests/client/computed-properties.test.ripple +4 -4
  48. package/tests/client/date.test.ripple +42 -42
  49. package/tests/client/dynamic-elements.test.ripple +44 -45
  50. package/tests/client/events.test.ripple +70 -70
  51. package/tests/client/for.test.ripple +25 -25
  52. package/tests/client/head.test.ripple +19 -19
  53. package/tests/client/html.test.ripple +3 -3
  54. package/tests/client/input-value.test.ripple +84 -84
  55. package/tests/client/lazy-destructuring.test.ripple +138 -26
  56. package/tests/client/map.test.ripple +16 -16
  57. package/tests/client/media-query.test.ripple +7 -7
  58. package/tests/client/portal.test.ripple +11 -11
  59. package/tests/client/ref.test.ripple +4 -4
  60. package/tests/client/return.test.ripple +52 -52
  61. package/tests/client/set.test.ripple +6 -6
  62. package/tests/client/svg.test.ripple +5 -5
  63. package/tests/client/switch.test.ripple +44 -44
  64. package/tests/client/try.test.ripple +5 -5
  65. package/tests/client/url/url.derived.test.ripple +6 -6
  66. package/tests/client/url-search-params/url-search-params.derived.test.ripple +8 -8
  67. package/tests/client/url-search-params/url-search-params.iteration.test.ripple +10 -10
  68. package/tests/client/url-search-params/url-search-params.mutation.test.ripple +10 -10
  69. package/tests/client/url-search-params/url-search-params.retrieval.test.ripple +18 -18
  70. package/tests/client/url-search-params/url-search-params.serialization.test.ripple +2 -2
  71. package/tests/hydration/compiled/client/events.js +25 -25
  72. package/tests/hydration/compiled/client/for.js +70 -66
  73. package/tests/hydration/compiled/client/head.js +25 -25
  74. package/tests/hydration/compiled/client/hmr.js +2 -2
  75. package/tests/hydration/compiled/client/html.js +3 -3
  76. package/tests/hydration/compiled/client/if-children.js +24 -24
  77. package/tests/hydration/compiled/client/if.js +18 -18
  78. package/tests/hydration/compiled/client/mixed-control-flow.js +9 -9
  79. package/tests/hydration/compiled/client/portal.js +3 -3
  80. package/tests/hydration/compiled/client/reactivity.js +16 -16
  81. package/tests/hydration/compiled/client/return.js +40 -40
  82. package/tests/hydration/compiled/client/switch.js +12 -12
  83. package/tests/hydration/compiled/server/events.js +19 -19
  84. package/tests/hydration/compiled/server/for.js +41 -41
  85. package/tests/hydration/compiled/server/head.js +26 -26
  86. package/tests/hydration/compiled/server/hmr.js +2 -2
  87. package/tests/hydration/compiled/server/html.js +2 -2
  88. package/tests/hydration/compiled/server/if-children.js +16 -16
  89. package/tests/hydration/compiled/server/if.js +11 -11
  90. package/tests/hydration/compiled/server/mixed-control-flow.js +6 -6
  91. package/tests/hydration/compiled/server/portal.js +2 -2
  92. package/tests/hydration/compiled/server/reactivity.js +16 -16
  93. package/tests/hydration/compiled/server/return.js +25 -25
  94. package/tests/hydration/compiled/server/switch.js +8 -8
  95. package/tests/hydration/components/events.ripple +25 -25
  96. package/tests/hydration/components/for.ripple +66 -66
  97. package/tests/hydration/components/head.ripple +16 -16
  98. package/tests/hydration/components/hmr.ripple +2 -2
  99. package/tests/hydration/components/html.ripple +3 -3
  100. package/tests/hydration/components/if-children.ripple +24 -24
  101. package/tests/hydration/components/if.ripple +18 -18
  102. package/tests/hydration/components/mixed-control-flow.ripple +9 -9
  103. package/tests/hydration/components/portal.ripple +3 -3
  104. package/tests/hydration/components/reactivity.ripple +16 -16
  105. package/tests/hydration/components/return.ripple +40 -40
  106. package/tests/hydration/components/switch.ripple +20 -20
  107. package/tests/server/await.test.ripple +3 -3
  108. package/tests/server/basic.attributes.test.ripple +34 -34
  109. package/tests/server/basic.components.test.ripple +10 -10
  110. package/tests/server/basic.test.ripple +38 -40
  111. package/tests/server/compiler.test.ripple +22 -0
  112. package/tests/server/composite.props.test.ripple +12 -14
  113. package/tests/server/dynamic-elements.test.ripple +15 -15
  114. package/tests/server/head.test.ripple +11 -11
  115. package/tests/server/lazy-destructuring.test.ripple +92 -13
  116. package/tsconfig.typecheck.json +4 -0
  117. package/types/index.d.ts +0 -19
  118. package/tests/client/__snapshots__/tracked-expression.test.ripple.snap +0 -34
  119. 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(@doubled)}</pre>
14
- <pre>{JSON.stringify(@filtered)}</pre>
15
- <pre>{@reduced}</pre>
16
- <pre>{@includes.toString()}</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(@concatenated)}</pre>
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(@sliced)}</pre>
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>{@found}</pre>
106
- <pre>{@foundIndex}</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>{@foundLast}</pre>
140
- <pre>{@foundLastIndex}</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>{@allEven.toString()}</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(@flattened)}</pre>
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(@flatMapped)}</pre>
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>{@joined}</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>{@lastIndex}</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>{@reduced}</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>{@hasEven.toString()}</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>{@localized}</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>{@string}</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(@withReplaced)}</pre>
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>{@atIndex2}</pre>
490
- <pre>{@atNegative1}</pre>
491
- <pre>{@atNegative2}</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(@entries)}</pre>
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(@keys)}</pre>
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(@values)}</pre>
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
- @sum = 0;
90
+ sum = 0;
91
91
  for (const item of items) {
92
92
  untrack(() => {
93
- @sum += item;
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>{@sum}</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>{@lastItem}</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>{@firstItem}</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>{@middleItem}</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>{@secondItem}</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>{@firstItem}</pre>
177
- <pre>{@lastItem}</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>{@secondItem}</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>{@firstItem}</pre>
296
- <pre>{@secondItem}</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>{@length}</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(@reversed)}</pre>
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(@sorted)}</pre>
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(@spliced)}</pre>
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({ count }: { count: any }) {
7
+ component Child({ countTracked }: { countTracked: any }) {
8
8
  await track(() => {
9
- @count;
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 {count} />
22
+ <Child {countTracked} />
23
23
  } pending {
24
24
  <div class="pending">{'pending...'}</div>
25
25
  }
26
26
 
27
- <button onClick={() => @count++}>{'Increment'}</button>
27
+ <button onClick={() => count++}>{'Increment'}</button>
28
28
  }
29
29
 
30
30
  render(App);