ripple 0.3.72 → 0.3.76

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 (172) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +4 -10
  4. package/src/runtime/dynamic-client.js +33 -0
  5. package/src/runtime/dynamic-server.js +80 -0
  6. package/src/runtime/index-client.js +5 -13
  7. package/src/runtime/index-server.js +2 -0
  8. package/src/runtime/internal/client/blocks.js +6 -27
  9. package/src/runtime/internal/client/composite.js +11 -6
  10. package/src/runtime/internal/client/for.js +80 -5
  11. package/src/runtime/internal/client/index.js +0 -2
  12. package/src/runtime/internal/client/render.js +5 -2
  13. package/src/runtime/internal/client/types.d.ts +0 -10
  14. package/src/runtime/internal/server/index.js +8 -1
  15. package/tests/client/__snapshots__/computed-properties.test.tsrx.snap +8 -0
  16. package/tests/client/__snapshots__/for.test.tsrx.snap +22 -0
  17. package/tests/client/__snapshots__/html.test.tsrx.snap +4 -0
  18. package/tests/client/array/array.copy-within.test.tsrx +19 -19
  19. package/tests/client/array/array.derived.test.tsrx +97 -109
  20. package/tests/client/array/array.iteration.test.tsrx +28 -28
  21. package/tests/client/array/array.mutations.test.tsrx +68 -68
  22. package/tests/client/array/array.static.test.tsrx +82 -92
  23. package/tests/client/array/array.to-methods.test.tsrx +15 -15
  24. package/tests/client/async-suspend.test.tsrx +180 -179
  25. package/tests/client/basic/__snapshots__/basic.attributes.test.tsrx.snap +2 -0
  26. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +4 -0
  27. package/tests/client/basic/basic.attributes.test.tsrx +273 -317
  28. package/tests/client/basic/basic.collections.test.tsrx +55 -61
  29. package/tests/client/basic/basic.components.test.tsrx +198 -220
  30. package/tests/client/basic/basic.errors.test.tsrx +70 -76
  31. package/tests/client/basic/basic.events.test.tsrx +80 -85
  32. package/tests/client/basic/basic.get-set.test.tsrx +54 -64
  33. package/tests/client/basic/basic.hmr.test.tsrx +15 -19
  34. package/tests/client/basic/basic.reactivity.test.tsrx +121 -135
  35. package/tests/client/basic/basic.rendering.test.tsrx +273 -178
  36. package/tests/client/basic/basic.styling.test.tsrx +16 -14
  37. package/tests/client/basic/basic.utilities.test.tsrx +8 -10
  38. package/tests/client/boundaries.test.tsrx +18 -18
  39. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -76
  40. package/tests/client/compiler/compiler.attributes.test.tsrx +18 -14
  41. package/tests/client/compiler/compiler.basic.test.tsrx +357 -288
  42. package/tests/client/compiler/compiler.regex.test.tsrx +40 -44
  43. package/tests/client/compiler/compiler.tracked-access.test.tsrx +57 -38
  44. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  45. package/tests/client/compiler/compiler.typescript.test.tsrx +4 -3
  46. package/tests/client/composite/composite.dynamic-components.test.tsrx +62 -47
  47. package/tests/client/composite/composite.generics.test.tsrx +165 -167
  48. package/tests/client/composite/composite.props.test.tsrx +66 -74
  49. package/tests/client/composite/composite.reactivity.test.tsrx +132 -166
  50. package/tests/client/composite/composite.render.test.tsrx +92 -101
  51. package/tests/client/computed-properties.test.tsrx +14 -18
  52. package/tests/client/context.test.tsrx +14 -18
  53. package/tests/client/css/global-additional-cases.test.tsrx +493 -439
  54. package/tests/client/css/global-advanced-selectors.test.tsrx +169 -153
  55. package/tests/client/css/global-at-rules.test.tsrx +71 -66
  56. package/tests/client/css/global-basic.test.tsrx +105 -98
  57. package/tests/client/css/global-classes-ids.test.tsrx +128 -114
  58. package/tests/client/css/global-combinators.test.tsrx +83 -78
  59. package/tests/client/css/global-complex-nesting.test.tsrx +134 -120
  60. package/tests/client/css/global-edge-cases.test.tsrx +138 -120
  61. package/tests/client/css/global-keyframes.test.tsrx +108 -96
  62. package/tests/client/css/global-nested.test.tsrx +88 -78
  63. package/tests/client/css/global-pseudo.test.tsrx +104 -98
  64. package/tests/client/css/global-scoping.test.tsrx +145 -125
  65. package/tests/client/css/style-identifier.test.tsrx +65 -72
  66. package/tests/client/date.test.tsrx +83 -83
  67. package/tests/client/dynamic-elements.test.tsrx +318 -299
  68. package/tests/client/events.test.tsrx +252 -266
  69. package/tests/client/for.test.tsrx +120 -127
  70. package/tests/client/head.test.tsrx +74 -48
  71. package/tests/client/html.test.tsrx +37 -49
  72. package/tests/client/input-value.test.tsrx +1125 -1354
  73. package/tests/client/lazy-array.test.tsrx +10 -16
  74. package/tests/client/lazy-destructuring.test.tsrx +169 -221
  75. package/tests/client/map.test.tsrx +39 -41
  76. package/tests/client/media-query.test.tsrx +15 -19
  77. package/tests/client/object.test.tsrx +46 -56
  78. package/tests/client/portal.test.tsrx +31 -37
  79. package/tests/client/ref.test.tsrx +173 -193
  80. package/tests/client/return.test.tsrx +62 -37
  81. package/tests/client/set.test.tsrx +33 -33
  82. package/tests/client/svg.test.tsrx +197 -216
  83. package/tests/client/switch.test.tsrx +201 -191
  84. package/tests/client/track-async-hydration.test.tsrx +14 -18
  85. package/tests/client/tracked-index-access.test.tsrx +18 -28
  86. package/tests/client/try.test.tsrx +494 -619
  87. package/tests/client/tsx.test.tsrx +286 -292
  88. package/tests/client/typescript-generics.test.tsrx +121 -129
  89. package/tests/client/url/url.derived.test.tsrx +21 -25
  90. package/tests/client/url/url.parsing.test.tsrx +35 -35
  91. package/tests/client/url/url.partial-removal.test.tsrx +32 -32
  92. package/tests/client/url/url.reactivity.test.tsrx +68 -72
  93. package/tests/client/url/url.serialization.test.tsrx +8 -8
  94. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +21 -27
  95. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +16 -16
  96. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +37 -37
  97. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +56 -60
  98. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +32 -34
  99. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +9 -9
  100. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +10 -10
  101. package/tests/hydration/compiled/client/basic.js +390 -319
  102. package/tests/hydration/compiled/client/composite.js +52 -44
  103. package/tests/hydration/compiled/client/for.js +734 -604
  104. package/tests/hydration/compiled/client/head.js +183 -103
  105. package/tests/hydration/compiled/client/html.js +93 -86
  106. package/tests/hydration/compiled/client/if-children.js +95 -71
  107. package/tests/hydration/compiled/client/if.js +113 -89
  108. package/tests/hydration/compiled/client/mixed-control-flow.js +225 -209
  109. package/tests/hydration/compiled/client/nested-control-flow.js +94 -98
  110. package/tests/hydration/compiled/client/reactivity.js +26 -24
  111. package/tests/hydration/compiled/client/return.js +8 -42
  112. package/tests/hydration/compiled/client/switch.js +208 -173
  113. package/tests/hydration/compiled/client/track-async-serialization.js +176 -128
  114. package/tests/hydration/compiled/client/try.js +29 -21
  115. package/tests/hydration/compiled/server/basic.js +210 -221
  116. package/tests/hydration/compiled/server/composite.js +13 -14
  117. package/tests/hydration/compiled/server/for.js +427 -444
  118. package/tests/hydration/compiled/server/head.js +199 -189
  119. package/tests/hydration/compiled/server/html.js +33 -41
  120. package/tests/hydration/compiled/server/if-children.js +114 -117
  121. package/tests/hydration/compiled/server/if.js +77 -83
  122. package/tests/hydration/compiled/server/mixed-control-flow.js +145 -150
  123. package/tests/hydration/compiled/server/nested-control-flow.js +10 -0
  124. package/tests/hydration/compiled/server/reactivity.js +24 -22
  125. package/tests/hydration/compiled/server/return.js +6 -18
  126. package/tests/hydration/compiled/server/switch.js +179 -176
  127. package/tests/hydration/compiled/server/track-async-serialization.js +88 -70
  128. package/tests/hydration/compiled/server/try.js +31 -35
  129. package/tests/hydration/components/basic.tsrx +216 -258
  130. package/tests/hydration/components/composite.tsrx +32 -42
  131. package/tests/hydration/components/events.tsrx +81 -101
  132. package/tests/hydration/components/for.tsrx +270 -336
  133. package/tests/hydration/components/head.tsrx +43 -39
  134. package/tests/hydration/components/hmr.tsrx +16 -22
  135. package/tests/hydration/components/html-in-template.tsrx +15 -21
  136. package/tests/hydration/components/html.tsrx +442 -526
  137. package/tests/hydration/components/if-children.tsrx +107 -125
  138. package/tests/hydration/components/if.tsrx +68 -90
  139. package/tests/hydration/components/mixed-control-flow.tsrx +65 -72
  140. package/tests/hydration/components/nested-control-flow.tsrx +202 -216
  141. package/tests/hydration/components/portal.tsrx +33 -41
  142. package/tests/hydration/components/reactivity.tsrx +26 -34
  143. package/tests/hydration/components/return.tsrx +4 -6
  144. package/tests/hydration/components/switch.tsrx +73 -78
  145. package/tests/hydration/components/track-async-serialization.tsrx +83 -93
  146. package/tests/hydration/components/try.tsrx +37 -51
  147. package/tests/hydration/switch.test.js +8 -8
  148. package/tests/server/await.test.tsrx +3 -3
  149. package/tests/server/basic.attributes.test.tsrx +117 -162
  150. package/tests/server/basic.components.test.tsrx +164 -194
  151. package/tests/server/basic.test.tsrx +299 -199
  152. package/tests/server/compiler.test.tsrx +142 -72
  153. package/tests/server/composite.props.test.tsrx +54 -58
  154. package/tests/server/composite.test.tsrx +165 -167
  155. package/tests/server/context.test.tsrx +13 -17
  156. package/tests/server/dynamic-elements.test.tsrx +147 -148
  157. package/tests/server/for.test.tsrx +115 -84
  158. package/tests/server/head.test.tsrx +54 -31
  159. package/tests/server/html-nesting-validation.test.tsrx +16 -8
  160. package/tests/server/if.test.tsrx +49 -59
  161. package/tests/server/lazy-destructuring.test.tsrx +288 -366
  162. package/tests/server/return.test.tsrx +58 -36
  163. package/tests/server/streaming-ssr.test.tsrx +4 -4
  164. package/tests/server/style-identifier.test.tsrx +61 -69
  165. package/tests/server/switch.test.tsrx +89 -97
  166. package/tests/server/track-async-serialization.test.tsrx +85 -103
  167. package/tests/server/try.test.tsrx +275 -360
  168. package/tests/utils/ref-types.test.js +72 -0
  169. package/tests/utils/vite-plugin-config.test.js +41 -74
  170. package/types/index.d.ts +29 -4
  171. package/src/runtime/internal/client/compat.js +0 -40
  172. package/tests/utils/compiler-compat-config.test.js +0 -38
@@ -2,11 +2,9 @@ import { effect, flushSync, track, untrack } from 'ripple';
2
2
 
3
3
  describe('basic client > tracked value access', () => {
4
4
  it('gets tracked value', () => {
5
- function Test() {
6
- return <>
7
- let count = track(0);
8
- <div>{count.value}</div>
9
- </>;
5
+ function Test() @{
6
+ let count = track(0);
7
+ <div>{count.value}</div>
10
8
  }
11
9
 
12
10
  render(Test);
@@ -16,12 +14,12 @@ describe('basic client > tracked value access', () => {
16
14
  });
17
15
 
18
16
  it('gets tracked value after mutation', () => {
19
- function Test() {
20
- return <>
21
- let &[count] = track(0);
17
+ function Test() @{
18
+ let &[count] = track(0);
19
+ <>
22
20
  <p>{count}</p>
23
21
  <button onClick={() => count++}>{'increment'}</button>
24
- </>;
22
+ </>
25
23
  }
26
24
 
27
25
  render(Test);
@@ -37,9 +35,9 @@ describe('basic client > tracked value access', () => {
37
35
  });
38
36
 
39
37
  it('gets tracked value after multiple mutations', () => {
40
- function Test() {
41
- return <>
42
- let &[count] = track(0);
38
+ function Test() @{
39
+ let &[count] = track(0);
40
+ <>
43
41
  <p>{count}</p>
44
42
  <button
45
43
  onClick={() => {
@@ -47,10 +45,8 @@ describe('basic client > tracked value access', () => {
47
45
  count++;
48
46
  count++;
49
47
  }}
50
- >
51
- {'increment'}
52
- </button>
53
- </>;
48
+ >{'increment'}</button>
49
+ </>
54
50
  }
55
51
 
56
52
  render(Test);
@@ -66,12 +62,12 @@ describe('basic client > tracked value access', () => {
66
62
  });
67
63
 
68
64
  it('sets tracked value', () => {
69
- function Test() {
70
- return <>
71
- let count = track(0);
65
+ function Test() @{
66
+ let count = track(0);
67
+ <>
72
68
  <p>{count.value}</p>
73
69
  <button onClick={() => (count.value = 10)}>{'set to 10'}</button>
74
- </>;
70
+ </>
75
71
  }
76
72
 
77
73
  render(Test);
@@ -87,9 +83,9 @@ describe('basic client > tracked value access', () => {
87
83
  });
88
84
 
89
85
  it('sets tracked value multiple times', () => {
90
- function Test() {
91
- return <>
92
- let count = track(0);
86
+ function Test() @{
87
+ let count = track(0);
88
+ <>
93
89
  <p>{count.value}</p>
94
90
  <button
95
91
  onClick={() => {
@@ -97,10 +93,8 @@ describe('basic client > tracked value access', () => {
97
93
  count.value = 15;
98
94
  count.value = 25;
99
95
  }}
100
- >
101
- {'set multiple times'}
102
- </button>
103
- </>;
96
+ >{'set multiple times'}</button>
97
+ </>
104
98
  }
105
99
 
106
100
  render(Test);
@@ -116,12 +110,12 @@ describe('basic client > tracked value access', () => {
116
110
  });
117
111
 
118
112
  it('sets tracked value based on previous value', () => {
119
- function Test() {
120
- return <>
121
- let count = track(0);
113
+ function Test() @{
114
+ let count = track(0);
115
+ <>
122
116
  <p>{count.value}</p>
123
117
  <button onClick={() => (count.value = count.value + 10)}>{'add 10'}</button>
124
- </>;
118
+ </>
125
119
  }
126
120
 
127
121
  render(Test);
@@ -143,9 +137,9 @@ describe('basic client > tracked value access', () => {
143
137
  });
144
138
 
145
139
  it('sets tracked value multiple times based on previous value', () => {
146
- function Test() {
147
- return <>
148
- let count = track(0);
140
+ function Test() @{
141
+ let count = track(0);
142
+ <>
149
143
  <p>{count.value}</p>
150
144
  <button
151
145
  onClick={() => {
@@ -153,10 +147,8 @@ describe('basic client > tracked value access', () => {
153
147
  count.value = count.value + 15;
154
148
  count.value = count.value + 25;
155
149
  }}
156
- >
157
- {'add multiple times'}
158
- </button>
159
- </>;
150
+ >{'add multiple times'}</button>
151
+ </>
160
152
  }
161
153
 
162
154
  render(Test);
@@ -182,11 +174,9 @@ describe('basic client > tracked value access', () => {
182
174
  return track(0);
183
175
  }
184
176
 
185
- function Test() {
186
- return <>
187
- let count = store();
188
- <p>{count.value}</p>
189
- </>;
177
+ function Test() @{
178
+ let count = store();
179
+ <p>{count.value}</p>
190
180
  }
191
181
 
192
182
  render(Test);
@@ -200,12 +190,12 @@ describe('basic client > tracked value access', () => {
200
190
  return track(0);
201
191
  }
202
192
 
203
- function Test() {
204
- return <>
205
- let count = store();
193
+ function Test() @{
194
+ let count = store();
195
+ <>
206
196
  <p>{count.value}</p>
207
197
  <button onClick={() => (count.value = 50)}>{'set to 50'}</button>
208
- </>;
198
+ </>
209
199
  }
210
200
 
211
201
  render(Test);
@@ -221,16 +211,16 @@ describe('basic client > tracked value access', () => {
221
211
  });
222
212
 
223
213
  it('works with effects', () => {
224
- function Test() {
225
- return <>
226
- let count = track(0);
227
- let double = track(0);
228
- effect(() => {
229
- double.value = count.value * 2;
230
- });
214
+ function Test() @{
215
+ let count = track(0);
216
+ let double = track(0);
217
+ effect(() => {
218
+ double.value = count.value * 2;
219
+ });
220
+ <>
231
221
  <p>{double.value}</p>
232
222
  <button onClick={() => (count.value = count.value + 1)}>{'increment'}</button>
233
- </>;
223
+ </>
234
224
  }
235
225
 
236
226
  render(Test);
@@ -251,18 +241,18 @@ describe('basic client > tracked value access', () => {
251
241
  });
252
242
 
253
243
  it('works with effects and untrack', () => {
254
- function Test() {
255
- return <>
256
- let count = track(0);
257
- let double = track(0);
258
- effect(() => {
259
- untrack(() => {
260
- double.value = count.value * 2;
261
- });
244
+ function Test() @{
245
+ let count = track(0);
246
+ let double = track(0);
247
+ effect(() => {
248
+ untrack(() => {
249
+ double.value = count.value * 2;
262
250
  });
251
+ });
252
+ <>
263
253
  <p>{double.value}</p>
264
254
  <button onClick={() => (count.value = count.value + 1)}>{'increment'}</button>
265
- </>;
255
+ </>
266
256
  }
267
257
 
268
258
  render(Test);
@@ -19,8 +19,8 @@ describe('basic client > hmr', () => {
19
19
  });
20
20
 
21
21
  it('removes DOM when an HMR-wrapped root is unmounted', () => {
22
- function App() {
23
- return <><div class="hmr-root">{'hmr root'}</div></>;
22
+ function App() @{
23
+ <div class="hmr-root">{'hmr root'}</div>
24
24
  }
25
25
 
26
26
  const cleanup = mount(hmr(App), { target: container });
@@ -37,19 +37,17 @@ describe('basic client > hmr', () => {
37
37
  it('runs child teardowns when an HMR-wrapped root is unmounted', () => {
38
38
  let teardown_count = 0;
39
39
 
40
- function Child() {
41
- return <>
42
- effect(() => {
43
- return () => {
44
- teardown_count++;
45
- };
46
- });
47
- <span class="hmr-child">{'child'}</span>
48
- </>;
40
+ function Child() @{
41
+ effect(() => {
42
+ return () => {
43
+ teardown_count++;
44
+ };
45
+ });
46
+ <span class="hmr-child">{'child'}</span>
49
47
  }
50
48
 
51
- function App() {
52
- return <><Child /></>;
49
+ function App() @{
50
+ <Child />
53
51
  }
54
52
 
55
53
  const cleanup = mount(hmr(App), { target: container });
@@ -76,12 +74,10 @@ describe('basic client > hmr', () => {
76
74
  };
77
75
 
78
76
  try {
79
- function App() {
80
- return <>
81
- <div class="owned-root">
82
- <span>{'child'}</span>
83
- </div>
84
- </>;
77
+ function App() @{
78
+ <div class="owned-root">
79
+ <span>{'child'}</span>
80
+ </div>
85
81
  }
86
82
 
87
83
  const cleanup = mount(App, { target: container });
@@ -3,37 +3,31 @@ import { effect, flushSync, track, untrack } from 'ripple';
3
3
 
4
4
  describe('basic client > reactivity', () => {
5
5
  it('renders multiple reactive lexical blocks', () => {
6
- function Basic() {
7
- return <>
6
+ function Basic() @{
7
+ let obj = {
8
+ count: track(0),
9
+ };
10
+ let b = {
11
+ count: track(0),
12
+ };
13
+ <>
8
14
  <div>
9
- let obj = {
10
- count: track(0),
11
- };
12
-
13
15
  <span>{obj.count.value}</span>
14
16
  </div>
15
17
  <div>
16
- let b = {
17
- count: track(0),
18
- };
19
-
20
18
  <button
21
19
  onClick={() => {
22
20
  b.count.value--;
23
21
  }}
24
- >
25
- {'-'}
26
- </button>
22
+ >{'-'}</button>
27
23
  <span class="count">{b.count.value}</span>
28
24
  <button
29
25
  onClick={() => {
30
26
  b.count.value++;
31
27
  }}
32
- >
33
- {'+'}
34
- </button>
28
+ >{'+'}</button>
35
29
  </div>
36
- </>;
30
+ </>
37
31
  }
38
32
  render(Basic);
39
33
 
@@ -51,38 +45,32 @@ describe('basic client > reactivity', () => {
51
45
  });
52
46
 
53
47
  it('renders multiple reactive lexical blocks with complexity', () => {
54
- function Basic() {
55
- return <>
56
- const count = 'count';
48
+ function Basic() @{
49
+ const count = 'count';
50
+ let obj = {
51
+ count: track(0),
52
+ };
53
+ let b = {
54
+ count: track(0),
55
+ };
56
+ <>
57
57
  <div>
58
- let obj = {
59
- count: track(0),
60
- };
61
-
62
58
  <span>{obj[count].value}</span>
63
59
  </div>
64
60
  <div>
65
- let b = {
66
- count: track(0),
67
- };
68
-
69
61
  <button
70
62
  onClick={() => {
71
63
  b[count].value--;
72
64
  }}
73
- >
74
- {'-'}
75
- </button>
65
+ >{'-'}</button>
76
66
  <span class="count">{b[count].value}</span>
77
67
  <button
78
68
  onClick={() => {
79
69
  b[count].value++;
80
70
  }}
81
- >
82
- {'+'}
83
- </button>
71
+ >{'+'}</button>
84
72
  </div>
85
- </>;
73
+ </>
86
74
  }
87
75
  render(Basic);
88
76
 
@@ -100,20 +88,22 @@ describe('basic client > reactivity', () => {
100
88
  });
101
89
 
102
90
  it('renders with computed reactive state', () => {
103
- function Basic() {
104
- return <>
105
- let &[count] = track(5);
91
+ function Basic() @{
92
+ let &[count] = track(5);
93
+ <>
106
94
  <div class="count">{count}</div>
107
- <div class="doubled">{count * 2}</div>
108
- <div class="is-even">{count % 2 === 0 ? 'Even' : 'Odd'}</div>
95
+ <div class="doubled">
96
+ {count * 2}
97
+ </div>
98
+ <div class="is-even">
99
+ {count % 2 === 0 ? 'Even' : 'Odd'}
100
+ </div>
109
101
  <button
110
102
  onClick={() => {
111
103
  count++;
112
104
  }}
113
- >
114
- {'Increment'}
115
- </button>
116
- </>;
105
+ >{'Increment'}</button>
106
+ </>
117
107
  }
118
108
 
119
109
  render(Basic);
@@ -138,12 +128,26 @@ describe('basic client > reactivity', () => {
138
128
  it('basic reactivity with standard arrays should work', () => {
139
129
  let logs: string[] = [];
140
130
 
141
- function App() {
142
- return <>
143
- let first = track(0);
144
- let second = track(0);
145
- const arr = [first, second];
146
- const total = track(() => arr.reduce((a, b) => a + b.value, 0));
131
+ function App() @{
132
+ let first = track(0);
133
+ let second = track(0);
134
+ const arr = [first, second];
135
+ const total = track(() => arr.reduce((a, b) => a + b.value, 0));
136
+ effect(() => {
137
+ let _arr: number[] = [];
138
+
139
+ arr.forEach((item) => {
140
+ _arr.push(item.value);
141
+ });
142
+
143
+ logs.push(_arr.join(', '));
144
+ });
145
+ effect(() => {
146
+ if (arr.map((a) => a.value).includes(1)) {
147
+ logs.push('arr includes 1');
148
+ }
149
+ });
150
+ <>
147
151
  <button
148
152
  onClick={() => {
149
153
  first.value++;
@@ -158,25 +162,19 @@ describe('basic client > reactivity', () => {
158
162
  >
159
163
  {'second: ' + second.value}
160
164
  </button>
161
- effect(() => {
162
- let _arr: number[] = [];
163
-
164
- arr.forEach((item) => {
165
- _arr.push(item.value);
166
- });
167
-
168
- logs.push(_arr.join(', '));
169
- });
170
- effect(() => {
171
- if (arr.map((a) => a.value).includes(1)) {
172
- logs.push('arr includes 1');
173
- }
174
- });
175
- <div>{'Sum: ' + total.value}</div>
176
- <div>{'Comma Separated: ' + arr.map((a) => a.value).join(', ')}</div>
177
- <div>{'Number to string: ' + arr.map((a) => String(a.value))}</div>
178
- <div>{'Even numbers: ' + arr.map((a) => a.value).filter((a) => a % 2 === 0)}</div>
179
- </>;
165
+ <div>
166
+ {'Sum: ' + total.value}
167
+ </div>
168
+ <div>
169
+ {'Comma Separated: ' + arr.map((a) => a.value).join(', ')}
170
+ </div>
171
+ <div>
172
+ {'Number to string: ' + arr.map((a) => String(a.value))}
173
+ </div>
174
+ <div>
175
+ {'Even numbers: ' + arr.map((a) => a.value).filter((a) => a % 2 === 0)}
176
+ </div>
177
+ </>
180
178
  }
181
179
 
182
180
  render(App);
@@ -211,18 +209,16 @@ describe('basic client > reactivity', () => {
211
209
  });
212
210
 
213
211
  it('uses track get and set where both mutate value', () => {
214
- function App() {
215
- return <>
216
- let &[count] = track(0, (v) => v + 1, (v) => v * 2);
212
+ function App() @{
213
+ let &[count] = track(0, (v) => v + 1, (v) => v * 2);
214
+ <>
217
215
  <div class="count">{count}</div>
218
216
  <button
219
217
  onClick={() => {
220
218
  count++;
221
219
  }}
222
- >
223
- {'Increment'}
224
- </button>
225
- </>;
220
+ >{'Increment'}</button>
221
+ </>
226
222
  }
227
223
 
228
224
  render(App);
@@ -238,18 +234,16 @@ describe('basic client > reactivity', () => {
238
234
  });
239
235
 
240
236
  it('uses track get and set where set only mutates value', () => {
241
- function App() {
242
- return <>
243
- let &[count] = track(1, (v) => v, (v) => v * 2);
237
+ function App() @{
238
+ let &[count] = track(1, (v) => v, (v) => v * 2);
239
+ <>
244
240
  <div class="count">{count}</div>
245
241
  <button
246
242
  onClick={() => {
247
243
  count++;
248
244
  }}
249
- >
250
- {'Increment'}
251
- </button>
252
- </>;
245
+ >{'Increment'}</button>
246
+ </>
253
247
  }
254
248
 
255
249
  render(App);
@@ -265,18 +259,16 @@ describe('basic client > reactivity', () => {
265
259
  });
266
260
 
267
261
  it('uses track get and set where get only mutates value', () => {
268
- function App() {
269
- return <>
270
- let &[count] = track(0, (v) => v + 1, (v) => v);
262
+ function App() @{
263
+ let &[count] = track(0, (v) => v + 1, (v) => v);
264
+ <>
271
265
  <div class="count">{count}</div>
272
266
  <button
273
267
  onClick={() => {
274
268
  count++;
275
269
  }}
276
- >
277
- {'Increment'}
278
- </button>
279
- </>;
270
+ >{'Increment'}</button>
271
+ </>
280
272
  }
281
273
 
282
274
  render(App);
@@ -294,20 +286,18 @@ describe('basic client > reactivity', () => {
294
286
  it('passes in next and prev to track set function', () => {
295
287
  let logs: number[] = [];
296
288
 
297
- function App() {
298
- return <>
299
- let &[count] = track(0, (v) => v, (next, prev) => {
300
- logs.push(prev, next);
301
- return next;
302
- });
289
+ function App() @{
290
+ let &[count] = track(0, (v) => v, (next, prev) => {
291
+ logs.push(prev, next);
292
+ return next;
293
+ });
294
+ <>
303
295
  <button
304
296
  onClick={() => {
305
297
  count++;
306
298
  }}
307
- >
308
- {'Increment'}
309
- </button>
310
- </>;
299
+ >{'Increment'}</button>
300
+ </>
311
301
  }
312
302
 
313
303
  render(App);
@@ -320,15 +310,13 @@ describe('basic client > reactivity', () => {
320
310
  });
321
311
 
322
312
  it('doesn\'t error on mutating a tracked variable in track() setter', () => {
323
- function Basic() {
324
- return <>
325
- let &[count] = track(0);
326
- const &[doubled] = track(0, undefined, (value) => {
327
- count += value;
328
- return value;
329
- });
330
- <p>{doubled}</p>
331
- </>;
313
+ function Basic() @{
314
+ let &[count] = track(0);
315
+ const &[doubled] = track(0, undefined, (value) => {
316
+ count += value;
317
+ return value;
318
+ });
319
+ <p>{doubled}</p>
332
320
  }
333
321
 
334
322
  render(Basic);
@@ -339,13 +327,12 @@ describe('basic client > reactivity', () => {
339
327
  it('unwraps tracked values inside effect', () => {
340
328
  let state: { count?: number } = {};
341
329
 
342
- function Basic() {
343
- return <>
344
- let &[count] = track(0);
345
- effect(() => {
346
- state.count = count;
347
- });
348
- </>;
330
+ function Basic() @{
331
+ let &[count] = track(0);
332
+ effect(() => {
333
+ state.count = count;
334
+ });
335
+ <></>
349
336
  }
350
337
 
351
338
  render(Basic);
@@ -364,20 +351,19 @@ describe('basic client > reactivity', () => {
364
351
  finalValue?: number;
365
352
  } = {};
366
353
 
367
- function Basic() {
368
- return <>
369
- let &[count] = track(5);
370
- effect(() => {
371
- untrack(() => {
372
- state.initialValue = count;
373
- state.preIncrement = ++count;
374
- state.postIncrement = count++;
375
- state.preDecrement = --count;
376
- state.postDecrement = count--;
377
- state.finalValue = count;
378
- });
354
+ function Basic() @{
355
+ let &[count] = track(5);
356
+ effect(() => {
357
+ untrack(() => {
358
+ state.initialValue = count;
359
+ state.preIncrement = ++count;
360
+ state.postIncrement = count++;
361
+ state.preDecrement = --count;
362
+ state.postDecrement = count--;
363
+ state.finalValue = count;
379
364
  });
380
- </>;
365
+ });
366
+ <></>
381
367
  }
382
368
 
383
369
  render(Basic);
@@ -392,12 +378,12 @@ describe('basic client > reactivity', () => {
392
378
  });
393
379
 
394
380
  it('returns the same tracked object if plain track is called with a tracked object', () => {
395
- function App() {
396
- return <>
397
- const t = track({ a: 1, b: 2, c: 3 });
398
- const doublet = track(t);
399
- <pre>{t === doublet}</pre>
400
- </>;
381
+ function App() @{
382
+ const t = track({ a: 1, b: 2, c: 3 });
383
+ const doublet = track(t);
384
+ <pre>
385
+ {t === doublet}
386
+ </pre>
401
387
  }
402
388
 
403
389
  render(App);