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.
- package/CHANGELOG.md +57 -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 +126 -259
- 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 -131
- 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
|
@@ -2,17 +2,19 @@ import { RippleArray, flushSync, track } from 'ripple';
|
|
|
2
2
|
|
|
3
3
|
describe('RippleArray > mutations', () => {
|
|
4
4
|
it('handles direct assignment and length tracking', () => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
function ArrayTest() {
|
|
6
|
+
return <>
|
|
7
|
+
let items = new RippleArray(1, 2, 3);
|
|
8
|
+
<button onClick={() => (items[items.length] = items.length + 1)}>{'increment'}</button>
|
|
9
|
+
<Child {items} />
|
|
10
|
+
</>;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
function Child({ items }: { items: RippleArray<number> }) {
|
|
14
|
+
return <>
|
|
15
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
16
|
+
<pre>{items.length}</pre>
|
|
17
|
+
</>;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
render(ArrayTest);
|
|
@@ -33,15 +35,16 @@ describe('RippleArray > mutations', () => {
|
|
|
33
35
|
});
|
|
34
36
|
|
|
35
37
|
it('handles push and pop operations with reactivity', () => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
function ArrayTest() {
|
|
39
|
+
return <>
|
|
40
|
+
let items = new RippleArray(1, 2, 3);
|
|
41
|
+
let &[lastItem] = track(() => items[items.length - 1]);
|
|
42
|
+
<button onClick={() => items.push(4)}>{'push'}</button>
|
|
43
|
+
<button onClick={() => items.pop()}>{'pop'}</button>
|
|
44
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
45
|
+
<pre>{items.length}</pre>
|
|
46
|
+
<pre>{lastItem}</pre>
|
|
47
|
+
</>;
|
|
45
48
|
}
|
|
46
49
|
|
|
47
50
|
render(ArrayTest);
|
|
@@ -72,15 +75,16 @@ describe('RippleArray > mutations', () => {
|
|
|
72
75
|
});
|
|
73
76
|
|
|
74
77
|
it('handles shift and unshift operations with reactivity', () => {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
function ArrayTest() {
|
|
79
|
+
return <>
|
|
80
|
+
let items = new RippleArray(2, 3, 4);
|
|
81
|
+
let &[firstItem] = track(() => items[0]);
|
|
82
|
+
<button onClick={() => items.unshift(1)}>{'unshift'}</button>
|
|
83
|
+
<button onClick={() => items.shift()}>{'shift'}</button>
|
|
84
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
85
|
+
<pre>{items.length}</pre>
|
|
86
|
+
<pre>{firstItem}</pre>
|
|
87
|
+
</>;
|
|
84
88
|
}
|
|
85
89
|
|
|
86
90
|
render(ArrayTest);
|
|
@@ -111,14 +115,15 @@ describe('RippleArray > mutations', () => {
|
|
|
111
115
|
});
|
|
112
116
|
|
|
113
117
|
it('handles splice operation with reactivity', () => {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
function ArrayTest() {
|
|
119
|
+
return <>
|
|
120
|
+
let items: RippleArray<number | string> = new RippleArray(1, 2, 3, 4, 5);
|
|
121
|
+
let &[middleItem] = track(() => items[2]);
|
|
122
|
+
<button onClick={() => items.splice(1, 2, 'a', 'b')}>{'splice'}</button>
|
|
123
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
124
|
+
<pre>{items.length}</pre>
|
|
125
|
+
<pre>{middleItem}</pre>
|
|
126
|
+
</>;
|
|
122
127
|
}
|
|
123
128
|
|
|
124
129
|
render(ArrayTest);
|
|
@@ -140,13 +145,14 @@ describe('RippleArray > mutations', () => {
|
|
|
140
145
|
});
|
|
141
146
|
|
|
142
147
|
it('handles fill operation with reactivity', () => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
function ArrayTest() {
|
|
149
|
+
return <>
|
|
150
|
+
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
151
|
+
let &[secondItem] = track(() => items[1]);
|
|
152
|
+
<button onClick={() => items.fill(0, 1, 4)}>{'fill'}</button>
|
|
153
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
154
|
+
<pre>{secondItem}</pre>
|
|
155
|
+
</>;
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
render(ArrayTest);
|
|
@@ -166,15 +172,16 @@ describe('RippleArray > mutations', () => {
|
|
|
166
172
|
});
|
|
167
173
|
|
|
168
174
|
it('handles reverse operation with reactivity', () => {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
function ArrayTest() {
|
|
176
|
+
return <>
|
|
177
|
+
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
178
|
+
let &[firstItem] = track(() => items[0]);
|
|
179
|
+
let &[lastItem] = track(() => items[4]);
|
|
180
|
+
<button onClick={() => items.reverse()}>{'reverse'}</button>
|
|
181
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
182
|
+
<pre>{firstItem}</pre>
|
|
183
|
+
<pre>{lastItem}</pre>
|
|
184
|
+
</>;
|
|
178
185
|
}
|
|
179
186
|
|
|
180
187
|
render(ArrayTest);
|
|
@@ -196,14 +203,15 @@ describe('RippleArray > mutations', () => {
|
|
|
196
203
|
});
|
|
197
204
|
|
|
198
205
|
it('handles sort operation with reactivity', () => {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
function ArrayTest() {
|
|
207
|
+
return <>
|
|
208
|
+
let items = new RippleArray(5, 3, 1, 4, 2);
|
|
209
|
+
let &[secondItem] = track(() => items[1]);
|
|
210
|
+
<button onClick={() => items.sort()}>{'sort ascending'}</button>
|
|
211
|
+
<button onClick={() => items.sort((a, b) => b - a)}>{'sort descending'}</button>
|
|
212
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
213
|
+
<pre>{secondItem}</pre>
|
|
214
|
+
</>;
|
|
207
215
|
}
|
|
208
216
|
|
|
209
217
|
render(ArrayTest);
|
|
@@ -231,13 +239,14 @@ describe('RippleArray > mutations', () => {
|
|
|
231
239
|
});
|
|
232
240
|
|
|
233
241
|
it('handles array modification through forEach()', () => {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
242
|
+
function ArrayTest() {
|
|
243
|
+
return <>
|
|
244
|
+
let items = new RippleArray(1, 2, 3);
|
|
245
|
+
<button onClick={() => items.forEach((item, i) => (items[i] = item * 2))}>
|
|
246
|
+
{'double all'}
|
|
247
|
+
</button>
|
|
248
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
249
|
+
</>;
|
|
241
250
|
}
|
|
242
251
|
|
|
243
252
|
render(ArrayTest);
|
|
@@ -255,16 +264,16 @@ describe('RippleArray > mutations', () => {
|
|
|
255
264
|
});
|
|
256
265
|
|
|
257
266
|
it('handles array modification through iterator', () => {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
267
|
+
function ArrayTest() {
|
|
268
|
+
return <>
|
|
269
|
+
let items = new RippleArray(1, 2, 3);
|
|
270
|
+
<button onClick={() => items.forEach((item, i) => (items[i] = item * 2))}>
|
|
271
|
+
{'double all'}
|
|
272
|
+
</button>
|
|
273
|
+
for (const item of items) {
|
|
274
|
+
<pre>{item}</pre>
|
|
275
|
+
}
|
|
276
|
+
</>;
|
|
268
277
|
}
|
|
269
278
|
|
|
270
279
|
render(ArrayTest);
|
|
@@ -286,16 +295,17 @@ describe('RippleArray > mutations', () => {
|
|
|
286
295
|
});
|
|
287
296
|
|
|
288
297
|
it('handles array index access with reactivity', () => {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
298
|
+
function ArrayTest() {
|
|
299
|
+
return <>
|
|
300
|
+
let items = new RippleArray(10, 20, 30);
|
|
301
|
+
let &[firstItem] = track(() => items[0]);
|
|
302
|
+
let &[secondItem] = track(() => items[1]);
|
|
303
|
+
<button onClick={() => (items[0] = 100)}>{'change first'}</button>
|
|
304
|
+
<pre>{firstItem}</pre>
|
|
305
|
+
<pre>{secondItem}</pre>
|
|
306
|
+
<pre>{items[0]}</pre>
|
|
307
|
+
<pre>{items[1]}</pre>
|
|
308
|
+
</>;
|
|
299
309
|
}
|
|
300
310
|
|
|
301
311
|
render(ArrayTest);
|
|
@@ -319,14 +329,15 @@ describe('RippleArray > mutations', () => {
|
|
|
319
329
|
});
|
|
320
330
|
|
|
321
331
|
it('handles length property for reactivity', () => {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
332
|
+
function ArrayTest() {
|
|
333
|
+
return <>
|
|
334
|
+
let items = new RippleArray(1, 2, 3);
|
|
335
|
+
let &[length] = track(() => items.length);
|
|
336
|
+
<button onClick={() => (items.length = 5)}>{'expand'}</button>
|
|
337
|
+
<button onClick={() => (items.length = 2)}>{'shrink'}</button>
|
|
338
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
339
|
+
<pre>{length}</pre>
|
|
340
|
+
</>;
|
|
330
341
|
}
|
|
331
342
|
|
|
332
343
|
render(ArrayTest);
|
|
@@ -354,13 +365,14 @@ describe('RippleArray > mutations', () => {
|
|
|
354
365
|
});
|
|
355
366
|
|
|
356
367
|
it('handles setting length property and resizing the array', () => {
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
368
|
+
function ArrayTest() {
|
|
369
|
+
return <>
|
|
370
|
+
let items = new RippleArray(1, 2, 3, 4, 5);
|
|
371
|
+
<button onClick={() => (items.length = 3)}>{'truncate'}</button>
|
|
372
|
+
<button onClick={() => (items.length = 7)}>{'expand'}</button>
|
|
373
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
374
|
+
<pre>{items.length}</pre>
|
|
375
|
+
</>;
|
|
364
376
|
}
|
|
365
377
|
|
|
366
378
|
render(ArrayTest);
|
|
@@ -3,14 +3,15 @@ import { MAX_ARRAY_LENGTH } from '../../../src/runtime/internal/client/constants
|
|
|
3
3
|
|
|
4
4
|
describe('RippleArray > static', () => {
|
|
5
5
|
it('handles static methods - from and of', () => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
function ArrayTest() {
|
|
7
|
+
return <>
|
|
8
|
+
let itemsFrom = RippleArray.from([1, 2, 3], (x: number) => x * 2);
|
|
9
|
+
let itemsOf = RippleArray.of(4, 5, 6);
|
|
10
|
+
<button onClick={() => itemsFrom.push(8)}>{'add to from'}</button>
|
|
11
|
+
<button onClick={() => itemsOf.push(7)}>{'add to of'}</button>
|
|
12
|
+
<pre>{JSON.stringify(itemsFrom)}</pre>
|
|
13
|
+
<pre>{JSON.stringify(itemsOf)}</pre>
|
|
14
|
+
</>;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
render(ArrayTest);
|
|
@@ -37,26 +38,28 @@ describe('RippleArray > static', () => {
|
|
|
37
38
|
|
|
38
39
|
('fromAsync' in Array.prototype ? describe : describe.skip)('RippleArray fromAsync', async () => {
|
|
39
40
|
it('handles static fromAsync method with reactivity', async () => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
function Parent() {
|
|
42
|
+
return <>
|
|
43
|
+
try {
|
|
44
|
+
<ArrayTest />
|
|
45
|
+
} pending {
|
|
46
|
+
<div>{'Loading placeholder...'}</div>
|
|
47
|
+
}
|
|
48
|
+
</>;
|
|
46
49
|
}
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
function ArrayTest() {
|
|
52
|
+
return <>
|
|
53
|
+
let &[items] = trackAsync(() => RippleArray.fromAsync([1, 2, 3]));
|
|
54
|
+
<button
|
|
55
|
+
onClick={() => {
|
|
56
|
+
items.push(4);
|
|
57
|
+
}}
|
|
58
|
+
>
|
|
59
|
+
{'add item'}
|
|
60
|
+
</button>
|
|
61
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
62
|
+
</>;
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
render(Parent);
|
|
@@ -76,25 +79,28 @@ describe('RippleArray > static', () => {
|
|
|
76
79
|
});
|
|
77
80
|
|
|
78
81
|
it('handles static fromAsync method with mapping function', async () => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
function Parent() {
|
|
83
|
+
return <>
|
|
84
|
+
try {
|
|
85
|
+
<ArrayTest />
|
|
86
|
+
} pending {
|
|
87
|
+
<div>{'Loading placeholder...'}</div>
|
|
88
|
+
}
|
|
89
|
+
</>;
|
|
85
90
|
}
|
|
86
91
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
function ArrayTest() {
|
|
93
|
+
return <>
|
|
94
|
+
let &[items] = trackAsync(() => RippleArray.fromAsync([1, 2, 3], (x: number) => x * 2));
|
|
95
|
+
<button
|
|
96
|
+
onClick={() => {
|
|
97
|
+
items.push(8);
|
|
98
|
+
}}
|
|
99
|
+
>
|
|
100
|
+
{'add item'}
|
|
101
|
+
</button>
|
|
102
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
103
|
+
</>;
|
|
98
104
|
}
|
|
99
105
|
|
|
100
106
|
render(Parent);
|
|
@@ -116,33 +122,36 @@ describe('RippleArray > static', () => {
|
|
|
116
122
|
('fromAsync' in Array.prototype ? it : it.skip)(
|
|
117
123
|
'handles error in fromAsync method',
|
|
118
124
|
async () => {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
function Parent() {
|
|
126
|
+
return <>
|
|
127
|
+
try {
|
|
128
|
+
<ArrayTest />
|
|
129
|
+
} pending {
|
|
130
|
+
<div>{'Loading placeholder...'}</div>
|
|
131
|
+
}
|
|
132
|
+
</>;
|
|
125
133
|
}
|
|
126
134
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
135
|
+
function ArrayTest() {
|
|
136
|
+
return <>
|
|
137
|
+
async function* throwingIterable() {
|
|
138
|
+
throw new Error('Async error');
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
let &[items] = trackAsync(() => RippleArray.fromAsync(throwingIterable()));
|
|
142
|
+
|
|
143
|
+
<ul>
|
|
144
|
+
for (const item of items) {
|
|
145
|
+
<li>{item}</li>
|
|
146
|
+
}
|
|
147
|
+
</ul>
|
|
148
|
+
} pending {
|
|
149
|
+
<div>{'Loading...'}</div>
|
|
150
|
+
} catch (e) {
|
|
151
|
+
<pre>{'Error: ' + (e as Error).message}</pre>
|
|
152
|
+
<pre>{'No items'}</pre>
|
|
153
|
+
}
|
|
154
|
+
</>;
|
|
146
155
|
}
|
|
147
156
|
|
|
148
157
|
render(Parent);
|
|
@@ -158,10 +167,12 @@ describe('RippleArray > static', () => {
|
|
|
158
167
|
|
|
159
168
|
describe('Creates RippleArray with a single element', () => {
|
|
160
169
|
it('specifies int', () => {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
170
|
+
function ArrayTest() {
|
|
171
|
+
return <>
|
|
172
|
+
let items = new RippleArray(3);
|
|
173
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
174
|
+
<pre>{items.length}</pre>
|
|
175
|
+
</>;
|
|
165
176
|
}
|
|
166
177
|
|
|
167
178
|
render(ArrayTest);
|
|
@@ -171,16 +182,16 @@ describe('RippleArray > static', () => {
|
|
|
171
182
|
});
|
|
172
183
|
|
|
173
184
|
it('errors on exceeding max array size', () => {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
185
|
+
function ArrayTest() {
|
|
186
|
+
return <>
|
|
187
|
+
let error = null;
|
|
188
|
+
try {
|
|
189
|
+
new RippleArray(MAX_ARRAY_LENGTH + 1);
|
|
190
|
+
} catch (e) {
|
|
191
|
+
error = (e as Error).message;
|
|
192
|
+
}
|
|
193
|
+
<pre>{error}</pre>
|
|
194
|
+
</>;
|
|
184
195
|
}
|
|
185
196
|
|
|
186
197
|
render(ArrayTest);
|
|
@@ -189,10 +200,12 @@ describe('RippleArray > static', () => {
|
|
|
189
200
|
});
|
|
190
201
|
|
|
191
202
|
it('specifies int using static from method', () => {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
203
|
+
function ArrayTest() {
|
|
204
|
+
return <>
|
|
205
|
+
let items = RippleArray.from([4]);
|
|
206
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
207
|
+
<pre>{items.length}</pre>
|
|
208
|
+
</>;
|
|
196
209
|
}
|
|
197
210
|
|
|
198
211
|
render(ArrayTest);
|
|
@@ -202,10 +215,12 @@ describe('RippleArray > static', () => {
|
|
|
202
215
|
});
|
|
203
216
|
|
|
204
217
|
it('specifies int using static of method', () => {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
218
|
+
function ArrayTest() {
|
|
219
|
+
return <>
|
|
220
|
+
let items = RippleArray.of(5);
|
|
221
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
222
|
+
<pre>{items.length}</pre>
|
|
223
|
+
</>;
|
|
209
224
|
}
|
|
210
225
|
|
|
211
226
|
render(ArrayTest);
|
|
@@ -217,19 +232,22 @@ describe('RippleArray > static', () => {
|
|
|
217
232
|
('fromAsync' in Array.prototype ? it : it.skip)(
|
|
218
233
|
'specifies int using static fromAsync method',
|
|
219
234
|
async () => {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
235
|
+
function Parent() {
|
|
236
|
+
return <>
|
|
237
|
+
try {
|
|
238
|
+
<ArrayTest />
|
|
239
|
+
} pending {
|
|
240
|
+
<div>{'Loading placeholder...'}</div>
|
|
241
|
+
}
|
|
242
|
+
</>;
|
|
226
243
|
}
|
|
227
244
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
245
|
+
function ArrayTest() {
|
|
246
|
+
return <>
|
|
247
|
+
let &[items] = trackAsync(() => RippleArray.fromAsync([6]));
|
|
248
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
249
|
+
<pre>{items.length}</pre>
|
|
250
|
+
</>;
|
|
233
251
|
}
|
|
234
252
|
|
|
235
253
|
render(Parent);
|
|
@@ -6,13 +6,14 @@ describe('RippleArray > to* methods', () => {
|
|
|
6
6
|
context.skip();
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
function ArrayTest() {
|
|
10
|
+
return <>
|
|
11
|
+
let items = new RippleArray(1, 2, 3, 4);
|
|
12
|
+
let &[reversed] = track(() => items.toReversed());
|
|
13
|
+
<button onClick={() => items.push(5)}>{'add item'}</button>
|
|
14
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
15
|
+
<pre>{JSON.stringify(reversed)}</pre>
|
|
16
|
+
</>;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
render(ArrayTest);
|
|
@@ -36,13 +37,14 @@ describe('RippleArray > to* methods', () => {
|
|
|
36
37
|
context.skip();
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
function ArrayTest() {
|
|
41
|
+
return <>
|
|
42
|
+
let items = new RippleArray(3, 1, 4, 2);
|
|
43
|
+
let &[sorted] = track(() => items.toSorted());
|
|
44
|
+
<button onClick={() => items.push(0)}>{'add item'}</button>
|
|
45
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
46
|
+
<pre>{JSON.stringify(sorted)}</pre>
|
|
47
|
+
</>;
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
render(ArrayTest);
|
|
@@ -66,13 +68,14 @@ describe('RippleArray > to* methods', () => {
|
|
|
66
68
|
context.skip();
|
|
67
69
|
}
|
|
68
70
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
function ArrayTest() {
|
|
72
|
+
return <>
|
|
73
|
+
let items = new RippleArray<string | number>(1, 2, 3, 4, 5);
|
|
74
|
+
let &[spliced] = track(() => items.toSpliced(1, 2, 'a', 'b'));
|
|
75
|
+
<button onClick={() => (items[2] = 30)}>{'change item'}</button>
|
|
76
|
+
<pre>{JSON.stringify(items)}</pre>
|
|
77
|
+
<pre>{JSON.stringify(spliced)}</pre>
|
|
78
|
+
</>;
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
render(ArrayTest);
|