@askrjs/askr 0.0.52 → 0.0.53
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/README.md +5 -1
- package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +182 -9
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.js +103 -0
- package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -1
- package/dist/benchmark.d.ts +6 -2
- package/dist/benchmark.js +63 -11
- package/dist/boot/index.d.ts +61 -2
- package/dist/boot/index.js +1 -203
- package/dist/boot-j2KoN6ss.js +647 -0
- package/dist/cleanup-COv77su2.js +487 -0
- package/dist/component-internal-B3z7GXlD.js +614 -0
- package/dist/component-lifecycle-CO4hXlP4.js +357 -0
- package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +8 -1
- package/dist/component-scope-CvPba6O6.d.ts +12 -0
- package/dist/components/index.d.ts +17 -2
- package/dist/components/index.js +39 -1
- package/dist/compose-ref-Cc_YkUpM.js +92 -0
- package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -1
- package/dist/control/index.d.ts +1 -3
- package/dist/control/index.js +1 -3
- package/dist/control-BQvNVfAd.d.ts +436 -0
- package/dist/control-BYyLTFyw.js +165 -0
- package/dist/control-Bf4Wkdvv.d.ts +9 -0
- package/dist/{common/control.js → control-DhFRTIoE.js} +1 -1
- package/dist/data/index.d.ts +2 -6
- package/dist/data/index.js +4 -5
- package/dist/data-DnxnDxD-.js +559 -0
- package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +32 -31
- package/dist/deferred-lKE8uR0z.js +386 -0
- package/dist/{runtime/effect.js → effect-BwnIvLah.js} +4 -4
- package/dist/fastlane-Dw8SOBr9.js +343 -0
- package/dist/for-internal-BKf_Tnv1.js +1563 -0
- package/dist/foundations/icon/index.d.ts +68 -2
- package/dist/foundations/icon/index.js +85 -1
- package/dist/foundations/index.d.ts +2 -5
- package/dist/foundations/index.js +2 -5
- package/dist/foundations/interactions/index.d.ts +264 -6
- package/dist/foundations/interactions/index.js +1 -6
- package/dist/foundations/state/index.d.ts +32 -1
- package/dist/foundations/state/index.js +78 -1
- package/dist/foundations/structures/index.d.ts +2 -7
- package/dist/foundations/structures/index.js +2 -7
- package/dist/foundations/utilities/index.d.ts +2 -6
- package/dist/foundations/utilities/index.js +2 -5
- package/dist/fx/index.d.ts +190 -3
- package/dist/fx/index.js +454 -4
- package/dist/index-31Uoz_NS.d.ts +239 -0
- package/dist/index-Bki2rqcr.d.ts +233 -0
- package/dist/index-BnU0NPwM.d.ts +101 -0
- package/dist/index-D73jgYx1.d.ts +48 -0
- package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -8
- package/dist/index-SJXJkssx.d.ts +44 -0
- package/dist/index.d.ts +8 -13
- package/dist/index.js +150 -15
- package/dist/interactions-w7gQN4ha.js +280 -0
- package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -1
- package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -5
- package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -1
- package/dist/jsx-dev-runtime.d.ts +2 -4
- package/dist/jsx-dev-runtime.js +7 -5
- package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
- package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
- package/dist/jsx-runtime.d.ts +2 -35
- package/dist/jsx-runtime.js +11 -5
- package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +4 -5
- package/dist/navigate-BVDCzOuB.d.ts +34 -0
- package/dist/navigate-CmPLSXyw.js +1449 -0
- package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +33 -36
- package/dist/query-registry-CQIT4mXr.js +73 -0
- package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -6
- package/dist/renderer-DzPjeLby.js +6197 -0
- package/dist/{runtime/resource-operation.js → resource-operation-CEzfpnDk.js} +118 -15
- package/dist/resources/index.d.ts +42 -3
- package/dist/resources/index.js +3 -4
- package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -1
- package/dist/route-matching-vJpvLVbX.js +515 -0
- package/dist/router/index.d.ts +166 -14
- package/dist/router/index.js +150 -12
- package/dist/{common/router.d.ts → router-CeYvjj5_.d.ts} +72 -28
- package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -1
- package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -3
- package/dist/{runtime/selector.js → selector-DafVYzV4.js} +34 -11
- package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -1
- package/dist/ssg/index.d.ts +252 -4
- package/dist/ssg/index.js +857 -1
- package/dist/ssr/index.d.ts +225 -8
- package/dist/ssr/index.js +3 -6
- package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -1
- package/dist/ssr-D3t80Rc0.js +1413 -0
- package/dist/{runtime/state.js → state-DPl8lffD.js} +3 -5
- package/dist/structures-DUB3HchX.js +221 -0
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +2 -5
- package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -5
- package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -1
- package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -2
- package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -2
- package/package.json +12 -7
- package/dist/bench/components/benchmark-row.d.ts +0 -20
- package/dist/bench/components/benchmark-row.js +0 -40
- package/dist/bench/components/benchmark-table.js +0 -23
- package/dist/bin/askr-ssg.d.ts +0 -27
- package/dist/bin/askr-ssg.js +0 -186
- package/dist/boot/hydration.js +0 -139
- package/dist/boot/root-lifecycle.d.ts +0 -18
- package/dist/boot/root-lifecycle.js +0 -209
- package/dist/boot/route-startup.js +0 -54
- package/dist/boot/types.d.ts +0 -61
- package/dist/common/component.d.ts +0 -18
- package/dist/common/control.d.ts +0 -12
- package/dist/common/dom-range.d.ts +0 -13
- package/dist/common/env.js +0 -41
- package/dist/common/error-boundary.d.ts +0 -15
- package/dist/common/invariant.js +0 -15
- package/dist/common/jsx.d.ts +0 -22
- package/dist/common/logger.js +0 -34
- package/dist/common/promise.js +0 -6
- package/dist/common/ssr-errors.d.ts +0 -10
- package/dist/common/ssr-errors.js +0 -14
- package/dist/common/ssr.d.ts +0 -41
- package/dist/common/vnode.d.ts +0 -21
- package/dist/components/error-boundary.d.ts +0 -14
- package/dist/components/error-boundary.js +0 -41
- package/dist/components/link.d.ts +0 -68
- package/dist/components/link.js +0 -74
- package/dist/control/case.d.ts +0 -18
- package/dist/control/case.js +0 -68
- package/dist/control/for.d.ts +0 -23
- package/dist/control/for.js +0 -61
- package/dist/control/shared.d.ts +0 -8
- package/dist/control/shared.js +0 -18
- package/dist/control/show.d.ts +0 -14
- package/dist/control/show.js +0 -32
- package/dist/data/data-runtime.d.ts +0 -27
- package/dist/data/invalidation.d.ts +0 -8
- package/dist/data/invalidation.js +0 -25
- package/dist/data/mutation-cell.d.ts +0 -27
- package/dist/data/mutation-cell.js +0 -133
- package/dist/data/query-cell.d.ts +0 -47
- package/dist/data/query-cell.js +0 -324
- package/dist/data/query-key.js +0 -40
- package/dist/data/shared.js +0 -20
- package/dist/data/testing.js +0 -2
- package/dist/data/types.d.ts +0 -160
- package/dist/foundations/icon/icon.d.ts +0 -52
- package/dist/foundations/icon/icon.js +0 -86
- package/dist/foundations/icon/icon.types.d.ts +0 -21
- package/dist/foundations/interactions/dismissable.d.ts +0 -71
- package/dist/foundations/interactions/dismissable.js +0 -24
- package/dist/foundations/interactions/focusable.d.ts +0 -21
- package/dist/foundations/interactions/focusable.js +0 -16
- package/dist/foundations/interactions/hoverable.d.ts +0 -25
- package/dist/foundations/interactions/hoverable.js +0 -13
- package/dist/foundations/interactions/interaction-policy.d.ts +0 -49
- package/dist/foundations/interactions/interaction-policy.js +0 -120
- package/dist/foundations/interactions/pressable.d.ts +0 -60
- package/dist/foundations/interactions/pressable.js +0 -49
- package/dist/foundations/interactions/roving-focus.d.ts +0 -51
- package/dist/foundations/interactions/roving-focus.js +0 -69
- package/dist/foundations/state/controllable.d.ts +0 -32
- package/dist/foundations/state/controllable.js +0 -80
- package/dist/foundations/structures/collection.d.ts +0 -51
- package/dist/foundations/structures/collection.js +0 -49
- package/dist/foundations/structures/layer.d.ts +0 -80
- package/dist/foundations/structures/layer.js +0 -79
- package/dist/foundations/structures/layout.d.ts +0 -32
- package/dist/foundations/structures/layout.js +0 -11
- package/dist/foundations/structures/portal.d.ts +0 -2
- package/dist/foundations/structures/portal.js +0 -3
- package/dist/foundations/structures/presence.d.ts +0 -36
- package/dist/foundations/structures/presence.js +0 -37
- package/dist/foundations/structures/slot.d.ts +0 -34
- package/dist/foundations/structures/slot.js +0 -39
- package/dist/foundations/utilities/aria.d.ts +0 -15
- package/dist/foundations/utilities/aria.js +0 -15
- package/dist/foundations/utilities/compose-handlers.d.ts +0 -36
- package/dist/foundations/utilities/compose-handlers.js +0 -18
- package/dist/foundations/utilities/compose-ref.js +0 -16
- package/dist/foundations/utilities/event-types.d.ts +0 -19
- package/dist/foundations/utilities/merge-props.d.ts +0 -4
- package/dist/foundations/utilities/merge-props.js +0 -47
- package/dist/foundations/utilities/use-id.d.ts +0 -31
- package/dist/fx/fx.d.ts +0 -32
- package/dist/fx/fx.js +0 -211
- package/dist/fx/noop.js +0 -7
- package/dist/fx/timing.d.ts +0 -158
- package/dist/fx/timing.js +0 -241
- package/dist/jsx/index.d.ts +0 -2
- package/dist/jsx/index.js +0 -4
- package/dist/jsx/types.js +0 -2
- package/dist/jsx/utils.d.ts +0 -4
- package/dist/jsx/utils.js +0 -17
- package/dist/jsx-runtime2.d.ts +0 -3
- package/dist/jsx-runtime2.js +0 -4
- package/dist/renderer/attributes.js +0 -254
- package/dist/renderer/boundaries.js +0 -142
- package/dist/renderer/boundary-materialization.js +0 -72
- package/dist/renderer/boundary-range-adoption.js +0 -76
- package/dist/renderer/boundary-range-sync.js +0 -101
- package/dist/renderer/boundary-state.js +0 -50
- package/dist/renderer/child-shape.js +0 -83
- package/dist/renderer/children-fastpath.js +0 -149
- package/dist/renderer/children.js +0 -158
- package/dist/renderer/cleanup.js +0 -267
- package/dist/renderer/component-host-cleanup.js +0 -143
- package/dist/renderer/component-host-instances.js +0 -116
- package/dist/renderer/component-host-replacement.js +0 -105
- package/dist/renderer/component-host-results.js +0 -138
- package/dist/renderer/component-host.js +0 -172
- package/dist/renderer/dom-host.js +0 -11
- package/dist/renderer/dom-internal.js +0 -243
- package/dist/renderer/dom-range.js +0 -161
- package/dist/renderer/dom.js +0 -11
- package/dist/renderer/element-children.js +0 -359
- package/dist/renderer/env.js +0 -2
- package/dist/renderer/error-boundary-dom.js +0 -86
- package/dist/renderer/evaluate-dom-range.js +0 -84
- package/dist/renderer/evaluate-reconcile.js +0 -257
- package/dist/renderer/evaluate.js +0 -95
- package/dist/renderer/fastpath.js +0 -142
- package/dist/renderer/for-commit-dom-map.js +0 -71
- package/dist/renderer/for-commit-removal.js +0 -27
- package/dist/renderer/for-commit-reorder.js +0 -87
- package/dist/renderer/for-commit.js +0 -442
- package/dist/renderer/hydration-boundaries.js +0 -60
- package/dist/renderer/hydration-listener-transaction.js +0 -49
- package/dist/renderer/index.js +0 -39
- package/dist/renderer/intrinsic-blueprint-analysis.js +0 -202
- package/dist/renderer/intrinsic-blueprint-bindings.js +0 -152
- package/dist/renderer/intrinsic-blueprint-materialization.js +0 -100
- package/dist/renderer/intrinsic-blueprint.js +0 -30
- package/dist/renderer/intrinsic-hydration-adoption.js +0 -66
- package/dist/renderer/keyed-children.js +0 -26
- package/dist/renderer/keyed.js +0 -167
- package/dist/renderer/namespaces.js +0 -21
- package/dist/renderer/prop-bindings.js +0 -315
- package/dist/renderer/reactive-child-dom.js +0 -139
- package/dist/renderer/reactive-child-sources.js +0 -182
- package/dist/renderer/reactive-children.js +0 -303
- package/dist/renderer/reconcile-commit.js +0 -36
- package/dist/renderer/reconcile-fastpaths.js +0 -100
- package/dist/renderer/reconcile-resolution.js +0 -163
- package/dist/renderer/reconcile.js +0 -37
- package/dist/renderer/retained-element-rollback.js +0 -288
- package/dist/renderer/stable-patch.js +0 -80
- package/dist/renderer/static-reuse.js +0 -94
- package/dist/renderer/types.js +0 -2
- package/dist/renderer/utils.js +0 -265
- package/dist/router/access.js +0 -34
- package/dist/router/activity.d.ts +0 -9
- package/dist/router/activity.js +0 -85
- package/dist/router/authoring.d.ts +0 -21
- package/dist/router/authoring.js +0 -196
- package/dist/router/internal-types.d.ts +0 -30
- package/dist/router/lazy.d.ts +0 -18
- package/dist/router/lazy.js +0 -50
- package/dist/router/manifest.d.ts +0 -9
- package/dist/router/manifest.js +0 -47
- package/dist/router/match.js +0 -120
- package/dist/router/navigate.d.ts +0 -10
- package/dist/router/navigate.js +0 -73
- package/dist/router/navigation-registry.d.ts +0 -31
- package/dist/router/navigation-registry.js +0 -103
- package/dist/router/navigation-scroll.d.ts +0 -13
- package/dist/router/navigation-scroll.js +0 -91
- package/dist/router/navigation-targets.d.ts +0 -30
- package/dist/router/navigation-targets.js +0 -634
- package/dist/router/policy.d.ts +0 -27
- package/dist/router/policy.js +0 -130
- package/dist/router/rendering.d.ts +0 -9
- package/dist/router/rendering.js +0 -47
- package/dist/router/resolution.d.ts +0 -3
- package/dist/router/resolution.js +0 -84
- package/dist/router/route-context.js +0 -77
- package/dist/router/route-matching.d.ts +0 -19
- package/dist/router/route-matching.js +0 -173
- package/dist/router/route-query.d.ts +0 -16
- package/dist/router/route-query.js +0 -45
- package/dist/router/route.d.ts +0 -8
- package/dist/router/route.js +0 -10
- package/dist/router/store.d.ts +0 -49
- package/dist/router/store.js +0 -169
- package/dist/router/testing.js +0 -4
- package/dist/runtime/access.d.ts +0 -19
- package/dist/runtime/access.js +0 -43
- package/dist/runtime/child-scope.d.ts +0 -41
- package/dist/runtime/child-scope.js +0 -134
- package/dist/runtime/component-cleanup.d.ts +0 -15
- package/dist/runtime/component-cleanup.js +0 -68
- package/dist/runtime/component-commit.js +0 -167
- package/dist/runtime/component-facade.d.ts +0 -5
- package/dist/runtime/component-facade.js +0 -6
- package/dist/runtime/component-internal.d.ts +0 -105
- package/dist/runtime/component-internal.js +0 -237
- package/dist/runtime/component-lifecycle.d.ts +0 -10
- package/dist/runtime/component-lifecycle.js +0 -33
- package/dist/runtime/component-scope.d.ts +0 -54
- package/dist/runtime/component.d.ts +0 -5
- package/dist/runtime/component.js +0 -6
- package/dist/runtime/context.d.ts +0 -72
- package/dist/runtime/context.js +0 -236
- package/dist/runtime/control.d.ts +0 -62
- package/dist/runtime/control.js +0 -239
- package/dist/runtime/derive.d.ts +0 -16
- package/dist/runtime/derive.js +0 -140
- package/dist/runtime/dev-namespace.d.ts +0 -30
- package/dist/runtime/dev-namespace.js +0 -64
- package/dist/runtime/effect.d.ts +0 -35
- package/dist/runtime/error-boundary.d.ts +0 -4
- package/dist/runtime/error-boundary.js +0 -29
- package/dist/runtime/events.d.ts +0 -58
- package/dist/runtime/events.js +0 -201
- package/dist/runtime/execution-model.d.ts +0 -6
- package/dist/runtime/execution-model.js +0 -13
- package/dist/runtime/fastlane.d.ts +0 -33
- package/dist/runtime/fastlane.js +0 -173
- package/dist/runtime/for-bench.d.ts +0 -40
- package/dist/runtime/for-bench.js +0 -13
- package/dist/runtime/for-internal.d.ts +0 -106
- package/dist/runtime/for-internal.js +0 -285
- package/dist/runtime/for-reconcile.d.ts +0 -7
- package/dist/runtime/for-reconcile.js +0 -442
- package/dist/runtime/for-scopes.d.ts +0 -26
- package/dist/runtime/for-scopes.js +0 -280
- package/dist/runtime/for-signals.d.ts +0 -39
- package/dist/runtime/for-signals.js +0 -213
- package/dist/runtime/for-types.d.ts +0 -8
- package/dist/runtime/for.d.ts +0 -4
- package/dist/runtime/for.js +0 -5
- package/dist/runtime/index.d.ts +0 -24
- package/dist/runtime/index.js +0 -33
- package/dist/runtime/lifecycle-batch.d.ts +0 -59
- package/dist/runtime/lifecycle-batch.js +0 -178
- package/dist/runtime/lifecycle-operation-settlement.d.ts +0 -5
- package/dist/runtime/lifecycle-operation-settlement.js +0 -51
- package/dist/runtime/lifecycle-operations.d.ts +0 -30
- package/dist/runtime/operations.d.ts +0 -3
- package/dist/runtime/operations.js +0 -3
- package/dist/runtime/perf-metrics.d.ts +0 -27
- package/dist/runtime/perf-metrics.js +0 -6
- package/dist/runtime/portal.d.ts +0 -21
- package/dist/runtime/readable.d.ts +0 -34
- package/dist/runtime/readable.js +0 -183
- package/dist/runtime/resource-cell.js +0 -112
- package/dist/runtime/resource-operation.d.ts +0 -12
- package/dist/runtime/runtime.js +0 -57
- package/dist/runtime/selector-store.js +0 -22
- package/dist/runtime/selector.d.ts +0 -10
- package/dist/runtime/snapshot-source.d.ts +0 -9
- package/dist/runtime/state.d.ts +0 -54
- package/dist/ssg/batch-render.js +0 -101
- package/dist/ssg/create-static-gen.d.ts +0 -66
- package/dist/ssg/create-static-gen.js +0 -250
- package/dist/ssg/generate-metadata.js +0 -92
- package/dist/ssg/generation-plan.js +0 -68
- package/dist/ssg/incremental-manifest.js +0 -54
- package/dist/ssg/resolve-ssg-data.js +0 -103
- package/dist/ssg/route-utils.js +0 -22
- package/dist/ssg/static-routes.js +0 -100
- package/dist/ssg/types.d.ts +0 -188
- package/dist/ssg/write-static-files.js +0 -77
- package/dist/ssr/attrs.js +0 -92
- package/dist/ssr/boundaries.js +0 -124
- package/dist/ssr/component-runtime.js +0 -85
- package/dist/ssr/context.d.ts +0 -49
- package/dist/ssr/context.js +0 -89
- package/dist/ssr/errors.d.ts +0 -9
- package/dist/ssr/errors.js +0 -12
- package/dist/ssr/escape.js +0 -191
- package/dist/ssr/hydration-data.js +0 -8
- package/dist/ssr/hydration-verify.d.ts +0 -11
- package/dist/ssr/hydration-verify.js +0 -171
- package/dist/ssr/index-internal.d.ts +0 -14
- package/dist/ssr/index-internal.js +0 -17
- package/dist/ssr/render-keys.js +0 -14
- package/dist/ssr/render-resolved.d.ts +0 -19
- package/dist/ssr/render-resolved.js +0 -33
- package/dist/ssr/render-sync.d.ts +0 -20
- package/dist/ssr/render-sync.js +0 -283
- package/dist/ssr/route-policy-resolution.js +0 -76
- package/dist/ssr/route-render.d.ts +0 -76
- package/dist/ssr/route-render.js +0 -118
- package/dist/ssr/sink.d.ts +0 -25
- package/dist/ssr/sink.js +0 -84
- package/dist/ssr/types.d.ts +0 -22
package/dist/ssg/types.d.ts
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { DocumentRenderer } from "../common/ssr.js";
|
|
2
|
-
import { RenderableChild } from "../common/vnode.js";
|
|
3
|
-
import { ComponentFunction } from "../common/component.js";
|
|
4
|
-
import { RouteAuthMode, RouteHandler, RoutePathParams, RoutePolicy, RouteRegistry } from "../common/router.js";
|
|
5
|
-
|
|
6
|
-
//#region src/ssg/types.d.ts
|
|
7
|
-
type SSGMode = 'full' | 'incremental';
|
|
8
|
-
type RouteRenderStatus = 'success' | 'error' | 'skipped' | 'removed';
|
|
9
|
-
type RouteRenderReason = 'full' | 'changed-key' | 'changed-route' | 'new-route' | 'no-keys' | 'unchanged' | 'deleted' | 'runtime-only';
|
|
10
|
-
type RouteConfigParams<Path extends string> = string extends Path ? Record<string, string> : RoutePathParams<Path>;
|
|
11
|
-
type RouteComponentProps<Path extends string> = RouteConfigParams<Path> & Record<string, unknown>;
|
|
12
|
-
type StaticRouteComponent<Path extends string> = (props: RouteComponentProps<Path>, context?: Parameters<ComponentFunction>[1]) => RenderableChild;
|
|
13
|
-
/**
|
|
14
|
-
* Route config accepted by SSG.
|
|
15
|
-
*
|
|
16
|
-
* `handler` is preferred and matches router/SSR naming.
|
|
17
|
-
* `component` is kept for compatibility and is normalized to `handler`.
|
|
18
|
-
*/
|
|
19
|
-
interface RouteConfig<Path extends string = string> {
|
|
20
|
-
/** URL path to generate (e.g., "/blog/post-1", "/") */
|
|
21
|
-
path: Path;
|
|
22
|
-
/** Route handler compatible with router/SSR */
|
|
23
|
-
handler?: RouteHandler;
|
|
24
|
-
/** Backward-compatible alias for handler */
|
|
25
|
-
component?: StaticRouteComponent<Path>;
|
|
26
|
-
/** Optional base props merged with route params during render */
|
|
27
|
-
props?: Record<string, unknown>;
|
|
28
|
-
/** Optional namespace for router compatibility */
|
|
29
|
-
namespace?: string;
|
|
30
|
-
/** Guest routes remain prerenderable; authenticated routes are runtime-only by default */
|
|
31
|
-
auth?: RouteAuthMode;
|
|
32
|
-
/** Role-gated routes are runtime-only by default */
|
|
33
|
-
role?: string;
|
|
34
|
-
/** Permission-gated routes are runtime-only by default */
|
|
35
|
-
permission?: string;
|
|
36
|
-
/** Advanced runtime access checks disable prerendering by default */
|
|
37
|
-
policies?: readonly RoutePolicy[];
|
|
38
|
-
/** Optional path parameter map for template paths like "/blog/{slug}" */
|
|
39
|
-
params?: RouteConfigParams<Path>;
|
|
40
|
-
/** Optional explicit invalidation keys for incremental generation */
|
|
41
|
-
invalidationKeys?: string[];
|
|
42
|
-
/**
|
|
43
|
-
* SSG entry generator for parameterized routes.
|
|
44
|
-
*
|
|
45
|
-
* Return one param map per page to be generated. The path template is
|
|
46
|
-
* expanded with each map to produce a concrete URL, e.g.:
|
|
47
|
-
*
|
|
48
|
-
* ```ts
|
|
49
|
-
* route('/posts/{slug}', PostPage, {
|
|
50
|
-
* entries: async () => getPosts().map(p => ({ slug: p.slug })),
|
|
51
|
-
* });
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
entries?: () => Array<RouteConfigParams<Path>> | Promise<Array<RouteConfigParams<Path>>>;
|
|
55
|
-
}
|
|
56
|
-
interface SSGBaseOptions {
|
|
57
|
-
/** Output directory for generated HTML files */
|
|
58
|
-
outputDir: string;
|
|
59
|
-
/** Optional seed for deterministic rendering */
|
|
60
|
-
seed?: number;
|
|
61
|
-
/** Optional override data for resources (route-keyed) */
|
|
62
|
-
dataOverrides?: Record<string, unknown>;
|
|
63
|
-
/** Optional document wrapper for full HTML output */
|
|
64
|
-
document?: DocumentRenderer;
|
|
65
|
-
/** Optional concurrency limit for rendering (default: 1) */
|
|
66
|
-
concurrency?: number;
|
|
67
|
-
/** Preferred render parallelism. `'auto'` resolves from the host machine. */
|
|
68
|
-
parallelism?: number | 'auto';
|
|
69
|
-
}
|
|
70
|
-
/** Options for createStaticGen */
|
|
71
|
-
type SSGOptions<TRoutes extends readonly RouteConfig[] = RouteConfig[]> = SSGBaseOptions & ({
|
|
72
|
-
/** Routes to generate. Prefer `registry` when routes are already defined through the router DSL. */routes: TRoutes;
|
|
73
|
-
registry?: never;
|
|
74
|
-
} | {
|
|
75
|
-
/** Explicit route registry captured with `createRouteRegistry()`. */registry: RouteRegistry;
|
|
76
|
-
routes?: never;
|
|
77
|
-
});
|
|
78
|
-
/** Options for a single generation run */
|
|
79
|
-
interface SSGGenerateOptions {
|
|
80
|
-
/** Generation mode */
|
|
81
|
-
mode?: SSGMode;
|
|
82
|
-
/** Changed invalidation keys for incremental runs */
|
|
83
|
-
changedKeys?: string[];
|
|
84
|
-
/** Changed concrete route paths for incremental runs */
|
|
85
|
-
changedRoutes?: string[];
|
|
86
|
-
/** Force a full rebuild even when incremental mode was requested */
|
|
87
|
-
forceFull?: boolean;
|
|
88
|
-
}
|
|
89
|
-
/** Result of rendering a single route */
|
|
90
|
-
interface RouteRenderResult {
|
|
91
|
-
/** URL path */
|
|
92
|
-
path: string;
|
|
93
|
-
/** Output file path relative to outputDir */
|
|
94
|
-
filePath: string;
|
|
95
|
-
/** Generated HTML content */
|
|
96
|
-
html: string;
|
|
97
|
-
/** File size in bytes */
|
|
98
|
-
fileSize: number;
|
|
99
|
-
/** Render duration in milliseconds */
|
|
100
|
-
renderDuration: number;
|
|
101
|
-
/** Number of resources discovered and rendered */
|
|
102
|
-
resourceCount: number;
|
|
103
|
-
/** Render or generation status */
|
|
104
|
-
status: RouteRenderStatus;
|
|
105
|
-
/** Why this route was rendered, skipped, or removed */
|
|
106
|
-
reason: RouteRenderReason;
|
|
107
|
-
/** Whether the output file was written during this run */
|
|
108
|
-
written: boolean;
|
|
109
|
-
/** Error message if rendering failed */
|
|
110
|
-
error?: string;
|
|
111
|
-
}
|
|
112
|
-
/** Overall result from SSG generation */
|
|
113
|
-
interface SSGResult {
|
|
114
|
-
/** ISO timestamp of generation */
|
|
115
|
-
generatedAt: string;
|
|
116
|
-
/** Total number of routes processed */
|
|
117
|
-
totalRoutes: number;
|
|
118
|
-
/** Number of successfully generated routes */
|
|
119
|
-
successful: number;
|
|
120
|
-
/** Number of failed routes */
|
|
121
|
-
failed: number;
|
|
122
|
-
/** Total generation duration in milliseconds */
|
|
123
|
-
totalDuration: number;
|
|
124
|
-
/** Effective generation mode */
|
|
125
|
-
mode: SSGMode;
|
|
126
|
-
/** Number of routes rendered during this run */
|
|
127
|
-
rebuilt: number;
|
|
128
|
-
/** Number of current routes skipped as unchanged */
|
|
129
|
-
skipped: number;
|
|
130
|
-
/** Number of stale routes removed from output */
|
|
131
|
-
removed: number;
|
|
132
|
-
/** Number of rendered routes whose HTML bytes were unchanged */
|
|
133
|
-
cacheHits: number;
|
|
134
|
-
/** Invalidation keys applied to this run */
|
|
135
|
-
invalidatedKeys: string[];
|
|
136
|
-
/** Concrete route paths applied to this run */
|
|
137
|
-
invalidatedRoutes: string[];
|
|
138
|
-
/** Per-route results */
|
|
139
|
-
routes: RouteRenderResult[];
|
|
140
|
-
}
|
|
141
|
-
/** Metadata to write to metadata.json */
|
|
142
|
-
interface SSGMetadata extends Record<string, unknown> {
|
|
143
|
-
/** ISO timestamp of generation */
|
|
144
|
-
generatedAt: string;
|
|
145
|
-
/** Total number of routes processed */
|
|
146
|
-
totalRoutes: number;
|
|
147
|
-
/** Number of successfully generated routes */
|
|
148
|
-
successful: number;
|
|
149
|
-
/** Number of failed routes */
|
|
150
|
-
failed: number;
|
|
151
|
-
/** Total generation duration in milliseconds */
|
|
152
|
-
totalDuration: number;
|
|
153
|
-
/** Effective generation mode */
|
|
154
|
-
mode: SSGMode;
|
|
155
|
-
/** Number of routes rendered during this run */
|
|
156
|
-
rebuilt: number;
|
|
157
|
-
/** Number of current routes skipped as unchanged */
|
|
158
|
-
skipped: number;
|
|
159
|
-
/** Number of stale routes removed from output */
|
|
160
|
-
removed: number;
|
|
161
|
-
/** Number of rendered routes whose HTML bytes were unchanged */
|
|
162
|
-
cacheHits: number;
|
|
163
|
-
/** Invalidation keys applied to this run */
|
|
164
|
-
invalidatedKeys: string[];
|
|
165
|
-
/** Concrete route paths applied to this run */
|
|
166
|
-
invalidatedRoutes: string[];
|
|
167
|
-
/** Per-route details */
|
|
168
|
-
routes: Array<{
|
|
169
|
-
/** URL path */path: string; /** Output file path relative to outputDir */
|
|
170
|
-
filePath: string; /** File size in bytes */
|
|
171
|
-
fileSize: number; /** Render duration in milliseconds */
|
|
172
|
-
renderDuration: number; /** Number of resources discovered and rendered */
|
|
173
|
-
resourceCount: number; /** Render or generation status */
|
|
174
|
-
status: RouteRenderStatus; /** Why this route was rendered, skipped, or removed */
|
|
175
|
-
reason: RouteRenderReason; /** Whether the output file was written during this run */
|
|
176
|
-
written: boolean; /** Error message if rendering failed */
|
|
177
|
-
error?: string;
|
|
178
|
-
}>;
|
|
179
|
-
}
|
|
180
|
-
/** Resource discovery result for a single route */
|
|
181
|
-
interface DiscoveredResources {
|
|
182
|
-
[key: string]: {
|
|
183
|
-
count: number;
|
|
184
|
-
dependencies: string[];
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
//#endregion
|
|
188
|
-
export { DiscoveredResources, RouteConfig, RouteRenderReason, RouteRenderResult, RouteRenderStatus, SSGGenerateOptions, SSGMetadata, SSGMode, SSGOptions, SSGResult };
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import "./route-utils.js";
|
|
2
|
-
import * as fs from "node:fs/promises";
|
|
3
|
-
import * as pathModule from "node:path";
|
|
4
|
-
import * as fsSync from "node:fs";
|
|
5
|
-
//#region src/ssg/write-static-files.ts
|
|
6
|
-
/**
|
|
7
|
-
* File I/O for Static Site Generation
|
|
8
|
-
*
|
|
9
|
-
* Uses Node.js fs/path modules to write rendered HTML files to disk.
|
|
10
|
-
* This module is Node-only and not intended for browser builds.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Write rendered routes to disk
|
|
14
|
-
* Creates outputDir/{route-path}/index.html structure
|
|
15
|
-
*/
|
|
16
|
-
async function writeStaticFiles(results, outputDir, options = {}, fileOperations = fs) {
|
|
17
|
-
await fileOperations.mkdir(outputDir, { recursive: true });
|
|
18
|
-
for (const result of results) {
|
|
19
|
-
if (result.status !== "removed") continue;
|
|
20
|
-
const fullPath = pathModule.join(outputDir, result.filePath);
|
|
21
|
-
if (fsSync.existsSync(fullPath)) {
|
|
22
|
-
await fileOperations.rm(fullPath, { force: true });
|
|
23
|
-
await pruneEmptyDirs(pathModule.dirname(fullPath), outputDir, fileOperations);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const pendingWrites = [];
|
|
27
|
-
for (let index = 0; index < results.length; index += 1) {
|
|
28
|
-
const result = results[index];
|
|
29
|
-
if (result.status === "error") {
|
|
30
|
-
console.warn(`Skipping failed route: ${result.path} - ${result.error}`);
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (result.status === "success" && result.written) pendingWrites.push(result);
|
|
34
|
-
}
|
|
35
|
-
const directories = [];
|
|
36
|
-
const seenDirectories = /* @__PURE__ */ new Set();
|
|
37
|
-
for (const result of pendingWrites) {
|
|
38
|
-
const dir = pathModule.dirname(pathModule.join(outputDir, result.filePath));
|
|
39
|
-
if (!seenDirectories.has(dir)) {
|
|
40
|
-
seenDirectories.add(dir);
|
|
41
|
-
directories.push(dir);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
for (const dir of directories) await fileOperations.mkdir(dir, { recursive: true });
|
|
45
|
-
const concurrency = Math.max(1, Math.min(options.concurrency ?? 8, pendingWrites.length || 1));
|
|
46
|
-
let nextIndex = 0;
|
|
47
|
-
const worker = async () => {
|
|
48
|
-
while (true) {
|
|
49
|
-
const current = nextIndex;
|
|
50
|
-
nextIndex += 1;
|
|
51
|
-
if (current >= pendingWrites.length) return;
|
|
52
|
-
const result = pendingWrites[current];
|
|
53
|
-
const fullPath = pathModule.join(outputDir, result.filePath);
|
|
54
|
-
const tempPath = pathModule.join(pathModule.dirname(fullPath), `.${pathModule.basename(fullPath)}.askr-${process.pid}-${current}.tmp`);
|
|
55
|
-
try {
|
|
56
|
-
await fileOperations.writeFile(tempPath, result.html, "utf8");
|
|
57
|
-
await fileOperations.rename(tempPath, fullPath);
|
|
58
|
-
} finally {
|
|
59
|
-
await fileOperations.rm(tempPath, { force: true });
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
await Promise.all(Array.from({ length: concurrency }, () => worker()));
|
|
64
|
-
}
|
|
65
|
-
async function pruneEmptyDirs(startDir, rootDir, fileOperations) {
|
|
66
|
-
let current = startDir;
|
|
67
|
-
const normalizedRoot = pathModule.resolve(rootDir);
|
|
68
|
-
while (current.startsWith(normalizedRoot)) {
|
|
69
|
-
if (!fsSync.existsSync(current)) break;
|
|
70
|
-
if ((await fileOperations.readdir(current)).length > 0) break;
|
|
71
|
-
await fileOperations.rmdir(current);
|
|
72
|
-
if (pathModule.resolve(current) === normalizedRoot) break;
|
|
73
|
-
current = pathModule.dirname(current);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//#endregion
|
|
77
|
-
export { writeStaticFiles };
|
package/dist/ssr/attrs.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { getPublicAttributeName } from "../common/attr-names.js";
|
|
2
|
-
import { escapeAttr, needsEscapeAttr, styleObjToCss } from "./escape.js";
|
|
3
|
-
//#region src/ssr/attrs.ts
|
|
4
|
-
const ESCAPED_ATTR_VALUE_CACHE_LIMIT = 512;
|
|
5
|
-
const escapedAttrValueCache = /* @__PURE__ */ new Map();
|
|
6
|
-
function isEventHandler(key) {
|
|
7
|
-
return key.length >= 3 && key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.charCodeAt(2) >= 65 && key.charCodeAt(2) <= 90;
|
|
8
|
-
}
|
|
9
|
-
function getEscapedAttrValue(value) {
|
|
10
|
-
if (value.length > 64) return escapeAttr(value);
|
|
11
|
-
const cached = escapedAttrValueCache.get(value);
|
|
12
|
-
if (cached !== void 0) return cached;
|
|
13
|
-
const escaped = escapeAttr(value);
|
|
14
|
-
if (escaped === value) return value;
|
|
15
|
-
if (escapedAttrValueCache.size >= ESCAPED_ATTR_VALUE_CACHE_LIMIT) escapedAttrValueCache.clear();
|
|
16
|
-
escapedAttrValueCache.set(value, escaped);
|
|
17
|
-
return escaped;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Render attributes directly to a sink without intermediate string allocations.
|
|
21
|
-
* This is the hot path for streaming SSR.
|
|
22
|
-
*/
|
|
23
|
-
function renderAttrsDirect(props, sink) {
|
|
24
|
-
if (!props || typeof props !== "object") return;
|
|
25
|
-
const propsObj = props;
|
|
26
|
-
for (const key in propsObj) {
|
|
27
|
-
const value = propsObj[key];
|
|
28
|
-
if (key === "children" || key === "key" || key === "ref" || key === "dangerouslySetInnerHTML") continue;
|
|
29
|
-
if (isEventHandler(key)) continue;
|
|
30
|
-
if (key.charCodeAt(0) === 95) continue;
|
|
31
|
-
const attrName = getPublicAttributeName(key);
|
|
32
|
-
if (attrName === "style") {
|
|
33
|
-
const css = typeof value === "string" ? value : styleObjToCss(value);
|
|
34
|
-
if (!css) continue;
|
|
35
|
-
sink.write(" style=\"");
|
|
36
|
-
if (needsEscapeAttr(css)) sink.write(getEscapedAttrValue(css));
|
|
37
|
-
else sink.write(css);
|
|
38
|
-
sink.write("\"");
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (value === true) {
|
|
42
|
-
sink.write(" ");
|
|
43
|
-
sink.write(attrName);
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
if (value === false || value === null || value === void 0) continue;
|
|
47
|
-
const strValue = String(value);
|
|
48
|
-
sink.write(" ");
|
|
49
|
-
sink.write(attrName);
|
|
50
|
-
sink.write("=\"");
|
|
51
|
-
sink.write(getEscapedAttrValue(strValue));
|
|
52
|
-
sink.write("\"");
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function renderAttrs(props, opts) {
|
|
56
|
-
if (!props || typeof props !== "object") return opts?.returnDangerousHtml ? { attrs: "" } : "";
|
|
57
|
-
const attrParts = [];
|
|
58
|
-
let dangerousHtml;
|
|
59
|
-
const propsObj = props;
|
|
60
|
-
for (const key in propsObj) {
|
|
61
|
-
const value = propsObj[key];
|
|
62
|
-
if (key === "children") continue;
|
|
63
|
-
if (key === "key" || key === "ref") continue;
|
|
64
|
-
if (key === "dangerouslySetInnerHTML") {
|
|
65
|
-
if (value && typeof value === "object" && "__html" in value) dangerousHtml = String(value.__html);
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
if (isEventHandler(key)) continue;
|
|
69
|
-
if (key.charCodeAt(0) === 95) continue;
|
|
70
|
-
const attrName = key === "class" ? "class" : getPublicAttributeName(key);
|
|
71
|
-
if (attrName === "style") {
|
|
72
|
-
const css = typeof value === "string" ? value : styleObjToCss(value);
|
|
73
|
-
if (css === null || css === "") continue;
|
|
74
|
-
attrParts.push(` style="${getEscapedAttrValue(css)}"`);
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (value === true) attrParts.push(` ${attrName}`);
|
|
78
|
-
else if (value === false || value === null || value === void 0) continue;
|
|
79
|
-
else {
|
|
80
|
-
const strValue = String(value);
|
|
81
|
-
attrParts.push(` ${attrName}="${getEscapedAttrValue(strValue)}"`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const result = attrParts.join("");
|
|
85
|
-
if (opts?.returnDangerousHtml) return {
|
|
86
|
-
attrs: result,
|
|
87
|
-
dangerousHtml
|
|
88
|
-
};
|
|
89
|
-
return result;
|
|
90
|
-
}
|
|
91
|
-
//#endregion
|
|
92
|
-
export { renderAttrs, renderAttrsDirect };
|
package/dist/ssr/boundaries.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { __CONTROL_BOUNDARY__ } from "../common/control.js";
|
|
2
|
-
import { ELEMENT_TYPE } from "../common/jsx.js";
|
|
3
|
-
import { evaluateCaseState, evaluateShowState } from "../runtime/control.js";
|
|
4
|
-
import { commitForStateTransaction, evaluateForState, rollbackForStateTransaction } from "../runtime/for-internal.js";
|
|
5
|
-
import "../runtime/index.js";
|
|
6
|
-
import "../jsx/index.js";
|
|
7
|
-
//#region src/ssr/boundaries.ts
|
|
8
|
-
function normalizeRenderableChildren(value) {
|
|
9
|
-
if (value === null || value === void 0 || value === false) return [];
|
|
10
|
-
return Array.isArray(value) ? value : [value];
|
|
11
|
-
}
|
|
12
|
-
function getRenderableChildren(node) {
|
|
13
|
-
if (Array.isArray(node.children)) return node.children;
|
|
14
|
-
if (Array.isArray(node.props?.children)) return node.props.children;
|
|
15
|
-
if (node.props?.children !== void 0 && node.props.children !== null && node.props.children !== false) return [node.props.children];
|
|
16
|
-
}
|
|
17
|
-
function getErrorBoundaryState(node) {
|
|
18
|
-
return node.__instance?.errorBoundaryState ?? null;
|
|
19
|
-
}
|
|
20
|
-
function resetErrorBoundaryState(node) {
|
|
21
|
-
const state = node.__instance?.errorBoundaryState;
|
|
22
|
-
if (state) {
|
|
23
|
-
state.error = null;
|
|
24
|
-
state.notified = false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function createErrorBoundaryReset(node) {
|
|
28
|
-
return () => resetErrorBoundaryState(node);
|
|
29
|
-
}
|
|
30
|
-
function createDefaultErrorBoundaryFallbackVNode(error) {
|
|
31
|
-
const message = error instanceof Error ? error.stack || error.message || error.name : typeof error === "string" ? error : (() => {
|
|
32
|
-
try {
|
|
33
|
-
return JSON.stringify(error);
|
|
34
|
-
} catch {
|
|
35
|
-
return String(error);
|
|
36
|
-
}
|
|
37
|
-
})();
|
|
38
|
-
return {
|
|
39
|
-
$$typeof: ELEMENT_TYPE,
|
|
40
|
-
type: "div",
|
|
41
|
-
props: {
|
|
42
|
-
role: "alert",
|
|
43
|
-
"data-askr-error-boundary": "true",
|
|
44
|
-
style: {
|
|
45
|
-
boxSizing: "border-box",
|
|
46
|
-
padding: "1rem",
|
|
47
|
-
border: "1px solid currentColor",
|
|
48
|
-
borderRadius: "0.75rem",
|
|
49
|
-
display: "grid",
|
|
50
|
-
gap: "0.75rem",
|
|
51
|
-
maxWidth: "100%"
|
|
52
|
-
},
|
|
53
|
-
children: [
|
|
54
|
-
{
|
|
55
|
-
$$typeof: ELEMENT_TYPE,
|
|
56
|
-
type: "strong",
|
|
57
|
-
props: { children: ["Something went wrong while rendering this view."] }
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
$$typeof: ELEMENT_TYPE,
|
|
61
|
-
type: "p",
|
|
62
|
-
props: {
|
|
63
|
-
style: { margin: "0" },
|
|
64
|
-
children: ["The app recovered into a visible fallback so the error is not hidden in the console."]
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
$$typeof: ELEMENT_TYPE,
|
|
69
|
-
type: "details",
|
|
70
|
-
props: {
|
|
71
|
-
open: false,
|
|
72
|
-
children: [{
|
|
73
|
-
$$typeof: ELEMENT_TYPE,
|
|
74
|
-
type: "summary",
|
|
75
|
-
props: { children: ["Error details"] }
|
|
76
|
-
}, {
|
|
77
|
-
$$typeof: ELEMENT_TYPE,
|
|
78
|
-
type: "pre",
|
|
79
|
-
props: {
|
|
80
|
-
style: {
|
|
81
|
-
margin: "0",
|
|
82
|
-
whiteSpace: "pre-wrap",
|
|
83
|
-
wordBreak: "break-word"
|
|
84
|
-
},
|
|
85
|
-
children: [message]
|
|
86
|
-
}
|
|
87
|
-
}]
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
]
|
|
91
|
-
},
|
|
92
|
-
key: null
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
function resolveErrorBoundaryFallbackNode(fallback, error, reset) {
|
|
96
|
-
return typeof fallback === "function" ? fallback(error, reset) : fallback !== void 0 ? fallback : createDefaultErrorBoundaryFallbackVNode(error);
|
|
97
|
-
}
|
|
98
|
-
function getControlBoundaryState(node) {
|
|
99
|
-
const boundaryNode = node;
|
|
100
|
-
return boundaryNode._controlState ?? boundaryNode._forState ?? null;
|
|
101
|
-
}
|
|
102
|
-
function evaluateControlBoundaryChildren(node) {
|
|
103
|
-
if (node.type !== __CONTROL_BOUNDARY__) return;
|
|
104
|
-
const controlState = getControlBoundaryState(node);
|
|
105
|
-
if (!controlState) return [];
|
|
106
|
-
if (controlState.kind === "for") return evaluateForState(controlState);
|
|
107
|
-
if (controlState.kind === "show") return evaluateShowState(controlState);
|
|
108
|
-
return evaluateCaseState(controlState);
|
|
109
|
-
}
|
|
110
|
-
function withControlBoundaryChildren(node, render) {
|
|
111
|
-
const controlState = getControlBoundaryState(node);
|
|
112
|
-
if (!controlState || controlState.kind !== "for") return render(evaluateControlBoundaryChildren(node));
|
|
113
|
-
const children = evaluateForState(controlState);
|
|
114
|
-
try {
|
|
115
|
-
const result = render(children);
|
|
116
|
-
commitForStateTransaction(controlState);
|
|
117
|
-
return result;
|
|
118
|
-
} catch (error) {
|
|
119
|
-
rollbackForStateTransaction(controlState);
|
|
120
|
-
throw error;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
//#endregion
|
|
124
|
-
export { createErrorBoundaryReset, evaluateControlBoundaryChildren, getControlBoundaryState, getErrorBoundaryState, getRenderableChildren, normalizeRenderableChildren, resetErrorBoundaryState, resolveErrorBoundaryFallbackNode, withControlBoundaryChildren };
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ELEMENT_TYPE, Fragment } from "../common/jsx.js";
|
|
2
|
-
import { getCurrentComponentInstance, setCurrentComponentInstance } from "../runtime/component-scope.js";
|
|
3
|
-
import { cleanupComponent } from "../runtime/component-cleanup.js";
|
|
4
|
-
import { isPromiseLike } from "../common/promise.js";
|
|
5
|
-
import { createComponentInstance } from "../runtime/component-internal.js";
|
|
6
|
-
import { DefaultPortal, disposeDefaultPortalScope } from "../runtime/portal.js";
|
|
7
|
-
import "../runtime/index.js";
|
|
8
|
-
import "../jsx/index.js";
|
|
9
|
-
import { throwSSRDataMissing } from "./context.js";
|
|
10
|
-
function executeComponentSync(component, props, ctx) {
|
|
11
|
-
try {
|
|
12
|
-
const prev = getCurrentComponentInstance();
|
|
13
|
-
const temp = createComponentInstance("ssr-temp", component, props || {}, null);
|
|
14
|
-
temp.ssr = true;
|
|
15
|
-
temp.portalScope = temp;
|
|
16
|
-
ctx.ssrCleanupFns.push(() => {
|
|
17
|
-
let cleanupError = null;
|
|
18
|
-
try {
|
|
19
|
-
cleanupComponent(temp);
|
|
20
|
-
} catch (error) {
|
|
21
|
-
cleanupError = error;
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
disposeDefaultPortalScope(temp);
|
|
25
|
-
} catch (error) {
|
|
26
|
-
if (cleanupError) throw new AggregateError([cleanupError, error], "SSR temporary owner cleanup failed");
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
29
|
-
if (cleanupError) throw cleanupError;
|
|
30
|
-
});
|
|
31
|
-
setCurrentComponentInstance(temp);
|
|
32
|
-
try {
|
|
33
|
-
const result = component(props || {}, { ssr: ctx });
|
|
34
|
-
if (isPromiseLike(result)) throwSSRDataMissing();
|
|
35
|
-
if (typeof result === "string" || typeof result === "number" || typeof result === "boolean" || result === null || result === void 0) {
|
|
36
|
-
const inner = result === null || result === void 0 || result === false ? "" : String(result);
|
|
37
|
-
return {
|
|
38
|
-
$$typeof: ELEMENT_TYPE,
|
|
39
|
-
type: Fragment,
|
|
40
|
-
props: { children: inner ? [inner] : [] }
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
return result;
|
|
44
|
-
} finally {
|
|
45
|
-
setCurrentComponentInstance(prev);
|
|
46
|
-
}
|
|
47
|
-
} finally {}
|
|
48
|
-
}
|
|
49
|
-
function disposeSSRTemporaryOwners(ctx) {
|
|
50
|
-
const cleanupFns = ctx.ssrCleanupFns;
|
|
51
|
-
ctx.ssrCleanupFns = [];
|
|
52
|
-
const cleanupErrors = [];
|
|
53
|
-
for (let index = cleanupFns.length - 1; index >= 0; index -= 1) try {
|
|
54
|
-
cleanupFns[index]();
|
|
55
|
-
} catch (error) {
|
|
56
|
-
cleanupErrors.push(error);
|
|
57
|
-
}
|
|
58
|
-
if (cleanupErrors.length === 1) throw cleanupErrors[0];
|
|
59
|
-
if (cleanupErrors.length > 1) throw new AggregateError(cleanupErrors, "SSR temporary owner cleanup failed");
|
|
60
|
-
}
|
|
61
|
-
function wrapWithDefaultPortal(out) {
|
|
62
|
-
if (isPromiseLike(out)) throwSSRDataMissing();
|
|
63
|
-
const portalVNode = {
|
|
64
|
-
$$typeof: ELEMENT_TYPE,
|
|
65
|
-
type: DefaultPortal,
|
|
66
|
-
props: { __askrAutoDefaultPortal: true },
|
|
67
|
-
key: "__default_portal"
|
|
68
|
-
};
|
|
69
|
-
if (out == null) return {
|
|
70
|
-
$$typeof: ELEMENT_TYPE,
|
|
71
|
-
type: Fragment,
|
|
72
|
-
props: { children: [portalVNode] }
|
|
73
|
-
};
|
|
74
|
-
return {
|
|
75
|
-
$$typeof: ELEMENT_TYPE,
|
|
76
|
-
type: Fragment,
|
|
77
|
-
props: { children: [out, portalVNode] }
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
function renderSyncComponentRoot(component, props, ctx) {
|
|
81
|
-
const wrapped = (p, c) => wrapWithDefaultPortal(component(p ?? {}, c));
|
|
82
|
-
return executeComponentSync(wrapped, props || {}, ctx);
|
|
83
|
-
}
|
|
84
|
-
//#endregion
|
|
85
|
-
export { disposeSSRTemporaryOwners, executeComponentSync, renderSyncComponentRoot };
|
package/dist/ssr/context.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { SSRData } from "../common/ssr.js";
|
|
2
|
-
import { Route, RouteAuthOptions } from "../common/router.js";
|
|
3
|
-
import { SSRDataMissingError } from "../common/ssr-errors.js";
|
|
4
|
-
//#region src/ssr/context.d.ts
|
|
5
|
-
interface RenderContext {
|
|
6
|
-
url: string;
|
|
7
|
-
seed: number;
|
|
8
|
-
data?: SSRData;
|
|
9
|
-
params?: Record<string, string>;
|
|
10
|
-
routes?: readonly Route[];
|
|
11
|
-
routeAuth?: RouteAuthOptions;
|
|
12
|
-
signal?: AbortSignal;
|
|
13
|
-
dataRuntime?: unknown;
|
|
14
|
-
queryCache?: Map<string, unknown>;
|
|
15
|
-
ssrCleanupFns: Array<() => void>;
|
|
16
|
-
keyCounter: number;
|
|
17
|
-
renderData: Record<string, unknown> | null;
|
|
18
|
-
}
|
|
19
|
-
type SSRContext = RenderContext;
|
|
20
|
-
declare function createRenderContext(seed?: number, opts?: {
|
|
21
|
-
url?: string;
|
|
22
|
-
data?: SSRData;
|
|
23
|
-
params?: Record<string, string>;
|
|
24
|
-
routes?: readonly Route[];
|
|
25
|
-
routeAuth?: RouteAuthOptions;
|
|
26
|
-
signal?: AbortSignal;
|
|
27
|
-
dataRuntime?: unknown;
|
|
28
|
-
}): RenderContext;
|
|
29
|
-
/**
|
|
30
|
-
* Run a function with the given render context.
|
|
31
|
-
* Concurrency-safe in Node.js via AsyncLocalStorage.
|
|
32
|
-
*/
|
|
33
|
-
declare function withRenderContext<T>(ctx: RenderContext, fn: () => T): T;
|
|
34
|
-
/**
|
|
35
|
-
* Get the current render context.
|
|
36
|
-
* Returns null if not inside a render.
|
|
37
|
-
*/
|
|
38
|
-
declare function getRenderContext(): RenderContext | null;
|
|
39
|
-
declare const getSSRContext: typeof getRenderContext;
|
|
40
|
-
declare const withSSRContext: typeof withRenderContext;
|
|
41
|
-
declare const getCurrentSSRContext: typeof getRenderContext;
|
|
42
|
-
declare function runWithSSRContext<T>(ctx: RenderContext, fn: () => T): T;
|
|
43
|
-
/**
|
|
44
|
-
* Centralized SSR enforcement helper — throws a consistent error when async
|
|
45
|
-
* data is encountered during synchronous SSR.
|
|
46
|
-
*/
|
|
47
|
-
declare function throwSSRDataMissing(): never;
|
|
48
|
-
//#endregion
|
|
49
|
-
export { RenderContext, type SSRData, SSRDataMissingError, getRenderContext, withRenderContext };
|