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
|
@@ -18,17 +18,16 @@ describe('basic server > components & composition', () => {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
it('renders with component composition and children', async () => {
|
|
21
|
-
function Card(props: PropsWithChildren<{}>) {
|
|
22
|
-
|
|
21
|
+
function Card(props: PropsWithChildren<{}>) @{
|
|
22
|
+
<div class="card">{props.children}</div>
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
function
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
</>;
|
|
25
|
+
function children() @{
|
|
26
|
+
<p>{'Card content here'}</p>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function Basic() @{
|
|
30
|
+
<Card {children} />
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
const { body } = await render(Basic);
|
|
@@ -42,21 +41,16 @@ describe('basic server > components & composition', () => {
|
|
|
42
41
|
});
|
|
43
42
|
|
|
44
43
|
it('does not render a falsy component call', async () => {
|
|
45
|
-
function Card(props: PropsWithChildrenOptional<{ test: Component }>) {
|
|
46
|
-
|
|
47
|
-
<div class="card">
|
|
48
|
-
{props.children}
|
|
49
|
-
</div>
|
|
50
|
-
</>;
|
|
44
|
+
function Card(props: PropsWithChildrenOptional<{ test: Component }>) @{
|
|
45
|
+
<div class="card">{props.children}</div>
|
|
51
46
|
}
|
|
52
47
|
|
|
53
|
-
function
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
</>;
|
|
48
|
+
function test() {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function Basic() @{
|
|
53
|
+
<Card {test} />
|
|
60
54
|
}
|
|
61
55
|
|
|
62
56
|
const { body } = await render(Basic);
|
|
@@ -71,17 +65,16 @@ describe('basic server > components & composition', () => {
|
|
|
71
65
|
});
|
|
72
66
|
|
|
73
67
|
it('renders a component when children is set a component prop', async () => {
|
|
74
|
-
function Card(props: PropsWithChildren<{}>) {
|
|
75
|
-
|
|
68
|
+
function Card(props: PropsWithChildren<{}>) @{
|
|
69
|
+
<div class="card">{props.children}</div>
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function children() @{
|
|
73
|
+
<p>{'Card content here'}</p>
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
function Basic() {
|
|
79
|
-
|
|
80
|
-
function children() {
|
|
81
|
-
return <><p>{'Card content here'}</p></>;
|
|
82
|
-
}
|
|
83
|
-
<Card {children} />
|
|
84
|
-
</>;
|
|
76
|
+
function Basic() @{
|
|
77
|
+
<Card {children} />
|
|
85
78
|
}
|
|
86
79
|
|
|
87
80
|
const { body } = await render(Basic);
|
|
@@ -95,12 +88,14 @@ describe('basic server > components & composition', () => {
|
|
|
95
88
|
});
|
|
96
89
|
|
|
97
90
|
it('renders direct component function calls as values', async () => {
|
|
98
|
-
function Test({ label }: { label: string }) {
|
|
99
|
-
|
|
91
|
+
function Test({ label }: { label: string }) @{
|
|
92
|
+
<span>{label}</span>
|
|
100
93
|
}
|
|
101
94
|
|
|
102
|
-
function App() {
|
|
103
|
-
|
|
95
|
+
function App() @{
|
|
96
|
+
<>
|
|
97
|
+
{Test({ label: 'direct call' })}
|
|
98
|
+
</>
|
|
104
99
|
}
|
|
105
100
|
|
|
106
101
|
const { body } = await render(App);
|
|
@@ -115,8 +110,8 @@ describe('basic server > components & composition', () => {
|
|
|
115
110
|
return [item, 'B', null, undefined];
|
|
116
111
|
}
|
|
117
112
|
|
|
118
|
-
function App() {
|
|
119
|
-
|
|
113
|
+
function App() @{
|
|
114
|
+
<Test />
|
|
120
115
|
}
|
|
121
116
|
|
|
122
117
|
const { body } = await render(App);
|
|
@@ -126,13 +121,13 @@ describe('basic server > components & composition', () => {
|
|
|
126
121
|
});
|
|
127
122
|
|
|
128
123
|
it('throws when a TSRXElement value is used as a component type', async () => {
|
|
129
|
-
function Test() {
|
|
130
|
-
|
|
124
|
+
function Test() @{
|
|
125
|
+
<span>{'value'}</span>
|
|
131
126
|
}
|
|
132
127
|
|
|
133
|
-
function App() {
|
|
128
|
+
function App() @{
|
|
134
129
|
const El = Test({});
|
|
135
|
-
|
|
130
|
+
<El />
|
|
136
131
|
}
|
|
137
132
|
|
|
138
133
|
const result = await render_expected_invalid_component(App);
|
|
@@ -145,8 +140,8 @@ describe('basic server > components & composition', () => {
|
|
|
145
140
|
return 'plain';
|
|
146
141
|
}
|
|
147
142
|
|
|
148
|
-
function App() {
|
|
149
|
-
|
|
143
|
+
function App() @{
|
|
144
|
+
<Func />
|
|
150
145
|
}
|
|
151
146
|
|
|
152
147
|
const { body } = await render(App);
|
|
@@ -155,16 +150,12 @@ describe('basic server > components & composition', () => {
|
|
|
155
150
|
});
|
|
156
151
|
|
|
157
152
|
it('allows a compat-only function as a component type', async () => {
|
|
158
|
-
function CompatOnly() {
|
|
159
|
-
|
|
160
|
-
<div>
|
|
161
|
-
{'compat'}
|
|
162
|
-
</div>
|
|
163
|
-
</tsx>;
|
|
153
|
+
function CompatOnly() @{
|
|
154
|
+
<div>{'compat'}</div>
|
|
164
155
|
}
|
|
165
156
|
|
|
166
|
-
function App() {
|
|
167
|
-
|
|
157
|
+
function App() @{
|
|
158
|
+
<CompatOnly />
|
|
168
159
|
}
|
|
169
160
|
|
|
170
161
|
const { body } = await render(App);
|
|
@@ -177,8 +168,8 @@ describe('basic server > components & composition', () => {
|
|
|
177
168
|
variant: string;
|
|
178
169
|
label: string;
|
|
179
170
|
onClick: EventListener;
|
|
180
|
-
}>) {
|
|
181
|
-
|
|
171
|
+
}>) @{
|
|
172
|
+
<button class={props.variant} onClick={props.onClick}>{props.label}</button>
|
|
182
173
|
}
|
|
183
174
|
|
|
184
175
|
function Card(props: PropsWithExtras<{
|
|
@@ -186,27 +177,27 @@ describe('basic server > components & composition', () => {
|
|
|
186
177
|
content: string;
|
|
187
178
|
buttonText: string;
|
|
188
179
|
onAction: EventListener;
|
|
189
|
-
}>) {
|
|
190
|
-
|
|
191
|
-
<
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
</div>
|
|
196
|
-
</>;
|
|
180
|
+
}>) @{
|
|
181
|
+
<div class="card">
|
|
182
|
+
<h3>{props.title}</h3>
|
|
183
|
+
<p>{props.content}</p>
|
|
184
|
+
<Button variant="primary" label={props.buttonText} onClick={props.onAction} />
|
|
185
|
+
</div>
|
|
197
186
|
}
|
|
198
187
|
|
|
199
|
-
function Basic() {
|
|
200
|
-
|
|
201
|
-
|
|
188
|
+
function Basic() @{
|
|
189
|
+
let &[clicked] = track(false);
|
|
190
|
+
<>
|
|
202
191
|
<Card
|
|
203
192
|
title="Test Card"
|
|
204
193
|
content="This is a test card"
|
|
205
194
|
buttonText="Click me"
|
|
206
195
|
onAction={() => (clicked = true)}
|
|
207
196
|
/>
|
|
208
|
-
<div class="status">
|
|
209
|
-
|
|
197
|
+
<div class="status">
|
|
198
|
+
{clicked ? 'Clicked' : 'Not clicked'}
|
|
199
|
+
</div>
|
|
200
|
+
</>
|
|
210
201
|
}
|
|
211
202
|
|
|
212
203
|
const { body } = await render(Basic);
|
|
@@ -229,27 +220,25 @@ describe('basic server > components & composition', () => {
|
|
|
229
220
|
function ChildComponent(props: PropsWithExtras<{
|
|
230
221
|
text: Tracked<string>;
|
|
231
222
|
count: Tracked<number>;
|
|
232
|
-
}>) {
|
|
233
|
-
|
|
223
|
+
}>) @{
|
|
224
|
+
<>
|
|
234
225
|
<div class="child-content">{props.text.value}</div>
|
|
235
226
|
<div class="child-count">{props.count.value}</div>
|
|
236
|
-
|
|
227
|
+
</>
|
|
237
228
|
}
|
|
238
229
|
|
|
239
|
-
function Basic() {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
230
|
+
function Basic() @{
|
|
231
|
+
let &[message, messageTracked] = track('Hello');
|
|
232
|
+
let &[number, numberTracked] = track(1);
|
|
233
|
+
<>
|
|
243
234
|
<ChildComponent text={messageTracked} count={numberTracked} />
|
|
244
235
|
<button
|
|
245
236
|
onClick={() => {
|
|
246
237
|
message = message === 'Hello' ? 'Goodbye' : 'Hello';
|
|
247
238
|
number++;
|
|
248
239
|
}}
|
|
249
|
-
>
|
|
250
|
-
|
|
251
|
-
</button>
|
|
252
|
-
</>;
|
|
240
|
+
>{'Update Props'}</button>
|
|
241
|
+
</>
|
|
253
242
|
}
|
|
254
243
|
|
|
255
244
|
const { body } = await render(Basic);
|
|
@@ -263,16 +252,16 @@ describe('basic server > components & composition', () => {
|
|
|
263
252
|
});
|
|
264
253
|
|
|
265
254
|
it('renders components as named and anonymous properties', async () => {
|
|
266
|
-
function Span() {
|
|
267
|
-
|
|
255
|
+
function Span() @{
|
|
256
|
+
<span>{'Hello from Span'}</span>
|
|
268
257
|
}
|
|
269
258
|
|
|
270
|
-
function Button({ children }: PropsWithChildren<{}>) {
|
|
271
|
-
|
|
259
|
+
function Button({ children }: PropsWithChildren<{}>) @{
|
|
260
|
+
<button>{children}</button>
|
|
272
261
|
}
|
|
273
262
|
|
|
274
|
-
function ArrowButton({ children }: PropsWithChildren<{}>) {
|
|
275
|
-
|
|
263
|
+
function ArrowButton({ children }: PropsWithChildren<{}>) @{
|
|
264
|
+
<button class="arrow-button">{children}</button>
|
|
276
265
|
}
|
|
277
266
|
|
|
278
267
|
const UI = {
|
|
@@ -281,18 +270,17 @@ describe('basic server > components & composition', () => {
|
|
|
281
270
|
arrowButton: ArrowButton,
|
|
282
271
|
};
|
|
283
272
|
|
|
284
|
-
function
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
</>;
|
|
273
|
+
function children() @{
|
|
274
|
+
<span>{'Click me!'}</span>
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function App() @{
|
|
278
|
+
<div>
|
|
279
|
+
<h1>{'Component as Property Test'}</h1>
|
|
280
|
+
<UI.span />
|
|
281
|
+
<UI.button {children} />
|
|
282
|
+
<UI.arrowButton {children} />
|
|
283
|
+
</div>
|
|
296
284
|
}
|
|
297
285
|
|
|
298
286
|
const { body } = await render(App);
|
|
@@ -312,16 +300,18 @@ describe('basic server > components & composition', () => {
|
|
|
312
300
|
});
|
|
313
301
|
|
|
314
302
|
it('handles empty string children', async () => {
|
|
315
|
-
function Button({ children }: PropsWithChildren<{}>) {
|
|
316
|
-
|
|
303
|
+
function Button({ children }: PropsWithChildren<{}>) @{
|
|
304
|
+
<>
|
|
305
|
+
{children}
|
|
306
|
+
</>
|
|
317
307
|
}
|
|
318
308
|
|
|
319
|
-
function App() {
|
|
320
|
-
|
|
321
|
-
|
|
309
|
+
function App() @{
|
|
310
|
+
let content = '';
|
|
311
|
+
<>
|
|
322
312
|
<Button>{''}</Button>
|
|
323
313
|
<Button>{content}</Button>
|
|
324
|
-
|
|
314
|
+
</>
|
|
325
315
|
}
|
|
326
316
|
|
|
327
317
|
const { body } = await render(App);
|
|
@@ -332,18 +322,16 @@ describe('basic server > components & composition', () => {
|
|
|
332
322
|
|
|
333
323
|
it('handles component without any output', async () => {
|
|
334
324
|
function Noop() {
|
|
335
|
-
return
|
|
325
|
+
return null;
|
|
336
326
|
}
|
|
337
327
|
|
|
338
|
-
function Op() {
|
|
339
|
-
|
|
328
|
+
function Op() @{
|
|
329
|
+
<div>{'Some HTML content'}</div>
|
|
340
330
|
}
|
|
341
331
|
|
|
342
|
-
function App() {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
<@Content />
|
|
346
|
-
</>;
|
|
332
|
+
function App() @{
|
|
333
|
+
let Content = track(() => Noop);
|
|
334
|
+
<@Content />
|
|
347
335
|
}
|
|
348
336
|
|
|
349
337
|
const { body } = await render(App);
|
|
@@ -353,12 +341,12 @@ describe('basic server > components & composition', () => {
|
|
|
353
341
|
});
|
|
354
342
|
|
|
355
343
|
it('renders explicit children prop without spread', async () => {
|
|
356
|
-
function Card(props: PropsWithChildren<{}>) {
|
|
357
|
-
|
|
344
|
+
function Card(props: PropsWithChildren<{}>) @{
|
|
345
|
+
<div class="card">{props.children}</div>
|
|
358
346
|
}
|
|
359
347
|
|
|
360
|
-
function App() {
|
|
361
|
-
|
|
348
|
+
function App() @{
|
|
349
|
+
<Card children="fallback text" />
|
|
362
350
|
}
|
|
363
351
|
|
|
364
352
|
const { body } = await render(App);
|
|
@@ -367,15 +355,13 @@ describe('basic server > components & composition', () => {
|
|
|
367
355
|
});
|
|
368
356
|
|
|
369
357
|
it('renders explicit children before spread', async () => {
|
|
370
|
-
function Card(props: PropsWithChildren<{ id: string }>) {
|
|
371
|
-
|
|
358
|
+
function Card(props: PropsWithChildren<{ id: string }>) @{
|
|
359
|
+
<div class="card">{props.children}</div>
|
|
372
360
|
}
|
|
373
361
|
|
|
374
|
-
function App() {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
<Card children="fallback text" {...extra} />
|
|
378
|
-
</>;
|
|
362
|
+
function App() @{
|
|
363
|
+
const extra = { id: '1' };
|
|
364
|
+
<Card children="fallback text" {...extra} />
|
|
379
365
|
}
|
|
380
366
|
|
|
381
367
|
const { body } = await render(App);
|
|
@@ -384,15 +370,13 @@ describe('basic server > components & composition', () => {
|
|
|
384
370
|
});
|
|
385
371
|
|
|
386
372
|
it('renders spread before explicit children', async () => {
|
|
387
|
-
function Card(props: PropsWithChildren<{ id: string }>) {
|
|
388
|
-
|
|
373
|
+
function Card(props: PropsWithChildren<{ id: string }>) @{
|
|
374
|
+
<div class="card">{props.children}</div>
|
|
389
375
|
}
|
|
390
376
|
|
|
391
|
-
function App() {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
<Card {...extra} children="fallback text" />
|
|
395
|
-
</>;
|
|
377
|
+
function App() @{
|
|
378
|
+
const extra = { id: '1' };
|
|
379
|
+
<Card {...extra} children="fallback text" />
|
|
396
380
|
}
|
|
397
381
|
|
|
398
382
|
const { body } = await render(App);
|
|
@@ -401,17 +385,15 @@ describe('basic server > components & composition', () => {
|
|
|
401
385
|
});
|
|
402
386
|
|
|
403
387
|
it('template children override explicit children before spread', async () => {
|
|
404
|
-
function Card(props: PropsWithChildren<{ id: string }>) {
|
|
405
|
-
|
|
388
|
+
function Card(props: PropsWithChildren<{ id: string }>) @{
|
|
389
|
+
<div class="card">{props.children}</div>
|
|
406
390
|
}
|
|
407
391
|
|
|
408
|
-
function App() {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
<
|
|
412
|
-
|
|
413
|
-
</Card>
|
|
414
|
-
</>;
|
|
392
|
+
function App() @{
|
|
393
|
+
const extra = { id: '1' };
|
|
394
|
+
<Card children="fallback text" {...extra}>
|
|
395
|
+
<span>{'template content'}</span>
|
|
396
|
+
</Card>
|
|
415
397
|
}
|
|
416
398
|
|
|
417
399
|
const { body } = await render(App);
|
|
@@ -421,17 +403,15 @@ describe('basic server > components & composition', () => {
|
|
|
421
403
|
});
|
|
422
404
|
|
|
423
405
|
it('template children override explicit children after spread', async () => {
|
|
424
|
-
function Card(props: PropsWithChildren<{ id: string }>) {
|
|
425
|
-
|
|
406
|
+
function Card(props: PropsWithChildren<{ id: string }>) @{
|
|
407
|
+
<div class="card">{props.children}</div>
|
|
426
408
|
}
|
|
427
409
|
|
|
428
|
-
function App() {
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
<
|
|
432
|
-
|
|
433
|
-
</Card>
|
|
434
|
-
</>;
|
|
410
|
+
function App() @{
|
|
411
|
+
const extra = { id: '1' };
|
|
412
|
+
<Card {...extra} children="fallback text">
|
|
413
|
+
<span>{'template content'}</span>
|
|
414
|
+
</Card>
|
|
435
415
|
}
|
|
436
416
|
|
|
437
417
|
const { body } = await render(App);
|
|
@@ -441,19 +421,13 @@ describe('basic server > components & composition', () => {
|
|
|
441
421
|
});
|
|
442
422
|
|
|
443
423
|
it('spread can override explicit children when no template children', async () => {
|
|
444
|
-
function Card(props: PropsWithChildren<{ id: string }>) {
|
|
445
|
-
|
|
424
|
+
function Card(props: PropsWithChildren<{ id: string }>) @{
|
|
425
|
+
<div class="card">{props.children}</div>
|
|
446
426
|
}
|
|
447
427
|
|
|
448
|
-
function App() {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
<Card
|
|
452
|
-
// @ts-ignore
|
|
453
|
-
children="explicit"
|
|
454
|
-
{...extra}
|
|
455
|
-
/>
|
|
456
|
-
</>;
|
|
428
|
+
function App() @{
|
|
429
|
+
const extra = { id: '1', children: 'from spread' };
|
|
430
|
+
<Card children="explicit" {...extra} />
|
|
457
431
|
}
|
|
458
432
|
|
|
459
433
|
const { body } = await render(App);
|
|
@@ -462,15 +436,13 @@ describe('basic server > components & composition', () => {
|
|
|
462
436
|
});
|
|
463
437
|
|
|
464
438
|
it('explicit children overrides spread children when it comes after', async () => {
|
|
465
|
-
function Card(props: PropsWithChildren<{ id: string }>) {
|
|
466
|
-
|
|
439
|
+
function Card(props: PropsWithChildren<{ id: string }>) @{
|
|
440
|
+
<div class="card">{props.children}</div>
|
|
467
441
|
}
|
|
468
442
|
|
|
469
|
-
function App() {
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
<Card {...extra} children="explicit" />
|
|
473
|
-
</>;
|
|
443
|
+
function App() @{
|
|
444
|
+
const extra = { id: '1', children: 'from spread' };
|
|
445
|
+
<Card {...extra} children="explicit" />
|
|
474
446
|
}
|
|
475
447
|
|
|
476
448
|
const { body } = await render(App);
|
|
@@ -479,20 +451,18 @@ describe('basic server > components & composition', () => {
|
|
|
479
451
|
});
|
|
480
452
|
|
|
481
453
|
it('renders components declared inside composite element children', async () => {
|
|
482
|
-
function Wrapper(props: PropsWithChildren<{}>) {
|
|
483
|
-
|
|
454
|
+
function Wrapper(props: PropsWithChildren<{}>) @{
|
|
455
|
+
<div class="wrapper">{props.children}</div>
|
|
484
456
|
}
|
|
485
457
|
|
|
486
|
-
function
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
function Inner() {
|
|
490
|
-
return <><span class="inner">{'inner content'}</span></>;
|
|
491
|
-
}
|
|
458
|
+
function Inner() @{
|
|
459
|
+
<div class="inner">{'inner content'}</div>
|
|
460
|
+
}
|
|
492
461
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
462
|
+
function App() @{
|
|
463
|
+
<Wrapper>
|
|
464
|
+
<Inner />
|
|
465
|
+
</Wrapper>
|
|
496
466
|
}
|
|
497
467
|
|
|
498
468
|
const { body } = await render(App);
|
|
@@ -501,29 +471,25 @@ describe('basic server > components & composition', () => {
|
|
|
501
471
|
});
|
|
502
472
|
|
|
503
473
|
it('renders nested components declared inside composite children with prop passing', async () => {
|
|
504
|
-
function Wrapper(props: PropsWithChildren<{}>) {
|
|
505
|
-
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
function
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
<Child {Z} />
|
|
525
|
-
</Wrapper>
|
|
526
|
-
</>;
|
|
474
|
+
function Wrapper(props: PropsWithChildren<{}>) @{
|
|
475
|
+
<div class="wrapper">{props.children}</div>
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
function Z() @{
|
|
479
|
+
<span class="z">{'I am Z'}</span>
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function Child(props: { Z: Component }) @{
|
|
483
|
+
<div class="child">
|
|
484
|
+
{'Child Component: '}
|
|
485
|
+
<props.Z />
|
|
486
|
+
</div>
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
function App() @{
|
|
490
|
+
<Wrapper>
|
|
491
|
+
<Child {Z} />
|
|
492
|
+
</Wrapper>
|
|
527
493
|
}
|
|
528
494
|
|
|
529
495
|
const { body } = await render(App);
|