ripple 0.3.67 → 0.3.69

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 (182) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/package.json +3 -3
  3. package/src/jsx-runtime.d.ts +2 -2
  4. package/src/runtime/element.js +1 -1
  5. package/src/runtime/index-client.js +11 -11
  6. package/src/runtime/index-server.js +7 -4
  7. package/src/runtime/internal/client/bindings.js +1 -1
  8. package/src/runtime/internal/client/blocks.js +13 -4
  9. package/src/runtime/internal/client/component.js +55 -0
  10. package/src/runtime/internal/client/composite.js +4 -2
  11. package/src/runtime/internal/client/expression.js +65 -7
  12. package/src/runtime/internal/client/hmr.js +54 -43
  13. package/src/runtime/internal/client/index.js +5 -1
  14. package/src/runtime/internal/client/portal.js +70 -69
  15. package/src/runtime/internal/client/render.js +3 -0
  16. package/src/runtime/internal/server/index.js +92 -8
  17. package/tests/client/__snapshots__/html.test.tsrx.snap +3 -3
  18. package/tests/client/array/array.copy-within.test.tsrx +33 -31
  19. package/tests/client/array/array.derived.test.tsrx +186 -169
  20. package/tests/client/array/array.iteration.test.tsrx +40 -37
  21. package/tests/client/array/array.mutations.test.tsrx +113 -101
  22. package/tests/client/array/array.static.test.tsrx +119 -101
  23. package/tests/client/array/array.to-methods.test.tsrx +24 -21
  24. package/tests/client/async-suspend.test.tsrx +247 -246
  25. package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +0 -1
  26. package/tests/client/basic/basic.attributes.test.tsrx +428 -423
  27. package/tests/client/basic/basic.collections.test.tsrx +109 -102
  28. package/tests/client/basic/basic.components.test.tsrx +323 -205
  29. package/tests/client/basic/basic.errors.test.tsrx +91 -91
  30. package/tests/client/basic/basic.events.test.tsrx +114 -115
  31. package/tests/client/basic/basic.get-set.test.tsrx +97 -87
  32. package/tests/client/basic/basic.hmr.test.tsrx +19 -16
  33. package/tests/client/basic/basic.reactivity.test.tsrx +199 -191
  34. package/tests/client/basic/basic.rendering.test.tsrx +272 -182
  35. package/tests/client/basic/basic.styling.test.tsrx +23 -22
  36. package/tests/client/basic/basic.utilities.test.tsrx +10 -8
  37. package/tests/client/boundaries.test.tsrx +26 -26
  38. package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +5 -5
  39. package/tests/client/compiler/__snapshots__/compiler.assignments.test.tsrx.snap +5 -5
  40. package/tests/client/compiler/compiler.assignments.test.tsrx +77 -81
  41. package/tests/client/compiler/compiler.attributes.test.tsrx +15 -15
  42. package/tests/client/compiler/compiler.basic.test.tsrx +322 -314
  43. package/tests/client/compiler/compiler.regex.test.tsrx +44 -47
  44. package/tests/client/compiler/compiler.tracked-access.test.tsrx +38 -38
  45. package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
  46. package/tests/client/compiler/compiler.typescript.test.tsrx +2 -2
  47. package/tests/client/composite/composite.dynamic-components.test.tsrx +47 -48
  48. package/tests/client/composite/composite.generics.test.tsrx +168 -192
  49. package/tests/client/composite/composite.props.test.tsrx +97 -81
  50. package/tests/client/composite/composite.reactivity.test.tsrx +177 -147
  51. package/tests/client/composite/composite.render.test.tsrx +122 -105
  52. package/tests/client/computed-properties.test.tsrx +28 -28
  53. package/tests/client/context.test.tsrx +21 -21
  54. package/tests/client/css/global-additional-cases.test.tsrx +58 -58
  55. package/tests/client/css/global-advanced-selectors.test.tsrx +16 -16
  56. package/tests/client/css/global-at-rules.test.tsrx +10 -10
  57. package/tests/client/css/global-basic.test.tsrx +14 -14
  58. package/tests/client/css/global-classes-ids.test.tsrx +14 -14
  59. package/tests/client/css/global-combinators.test.tsrx +10 -10
  60. package/tests/client/css/global-complex-nesting.test.tsrx +14 -14
  61. package/tests/client/css/global-edge-cases.test.tsrx +18 -18
  62. package/tests/client/css/global-keyframes.test.tsrx +12 -12
  63. package/tests/client/css/global-nested.test.tsrx +10 -10
  64. package/tests/client/css/global-pseudo.test.tsrx +12 -12
  65. package/tests/client/css/global-scoping.test.tsrx +20 -20
  66. package/tests/client/css/style-identifier.test.tsrx +143 -291
  67. package/tests/client/date.test.tsrx +146 -133
  68. package/tests/client/dynamic-elements.test.tsrx +398 -365
  69. package/tests/client/events.test.tsrx +292 -290
  70. package/tests/client/for.test.tsrx +156 -153
  71. package/tests/client/head.test.tsrx +105 -96
  72. package/tests/client/html.test.tsrx +122 -26
  73. package/tests/client/input-value.test.tsrx +1361 -1314
  74. package/tests/client/lazy-array.test.tsrx +16 -13
  75. package/tests/client/lazy-destructuring.test.tsrx +257 -213
  76. package/tests/client/map.test.tsrx +65 -60
  77. package/tests/client/media-query.test.tsrx +22 -20
  78. package/tests/client/object.test.tsrx +87 -81
  79. package/tests/client/portal.test.tsrx +57 -51
  80. package/tests/client/ref.test.tsrx +233 -202
  81. package/tests/client/return.test.tsrx +71 -2560
  82. package/tests/client/set.test.tsrx +54 -45
  83. package/tests/client/svg.test.tsrx +216 -186
  84. package/tests/client/switch.test.tsrx +194 -193
  85. package/tests/client/track-async-hydration.test.tsrx +18 -14
  86. package/tests/client/tracked-index-access.test.tsrx +28 -18
  87. package/tests/client/try.test.tsrx +675 -548
  88. package/tests/client/tsx.test.tsrx +373 -311
  89. package/tests/client/typescript-generics.test.tsrx +145 -145
  90. package/tests/client/url/url.derived.test.tsrx +33 -28
  91. package/tests/client/url/url.parsing.test.tsrx +61 -51
  92. package/tests/client/url/url.partial-removal.test.tsrx +56 -48
  93. package/tests/client/url/url.reactivity.test.tsrx +142 -125
  94. package/tests/client/url/url.serialization.test.tsrx +13 -11
  95. package/tests/client/url-search-params/url-search-params.derived.test.tsrx +34 -29
  96. package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +25 -21
  97. package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +50 -45
  98. package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +111 -99
  99. package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +49 -43
  100. package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +14 -12
  101. package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +16 -14
  102. package/tests/hydration/basic.test.js +3 -3
  103. package/tests/hydration/compiled/client/basic.js +586 -651
  104. package/tests/hydration/compiled/client/composite.js +79 -104
  105. package/tests/hydration/compiled/client/events.js +140 -148
  106. package/tests/hydration/compiled/client/for.js +1005 -1018
  107. package/tests/hydration/compiled/client/head.js +124 -134
  108. package/tests/hydration/compiled/client/hmr.js +41 -48
  109. package/tests/hydration/compiled/client/html-in-template.js +38 -41
  110. package/tests/hydration/compiled/client/html.js +970 -1314
  111. package/tests/hydration/compiled/client/if-children.js +234 -249
  112. package/tests/hydration/compiled/client/if.js +182 -189
  113. package/tests/hydration/compiled/client/mixed-control-flow.js +347 -303
  114. package/tests/hydration/compiled/client/nested-control-flow.js +1084 -832
  115. package/tests/hydration/compiled/client/portal.js +65 -85
  116. package/tests/hydration/compiled/client/reactivity.js +84 -90
  117. package/tests/hydration/compiled/client/return.js +38 -1939
  118. package/tests/hydration/compiled/client/switch.js +218 -224
  119. package/tests/hydration/compiled/client/track-async-serialization.js +250 -259
  120. package/tests/hydration/compiled/client/try.js +123 -132
  121. package/tests/hydration/compiled/server/basic.js +773 -831
  122. package/tests/hydration/compiled/server/composite.js +166 -191
  123. package/tests/hydration/compiled/server/events.js +170 -184
  124. package/tests/hydration/compiled/server/for.js +851 -909
  125. package/tests/hydration/compiled/server/head.js +206 -216
  126. package/tests/hydration/compiled/server/hmr.js +64 -72
  127. package/tests/hydration/compiled/server/html-in-template.js +42 -76
  128. package/tests/hydration/compiled/server/html.js +1362 -1667
  129. package/tests/hydration/compiled/server/if-children.js +419 -445
  130. package/tests/hydration/compiled/server/if.js +194 -208
  131. package/tests/hydration/compiled/server/mixed-control-flow.js +249 -257
  132. package/tests/hydration/compiled/server/nested-control-flow.js +491 -515
  133. package/tests/hydration/compiled/server/portal.js +152 -160
  134. package/tests/hydration/compiled/server/reactivity.js +94 -106
  135. package/tests/hydration/compiled/server/return.js +28 -2172
  136. package/tests/hydration/compiled/server/switch.js +274 -286
  137. package/tests/hydration/compiled/server/track-async-serialization.js +340 -358
  138. package/tests/hydration/compiled/server/try.js +167 -185
  139. package/tests/hydration/components/basic.tsrx +320 -272
  140. package/tests/hydration/components/composite.tsrx +44 -32
  141. package/tests/hydration/components/events.tsrx +101 -91
  142. package/tests/hydration/components/for.tsrx +510 -452
  143. package/tests/hydration/components/head.tsrx +87 -80
  144. package/tests/hydration/components/hmr.tsrx +22 -17
  145. package/tests/hydration/components/html-in-template.tsrx +22 -17
  146. package/tests/hydration/components/html.tsrx +525 -443
  147. package/tests/hydration/components/if-children.tsrx +158 -148
  148. package/tests/hydration/components/if.tsrx +109 -95
  149. package/tests/hydration/components/mixed-control-flow.tsrx +100 -96
  150. package/tests/hydration/components/nested-control-flow.tsrx +215 -203
  151. package/tests/hydration/components/portal.tsrx +41 -34
  152. package/tests/hydration/components/reactivity.tsrx +37 -27
  153. package/tests/hydration/components/return.tsrx +12 -556
  154. package/tests/hydration/components/switch.tsrx +120 -114
  155. package/tests/hydration/components/track-async-serialization.tsrx +107 -91
  156. package/tests/hydration/components/try.tsrx +55 -40
  157. package/tests/hydration/html.test.js +4 -4
  158. package/tests/hydration/return.test.js +13 -532
  159. package/tests/server/await.test.tsrx +3 -3
  160. package/tests/server/basic.attributes.test.tsrx +264 -195
  161. package/tests/server/basic.components.test.tsrx +296 -169
  162. package/tests/server/basic.test.tsrx +300 -198
  163. package/tests/server/compiler.test.tsrx +62 -60
  164. package/tests/server/composite.props.test.tsrx +77 -63
  165. package/tests/server/composite.test.tsrx +168 -192
  166. package/tests/server/context.test.tsrx +18 -12
  167. package/tests/server/dynamic-elements.test.tsrx +197 -180
  168. package/tests/server/for.test.tsrx +85 -78
  169. package/tests/server/head.test.tsrx +50 -43
  170. package/tests/server/html-nesting-validation.test.tsrx +8 -8
  171. package/tests/server/if.test.tsrx +57 -51
  172. package/tests/server/lazy-destructuring.test.tsrx +366 -294
  173. package/tests/server/return.test.tsrx +76 -1355
  174. package/tests/server/streaming-ssr.test.tsrx +4 -75
  175. package/tests/server/style-identifier.test.tsrx +169 -148
  176. package/tests/server/switch.test.tsrx +91 -85
  177. package/tests/server/track-async-serialization.test.tsrx +105 -85
  178. package/tests/server/try.test.tsrx +374 -280
  179. package/tests/utils/compiler-compat-config.test.js +2 -2
  180. package/tests/utils/runtime-imports.test.js +10 -0
  181. package/types/index.d.ts +8 -0
  182. package/tests/client/__snapshots__/html.test.rsrx.snap +0 -40
@@ -2,25 +2,25 @@ import { flushSync, track } from 'ripple';
2
2
 
3
3
  describe('switch statements', () => {
4
4
  it('renders simple switch with literal cases', () => {
5
- component App() {
6
- let &[value] = track('b');
7
-
8
- <button onClick={() => (value = 'c')}>{'Change to C'}</button>
9
- <button onClick={() => (value = 'a')}>{'Change to A'}</button>
10
-
11
- switch (value) {
12
- case 'a':
13
- <div>{'Case A'}</div>
14
- break;
15
- case 'b':
16
- <div>{'Case B'}</div>
17
- break;
18
- case 'c':
19
- <div>{'Case C'}</div>
20
- break;
21
- default:
22
- <div>{'Default Case'}</div>
23
- }
5
+ function App() {
6
+ return <>
7
+ let &[value] = track('b');
8
+ <button onClick={() => (value = 'c')}>{'Change to C'}</button>
9
+ <button onClick={() => (value = 'a')}>{'Change to A'}</button>
10
+ switch (value) {
11
+ case 'a':
12
+ <div>{'Case A'}</div>
13
+ break;
14
+ case 'b':
15
+ <div>{'Case B'}</div>
16
+ break;
17
+ case 'c':
18
+ <div>{'Case C'}</div>
19
+ break;
20
+ default:
21
+ <div>{'Default Case'}</div>
22
+ }
23
+ </>;
24
24
  }
25
25
 
26
26
  render(App);
@@ -37,21 +37,21 @@ describe('switch statements', () => {
37
37
  });
38
38
 
39
39
  it('renders switch with reactive discriminant', () => {
40
- component App() {
41
- let &[count] = track(1);
42
-
43
- <button onClick={() => count++}>{'Increment'}</button>
44
-
45
- switch (count) {
46
- case 1:
47
- <div>{'Count is 1'}</div>
48
- break;
49
- case 2:
50
- <div>{'Count is 2'}</div>
51
- break;
52
- default:
53
- <div>{'Count is other'}</div>
54
- }
40
+ function App() {
41
+ return <>
42
+ let &[count] = track(1);
43
+ <button onClick={() => count++}>{'Increment'}</button>
44
+ switch (count) {
45
+ case 1:
46
+ <div>{'Count is 1'}</div>
47
+ break;
48
+ case 2:
49
+ <div>{'Count is 2'}</div>
50
+ break;
51
+ default:
52
+ <div>{'Count is other'}</div>
53
+ }
54
+ </>;
55
55
  }
56
56
 
57
57
  render(App);
@@ -69,15 +69,15 @@ describe('switch statements', () => {
69
69
  });
70
70
 
71
71
  it('renders switch with default clause only', () => {
72
- component App() {
73
- let &[value] = track('x');
74
-
75
- <button onClick={() => (value = 'y')}>{'Change Value'}</button>
76
-
77
- switch (value) {
78
- default:
79
- <div>{'Default for ' + value}</div>
80
- }
72
+ function App() {
73
+ return <>
74
+ let &[value] = track('x');
75
+ <button onClick={() => (value = 'y')}>{'Change Value'}</button>
76
+ switch (value) {
77
+ default:
78
+ <div>{'Default for ' + value}</div>
79
+ }
80
+ </>;
81
81
  }
82
82
 
83
83
  render(App);
@@ -90,23 +90,23 @@ describe('switch statements', () => {
90
90
  });
91
91
 
92
92
  it('renders switch using empty case fall-through', () => {
93
- component App() {
94
- let &[value] = track('a');
95
-
96
- <button onClick={() => (value = 'b')}>{'Change to B'}</button>
97
- <button onClick={() => (value = 'c')}>{'Change to C'}</button>
98
-
99
- switch (value) {
100
- case 'a':
101
- <div>{'Case A'}</div>
102
- break;
103
- case 'b':
104
- case 'c':
105
- <div>{'Case B or C'}</div>
106
- break;
107
- default:
108
- <div>{'Default Case'}</div>
109
- }
93
+ function App() {
94
+ return <>
95
+ let &[value] = track('a');
96
+ <button onClick={() => (value = 'b')}>{'Change to B'}</button>
97
+ <button onClick={() => (value = 'c')}>{'Change to C'}</button>
98
+ switch (value) {
99
+ case 'a':
100
+ <div>{'Case A'}</div>
101
+ break;
102
+ case 'b':
103
+ case 'c':
104
+ <div>{'Case B or C'}</div>
105
+ break;
106
+ default:
107
+ <div>{'Default Case'}</div>
108
+ }
109
+ </>;
110
110
  }
111
111
 
112
112
  render(App);
@@ -132,31 +132,31 @@ describe('switch statements', () => {
132
132
  });
133
133
 
134
134
  it('renders switch with template content and reacts to tracked changes', () => {
135
- component App() {
136
- let &[status] = track('active');
137
- let &[message] = track('');
138
-
139
- <button onClick={() => (status = 'pending')}>{'Pending'}</button>
140
- <button onClick={() => (status = 'completed')}>{'Completed'}</button>
141
- <button onClick={() => (status = 'error')}>{'Error'}</button>
142
-
143
- switch (status) {
144
- case 'active':
145
- message = 'Currently active.';
146
- <div>{'Status: ' + message}</div>
147
- break;
148
- case 'pending':
149
- message = 'Waiting for completion.';
150
- <div>{'Status: ' + message}</div>
151
- break;
152
- case 'completed':
153
- message = 'Task finished!';
154
- <div class="success">{'Status: ' + message}</div>
155
- break;
156
- default:
157
- message = 'An error occurred.';
158
- <div class="error">{'Status: ' + message}</div>
159
- }
135
+ function App() {
136
+ return <>
137
+ let &[status] = track('active');
138
+ let &[message] = track('');
139
+ <button onClick={() => (status = 'pending')}>{'Pending'}</button>
140
+ <button onClick={() => (status = 'completed')}>{'Completed'}</button>
141
+ <button onClick={() => (status = 'error')}>{'Error'}</button>
142
+ switch (status) {
143
+ case 'active':
144
+ message = 'Currently active.';
145
+ <div>{'Status: ' + message}</div>
146
+ break;
147
+ case 'pending':
148
+ message = 'Waiting for completion.';
149
+ <div>{'Status: ' + message}</div>
150
+ break;
151
+ case 'completed':
152
+ message = 'Task finished!';
153
+ <div class="success">{'Status: ' + message}</div>
154
+ break;
155
+ default:
156
+ message = 'An error occurred.';
157
+ <div class="error">{'Status: ' + message}</div>
158
+ }
159
+ </>;
160
160
  }
161
161
 
162
162
  render(App);
@@ -184,35 +184,37 @@ describe('switch statements', () => {
184
184
  it(
185
185
  'renders switch with multiple non-empty fall-through cases and reacts to tracked changes without recreating DOM unnecessarily',
186
186
  () => {
187
- component App() {
188
- let &[status] = track(0);
189
- <div>
190
- switch (status) {
191
- case -1:
192
- case 0:
193
- <p>{' Idle'}</p>
194
- case 1:
195
- <p>{' Loading'}</p>
196
- case 2:
197
- <p>{' Success'}</p>
198
- break;
199
- default:
200
- <p>{' Unknown status'}</p>
201
- <p>{' Unknown 2'}</p>
202
- case 3:
203
- <p>{' Error'}</p>
204
- <p>{' Error 2'}</p>
205
- <p>{' Error 3'}</p>
206
- break;
207
- }
208
- </div>
209
- <button
210
- onClick={() => {
211
- status = (status + 1) % 5;
212
- }}
213
- >
214
- {'Next Status'}
215
- </button>
187
+ function App() {
188
+ return <>
189
+ let &[status] = track(0);
190
+ <div>
191
+ switch (status) {
192
+ case -1:
193
+ case 0:
194
+ <p>{' Idle'}</p>
195
+ case 1:
196
+ <p>{' Loading'}</p>
197
+ case 2:
198
+ <p>{' Success'}</p>
199
+ break;
200
+ default:
201
+ <p>{' Unknown status'}</p>
202
+ <p>{' Unknown 2'}</p>
203
+ case 3:
204
+ <p>{' Error'}</p>
205
+ <p>{' Error 2'}</p>
206
+ <p>{' Error 3'}</p>
207
+ break;
208
+ }
209
+ </div>
210
+ <button
211
+ onClick={() => {
212
+ status = (status + 1) % 5;
213
+ }}
214
+ >
215
+ {'Next Status'}
216
+ </button>
217
+ </>;
216
218
  }
217
219
 
218
220
  render(App);
@@ -252,33 +254,33 @@ describe('switch statements', () => {
252
254
  it(
253
255
  'renders a fall-through default in the middle of switch cases and reacts to changes without recreating DOM unnecessarily',
254
256
  () => {
255
- component App() {
256
- let &[value] = track('x');
257
-
258
- <button onClick={() => (value = 'a')}>{'Set A'}</button>
259
- <button onClick={() => (value = 'b')}>{'Set B'}</button>
260
- <button onClick={() => (value = 'c')}>{'Set C'}</button>
261
- <button onClick={() => (value = 'x')}>{'Set X'}</button>
262
-
263
- <div>
264
- switch (value) {
265
- case 'a':
266
- <div>{' Case A'}</div>
267
- break;
268
- // NOTE: This should be the default in the middle of the cases
269
- // However, jsdom (and other node-based dom libs) has a bug
270
- // that breaks out of the switch even if the default doesn't have a break
271
- // The browser works correctly.
272
- // So, we're just using a defined case in the middle to simulate default.
273
- case 'x':
274
- <div>{' Default Case for ' + value}</div>
275
- case 'b':
276
- <div>{' Case B'}</div>
277
- break;
278
- case 'c':
279
- <div>{' Case C'}</div>
280
- }
281
- </div>
257
+ function App() {
258
+ return <>
259
+ let &[value] = track('x');
260
+ <button onClick={() => (value = 'a')}>{'Set A'}</button>
261
+ <button onClick={() => (value = 'b')}>{'Set B'}</button>
262
+ <button onClick={() => (value = 'c')}>{'Set C'}</button>
263
+ <button onClick={() => (value = 'x')}>{'Set X'}</button>
264
+ <div>
265
+ switch (value) {
266
+ case 'a':
267
+ <div>{' Case A'}</div>
268
+ break;
269
+ // NOTE: This should be the default in the middle of the cases
270
+ // However, jsdom (and other node-based dom libs) has a bug
271
+ // that breaks out of the switch even if the default doesn't have a break
272
+ // The browser works correctly.
273
+ // So, we're just using a defined case in the middle to simulate default.
274
+ case 'x':
275
+ <div>{' Default Case for ' + value}</div>
276
+ case 'b':
277
+ <div>{' Case B'}</div>
278
+ break;
279
+ case 'c':
280
+ <div>{' Case C'}</div>
281
+ }
282
+ </div>
283
+ </>;
282
284
  }
283
285
 
284
286
  render(App);
@@ -318,18 +320,19 @@ describe('switch statements', () => {
318
320
  );
319
321
 
320
322
  it('renders bare text nodes in switch fall-through cases without element wrappers', () => {
321
- component App() {
322
- let value = 'a';
323
-
324
- <div>
325
- <span>{'before'}</span>
326
- switch (value) {
327
- case 'a':
328
- {'Case A'}
329
- case 'b':
330
- {'Case B'}
331
- }
332
- </div>
323
+ function App() {
324
+ return <>
325
+ let value = 'a';
326
+ <div>
327
+ <span>{'before'}</span>
328
+ switch (value) {
329
+ case 'a':
330
+ {'Case A'}
331
+ case 'b':
332
+ {'Case B'}
333
+ }
334
+ </div>
335
+ </>;
333
336
  }
334
337
 
335
338
  render(App);
@@ -337,20 +340,21 @@ describe('switch statements', () => {
337
340
  });
338
341
 
339
342
  it('renders bare text nodes in switch cases without element wrappers', () => {
340
- component App() {
341
- let value = 'a';
342
-
343
- <div>
344
- <span>{'before'}</span>
345
- switch (value) {
346
- case 'a':
347
- {'Case A'}
348
- break;
349
- case 'b':
350
- {'Case B'}
351
- break;
352
- }
353
- </div>
343
+ function App() {
344
+ return <>
345
+ let value = 'a';
346
+ <div>
347
+ <span>{'before'}</span>
348
+ switch (value) {
349
+ case 'a':
350
+ {'Case A'}
351
+ break;
352
+ case 'b':
353
+ {'Case B'}
354
+ break;
355
+ }
356
+ </div>
357
+ </>;
354
358
  }
355
359
 
356
360
  render(App);
@@ -358,33 +362,30 @@ describe('switch statements', () => {
358
362
  });
359
363
 
360
364
  it('renders switch with block-scoped cases and break inside blocks', () => {
361
- component App() {
362
- let &[level] = track(1);
363
-
364
- <button
365
- onClick={() => {
366
- if (level === 1) level = 2;
367
- else if (level === 2) level = 3;
368
- else level = 1;
369
- }}
370
- >
371
- {'Toggle'}
372
- </button>
373
-
374
- switch (level) {
375
- case 1: {
376
- <div class="level">{'Level 1'}</div>
377
- break;
378
- }
379
- case 2: {
380
- <div class="level">{'Level 2'}</div>
381
- break;
382
- }
383
- case 3: {
384
- <div class="level">{'Level 3'}</div>
385
- break;
365
+ function App() {
366
+ return <>
367
+ let &[level] = track(1);
368
+ <button
369
+ onClick={() => {
370
+ if (level === 1) level = 2;
371
+ else if (level === 2) level = 3;
372
+ else level = 1;
373
+ }}
374
+ >
375
+ {'Toggle'}
376
+ </button>
377
+ switch (level) {
378
+ case 1:
379
+ <div class="level">{'Level 1'}</div>
380
+ break;
381
+ case 2:
382
+ <div class="level">{'Level 2'}</div>
383
+ break;
384
+ case 3:
385
+ <div class="level">{'Level 3'}</div>
386
+ break;
386
387
  }
387
- }
388
+ </>;
388
389
  }
389
390
 
390
391
  render(App);
@@ -5,13 +5,15 @@ describe('trackAsync hydration from serialized data (client)', () => {
5
5
  // This test verifies the client runtime can parse the serialized script tags
6
6
  // The full hydration round-trip is tested in hydration tests
7
7
 
8
- component App() {
9
- try {
10
- let &[data] = trackAsync(() => Promise.resolve('fallback'));
11
- <p class="result">{data}</p>
12
- } pending {
13
- <p class="loading">{'loading...'}</p>
14
- }
8
+ function App() {
9
+ return <>
10
+ try {
11
+ let &[data] = trackAsync(() => Promise.resolve('fallback'));
12
+ <p class="result">{data}</p>
13
+ } pending {
14
+ <p class="loading">{'loading...'}</p>
15
+ }
16
+ </>;
15
17
  }
16
18
 
17
19
  render(App);
@@ -29,13 +31,15 @@ describe('trackAsync hydration from serialized data (client)', () => {
29
31
  let resolve_fn: (value: number) => void;
30
32
  const promise = new Promise<number>((r) => (resolve_fn = r));
31
33
 
32
- component App() {
33
- try {
34
- let &[value] = trackAsync(() => promise);
35
- <span class="value">{value}</span>
36
- } pending {
37
- <span class="pending">{'waiting'}</span>
38
- }
34
+ function App() {
35
+ return <>
36
+ try {
37
+ let &[value] = trackAsync(() => promise);
38
+ <span class="value">{value}</span>
39
+ } pending {
40
+ <span class="pending">{'waiting'}</span>
41
+ }
42
+ </>;
39
43
  }
40
44
 
41
45
  render(App);
@@ -15,9 +15,11 @@ describe('client tracked numeric access', () => {
15
15
  it('throws when tracked values are accessed through numeric properties', () => {
16
16
  let value: any;
17
17
 
18
- component Test() {
19
- value = track(0);
20
- <div />
18
+ function Test() {
19
+ return <>
20
+ value = track(0);
21
+ <div />
22
+ </>;
21
23
  }
22
24
 
23
25
  render(Test);
@@ -32,9 +34,11 @@ describe('client tracked numeric access', () => {
32
34
  it('throws when derived values are accessed through numeric properties', () => {
33
35
  let value: any;
34
36
 
35
- component Test() {
36
- value = track(() => 1);
37
- <div />
37
+ function Test() {
38
+ return <>
39
+ value = track(() => 1);
40
+ <div />
41
+ </>;
38
42
  }
39
43
 
40
44
  render(Test);
@@ -50,10 +54,12 @@ describe('client tracked numeric access', () => {
50
54
  let value: any;
51
55
  let next: any;
52
56
 
53
- component Test() {
54
- value = track(0);
55
- next = track(1);
56
- <div />
57
+ function Test() {
58
+ return <>
59
+ value = track(0);
60
+ next = track(1);
61
+ <div />
62
+ </>;
57
63
  }
58
64
 
59
65
  render(Test);
@@ -72,10 +78,12 @@ describe('client tracked numeric access', () => {
72
78
  let value: any;
73
79
  let derived: any;
74
80
 
75
- component Test() {
76
- value = track(0);
77
- derived = track(() => value.value + 1);
78
- <div />
81
+ function Test() {
82
+ return <>
83
+ value = track(0);
84
+ derived = track(() => value.value + 1);
85
+ <div />
86
+ </>;
79
87
  }
80
88
 
81
89
  render(Test);
@@ -92,10 +100,12 @@ describe('client tracked numeric access', () => {
92
100
  let value: any;
93
101
  let derived: any;
94
102
 
95
- component Test() {
96
- value = track(0);
97
- derived = track(() => value.value + 1);
98
- <div />
103
+ function Test() {
104
+ return <>
105
+ value = track(0);
106
+ derived = track(() => value.value + 1);
107
+ <div />
108
+ </>;
99
109
  }
100
110
 
101
111
  render(Test);