ripple 0.3.72 → 0.3.76
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 +116 -0
- package/package.json +3 -3
- package/src/jsx-runtime.d.ts +4 -10
- package/src/runtime/dynamic-client.js +33 -0
- package/src/runtime/dynamic-server.js +80 -0
- package/src/runtime/index-client.js +5 -13
- package/src/runtime/index-server.js +2 -0
- package/src/runtime/internal/client/blocks.js +6 -27
- package/src/runtime/internal/client/composite.js +11 -6
- package/src/runtime/internal/client/for.js +80 -5
- package/src/runtime/internal/client/index.js +0 -2
- package/src/runtime/internal/client/render.js +5 -2
- package/src/runtime/internal/client/types.d.ts +0 -10
- package/src/runtime/internal/server/index.js +8 -1
- 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 +55 -61
- package/tests/client/basic/basic.components.test.tsrx +198 -220
- package/tests/client/basic/basic.errors.test.tsrx +70 -76
- 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.styling.test.tsrx +16 -14
- 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 +357 -288
- 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 +62 -47
- 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 +493 -439
- 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 +65 -72
- package/tests/client/date.test.tsrx +83 -83
- package/tests/client/dynamic-elements.test.tsrx +318 -299
- package/tests/client/events.test.tsrx +252 -266
- package/tests/client/for.test.tsrx +120 -127
- package/tests/client/head.test.tsrx +74 -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 +197 -216
- 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 +286 -292
- 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 +390 -319
- 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 -258
- 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 +117 -162
- package/tests/server/basic.components.test.tsrx +164 -194
- package/tests/server/basic.test.tsrx +299 -199
- 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 +147 -148
- package/tests/server/for.test.tsrx +115 -84
- package/tests/server/head.test.tsrx +54 -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 +61 -69
- 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 +29 -4
- package/src/runtime/internal/client/compat.js +0 -40
- package/tests/utils/compiler-compat-config.test.js +0 -38
|
@@ -5,17 +5,15 @@ describe('basic client > utilities', () => {
|
|
|
5
5
|
let resolve: () => void;
|
|
6
6
|
const promise = new Promise<void>((res) => (resolve = res));
|
|
7
7
|
|
|
8
|
-
function Basic() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
tick().then(() => resolve());
|
|
15
|
-
});
|
|
8
|
+
function Basic() @{
|
|
9
|
+
let &[value] = track(0);
|
|
10
|
+
effect(() => {
|
|
11
|
+
untrack(() => {
|
|
12
|
+
value++;
|
|
13
|
+
tick().then(() => resolve());
|
|
16
14
|
});
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
});
|
|
16
|
+
<p>{value}</p>
|
|
19
17
|
}
|
|
20
18
|
render(Basic);
|
|
21
19
|
|
|
@@ -14,19 +14,19 @@ describe('passing reactivity between boundaries tests', () => {
|
|
|
14
14
|
return double;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
function App() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
<div>
|
|
17
|
+
function App() @{
|
|
18
|
+
let &[count, countTracked] = track(0);
|
|
19
|
+
const &[double] = createDouble(countTracked);
|
|
20
|
+
<>
|
|
21
|
+
<div>
|
|
22
|
+
{'Double: ' + double}
|
|
23
|
+
</div>
|
|
22
24
|
<button
|
|
23
25
|
onClick={() => {
|
|
24
26
|
count++;
|
|
25
27
|
}}
|
|
26
|
-
>
|
|
27
|
-
|
|
28
|
-
</button>
|
|
29
|
-
</>;
|
|
28
|
+
>{'Increment'}</button>
|
|
29
|
+
</>
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
render(App);
|
|
@@ -63,19 +63,19 @@ describe('passing reactivity between boundaries tests', () => {
|
|
|
63
63
|
return { double };
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function App() {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
<div>
|
|
66
|
+
function App() @{
|
|
67
|
+
let count = track(0);
|
|
68
|
+
const { double } = createDouble({ count });
|
|
69
|
+
<>
|
|
70
|
+
<div>
|
|
71
|
+
{'Double: ' + double.value}
|
|
72
|
+
</div>
|
|
71
73
|
<button
|
|
72
74
|
onClick={() => {
|
|
73
75
|
count.value++;
|
|
74
76
|
}}
|
|
75
|
-
>
|
|
76
|
-
|
|
77
|
-
</button>
|
|
78
|
-
</>;
|
|
77
|
+
>{'Increment'}</button>
|
|
78
|
+
</>
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
render(App);
|
|
@@ -7,62 +7,61 @@ describe('compiler > assignments', () => {
|
|
|
7
7
|
it('properly handles JS assignments, reads and updates to array indices', () => {
|
|
8
8
|
const logs: (number | undefined)[] = [];
|
|
9
9
|
|
|
10
|
-
function App() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
</>;
|
|
10
|
+
function App() @{
|
|
11
|
+
let items: number[] = [];
|
|
12
|
+
let tracked_items = track<number[]>([]);
|
|
13
|
+
let items2 = new Array();
|
|
14
|
+
let items3: RippleArray<number> = new RippleArray();
|
|
15
|
+
let i = 0;
|
|
16
|
+
logs.push(items[0]);
|
|
17
|
+
logs.push(items[i]);
|
|
18
|
+
logs.push(tracked_items.value[0]);
|
|
19
|
+
logs.push(tracked_items.value[i]);
|
|
20
|
+
logs.push(items2[0]);
|
|
21
|
+
logs.push(items2[i]);
|
|
22
|
+
logs.push(items3[0]);
|
|
23
|
+
logs.push(items3[i]);
|
|
24
|
+
items[0] = 123;
|
|
25
|
+
items[i] = 123;
|
|
26
|
+
tracked_items.value[0] = 123;
|
|
27
|
+
tracked_items.value[i] = 123;
|
|
28
|
+
items2[0] = 123;
|
|
29
|
+
items2[i] = 123;
|
|
30
|
+
items3[0] = 123;
|
|
31
|
+
items3[i] = 123;
|
|
32
|
+
logs.push(items[0]);
|
|
33
|
+
logs.push(items[i]);
|
|
34
|
+
logs.push(tracked_items.value[0]);
|
|
35
|
+
logs.push(tracked_items.value[i]);
|
|
36
|
+
logs.push(items2[0]);
|
|
37
|
+
logs.push(items2[i]);
|
|
38
|
+
logs.push(items3[0]);
|
|
39
|
+
logs.push(items3[i]);
|
|
40
|
+
items[0]++;
|
|
41
|
+
items[i]++;
|
|
42
|
+
tracked_items.value[0]++;
|
|
43
|
+
tracked_items.value[i]++;
|
|
44
|
+
items2[0]++;
|
|
45
|
+
items2[i]++;
|
|
46
|
+
items3[0]++;
|
|
47
|
+
items3[i]++;
|
|
48
|
+
logs.push(items[0]);
|
|
49
|
+
logs.push(items[i]);
|
|
50
|
+
logs.push(tracked_items.value[0]);
|
|
51
|
+
logs.push(tracked_items.value[i]);
|
|
52
|
+
logs.push(items2[0]);
|
|
53
|
+
logs.push(items2[i]);
|
|
54
|
+
logs.push(items3[0]);
|
|
55
|
+
logs.push(items3[i]);
|
|
56
|
+
logs.push(--items[0]);
|
|
57
|
+
logs.push(--items[i]);
|
|
58
|
+
logs.push(--tracked_items.value[0]);
|
|
59
|
+
logs.push(--tracked_items.value[i]);
|
|
60
|
+
logs.push(--items2[0]);
|
|
61
|
+
logs.push(--items2[i]);
|
|
62
|
+
logs.push(--items3[0]);
|
|
63
|
+
logs.push(--items3[i]);
|
|
64
|
+
<></>
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
render(App);
|
|
@@ -105,13 +104,14 @@ describe('compiler > assignments', () => {
|
|
|
105
104
|
|
|
106
105
|
it('compiles tracked values in effect with assignment expression', () => {
|
|
107
106
|
const source = `import { track, effect } from 'ripple';
|
|
108
|
-
function App() {
|
|
107
|
+
function App() @{
|
|
109
108
|
let &[count] = track(0);
|
|
110
109
|
|
|
111
110
|
effect(() => {
|
|
112
111
|
state.count = count;
|
|
113
112
|
});
|
|
114
|
-
|
|
113
|
+
<></>
|
|
114
|
+
}`;
|
|
115
115
|
const result = compile(source, 'test.tsrx');
|
|
116
116
|
const effect_match = result.code.match(EFFECT_BODY_REGEX);
|
|
117
117
|
expect(effect_match?.[1].trim()).toMatchSnapshot();
|
|
@@ -119,7 +119,7 @@ function App() { return <>
|
|
|
119
119
|
|
|
120
120
|
it('compiles tracked values in effect with update expressions', () => {
|
|
121
121
|
const source = `import { track, effect, untrack } from 'ripple';
|
|
122
|
-
function App() {
|
|
122
|
+
function App() @{
|
|
123
123
|
let &[count] = track(5);
|
|
124
124
|
|
|
125
125
|
effect(() => {
|
|
@@ -130,7 +130,8 @@ function App() { return <>
|
|
|
130
130
|
state.postDecrement = count--;
|
|
131
131
|
});
|
|
132
132
|
});
|
|
133
|
-
|
|
133
|
+
<></>
|
|
134
|
+
}`;
|
|
134
135
|
const result = compile(source, 'test.tsrx');
|
|
135
136
|
const effect_match = result.code.match(EFFECT_BODY_REGEX);
|
|
136
137
|
expect(effect_match?.[1].trim()).toMatchSnapshot();
|
|
@@ -138,15 +139,15 @@ function App() { return <>
|
|
|
138
139
|
|
|
139
140
|
it('compiles unknown lazy array destructuring through lazy array helpers', () => {
|
|
140
141
|
const source = `import { track } from 'ripple';
|
|
141
|
-
function Child({ tr: &[count, tr] }) {
|
|
142
|
+
function Child({ tr: &[count, tr] }) @{
|
|
142
143
|
count++;
|
|
143
144
|
tr[0]++;
|
|
144
145
|
<div>{count}</div>
|
|
145
|
-
|
|
146
|
-
function App() {
|
|
146
|
+
}
|
|
147
|
+
function App() @{
|
|
147
148
|
let tracked = track(0);
|
|
148
149
|
<Child tr={tracked} />
|
|
149
|
-
|
|
150
|
+
}`;
|
|
150
151
|
const { code } = compile(source, 'test.tsrx', { mode: 'client' });
|
|
151
152
|
|
|
152
153
|
expect(code).toContain('_$_.lazy_array_get(lazy, 0)');
|
|
@@ -158,13 +159,13 @@ function App() { return <>
|
|
|
158
159
|
});
|
|
159
160
|
|
|
160
161
|
it('compiles writes to unknown lazy array index 1 through lazy array helpers', () => {
|
|
161
|
-
const source = `function Child({ pair: &[first, second] }) {
|
|
162
|
+
const source = `function Child({ pair: &[first, second] }) @{
|
|
162
163
|
second = 10;
|
|
163
164
|
<div>{first}</div>
|
|
164
|
-
|
|
165
|
-
function App() {
|
|
165
|
+
}
|
|
166
|
+
function App() @{
|
|
166
167
|
<Child pair={[0, 1]} />
|
|
167
|
-
|
|
168
|
+
}`;
|
|
168
169
|
const { code } = compile(source, 'test.tsrx', { mode: 'client' });
|
|
169
170
|
|
|
170
171
|
expect(code).toContain('_$_.lazy_array_set(lazy, 10, 1)');
|
|
@@ -172,13 +173,13 @@ function App() { return <>
|
|
|
172
173
|
});
|
|
173
174
|
|
|
174
175
|
it('does not double-wrap member access on lazy array value bindings', () => {
|
|
175
|
-
const source = `function Child({ pair: &[first] }) {
|
|
176
|
+
const source = `function Child({ pair: &[first] }) @{
|
|
176
177
|
let value = first[0];
|
|
177
178
|
<div>{value}</div>
|
|
178
|
-
|
|
179
|
-
function App() {
|
|
179
|
+
}
|
|
180
|
+
function App() @{
|
|
180
181
|
<Child pair={[{ 0: 'x' }]} />
|
|
181
|
-
|
|
182
|
+
}`;
|
|
182
183
|
const { code } = compile(source, 'test.tsrx', { mode: 'client' });
|
|
183
184
|
|
|
184
185
|
expect(code).toContain('let value = _$_.lazy_array_get(lazy, 0)[0];');
|
|
@@ -187,13 +188,13 @@ function App() { return <>
|
|
|
187
188
|
|
|
188
189
|
it('throws on indexed access through known tracked lazy destructures', () => {
|
|
189
190
|
const source = `import { track } from 'ripple';
|
|
190
|
-
function App() {
|
|
191
|
+
function App() @{
|
|
191
192
|
let &[value, tracked_ref] = track({ 0: 'x' });
|
|
192
193
|
let nested = value[0];
|
|
193
194
|
tracked_ref[0] = { 0: 'y' };
|
|
194
195
|
let next = value[0];
|
|
195
196
|
<div>{nested}{next}</div>
|
|
196
|
-
|
|
197
|
+
}`;
|
|
197
198
|
|
|
198
199
|
expect(() => compile(source, 'test.tsrx', { mode: 'client' })).toThrow(
|
|
199
200
|
/Use \.value or &\[\] lazy destructuring/,
|
|
@@ -202,14 +203,14 @@ function App() { return <>
|
|
|
202
203
|
|
|
203
204
|
it('throws on known tracked indexed access', () => {
|
|
204
205
|
const source = `import { track } from 'ripple';
|
|
205
|
-
function App() {
|
|
206
|
+
function App() @{
|
|
206
207
|
let tracked = track(0);
|
|
207
208
|
tracked[0]++;
|
|
208
209
|
tracked[0] = tracked[0] + 1;
|
|
209
210
|
let value = tracked[0];
|
|
210
211
|
let ref = tracked[1];
|
|
211
212
|
<div>{value}</div>
|
|
212
|
-
|
|
213
|
+
}`;
|
|
213
214
|
|
|
214
215
|
expect(() => compile(source, 'test.tsrx', { mode: 'client' })).toThrow(
|
|
215
216
|
/Use \.value or &\[\] lazy destructuring/,
|
|
@@ -3,13 +3,13 @@ import { parse, compile } from '@tsrx/ripple';
|
|
|
3
3
|
describe('compiler > attributes', () => {
|
|
4
4
|
it('generates valid JavaScript for component props with hyphenated attributes', () => {
|
|
5
5
|
const source = `
|
|
6
|
-
function Child(props) {
|
|
6
|
+
function Child(props) @{
|
|
7
7
|
<div />
|
|
8
|
-
|
|
8
|
+
}
|
|
9
9
|
|
|
10
|
-
export default function App() {
|
|
10
|
+
export default function App() @{
|
|
11
11
|
<Child data-scope="test" aria-label="accessible" class="valid" />
|
|
12
|
-
|
|
12
|
+
}`;
|
|
13
13
|
|
|
14
14
|
const result = compile(source, 'test.tsrx', { mode: 'client' });
|
|
15
15
|
|
|
@@ -29,8 +29,12 @@ describe('compiler > attributes', () => {
|
|
|
29
29
|
|
|
30
30
|
testCases.forEach(({ attr, expected }) => {
|
|
31
31
|
const source = `
|
|
32
|
-
function Child(props) {
|
|
33
|
-
|
|
32
|
+
function Child(props) @{
|
|
33
|
+
<div />
|
|
34
|
+
}
|
|
35
|
+
export default function App() @{
|
|
36
|
+
<Child ${attr} />
|
|
37
|
+
}`;
|
|
34
38
|
|
|
35
39
|
const result = compile(source, 'test.tsrx', { mode: 'client' });
|
|
36
40
|
expect(result.code).toMatch(expected);
|
|
@@ -39,11 +43,11 @@ describe('compiler > attributes', () => {
|
|
|
39
43
|
|
|
40
44
|
it('handles mixed valid and invalid attribute identifiers correctly', () => {
|
|
41
45
|
const source = `
|
|
42
|
-
function Child(props) {
|
|
46
|
+
function Child(props) @{
|
|
43
47
|
<div />
|
|
44
|
-
|
|
48
|
+
}
|
|
45
49
|
|
|
46
|
-
export default function App() {
|
|
50
|
+
export default function App() @{
|
|
47
51
|
<Child
|
|
48
52
|
validProp="valid"
|
|
49
53
|
class="valid"
|
|
@@ -52,7 +56,7 @@ describe('compiler > attributes', () => {
|
|
|
52
56
|
aria-invalid="invalid"
|
|
53
57
|
custom-prop="invalid"
|
|
54
58
|
/>
|
|
55
|
-
|
|
59
|
+
}`;
|
|
56
60
|
|
|
57
61
|
const result = compile(source, 'test.tsrx', { mode: 'client' });
|
|
58
62
|
|
|
@@ -69,13 +73,13 @@ describe('compiler > attributes', () => {
|
|
|
69
73
|
|
|
70
74
|
it('ensures generated code is syntactically valid JavaScript', () => {
|
|
71
75
|
const source = `
|
|
72
|
-
function Child(props) {
|
|
76
|
+
function Child(props) @{
|
|
73
77
|
<div />
|
|
74
|
-
|
|
78
|
+
}
|
|
75
79
|
|
|
76
|
-
export default function App() {
|
|
80
|
+
export default function App() @{
|
|
77
81
|
<Child data-scope="test" />
|
|
78
|
-
|
|
82
|
+
}`;
|
|
79
83
|
|
|
80
84
|
const result = compile(source, 'test.tsrx', { mode: 'client' });
|
|
81
85
|
|