ripple 0.3.11 → 0.3.13
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 +43 -0
- package/package.json +8 -2
- package/src/compiler/phases/1-parse/index.js +73 -30
- package/src/compiler/phases/2-analyze/index.js +28 -58
- package/src/compiler/phases/3-transform/client/index.js +127 -164
- package/src/compiler/phases/3-transform/segments.js +4 -8
- package/src/compiler/phases/3-transform/server/index.js +210 -360
- package/src/compiler/types/import.d.ts +0 -12
- package/src/compiler/types/index.d.ts +12 -5
- package/src/compiler/types/parse.d.ts +2 -0
- package/src/compiler/utils.js +39 -44
- package/src/helpers.d.ts +2 -0
- package/src/runtime/index-client.js +15 -13
- package/src/runtime/index-server.js +18 -11
- package/src/runtime/internal/client/blocks.js +19 -23
- package/src/runtime/internal/client/constants.js +20 -9
- package/src/runtime/internal/client/index.js +14 -4
- package/src/runtime/internal/client/runtime.js +435 -173
- package/src/runtime/internal/client/try.js +334 -156
- package/src/runtime/internal/client/types.d.ts +26 -0
- package/src/runtime/internal/server/blocks.js +183 -0
- package/src/runtime/internal/server/constants.js +7 -0
- package/src/runtime/internal/server/index.js +780 -148
- package/src/runtime/internal/server/types.d.ts +35 -0
- package/src/server/index.js +1 -1
- package/src/utils/async.js +35 -0
- package/src/utils/builders.js +3 -1
- package/tests/client/__snapshots__/computed-properties.test.rsrx.snap +49 -0
- package/tests/client/__snapshots__/for.test.rsrx.snap +319 -0
- package/tests/client/__snapshots__/html.test.rsrx.snap +40 -0
- package/tests/client/_etc.test.rsrx +7 -0
- package/tests/client/array/{array.static.test.ripple → array.static.test.rsrx} +18 -20
- package/tests/client/async-suspend.test.rsrx +662 -0
- package/tests/client/basic/__snapshots__/basic.attributes.test.rsrx.snap +60 -0
- package/tests/client/basic/__snapshots__/basic.rendering.test.rsrx.snap +59 -0
- package/tests/client/basic/{basic.errors.test.ripple → basic.errors.test.rsrx} +2 -2
- package/tests/client/compiler/__snapshots__/compiler.assignments.test.rsrx.snap +12 -0
- package/tests/client/compiler/__snapshots__/compiler.typescript.test.rsrx.snap +46 -0
- package/tests/client/compiler/{compiler.try-in-function.test.ripple → compiler.try-in-function.test.rsrx} +8 -6
- package/tests/client/composite/__snapshots__/composite.render.test.rsrx.snap +37 -0
- package/tests/client/{function-overload.test.ripple → function-overload.test.rsrx} +1 -1
- package/tests/client/try.test.rsrx +1702 -0
- package/tests/hydration/build-components.js +5 -3
- package/tests/hydration/compiled/client/head.js +11 -11
- package/tests/hydration/compiled/client/mixed-control-flow.js +55 -70
- package/tests/hydration/compiled/client/nested-control-flow.js +72 -88
- package/tests/hydration/compiled/client/try.js +42 -54
- package/tests/hydration/compiled/server/basic.js +491 -369
- package/tests/hydration/compiled/server/composite.js +153 -128
- package/tests/hydration/compiled/server/events.js +166 -145
- package/tests/hydration/compiled/server/for.js +821 -677
- package/tests/hydration/compiled/server/head.js +200 -165
- package/tests/hydration/compiled/server/hmr.js +62 -54
- package/tests/hydration/compiled/server/html-in-template.js +64 -55
- package/tests/hydration/compiled/server/html.js +1477 -1360
- package/tests/hydration/compiled/server/if-children.js +448 -408
- package/tests/hydration/compiled/server/if.js +204 -171
- package/tests/hydration/compiled/server/mixed-control-flow.js +237 -195
- package/tests/hydration/compiled/server/nested-control-flow.js +533 -467
- package/tests/hydration/compiled/server/portal.js +94 -107
- package/tests/hydration/compiled/server/reactivity.js +87 -64
- package/tests/hydration/compiled/server/return.js +1424 -1174
- package/tests/hydration/compiled/server/switch.js +268 -238
- package/tests/hydration/compiled/server/try.js +98 -87
- package/tests/hydration/components/{mixed-control-flow.ripple → mixed-control-flow.rsrx} +2 -2
- package/tests/hydration/components/{try.ripple → try.rsrx} +4 -2
- package/tests/hydration/mixed-control-flow.test.js +14 -0
- package/tests/hydration/nested-control-flow.test.js +50 -48
- package/tests/hydration/try.test.js +25 -0
- package/tests/server/__snapshots__/compiler.test.ripple.snap +0 -32
- package/tests/server/__snapshots__/compiler.test.rsrx.snap +95 -0
- package/tests/server/{compiler.test.ripple → compiler.test.rsrx} +0 -17
- package/tests/server/{html-nesting-validation.test.ripple → html-nesting-validation.test.rsrx} +3 -3
- package/tests/server/streaming-ssr.test.rsrx +115 -0
- package/tests/server/try.test.rsrx +503 -0
- package/tests/utils/compiler-compat-config.test.js +3 -3
- package/tests/utils/vite-plugin-config.test.js +1 -1
- package/tests/utils/vite-plugin-hmr.test.js +5 -5
- package/tsconfig.json +4 -0
- package/types/index.d.ts +13 -23
- package/types/server.d.ts +43 -16
- package/tests/client/_etc.test.ripple +0 -5
- package/tests/client/async-suspend.test.ripple +0 -94
- package/tests/client/try.test.ripple +0 -196
- package/tests/server/streaming-ssr.test.ripple +0 -68
- package/tests/server/try.test.ripple +0 -82
- /package/tests/client/array/{array.copy-within.test.ripple → array.copy-within.test.rsrx} +0 -0
- /package/tests/client/array/{array.derived.test.ripple → array.derived.test.rsrx} +0 -0
- /package/tests/client/array/{array.iteration.test.ripple → array.iteration.test.rsrx} +0 -0
- /package/tests/client/array/{array.mutations.test.ripple → array.mutations.test.rsrx} +0 -0
- /package/tests/client/array/{array.to-methods.test.ripple → array.to-methods.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.attributes.test.ripple → basic.attributes.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.collections.test.ripple → basic.collections.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.components.test.ripple → basic.components.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.events.test.ripple → basic.events.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.get-set.test.ripple → basic.get-set.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.hmr.test.ripple → basic.hmr.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.reactivity.test.ripple → basic.reactivity.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.rendering.test.ripple → basic.rendering.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.styling.test.ripple → basic.styling.test.rsrx} +0 -0
- /package/tests/client/basic/{basic.utilities.test.ripple → basic.utilities.test.rsrx} +0 -0
- /package/tests/client/{boundaries.test.ripple → boundaries.test.rsrx} +0 -0
- /package/tests/client/compiler/{compiler.assignments.test.ripple → compiler.assignments.test.rsrx} +0 -0
- /package/tests/client/compiler/{compiler.attributes.test.ripple → compiler.attributes.test.rsrx} +0 -0
- /package/tests/client/compiler/{compiler.basic.test.ripple → compiler.basic.test.rsrx} +0 -0
- /package/tests/client/compiler/{compiler.regex.test.ripple → compiler.regex.test.rsrx} +0 -0
- /package/tests/client/compiler/{compiler.tracked-access.test.ripple → compiler.tracked-access.test.rsrx} +0 -0
- /package/tests/client/compiler/{compiler.typescript.test.ripple → compiler.typescript.test.rsrx} +0 -0
- /package/tests/client/composite/{composite.dynamic-components.test.ripple → composite.dynamic-components.test.rsrx} +0 -0
- /package/tests/client/composite/{composite.generics.test.ripple → composite.generics.test.rsrx} +0 -0
- /package/tests/client/composite/{composite.props.test.ripple → composite.props.test.rsrx} +0 -0
- /package/tests/client/composite/{composite.reactivity.test.ripple → composite.reactivity.test.rsrx} +0 -0
- /package/tests/client/composite/{composite.render.test.ripple → composite.render.test.rsrx} +0 -0
- /package/tests/client/{computed-properties.test.ripple → computed-properties.test.rsrx} +0 -0
- /package/tests/client/{context.test.ripple → context.test.rsrx} +0 -0
- /package/tests/client/css/{global-additional-cases.test.ripple → global-additional-cases.test.rsrx} +0 -0
- /package/tests/client/css/{global-advanced-selectors.test.ripple → global-advanced-selectors.test.rsrx} +0 -0
- /package/tests/client/css/{global-at-rules.test.ripple → global-at-rules.test.rsrx} +0 -0
- /package/tests/client/css/{global-basic.test.ripple → global-basic.test.rsrx} +0 -0
- /package/tests/client/css/{global-classes-ids.test.ripple → global-classes-ids.test.rsrx} +0 -0
- /package/tests/client/css/{global-combinators.test.ripple → global-combinators.test.rsrx} +0 -0
- /package/tests/client/css/{global-complex-nesting.test.ripple → global-complex-nesting.test.rsrx} +0 -0
- /package/tests/client/css/{global-edge-cases.test.ripple → global-edge-cases.test.rsrx} +0 -0
- /package/tests/client/css/{global-keyframes.test.ripple → global-keyframes.test.rsrx} +0 -0
- /package/tests/client/css/{global-nested.test.ripple → global-nested.test.rsrx} +0 -0
- /package/tests/client/css/{global-pseudo.test.ripple → global-pseudo.test.rsrx} +0 -0
- /package/tests/client/css/{global-scoping.test.ripple → global-scoping.test.rsrx} +0 -0
- /package/tests/client/css/{style-identifier.test.ripple → style-identifier.test.rsrx} +0 -0
- /package/tests/client/{date.test.ripple → date.test.rsrx} +0 -0
- /package/tests/client/{dynamic-elements.test.ripple → dynamic-elements.test.rsrx} +0 -0
- /package/tests/client/{events.test.ripple → events.test.rsrx} +0 -0
- /package/tests/client/{for.test.ripple → for.test.rsrx} +0 -0
- /package/tests/client/{function-overload-import.ripple → function-overload-import.rsrx} +0 -0
- /package/tests/client/{head.test.ripple → head.test.rsrx} +0 -0
- /package/tests/client/{html.test.ripple → html.test.rsrx} +0 -0
- /package/tests/client/{input-value.test.ripple → input-value.test.rsrx} +0 -0
- /package/tests/client/{lazy-destructuring.test.ripple → lazy-destructuring.test.rsrx} +0 -0
- /package/tests/client/{map.test.ripple → map.test.rsrx} +0 -0
- /package/tests/client/{media-query.test.ripple → media-query.test.rsrx} +0 -0
- /package/tests/client/{object.test.ripple → object.test.rsrx} +0 -0
- /package/tests/client/{portal.test.ripple → portal.test.rsrx} +0 -0
- /package/tests/client/{ref.test.ripple → ref.test.rsrx} +0 -0
- /package/tests/client/{return.test.ripple → return.test.rsrx} +0 -0
- /package/tests/client/{set.test.ripple → set.test.rsrx} +0 -0
- /package/tests/client/{svg.test.ripple → svg.test.rsrx} +0 -0
- /package/tests/client/{switch.test.ripple → switch.test.rsrx} +0 -0
- /package/tests/client/{tsx.test.ripple → tsx.test.rsrx} +0 -0
- /package/tests/client/{typescript-generics.test.ripple → typescript-generics.test.rsrx} +0 -0
- /package/tests/client/url/{url.derived.test.ripple → url.derived.test.rsrx} +0 -0
- /package/tests/client/url/{url.parsing.test.ripple → url.parsing.test.rsrx} +0 -0
- /package/tests/client/url/{url.partial-removal.test.ripple → url.partial-removal.test.rsrx} +0 -0
- /package/tests/client/url/{url.reactivity.test.ripple → url.reactivity.test.rsrx} +0 -0
- /package/tests/client/url/{url.serialization.test.ripple → url.serialization.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.derived.test.ripple → url-search-params.derived.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.initialization.test.ripple → url-search-params.initialization.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.iteration.test.ripple → url-search-params.iteration.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.mutation.test.ripple → url-search-params.mutation.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.retrieval.test.ripple → url-search-params.retrieval.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.serialization.test.ripple → url-search-params.serialization.test.rsrx} +0 -0
- /package/tests/client/url-search-params/{url-search-params.tracked-url.test.ripple → url-search-params.tracked-url.test.rsrx} +0 -0
- /package/tests/hydration/components/{basic.ripple → basic.rsrx} +0 -0
- /package/tests/hydration/components/{composite.ripple → composite.rsrx} +0 -0
- /package/tests/hydration/components/{events.ripple → events.rsrx} +0 -0
- /package/tests/hydration/components/{for.ripple → for.rsrx} +0 -0
- /package/tests/hydration/components/{head.ripple → head.rsrx} +0 -0
- /package/tests/hydration/components/{hmr.ripple → hmr.rsrx} +0 -0
- /package/tests/hydration/components/{html-in-template.ripple → html-in-template.rsrx} +0 -0
- /package/tests/hydration/components/{html.ripple → html.rsrx} +0 -0
- /package/tests/hydration/components/{if-children.ripple → if-children.rsrx} +0 -0
- /package/tests/hydration/components/{if.ripple → if.rsrx} +0 -0
- /package/tests/hydration/components/{nested-control-flow.ripple → nested-control-flow.rsrx} +0 -0
- /package/tests/hydration/components/{portal.ripple → portal.rsrx} +0 -0
- /package/tests/hydration/components/{reactivity.ripple → reactivity.rsrx} +0 -0
- /package/tests/hydration/components/{return.ripple → return.rsrx} +0 -0
- /package/tests/hydration/components/{switch.ripple → switch.rsrx} +0 -0
- /package/tests/server/{await.test.ripple → await.test.rsrx} +0 -0
- /package/tests/server/{basic.attributes.test.ripple → basic.attributes.test.rsrx} +0 -0
- /package/tests/server/{basic.components.test.ripple → basic.components.test.rsrx} +0 -0
- /package/tests/server/{basic.test.ripple → basic.test.rsrx} +0 -0
- /package/tests/server/{composite.props.test.ripple → composite.props.test.rsrx} +0 -0
- /package/tests/server/{composite.test.ripple → composite.test.rsrx} +0 -0
- /package/tests/server/{context.test.ripple → context.test.rsrx} +0 -0
- /package/tests/server/{dynamic-elements.test.ripple → dynamic-elements.test.rsrx} +0 -0
- /package/tests/server/{for.test.ripple → for.test.rsrx} +0 -0
- /package/tests/server/{head.test.ripple → head.test.rsrx} +0 -0
- /package/tests/server/{if.test.ripple → if.test.rsrx} +0 -0
- /package/tests/server/{lazy-destructuring.test.ripple → lazy-destructuring.test.rsrx} +0 -0
- /package/tests/server/{return.test.ripple → return.test.rsrx} +0 -0
- /package/tests/server/{style-identifier.test.ripple → style-identifier.test.rsrx} +0 -0
- /package/tests/server/{switch.test.ripple → switch.test.rsrx} +0 -0
|
@@ -34,16 +34,10 @@ import {
|
|
|
34
34
|
RippleSet as _$_Set__Ripple,
|
|
35
35
|
RippleArray as _$_Array__Ripple,
|
|
36
36
|
RippleObject as _$_Object__Ripple,
|
|
37
|
-
Context as _$_Context__Ripple,
|
|
38
37
|
RippleURL as _$_URL__Ripple,
|
|
39
38
|
RippleURLSearchParams as _$_URLSearchParams__Ripple,
|
|
40
39
|
RippleDate as _$_Date__Ripple,
|
|
41
|
-
MediaQuery as _$_MediaQuery__,
|
|
42
40
|
createRefKey as _$_RefKey__create,
|
|
43
|
-
track as _$_track__,
|
|
44
|
-
effect as _$_effect__,
|
|
45
|
-
untrack as _$_untrack__,
|
|
46
|
-
ripple_namespace as _$__u0023_ripple,
|
|
47
41
|
} from 'ripple';
|
|
48
42
|
|
|
49
43
|
export {
|
|
@@ -51,14 +45,8 @@ export {
|
|
|
51
45
|
_$_Set__Ripple,
|
|
52
46
|
_$_Array__Ripple,
|
|
53
47
|
_$_Object__Ripple,
|
|
54
|
-
_$_Context__Ripple,
|
|
55
48
|
_$_URL__Ripple,
|
|
56
49
|
_$_URLSearchParams__Ripple,
|
|
57
50
|
_$_Date__Ripple,
|
|
58
|
-
_$_MediaQuery__,
|
|
59
51
|
_$_RefKey__create,
|
|
60
|
-
_$_track__,
|
|
61
|
-
_$_effect__,
|
|
62
|
-
_$_untrack__,
|
|
63
|
-
_$__u0023_ripple,
|
|
64
52
|
};
|
|
@@ -15,11 +15,9 @@ interface BaseNodeMetaData {
|
|
|
15
15
|
has_template?: boolean;
|
|
16
16
|
source_name?: string | '#server' | '#style';
|
|
17
17
|
is_capitalized?: boolean;
|
|
18
|
-
has_await?: boolean;
|
|
19
18
|
commentContainerId?: number;
|
|
20
19
|
parenthesized?: boolean;
|
|
21
20
|
elementLeadingComments?: AST.Comment[];
|
|
22
|
-
inside_component_top_level?: boolean;
|
|
23
21
|
returns?: AST.ReturnStatement[];
|
|
24
22
|
has_return?: boolean;
|
|
25
23
|
has_throw?: boolean;
|
|
@@ -57,6 +55,10 @@ interface FunctionLikeTS {
|
|
|
57
55
|
|
|
58
56
|
// Ripple augmentation for ESTree function nodes
|
|
59
57
|
declare module 'estree' {
|
|
58
|
+
interface Program {
|
|
59
|
+
innerComments?: Comment[] | undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
60
62
|
interface FunctionDeclaration extends FunctionLikeTS {
|
|
61
63
|
metadata: FunctionMetaData;
|
|
62
64
|
}
|
|
@@ -193,6 +195,10 @@ declare module 'estree' {
|
|
|
193
195
|
pending?: AST.BlockStatement | null;
|
|
194
196
|
}
|
|
195
197
|
|
|
198
|
+
interface CatchClause {
|
|
199
|
+
resetParam?: AST.Pattern | null;
|
|
200
|
+
}
|
|
201
|
+
|
|
196
202
|
interface ForOfStatement {
|
|
197
203
|
index?: AST.Identifier | null;
|
|
198
204
|
key?: AST.Expression | null;
|
|
@@ -1086,7 +1092,7 @@ export interface AnalysisResult {
|
|
|
1086
1092
|
ast: AST.Program;
|
|
1087
1093
|
scopes: Map<AST.Node, ScopeInterface>;
|
|
1088
1094
|
scope: ScopeInterface;
|
|
1089
|
-
component_metadata: Array<{ id: string
|
|
1095
|
+
component_metadata: Array<{ id: string }>;
|
|
1090
1096
|
metadata: {
|
|
1091
1097
|
serverIdentifierPresent: boolean;
|
|
1092
1098
|
};
|
|
@@ -1255,7 +1261,6 @@ export interface ScopeInterface {
|
|
|
1255
1261
|
|
|
1256
1262
|
interface BaseStateMetaData {
|
|
1257
1263
|
tracking?: boolean | null;
|
|
1258
|
-
await?: boolean;
|
|
1259
1264
|
}
|
|
1260
1265
|
|
|
1261
1266
|
export interface BaseState {
|
|
@@ -1306,6 +1311,8 @@ export interface TransformServerState extends BaseState {
|
|
|
1306
1311
|
dev?: boolean;
|
|
1307
1312
|
return_flags?: Map<AST.ReturnStatement, { name: string; tracked: boolean }>;
|
|
1308
1313
|
template_child?: boolean;
|
|
1314
|
+
skip_regular_blocks?: boolean;
|
|
1315
|
+
in_regular_block?: boolean;
|
|
1309
1316
|
}
|
|
1310
1317
|
|
|
1311
1318
|
type UpdateList = Array<
|
|
@@ -1319,7 +1326,7 @@ type UpdateList = Array<
|
|
|
1319
1326
|
},
|
|
1320
1327
|
'initial' | 'identity' | 'expression'
|
|
1321
1328
|
>
|
|
1322
|
-
|
|
1329
|
+
>;
|
|
1323
1330
|
|
|
1324
1331
|
export interface TransformClientState extends BaseState {
|
|
1325
1332
|
events: Set<string>;
|
package/src/compiler/utils.js
CHANGED
|
@@ -163,19 +163,22 @@ const DOM_PROPERTIES = [
|
|
|
163
163
|
'disableRemotePlayback',
|
|
164
164
|
];
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
// Omits track, trackSplit and trackAsync are they're handled separately
|
|
167
|
+
/** @type {Record<string, {name: string, requiresBlock?: boolean}>} */
|
|
167
168
|
const RIPPLE_IMPORT_CALL_NAME = {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
169
|
+
RippleArray: { name: 'ripple_array', requiresBlock: true },
|
|
170
|
+
RippleObject: { name: 'ripple_object', requiresBlock: true },
|
|
171
|
+
RippleURL: { name: 'ripple_url', requiresBlock: true },
|
|
172
|
+
RippleURLSearchParams: { name: 'ripple_url_search_params', requiresBlock: true },
|
|
173
|
+
RippleDate: { name: 'ripple_date', requiresBlock: true },
|
|
174
|
+
RippleMap: { name: 'ripple_map', requiresBlock: true },
|
|
175
|
+
RippleSet: { name: 'ripple_set', requiresBlock: true },
|
|
176
|
+
MediaQuery: { name: 'media_query', requiresBlock: true },
|
|
177
|
+
Context: { name: 'context' },
|
|
178
|
+
effect: { name: 'effect' },
|
|
179
|
+
untrack: { name: 'untrack' },
|
|
180
|
+
trackPending: { name: 'is_tracked_pending' },
|
|
181
|
+
peek: { name: 'peek_tracked' },
|
|
179
182
|
};
|
|
180
183
|
|
|
181
184
|
/**
|
|
@@ -209,31 +212,6 @@ export function is_delegated_event(event_name, handler, context) {
|
|
|
209
212
|
return true;
|
|
210
213
|
}
|
|
211
214
|
|
|
212
|
-
/**
|
|
213
|
-
* Returns true if context is inside a top-level await: inside component or module
|
|
214
|
-
* @param {CommonContext} context
|
|
215
|
-
* @returns {boolean}
|
|
216
|
-
*/
|
|
217
|
-
export function is_top_level_await(context) {
|
|
218
|
-
for (let i = context.path.length - 1; i >= 0; i -= 1) {
|
|
219
|
-
const context_node = context.path[i];
|
|
220
|
-
const type = context_node.type;
|
|
221
|
-
|
|
222
|
-
if (context_node.type === 'Component') {
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
type === 'FunctionExpression' ||
|
|
228
|
-
type === 'ArrowFunctionExpression' ||
|
|
229
|
-
type === 'FunctionDeclaration'
|
|
230
|
-
) {
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
215
|
/**
|
|
238
216
|
* Returns true if context is inside a Component node
|
|
239
217
|
* @param {CommonContext} context
|
|
@@ -292,25 +270,25 @@ export function is_component_level_function(context) {
|
|
|
292
270
|
* Returns the matched Ripple tracking call name
|
|
293
271
|
* @param {AST.Expression | AST.Super} callee
|
|
294
272
|
* @param {CommonContext} context
|
|
295
|
-
* @returns {'track' | null}
|
|
273
|
+
* @returns {'track' | 'trackAsync' | null}
|
|
296
274
|
*/
|
|
297
275
|
export function is_ripple_track_call(callee, context) {
|
|
298
276
|
// Super expressions cannot be Ripple track calls
|
|
299
277
|
if (callee.type === 'Super') return null;
|
|
300
278
|
|
|
301
|
-
if (callee.type === 'Identifier' && callee.name === 'track') {
|
|
302
|
-
return is_ripple_import(callee, context) ?
|
|
279
|
+
if (callee.type === 'Identifier' && (callee.name === 'track' || callee.name === 'trackAsync')) {
|
|
280
|
+
return is_ripple_import(callee, context) ? callee.name : null;
|
|
303
281
|
}
|
|
304
282
|
|
|
305
283
|
if (
|
|
306
284
|
callee.type === 'MemberExpression' &&
|
|
307
285
|
callee.object.type === 'Identifier' &&
|
|
308
286
|
callee.property.type === 'Identifier' &&
|
|
309
|
-
callee.property.name === 'track' &&
|
|
287
|
+
(callee.property.name === 'track' || callee.property.name === 'trackAsync') &&
|
|
310
288
|
!callee.computed &&
|
|
311
289
|
is_ripple_import(callee, context)
|
|
312
290
|
) {
|
|
313
|
-
return
|
|
291
|
+
return callee.property.name;
|
|
314
292
|
}
|
|
315
293
|
|
|
316
294
|
return null;
|
|
@@ -1076,7 +1054,7 @@ export function flatten_switch_consequent(consequent) {
|
|
|
1076
1054
|
* @returns {string | null}
|
|
1077
1055
|
*/
|
|
1078
1056
|
export function get_ripple_namespace_call_name(name) {
|
|
1079
|
-
return name == null ? null : (RIPPLE_IMPORT_CALL_NAME[name] ?? null);
|
|
1057
|
+
return name == null ? null : (RIPPLE_IMPORT_CALL_NAME[name]?.name ?? null);
|
|
1080
1058
|
}
|
|
1081
1059
|
|
|
1082
1060
|
/**
|
|
@@ -1085,7 +1063,24 @@ export function get_ripple_namespace_call_name(name) {
|
|
|
1085
1063
|
* @returns {boolean}
|
|
1086
1064
|
*/
|
|
1087
1065
|
export function ripple_import_requires_block(name) {
|
|
1088
|
-
return name
|
|
1066
|
+
return name == null ? false : (RIPPLE_IMPORT_CALL_NAME[name]?.requiresBlock ?? false);
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
/**
|
|
1070
|
+
* @param {AST.ClassDeclaration | AST.ClassExpression} node
|
|
1071
|
+
* @param {CommonContext} context
|
|
1072
|
+
* @returns {void}
|
|
1073
|
+
*/
|
|
1074
|
+
export function strip_class_typescript_syntax(node, context) {
|
|
1075
|
+
delete node.typeParameters;
|
|
1076
|
+
delete node.superTypeParameters;
|
|
1077
|
+
delete node.implements;
|
|
1078
|
+
|
|
1079
|
+
if (node.superClass?.type === 'TSInstantiationExpression') {
|
|
1080
|
+
node.superClass = /** @type {AST.Expression} */ (context.visit(node.superClass.expression));
|
|
1081
|
+
} else if (node.superClass && 'typeArguments' in node.superClass) {
|
|
1082
|
+
delete node.superClass.typeArguments;
|
|
1083
|
+
}
|
|
1089
1084
|
}
|
|
1090
1085
|
|
|
1091
1086
|
/**
|
package/src/helpers.d.ts
CHANGED
|
@@ -21,6 +21,12 @@ import { COMMENT_NODE, HYDRATION_START } from '../constants.js';
|
|
|
21
21
|
|
|
22
22
|
// Re-export JSX runtime functions for jsxImportSource: "ripple"
|
|
23
23
|
export { jsx, jsxs, Fragment } from '../jsx-runtime.js';
|
|
24
|
+
export {
|
|
25
|
+
UNINITIALIZED,
|
|
26
|
+
DERIVED_UPDATED,
|
|
27
|
+
SUSPENSE_PENDING,
|
|
28
|
+
SUSPENSE_REJECTED,
|
|
29
|
+
} from './internal/client/constants.js';
|
|
24
30
|
|
|
25
31
|
/**
|
|
26
32
|
* @returns {CompatOptions | undefined}
|
|
@@ -112,7 +118,15 @@ export function hydrate(component, options) {
|
|
|
112
118
|
|
|
113
119
|
export { Context } from './internal/client/context.js';
|
|
114
120
|
|
|
115
|
-
export {
|
|
121
|
+
export {
|
|
122
|
+
flush_sync as flushSync,
|
|
123
|
+
track,
|
|
124
|
+
track_async as trackAsync,
|
|
125
|
+
untrack,
|
|
126
|
+
tick,
|
|
127
|
+
is_tracked_pending as trackPending,
|
|
128
|
+
peek_tracked as peek,
|
|
129
|
+
} from './internal/client/runtime.js';
|
|
116
130
|
|
|
117
131
|
export { RippleArray } from './array.js';
|
|
118
132
|
|
|
@@ -159,15 +173,3 @@ export {
|
|
|
159
173
|
bindOffsetWidth,
|
|
160
174
|
bindOffsetHeight,
|
|
161
175
|
} from './internal/client/bindings.js';
|
|
162
|
-
|
|
163
|
-
import { RippleMap } from './map.js';
|
|
164
|
-
import { RippleSet } from './set.js';
|
|
165
|
-
import { RippleArray } from './array.js';
|
|
166
|
-
import { RippleObject } from './object.js';
|
|
167
|
-
import { Context } from './internal/client/context.js';
|
|
168
|
-
import { RippleURL } from './url.js';
|
|
169
|
-
import { RippleURLSearchParams } from './url-search-params.js';
|
|
170
|
-
import { RippleDate } from './date.js';
|
|
171
|
-
import { MediaQuery } from './media-query.js';
|
|
172
|
-
import { track, untrack, ref_prop as createRefKey } from './internal/client/runtime.js';
|
|
173
|
-
import { user_effect as effect } from './internal/client/blocks.js';
|
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { output_push, noop } from './internal/server/index.js';
|
|
2
2
|
|
|
3
3
|
export { Context } from './internal/server/context.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
export {
|
|
5
|
+
get,
|
|
6
|
+
set,
|
|
7
|
+
untrack,
|
|
8
|
+
track,
|
|
9
|
+
track_async as trackAsync,
|
|
10
|
+
is_tracked_pending as trackPending,
|
|
11
|
+
peek_tracked as peek,
|
|
12
|
+
} from './internal/server/index.js';
|
|
13
|
+
export {
|
|
14
|
+
UNINITIALIZED,
|
|
15
|
+
DERIVED_UPDATED,
|
|
16
|
+
SUSPENSE_PENDING,
|
|
17
|
+
SUSPENSE_REJECTED,
|
|
18
|
+
} from './internal/client/constants.js';
|
|
8
19
|
|
|
9
20
|
export const effect = noop;
|
|
10
21
|
export const createRefKey = noop;
|
|
@@ -61,13 +72,9 @@ export const bindOffsetHeight = noop;
|
|
|
61
72
|
* Portal component noop for server-side rendering.
|
|
62
73
|
* Portals are client-only and do not render on the server.
|
|
63
74
|
* However, we need to output a marker comment so hydration can work correctly.
|
|
64
|
-
* @param {any} output
|
|
65
|
-
* @param {any} __
|
|
66
75
|
*/
|
|
67
|
-
export function Portal(
|
|
76
|
+
export function Portal() {
|
|
68
77
|
// Portals are client-only, but we need to output a marker for hydration
|
|
69
78
|
// Output an empty HTML comment as a placeholder
|
|
70
|
-
|
|
71
|
-
output.push('<!--portal-->');
|
|
72
|
-
}
|
|
79
|
+
output_push('<!--portal-->');
|
|
73
80
|
}
|
|
@@ -8,10 +8,12 @@ import {
|
|
|
8
8
|
DESTROYED,
|
|
9
9
|
EFFECT_BLOCK,
|
|
10
10
|
PAUSED,
|
|
11
|
+
PRE_EFFECT_BLOCK,
|
|
11
12
|
RENDER_BLOCK,
|
|
12
13
|
ROOT_BLOCK,
|
|
13
14
|
TRY_BLOCK,
|
|
14
15
|
HEAD_BLOCK,
|
|
16
|
+
DIRECT_CHILD_BLOCK,
|
|
15
17
|
} from './constants.js';
|
|
16
18
|
import { next_sibling } from './operations.js';
|
|
17
19
|
import { apply_element_spread } from './render.js';
|
|
@@ -20,13 +22,11 @@ import {
|
|
|
20
22
|
active_component,
|
|
21
23
|
active_reaction,
|
|
22
24
|
create_component_ctx,
|
|
23
|
-
handle_error,
|
|
24
25
|
is_block_dirty,
|
|
25
26
|
run_block,
|
|
26
27
|
run_teardown,
|
|
27
28
|
schedule_update,
|
|
28
29
|
} from './runtime.js';
|
|
29
|
-
import { suspend } from './try.js';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* @param {Function} fn
|
|
@@ -60,6 +60,14 @@ export function effect(fn) {
|
|
|
60
60
|
return block(EFFECT_BLOCK, fn);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Creates a pre-effect block that runs eagerly before render blocks in the flush cycle.
|
|
65
|
+
* @param {Function} fn
|
|
66
|
+
*/
|
|
67
|
+
export function pre_effect(fn) {
|
|
68
|
+
return block(PRE_EFFECT_BLOCK, fn);
|
|
69
|
+
}
|
|
70
|
+
|
|
63
71
|
/**
|
|
64
72
|
* @param {Function} fn
|
|
65
73
|
* @param {any} [state]
|
|
@@ -87,27 +95,6 @@ export function branch(fn, flags = 0, state = null) {
|
|
|
87
95
|
return block(BRANCH_BLOCK | flags, fn, state);
|
|
88
96
|
}
|
|
89
97
|
|
|
90
|
-
/**
|
|
91
|
-
* @param {() => any} fn
|
|
92
|
-
*/
|
|
93
|
-
export function async(fn) {
|
|
94
|
-
return block(BRANCH_BLOCK, async () => {
|
|
95
|
-
var current_block = active_block;
|
|
96
|
-
const unsuspend = suspend();
|
|
97
|
-
try {
|
|
98
|
-
await fn();
|
|
99
|
-
// An extra microtask tick ensures `suspend()` → `pending` is visible for at
|
|
100
|
-
// least one full microtask cycle. This matters during SSR hydration: the
|
|
101
|
-
// test (or any awaiter) gets to observe the pending state before `unsuspend`
|
|
102
|
-
// swaps back to the resolved content.
|
|
103
|
-
await Promise.resolve();
|
|
104
|
-
unsuspend();
|
|
105
|
-
} catch (error) {
|
|
106
|
-
handle_error(error, /** @type {Block} */ (current_block));
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
|
|
111
98
|
/**
|
|
112
99
|
* @param {Element} element
|
|
113
100
|
* @param {() => (element: Element) => (void | (() => void))} get_fn
|
|
@@ -176,6 +163,15 @@ export function create_try_block(fn, state) {
|
|
|
176
163
|
return block(TRY_BLOCK, fn, state);
|
|
177
164
|
}
|
|
178
165
|
|
|
166
|
+
/**
|
|
167
|
+
* @param {() => void} fn
|
|
168
|
+
* @param {number} [flags]
|
|
169
|
+
* @param {any} [state]
|
|
170
|
+
*/
|
|
171
|
+
export function boundary_fn_running_block(fn, flags = 0, state = null) {
|
|
172
|
+
return branch(fn, DIRECT_CHILD_BLOCK | flags, state);
|
|
173
|
+
}
|
|
174
|
+
|
|
179
175
|
/**
|
|
180
176
|
* @param {Block} block
|
|
181
177
|
* @param {Block} parent_block
|
|
@@ -9,18 +9,21 @@ export var SWITCH_BLOCK = 1 << 8;
|
|
|
9
9
|
export var COMPOSITE_BLOCK = 1 << 9;
|
|
10
10
|
export var ASYNC_BLOCK = 1 << 10;
|
|
11
11
|
export var HEAD_BLOCK = 1 << 11;
|
|
12
|
-
export var
|
|
13
|
-
export var
|
|
14
|
-
export var
|
|
15
|
-
export var
|
|
16
|
-
export var
|
|
17
|
-
export var
|
|
18
|
-
export var
|
|
19
|
-
export var
|
|
12
|
+
export var PRE_EFFECT_BLOCK = 1 << 12;
|
|
13
|
+
export var DIRECT_CHILD_BLOCK = 1 << 13;
|
|
14
|
+
export var CONTAINS_UPDATE = 1 << 14;
|
|
15
|
+
export var CONTAINS_TEARDOWN = 1 << 15;
|
|
16
|
+
export var BLOCK_HAS_RUN = 1 << 16;
|
|
17
|
+
export var TRACKED = 1 << 17;
|
|
18
|
+
export var DERIVED = 1 << 18;
|
|
19
|
+
export var DEFERRED = 1 << 19;
|
|
20
|
+
export var PAUSED = 1 << 20;
|
|
21
|
+
export var DESTROYED = 1 << 21;
|
|
20
22
|
|
|
21
23
|
export var CONTROL_FLOW_BLOCK = FOR_BLOCK | IF_BLOCK | SWITCH_BLOCK | TRY_BLOCK | COMPOSITE_BLOCK;
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
/** @type {unique symbol} */
|
|
26
|
+
export const UNINITIALIZED = Symbol('uninitialized');
|
|
24
27
|
/** @type {unique symbol} */
|
|
25
28
|
export const TRACKED_ARRAY = Symbol();
|
|
26
29
|
/** @type {unique symbol} */
|
|
@@ -38,3 +41,11 @@ export const NAMESPACE_URI = {
|
|
|
38
41
|
svg: 'http://www.w3.org/2000/svg',
|
|
39
42
|
mathml: 'http://www.w3.org/1998/Math/MathML',
|
|
40
43
|
};
|
|
44
|
+
/** @type {unique symbol} */
|
|
45
|
+
export const DERIVED_UPDATED = Symbol('derived_updated');
|
|
46
|
+
/** @type {unique symbol} */
|
|
47
|
+
export const SUSPENSE_PENDING = Symbol('suspense_pending');
|
|
48
|
+
/** @type {unique symbol} */
|
|
49
|
+
export const SUSPENSE_REJECTED = Symbol('suspense_rejected');
|
|
50
|
+
/** @type {unique symbol} */
|
|
51
|
+
export const ASYNC_DERIVED_READ_THROWN = Symbol('async_derived_read_thrown');
|
|
@@ -20,15 +20,22 @@ export {
|
|
|
20
20
|
export {
|
|
21
21
|
render,
|
|
22
22
|
render_spread,
|
|
23
|
-
async,
|
|
24
23
|
ref,
|
|
25
24
|
branch,
|
|
26
25
|
destroy_block,
|
|
27
26
|
move_block,
|
|
28
27
|
root,
|
|
29
28
|
user_effect as effect,
|
|
29
|
+
resume_block,
|
|
30
|
+
is_destroyed,
|
|
30
31
|
} from './blocks.js';
|
|
31
32
|
|
|
33
|
+
export {
|
|
34
|
+
UNINITIALIZED,
|
|
35
|
+
DERIVED_UPDATED,
|
|
36
|
+
SUSPENSE_PENDING,
|
|
37
|
+
SUSPENSE_REJECTED,
|
|
38
|
+
} from './constants.js';
|
|
32
39
|
export { event, render_event, delegate } from './events.js';
|
|
33
40
|
|
|
34
41
|
export {
|
|
@@ -40,7 +47,6 @@ export {
|
|
|
40
47
|
get_tracked,
|
|
41
48
|
get_derived,
|
|
42
49
|
set,
|
|
43
|
-
async_computed,
|
|
44
50
|
tracked,
|
|
45
51
|
spread_props,
|
|
46
52
|
computed_property,
|
|
@@ -52,6 +58,9 @@ export {
|
|
|
52
58
|
update_property,
|
|
53
59
|
update_pre_property,
|
|
54
60
|
track,
|
|
61
|
+
track_async,
|
|
62
|
+
is_tracked_pending,
|
|
63
|
+
peek_tracked,
|
|
55
64
|
push_component,
|
|
56
65
|
pop_component,
|
|
57
66
|
untrack,
|
|
@@ -59,12 +68,13 @@ export {
|
|
|
59
68
|
fallback,
|
|
60
69
|
exclude_from_object,
|
|
61
70
|
derived,
|
|
62
|
-
maybe_tracked,
|
|
63
71
|
tick,
|
|
64
72
|
proxy_props,
|
|
65
73
|
with_block,
|
|
66
74
|
with_ns,
|
|
67
75
|
handle_error,
|
|
76
|
+
queue_post_block_flush_callback,
|
|
77
|
+
schedule_update,
|
|
68
78
|
} from './runtime.js';
|
|
69
79
|
|
|
70
80
|
export { composite } from './composite.js';
|
|
@@ -73,7 +83,7 @@ export { for_block as for, for_block_keyed as for_keyed } from './for.js';
|
|
|
73
83
|
|
|
74
84
|
export { if_block as if } from './if.js';
|
|
75
85
|
|
|
76
|
-
export { try_block as try,
|
|
86
|
+
export { try_block as try, get_pending_boundary } from './try.js';
|
|
77
87
|
|
|
78
88
|
export { switch_block as switch } from './switch.js';
|
|
79
89
|
|