ripple 0.3.68 → 0.3.70

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 +126 -259
  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 -131
  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
@@ -3,18 +3,19 @@ import { flushSync, track } from 'ripple';
3
3
 
4
4
  describe('lazy destructuring', () => {
5
5
  it('supports tracked value getter and setter', () => {
6
- component Test() {
7
- let count = track(1);
8
- let doubled = track(() => count.value * 2);
9
-
10
- <div>{`${count.value}-${doubled.value}`}</div>
11
- <button
12
- onClick={() => {
13
- count.value = 5;
14
- }}
15
- >
16
- {'set'}
17
- </button>
6
+ function Test() {
7
+ return <>
8
+ let count = track(1);
9
+ let doubled = track(() => count.value * 2);
10
+ <div>{`${count.value}-${doubled.value}`}</div>
11
+ <button
12
+ onClick={() => {
13
+ count.value = 5;
14
+ }}
15
+ >
16
+ {'set'}
17
+ </button>
18
+ </>;
18
19
  }
19
20
 
20
21
  render(Test);
@@ -25,23 +26,24 @@ describe('lazy destructuring', () => {
25
26
  });
26
27
 
27
28
  it('lazily accesses object properties with const', () => {
28
- component Inner(&{ a, b }: { a: number; b: string }) {
29
- <pre>{`${a}-${b}`}</pre>
30
- }
31
-
32
- component Test() {
33
- let &[a] = track(1);
34
- let &[b] = track('hello');
35
-
36
- <Inner {a} {b} />
37
- <button
38
- onClick={() => {
39
- a = 2;
40
- b = 'world';
41
- }}
42
- >
43
- {'update'}
44
- </button>
29
+ function Inner(&{ a, b }: { a: number; b: string }) {
30
+ return <><pre>{`${a}-${b}`}</pre></>;
31
+ }
32
+
33
+ function Test() {
34
+ return <>
35
+ let &[a] = track(1);
36
+ let &[b] = track('hello');
37
+ <Inner {a} {b} />
38
+ <button
39
+ onClick={() => {
40
+ a = 2;
41
+ b = 'world';
42
+ }}
43
+ >
44
+ {'update'}
45
+ </button>
46
+ </>;
45
47
  }
46
48
 
47
49
  render(Test);
@@ -52,23 +54,24 @@ describe('lazy destructuring', () => {
52
54
  });
53
55
 
54
56
  it('lazily accesses array elements with const', () => {
55
- component Inner(&{ first, second }: { first: number; second: number }) {
56
- <pre>{`${first}-${second}`}</pre>
57
- }
58
-
59
- component Test() {
60
- let &[first] = track(10);
61
- let &[second] = track(20);
62
-
63
- <Inner {first} {second} />
64
- <button
65
- onClick={() => {
66
- first = 30;
67
- second = 40;
68
- }}
69
- >
70
- {'update'}
71
- </button>
57
+ function Inner(&{ first, second }: { first: number; second: number }) {
58
+ return <><pre>{`${first}-${second}`}</pre></>;
59
+ }
60
+
61
+ function Test() {
62
+ return <>
63
+ let &[first] = track(10);
64
+ let &[second] = track(20);
65
+ <Inner {first} {second} />
66
+ <button
67
+ onClick={() => {
68
+ first = 30;
69
+ second = 40;
70
+ }}
71
+ >
72
+ {'update'}
73
+ </button>
74
+ </>;
72
75
  }
73
76
 
74
77
  render(Test);
@@ -79,12 +82,12 @@ describe('lazy destructuring', () => {
79
82
  });
80
83
 
81
84
  it('preserves numeric member access on lazy array value bindings', () => {
82
- component Child({ pair: &[first] }: { pair: [{ 0: string }] }) {
83
- <pre>{first[0]}</pre>
85
+ function Child({ pair: &[first] }: { pair: [{ 0: string }] }) {
86
+ return <><pre>{first[0]}</pre></>;
84
87
  }
85
88
 
86
- component Test() {
87
- <Child pair={[{ 0: 'x' }]} />
89
+ function Test() {
90
+ return <><Child pair={[{ 0: 'x' }]} /></>;
88
91
  }
89
92
 
90
93
  render(Test);
@@ -92,10 +95,12 @@ describe('lazy destructuring', () => {
92
95
  });
93
96
 
94
97
  it('supports default values in lazy object destructuring', () => {
95
- component Test() {
96
- const obj: { a: number; b?: number } = { a: 5 };
97
- const &{ a, b = 99 } = obj;
98
- <pre>{`${a}-${b}`}</pre>
98
+ function Test() {
99
+ return <>
100
+ const obj: { a: number; b?: number } = { a: 5 };
101
+ const &{ a, b = 99 } = obj;
102
+ <pre>{`${a}-${b}`}</pre>
103
+ </>;
99
104
  }
100
105
 
101
106
  render(Test);
@@ -103,12 +108,12 @@ describe('lazy destructuring', () => {
103
108
  });
104
109
 
105
110
  it('supports lazy destructuring in component params', () => {
106
- component Inner(&{ name, age }: { name: string; age: number }) {
107
- <pre>{`${name}-${age}`}</pre>
111
+ function Inner(&{ name, age }: { name: string; age: number }) {
112
+ return <><pre>{`${name}-${age}`}</pre></>;
108
113
  }
109
114
 
110
- component Test() {
111
- <Inner name="Alice" age={30} />
115
+ function Test() {
116
+ return <><Inner name="Alice" age={30} /></>;
112
117
  }
113
118
 
114
119
  render(Test);
@@ -116,21 +121,22 @@ describe('lazy destructuring', () => {
116
121
  });
117
122
 
118
123
  it('supports lazy destructuring in component params with reactivity', () => {
119
- component Inner(&{ count }: { count: number }) {
120
- <pre>{count}</pre>
124
+ function Inner(&{ count }: { count: number }) {
125
+ return <><pre>{count}</pre></>;
121
126
  }
122
127
 
123
- component Test() {
124
- let &[count] = track(0);
125
-
126
- <Inner {count} />
127
- <button
128
- onClick={() => {
129
- count++;
130
- }}
131
- >
132
- {'increment'}
133
- </button>
128
+ function Test() {
129
+ return <>
130
+ let &[count] = track(0);
131
+ <Inner {count} />
132
+ <button
133
+ onClick={() => {
134
+ count++;
135
+ }}
136
+ >
137
+ {'increment'}
138
+ </button>
139
+ </>;
134
140
  }
135
141
 
136
142
  render(Test);
@@ -141,13 +147,15 @@ describe('lazy destructuring', () => {
141
147
  });
142
148
 
143
149
  it('supports nested lazy destructuring in non-lazy component params', () => {
144
- component Inner({ something: &[first, second] }: { something: Tracked<number> }) {
145
- first = second.value + 1;
146
- <pre>{`${first}-${second.value}`}</pre>
150
+ function Inner({ something: &[first, second] }: { something: Tracked<number> }) {
151
+ return <>
152
+ first = second.value + 1;
153
+ <pre>{`${first}-${second.value}`}</pre>
154
+ </>;
147
155
  }
148
156
 
149
- component Test() {
150
- <Inner something={track(1)} />
157
+ function Test() {
158
+ return <><Inner something={track(1)} /></>;
151
159
  }
152
160
 
153
161
  render(Test);
@@ -157,18 +165,20 @@ describe('lazy destructuring', () => {
157
165
  it(
158
166
  'preserves lazy getter/setter behavior for nested rest destructuring in non-lazy component params',
159
167
  () => {
160
- component Inner({
168
+ function Inner({
161
169
  values: [head, ...&{ length: rest_length, 0: first_rest }],
162
170
  }: {
163
171
  values: [number, Tracked<number>, Tracked<number>];
164
172
  }) {
165
- const before = `${first_rest?.value ?? 'nil'}-${rest_length}`;
166
- rest_length = 0;
167
- <pre>{`${head}-${before}-${first_rest?.value ?? 'nil'}-${rest_length}`}</pre>
173
+ return <>
174
+ const before = `${first_rest?.value ?? 'nil'}-${rest_length}`;
175
+ rest_length = 0;
176
+ <pre>{`${head}-${before}-${first_rest?.value ?? 'nil'}-${rest_length}`}</pre>
177
+ </>;
168
178
  }
169
179
 
170
- component Test() {
171
- <Inner values={[10, track(20), track(30)]} />
180
+ function Test() {
181
+ return <><Inner values={[10, track(20), track(30)]} /></>;
172
182
  }
173
183
 
174
184
  render(Test);
@@ -177,12 +187,14 @@ describe('lazy destructuring', () => {
177
187
  );
178
188
 
179
189
  it('supports lazy destructuring in function params', () => {
180
- component Test() {
181
- function getInfo(&{ x, y }: { x: number; y: number }) {
182
- return x + y;
183
- }
184
- const result = getInfo({ x: 3, y: 7 });
185
- <pre>{result}</pre>
190
+ function Test() {
191
+ return <>
192
+ function getInfo(&{ x, y }: { x: number; y: number }) {
193
+ return x + y;
194
+ }
195
+ const result = getInfo({ x: 3, y: 7 });
196
+ <pre>{result}</pre>
197
+ </>;
186
198
  }
187
199
 
188
200
  render(Test);
@@ -190,16 +202,16 @@ describe('lazy destructuring', () => {
190
202
  });
191
203
 
192
204
  it('supports nested lazy destructuring in non-lazy function params', () => {
193
- component Test() {
194
- const something = track(1);
195
-
196
- function getInfo({ something: &[first, second] }: { something: Tracked<number> }) {
197
- first = second.value + 1;
198
- return `${first}-${second.value}`;
199
- }
200
-
201
- const result = getInfo({ something });
202
- <pre>{result}</pre>
205
+ function Test() {
206
+ return <>
207
+ const something = track(1);
208
+ function getInfo({ something: &[first, second] }: { something: Tracked<number> }) {
209
+ first = second.value + 1;
210
+ return `${first}-${second.value}`;
211
+ }
212
+ const result = getInfo({ something });
213
+ <pre>{result}</pre>
214
+ </>;
203
215
  }
204
216
 
205
217
  render(Test);
@@ -209,19 +221,20 @@ describe('lazy destructuring', () => {
209
221
  it(
210
222
  'preserves lazy getter/setter behavior for nested rest destructuring in non-lazy function params',
211
223
  () => {
212
- component Test() {
213
- function summarize({
214
- values: [head, ...&{ length: rest_length, 0: first_rest }],
215
- }: {
216
- values: [number, Tracked<number>, Tracked<number>];
217
- }) {
218
- const before = `${first_rest?.value ?? 'nil'}-${rest_length}`;
219
- rest_length = 0;
220
- return `${head}-${before}-${first_rest?.value ?? 'nil'}-${rest_length}`;
221
- }
222
-
223
- const result = summarize({ values: [5, track(6), track(7)] });
224
- <pre>{result}</pre>
224
+ function Test() {
225
+ return <>
226
+ function summarize({
227
+ values: [head, ...&{ length: rest_length, 0: first_rest }],
228
+ }: {
229
+ values: [number, Tracked<number>, Tracked<number>];
230
+ }) {
231
+ const before = `${first_rest?.value ?? 'nil'}-${rest_length}`;
232
+ rest_length = 0;
233
+ return `${head}-${before}-${first_rest?.value ?? 'nil'}-${rest_length}`;
234
+ }
235
+ const result = summarize({ values: [5, track(6), track(7)] });
236
+ <pre>{result}</pre>
237
+ </>;
225
238
  }
226
239
 
227
240
  render(Test);
@@ -230,12 +243,14 @@ describe('lazy destructuring', () => {
230
243
  );
231
244
 
232
245
  it('supports let lazy destructuring with assignment writeback', () => {
233
- component Test() {
234
- const obj = { a: 1, b: 2 };
235
- let &{ a, b } = obj;
236
- a = 10;
237
- b = 20;
238
- <pre>{`${obj.a}-${obj.b}`}</pre>
246
+ function Test() {
247
+ return <>
248
+ const obj = { a: 1, b: 2 };
249
+ let &{ a, b } = obj;
250
+ a = 10;
251
+ b = 20;
252
+ <pre>{`${obj.a}-${obj.b}`}</pre>
253
+ </>;
239
254
  }
240
255
 
241
256
  render(Test);
@@ -243,12 +258,14 @@ describe('lazy destructuring', () => {
243
258
  });
244
259
 
245
260
  it('supports compound assignment operators on lazy bindings', () => {
246
- component Test() {
247
- const obj = { a: 5, b: 10 };
248
- let &{ a, b } = obj;
249
- a += 3;
250
- b *= 2;
251
- <pre>{`${obj.a}-${obj.b}`}</pre>
261
+ function Test() {
262
+ return <>
263
+ const obj = { a: 5, b: 10 };
264
+ let &{ a, b } = obj;
265
+ a += 3;
266
+ b *= 2;
267
+ <pre>{`${obj.a}-${obj.b}`}</pre>
268
+ </>;
252
269
  }
253
270
 
254
271
  render(Test);
@@ -256,13 +273,15 @@ describe('lazy destructuring', () => {
256
273
  });
257
274
 
258
275
  it('supports update expressions on lazy bindings', () => {
259
- component Test() {
260
- const obj = { count: 0 };
261
- let &{ count } = obj;
262
- count++;
263
- count++;
264
- count--;
265
- <pre>{obj.count}</pre>
276
+ function Test() {
277
+ return <>
278
+ const obj = { count: 0 };
279
+ let &{ count } = obj;
280
+ count++;
281
+ count++;
282
+ count--;
283
+ <pre>{obj.count}</pre>
284
+ </>;
266
285
  }
267
286
 
268
287
  render(Test);
@@ -270,13 +289,15 @@ describe('lazy destructuring', () => {
270
289
  });
271
290
 
272
291
  it('supports function params with lazy destructuring and default values', () => {
273
- component Test() {
274
- function calc(&{ x, y = 100 }: { x: number; y?: number }) {
275
- return x + y;
276
- }
277
- const a = calc({ x: 5, y: 10 });
278
- const b = calc({ x: 5 });
279
- <pre>{`${a}-${b}`}</pre>
292
+ function Test() {
293
+ return <>
294
+ function calc(&{ x, y = 100 }: { x: number; y?: number }) {
295
+ return x + y;
296
+ }
297
+ const a = calc({ x: 5, y: 10 });
298
+ const b = calc({ x: 5 });
299
+ <pre>{`${a}-${b}`}</pre>
300
+ </>;
280
301
  }
281
302
 
282
303
  render(Test);
@@ -284,11 +305,13 @@ describe('lazy destructuring', () => {
284
305
  });
285
306
 
286
307
  it('supports lazy destructuring with default value writeback', () => {
287
- component Test() {
288
- const obj: { a: number; b?: number } = { a: 1 };
289
- let &{ a, b = 50 } = obj;
290
- b = 99;
291
- <pre>{`${a}-${obj.b}`}</pre>
308
+ function Test() {
309
+ return <>
310
+ const obj: { a: number; b?: number } = { a: 1 };
311
+ let &{ a, b = 50 } = obj;
312
+ b = 99;
313
+ <pre>{`${a}-${obj.b}`}</pre>
314
+ </>;
292
315
  }
293
316
 
294
317
  render(Test);
@@ -296,9 +319,11 @@ describe('lazy destructuring', () => {
296
319
  });
297
320
 
298
321
  it('supports rest destructuring from iterable array-like tracked values', () => {
299
- component Test() {
300
- let &[value, ...rest] = track(0);
301
- <pre>{`${value}-${rest.length}-${(rest[0] as Tracked<number>).value === value}`}</pre>
322
+ function Test() {
323
+ return <>
324
+ let &[value, ...rest] = track(0);
325
+ <pre>{`${value}-${rest.length}-${(rest[0] as Tracked<number>).value === value}`}</pre>
326
+ </>;
302
327
  }
303
328
 
304
329
  render(Test);
@@ -306,10 +331,12 @@ describe('lazy destructuring', () => {
306
331
  });
307
332
 
308
333
  it('supports rest destructuring from length-only array-like sources', () => {
309
- component Test() {
310
- const source = { 0: 'x', 1: 'y', 2: 'z', length: 3 };
311
- const &[first, ...rest] = source;
312
- <pre>{`${first}-${rest.join(',')}`}</pre>
334
+ function Test() {
335
+ return <>
336
+ const source = { 0: 'x', 1: 'y', 2: 'z', length: 3 };
337
+ const &[first, ...rest] = source;
338
+ <pre>{`${first}-${rest.join(',')}`}</pre>
339
+ </>;
313
340
  }
314
341
 
315
342
  render(Test);
@@ -317,16 +344,18 @@ describe('lazy destructuring', () => {
317
344
  });
318
345
 
319
346
  it('supports rest destructuring from iterable sources', () => {
320
- component Test() {
321
- const source = {
322
- *[Symbol.iterator]() {
323
- yield 'x';
324
- yield 'y';
325
- yield 'z';
326
- },
327
- };
328
- const &[first, ...rest] = source;
329
- <pre>{`${first}-${rest.join(',')}`}</pre>
347
+ function Test() {
348
+ return <>
349
+ const source = {
350
+ *[Symbol.iterator]() {
351
+ yield 'x';
352
+ yield 'y';
353
+ yield 'z';
354
+ },
355
+ };
356
+ const &[first, ...rest] = source;
357
+ <pre>{`${first}-${rest.join(',')}`}</pre>
358
+ </>;
330
359
  }
331
360
 
332
361
  render(Test);
@@ -334,12 +363,14 @@ describe('lazy destructuring', () => {
334
363
  });
335
364
 
336
365
  it('supports update expressions on lazy bindings with default values', () => {
337
- component Test() {
338
- const obj: { count?: number } = {};
339
- let &{ count = 0 } = obj;
340
- count++;
341
- count++;
342
- <pre>{obj.count}</pre>
366
+ function Test() {
367
+ return <>
368
+ const obj: { count?: number } = {};
369
+ let &{ count = 0 } = obj;
370
+ count++;
371
+ count++;
372
+ <pre>{obj.count}</pre>
373
+ </>;
343
374
  }
344
375
 
345
376
  render(Test);
@@ -347,10 +378,12 @@ describe('lazy destructuring', () => {
347
378
  });
348
379
 
349
380
  it('supports member access on lazy destructured objects', () => {
350
- component Test() {
351
- const obj = { user: { name: 'Alice', age: 30 } };
352
- const &{ user } = obj;
353
- <pre>{`${user.name}-${user.age}`}</pre>
381
+ function Test() {
382
+ return <>
383
+ const obj = { user: { name: 'Alice', age: 30 } };
384
+ const &{ user } = obj;
385
+ <pre>{`${user.name}-${user.age}`}</pre>
386
+ </>;
354
387
  }
355
388
 
356
389
  render(Test);
@@ -358,17 +391,19 @@ describe('lazy destructuring', () => {
358
391
  });
359
392
 
360
393
  it('supports standalone lazy array destructuring with track()', () => {
361
- component Test() {
362
- let count: number;
363
- &[count] = track(0);
364
- <div>{count}</div>
365
- <button
366
- onClick={() => {
367
- count++;
368
- }}
369
- >
370
- {'inc'}
371
- </button>
394
+ function Test() {
395
+ return <>
396
+ let count: number;
397
+ &[count] = track(0);
398
+ <div>{count}</div>
399
+ <button
400
+ onClick={() => {
401
+ count++;
402
+ }}
403
+ >
404
+ {'inc'}
405
+ </button>
406
+ </>;
372
407
  }
373
408
 
374
409
  render(Test);
@@ -379,18 +414,20 @@ describe('lazy destructuring', () => {
379
414
  });
380
415
 
381
416
  it('supports standalone lazy array destructuring with second element', () => {
382
- component Test() {
383
- let value;
384
- let tracked;
385
- &[value, tracked] = track(42);
386
- <div>{value}</div>
387
- <button
388
- onClick={() => {
389
- value = 100;
390
- }}
391
- >
392
- {'set'}
393
- </button>
417
+ function Test() {
418
+ return <>
419
+ let value;
420
+ let tracked;
421
+ &[value, tracked] = track(42);
422
+ <div>{value}</div>
423
+ <button
424
+ onClick={() => {
425
+ value = 100;
426
+ }}
427
+ >
428
+ {'set'}
429
+ </button>
430
+ </>;
394
431
  }
395
432
 
396
433
  render(Test);
@@ -401,15 +438,16 @@ describe('lazy destructuring', () => {
401
438
  });
402
439
 
403
440
  it('supports direct value access on tracked values', () => {
404
- component Test() {
405
- let tracked = track(0);
406
- ++tracked.value;
407
- tracked.value++;
408
- tracked.value = tracked.value + 1;
409
- let value = tracked.value;
410
- let ref = tracked;
411
-
412
- <pre>{`${value}-${ref === tracked}`}</pre>
441
+ function Test() {
442
+ return <>
443
+ let tracked = track(0);
444
+ ++tracked.value;
445
+ tracked.value++;
446
+ tracked.value = tracked.value + 1;
447
+ let value = tracked.value;
448
+ let ref = tracked;
449
+ <pre>{`${value}-${ref === tracked}`}</pre>
450
+ </>;
413
451
  }
414
452
 
415
453
  render(Test);
@@ -417,15 +455,19 @@ describe('lazy destructuring', () => {
417
455
  });
418
456
 
419
457
  it('supports lazy destructured tracked ref value access', () => {
420
- component Child({ pair: &[value, tracked_ref] }: { pair: Tracked<number> }) {
421
- ++tracked_ref.value;
422
- tracked_ref.value++;
423
- <pre>{`${value}-${tracked_ref.value}`}</pre>
458
+ function Child({ pair: &[value, tracked_ref] }: { pair: Tracked<number> }) {
459
+ return <>
460
+ ++tracked_ref.value;
461
+ tracked_ref.value++;
462
+ <pre>{`${value}-${tracked_ref.value}`}</pre>
463
+ </>;
424
464
  }
425
465
 
426
- component Test() {
427
- let tracked = track(0);
428
- <Child pair={tracked} />
466
+ function Test() {
467
+ return <>
468
+ let tracked = track(0);
469
+ <Child pair={tracked} />
470
+ </>;
429
471
  }
430
472
 
431
473
  render(Test);
@@ -433,11 +475,13 @@ describe('lazy destructuring', () => {
433
475
  });
434
476
 
435
477
  it('supports standalone lazy object destructuring', () => {
436
- component Test() {
437
- let a;
438
- let b;
439
- &{ a, b } = { a: 10, b: 20 };
440
- <pre>{`${a}-${b}`}</pre>
478
+ function Test() {
479
+ return <>
480
+ let a;
481
+ let b;
482
+ &{ a, b } = { a: 10, b: 20 };
483
+ <pre>{`${a}-${b}`}</pre>
484
+ </>;
441
485
  }
442
486
 
443
487
  render(Test);