ripple 0.3.68 → 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.
- package/CHANGELOG.md +48 -0
- package/package.json +3 -3
- package/src/jsx-runtime.d.ts +2 -2
- package/src/runtime/element.js +1 -1
- package/src/runtime/index-client.js +11 -11
- package/src/runtime/index-server.js +7 -4
- package/src/runtime/internal/client/bindings.js +1 -1
- package/src/runtime/internal/client/blocks.js +13 -4
- package/src/runtime/internal/client/component.js +55 -0
- package/src/runtime/internal/client/composite.js +4 -2
- package/src/runtime/internal/client/expression.js +65 -7
- package/src/runtime/internal/client/hmr.js +54 -43
- package/src/runtime/internal/client/index.js +5 -1
- package/src/runtime/internal/client/portal.js +70 -69
- package/src/runtime/internal/client/render.js +3 -0
- package/src/runtime/internal/server/index.js +92 -8
- package/tests/client/__snapshots__/html.test.tsrx.snap +3 -3
- package/tests/client/array/array.copy-within.test.tsrx +33 -31
- package/tests/client/array/array.derived.test.tsrx +186 -169
- package/tests/client/array/array.iteration.test.tsrx +40 -37
- package/tests/client/array/array.mutations.test.tsrx +113 -101
- package/tests/client/array/array.static.test.tsrx +119 -101
- package/tests/client/array/array.to-methods.test.tsrx +24 -21
- package/tests/client/async-suspend.test.tsrx +247 -246
- package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +0 -1
- package/tests/client/basic/basic.attributes.test.tsrx +428 -423
- package/tests/client/basic/basic.collections.test.tsrx +109 -102
- package/tests/client/basic/basic.components.test.tsrx +323 -205
- package/tests/client/basic/basic.errors.test.tsrx +91 -91
- package/tests/client/basic/basic.events.test.tsrx +114 -115
- package/tests/client/basic/basic.get-set.test.tsrx +97 -87
- package/tests/client/basic/basic.hmr.test.tsrx +19 -16
- package/tests/client/basic/basic.reactivity.test.tsrx +199 -191
- package/tests/client/basic/basic.rendering.test.tsrx +272 -182
- package/tests/client/basic/basic.styling.test.tsrx +23 -22
- package/tests/client/basic/basic.utilities.test.tsrx +10 -8
- package/tests/client/boundaries.test.tsrx +26 -26
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +5 -5
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.tsrx.snap +5 -5
- package/tests/client/compiler/compiler.assignments.test.tsrx +77 -81
- package/tests/client/compiler/compiler.attributes.test.tsrx +15 -15
- package/tests/client/compiler/compiler.basic.test.tsrx +322 -314
- package/tests/client/compiler/compiler.regex.test.tsrx +44 -47
- package/tests/client/compiler/compiler.tracked-access.test.tsrx +38 -38
- package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
- package/tests/client/compiler/compiler.typescript.test.tsrx +2 -2
- package/tests/client/composite/composite.dynamic-components.test.tsrx +47 -48
- package/tests/client/composite/composite.generics.test.tsrx +168 -192
- package/tests/client/composite/composite.props.test.tsrx +97 -81
- package/tests/client/composite/composite.reactivity.test.tsrx +177 -147
- package/tests/client/composite/composite.render.test.tsrx +122 -105
- package/tests/client/computed-properties.test.tsrx +28 -28
- package/tests/client/context.test.tsrx +21 -21
- package/tests/client/css/global-additional-cases.test.tsrx +58 -58
- package/tests/client/css/global-advanced-selectors.test.tsrx +16 -16
- package/tests/client/css/global-at-rules.test.tsrx +10 -10
- package/tests/client/css/global-basic.test.tsrx +14 -14
- package/tests/client/css/global-classes-ids.test.tsrx +14 -14
- package/tests/client/css/global-combinators.test.tsrx +10 -10
- package/tests/client/css/global-complex-nesting.test.tsrx +14 -14
- package/tests/client/css/global-edge-cases.test.tsrx +18 -18
- package/tests/client/css/global-keyframes.test.tsrx +12 -12
- package/tests/client/css/global-nested.test.tsrx +10 -10
- package/tests/client/css/global-pseudo.test.tsrx +12 -12
- package/tests/client/css/global-scoping.test.tsrx +20 -20
- package/tests/client/css/style-identifier.test.tsrx +143 -291
- package/tests/client/date.test.tsrx +146 -133
- package/tests/client/dynamic-elements.test.tsrx +398 -365
- package/tests/client/events.test.tsrx +292 -290
- package/tests/client/for.test.tsrx +156 -153
- package/tests/client/head.test.tsrx +105 -96
- package/tests/client/html.test.tsrx +122 -26
- package/tests/client/input-value.test.tsrx +1361 -1314
- package/tests/client/lazy-array.test.tsrx +16 -13
- package/tests/client/lazy-destructuring.test.tsrx +257 -213
- package/tests/client/map.test.tsrx +65 -60
- package/tests/client/media-query.test.tsrx +22 -20
- package/tests/client/object.test.tsrx +87 -81
- package/tests/client/portal.test.tsrx +57 -51
- package/tests/client/ref.test.tsrx +233 -202
- package/tests/client/return.test.tsrx +71 -2560
- package/tests/client/set.test.tsrx +54 -45
- package/tests/client/svg.test.tsrx +216 -186
- package/tests/client/switch.test.tsrx +194 -193
- package/tests/client/track-async-hydration.test.tsrx +18 -14
- package/tests/client/tracked-index-access.test.tsrx +28 -18
- package/tests/client/try.test.tsrx +675 -548
- package/tests/client/tsx.test.tsrx +373 -311
- package/tests/client/typescript-generics.test.tsrx +145 -145
- package/tests/client/url/url.derived.test.tsrx +33 -28
- package/tests/client/url/url.parsing.test.tsrx +61 -51
- package/tests/client/url/url.partial-removal.test.tsrx +56 -48
- package/tests/client/url/url.reactivity.test.tsrx +142 -125
- package/tests/client/url/url.serialization.test.tsrx +13 -11
- package/tests/client/url-search-params/url-search-params.derived.test.tsrx +34 -29
- package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +25 -21
- package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +50 -45
- package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +111 -99
- package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +49 -43
- package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +14 -12
- package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +16 -14
- package/tests/hydration/basic.test.js +3 -3
- package/tests/hydration/compiled/client/basic.js +586 -651
- package/tests/hydration/compiled/client/composite.js +79 -104
- package/tests/hydration/compiled/client/events.js +140 -148
- package/tests/hydration/compiled/client/for.js +1005 -1018
- package/tests/hydration/compiled/client/head.js +124 -134
- package/tests/hydration/compiled/client/hmr.js +41 -48
- package/tests/hydration/compiled/client/html-in-template.js +38 -41
- package/tests/hydration/compiled/client/html.js +970 -1314
- package/tests/hydration/compiled/client/if-children.js +234 -249
- package/tests/hydration/compiled/client/if.js +182 -189
- package/tests/hydration/compiled/client/mixed-control-flow.js +347 -303
- package/tests/hydration/compiled/client/nested-control-flow.js +1084 -832
- package/tests/hydration/compiled/client/portal.js +65 -85
- package/tests/hydration/compiled/client/reactivity.js +84 -90
- package/tests/hydration/compiled/client/return.js +38 -1939
- package/tests/hydration/compiled/client/switch.js +218 -224
- package/tests/hydration/compiled/client/track-async-serialization.js +250 -259
- package/tests/hydration/compiled/client/try.js +123 -132
- package/tests/hydration/compiled/server/basic.js +773 -831
- package/tests/hydration/compiled/server/composite.js +166 -191
- package/tests/hydration/compiled/server/events.js +170 -184
- package/tests/hydration/compiled/server/for.js +851 -909
- package/tests/hydration/compiled/server/head.js +206 -216
- package/tests/hydration/compiled/server/hmr.js +64 -72
- package/tests/hydration/compiled/server/html-in-template.js +42 -76
- package/tests/hydration/compiled/server/html.js +1362 -1667
- package/tests/hydration/compiled/server/if-children.js +419 -445
- package/tests/hydration/compiled/server/if.js +194 -208
- package/tests/hydration/compiled/server/mixed-control-flow.js +249 -257
- package/tests/hydration/compiled/server/nested-control-flow.js +491 -515
- package/tests/hydration/compiled/server/portal.js +152 -160
- package/tests/hydration/compiled/server/reactivity.js +94 -106
- package/tests/hydration/compiled/server/return.js +28 -2172
- package/tests/hydration/compiled/server/switch.js +274 -286
- package/tests/hydration/compiled/server/track-async-serialization.js +340 -358
- package/tests/hydration/compiled/server/try.js +167 -185
- package/tests/hydration/components/basic.tsrx +320 -272
- package/tests/hydration/components/composite.tsrx +44 -32
- package/tests/hydration/components/events.tsrx +101 -91
- package/tests/hydration/components/for.tsrx +510 -452
- package/tests/hydration/components/head.tsrx +87 -80
- package/tests/hydration/components/hmr.tsrx +22 -17
- package/tests/hydration/components/html-in-template.tsrx +22 -17
- package/tests/hydration/components/html.tsrx +525 -443
- package/tests/hydration/components/if-children.tsrx +158 -148
- package/tests/hydration/components/if.tsrx +109 -95
- package/tests/hydration/components/mixed-control-flow.tsrx +100 -96
- package/tests/hydration/components/nested-control-flow.tsrx +215 -203
- package/tests/hydration/components/portal.tsrx +41 -34
- package/tests/hydration/components/reactivity.tsrx +37 -27
- package/tests/hydration/components/return.tsrx +12 -556
- package/tests/hydration/components/switch.tsrx +120 -114
- package/tests/hydration/components/track-async-serialization.tsrx +107 -91
- package/tests/hydration/components/try.tsrx +55 -40
- package/tests/hydration/html.test.js +4 -4
- package/tests/hydration/return.test.js +13 -532
- package/tests/server/await.test.tsrx +3 -3
- package/tests/server/basic.attributes.test.tsrx +264 -195
- package/tests/server/basic.components.test.tsrx +296 -169
- package/tests/server/basic.test.tsrx +300 -198
- package/tests/server/compiler.test.tsrx +62 -60
- package/tests/server/composite.props.test.tsrx +77 -63
- package/tests/server/composite.test.tsrx +168 -192
- package/tests/server/context.test.tsrx +18 -12
- package/tests/server/dynamic-elements.test.tsrx +197 -180
- package/tests/server/for.test.tsrx +85 -78
- package/tests/server/head.test.tsrx +50 -43
- package/tests/server/html-nesting-validation.test.tsrx +8 -8
- package/tests/server/if.test.tsrx +57 -51
- package/tests/server/lazy-destructuring.test.tsrx +366 -294
- package/tests/server/return.test.tsrx +76 -1355
- package/tests/server/streaming-ssr.test.tsrx +4 -75
- package/tests/server/style-identifier.test.tsrx +169 -148
- package/tests/server/switch.test.tsrx +91 -85
- package/tests/server/track-async-serialization.test.tsrx +105 -85
- package/tests/server/try.test.tsrx +374 -280
- package/tests/utils/compiler-compat-config.test.js +2 -2
- package/tests/utils/runtime-imports.test.js +10 -0
- package/types/index.d.ts +8 -0
- 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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
83
|
-
|
|
85
|
+
function Child({ pair: &[first] }: { pair: [{ 0: string }] }) {
|
|
86
|
+
return <><pre>{first[0]}</pre></>;
|
|
84
87
|
}
|
|
85
88
|
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
107
|
-
|
|
111
|
+
function Inner(&{ name, age }: { name: string; age: number }) {
|
|
112
|
+
return <><pre>{`${name}-${age}`}</pre></>;
|
|
108
113
|
}
|
|
109
114
|
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
120
|
-
|
|
124
|
+
function Inner(&{ count }: { count: number }) {
|
|
125
|
+
return <><pre>{count}</pre></>;
|
|
121
126
|
}
|
|
122
127
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
150
|
-
|
|
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
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
171
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
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
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
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
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
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
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
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
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
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
|
-
|
|
427
|
-
|
|
428
|
-
|
|
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
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
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);
|