ripple 0.3.68 → 0.3.69
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 +48 -0
- package/package.json +3 -3
- package/src/jsx-runtime.d.ts +2 -2
- package/src/runtime/element.js +1 -1
- package/src/runtime/index-client.js +11 -11
- package/src/runtime/index-server.js +7 -4
- package/src/runtime/internal/client/bindings.js +1 -1
- package/src/runtime/internal/client/blocks.js +13 -4
- package/src/runtime/internal/client/component.js +55 -0
- package/src/runtime/internal/client/composite.js +4 -2
- package/src/runtime/internal/client/expression.js +65 -7
- package/src/runtime/internal/client/hmr.js +54 -43
- package/src/runtime/internal/client/index.js +5 -1
- package/src/runtime/internal/client/portal.js +70 -69
- package/src/runtime/internal/client/render.js +3 -0
- package/src/runtime/internal/server/index.js +92 -8
- package/tests/client/__snapshots__/html.test.tsrx.snap +3 -3
- package/tests/client/array/array.copy-within.test.tsrx +33 -31
- package/tests/client/array/array.derived.test.tsrx +186 -169
- package/tests/client/array/array.iteration.test.tsrx +40 -37
- package/tests/client/array/array.mutations.test.tsrx +113 -101
- package/tests/client/array/array.static.test.tsrx +119 -101
- package/tests/client/array/array.to-methods.test.tsrx +24 -21
- package/tests/client/async-suspend.test.tsrx +247 -246
- package/tests/client/basic/__snapshots__/basic.rendering.test.tsrx.snap +0 -1
- package/tests/client/basic/basic.attributes.test.tsrx +428 -423
- package/tests/client/basic/basic.collections.test.tsrx +109 -102
- package/tests/client/basic/basic.components.test.tsrx +323 -205
- package/tests/client/basic/basic.errors.test.tsrx +91 -91
- package/tests/client/basic/basic.events.test.tsrx +114 -115
- package/tests/client/basic/basic.get-set.test.tsrx +97 -87
- package/tests/client/basic/basic.hmr.test.tsrx +19 -16
- package/tests/client/basic/basic.reactivity.test.tsrx +199 -191
- package/tests/client/basic/basic.rendering.test.tsrx +272 -182
- package/tests/client/basic/basic.styling.test.tsrx +23 -22
- package/tests/client/basic/basic.utilities.test.tsrx +10 -8
- package/tests/client/boundaries.test.tsrx +26 -26
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +5 -5
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.tsrx.snap +5 -5
- package/tests/client/compiler/compiler.assignments.test.tsrx +77 -81
- package/tests/client/compiler/compiler.attributes.test.tsrx +15 -15
- package/tests/client/compiler/compiler.basic.test.tsrx +322 -314
- package/tests/client/compiler/compiler.regex.test.tsrx +44 -47
- package/tests/client/compiler/compiler.tracked-access.test.tsrx +38 -38
- package/tests/client/compiler/compiler.try-in-function.test.tsrx +16 -16
- package/tests/client/compiler/compiler.typescript.test.tsrx +2 -2
- package/tests/client/composite/composite.dynamic-components.test.tsrx +47 -48
- package/tests/client/composite/composite.generics.test.tsrx +168 -192
- package/tests/client/composite/composite.props.test.tsrx +97 -81
- package/tests/client/composite/composite.reactivity.test.tsrx +177 -147
- package/tests/client/composite/composite.render.test.tsrx +122 -105
- package/tests/client/computed-properties.test.tsrx +28 -28
- package/tests/client/context.test.tsrx +21 -21
- package/tests/client/css/global-additional-cases.test.tsrx +58 -58
- package/tests/client/css/global-advanced-selectors.test.tsrx +16 -16
- package/tests/client/css/global-at-rules.test.tsrx +10 -10
- package/tests/client/css/global-basic.test.tsrx +14 -14
- package/tests/client/css/global-classes-ids.test.tsrx +14 -14
- package/tests/client/css/global-combinators.test.tsrx +10 -10
- package/tests/client/css/global-complex-nesting.test.tsrx +14 -14
- package/tests/client/css/global-edge-cases.test.tsrx +18 -18
- package/tests/client/css/global-keyframes.test.tsrx +12 -12
- package/tests/client/css/global-nested.test.tsrx +10 -10
- package/tests/client/css/global-pseudo.test.tsrx +12 -12
- package/tests/client/css/global-scoping.test.tsrx +20 -20
- package/tests/client/css/style-identifier.test.tsrx +143 -291
- package/tests/client/date.test.tsrx +146 -133
- package/tests/client/dynamic-elements.test.tsrx +398 -365
- package/tests/client/events.test.tsrx +292 -290
- package/tests/client/for.test.tsrx +156 -153
- package/tests/client/head.test.tsrx +105 -96
- package/tests/client/html.test.tsrx +122 -26
- package/tests/client/input-value.test.tsrx +1361 -1314
- package/tests/client/lazy-array.test.tsrx +16 -13
- package/tests/client/lazy-destructuring.test.tsrx +257 -213
- package/tests/client/map.test.tsrx +65 -60
- package/tests/client/media-query.test.tsrx +22 -20
- package/tests/client/object.test.tsrx +87 -81
- package/tests/client/portal.test.tsrx +57 -51
- package/tests/client/ref.test.tsrx +233 -202
- package/tests/client/return.test.tsrx +71 -2560
- package/tests/client/set.test.tsrx +54 -45
- package/tests/client/svg.test.tsrx +216 -186
- package/tests/client/switch.test.tsrx +194 -193
- package/tests/client/track-async-hydration.test.tsrx +18 -14
- package/tests/client/tracked-index-access.test.tsrx +28 -18
- package/tests/client/try.test.tsrx +675 -548
- package/tests/client/tsx.test.tsrx +373 -311
- package/tests/client/typescript-generics.test.tsrx +145 -145
- package/tests/client/url/url.derived.test.tsrx +33 -28
- package/tests/client/url/url.parsing.test.tsrx +61 -51
- package/tests/client/url/url.partial-removal.test.tsrx +56 -48
- package/tests/client/url/url.reactivity.test.tsrx +142 -125
- package/tests/client/url/url.serialization.test.tsrx +13 -11
- package/tests/client/url-search-params/url-search-params.derived.test.tsrx +34 -29
- package/tests/client/url-search-params/url-search-params.initialization.test.tsrx +25 -21
- package/tests/client/url-search-params/url-search-params.iteration.test.tsrx +50 -45
- package/tests/client/url-search-params/url-search-params.mutation.test.tsrx +111 -99
- package/tests/client/url-search-params/url-search-params.retrieval.test.tsrx +49 -43
- package/tests/client/url-search-params/url-search-params.serialization.test.tsrx +14 -12
- package/tests/client/url-search-params/url-search-params.tracked-url.test.tsrx +16 -14
- package/tests/hydration/basic.test.js +3 -3
- package/tests/hydration/compiled/client/basic.js +586 -651
- package/tests/hydration/compiled/client/composite.js +79 -104
- package/tests/hydration/compiled/client/events.js +140 -148
- package/tests/hydration/compiled/client/for.js +1005 -1018
- package/tests/hydration/compiled/client/head.js +124 -134
- package/tests/hydration/compiled/client/hmr.js +41 -48
- package/tests/hydration/compiled/client/html-in-template.js +38 -41
- package/tests/hydration/compiled/client/html.js +970 -1314
- package/tests/hydration/compiled/client/if-children.js +234 -249
- package/tests/hydration/compiled/client/if.js +182 -189
- package/tests/hydration/compiled/client/mixed-control-flow.js +347 -303
- package/tests/hydration/compiled/client/nested-control-flow.js +1084 -832
- package/tests/hydration/compiled/client/portal.js +65 -85
- package/tests/hydration/compiled/client/reactivity.js +84 -90
- package/tests/hydration/compiled/client/return.js +38 -1939
- package/tests/hydration/compiled/client/switch.js +218 -224
- package/tests/hydration/compiled/client/track-async-serialization.js +250 -259
- package/tests/hydration/compiled/client/try.js +123 -132
- package/tests/hydration/compiled/server/basic.js +773 -831
- package/tests/hydration/compiled/server/composite.js +166 -191
- package/tests/hydration/compiled/server/events.js +170 -184
- package/tests/hydration/compiled/server/for.js +851 -909
- package/tests/hydration/compiled/server/head.js +206 -216
- package/tests/hydration/compiled/server/hmr.js +64 -72
- package/tests/hydration/compiled/server/html-in-template.js +42 -76
- package/tests/hydration/compiled/server/html.js +1362 -1667
- package/tests/hydration/compiled/server/if-children.js +419 -445
- package/tests/hydration/compiled/server/if.js +194 -208
- package/tests/hydration/compiled/server/mixed-control-flow.js +249 -257
- package/tests/hydration/compiled/server/nested-control-flow.js +491 -515
- package/tests/hydration/compiled/server/portal.js +152 -160
- package/tests/hydration/compiled/server/reactivity.js +94 -106
- package/tests/hydration/compiled/server/return.js +28 -2172
- package/tests/hydration/compiled/server/switch.js +274 -286
- package/tests/hydration/compiled/server/track-async-serialization.js +340 -358
- package/tests/hydration/compiled/server/try.js +167 -185
- package/tests/hydration/components/basic.tsrx +320 -272
- package/tests/hydration/components/composite.tsrx +44 -32
- package/tests/hydration/components/events.tsrx +101 -91
- package/tests/hydration/components/for.tsrx +510 -452
- package/tests/hydration/components/head.tsrx +87 -80
- package/tests/hydration/components/hmr.tsrx +22 -17
- package/tests/hydration/components/html-in-template.tsrx +22 -17
- package/tests/hydration/components/html.tsrx +525 -443
- package/tests/hydration/components/if-children.tsrx +158 -148
- package/tests/hydration/components/if.tsrx +109 -95
- package/tests/hydration/components/mixed-control-flow.tsrx +100 -96
- package/tests/hydration/components/nested-control-flow.tsrx +215 -203
- package/tests/hydration/components/portal.tsrx +41 -34
- package/tests/hydration/components/reactivity.tsrx +37 -27
- package/tests/hydration/components/return.tsrx +12 -556
- package/tests/hydration/components/switch.tsrx +120 -114
- package/tests/hydration/components/track-async-serialization.tsrx +107 -91
- package/tests/hydration/components/try.tsrx +55 -40
- package/tests/hydration/html.test.js +4 -4
- package/tests/hydration/return.test.js +13 -532
- package/tests/server/await.test.tsrx +3 -3
- package/tests/server/basic.attributes.test.tsrx +264 -195
- package/tests/server/basic.components.test.tsrx +296 -169
- package/tests/server/basic.test.tsrx +300 -198
- package/tests/server/compiler.test.tsrx +62 -60
- package/tests/server/composite.props.test.tsrx +77 -63
- package/tests/server/composite.test.tsrx +168 -192
- package/tests/server/context.test.tsrx +18 -12
- package/tests/server/dynamic-elements.test.tsrx +197 -180
- package/tests/server/for.test.tsrx +85 -78
- package/tests/server/head.test.tsrx +50 -43
- package/tests/server/html-nesting-validation.test.tsrx +8 -8
- package/tests/server/if.test.tsrx +57 -51
- package/tests/server/lazy-destructuring.test.tsrx +366 -294
- package/tests/server/return.test.tsrx +76 -1355
- package/tests/server/streaming-ssr.test.tsrx +4 -75
- package/tests/server/style-identifier.test.tsrx +169 -148
- package/tests/server/switch.test.tsrx +91 -85
- package/tests/server/track-async-serialization.test.tsrx +105 -85
- package/tests/server/try.test.tsrx +374 -280
- package/tests/utils/compiler-compat-config.test.js +2 -2
- package/tests/utils/runtime-imports.test.js +10 -0
- package/types/index.d.ts +8 -0
- package/tests/client/__snapshots__/html.test.rsrx.snap +0 -40
|
@@ -1,565 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// Basic return - skips content after direct return
|
|
6
|
-
export component DirectReturn() {
|
|
7
|
-
<div class="before">{'before'}</div>
|
|
8
|
-
return;
|
|
9
|
-
<div class="after">{'after'}</div>
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// Conditional return - condition is true, skips rest
|
|
13
|
-
export component ConditionalReturnTrue() {
|
|
14
|
-
let condition = true;
|
|
15
|
-
|
|
16
|
-
if (condition) {
|
|
17
|
-
<div class="guard">{'guard hit'}</div>
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
<div class="rest">{'rest'}</div>
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Conditional return - condition is false, shows rest
|
|
24
|
-
export component ConditionalReturnFalse() {
|
|
25
|
-
let condition = false;
|
|
26
|
-
|
|
27
|
-
if (condition) {
|
|
28
|
-
<div class="guard">{'guard hit'}</div>
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
<div class="rest">{'rest'}</div>
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Content before and after return guard
|
|
35
|
-
export component ContentBeforeAfterReturn() {
|
|
36
|
-
let shouldReturn = true;
|
|
37
|
-
|
|
38
|
-
<div class="before">{'before'}</div>
|
|
39
|
-
if (shouldReturn) {
|
|
40
|
-
<div class="guard">{'guard'}</div>
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
<div class="after">{'after'}</div>
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Multiple elements after guard when condition is false
|
|
47
|
-
export component MultipleElementsAfterGuard() {
|
|
48
|
-
let shouldReturn = false;
|
|
49
|
-
|
|
50
|
-
if (shouldReturn) {
|
|
51
|
-
<div class="guard">{'guard'}</div>
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
<div class="first">{'first'}</div>
|
|
55
|
-
<div class="second">{'second'}</div>
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Multiple sequential returns - first hits
|
|
59
|
-
export component MultipleReturnsFirstHits() {
|
|
60
|
-
let a = true;
|
|
61
|
-
let b = true;
|
|
62
|
-
|
|
63
|
-
if (a) {
|
|
64
|
-
<div class="first">{'first guard'}</div>
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
if (b) {
|
|
68
|
-
<div class="second">{'second guard'}</div>
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
<div class="rest">{'rest'}</div>
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Multiple sequential returns - second hits
|
|
75
|
-
export component MultipleReturnsSecondHits() {
|
|
76
|
-
let a = false;
|
|
77
|
-
let b = true;
|
|
78
|
-
|
|
79
|
-
if (a) {
|
|
80
|
-
<div class="first">{'first guard'}</div>
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
if (b) {
|
|
84
|
-
<div class="second">{'second guard'}</div>
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
<div class="rest">{'rest'}</div>
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Multiple sequential returns - none hit
|
|
91
|
-
export component MultipleReturnsNoneHit() {
|
|
92
|
-
let a = false;
|
|
93
|
-
let b = false;
|
|
94
|
-
|
|
95
|
-
if (a) {
|
|
96
|
-
<div class="first">{'first guard'}</div>
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (b) {
|
|
100
|
-
<div class="second">{'second guard'}</div>
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
<div class="rest">{'rest'}</div>
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Nested returns - both conditions true
|
|
107
|
-
export component NestedReturnsAllTrue() {
|
|
108
|
-
let a = true;
|
|
109
|
-
let b = true;
|
|
110
|
-
|
|
111
|
-
if (a) {
|
|
112
|
-
<div class="a">{'a is true'}</div>
|
|
113
|
-
if (b) {
|
|
114
|
-
<div class="b">{'b is true'}</div>
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
<div class="rest">{'rest'}</div>
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Nested returns - inner condition false
|
|
122
|
-
export component NestedReturnsInnerFalse() {
|
|
123
|
-
let a = true;
|
|
124
|
-
let b = false;
|
|
125
|
-
|
|
126
|
-
if (a) {
|
|
127
|
-
<div class="a">{'a is true'}</div>
|
|
128
|
-
if (b) {
|
|
129
|
-
<div class="b">{'b is true'}</div>
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
<div class="rest">{'rest'}</div>
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Nested returns - outer condition false
|
|
137
|
-
export component NestedReturnsOuterFalse() {
|
|
138
|
-
let a = false;
|
|
139
|
-
let b = true;
|
|
140
|
-
|
|
141
|
-
if (a) {
|
|
142
|
-
<div class="a">{'a is true'}</div>
|
|
143
|
-
if (b) {
|
|
144
|
-
<div class="b">{'b is true'}</div>
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
<div class="rest">{'rest'}</div>
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Deeply nested returns (3 levels) - all true
|
|
152
|
-
export component DeeplyNestedReturnsAllTrue() {
|
|
153
|
-
let a = true;
|
|
154
|
-
let b = true;
|
|
155
|
-
let c = true;
|
|
156
|
-
|
|
157
|
-
if (a) {
|
|
158
|
-
<div class="a">{'a'}</div>
|
|
159
|
-
if (b) {
|
|
160
|
-
<div class="b">{'b'}</div>
|
|
161
|
-
if (c) {
|
|
162
|
-
<div class="c">{'c'}</div>
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
<div class="rest">{'rest'}</div>
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Deeply nested returns (3 levels) - innermost false
|
|
171
|
-
export component DeeplyNestedReturnsInnermostFalse() {
|
|
172
|
-
let a = true;
|
|
173
|
-
let b = true;
|
|
174
|
-
let c = false;
|
|
175
|
-
|
|
176
|
-
if (a) {
|
|
177
|
-
<div class="a">{'a'}</div>
|
|
178
|
-
if (b) {
|
|
179
|
-
<div class="b">{'b'}</div>
|
|
180
|
-
if (c) {
|
|
181
|
-
<div class="c">{'c'}</div>
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
<div class="rest">{'rest'}</div>
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Return with else-if chain - first condition
|
|
190
|
-
export component ElseIfChainFirst() {
|
|
191
|
-
let value = 1;
|
|
192
|
-
|
|
193
|
-
if (value === 1) {
|
|
194
|
-
<div class="one">{'one'}</div>
|
|
195
|
-
return;
|
|
196
|
-
} else if (value === 2) {
|
|
197
|
-
<div class="two">{'two'}</div>
|
|
198
|
-
return;
|
|
199
|
-
} else {
|
|
200
|
-
<div class="other">{'other'}</div>
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
<div class="never">{'never reached'}</div>
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Return with else-if chain - second condition
|
|
207
|
-
export component ElseIfChainSecond() {
|
|
208
|
-
let value = 2;
|
|
209
|
-
|
|
210
|
-
if (value === 1) {
|
|
211
|
-
<div class="one">{'one'}</div>
|
|
212
|
-
return;
|
|
213
|
-
} else if (value === 2) {
|
|
214
|
-
<div class="two">{'two'}</div>
|
|
215
|
-
return;
|
|
216
|
-
} else {
|
|
217
|
-
<div class="other">{'other'}</div>
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
<div class="never">{'never reached'}</div>
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Return with else-if chain - else condition
|
|
224
|
-
export component ElseIfChainElse() {
|
|
225
|
-
let value = 3;
|
|
226
|
-
|
|
227
|
-
if (value === 1) {
|
|
228
|
-
<div class="one">{'one'}</div>
|
|
229
|
-
return;
|
|
230
|
-
} else if (value === 2) {
|
|
231
|
-
<div class="two">{'two'}</div>
|
|
232
|
-
return;
|
|
233
|
-
} else {
|
|
234
|
-
<div class="other">{'other'}</div>
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
<div class="never">{'never reached'}</div>
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Return with else branch that does not return
|
|
241
|
-
export component ReturnWithElseNoReturn() {
|
|
242
|
-
let condition = false;
|
|
243
|
-
|
|
244
|
-
if (condition) {
|
|
245
|
-
<div class="true">{'condition true'}</div>
|
|
246
|
-
return;
|
|
247
|
-
} else {
|
|
248
|
-
<div class="false">{'condition false'}</div>
|
|
1
|
+
export function GuardReturnRenders() {
|
|
2
|
+
const ready = true;
|
|
3
|
+
if (!ready) {
|
|
4
|
+
return null;
|
|
249
5
|
}
|
|
250
|
-
<div class="after">{'after if-else'}</div>
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Return with else branch that also returns
|
|
254
|
-
export component ReturnWithElseBothReturn() {
|
|
255
|
-
let condition = false;
|
|
256
6
|
|
|
257
|
-
|
|
258
|
-
<div class="true">{'condition true'}</div>
|
|
259
|
-
return;
|
|
260
|
-
} else {
|
|
261
|
-
<div class="false">{'condition false'}</div>
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
<div class="never">{'never reached'}</div>
|
|
7
|
+
return <><div class="ready">{'ready'}</div></>;
|
|
265
8
|
}
|
|
266
9
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
<button
|
|
272
|
-
class="toggle"
|
|
273
|
-
onClick={() => {
|
|
274
|
-
condition = !condition;
|
|
275
|
-
}}
|
|
276
|
-
>
|
|
277
|
-
{'Toggle'}
|
|
278
|
-
</button>
|
|
279
|
-
if (condition) {
|
|
280
|
-
<div class="guard">{'guard hit'}</div>
|
|
281
|
-
return;
|
|
10
|
+
export function GuardReturnNull() {
|
|
11
|
+
const ready = false;
|
|
12
|
+
if (!ready) {
|
|
13
|
+
return null;
|
|
282
14
|
}
|
|
283
|
-
<div class="rest">{'rest'}</div>
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Reactive return - starts false, can toggle to true
|
|
287
|
-
export component ReactiveReturnFalseToTrue() {
|
|
288
|
-
let &[condition] = track(false);
|
|
289
|
-
|
|
290
|
-
<button
|
|
291
|
-
class="toggle"
|
|
292
|
-
onClick={() => {
|
|
293
|
-
condition = !condition;
|
|
294
|
-
}}
|
|
295
|
-
>
|
|
296
|
-
{'Toggle'}
|
|
297
|
-
</button>
|
|
298
|
-
if (condition) {
|
|
299
|
-
<div class="guard">{'guard hit'}</div>
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
<div class="rest">{'rest'}</div>
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// Reactive nested return - only inner condition (b) is tracked
|
|
306
|
-
export component ReactiveNestedReturn() {
|
|
307
|
-
let a = true;
|
|
308
|
-
let &[b] = track(true);
|
|
309
|
-
|
|
310
|
-
<button
|
|
311
|
-
class="toggle"
|
|
312
|
-
onClick={() => {
|
|
313
|
-
b = !b;
|
|
314
|
-
}}
|
|
315
|
-
>
|
|
316
|
-
{'Toggle'}
|
|
317
|
-
</button>
|
|
318
|
-
if (a) {
|
|
319
|
-
<div class="a">{'a'}</div>
|
|
320
|
-
if (b) {
|
|
321
|
-
<div class="b">{'b'}</div>
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
<div class="rest">{'rest'}</div>
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// Return inside nested element scope
|
|
329
|
-
export component ReturnInNestedElement() {
|
|
330
|
-
let show = true;
|
|
331
15
|
|
|
332
|
-
|
|
333
|
-
<span class="label">{'outer'}</span>
|
|
334
|
-
if (show) {
|
|
335
|
-
<p class="inner">{'inner'}</p>
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
</div>
|
|
339
|
-
<div class="after">{'after'}</div>
|
|
16
|
+
return <><div class="ready">{'ready'}</div></>;
|
|
340
17
|
}
|
|
341
18
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
let shouldReturn = true;
|
|
345
|
-
|
|
346
|
-
<h1 class="title">{'title'}</h1>
|
|
347
|
-
<p class="desc">{'description'}</p>
|
|
348
|
-
if (shouldReturn) {
|
|
349
|
-
<div class="guard">{'guard'}</div>
|
|
350
|
-
<span class="guard-span">{'guard span'}</span>
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
<footer class="footer">{'footer'}</footer>
|
|
354
|
-
<nav class="nav">{'nav'}</nav>
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
// Return at the beginning of component
|
|
358
|
-
export component ReturnAtBeginning() {
|
|
359
|
-
if (true) {
|
|
360
|
-
<div class="early">{'early exit'}</div>
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
<div class="never1">{'never reached 1'}</div>
|
|
364
|
-
<div class="never2">{'never reached 2'}</div>
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// Return at the end of component (after all content)
|
|
368
|
-
export component ReturnAtEnd() {
|
|
369
|
-
<div class="first">{'first'}</div>
|
|
370
|
-
<div class="second">{'second'}</div>
|
|
371
|
-
if (true) {
|
|
372
|
-
<div class="third">{'third'}</div>
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// Multiple sibling returns at same level
|
|
378
|
-
export component MultipleSiblingReturns() {
|
|
379
|
-
let mode = 'b';
|
|
380
|
-
|
|
381
|
-
if (mode === 'a') {
|
|
382
|
-
<div class="mode-a">{'mode A'}</div>
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
if (mode === 'b') {
|
|
387
|
-
<div class="mode-b">{'mode B'}</div>
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
if (mode === 'c') {
|
|
392
|
-
<div class="mode-c">{'mode C'}</div>
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
<div class="default">{'default mode'}</div>
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
// Reactive sibling returns - cycles first -> second -> fallback
|
|
400
|
-
export component ReactiveSiblingReturns() {
|
|
401
|
-
let &[mode] = track('first');
|
|
402
|
-
|
|
403
|
-
<button
|
|
404
|
-
class="toggle"
|
|
405
|
-
onClick={() => {
|
|
406
|
-
if (mode === 'first') {
|
|
407
|
-
mode = 'second';
|
|
408
|
-
} else if (mode === 'second') {
|
|
409
|
-
mode = 'none';
|
|
410
|
-
} else {
|
|
411
|
-
mode = 'first';
|
|
412
|
-
}
|
|
413
|
-
}}
|
|
414
|
-
>
|
|
415
|
-
{'Toggle'}
|
|
416
|
-
</button>
|
|
417
|
-
|
|
418
|
-
if (mode === 'first') {
|
|
419
|
-
<div class="first">{'first guard'}</div>
|
|
420
|
-
return;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
if (mode === 'second') {
|
|
424
|
-
<div class="second">{'second guard'}</div>
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
<div class="rest">{'rest'}</div>
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// Reactive nested returns with tracked outer and inner conditions
|
|
432
|
-
export component ReactiveOuterInnerReturns() {
|
|
433
|
-
let &[a] = track(true);
|
|
434
|
-
let &[b] = track(true);
|
|
435
|
-
|
|
436
|
-
<button
|
|
437
|
-
class="toggle-a"
|
|
438
|
-
onClick={() => {
|
|
439
|
-
a = !a;
|
|
440
|
-
}}
|
|
441
|
-
>
|
|
442
|
-
{'Toggle A'}
|
|
443
|
-
</button>
|
|
444
|
-
|
|
445
|
-
<button
|
|
446
|
-
class="toggle-b"
|
|
447
|
-
onClick={() => {
|
|
448
|
-
b = !b;
|
|
449
|
-
}}
|
|
450
|
-
>
|
|
451
|
-
{'Toggle B'}
|
|
452
|
-
</button>
|
|
453
|
-
|
|
454
|
-
if (a) {
|
|
455
|
-
<div class="a">{'a'}</div>
|
|
456
|
-
if (b) {
|
|
457
|
-
<div class="b">{'b'}</div>
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
<div class="rest">{a ? 'a-on rest' : 'a-off rest'}</div>
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// Reactive else-if return chain that transitions between return and non-return states
|
|
466
|
-
export component ReactiveElseIfReturns() {
|
|
467
|
-
let &[status] = track(0);
|
|
468
|
-
|
|
469
|
-
<button
|
|
470
|
-
class="toggle"
|
|
471
|
-
onClick={() => {
|
|
472
|
-
status = (status + 1) % 3;
|
|
473
|
-
}}
|
|
474
|
-
>
|
|
475
|
-
{'Toggle'}
|
|
476
|
-
</button>
|
|
477
|
-
|
|
478
|
-
if (status === 0) {
|
|
479
|
-
<div class="zero">{'zero'}</div>
|
|
480
|
-
return;
|
|
481
|
-
} else if (status === 1) {
|
|
482
|
-
<div class="one">{'one'}</div>
|
|
483
|
-
return;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
<div class="rest">{'rest'}</div>
|
|
487
|
-
<div class="tail">{'tail'}</div>
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
// Deeply nested independent return guards with multiple root-level siblings
|
|
491
|
-
export component ReactiveDeepNestedIndependentReturns() {
|
|
492
|
-
let &[c1] = track(false);
|
|
493
|
-
let &[c2] = track(false);
|
|
494
|
-
let &[c3] = track(false);
|
|
495
|
-
let &[c4] = track(false);
|
|
496
|
-
|
|
497
|
-
<button
|
|
498
|
-
class="toggle-c1"
|
|
499
|
-
onClick={() => {
|
|
500
|
-
c1 = !c1;
|
|
501
|
-
}}
|
|
502
|
-
>
|
|
503
|
-
{'Toggle C1'}
|
|
504
|
-
</button>
|
|
505
|
-
<button
|
|
506
|
-
class="toggle-c2"
|
|
507
|
-
onClick={() => {
|
|
508
|
-
c2 = !c2;
|
|
509
|
-
}}
|
|
510
|
-
>
|
|
511
|
-
{'Toggle C2'}
|
|
512
|
-
</button>
|
|
513
|
-
<button
|
|
514
|
-
class="toggle-c3"
|
|
515
|
-
onClick={() => {
|
|
516
|
-
c3 = !c3;
|
|
517
|
-
}}
|
|
518
|
-
>
|
|
519
|
-
{'Toggle C3'}
|
|
520
|
-
</button>
|
|
521
|
-
<button
|
|
522
|
-
class="toggle-c4"
|
|
523
|
-
onClick={() => {
|
|
524
|
-
c4 = !c4;
|
|
525
|
-
}}
|
|
526
|
-
>
|
|
527
|
-
{'Toggle C4'}
|
|
528
|
-
</button>
|
|
529
|
-
|
|
530
|
-
<div class="top">{'top'}</div>
|
|
531
|
-
|
|
532
|
-
if (c1) {
|
|
533
|
-
<div class="hit-1">{'hit-1'}</div>
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
<div class="middle">{'middle'}</div>
|
|
538
|
-
<section class="nest-1">
|
|
539
|
-
<div class="nest-1-a">{'nest-1-a'}</div>
|
|
540
|
-
if (c2) {
|
|
541
|
-
<div class="hit-2">{'hit-2'}</div>
|
|
542
|
-
return;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
<div class="nest-1-b">{'nest-1-b'}</div>
|
|
546
|
-
<section class="nest-2">
|
|
547
|
-
<div class="nest-2-a">{'nest-2-a'}</div>
|
|
548
|
-
if (c3) {
|
|
549
|
-
<div class="hit-3">{'hit-3'}</div>
|
|
550
|
-
return;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
<div class="nest-2-b">{'nest-2-b'}</div>
|
|
554
|
-
if (c4) {
|
|
555
|
-
<div class="hit-4">{'hit-4'}</div>
|
|
556
|
-
return;
|
|
557
|
-
}
|
|
558
|
-
</section>
|
|
559
|
-
</section>
|
|
560
|
-
|
|
561
|
-
<div class="root-1">{'root-1'}</div>
|
|
562
|
-
<div class="root-2">{'root-2'}</div>
|
|
563
|
-
<div class="root-3">{'root-3'}</div>
|
|
564
|
-
<div class="root-4">{'root-4'}</div>
|
|
19
|
+
export function StringReturn() {
|
|
20
|
+
return 'hello';
|
|
565
21
|
}
|