ripple 0.3.7 → 0.3.9
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 +14 -0
- package/package.json +2 -2
- package/src/compiler/phases/1-parse/index.js +48 -349
- package/src/compiler/phases/2-analyze/index.js +343 -52
- package/src/compiler/phases/3-transform/client/index.js +28 -160
- package/src/compiler/phases/3-transform/segments.js +0 -7
- package/src/compiler/phases/3-transform/server/index.js +31 -154
- package/src/compiler/types/acorn.d.ts +1 -1
- package/src/compiler/types/estree.d.ts +1 -1
- package/src/compiler/types/import.d.ts +0 -2
- package/src/compiler/types/index.d.ts +5 -17
- package/src/compiler/types/parse.d.ts +1 -17
- package/src/compiler/utils.js +53 -20
- package/src/runtime/index-client.js +2 -13
- package/src/runtime/index-server.js +2 -2
- package/src/runtime/internal/client/bindings.js +3 -1
- package/src/runtime/internal/client/composite.js +3 -2
- package/src/runtime/internal/client/events.js +1 -1
- package/src/runtime/internal/client/head.js +3 -4
- package/src/runtime/internal/client/index.js +0 -1
- package/src/runtime/internal/client/runtime.js +0 -52
- package/src/runtime/internal/server/index.js +31 -55
- package/tests/client/array/array.copy-within.test.ripple +12 -12
- package/tests/client/array/array.derived.test.ripple +46 -46
- package/tests/client/array/array.iteration.test.ripple +10 -10
- package/tests/client/array/array.mutations.test.ripple +20 -20
- package/tests/client/array/array.to-methods.test.ripple +6 -6
- package/tests/client/async-suspend.test.ripple +5 -5
- package/tests/client/basic/basic.attributes.test.ripple +81 -81
- package/tests/client/basic/basic.collections.test.ripple +9 -9
- package/tests/client/basic/basic.components.test.ripple +28 -28
- package/tests/client/basic/basic.errors.test.ripple +46 -18
- package/tests/client/basic/basic.events.test.ripple +37 -37
- package/tests/client/basic/basic.get-set.test.ripple +6 -6
- package/tests/client/basic/basic.reactivity.test.ripple +58 -203
- package/tests/client/basic/basic.rendering.test.ripple +19 -19
- package/tests/client/basic/basic.utilities.test.ripple +3 -3
- package/tests/client/boundaries.test.ripple +12 -12
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.ripple.snap +5 -5
- package/tests/client/compiler/compiler.assignments.test.ripple +19 -19
- package/tests/client/compiler/compiler.basic.test.ripple +46 -27
- package/tests/client/compiler/compiler.tracked-access.test.ripple +2 -2
- package/tests/client/composite/composite.dynamic-components.test.ripple +9 -9
- package/tests/client/composite/composite.props.test.ripple +14 -16
- package/tests/client/composite/composite.reactivity.test.ripple +69 -70
- package/tests/client/composite/composite.render.test.ripple +3 -3
- package/tests/client/computed-properties.test.ripple +4 -4
- package/tests/client/date.test.ripple +42 -42
- package/tests/client/dynamic-elements.test.ripple +44 -45
- package/tests/client/events.test.ripple +70 -70
- package/tests/client/for.test.ripple +25 -25
- package/tests/client/head.test.ripple +19 -19
- package/tests/client/html.test.ripple +3 -3
- package/tests/client/input-value.test.ripple +84 -84
- package/tests/client/lazy-destructuring.test.ripple +138 -26
- package/tests/client/map.test.ripple +16 -16
- package/tests/client/media-query.test.ripple +7 -7
- package/tests/client/portal.test.ripple +11 -11
- package/tests/client/ref.test.ripple +4 -4
- package/tests/client/return.test.ripple +52 -52
- package/tests/client/set.test.ripple +6 -6
- package/tests/client/svg.test.ripple +5 -5
- package/tests/client/switch.test.ripple +44 -44
- package/tests/client/try.test.ripple +5 -5
- package/tests/client/url/url.derived.test.ripple +6 -6
- package/tests/client/url-search-params/url-search-params.derived.test.ripple +8 -8
- package/tests/client/url-search-params/url-search-params.iteration.test.ripple +10 -10
- package/tests/client/url-search-params/url-search-params.mutation.test.ripple +10 -10
- package/tests/client/url-search-params/url-search-params.retrieval.test.ripple +18 -18
- package/tests/client/url-search-params/url-search-params.serialization.test.ripple +2 -2
- package/tests/hydration/compiled/client/events.js +25 -25
- package/tests/hydration/compiled/client/for.js +70 -66
- package/tests/hydration/compiled/client/head.js +25 -25
- package/tests/hydration/compiled/client/hmr.js +2 -2
- package/tests/hydration/compiled/client/html.js +3 -3
- package/tests/hydration/compiled/client/if-children.js +24 -24
- package/tests/hydration/compiled/client/if.js +18 -18
- package/tests/hydration/compiled/client/mixed-control-flow.js +9 -9
- package/tests/hydration/compiled/client/portal.js +3 -3
- package/tests/hydration/compiled/client/reactivity.js +16 -16
- package/tests/hydration/compiled/client/return.js +40 -40
- package/tests/hydration/compiled/client/switch.js +12 -12
- package/tests/hydration/compiled/server/events.js +19 -19
- package/tests/hydration/compiled/server/for.js +41 -41
- package/tests/hydration/compiled/server/head.js +26 -26
- package/tests/hydration/compiled/server/hmr.js +2 -2
- package/tests/hydration/compiled/server/html.js +2 -2
- package/tests/hydration/compiled/server/if-children.js +16 -16
- package/tests/hydration/compiled/server/if.js +11 -11
- package/tests/hydration/compiled/server/mixed-control-flow.js +6 -6
- package/tests/hydration/compiled/server/portal.js +2 -2
- package/tests/hydration/compiled/server/reactivity.js +16 -16
- package/tests/hydration/compiled/server/return.js +25 -25
- package/tests/hydration/compiled/server/switch.js +8 -8
- package/tests/hydration/components/events.ripple +25 -25
- package/tests/hydration/components/for.ripple +66 -66
- package/tests/hydration/components/head.ripple +16 -16
- package/tests/hydration/components/hmr.ripple +2 -2
- package/tests/hydration/components/html.ripple +3 -3
- package/tests/hydration/components/if-children.ripple +24 -24
- package/tests/hydration/components/if.ripple +18 -18
- package/tests/hydration/components/mixed-control-flow.ripple +9 -9
- package/tests/hydration/components/portal.ripple +3 -3
- package/tests/hydration/components/reactivity.ripple +16 -16
- package/tests/hydration/components/return.ripple +40 -40
- package/tests/hydration/components/switch.ripple +20 -20
- package/tests/server/await.test.ripple +3 -3
- package/tests/server/basic.attributes.test.ripple +34 -34
- package/tests/server/basic.components.test.ripple +10 -10
- package/tests/server/basic.test.ripple +38 -40
- package/tests/server/compiler.test.ripple +22 -0
- package/tests/server/composite.props.test.ripple +12 -14
- package/tests/server/dynamic-elements.test.ripple +15 -15
- package/tests/server/head.test.ripple +11 -11
- package/tests/server/lazy-destructuring.test.ripple +92 -13
- package/tsconfig.typecheck.json +4 -0
- package/types/index.d.ts +0 -19
- package/tests/client/__snapshots__/tracked-expression.test.ripple.snap +0 -34
- package/tests/client/tracked-expression.test.ripple +0 -26
|
@@ -109,7 +109,7 @@ describe('use value()', () => {
|
|
|
109
109
|
const text = track('');
|
|
110
110
|
|
|
111
111
|
effect(() => {
|
|
112
|
-
logs.push('text changed',
|
|
112
|
+
logs.push('text changed', text.value);
|
|
113
113
|
});
|
|
114
114
|
|
|
115
115
|
<input type="text" {ref bindValue(text)} />
|
|
@@ -155,7 +155,7 @@ describe('use value()', () => {
|
|
|
155
155
|
const text = track('foo');
|
|
156
156
|
|
|
157
157
|
effect(() => {
|
|
158
|
-
logs.push('text changed',
|
|
158
|
+
logs.push('text changed', text.value);
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
<input type="text" {ref bindValue(text)} />
|
|
@@ -201,7 +201,7 @@ describe('use value()', () => {
|
|
|
201
201
|
|
|
202
202
|
<div>
|
|
203
203
|
<input type="text" {ref bindValue(text)} />
|
|
204
|
-
<button onClick={() => (
|
|
204
|
+
<button onClick={() => (text.value = 'updated')}>{'Update'}</button>
|
|
205
205
|
</div>
|
|
206
206
|
}
|
|
207
207
|
render(App);
|
|
@@ -248,7 +248,7 @@ describe('use value()', () => {
|
|
|
248
248
|
const value = track(false);
|
|
249
249
|
|
|
250
250
|
effect(() => {
|
|
251
|
-
logs.push('checked changed',
|
|
251
|
+
logs.push('checked changed', value.value);
|
|
252
252
|
});
|
|
253
253
|
|
|
254
254
|
<input type="checkbox" {ref bindChecked(value)} />
|
|
@@ -294,7 +294,7 @@ describe('use value()', () => {
|
|
|
294
294
|
|
|
295
295
|
<div>
|
|
296
296
|
<input type="checkbox" {ref bindChecked(value)} />
|
|
297
|
-
<button onClick={() => (
|
|
297
|
+
<button onClick={() => (value.value = true)}>{'Check'}</button>
|
|
298
298
|
</div>
|
|
299
299
|
}
|
|
300
300
|
render(App);
|
|
@@ -344,7 +344,7 @@ describe('use value()', () => {
|
|
|
344
344
|
const value = track(false);
|
|
345
345
|
|
|
346
346
|
effect(() => {
|
|
347
|
-
logs.push('indeterminate changed',
|
|
347
|
+
logs.push('indeterminate changed', value.value);
|
|
348
348
|
});
|
|
349
349
|
|
|
350
350
|
<input type="checkbox" {ref bindIndeterminate(value)} />
|
|
@@ -398,7 +398,7 @@ describe('use value()', () => {
|
|
|
398
398
|
|
|
399
399
|
<div>
|
|
400
400
|
<input type="checkbox" {ref bindIndeterminate(value)} />
|
|
401
|
-
<button onClick={() => (
|
|
401
|
+
<button onClick={() => (value.value = true)}>{'Set Indeterminate'}</button>
|
|
402
402
|
</div>
|
|
403
403
|
}
|
|
404
404
|
render(App);
|
|
@@ -451,7 +451,7 @@ describe('use value()', () => {
|
|
|
451
451
|
const select = track('2');
|
|
452
452
|
|
|
453
453
|
effect(() => {
|
|
454
|
-
logs.push('select changed',
|
|
454
|
+
logs.push('select changed', select.value);
|
|
455
455
|
});
|
|
456
456
|
|
|
457
457
|
<select {ref bindValue(select)}>
|
|
@@ -511,7 +511,7 @@ describe('use value()', () => {
|
|
|
511
511
|
<option value="2">{'Two'}</option>
|
|
512
512
|
<option value="3">{'Three'}</option>
|
|
513
513
|
</select>
|
|
514
|
-
<button onClick={() => (
|
|
514
|
+
<button onClick={() => (select.value = '3')}>{'Update'}</button>
|
|
515
515
|
</div>
|
|
516
516
|
}
|
|
517
517
|
|
|
@@ -564,7 +564,7 @@ describe('use value()', () => {
|
|
|
564
564
|
const selected = track(['b']);
|
|
565
565
|
|
|
566
566
|
effect(() => {
|
|
567
|
-
logs.push('selected changed', JSON.stringify(
|
|
567
|
+
logs.push('selected changed', JSON.stringify(selected.value));
|
|
568
568
|
});
|
|
569
569
|
|
|
570
570
|
<div>
|
|
@@ -672,7 +672,7 @@ describe('use value()', () => {
|
|
|
672
672
|
const selected = track('b');
|
|
673
673
|
|
|
674
674
|
effect(() => {
|
|
675
|
-
logs.push('selected changed',
|
|
675
|
+
logs.push('selected changed', selected.value);
|
|
676
676
|
});
|
|
677
677
|
|
|
678
678
|
<div>
|
|
@@ -782,7 +782,7 @@ describe('use value()', () => {
|
|
|
782
782
|
<input type="checkbox" value="a" {ref bindGroup(selected)} />
|
|
783
783
|
<input type="checkbox" value="b" {ref bindGroup(selected)} />
|
|
784
784
|
<input type="checkbox" value="c" {ref bindGroup(selected)} />
|
|
785
|
-
<button onClick={() => (
|
|
785
|
+
<button onClick={() => (selected.value = ['b', 'c'])}>{'Update'}</button>
|
|
786
786
|
</div>
|
|
787
787
|
}
|
|
788
788
|
|
|
@@ -854,7 +854,7 @@ describe('use value()', () => {
|
|
|
854
854
|
<input type="radio" name="test" value="a" {ref bindGroup(selected)} />
|
|
855
855
|
<input type="radio" name="test" value="b" {ref bindGroup(selected)} />
|
|
856
856
|
<input type="radio" name="test" value="c" {ref bindGroup(selected)} />
|
|
857
|
-
<button onClick={() => (
|
|
857
|
+
<button onClick={() => (selected.value = 'c')}>{'Update'}</button>
|
|
858
858
|
</div>
|
|
859
859
|
}
|
|
860
860
|
|
|
@@ -1027,7 +1027,7 @@ describe('use value()', () => {
|
|
|
1027
1027
|
|
|
1028
1028
|
<div>
|
|
1029
1029
|
<input type="number" {ref bindValue(value)} />
|
|
1030
|
-
<button onClick={() => (
|
|
1030
|
+
<button onClick={() => (value.value = 99)}>{'Update'}</button>
|
|
1031
1031
|
</div>
|
|
1032
1032
|
}
|
|
1033
1033
|
|
|
@@ -1123,7 +1123,7 @@ describe('use value()', () => {
|
|
|
1123
1123
|
|
|
1124
1124
|
<div>
|
|
1125
1125
|
<input type="range" min="0" max="100" {ref bindValue(value)} />
|
|
1126
|
-
<button onClick={() => (
|
|
1126
|
+
<button onClick={() => (value.value = 80)}>{'Update'}</button>
|
|
1127
1127
|
</div>
|
|
1128
1128
|
}
|
|
1129
1129
|
|
|
@@ -1259,7 +1259,7 @@ describe('use value()', () => {
|
|
|
1259
1259
|
|
|
1260
1260
|
<div>
|
|
1261
1261
|
<input type="date" {ref bindValue(value)} />
|
|
1262
|
-
<button onClick={() => (
|
|
1262
|
+
<button onClick={() => (value.value = '2025-12-31')}>{'Update'}</button>
|
|
1263
1263
|
</div>
|
|
1264
1264
|
}
|
|
1265
1265
|
|
|
@@ -1339,7 +1339,7 @@ describe('use value()', () => {
|
|
|
1339
1339
|
component App() {
|
|
1340
1340
|
const selected = track(['2', '3']);
|
|
1341
1341
|
|
|
1342
|
-
<select multiple {ref bindValue(() =>
|
|
1342
|
+
<select multiple {ref bindValue(() => selected.value, (v) => (selected.value = v))}>
|
|
1343
1343
|
<option value="1">{'One'}</option>
|
|
1344
1344
|
<option value="2">{'Two'}</option>
|
|
1345
1345
|
<option value="3">{'Three'}</option>
|
|
@@ -1380,7 +1380,7 @@ describe('use value()', () => {
|
|
|
1380
1380
|
<option value="3">{'Three'}</option>
|
|
1381
1381
|
<option value="4">{'Four'}</option>
|
|
1382
1382
|
</select>
|
|
1383
|
-
<button onClick={() => (
|
|
1383
|
+
<button onClick={() => (selected.value = ['2', '4'])}>{'Update'}</button>
|
|
1384
1384
|
</div>
|
|
1385
1385
|
}
|
|
1386
1386
|
|
|
@@ -1412,13 +1412,13 @@ describe('use value()', () => {
|
|
|
1412
1412
|
const selected = track(['1']);
|
|
1413
1413
|
|
|
1414
1414
|
<div>
|
|
1415
|
-
<select multiple {ref bindValue(() =>
|
|
1415
|
+
<select multiple {ref bindValue(() => selected.value, (v) => (selected.value = v))}>
|
|
1416
1416
|
<option value="1">{'One'}</option>
|
|
1417
1417
|
<option value="2">{'Two'}</option>
|
|
1418
1418
|
<option value="3">{'Three'}</option>
|
|
1419
1419
|
<option value="4">{'Four'}</option>
|
|
1420
1420
|
</select>
|
|
1421
|
-
<button onClick={() => (
|
|
1421
|
+
<button onClick={() => (selected.value = ['2', '4'])}>{'Update'}</button>
|
|
1422
1422
|
</div>
|
|
1423
1423
|
}
|
|
1424
1424
|
|
|
@@ -1468,7 +1468,7 @@ describe('use value()', () => {
|
|
|
1468
1468
|
component App() {
|
|
1469
1469
|
const selected = track();
|
|
1470
1470
|
|
|
1471
|
-
<select {ref bindValue(() =>
|
|
1471
|
+
<select {ref bindValue(() => selected.value, (v) => (selected.value = v))}>
|
|
1472
1472
|
<option value="1">{'One'}</option>
|
|
1473
1473
|
<option value="2">{'Two'}</option>
|
|
1474
1474
|
</select>
|
|
@@ -1505,7 +1505,7 @@ describe('use value()', () => {
|
|
|
1505
1505
|
component App() {
|
|
1506
1506
|
const selected = track();
|
|
1507
1507
|
|
|
1508
|
-
<select {ref bindValue(() =>
|
|
1508
|
+
<select {ref bindValue(() => selected.value, (v) => (selected.value = v))}>
|
|
1509
1509
|
<option value="1" disabled>{'One'}</option>
|
|
1510
1510
|
<option value="2">{'Two'}</option>
|
|
1511
1511
|
</select>
|
|
@@ -1545,7 +1545,7 @@ describe('use value()', () => {
|
|
|
1545
1545
|
component App() {
|
|
1546
1546
|
const selected = track(2);
|
|
1547
1547
|
|
|
1548
|
-
<select {ref bindValue(() =>
|
|
1548
|
+
<select {ref bindValue(() => selected.value, (v) => (selected.value = v))}>
|
|
1549
1549
|
<option value={1}>{'One'}</option>
|
|
1550
1550
|
<option value={2}>{'Two'}</option>
|
|
1551
1551
|
<option value={3}>{'Three'}</option>
|
|
@@ -1570,7 +1570,7 @@ describe('use value()', () => {
|
|
|
1570
1570
|
const selected = track(2);
|
|
1571
1571
|
|
|
1572
1572
|
effect(() => {
|
|
1573
|
-
logs.push(
|
|
1573
|
+
logs.push(selected.value);
|
|
1574
1574
|
});
|
|
1575
1575
|
|
|
1576
1576
|
<select {ref bindValue(selected)}>
|
|
@@ -1676,7 +1676,7 @@ describe('use value()', () => {
|
|
|
1676
1676
|
);
|
|
1677
1677
|
|
|
1678
1678
|
<input type="text" {ref bindValue(value)} />
|
|
1679
|
-
<div>{
|
|
1679
|
+
<div>{value.value}</div>
|
|
1680
1680
|
}
|
|
1681
1681
|
|
|
1682
1682
|
render(App);
|
|
@@ -1712,7 +1712,7 @@ describe('use value()', () => {
|
|
|
1712
1712
|
);
|
|
1713
1713
|
|
|
1714
1714
|
<input type="text" {ref bindValue(value)} />
|
|
1715
|
-
<div>{
|
|
1715
|
+
<div>{value.value}</div>
|
|
1716
1716
|
}
|
|
1717
1717
|
|
|
1718
1718
|
render(App);
|
|
@@ -1748,7 +1748,7 @@ describe('use value()', () => {
|
|
|
1748
1748
|
);
|
|
1749
1749
|
|
|
1750
1750
|
<input type="text" {ref bindValue(value)} />
|
|
1751
|
-
<div>{
|
|
1751
|
+
<div>{value.value}</div>
|
|
1752
1752
|
}
|
|
1753
1753
|
|
|
1754
1754
|
render(App);
|
|
@@ -1786,16 +1786,16 @@ describe('use value()', () => {
|
|
|
1786
1786
|
);
|
|
1787
1787
|
|
|
1788
1788
|
effect(() => {
|
|
1789
|
-
|
|
1789
|
+
value.value;
|
|
1790
1790
|
|
|
1791
1791
|
untrack(() => {
|
|
1792
|
-
if (
|
|
1793
|
-
|
|
1792
|
+
if (value.value.includes('a')) {
|
|
1793
|
+
value.value = value.value.replace(/a/g, '');
|
|
1794
1794
|
}
|
|
1795
1795
|
});
|
|
1796
1796
|
});
|
|
1797
1797
|
<input type="text" {ref bindValue(value)} />
|
|
1798
|
-
<div>{
|
|
1798
|
+
<div>{value.value}</div>
|
|
1799
1799
|
}
|
|
1800
1800
|
|
|
1801
1801
|
render(App);
|
|
@@ -1821,13 +1821,13 @@ describe('use value()', () => {
|
|
|
1821
1821
|
let value = track('');
|
|
1822
1822
|
const value_accessors: [GetFunction<string>, SetFunction<string>] = [
|
|
1823
1823
|
() => {
|
|
1824
|
-
return
|
|
1824
|
+
return value.value;
|
|
1825
1825
|
},
|
|
1826
1826
|
(v: string) => {
|
|
1827
1827
|
if (v.includes('c')) {
|
|
1828
1828
|
v = v.replace(/c/g, '');
|
|
1829
1829
|
}
|
|
1830
|
-
|
|
1830
|
+
value.value = v;
|
|
1831
1831
|
},
|
|
1832
1832
|
];
|
|
1833
1833
|
|
|
@@ -1853,13 +1853,13 @@ describe('use value()', () => {
|
|
|
1853
1853
|
let value = track('');
|
|
1854
1854
|
const value_accessors: [GetFunction<string>, SetFunction<string>] = [
|
|
1855
1855
|
() => {
|
|
1856
|
-
if (
|
|
1857
|
-
return
|
|
1856
|
+
if (value.value.includes('c')) {
|
|
1857
|
+
return value.value.replace(/c/g, '');
|
|
1858
1858
|
}
|
|
1859
|
-
return
|
|
1859
|
+
return value.value;
|
|
1860
1860
|
},
|
|
1861
1861
|
(v: string) => {
|
|
1862
|
-
|
|
1862
|
+
value.value = v;
|
|
1863
1863
|
},
|
|
1864
1864
|
];
|
|
1865
1865
|
|
|
@@ -1887,13 +1887,13 @@ describe('use value()', () => {
|
|
|
1887
1887
|
let value = track('');
|
|
1888
1888
|
const value_accessors: [GetFunction<string>, SetFunction<string>] = [
|
|
1889
1889
|
() => {
|
|
1890
|
-
return
|
|
1890
|
+
return value.value.replace(/[c,b]+/g, '');
|
|
1891
1891
|
},
|
|
1892
1892
|
(v: string) => {
|
|
1893
1893
|
if (v.includes('c')) {
|
|
1894
1894
|
v = v.replace(/c/g, '');
|
|
1895
1895
|
}
|
|
1896
|
-
|
|
1896
|
+
value.value = v;
|
|
1897
1897
|
},
|
|
1898
1898
|
];
|
|
1899
1899
|
|
|
@@ -1922,22 +1922,22 @@ describe('use value()', () => {
|
|
|
1922
1922
|
let value = track('');
|
|
1923
1923
|
const value_accessors: [GetFunction<string>, SetFunction<string>] = [
|
|
1924
1924
|
() => {
|
|
1925
|
-
return
|
|
1925
|
+
return value.value;
|
|
1926
1926
|
},
|
|
1927
1927
|
(v: string) => {
|
|
1928
1928
|
if (v.includes('c')) {
|
|
1929
1929
|
v = v.replace(/c/g, '');
|
|
1930
1930
|
}
|
|
1931
|
-
|
|
1931
|
+
value.value = v;
|
|
1932
1932
|
},
|
|
1933
1933
|
];
|
|
1934
1934
|
|
|
1935
1935
|
effect(() => {
|
|
1936
|
-
|
|
1936
|
+
value.value;
|
|
1937
1937
|
|
|
1938
1938
|
untrack(() => {
|
|
1939
|
-
if (
|
|
1940
|
-
|
|
1939
|
+
if (value.value.includes('a')) {
|
|
1940
|
+
value.value = value.value.replace(/a/g, '');
|
|
1941
1941
|
}
|
|
1942
1942
|
});
|
|
1943
1943
|
});
|
|
@@ -1966,7 +1966,7 @@ describe('use value()', () => {
|
|
|
1966
1966
|
let value = track('');
|
|
1967
1967
|
const value_accessors: [GetFunction<string>, SetFunction<string>] = [
|
|
1968
1968
|
() => {
|
|
1969
|
-
return
|
|
1969
|
+
return value.value;
|
|
1970
1970
|
},
|
|
1971
1971
|
(v: string) => {
|
|
1972
1972
|
// no update
|
|
@@ -1974,7 +1974,7 @@ describe('use value()', () => {
|
|
|
1974
1974
|
];
|
|
1975
1975
|
|
|
1976
1976
|
<input type="text" {ref bindValue(...value_accessors)} />
|
|
1977
|
-
<div>{
|
|
1977
|
+
<div>{value.value}</div>
|
|
1978
1978
|
}
|
|
1979
1979
|
|
|
1980
1980
|
render(App);
|
|
@@ -2009,7 +2009,7 @@ describe('use value()', () => {
|
|
|
2009
2009
|
);
|
|
2010
2010
|
|
|
2011
2011
|
<input type="text" {ref bindValue(value)} />
|
|
2012
|
-
<div>{
|
|
2012
|
+
<div>{value.value}</div>
|
|
2013
2013
|
}
|
|
2014
2014
|
|
|
2015
2015
|
render(App);
|
|
@@ -2038,7 +2038,7 @@ describe('bindClientWidth and bindClientHeight', () => {
|
|
|
2038
2038
|
const width = track(0);
|
|
2039
2039
|
|
|
2040
2040
|
effect(() => {
|
|
2041
|
-
logs.push(
|
|
2041
|
+
logs.push(width.value);
|
|
2042
2042
|
});
|
|
2043
2043
|
|
|
2044
2044
|
<div {ref bindClientWidth(width)} />
|
|
@@ -2100,7 +2100,7 @@ describe('bindClientWidth and bindClientHeight', () => {
|
|
|
2100
2100
|
const height = track(0);
|
|
2101
2101
|
|
|
2102
2102
|
effect(() => {
|
|
2103
|
-
logs.push(
|
|
2103
|
+
logs.push(height.value);
|
|
2104
2104
|
});
|
|
2105
2105
|
|
|
2106
2106
|
<div {ref bindClientHeight(height)} />
|
|
@@ -2163,7 +2163,7 @@ describe('bindOffsetWidth and bindOffsetHeight', () => {
|
|
|
2163
2163
|
const width = track(0);
|
|
2164
2164
|
|
|
2165
2165
|
effect(() => {
|
|
2166
|
-
logs.push(
|
|
2166
|
+
logs.push(width.value);
|
|
2167
2167
|
});
|
|
2168
2168
|
|
|
2169
2169
|
<div {ref bindOffsetWidth(width)} />
|
|
@@ -2225,7 +2225,7 @@ describe('bindOffsetWidth and bindOffsetHeight', () => {
|
|
|
2225
2225
|
const height = track(0);
|
|
2226
2226
|
|
|
2227
2227
|
effect(() => {
|
|
2228
|
-
logs.push(
|
|
2228
|
+
logs.push(height.value);
|
|
2229
2229
|
});
|
|
2230
2230
|
|
|
2231
2231
|
<div {ref bindOffsetHeight(height)} />
|
|
@@ -2288,7 +2288,7 @@ describe('bindContentRect', () => {
|
|
|
2288
2288
|
const rect = track(null);
|
|
2289
2289
|
|
|
2290
2290
|
effect(() => {
|
|
2291
|
-
if (
|
|
2291
|
+
if (rect.value) logs.push(rect.value);
|
|
2292
2292
|
});
|
|
2293
2293
|
|
|
2294
2294
|
<div {ref bindContentRect(rect)} />
|
|
@@ -2356,7 +2356,7 @@ describe('bindContentBoxSize', () => {
|
|
|
2356
2356
|
const boxSize = track(null);
|
|
2357
2357
|
|
|
2358
2358
|
effect(() => {
|
|
2359
|
-
if (
|
|
2359
|
+
if (boxSize.value) logs.push(boxSize.value);
|
|
2360
2360
|
});
|
|
2361
2361
|
|
|
2362
2362
|
<div {ref bindContentBoxSize(boxSize)} />
|
|
@@ -2425,7 +2425,7 @@ describe('bindBorderBoxSize', () => {
|
|
|
2425
2425
|
const boxSize = track(null);
|
|
2426
2426
|
|
|
2427
2427
|
effect(() => {
|
|
2428
|
-
if (
|
|
2428
|
+
if (boxSize.value) logs.push(boxSize.value);
|
|
2429
2429
|
});
|
|
2430
2430
|
|
|
2431
2431
|
<div {ref bindBorderBoxSize(boxSize)} />
|
|
@@ -2494,7 +2494,7 @@ describe('bindDevicePixelContentBoxSize', () => {
|
|
|
2494
2494
|
const boxSize = track(null);
|
|
2495
2495
|
|
|
2496
2496
|
effect(() => {
|
|
2497
|
-
if (
|
|
2497
|
+
if (boxSize.value) logs.push(boxSize.value);
|
|
2498
2498
|
});
|
|
2499
2499
|
|
|
2500
2500
|
<div {ref bindDevicePixelContentBoxSize(boxSize)} />
|
|
@@ -2563,7 +2563,7 @@ describe('bindInnerHTML', () => {
|
|
|
2563
2563
|
const html = track('<strong>Hello</strong>');
|
|
2564
2564
|
|
|
2565
2565
|
effect(() => {
|
|
2566
|
-
logs.push(
|
|
2566
|
+
logs.push(html.value);
|
|
2567
2567
|
});
|
|
2568
2568
|
|
|
2569
2569
|
<div contenteditable="true" {ref bindInnerHTML(html)} />
|
|
@@ -2617,7 +2617,7 @@ describe('bindInnerHTML', () => {
|
|
|
2617
2617
|
|
|
2618
2618
|
<div>
|
|
2619
2619
|
<div contenteditable="true" {ref bindInnerHTML(html)} />
|
|
2620
|
-
<button onClick={() => (
|
|
2620
|
+
<button onClick={() => (html.value = '<p>Updated</p>')}>{'Update'}</button>
|
|
2621
2621
|
</div>
|
|
2622
2622
|
}
|
|
2623
2623
|
|
|
@@ -2704,7 +2704,7 @@ describe('bindInnerText', () => {
|
|
|
2704
2704
|
const text = track('Hello World');
|
|
2705
2705
|
|
|
2706
2706
|
effect(() => {
|
|
2707
|
-
logs.push(
|
|
2707
|
+
logs.push(text.value);
|
|
2708
2708
|
});
|
|
2709
2709
|
|
|
2710
2710
|
<div contenteditable="true" {ref bindInnerText(text)} />
|
|
@@ -2757,7 +2757,7 @@ describe('bindInnerText', () => {
|
|
|
2757
2757
|
|
|
2758
2758
|
<div>
|
|
2759
2759
|
<div contenteditable="true" {ref bindInnerText(text)} />
|
|
2760
|
-
<button onClick={() => (
|
|
2760
|
+
<button onClick={() => (text.value = 'After')}>{'Update'}</button>
|
|
2761
2761
|
</div>
|
|
2762
2762
|
}
|
|
2763
2763
|
|
|
@@ -2811,7 +2811,7 @@ describe('bindTextContent', () => {
|
|
|
2811
2811
|
const text = track('Sample text');
|
|
2812
2812
|
|
|
2813
2813
|
effect(() => {
|
|
2814
|
-
logs.push(
|
|
2814
|
+
logs.push(text.value);
|
|
2815
2815
|
});
|
|
2816
2816
|
|
|
2817
2817
|
<div contenteditable="true" {ref bindTextContent(text)} />
|
|
@@ -2865,7 +2865,7 @@ describe('bindTextContent', () => {
|
|
|
2865
2865
|
|
|
2866
2866
|
<div>
|
|
2867
2867
|
<div contenteditable="true" {ref bindTextContent(text)} />
|
|
2868
|
-
<button onClick={() => (
|
|
2868
|
+
<button onClick={() => (text.value = 'End')}>{'Update'}</button>
|
|
2869
2869
|
</div>
|
|
2870
2870
|
}
|
|
2871
2871
|
|
|
@@ -2955,7 +2955,7 @@ describe('bindNode', () => {
|
|
|
2955
2955
|
const nodeRef = track(null);
|
|
2956
2956
|
|
|
2957
2957
|
effect(() => {
|
|
2958
|
-
capturedNode =
|
|
2958
|
+
capturedNode = nodeRef.value;
|
|
2959
2959
|
});
|
|
2960
2960
|
|
|
2961
2961
|
<div {ref bindNode(nodeRef)} />
|
|
@@ -2998,8 +2998,8 @@ describe('bindNode', () => {
|
|
|
2998
2998
|
<input type="text" {ref bindNode(inputRef)} />
|
|
2999
2999
|
<button
|
|
3000
3000
|
onClick={() => {
|
|
3001
|
-
if (
|
|
3002
|
-
|
|
3001
|
+
if (inputRef.value) {
|
|
3002
|
+
inputRef.value.value = 'Set by ref';
|
|
3003
3003
|
}
|
|
3004
3004
|
}}
|
|
3005
3005
|
>
|
|
@@ -3068,8 +3068,8 @@ describe('bindFiles', () => {
|
|
|
3068
3068
|
const files = track(null);
|
|
3069
3069
|
|
|
3070
3070
|
effect(() => {
|
|
3071
|
-
|
|
3072
|
-
if (
|
|
3071
|
+
files.value;
|
|
3072
|
+
if (files.value) logs.push(files.value);
|
|
3073
3073
|
});
|
|
3074
3074
|
|
|
3075
3075
|
<input type="file" multiple {ref bindFiles(files)} />
|
|
@@ -3154,7 +3154,7 @@ describe('bindFiles', () => {
|
|
|
3154
3154
|
const files = track<FileList | null>(null);
|
|
3155
3155
|
|
|
3156
3156
|
effect(() => {
|
|
3157
|
-
capturedFiles =
|
|
3157
|
+
capturedFiles = files.value;
|
|
3158
3158
|
});
|
|
3159
3159
|
|
|
3160
3160
|
<input type="file" {ref bindFiles(files)} />
|
|
@@ -3228,16 +3228,16 @@ describe('bindFiles', () => {
|
|
|
3228
3228
|
const input = track<HTMLInputElement | null>(null);
|
|
3229
3229
|
|
|
3230
3230
|
effect(() => {
|
|
3231
|
-
capturedFiles =
|
|
3231
|
+
capturedFiles = files.value;
|
|
3232
3232
|
});
|
|
3233
3233
|
|
|
3234
3234
|
<div>
|
|
3235
3235
|
<input type="file" {ref bindFiles<FileList>(files)} {ref bindNode(input)} />
|
|
3236
3236
|
<button
|
|
3237
3237
|
onClick={() => {
|
|
3238
|
-
if (
|
|
3239
|
-
|
|
3240
|
-
|
|
3238
|
+
if (input.value) {
|
|
3239
|
+
input.value.files = new DataTransfer().files;
|
|
3240
|
+
input.value.dispatchEvent(new Event('change', { bubbles: true }));
|
|
3241
3241
|
}
|
|
3242
3242
|
}}
|
|
3243
3243
|
>
|
|
@@ -3292,9 +3292,9 @@ describe('bindFiles', () => {
|
|
|
3292
3292
|
/>
|
|
3293
3293
|
<button
|
|
3294
3294
|
onClick={() => {
|
|
3295
|
-
if (
|
|
3296
|
-
|
|
3297
|
-
|
|
3295
|
+
if (input.value) {
|
|
3296
|
+
input.value.files = new DataTransfer().files;
|
|
3297
|
+
input.value.dispatchEvent(new Event('change', { bubbles: true }));
|
|
3298
3298
|
}
|
|
3299
3299
|
}}
|
|
3300
3300
|
>
|
|
@@ -3337,9 +3337,9 @@ describe('bindFiles', () => {
|
|
|
3337
3337
|
const files = track<FileList | null>(null);
|
|
3338
3338
|
|
|
3339
3339
|
effect(() => {
|
|
3340
|
-
|
|
3341
|
-
if (
|
|
3342
|
-
fileCounts.push(
|
|
3340
|
+
files.value;
|
|
3341
|
+
if (files.value) {
|
|
3342
|
+
fileCounts.push(files.value.length);
|
|
3343
3343
|
}
|
|
3344
3344
|
});
|
|
3345
3345
|
|
|
@@ -3438,9 +3438,9 @@ describe('bindFiles', () => {
|
|
|
3438
3438
|
const files = track<FileList | null>(null);
|
|
3439
3439
|
|
|
3440
3440
|
effect(() => {
|
|
3441
|
-
|
|
3442
|
-
if (
|
|
3443
|
-
capturedFile =
|
|
3441
|
+
files.value;
|
|
3442
|
+
if (files.value && files.value.length > 0) {
|
|
3443
|
+
capturedFile = files.value[0];
|
|
3444
3444
|
}
|
|
3445
3445
|
});
|
|
3446
3446
|
|
|
@@ -3514,7 +3514,7 @@ describe('bindFiles', () => {
|
|
|
3514
3514
|
const files = track(null);
|
|
3515
3515
|
|
|
3516
3516
|
effect(() => {
|
|
3517
|
-
logs.push(
|
|
3517
|
+
logs.push(files.value);
|
|
3518
3518
|
});
|
|
3519
3519
|
|
|
3520
3520
|
<input type="file" {ref bindFiles(files)} />
|
|
@@ -3769,7 +3769,7 @@ describe('error handling', () => {
|
|
|
3769
3769
|
expect(() => {
|
|
3770
3770
|
component App() {
|
|
3771
3771
|
const value = track('');
|
|
3772
|
-
<input type="text" {ref bindValue(() =>
|
|
3772
|
+
<input type="text" {ref bindValue(() => value.value)} />
|
|
3773
3773
|
}
|
|
3774
3774
|
render(App);
|
|
3775
3775
|
}).toThrow(
|
|
@@ -3782,7 +3782,7 @@ describe('error handling', () => {
|
|
|
3782
3782
|
component App() {
|
|
3783
3783
|
const value = track('');
|
|
3784
3784
|
// @ts-expect-error invalid argument
|
|
3785
|
-
<input type="text" {ref bindValue(() =>
|
|
3785
|
+
<input type="text" {ref bindValue(() => value.value, 5)} />
|
|
3786
3786
|
}
|
|
3787
3787
|
render(App);
|
|
3788
3788
|
}).toThrow(
|
|
@@ -3818,7 +3818,7 @@ describe('error handling', () => {
|
|
|
3818
3818
|
component App() {
|
|
3819
3819
|
const value = track('2');
|
|
3820
3820
|
|
|
3821
|
-
<select multiple {ref bindValue(() =>
|
|
3821
|
+
<select multiple {ref bindValue(() => value.value, (v) => (value.value = v))}>
|
|
3822
3822
|
<option value="1">{'One'}</option>
|
|
3823
3823
|
<option value="2">{'Two'}</option>
|
|
3824
3824
|
</select>
|