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