@askrjs/askr 0.0.51 → 0.0.52
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/dist/bench/components/benchmark-row.d.ts +2 -2
- package/dist/bench/components/benchmark-row.js +0 -2
- package/dist/bench/components/benchmark-table.js +0 -2
- package/dist/benchmark.d.ts +1 -2
- package/dist/benchmark.js +2 -4
- package/dist/bin/askr-ssg.d.ts +1 -2
- package/dist/bin/askr-ssg.js +21 -6
- package/dist/boot/hydration.js +10 -11
- package/dist/boot/index.d.ts +1 -2
- package/dist/boot/index.js +20 -11
- package/dist/boot/root-lifecycle.d.ts +6 -3
- package/dist/boot/root-lifecycle.js +14 -10
- package/dist/boot/route-startup.js +13 -4
- package/dist/boot/types.d.ts +1 -2
- package/dist/common/attr-names.js +0 -2
- package/dist/common/component.d.ts +1 -2
- package/dist/common/control.d.ts +1 -2
- package/dist/common/control.js +0 -2
- package/dist/common/dom-range.d.ts +13 -0
- package/dist/common/env.js +1 -7
- package/dist/common/error-boundary.d.ts +1 -2
- package/dist/common/invariant.js +0 -2
- package/dist/common/jsx.d.ts +1 -2
- package/dist/common/jsx.js +0 -2
- package/dist/common/logger.js +0 -2
- package/dist/common/promise.js +0 -2
- package/dist/common/props.d.ts +1 -2
- package/dist/common/render-context.js +0 -2
- package/dist/common/route-activity.js +0 -2
- package/dist/common/router-internal.js +0 -2
- package/dist/common/router.d.ts +1 -2
- package/dist/common/ssr-errors.d.ts +1 -2
- package/dist/common/ssr-errors.js +0 -2
- package/dist/common/ssr.d.ts +1 -2
- package/dist/common/ssr.js +0 -2
- package/dist/common/vnode.d.ts +1 -2
- package/dist/common/vnode.js +0 -2
- package/dist/components/error-boundary.d.ts +1 -2
- package/dist/components/error-boundary.js +0 -2
- package/dist/components/link.d.ts +2 -2
- package/dist/components/link.js +0 -2
- package/dist/control/case.d.ts +1 -2
- package/dist/control/case.js +0 -2
- package/dist/control/for.d.ts +1 -2
- package/dist/control/for.js +0 -2
- package/dist/control/shared.d.ts +1 -2
- package/dist/control/shared.js +0 -2
- package/dist/control/show.d.ts +1 -2
- package/dist/control/show.js +0 -2
- package/dist/data/data-runtime.d.ts +1 -2
- package/dist/data/data-runtime.js +3 -5
- package/dist/data/invalidation-listeners.js +0 -2
- package/dist/data/invalidation.d.ts +1 -2
- package/dist/data/invalidation.js +0 -2
- package/dist/data/mutation-cell.d.ts +1 -2
- package/dist/data/mutation-cell.js +6 -5
- package/dist/data/query-cell.d.ts +3 -2
- package/dist/data/query-cell.js +43 -9
- package/dist/data/query-key.js +0 -2
- package/dist/data/shared.js +2 -3
- package/dist/data/types.d.ts +1 -2
- package/dist/foundations/icon/icon.d.ts +1 -2
- package/dist/foundations/icon/icon.js +0 -2
- package/dist/foundations/icon/icon.types.d.ts +1 -2
- package/dist/foundations/interactions/dismissable.d.ts +1 -2
- package/dist/foundations/interactions/dismissable.js +0 -2
- package/dist/foundations/interactions/focusable.d.ts +1 -2
- package/dist/foundations/interactions/focusable.js +0 -2
- package/dist/foundations/interactions/hoverable.d.ts +1 -2
- package/dist/foundations/interactions/hoverable.js +0 -2
- package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
- package/dist/foundations/interactions/interaction-policy.js +0 -2
- package/dist/foundations/interactions/pressable.d.ts +1 -2
- package/dist/foundations/interactions/pressable.js +0 -2
- package/dist/foundations/interactions/roving-focus.d.ts +1 -2
- package/dist/foundations/interactions/roving-focus.js +0 -2
- package/dist/foundations/state/controllable.d.ts +1 -2
- package/dist/foundations/state/controllable.js +0 -2
- package/dist/foundations/structures/collection.d.ts +1 -2
- package/dist/foundations/structures/collection.js +0 -2
- package/dist/foundations/structures/layer.d.ts +1 -2
- package/dist/foundations/structures/layer.js +0 -2
- package/dist/foundations/structures/layout.d.ts +1 -2
- package/dist/foundations/structures/layout.js +0 -2
- package/dist/foundations/structures/presence.d.ts +1 -2
- package/dist/foundations/structures/presence.js +0 -2
- package/dist/foundations/structures/slot.d.ts +1 -2
- package/dist/foundations/structures/slot.js +0 -2
- package/dist/foundations/utilities/aria.d.ts +1 -2
- package/dist/foundations/utilities/aria.js +0 -2
- package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
- package/dist/foundations/utilities/compose-handlers.js +0 -2
- package/dist/foundations/utilities/compose-ref.d.ts +1 -2
- package/dist/foundations/utilities/compose-ref.js +0 -2
- package/dist/foundations/utilities/event-types.d.ts +1 -2
- package/dist/foundations/utilities/merge-props.d.ts +1 -2
- package/dist/foundations/utilities/merge-props.js +0 -2
- package/dist/foundations/utilities/use-id.d.ts +1 -2
- package/dist/foundations/utilities/use-id.js +0 -2
- package/dist/fx/fx.d.ts +1 -2
- package/dist/fx/fx.js +0 -2
- package/dist/fx/noop.js +0 -2
- package/dist/fx/timing.d.ts +1 -2
- package/dist/fx/timing.js +0 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -2
- package/dist/jsx/types.d.ts +1 -2
- package/dist/jsx/utils.d.ts +1 -2
- package/dist/jsx/utils.js +0 -2
- package/dist/jsx-dev-runtime.d.ts +16 -2
- package/dist/jsx-dev-runtime.js +3 -12
- package/dist/jsx-runtime.d.ts +16 -2
- package/dist/jsx-runtime.js +15 -24
- package/dist/jsx-runtime2.d.ts +1 -1
- package/dist/renderer/attributes.js +28 -6
- package/dist/renderer/boundaries.js +48 -172
- package/dist/renderer/boundary-materialization.js +72 -0
- package/dist/renderer/boundary-range-adoption.js +76 -0
- package/dist/renderer/boundary-range-sync.js +101 -0
- package/dist/renderer/boundary-state.js +50 -0
- package/dist/renderer/child-shape.js +0 -2
- package/dist/renderer/children-fastpath.js +3 -3
- package/dist/renderer/children.js +0 -2
- package/dist/renderer/cleanup.js +70 -13
- package/dist/renderer/component-host-cleanup.js +123 -48
- package/dist/renderer/component-host-instances.js +59 -8
- package/dist/renderer/component-host-replacement.js +105 -0
- package/dist/renderer/component-host-results.js +138 -0
- package/dist/renderer/component-host.js +94 -169
- package/dist/renderer/dom-host.js +0 -2
- package/dist/renderer/dom-internal.js +110 -53
- package/dist/renderer/dom-range.js +161 -0
- package/dist/renderer/dom.js +5 -4
- package/dist/renderer/element-children.js +112 -32
- package/dist/renderer/error-boundary-dom.js +19 -11
- package/dist/renderer/evaluate-dom-range.js +3 -4
- package/dist/renderer/evaluate-reconcile.js +12 -37
- package/dist/renderer/evaluate.js +14 -3
- package/dist/renderer/fastpath.js +4 -12
- package/dist/renderer/for-commit-dom-map.js +6 -18
- package/dist/renderer/for-commit-removal.js +7 -16
- package/dist/renderer/for-commit-reorder.js +0 -2
- package/dist/renderer/for-commit.js +172 -44
- package/dist/renderer/hydration-boundaries.js +60 -0
- package/dist/renderer/hydration-listener-transaction.js +49 -0
- package/dist/renderer/index.js +8 -7
- package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
- package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
- package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
- package/dist/renderer/intrinsic-blueprint.js +30 -0
- package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
- package/dist/renderer/keyed-children.js +3 -9
- package/dist/renderer/keyed.js +10 -10
- package/dist/renderer/namespaces.js +0 -2
- package/dist/renderer/prop-bindings.js +56 -21
- package/dist/renderer/reactive-child-dom.js +10 -4
- package/dist/renderer/reactive-child-sources.js +0 -2
- package/dist/renderer/reactive-children.js +29 -20
- package/dist/renderer/reconcile-commit.js +0 -2
- package/dist/renderer/reconcile-fastpaths.js +4 -11
- package/dist/renderer/reconcile-resolution.js +31 -55
- package/dist/renderer/reconcile.js +0 -2
- package/dist/renderer/retained-element-rollback.js +159 -148
- package/dist/renderer/stable-patch.js +3 -4
- package/dist/renderer/static-reuse.js +0 -2
- package/dist/renderer/utils.js +18 -9
- package/dist/router/access.js +0 -2
- package/dist/router/activity.d.ts +1 -2
- package/dist/router/activity.js +0 -2
- package/dist/router/authoring.d.ts +1 -2
- package/dist/router/authoring.js +0 -2
- package/dist/router/internal-types.d.ts +1 -2
- package/dist/router/lazy.d.ts +1 -2
- package/dist/router/lazy.js +0 -2
- package/dist/router/manifest.d.ts +1 -2
- package/dist/router/manifest.js +0 -2
- package/dist/router/match.js +0 -2
- package/dist/router/navigate.d.ts +1 -2
- package/dist/router/navigate.js +4 -7
- package/dist/router/navigation-registry.d.ts +1 -2
- package/dist/router/navigation-registry.js +0 -2
- package/dist/router/navigation-scroll.d.ts +1 -2
- package/dist/router/navigation-scroll.js +0 -2
- package/dist/router/navigation-targets.d.ts +3 -4
- package/dist/router/navigation-targets.js +419 -40
- package/dist/router/policy.d.ts +1 -2
- package/dist/router/policy.js +0 -2
- package/dist/router/rendering.d.ts +1 -2
- package/dist/router/rendering.js +4 -3
- package/dist/router/resolution.d.ts +1 -2
- package/dist/router/resolution.js +0 -2
- package/dist/router/route-context.js +0 -2
- package/dist/router/route-matching.d.ts +1 -2
- package/dist/router/route-matching.js +0 -2
- package/dist/router/route-query.d.ts +1 -2
- package/dist/router/route-query.js +1 -3
- package/dist/router/store.d.ts +1 -2
- package/dist/router/store.js +0 -2
- package/dist/runtime/access.d.ts +1 -2
- package/dist/runtime/access.js +0 -2
- package/dist/runtime/child-scope.d.ts +21 -2
- package/dist/runtime/child-scope.js +101 -54
- package/dist/runtime/component-cleanup.d.ts +1 -2
- package/dist/runtime/component-cleanup.js +2 -4
- package/dist/runtime/component-commit.js +25 -23
- package/dist/runtime/component-facade.js +5 -3
- package/dist/runtime/component-internal.d.ts +11 -6
- package/dist/runtime/component-internal.js +63 -45
- package/dist/runtime/component-lifecycle.d.ts +2 -41
- package/dist/runtime/component-lifecycle.js +6 -149
- package/dist/runtime/component-scope.d.ts +3 -4
- package/dist/runtime/component-scope.js +27 -8
- package/dist/runtime/component.js +4 -3
- package/dist/runtime/context.d.ts +5 -2
- package/dist/runtime/context.js +29 -3
- package/dist/runtime/control.d.ts +22 -3
- package/dist/runtime/control.js +168 -55
- package/dist/runtime/derive.d.ts +1 -2
- package/dist/runtime/derive.js +0 -2
- package/dist/runtime/dev-namespace.d.ts +5 -6
- package/dist/runtime/dev-namespace.js +32 -25
- package/dist/runtime/effect.d.ts +8 -5
- package/dist/runtime/effect.js +158 -75
- package/dist/runtime/error-boundary.d.ts +1 -2
- package/dist/runtime/error-boundary.js +0 -2
- package/dist/runtime/events.d.ts +3 -3
- package/dist/runtime/events.js +66 -69
- package/dist/runtime/execution-model.d.ts +1 -2
- package/dist/runtime/execution-model.js +0 -2
- package/dist/runtime/fastlane.d.ts +1 -2
- package/dist/runtime/fastlane.js +0 -2
- package/dist/runtime/for-bench.d.ts +1 -2
- package/dist/runtime/for-bench.js +9 -167
- package/dist/runtime/for-internal.d.ts +68 -5
- package/dist/runtime/for-internal.js +201 -14
- package/dist/runtime/for-reconcile.d.ts +1 -2
- package/dist/runtime/for-reconcile.js +76 -23
- package/dist/runtime/for-scopes.d.ts +5 -5
- package/dist/runtime/for-scopes.js +168 -48
- package/dist/runtime/for-signals.d.ts +13 -4
- package/dist/runtime/for-signals.js +155 -81
- package/dist/runtime/for-types.d.ts +1 -2
- package/dist/runtime/for.d.ts +2 -2
- package/dist/runtime/for.js +3 -3
- package/dist/runtime/index.d.ts +5 -5
- package/dist/runtime/index.js +12 -10
- package/dist/runtime/lifecycle-batch.d.ts +59 -0
- package/dist/runtime/lifecycle-batch.js +178 -0
- package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
- package/dist/runtime/lifecycle-operation-settlement.js +51 -0
- package/dist/runtime/lifecycle-operations.d.ts +1 -2
- package/dist/runtime/lifecycle-operations.js +5 -6
- package/dist/runtime/perf-metrics.d.ts +8 -7
- package/dist/runtime/perf-metrics.js +4 -68
- package/dist/runtime/portal.d.ts +1 -2
- package/dist/runtime/portal.js +103 -11
- package/dist/runtime/readable.d.ts +9 -4
- package/dist/runtime/readable.js +41 -17
- package/dist/runtime/resource-cell.js +2 -4
- package/dist/runtime/resource-operation.d.ts +1 -2
- package/dist/runtime/resource-operation.js +37 -34
- package/dist/runtime/runtime.d.ts +1 -2
- package/dist/runtime/runtime.js +0 -2
- package/dist/runtime/scheduler.d.ts +1 -2
- package/dist/runtime/scheduler.js +8 -11
- package/dist/runtime/selector-store.js +0 -2
- package/dist/runtime/selector.d.ts +1 -2
- package/dist/runtime/selector.js +3 -11
- package/dist/runtime/snapshot-source.d.ts +1 -2
- package/dist/runtime/snapshot-source.js +0 -2
- package/dist/runtime/state.d.ts +1 -2
- package/dist/runtime/state.js +1 -3
- package/dist/ssg/batch-render.js +0 -2
- package/dist/ssg/create-static-gen.d.ts +4 -2
- package/dist/ssg/create-static-gen.js +65 -14
- package/dist/ssg/generate-metadata.js +0 -2
- package/dist/ssg/generation-plan.js +0 -2
- package/dist/ssg/incremental-manifest.js +1 -3
- package/dist/ssg/resolve-ssg-data.js +0 -2
- package/dist/ssg/route-utils.js +0 -2
- package/dist/ssg/static-routes.js +0 -2
- package/dist/ssg/types.d.ts +2 -3
- package/dist/ssg/write-static-files.js +16 -12
- package/dist/ssr/attrs.js +0 -2
- package/dist/ssr/boundaries.js +16 -5
- package/dist/ssr/component-runtime.js +1 -27
- package/dist/ssr/context.d.ts +1 -2
- package/dist/ssr/context.js +0 -2
- package/dist/ssr/errors.d.ts +1 -2
- package/dist/ssr/errors.js +0 -2
- package/dist/ssr/escape.js +0 -2
- package/dist/ssr/hydration-data.js +0 -2
- package/dist/ssr/hydration-verify.d.ts +1 -2
- package/dist/ssr/hydration-verify.js +34 -7
- package/dist/ssr/index-internal.d.ts +1 -2
- package/dist/ssr/index-internal.js +0 -2
- package/dist/ssr/render-keys.js +0 -2
- package/dist/ssr/render-resolved.d.ts +1 -2
- package/dist/ssr/render-resolved.js +0 -2
- package/dist/ssr/render-sync.d.ts +1 -2
- package/dist/ssr/render-sync.js +27 -19
- package/dist/ssr/route-policy-resolution.js +0 -2
- package/dist/ssr/route-render.d.ts +1 -2
- package/dist/ssr/route-render.js +0 -2
- package/dist/ssr/sink.d.ts +1 -2
- package/dist/ssr/sink.js +0 -2
- package/dist/ssr/types.d.ts +1 -2
- package/dist/ssr/verify-hydration.js +0 -2
- package/dist/testing/index.d.ts +1 -2
- package/dist/testing/index.js +0 -2
- package/package.json +57 -44
- package/dist/bench/components/benchmark-row.d.ts.map +0 -1
- package/dist/bench/components/benchmark-row.js.map +0 -1
- package/dist/bench/components/benchmark-table.js.map +0 -1
- package/dist/benchmark.d.ts.map +0 -1
- package/dist/benchmark.js.map +0 -1
- package/dist/bin/askr-ssg.d.ts.map +0 -1
- package/dist/bin/askr-ssg.js.map +0 -1
- package/dist/boot/hydration.js.map +0 -1
- package/dist/boot/index.d.ts.map +0 -1
- package/dist/boot/index.js.map +0 -1
- package/dist/boot/root-lifecycle.d.ts.map +0 -1
- package/dist/boot/root-lifecycle.js.map +0 -1
- package/dist/boot/route-startup.js.map +0 -1
- package/dist/boot/types.d.ts.map +0 -1
- package/dist/common/attr-names.js.map +0 -1
- package/dist/common/component.d.ts.map +0 -1
- package/dist/common/control.d.ts.map +0 -1
- package/dist/common/control.js.map +0 -1
- package/dist/common/env.js.map +0 -1
- package/dist/common/error-boundary.d.ts.map +0 -1
- package/dist/common/invariant.js.map +0 -1
- package/dist/common/jsx.d.ts.map +0 -1
- package/dist/common/jsx.js.map +0 -1
- package/dist/common/logger.js.map +0 -1
- package/dist/common/promise.js.map +0 -1
- package/dist/common/props.d.ts.map +0 -1
- package/dist/common/render-context.js.map +0 -1
- package/dist/common/route-activity.js.map +0 -1
- package/dist/common/router-internal.js.map +0 -1
- package/dist/common/router.d.ts.map +0 -1
- package/dist/common/ssr-errors.d.ts.map +0 -1
- package/dist/common/ssr-errors.js.map +0 -1
- package/dist/common/ssr.d.ts.map +0 -1
- package/dist/common/ssr.js.map +0 -1
- package/dist/common/vnode.d.ts.map +0 -1
- package/dist/common/vnode.js.map +0 -1
- package/dist/components/error-boundary.d.ts.map +0 -1
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/link.d.ts.map +0 -1
- package/dist/components/link.js.map +0 -1
- package/dist/control/case.d.ts.map +0 -1
- package/dist/control/case.js.map +0 -1
- package/dist/control/for.d.ts.map +0 -1
- package/dist/control/for.js.map +0 -1
- package/dist/control/shared.d.ts.map +0 -1
- package/dist/control/shared.js.map +0 -1
- package/dist/control/show.d.ts.map +0 -1
- package/dist/control/show.js.map +0 -1
- package/dist/data/data-runtime.d.ts.map +0 -1
- package/dist/data/data-runtime.js.map +0 -1
- package/dist/data/invalidation-listeners.js.map +0 -1
- package/dist/data/invalidation.d.ts.map +0 -1
- package/dist/data/invalidation.js.map +0 -1
- package/dist/data/mutation-cell.d.ts.map +0 -1
- package/dist/data/mutation-cell.js.map +0 -1
- package/dist/data/query-cell.d.ts.map +0 -1
- package/dist/data/query-cell.js.map +0 -1
- package/dist/data/query-key.js.map +0 -1
- package/dist/data/shared.js.map +0 -1
- package/dist/data/types.d.ts.map +0 -1
- package/dist/foundations/icon/icon.d.ts.map +0 -1
- package/dist/foundations/icon/icon.js.map +0 -1
- package/dist/foundations/icon/icon.types.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.js.map +0 -1
- package/dist/foundations/interactions/focusable.d.ts.map +0 -1
- package/dist/foundations/interactions/focusable.js.map +0 -1
- package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
- package/dist/foundations/interactions/hoverable.js.map +0 -1
- package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
- package/dist/foundations/interactions/interaction-policy.js.map +0 -1
- package/dist/foundations/interactions/pressable.d.ts.map +0 -1
- package/dist/foundations/interactions/pressable.js.map +0 -1
- package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
- package/dist/foundations/interactions/roving-focus.js.map +0 -1
- package/dist/foundations/state/controllable.d.ts.map +0 -1
- package/dist/foundations/state/controllable.js.map +0 -1
- package/dist/foundations/structures/collection.d.ts.map +0 -1
- package/dist/foundations/structures/collection.js.map +0 -1
- package/dist/foundations/structures/layer.d.ts.map +0 -1
- package/dist/foundations/structures/layer.js.map +0 -1
- package/dist/foundations/structures/layout.d.ts.map +0 -1
- package/dist/foundations/structures/layout.js.map +0 -1
- package/dist/foundations/structures/presence.d.ts.map +0 -1
- package/dist/foundations/structures/presence.js.map +0 -1
- package/dist/foundations/structures/slot.d.ts.map +0 -1
- package/dist/foundations/structures/slot.js.map +0 -1
- package/dist/foundations/utilities/aria.d.ts.map +0 -1
- package/dist/foundations/utilities/aria.js.map +0 -1
- package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
- package/dist/foundations/utilities/compose-handlers.js.map +0 -1
- package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
- package/dist/foundations/utilities/compose-ref.js.map +0 -1
- package/dist/foundations/utilities/event-types.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.js.map +0 -1
- package/dist/foundations/utilities/use-id.d.ts.map +0 -1
- package/dist/foundations/utilities/use-id.js.map +0 -1
- package/dist/fx/fx.d.ts.map +0 -1
- package/dist/fx/fx.js.map +0 -1
- package/dist/fx/noop.js.map +0 -1
- package/dist/fx/timing.d.ts.map +0 -1
- package/dist/fx/timing.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsx/types.d.ts.map +0 -1
- package/dist/jsx/utils.d.ts.map +0 -1
- package/dist/jsx/utils.js.map +0 -1
- package/dist/jsx-dev-runtime.d.ts.map +0 -1
- package/dist/jsx-dev-runtime.js.map +0 -1
- package/dist/jsx-runtime.d.ts.map +0 -1
- package/dist/jsx-runtime.js.map +0 -1
- package/dist/renderer/attributes.js.map +0 -1
- package/dist/renderer/boundaries.js.map +0 -1
- package/dist/renderer/child-shape.js.map +0 -1
- package/dist/renderer/children-fastpath.js.map +0 -1
- package/dist/renderer/children.js.map +0 -1
- package/dist/renderer/cleanup.js.map +0 -1
- package/dist/renderer/component-host-cleanup.js.map +0 -1
- package/dist/renderer/component-host-instances.js.map +0 -1
- package/dist/renderer/component-host.js.map +0 -1
- package/dist/renderer/dom-host.js.map +0 -1
- package/dist/renderer/dom-internal.js.map +0 -1
- package/dist/renderer/element-children.js.map +0 -1
- package/dist/renderer/error-boundary-dom.js.map +0 -1
- package/dist/renderer/evaluate-dom-range.js.map +0 -1
- package/dist/renderer/evaluate-reconcile.js.map +0 -1
- package/dist/renderer/evaluate.js.map +0 -1
- package/dist/renderer/fastpath.js.map +0 -1
- package/dist/renderer/for-commit-dom-map.js.map +0 -1
- package/dist/renderer/for-commit-removal.js.map +0 -1
- package/dist/renderer/for-commit-reorder.js.map +0 -1
- package/dist/renderer/for-commit.js.map +0 -1
- package/dist/renderer/index.js.map +0 -1
- package/dist/renderer/keyed-children.js.map +0 -1
- package/dist/renderer/keyed.js.map +0 -1
- package/dist/renderer/namespaces.js.map +0 -1
- package/dist/renderer/prop-bindings.js.map +0 -1
- package/dist/renderer/reactive-child-dom.js.map +0 -1
- package/dist/renderer/reactive-child-sources.js.map +0 -1
- package/dist/renderer/reactive-children.js.map +0 -1
- package/dist/renderer/reconcile-commit.js.map +0 -1
- package/dist/renderer/reconcile-fastpaths.js.map +0 -1
- package/dist/renderer/reconcile-resolution.js.map +0 -1
- package/dist/renderer/reconcile.js.map +0 -1
- package/dist/renderer/retained-element-rollback.js.map +0 -1
- package/dist/renderer/stable-patch.js.map +0 -1
- package/dist/renderer/static-reuse.js.map +0 -1
- package/dist/renderer/utils.js.map +0 -1
- package/dist/router/access.js.map +0 -1
- package/dist/router/activity.d.ts.map +0 -1
- package/dist/router/activity.js.map +0 -1
- package/dist/router/authoring.d.ts.map +0 -1
- package/dist/router/authoring.js.map +0 -1
- package/dist/router/internal-types.d.ts.map +0 -1
- package/dist/router/lazy.d.ts.map +0 -1
- package/dist/router/lazy.js.map +0 -1
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match.js.map +0 -1
- package/dist/router/navigate.d.ts.map +0 -1
- package/dist/router/navigate.js.map +0 -1
- package/dist/router/navigation-registry.d.ts.map +0 -1
- package/dist/router/navigation-registry.js.map +0 -1
- package/dist/router/navigation-scroll.d.ts.map +0 -1
- package/dist/router/navigation-scroll.js.map +0 -1
- package/dist/router/navigation-targets.d.ts.map +0 -1
- package/dist/router/navigation-targets.js.map +0 -1
- package/dist/router/policy.d.ts.map +0 -1
- package/dist/router/policy.js.map +0 -1
- package/dist/router/rendering.d.ts.map +0 -1
- package/dist/router/rendering.js.map +0 -1
- package/dist/router/resolution.d.ts.map +0 -1
- package/dist/router/resolution.js.map +0 -1
- package/dist/router/route-context.js.map +0 -1
- package/dist/router/route-matching.d.ts.map +0 -1
- package/dist/router/route-matching.js.map +0 -1
- package/dist/router/route-query.d.ts.map +0 -1
- package/dist/router/route-query.js.map +0 -1
- package/dist/router/store.d.ts.map +0 -1
- package/dist/router/store.js.map +0 -1
- package/dist/runtime/access.d.ts.map +0 -1
- package/dist/runtime/access.js.map +0 -1
- package/dist/runtime/child-scope.d.ts.map +0 -1
- package/dist/runtime/child-scope.js.map +0 -1
- package/dist/runtime/component-cleanup.d.ts.map +0 -1
- package/dist/runtime/component-cleanup.js.map +0 -1
- package/dist/runtime/component-commit.js.map +0 -1
- package/dist/runtime/component-internal.d.ts.map +0 -1
- package/dist/runtime/component-internal.js.map +0 -1
- package/dist/runtime/component-lifecycle.d.ts.map +0 -1
- package/dist/runtime/component-lifecycle.js.map +0 -1
- package/dist/runtime/component-scope.d.ts.map +0 -1
- package/dist/runtime/component-scope.js.map +0 -1
- package/dist/runtime/context.d.ts.map +0 -1
- package/dist/runtime/context.js.map +0 -1
- package/dist/runtime/control.d.ts.map +0 -1
- package/dist/runtime/control.js.map +0 -1
- package/dist/runtime/derive.d.ts.map +0 -1
- package/dist/runtime/derive.js.map +0 -1
- package/dist/runtime/dev-namespace.d.ts.map +0 -1
- package/dist/runtime/dev-namespace.js.map +0 -1
- package/dist/runtime/effect.d.ts.map +0 -1
- package/dist/runtime/effect.js.map +0 -1
- package/dist/runtime/error-boundary.d.ts.map +0 -1
- package/dist/runtime/error-boundary.js.map +0 -1
- package/dist/runtime/events.d.ts.map +0 -1
- package/dist/runtime/events.js.map +0 -1
- package/dist/runtime/execution-model.d.ts.map +0 -1
- package/dist/runtime/execution-model.js.map +0 -1
- package/dist/runtime/fastlane.d.ts.map +0 -1
- package/dist/runtime/fastlane.js.map +0 -1
- package/dist/runtime/for-bench.d.ts.map +0 -1
- package/dist/runtime/for-bench.js.map +0 -1
- package/dist/runtime/for-internal.d.ts.map +0 -1
- package/dist/runtime/for-internal.js.map +0 -1
- package/dist/runtime/for-reconcile.d.ts.map +0 -1
- package/dist/runtime/for-reconcile.js.map +0 -1
- package/dist/runtime/for-scopes.d.ts.map +0 -1
- package/dist/runtime/for-scopes.js.map +0 -1
- package/dist/runtime/for-signals.d.ts.map +0 -1
- package/dist/runtime/for-signals.js.map +0 -1
- package/dist/runtime/for-types.d.ts.map +0 -1
- package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
- package/dist/runtime/lifecycle-operations.js.map +0 -1
- package/dist/runtime/perf-metrics.d.ts.map +0 -1
- package/dist/runtime/perf-metrics.js.map +0 -1
- package/dist/runtime/portal.d.ts.map +0 -1
- package/dist/runtime/portal.js.map +0 -1
- package/dist/runtime/readable.d.ts.map +0 -1
- package/dist/runtime/readable.js.map +0 -1
- package/dist/runtime/resource-cell.js.map +0 -1
- package/dist/runtime/resource-operation.d.ts.map +0 -1
- package/dist/runtime/resource-operation.js.map +0 -1
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/runtime/scheduler.d.ts.map +0 -1
- package/dist/runtime/scheduler.js.map +0 -1
- package/dist/runtime/selector-store.js.map +0 -1
- package/dist/runtime/selector.d.ts.map +0 -1
- package/dist/runtime/selector.js.map +0 -1
- package/dist/runtime/snapshot-source.d.ts.map +0 -1
- package/dist/runtime/snapshot-source.js.map +0 -1
- package/dist/runtime/state.d.ts.map +0 -1
- package/dist/runtime/state.js.map +0 -1
- package/dist/ssg/batch-render.js.map +0 -1
- package/dist/ssg/create-static-gen.d.ts.map +0 -1
- package/dist/ssg/create-static-gen.js.map +0 -1
- package/dist/ssg/generate-metadata.js.map +0 -1
- package/dist/ssg/generation-plan.js.map +0 -1
- package/dist/ssg/incremental-manifest.js.map +0 -1
- package/dist/ssg/resolve-ssg-data.js.map +0 -1
- package/dist/ssg/route-utils.js.map +0 -1
- package/dist/ssg/static-routes.js.map +0 -1
- package/dist/ssg/types.d.ts.map +0 -1
- package/dist/ssg/write-static-files.js.map +0 -1
- package/dist/ssr/attrs.js.map +0 -1
- package/dist/ssr/boundaries.js.map +0 -1
- package/dist/ssr/component-runtime.js.map +0 -1
- package/dist/ssr/context.d.ts.map +0 -1
- package/dist/ssr/context.js.map +0 -1
- package/dist/ssr/errors.d.ts.map +0 -1
- package/dist/ssr/errors.js.map +0 -1
- package/dist/ssr/escape.js.map +0 -1
- package/dist/ssr/hydration-data.js.map +0 -1
- package/dist/ssr/hydration-verify.d.ts.map +0 -1
- package/dist/ssr/hydration-verify.js.map +0 -1
- package/dist/ssr/index-internal.d.ts.map +0 -1
- package/dist/ssr/index-internal.js.map +0 -1
- package/dist/ssr/render-keys.js.map +0 -1
- package/dist/ssr/render-resolved.d.ts.map +0 -1
- package/dist/ssr/render-resolved.js.map +0 -1
- package/dist/ssr/render-sync.d.ts.map +0 -1
- package/dist/ssr/render-sync.js.map +0 -1
- package/dist/ssr/route-policy-resolution.js.map +0 -1
- package/dist/ssr/route-render.d.ts.map +0 -1
- package/dist/ssr/route-render.js.map +0 -1
- package/dist/ssr/sink.d.ts.map +0 -1
- package/dist/ssr/sink.js.map +0 -1
- package/dist/ssr/types.d.ts.map +0 -1
- package/dist/ssr/verify-hydration.js.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","names":[],"sources":["../../src/router/policy.ts"],"sourcesContent":["import type {\n AccessDecision,\n AccessAllowDecision,\n AccessDenyDecision,\n AccessDenyStatus,\n AccessRedirectDecision,\n AccessRedirectStatus,\n RouteAuthOptions,\n RouteContext,\n RoutePolicy,\n} from '../common/router';\nimport { isPromiseLike } from '../common/promise';\n\nconst ROUTE_AUTH_OPTIONS = Symbol.for('__ASKR_ROUTE_AUTH_OPTIONS__');\nconst BUILT_IN_ROUTE_POLICY = Symbol.for('__ASKR_BUILT_IN_ROUTE_POLICY__');\n\ntype InternalRouteContext = RouteContext & {\n [ROUTE_AUTH_OPTIONS]?: RouteAuthOptions;\n};\n\nexport type BuiltInRoutePolicyKind = 'auth' | 'guest' | 'role' | 'permission';\n\nexport interface BuiltInRoutePolicyMetadata {\n kind: BuiltInRoutePolicyKind;\n value?: string;\n}\n\ntype InternalRoutePolicy = RoutePolicy & {\n [BUILT_IN_ROUTE_POLICY]?: BuiltInRoutePolicyMetadata;\n};\n\ntype RoutePathResolver =\n | string\n | ((context: RouteContext) => string | PromiseLike<string>);\n\nexport function allow(): AccessAllowDecision {\n return { kind: 'allow' };\n}\n\nexport function redirect(\n to: string,\n init: {\n status?: AccessRedirectStatus;\n replace?: boolean;\n } = {}\n): AccessRedirectDecision {\n return {\n kind: 'redirect',\n to,\n ...(init.status ? { status: init.status } : {}),\n ...(init.replace !== undefined ? { replace: init.replace } : {}),\n };\n}\n\nexport function deny(status: AccessDenyStatus): AccessDenyDecision {\n return { kind: 'deny', status };\n}\n\nexport function unauthorized(): AccessDenyDecision {\n return deny(401);\n}\n\nexport function forbidden(): AccessDenyDecision {\n return deny(403);\n}\n\nexport function notFound(): AccessDenyDecision {\n return deny(404);\n}\n\nexport function normalizeAccessDecision(\n result: AccessDecision\n): AccessDecision {\n return result;\n}\n\nexport function withRouteAuthOptions(\n context: RouteContext,\n auth: RouteAuthOptions | undefined\n): RouteContext {\n const internal = context as InternalRouteContext;\n\n if (!auth) {\n delete internal[ROUTE_AUTH_OPTIONS];\n return context;\n }\n\n internal[ROUTE_AUTH_OPTIONS] = auth;\n return context;\n}\n\nfunction getRouteAuthOptions(\n context: RouteContext\n): RouteAuthOptions | undefined {\n return (context as InternalRouteContext)[ROUTE_AUTH_OPTIONS];\n}\n\nfunction assertRouteAuthOptions(context: RouteContext): RouteAuthOptions {\n const auth = getRouteAuthOptions(context);\n if (!auth?.resolve) {\n throw new Error(\n 'Built-in auth policies require router auth configuration. ' +\n 'Provide `auth` to registerRoutes(...), createSPA(...), hydrateSPA(...), or SSR route resolution.'\n );\n }\n\n return auth;\n}\n\nfunction markBuiltInRoutePolicy(\n policy: RoutePolicy,\n metadata: BuiltInRoutePolicyMetadata\n): RoutePolicy {\n Object.defineProperty(policy, BUILT_IN_ROUTE_POLICY, {\n value: Object.freeze({ ...metadata }),\n enumerable: false,\n configurable: false,\n });\n return policy;\n}\n\nexport function _getBuiltInRoutePolicy(\n policy: RoutePolicy\n): BuiltInRoutePolicyMetadata | null {\n return (policy as InternalRoutePolicy)[BUILT_IN_ROUTE_POLICY] ?? null;\n}\n\nfunction resolvePathSetting(\n value: RoutePathResolver | undefined,\n fallback: string,\n context: RouteContext\n): string | PromiseLike<string> {\n if (!value) {\n return fallback;\n }\n\n if (typeof value === 'function') {\n return value(context);\n }\n\n return value;\n}\n\nfunction appendNextTarget(path: string, href: string): string {\n const resolved = new URL(path, 'http://localhost');\n resolved.searchParams.set('next', href);\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction collectStringValues(value: unknown): string[] {\n if (typeof value === 'string') {\n return [value];\n }\n\n if (Array.isArray(value)) {\n return value.filter((entry): entry is string => typeof entry === 'string');\n }\n\n if (value instanceof Set) {\n return Array.from(value).filter(\n (entry): entry is string => typeof entry === 'string'\n );\n }\n\n return [];\n}\n\nfunction defaultHasRole(user: unknown, role: string): boolean {\n if (!user || typeof user !== 'object') {\n return false;\n }\n\n return collectStringValues((user as { roles?: unknown }).roles).includes(\n role\n );\n}\n\nfunction defaultHasPermission(user: unknown, permission: string): boolean {\n if (!user || typeof user !== 'object') {\n return false;\n }\n\n return collectStringValues(\n (user as { permissions?: unknown }).permissions\n ).includes(permission);\n}\n\nfunction resolveUnauthenticatedRedirect(\n context: RouteContext\n): AccessDecision | Promise<AccessDecision> {\n const auth = assertRouteAuthOptions(context);\n const loginPath = resolvePathSetting(auth.loginPath, '/login', context);\n if (isPromiseLike<string>(loginPath)) {\n return Promise.resolve(loginPath).then((nextPath) =>\n redirect(appendNextTarget(nextPath, context.href), {\n replace: context.mode === 'spa',\n })\n );\n }\n\n return redirect(appendNextTarget(loginPath, context.href), {\n replace: context.mode === 'spa',\n });\n}\n\nfunction resolveAuthenticatedRedirect(\n context: RouteContext\n): AccessDecision | Promise<AccessDecision> {\n const auth = assertRouteAuthOptions(context);\n const target = resolvePathSetting(auth.guestRedirectTo, '/', context);\n if (isPromiseLike<string>(target)) {\n return Promise.resolve(target).then((nextTarget) =>\n redirect(nextTarget, {\n replace: true,\n })\n );\n }\n\n return redirect(target, {\n replace: true,\n });\n}\n\nexport function requireAuth(): RoutePolicy {\n return markBuiltInRoutePolicy(\n (context) => {\n if (context.session) {\n return allow();\n }\n\n return resolveUnauthenticatedRedirect(context);\n },\n { kind: 'auth' }\n );\n}\n\nexport function requireGuest(): RoutePolicy {\n return markBuiltInRoutePolicy(\n (context) => {\n if (!context.session) {\n return allow();\n }\n\n return resolveAuthenticatedRedirect(context);\n },\n { kind: 'guest' }\n );\n}\n\nexport function requireRole(role: string): RoutePolicy {\n return markBuiltInRoutePolicy(\n (context) => {\n if (!context.user) {\n return resolveUnauthenticatedRedirect(context);\n }\n\n const auth = assertRouteAuthOptions(context);\n const hasRole = auth.hasRole\n ? auth.hasRole(context.user, role, context)\n : defaultHasRole(context.user, role);\n\n if (isPromiseLike<boolean>(hasRole)) {\n return Promise.resolve(hasRole).then((next) =>\n next ? allow() : forbidden()\n );\n }\n\n return hasRole ? allow() : forbidden();\n },\n { kind: 'role', value: role }\n );\n}\n\nexport function requirePermission(permission: string): RoutePolicy {\n return markBuiltInRoutePolicy(\n (context) => {\n if (!context.user) {\n return resolveUnauthenticatedRedirect(context);\n }\n\n const auth = assertRouteAuthOptions(context);\n const hasPermission = auth.hasPermission\n ? auth.hasPermission(context.user, permission, context)\n : defaultHasPermission(context.user, permission);\n\n if (isPromiseLike<boolean>(hasPermission)) {\n return Promise.resolve(hasPermission).then((next) =>\n next ? allow() : forbidden()\n );\n }\n\n return hasPermission ? allow() : forbidden();\n },\n { kind: 'permission', value: permission }\n );\n}\n\nexport async function evaluateRoutePolicy(\n policy: RoutePolicy,\n context: RouteContext\n): Promise<AccessDecision> {\n const result = await policy(context);\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rendering.d.ts","names":[],"sources":["../../src/router/rendering.ts"],"mappings":";;;;iBAegB,MAAA,IAAU,UAAU;AAAA,iBA2CpB,kBAAA,CACd,SAAA,EAAW,cAAA,EACX,SAAA,WAAoB,eAAA,IACpB,WAAA,WAAsB,iBAAA,IACtB,eAAA,aACC,YAAA;AAAA,iBAgBa,gBAAA,CAAiB,MAAA,EAAQ,WAAA,GAAc,YAAY"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rendering.js","names":[],"sources":["../../src/router/rendering.ts"],"sourcesContent":["import { ELEMENT_TYPE, Fragment, type JSXElement } from '../common/jsx';\nimport type {\n LayoutScopeRecord,\n PageScopeRecord,\n RouteComponent,\n RouteHandler,\n RouteRecord,\n} from '../common/router';\nimport { ROUTE_ROOT_COMPONENT } from '../common/router-internal';\nimport type { RenderableChild } from '../common/vnode';\nimport { defineContext, readContext } from '../runtime';\nimport type { InternalRouteRecord } from './internal-types';\n\nconst outletContext = defineContext<RenderableChild>(null);\n\nexport function Outlet(): JSXElement {\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: { children: readContext(outletContext) },\n key: null,\n };\n}\n\nfunction applyPageChain(\n pageChain: readonly PageScopeRecord[],\n params: Record<string, string>,\n content: RenderableChild,\n deferComponents = false\n): RenderableChild {\n let nextContent = content;\n\n for (let i = pageChain.length - 1; i >= 0; i--) {\n nextContent = outletContext.Scope({\n value: nextContent,\n children: deferComponents\n ? createRouteComponentVNode(pageChain[i].component, params)\n : pageChain[i].component(params),\n });\n }\n\n return nextContent;\n}\n\nfunction createRouteComponentVNode(\n component: RouteComponent,\n params: Record<string, string>,\n routeRoot = false\n): RenderableChild {\n return {\n $$typeof: ELEMENT_TYPE,\n type: component,\n props: params,\n key: null,\n ...(routeRoot ? { [ROUTE_ROOT_COMPONENT]: true } : {}),\n };\n}\n\nexport function createRouteHandler(\n component: RouteComponent,\n pageChain: readonly PageScopeRecord[],\n layoutChain: readonly LayoutScopeRecord[],\n deferComponents = false\n): RouteHandler {\n return (params) => {\n let content = deferComponents\n ? createRouteComponentVNode(component, params, true)\n : component(params);\n\n content = applyPageChain(pageChain, params, content, deferComponents);\n\n for (let i = layoutChain.length - 1; i >= 0; i--) {\n content = layoutChain[i].component({ children: content });\n }\n\n return content;\n };\n}\n\nexport function getRenderHandler(record: RouteRecord): RouteHandler {\n const internalRecord = record as InternalRouteRecord;\n return (\n internalRecord.renderHandler ??\n createRouteHandler(\n record.component,\n record.pageChain,\n record.layoutChain,\n true\n )\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,gBAAgB,cAA+B,IAAI;AAEzD,SAAgB,SAAqB;CACnC,OAAO;EACL,UAAU;EACV,MAAM;EACN,OAAO,EAAE,UAAU,YAAY,aAAa,EAAE;EAC9C,KAAK;CACP;AACF;AAEA,SAAS,eACP,WACA,QACA,SACA,kBAAkB,OACD;CACjB,IAAI,cAAc;CAElB,KAAK,IAAI,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,KACzC,cAAc,cAAc,MAAM;EAChC,OAAO;EACP,UAAU,kBACN,0BAA0B,UAAU,EAAE,CAAC,WAAW,MAAM,IACxD,UAAU,EAAE,CAAC,UAAU,MAAM;CACnC,CAAC;CAGH,OAAO;AACT;AAEA,SAAS,0BACP,WACA,QACA,YAAY,OACK;CACjB,OAAO;EACL,UAAU;EACV,MAAM;EACN,OAAO;EACP,KAAK;EACL,GAAI,YAAY,GAAG,uBAAuB,KAAK,IAAI,CAAC;CACtD;AACF;AAEA,SAAgB,mBACd,WACA,WACA,aACA,kBAAkB,OACJ;CACd,QAAQ,WAAW;EACjB,IAAI,UAAU,kBACV,0BAA0B,WAAW,QAAQ,IAAI,IACjD,UAAU,MAAM;EAEpB,UAAU,eAAe,WAAW,QAAQ,SAAS,eAAe;EAEpE,KAAK,IAAI,IAAI,YAAY,SAAS,GAAG,KAAK,GAAG,KAC3C,UAAU,YAAY,EAAE,CAAC,UAAU,EAAE,UAAU,QAAQ,CAAC;EAG1D,OAAO;CACT;AACF;AAEA,SAAgB,iBAAiB,QAAmC;CAElE,OACE,OAAe,iBACf,mBACE,OAAO,WACP,OAAO,WACP,OAAO,aACP,IACF;AAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolution.d.ts","names":[],"sources":["../../src/router/resolution.ts"],"mappings":";;iBAiIgB,mBAAA,CACd,MAAA,UACA,OAAA,GAAS,mBAAA,GACR,kBAAA,GAAqB,OAAA,CAAQ,kBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolution.js","names":[],"sources":["../../src/router/resolution.ts"],"sourcesContent":["import type {\n RouteContext,\n RouteHandler,\n RouteOptions,\n RoutePolicy,\n RouteRecord,\n RouteRenderResult,\n RouteRequestOptions,\n RouteRequestResult,\n} from '../common/router';\nimport { isPromiseLike } from '../common/promise';\nimport { getActiveRenderContext } from '../common/render-context';\nimport { buildRouteContext, buildRouteContextBase } from './route-context';\nimport { compileNodePolicies } from './access';\nimport { getRenderHandler } from './rendering';\nimport { getMatchingRouteRecord } from './route-matching';\nimport { getActiveRouteAuthOptions, getRouteRecords } from './store';\n\nexport {\n _resolveRouteMatchFromRoutes,\n computeMatchesFromRouteRecords,\n computeMatchesFromRoutes,\n computeRouteActivityMatches,\n resolveRoute,\n resolveRouteFromRoutes,\n} from './route-matching';\n\nfunction getRoutePolicies(\n options: RouteOptions | undefined\n): readonly RoutePolicy[] {\n if (!options) {\n return [];\n }\n\n if (options.policies?.length) {\n return options.policies;\n }\n\n return compileNodePolicies(options);\n}\n\nfunction getDefaultRouteMode(): RouteContext['mode'] {\n if (typeof window !== 'undefined') {\n return 'spa';\n }\n\n return 'ssr';\n}\n\nfunction createRenderDataAwareHandler(\n handler: RouteHandler,\n data: unknown\n): RouteHandler {\n return (params, context) => {\n const renderContext = getActiveRenderContext();\n if (renderContext) {\n renderContext.renderData = (data ?? null) as Record<\n string,\n unknown\n > | null;\n }\n\n return handler(params, context);\n };\n}\n\nfunction buildRenderResult(\n record: RouteRecord,\n params: Record<string, string>,\n mode: RouteContext['mode']\n): RouteRequestResult | Promise<RouteRequestResult> {\n const renderHandler = getRenderHandler(record);\n const loader = mode === 'ssr' ? record.options?.loader : undefined;\n if (loader) {\n const loaded = loader({ params });\n const finalize = (data: unknown): RouteRenderResult => ({\n kind: 'render',\n handler: createRenderDataAwareHandler(renderHandler, data),\n params,\n });\n\n if (isPromiseLike(loaded)) {\n return Promise.resolve(loaded).then((data) => finalize(data));\n }\n\n return finalize(loaded);\n }\n\n return {\n kind: 'render',\n handler: renderHandler,\n params,\n };\n}\n\nfunction continueRoutePolicies(\n policies: readonly RoutePolicy[],\n context: RouteContext,\n record: RouteRecord,\n params: Record<string, string>,\n startIndex = 0\n): RouteRequestResult | Promise<RouteRequestResult> {\n for (let index = startIndex; index < policies.length; index += 1) {\n const policyResult = policies[index](context);\n\n if (isPromiseLike(policyResult)) {\n return Promise.resolve(policyResult).then((next) => {\n if (next.kind !== 'allow') {\n return next;\n }\n\n return continueRoutePolicies(\n policies,\n context,\n record,\n params,\n index + 1\n );\n });\n }\n\n if (policyResult.kind !== 'allow') {\n return policyResult;\n }\n }\n\n return buildRenderResult(record, params, context.mode);\n}\n\nexport function resolveRouteRequest(\n target: string,\n options: RouteRequestOptions = {}\n): RouteRequestResult | Promise<RouteRequestResult> {\n const routeRecords = options.manifest?.records ?? getRouteRecords();\n const match = getMatchingRouteRecord(target, routeRecords);\n\n if (!match) {\n return null;\n }\n\n const { record, params } = match;\n const policies = getRoutePolicies(record.options);\n const mode = options.mode ?? getDefaultRouteMode();\n\n if (policies.length === 0) {\n return buildRenderResult(record, params, mode);\n }\n\n const signal =\n options.signal ??\n getActiveRenderContext()?.signal ??\n new AbortController().signal;\n const auth = getActiveRouteAuthOptions(\n options.auth ?? options.manifest?.auth\n );\n const baseContext = buildRouteContextBase(target, params, {\n mode,\n signal,\n });\n\n const finalize = (authState: { session: unknown; user: unknown }) =>\n continueRoutePolicies(\n policies,\n buildRouteContext(target, params, {\n mode,\n signal,\n auth,\n session: authState.session,\n user: authState.user,\n }),\n record,\n params\n );\n\n if (!auth?.resolve) {\n return finalize({ session: null, user: null });\n }\n\n const authState = auth.resolve(baseContext);\n if (isPromiseLike(authState)) {\n return Promise.resolve(authState).then((next) => finalize(next));\n }\n\n return finalize(authState);\n}\n"],"mappings":";;;;;;;;AA2BA,SAAS,iBACP,SACwB;CACxB,IAAI,CAAC,SACH,OAAO,CAAC;CAGV,IAAI,QAAQ,UAAU,QACpB,OAAO,QAAQ;CAGjB,OAAO,oBAAoB,OAAO;AACpC;AAEA,SAAS,sBAA4C;CACnD,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,6BACP,SACA,MACc;CACd,QAAQ,QAAQ,YAAY;EAC1B,MAAM,gBAAgB,uBAAuB;EAC7C,IAAI,eACF,cAAc,aAAc,QAAQ;EAMtC,OAAO,QAAQ,QAAQ,OAAO;CAChC;AACF;AAEA,SAAS,kBACP,QACA,QACA,MACkD;CAClD,MAAM,gBAAgB,iBAAiB,MAAM;CAC7C,MAAM,SAAS,SAAS,QAAQ,OAAO,SAAS,SAAS;CACzD,IAAI,QAAQ;EACV,MAAM,SAAS,OAAO,EAAE,OAAO,CAAC;EAChC,MAAM,YAAY,UAAsC;GACtD,MAAM;GACN,SAAS,6BAA6B,eAAe,IAAI;GACzD;EACF;EAEA,IAAI,cAAc,MAAM,GACtB,OAAO,QAAQ,QAAQ,MAAM,CAAC,CAAC,MAAM,SAAS,SAAS,IAAI,CAAC;EAG9D,OAAO,SAAS,MAAM;CACxB;CAEA,OAAO;EACL,MAAM;EACN,SAAS;EACT;CACF;AACF;AAEA,SAAS,sBACP,UACA,SACA,QACA,QACA,aAAa,GACqC;CAClD,KAAK,IAAI,QAAQ,YAAY,QAAQ,SAAS,QAAQ,SAAS,GAAG;EAChE,MAAM,eAAe,SAAS,MAAM,CAAC,OAAO;EAE5C,IAAI,cAAc,YAAY,GAC5B,OAAO,QAAQ,QAAQ,YAAY,CAAC,CAAC,MAAM,SAAS;GAClD,IAAI,KAAK,SAAS,SAChB,OAAO;GAGT,OAAO,sBACL,UACA,SACA,QACA,QACA,QAAQ,CACV;EACF,CAAC;EAGH,IAAI,aAAa,SAAS,SACxB,OAAO;CAEX;CAEA,OAAO,kBAAkB,QAAQ,QAAQ,QAAQ,IAAI;AACvD;AAEA,SAAgB,oBACd,QACA,UAA+B,CAAC,GACkB;CAElD,MAAM,QAAQ,uBAAuB,QADhB,QAAQ,UAAU,WAAW,gBAAgB,CACT;CAEzD,IAAI,CAAC,OACH,OAAO;CAGT,MAAM,EAAE,QAAQ,WAAW;CAC3B,MAAM,WAAW,iBAAiB,OAAO,OAAO;CAChD,MAAM,OAAO,QAAQ,QAAQ,oBAAoB;CAEjD,IAAI,SAAS,WAAW,GACtB,OAAO,kBAAkB,QAAQ,QAAQ,IAAI;CAG/C,MAAM,SACJ,QAAQ,UACR,uBAAuB,CAAC,EAAE,UAC1B,IAAI,gBAAgB,CAAC,CAAC;CACxB,MAAM,OAAO,0BACX,QAAQ,QAAQ,QAAQ,UAAU,IACpC;CACA,MAAM,cAAc,sBAAsB,QAAQ,QAAQ;EACxD;EACA;CACF,CAAC;CAED,MAAM,YAAY,cAChB,sBACE,UACA,kBAAkB,QAAQ,QAAQ;EAChC;EACA;EACA;EACA,SAAS,UAAU;EACnB,MAAM,UAAU;CAClB,CAAC,GACD,QACA,MACF;CAEF,IAAI,CAAC,MAAM,SACT,OAAO,SAAS;EAAE,SAAS;EAAM,MAAM;CAAK,CAAC;CAG/C,MAAM,YAAY,KAAK,QAAQ,WAAW;CAC1C,IAAI,cAAc,SAAS,GACzB,OAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC,MAAM,SAAS,SAAS,IAAI,CAAC;CAGjE,OAAO,SAAS,SAAS;AAC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-context.js","names":[],"sources":["../../src/router/route-context.ts"],"sourcesContent":["import { withRouteAuthOptions } from './policy';\n\nimport type {\n RouteAuthOptions,\n RouteContext,\n RouteQuery,\n} from '../common/router';\n\nexport function parseLocation(url: string): {\n pathname: string;\n search: string;\n hash: string;\n} {\n try {\n const parsedUrl = new URL(url, 'http://localhost');\n return {\n pathname: parsedUrl.pathname,\n search: parsedUrl.search,\n hash: parsedUrl.hash,\n };\n } catch {\n return { pathname: '/', search: '', hash: '' };\n }\n}\n\nexport function deepFreeze<T>(obj: T): T {\n if (obj && typeof obj === 'object' && !Object.isFrozen(obj)) {\n Object.freeze(obj as Record<string, unknown>);\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n const value = (obj as Record<string, unknown>)[key];\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n }\n\n return obj;\n}\n\nexport function makeQuery(search: string): RouteQuery {\n const searchParams = new URLSearchParams(search || '');\n const mapping = new Map<string, string[]>();\n\n for (const [key, value] of searchParams.entries()) {\n const existing = mapping.get(key);\n if (existing) {\n existing.push(value);\n } else {\n mapping.set(key, [value]);\n }\n }\n\n const query: RouteQuery = {\n get(key: string) {\n const values = mapping.get(key);\n return values ? values[0] : null;\n },\n getAll(key: string) {\n const values = mapping.get(key);\n return values ? [...values] : [];\n },\n has(key: string) {\n return mapping.has(key);\n },\n toJSON() {\n const output: Record<string, string | string[]> = {};\n for (const [key, values] of mapping.entries()) {\n output[key] = values.length > 1 ? [...values] : values[0];\n }\n return output;\n },\n };\n\n return deepFreeze(query);\n}\n\nexport function buildRouteContextBase(\n target: string,\n params: Record<string, string>,\n options: {\n mode: RouteContext['mode'];\n signal: AbortSignal;\n }\n): Omit<RouteContext, 'session' | 'user'> {\n const parsed = parseLocation(target);\n const href = `${parsed.pathname}${parsed.search}${parsed.hash}`;\n\n return {\n mode: options.mode,\n params,\n pathname: parsed.pathname,\n search: parsed.search,\n hash: parsed.hash,\n href,\n signal: options.signal,\n };\n}\n\nexport function buildRouteContext(\n target: string,\n params: Record<string, string>,\n options: {\n mode: RouteContext['mode'];\n signal: AbortSignal;\n auth?: RouteAuthOptions;\n session?: unknown;\n user?: unknown;\n }\n): RouteContext {\n const context: RouteContext = {\n ...buildRouteContextBase(target, params, options),\n session: options.session ?? null,\n user: options.user ?? null,\n };\n\n return withRouteAuthOptions(context, options.auth);\n}\n"],"mappings":";;AAQA,SAAgB,cAAc,KAI5B;CACA,IAAI;EACF,MAAM,YAAY,IAAI,IAAI,KAAK,kBAAkB;EACjD,OAAO;GACL,UAAU,UAAU;GACpB,QAAQ,UAAU;GAClB,MAAM,UAAU;EAClB;CACF,QAAQ;EACN,OAAO;GAAE,UAAU;GAAK,QAAQ;GAAI,MAAM;EAAG;CAC/C;AACF;AAEA,SAAgB,WAAc,KAAW;CACvC,IAAI,OAAO,OAAO,QAAQ,YAAY,CAAC,OAAO,SAAS,GAAG,GAAG;EAC3D,OAAO,OAAO,GAA8B;EAC5C,KAAK,MAAM,OAAO,OAAO,KAAK,GAA8B,GAAG;GAC7D,MAAM,QAAS,IAAgC;GAC/C,IAAI,SAAS,OAAO,UAAU,UAC5B,WAAW,KAAK;EAEpB;CACF;CAEA,OAAO;AACT;AAEA,SAAgB,UAAU,QAA4B;CACpD,MAAM,eAAe,IAAI,gBAAgB,UAAU,EAAE;CACrD,MAAM,0BAAU,IAAI,IAAsB;CAE1C,KAAK,MAAM,CAAC,KAAK,UAAU,aAAa,QAAQ,GAAG;EACjD,MAAM,WAAW,QAAQ,IAAI,GAAG;EAChC,IAAI,UACF,SAAS,KAAK,KAAK;OAEnB,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;CAE5B;CAuBA,OAAO,WAAW;EApBhB,IAAI,KAAa;GACf,MAAM,SAAS,QAAQ,IAAI,GAAG;GAC9B,OAAO,SAAS,OAAO,KAAK;EAC9B;EACA,OAAO,KAAa;GAClB,MAAM,SAAS,QAAQ,IAAI,GAAG;GAC9B,OAAO,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC;EACjC;EACA,IAAI,KAAa;GACf,OAAO,QAAQ,IAAI,GAAG;EACxB;EACA,SAAS;GACP,MAAM,SAA4C,CAAC;GACnD,KAAK,MAAM,CAAC,KAAK,WAAW,QAAQ,QAAQ,GAC1C,OAAO,OAAO,OAAO,SAAS,IAAI,CAAC,GAAG,MAAM,IAAI,OAAO;GAEzD,OAAO;EACT;CAGgB,CAAK;AACzB;AAEA,SAAgB,sBACd,QACA,QACA,SAIwC;CACxC,MAAM,SAAS,cAAc,MAAM;CACnC,MAAM,OAAO,GAAG,OAAO,WAAW,OAAO,SAAS,OAAO;CAEzD,OAAO;EACL,MAAM,QAAQ;EACd;EACA,UAAU,OAAO;EACjB,QAAQ,OAAO;EACf,MAAM,OAAO;EACb;EACA,QAAQ,QAAQ;CAClB;AACF;AAEA,SAAgB,kBACd,QACA,QACA,SAOc;CAOd,OAAO,qBAAqB;EAL1B,GAAG,sBAAsB,QAAQ,QAAQ,OAAO;EAChD,SAAS,QAAQ,WAAW;EAC5B,MAAM,QAAQ,QAAQ;CAGI,GAAS,QAAQ,IAAI;AACnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-matching.d.ts","names":[],"sources":["../../src/router/route-matching.ts"],"mappings":";;;iBAuMgB,sBAAA,CACd,MAAA,UACA,YAAA,WAAuB,WAAA;EACpB,MAAA,EAAQ,WAAA;EAAa,MAAA,EAAQ,MAAA;AAAA;AAAA,iBAuBlB,wBAAA,CACd,QAAA,UACA,UAAA,WAAqB,KAAA,KACpB,UAAU;AAAA,iBAyBG,8BAAA,CACd,QAAA,UACA,YAAA,WAAuB,WAAA,KACtB,UAAU;AAAA,iBAgBG,2BAAA,CACd,QAAA,UACA,OAAA;EACE,QAAA,GAAW,aAAA;EACX,MAAA,YAAkB,KAAA;AAAA,IAEnB,UAAA;AAAA,iBAYa,YAAA,CAAa,QAAA,WAAmB,aAAa;AAAA,iBAyB7C,sBAAA,CACd,QAAA,UACA,SAAA,WAAoB,KAAA,KACnB,aAAa;AAAA,iBAOA,4BAAA,CACd,QAAA,UACA,SAAA,WAAoB,KAAA;EACjB,KAAA,EAAO,KAAA;EAAO,MAAA,EAAQ,MAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-matching.js","names":[],"sources":["../../src/router/route-matching.ts"],"sourcesContent":["import type {\n Route,\n RouteManifest,\n RouteMatch,\n RouteRecord,\n ResolvedRoute,\n} from '../common/router';\nimport { deepFreeze, parseLocation } from './route-context';\nimport {\n computeRank,\n matchSegments,\n parseSegments,\n splitPathSegments,\n} from './match';\nimport type { InternalRoute, InternalRouteRecord } from './internal-types';\nimport { getActiveRoutes, getRouteRecords, isRouteStoreRoutes } from './store';\n\nconst routeSegsCache = new WeakMap<Route, ReturnType<typeof parseSegments>>();\nconst routeRankCache = new WeakMap<Route, number>();\nconst sortedListCache = new WeakMap<\n ReadonlyArray<Route>,\n ReadonlyArray<Route>\n>();\n\nfunction cachedSegs(route: Route): ReturnType<typeof parseSegments> {\n let segments = routeSegsCache.get(route);\n if (!segments) {\n segments = parseSegments(route.path);\n routeSegsCache.set(route, segments);\n }\n return segments;\n}\n\nfunction cachedRank(route: Route): number {\n let rank = routeRankCache.get(route);\n if (rank === undefined) {\n rank = computeRank(cachedSegs(route));\n routeRankCache.set(route, rank);\n }\n return rank;\n}\n\nfunction cachedSortedList(\n routeList: ReadonlyArray<Route>\n): ReadonlyArray<Route> {\n let sorted = sortedListCache.get(routeList);\n if (!sorted) {\n sorted = [...routeList].sort((a, b) => cachedRank(b) - cachedRank(a));\n sortedListCache.set(routeList, sorted);\n }\n return sorted;\n}\n\nfunction matchFallbackPrefix(\n pathname: string,\n fallbackPrefix: string\n): Record<string, string> | null {\n const normalizedPath =\n pathname.endsWith('/') && pathname !== '/'\n ? pathname.slice(0, -1)\n : pathname;\n const normalizedPrefix =\n fallbackPrefix.endsWith('/') && fallbackPrefix !== '/'\n ? fallbackPrefix.slice(0, -1)\n : fallbackPrefix;\n\n if (normalizedPrefix === '/') {\n const urlParts = splitPathSegments(normalizedPath);\n return {\n '*':\n urlParts.length === 0\n ? '/'\n : urlParts.length === 1\n ? urlParts[0]\n : '/' + urlParts.join('/'),\n };\n }\n\n if (\n normalizedPath !== normalizedPrefix &&\n !normalizedPath.startsWith(`${normalizedPrefix}/`)\n ) {\n return null;\n }\n\n const remainder =\n normalizedPath === normalizedPrefix\n ? '/'\n : normalizedPath.slice(normalizedPrefix.length);\n const remainderParts = splitPathSegments(remainder);\n\n return {\n '*':\n remainderParts.length === 0\n ? '/'\n : remainderParts.length === 1\n ? remainderParts[0]\n : '/' + remainderParts.join('/'),\n };\n}\n\nfunction findBestResolvedRouteFromRoutes(\n pathname: string,\n routeList: readonly Route[]\n): { route: Route; params: Record<string, string> } | null {\n const normalized =\n pathname.endsWith('/') && pathname !== '/'\n ? pathname.slice(0, -1)\n : pathname;\n const urlParts = splitPathSegments(normalized);\n\n const sorted = cachedSortedList(routeList);\n let bestRoute: Route | null = null;\n let bestParams: Record<string, string> = {};\n let bestRank = -Infinity;\n\n for (const route of sorted) {\n const internalRoute = route as InternalRoute;\n if (internalRoute.fallbackPrefix) {\n continue;\n }\n\n const rank = cachedRank(route);\n if (rank < bestRank) break;\n if (bestRoute !== null && rank === bestRank) continue;\n\n const params = matchSegments(urlParts, cachedSegs(route));\n if (params !== null) {\n bestRoute = route;\n bestParams = params;\n bestRank = rank;\n }\n }\n\n if (bestRoute !== null) {\n return { route: bestRoute, params: bestParams };\n }\n\n let bestFallback: InternalRoute | null = null;\n let bestFallbackParams: Record<string, string> | null = null;\n let bestPrefixLength = -1;\n\n for (const route of routeList) {\n const internalRoute = route as InternalRoute;\n if (!internalRoute.fallbackPrefix) {\n continue;\n }\n\n const params = matchFallbackPrefix(\n normalized,\n internalRoute.fallbackPrefix\n );\n if (params === null) {\n continue;\n }\n\n if (internalRoute.fallbackPrefix.length > bestPrefixLength) {\n bestFallback = internalRoute;\n bestFallbackParams = params;\n bestPrefixLength = internalRoute.fallbackPrefix.length;\n }\n }\n\n return bestFallback && bestFallbackParams\n ? { route: bestFallback, params: bestFallbackParams }\n : null;\n}\n\nfunction findBestScopedFallbackRecord(\n pathname: string,\n routeRecords: readonly RouteRecord[]\n): { record: InternalRouteRecord; params: Record<string, string> } | null {\n let bestRecord: InternalRouteRecord | null = null;\n let bestParams: Record<string, string> | null = null;\n let bestPrefixLength = -1;\n\n for (const routeRecord of routeRecords) {\n const record = routeRecord as InternalRouteRecord;\n if (!record.fallbackPrefix) {\n continue;\n }\n\n const params = matchFallbackPrefix(pathname, record.fallbackPrefix);\n if (params === null) {\n continue;\n }\n\n if (record.fallbackPrefix.length > bestPrefixLength) {\n bestRecord = record;\n bestParams = params;\n bestPrefixLength = record.fallbackPrefix.length;\n }\n }\n\n return bestRecord && bestParams\n ? { record: bestRecord, params: bestParams }\n : null;\n}\n\nexport function getMatchingRouteRecord(\n target: string,\n routeRecords: readonly RouteRecord[]\n): { record: RouteRecord; params: Record<string, string> } | null {\n const location = parseLocation(target);\n const normalized =\n location.pathname.endsWith('/') && location.pathname !== '/'\n ? location.pathname.slice(0, -1)\n : location.pathname;\n const urlParts = splitPathSegments(normalized);\n\n for (const record of routeRecords) {\n const internalRecord = record as InternalRouteRecord;\n if (internalRecord.fallbackPrefix) {\n continue;\n }\n\n const params = matchSegments(urlParts, record.segments);\n if (params !== null) {\n return { record, params };\n }\n }\n\n return findBestScopedFallbackRecord(normalized, routeRecords);\n}\n\nexport function computeMatchesFromRoutes(\n pathname: string,\n routesList: readonly Route[]\n): RouteMatch[] {\n const bestMatch = isRouteStoreRoutes(routesList)\n ? getMatchingRouteRecord(pathname, getRouteRecords())\n : findBestResolvedRouteFromRoutes(pathname, routesList);\n\n if (!bestMatch) {\n return [];\n }\n\n return [\n {\n path: 'route' in bestMatch ? bestMatch.route.path : bestMatch.record.path,\n params: deepFreeze({ ...bestMatch.params }),\n name:\n 'route' in bestMatch\n ? (bestMatch.route as { name?: string }).name\n : undefined,\n namespace:\n 'route' in bestMatch\n ? bestMatch.route.namespace\n : bestMatch.record.options.namespace,\n },\n ];\n}\n\nexport function computeMatchesFromRouteRecords(\n pathname: string,\n routeRecords: readonly RouteRecord[]\n): RouteMatch[] {\n const bestMatch = getMatchingRouteRecord(pathname, routeRecords);\n\n if (!bestMatch) {\n return [];\n }\n\n return [\n {\n path: bestMatch.record.path,\n params: deepFreeze({ ...bestMatch.params }),\n namespace: bestMatch.record.options.namespace,\n },\n ];\n}\n\nexport function computeRouteActivityMatches(\n pathname: string,\n options: {\n manifest?: RouteManifest;\n routes?: readonly Route[];\n } = {}\n): RouteMatch[] {\n if (options.manifest) {\n return computeMatchesFromRouteRecords(pathname, options.manifest.records);\n }\n\n if (options.routes) {\n return computeMatchesFromRoutes(pathname, options.routes);\n }\n\n return computeMatchesFromRoutes(pathname, getActiveRoutes());\n}\n\nexport function resolveRoute(pathname: string): ResolvedRoute | null {\n const normalized =\n pathname.endsWith('/') && pathname !== '/'\n ? pathname.slice(0, -1)\n : pathname;\n const urlParts = splitPathSegments(normalized);\n const records = getRouteRecords();\n\n for (const record of records) {\n if (record.fallbackPrefix) {\n continue;\n }\n\n const params = matchSegments(urlParts, record.segments);\n if (params !== null) {\n return { handler: record.handler, params };\n }\n }\n\n const fallbackMatch = findBestScopedFallbackRecord(normalized, records);\n return fallbackMatch\n ? { handler: fallbackMatch.record.handler, params: fallbackMatch.params }\n : null;\n}\n\nexport function resolveRouteFromRoutes(\n pathname: string,\n routeList: readonly Route[]\n): ResolvedRoute | null {\n if (isRouteStoreRoutes(routeList)) return resolveRoute(pathname);\n\n const match = findBestResolvedRouteFromRoutes(pathname, routeList);\n return match ? { handler: match.route.handler, params: match.params } : null;\n}\n\nexport function _resolveRouteMatchFromRoutes(\n pathname: string,\n routeList: readonly Route[]\n): { route: Route; params: Record<string, string> } | null {\n return findBestResolvedRouteFromRoutes(pathname, routeList);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-query.d.ts","names":[],"sources":["../../src/router/route-query.ts"],"mappings":";KAWY,oBAAA;AAAA,KACA,oBAAA,GACR,oBAAA,YACS,oBAAoB;AAAA,KACrB,iBAAA,GAAoB,MAAM,SAAS,oBAAA;AAAA,KACnC,iBAAA,IAAqB,YAA6B,EAAf,eAAe;AAAA,KAElD,uBAAA;EAPoB;AAChC;;;EAWE,OAAA;EACA,OAAO;AAAA;AAAA,iBAmDO,gBAAA,CACd,OAAA,EAAS,iBAAA,GAAoB,iBAAA,EAC7B,OAAA,GAAS,uBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-query.js","names":[],"sources":["../../src/router/route-query.ts"],"sourcesContent":["import { saveScrollPosition } from './navigation-scroll';\nimport {\n getCurrentHref,\n getRegisteredAppsSnapshot,\n getWindowHref,\n parseTargetUrl,\n setCurrentRouteLocation,\n syncAppRegistrationLocation,\n syncRegisteredRouteSnapshot,\n} from './navigation-registry';\n\nexport type RouteQueryParamValue = string | number | boolean | null | undefined;\nexport type RouteQueryParamInput =\n | RouteQueryParamValue\n | readonly RouteQueryParamValue[];\nexport type RouteQueryUpdates = Record<string, RouteQueryParamInput>;\nexport type RouteQueryUpdater = (searchParams: URLSearchParams) => void;\n\nexport type UpdateRouteQueryOptions = {\n /**\n * Defaults to replace so high-frequency controls such as search inputs do not\n * create one browser-history entry per character.\n */\n history?: 'push' | 'replace';\n replace?: boolean;\n};\n\nfunction getRouteQueryHistoryMode(\n options: UpdateRouteQueryOptions\n): 'push' | 'replace' {\n if (options.history) {\n return options.history;\n }\n\n return options.replace === false ? 'push' : 'replace';\n}\n\nfunction setRouteQueryValue(\n searchParams: URLSearchParams,\n key: string,\n value: RouteQueryParamInput\n): void {\n searchParams.delete(key);\n\n if (Array.isArray(value)) {\n for (const entry of value) {\n if (entry === null || entry === undefined) {\n continue;\n }\n searchParams.append(key, String(entry));\n }\n return;\n }\n\n if (value === null || value === undefined) {\n return;\n }\n\n searchParams.set(key, String(value));\n}\n\nfunction applyRouteQueryUpdates(\n searchParams: URLSearchParams,\n updates: RouteQueryUpdates | RouteQueryUpdater\n): void {\n if (typeof updates === 'function') {\n updates(searchParams);\n return;\n }\n\n for (const [key, value] of Object.entries(updates)) {\n setRouteQueryValue(searchParams, key, value);\n }\n}\n\nexport function updateRouteQuery(\n updates: RouteQueryUpdates | RouteQueryUpdater,\n options: UpdateRouteQueryOptions = {}\n): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const url = parseTargetUrl(getWindowHref());\n applyRouteQueryUpdates(url.searchParams, updates);\n\n const href = `${url.pathname}${url.search}${url.hash}`;\n if (href === getWindowHref()) {\n return;\n }\n\n const historyMode = getRouteQueryHistoryMode(options);\n if (historyMode === 'push') {\n saveScrollPosition(getCurrentHref());\n }\n\n const state =\n window.history.state && typeof window.history.state === 'object'\n ? window.history.state\n : {};\n\n window.history[historyMode === 'replace' ? 'replaceState' : 'pushState'](\n {\n ...state,\n path: href,\n },\n '',\n href\n );\n\n setCurrentRouteLocation(url.pathname, href);\n for (const app of getRegisteredAppsSnapshot()) {\n syncAppRegistrationLocation(app, url.pathname, href);\n }\n syncRegisteredRouteSnapshot();\n}\n"],"mappings":";;;AA2BA,SAAS,yBACP,SACoB;CACpB,IAAI,QAAQ,SACV,OAAO,QAAQ;CAGjB,OAAO,QAAQ,YAAY,QAAQ,SAAS;AAC9C;AAEA,SAAS,mBACP,cACA,KACA,OACM;CACN,aAAa,OAAO,GAAG;CAEvB,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,KAAK,MAAM,SAAS,OAAO;GACzB,IAAI,UAAU,QAAQ,UAAU,QAC9B;GAEF,aAAa,OAAO,KAAK,OAAO,KAAK,CAAC;EACxC;EACA;CACF;CAEA,IAAI,UAAU,QAAQ,UAAU,QAC9B;CAGF,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AACrC;AAEA,SAAS,uBACP,cACA,SACM;CACN,IAAI,OAAO,YAAY,YAAY;EACjC,QAAQ,YAAY;EACpB;CACF;CAEA,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,mBAAmB,cAAc,KAAK,KAAK;AAE/C;AAEA,SAAgB,iBACd,SACA,UAAmC,CAAC,GAC9B;CACN,IAAI,OAAO,WAAW,aACpB;CAGF,MAAM,MAAM,eAAe,cAAc,CAAC;CAC1C,uBAAuB,IAAI,cAAc,OAAO;CAEhD,MAAM,OAAO,GAAG,IAAI,WAAW,IAAI,SAAS,IAAI;CAChD,IAAI,SAAS,cAAc,GACzB;CAGF,MAAM,cAAc,yBAAyB,OAAO;CACpD,IAAI,gBAAgB,QAClB,mBAAmB,eAAe,CAAC;CAGrC,MAAM,QACJ,OAAO,QAAQ,SAAS,OAAO,OAAO,QAAQ,UAAU,WACpD,OAAO,QAAQ,QACf,CAAC;CAEP,OAAO,QAAQ,gBAAgB,YAAY,iBAAiB,YAAY,CACtE;EACE,GAAG;EACH,MAAM;CACR,GACA,IACA,IACF;CAEA,wBAAwB,IAAI,UAAU,IAAI;CAC1C,KAAK,MAAM,OAAO,0BAA0B,GAC1C,4BAA4B,KAAK,IAAI,UAAU,IAAI;CAErD,4BAA4B;AAC9B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","names":[],"sources":["../../src/router/store.ts"],"mappings":";;;;KA6BK,kBAAA;EACH,MAAA,EAAQ,aAAA;EACR,OAAA,EAAS,mBAAA;EACT,UAAA;EACA,kBAAA;EACA,uBAAA,EAAyB,gBAAA;EACzB,4BAAA,EAA8B,gBAAA;EAC9B,aAAA,EAAe,KAAA,UAAe,KAAA;EAC9B,sBAAA,EAAwB,iBAAA;EACxB,wBAAA,EAA0B,mBAAA;AAAA;AAAA,iBASZ,eAAA,aAA4B,mBAAmB;AAAA,iBAI/C,kBAAA,CAAmB,SAA2B,WAAP,KAAK;AAAA,iBAI5C,kBAAA,CAAmB,MAA2B,EAAnB,mBAAmB;AAAA,iBAW9C,gBAAA,CAAiB,QAAuB,EAAb,aAAa;AAAA,iBAgBxC,eAAA,aAA4B,KAAK;AAAA,iBAKjC,yBAAA,CACd,QAAA,GAAW,gBAAA,GACV,gBAAgB;AAAA,iBAaH,0BAAA,CACd,IAAkC,EAA5B,gBAAgB;AAAA,iBAKR,0BAAA,IAA8B,gBAAgB;AAAA,iBAI9C,0BAAA,CACd,IAAkC,EAA5B,gBAAgB;AAAA,iBAKR,6BAAA,IAAiC,mBAAmB;AAAA,iBAQpD,0BAAA,IAA8B,gBAAgB;AAAA,iBAS9C,qBAAA,IAAyB,iBAAiB;AAAA,iBAY1C,mBAAA,IAAuB,eAAe;AAAA,iBAYtC,kBAAA;AAAA,iBAIA,mBAAA,IAAuB,iBAAiB;AAAA,iBAWxC,mBAAA,IAAuB,iBAAiB;AAAA,iBAMxC,oBAAA;AAAA,iBAMA,2BAAA,IAA+B,WAAW;AAAA,iBAY1C,qBAAA,CACd,KAAA,EAAO,iBAAA,EACP,EAAA,EAAI,eAAe;AAAA,iBAUL,uBAAA,CACd,OAAA,EAAS,mBAAA,EACT,EAAA,EAAI,eAAe;AAAA,iBAUL,qBAAA;AAAA,iBAIA,8BAAA;AAAA,iBAIA,gCAAA;AAAA,iBAIA,+BAAA;AAAA,iBASA,SAAA,IAAa,KAAK;AAAA,iBAIlB,mBAAA;AAAA,iBAIA,kBAAA,CAAmB,SAAA,WAAoB,KAAK;AAAA,iBAI5C,eAAA,CAAgB,SAAiB;AAAA,iBA2BjC,mBAAA;AAAA,iBAIA,eAAA;AAAA,iBAYA,kBAAA,IAAsB,kBAAkB;AAAA,iBAiBxC,iBAAA,CAAkB,QAA4B,EAAlB,kBAAkB"}
|
package/dist/router/store.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","names":[],"sources":["../../src/router/store.ts"],"sourcesContent":["import type {\n LayoutScopeRecord,\n PageScopeRecord,\n Route,\n RouteAuthOptions,\n RouteDefinition,\n RoutePolicy,\n} from '../common/router';\nimport { getActiveRenderContext } from '../common/render-context';\nimport type {\n AccessScopeState,\n InternalRoute,\n InternalRouteRecord,\n RegistrationScope,\n RegistrationSession,\n} from './internal-types';\n\nconst routes: InternalRoute[] = [];\nconst records: InternalRouteRecord[] = [];\nconst namespaces = new Set<string>();\nconst routesByDepth = new Map<number, Route[]>();\n\nconst registrationScopeStack: RegistrationScope[] = [];\nconst registrationSessionStack: RegistrationSession[] = [];\n\nlet registrationLocked = false;\nlet defaultRouteAuthOptions: RouteAuthOptions | undefined;\nlet activeClientRouteAuthOptions: RouteAuthOptions | undefined;\n\ntype RouteStateSnapshot = {\n routes: InternalRoute[];\n records: InternalRouteRecord[];\n namespaces: string[];\n registrationLocked: boolean;\n defaultRouteAuthOptions: RouteAuthOptions | undefined;\n activeClientRouteAuthOptions: RouteAuthOptions | undefined;\n routesByDepth: Array<[number, Route[]]>;\n registrationScopeStack: RegistrationScope[];\n registrationSessionStack: RegistrationSession[];\n};\n\nfunction getDepth(path: string): number {\n const normalized =\n path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\n return normalized === '/' ? 0 : normalized.split('/').filter(Boolean).length;\n}\n\nexport function getRouteRecords(): readonly InternalRouteRecord[] {\n return records;\n}\n\nexport function isRouteStoreRoutes(routeList: readonly Route[]): boolean {\n return routeList === routes;\n}\n\nexport function insertRecordSorted(record: InternalRouteRecord): void {\n let lo = 0;\n let hi = records.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (records[mid].rank >= record.rank) lo = mid + 1;\n else hi = mid;\n }\n records.splice(lo, 0, record);\n}\n\nexport function addRouteToStores(routeObj: InternalRoute): void {\n routes.push(routeObj);\n\n const depth = getDepth(routeObj.path);\n let depthRoutes = routesByDepth.get(depth);\n if (!depthRoutes) {\n depthRoutes = [];\n routesByDepth.set(depth, depthRoutes);\n }\n depthRoutes.push(routeObj);\n\n if (routeObj.namespace) {\n namespaces.add(routeObj.namespace);\n }\n}\n\nexport function getActiveRoutes(): readonly Route[] {\n const renderContext = getActiveRenderContext();\n return renderContext?.routes ?? routes;\n}\n\nexport function getActiveRouteAuthOptions(\n override?: RouteAuthOptions\n): RouteAuthOptions | undefined {\n if (override) {\n return override;\n }\n\n const renderContext = getActiveRenderContext();\n return (\n renderContext?.routeAuth ??\n activeClientRouteAuthOptions ??\n defaultRouteAuthOptions\n );\n}\n\nexport function _setActiveRouteAuthOptions(\n auth: RouteAuthOptions | undefined\n): void {\n activeClientRouteAuthOptions = auth;\n}\n\nexport function getDefaultRouteAuthOptions(): RouteAuthOptions | undefined {\n return defaultRouteAuthOptions;\n}\n\nexport function setDefaultRouteAuthOptions(\n auth: RouteAuthOptions | undefined\n): void {\n defaultRouteAuthOptions = auth;\n}\n\nexport function getCurrentRegistrationSession(): RegistrationSession {\n return (\n registrationSessionStack[registrationSessionStack.length - 1] ?? {\n authConfigured: !!defaultRouteAuthOptions?.resolve,\n }\n );\n}\n\nexport function getCurrentAccessScopeState(): AccessScopeState {\n return (\n registrationScopeStack[registrationScopeStack.length - 1]?.state ?? {\n guestOnly: false,\n authenticated: false,\n }\n );\n}\n\nexport function getCurrentLayoutChain(): LayoutScopeRecord[] {\n const layoutChain: LayoutScopeRecord[] = [];\n\n for (const scope of registrationScopeStack) {\n if (scope.layout) {\n layoutChain.push({ component: scope.layout });\n }\n }\n\n return layoutChain;\n}\n\nexport function getCurrentPageChain(): PageScopeRecord[] {\n const pageChain: PageScopeRecord[] = [];\n\n for (const scope of registrationScopeStack) {\n if (scope.page) {\n pageChain.push({ component: scope.page });\n }\n }\n\n return pageChain;\n}\n\nexport function hasActivePageScope(): boolean {\n return registrationScopeStack.some((scope) => !!scope.page);\n}\n\nexport function getCurrentPageScope(): RegistrationScope | null {\n for (let index = registrationScopeStack.length - 1; index >= 0; index -= 1) {\n const scope = registrationScopeStack[index];\n if (scope.kind === 'page') {\n return scope;\n }\n }\n\n return null;\n}\n\nexport function getCurrentScopeKind(): RegistrationScope['kind'] | null {\n return (\n registrationScopeStack[registrationScopeStack.length - 1]?.kind ?? null\n );\n}\n\nexport function getCurrentPathPrefix(): string {\n return (\n registrationScopeStack[registrationScopeStack.length - 1]?.pathPrefix ?? ''\n );\n}\n\nexport function getCurrentInheritedPolicies(): RoutePolicy[] {\n const policies: RoutePolicy[] = [];\n\n for (const scope of registrationScopeStack) {\n if (scope.policies.length > 0) {\n policies.push(...scope.policies);\n }\n }\n\n return policies;\n}\n\nexport function pushRegistrationScope(\n scope: RegistrationScope,\n fn: RouteDefinition\n): void {\n registrationScopeStack.push(scope);\n try {\n fn();\n } finally {\n registrationScopeStack.pop();\n }\n}\n\nexport function pushRegistrationSession(\n session: RegistrationSession,\n fn: RouteDefinition\n): void {\n registrationSessionStack.push(session);\n try {\n fn();\n } finally {\n registrationSessionStack.pop();\n }\n}\n\nexport function lockRouteRegistration(): void {\n registrationLocked = true;\n}\n\nexport function _lockRouteRegistrationForTests(): void {\n registrationLocked = true;\n}\n\nexport function _unlockRouteRegistrationForTests(): void {\n registrationLocked = false;\n}\n\nexport function assertRouteRegistrationUnlocked(): void {\n if (registrationLocked) {\n throw new Error(\n 'Route registration is locked after app startup. ' +\n 'Register routes at module load time before calling createSPA or createSSR.'\n );\n }\n}\n\nexport function getRoutes(): Route[] {\n return [...routes];\n}\n\nexport function hasRegisteredRoutes(): boolean {\n return routes.length > 0 || records.length > 0;\n}\n\nexport function getNamespaceRoutes(namespace: string): Route[] {\n return routes.filter((route) => route.namespace === namespace);\n}\n\nexport function unloadNamespace(namespace: string): number {\n const before = routes.length;\n\n for (let i = routes.length - 1; i >= 0; i--) {\n if (routes[i].namespace === namespace) {\n const removed = routes[i];\n routes.splice(i, 1);\n\n const depth = getDepth(removed.path);\n const depthRoutes = routesByDepth.get(depth);\n if (depthRoutes) {\n const idx = depthRoutes.indexOf(removed);\n if (idx >= 0) depthRoutes.splice(idx, 1);\n }\n }\n }\n\n for (let i = records.length - 1; i >= 0; i--) {\n if (records[i].options.namespace === namespace) {\n records.splice(i, 1);\n }\n }\n\n namespaces.delete(namespace);\n return before - routes.length;\n}\n\nexport function getLoadedNamespaces(): string[] {\n return Array.from(namespaces);\n}\n\nexport function clearRouteState(): void {\n routes.length = 0;\n records.length = 0;\n namespaces.clear();\n routesByDepth.clear();\n registrationScopeStack.length = 0;\n registrationSessionStack.length = 0;\n registrationLocked = false;\n defaultRouteAuthOptions = undefined;\n activeClientRouteAuthOptions = undefined;\n}\n\nexport function snapshotRouteState(): RouteStateSnapshot {\n return {\n routes: [...routes],\n records: [...records],\n namespaces: [...namespaces],\n registrationLocked,\n defaultRouteAuthOptions,\n activeClientRouteAuthOptions,\n routesByDepth: [...routesByDepth.entries()].map(([depth, depthRoutes]) => [\n depth,\n [...depthRoutes],\n ]),\n registrationScopeStack: [...registrationScopeStack],\n registrationSessionStack: [...registrationSessionStack],\n };\n}\n\nexport function restoreRouteState(snapshot: RouteStateSnapshot): void {\n routes.length = 0;\n routes.push(...snapshot.routes);\n\n records.length = 0;\n records.push(...snapshot.records);\n\n namespaces.clear();\n for (const namespace of snapshot.namespaces) {\n namespaces.add(namespace);\n }\n\n routesByDepth.clear();\n for (const [depth, depthRoutes] of snapshot.routesByDepth) {\n routesByDepth.set(depth, [...depthRoutes]);\n }\n\n registrationScopeStack.length = 0;\n registrationScopeStack.push(...snapshot.registrationScopeStack);\n\n registrationSessionStack.length = 0;\n registrationSessionStack.push(...snapshot.registrationSessionStack);\n\n registrationLocked = snapshot.registrationLocked;\n defaultRouteAuthOptions = snapshot.defaultRouteAuthOptions;\n activeClientRouteAuthOptions = snapshot.activeClientRouteAuthOptions;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.d.ts","names":[],"sources":["../../src/runtime/access.ts"],"mappings":";;;;;KAQK,WAAA;AAAA,iBAEW,mBAAA,IAAuB,SAAS;AAAA,iBAIhC,yBAAA,IAA6B,WAAW;AAAA,iBAIxC,kBAAA,IAAsB,mBAAmB;AAAA,iBAIzC,kBAAA,CAAmB,IAAiB,EAAX,WAAW;AAAA,iBAIpC,kBAAA,CACd,IAAA,EAAM,aAAA,EACN,IAAA,EAAM,WAAW;AAAA,iBAKH,sBAAA,IACd,EAAA,QAAU,CAAA,EACV,SAAA,sBACC,CAAC;AAAA,iBAIY,0BAAA,IAA8B,EAAA,QAAU,CAAA,GAAI,CAAC;AAAA,iBAI7C,wBAAA,IAA4B,UAAU,CAAC,SAAA;AAAA,iBAIvC,2BAAA;AAAA,iBAIA,sBAAA;AAAA,iBAIA,qBAAA;AAAA,iBAIA,yBAAA,CAA0B,KAAoB;AAAA,iBAI9C,mCAAA,CACd,MAA+B,EAAvB,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.js","names":[],"sources":["../../src/runtime/access.ts"],"sourcesContent":["import type { ReadableSource } from './readable';\nimport {\n getDefaultRuntime,\n type AskrRuntime,\n type RuntimeRendererHost,\n} from './runtime';\nimport type { Scheduler, SchedulerLane } from './scheduler';\n\ntype RuntimeTask = () => void;\n\nexport function getRuntimeScheduler(): Scheduler {\n return getDefaultRuntime().scheduler;\n}\n\nexport function getDefaultRuntimeInstance(): AskrRuntime {\n return getDefaultRuntime();\n}\n\nexport function getRuntimeRenderer(): RuntimeRendererHost {\n return getDefaultRuntime().renderer;\n}\n\nexport function enqueueRuntimeTask(task: RuntimeTask): void {\n getRuntimeScheduler().enqueue(task);\n}\n\nexport function enqueueRuntimeLane(\n lane: SchedulerLane,\n task: RuntimeTask\n): void {\n getRuntimeScheduler().enqueueInLane(lane, task);\n}\n\nexport function runRuntimeHandlerScope<T>(\n fn: () => T,\n flushMode: 'defer' | 'sync' = 'defer'\n): T {\n return getRuntimeScheduler().runInHandlerScope(fn, flushMode);\n}\n\nexport function runRuntimeWithSyncProgress<T>(fn: () => T): T {\n return getRuntimeScheduler().runWithSyncProgress(fn);\n}\n\nexport function getRuntimeSchedulerState(): ReturnType<Scheduler['getState']> {\n return getRuntimeScheduler().getState();\n}\n\nexport function isRuntimeSchedulerExecuting(): boolean {\n return getRuntimeScheduler().isExecuting();\n}\n\nexport function getRuntimeFlushVersion(): number {\n return getRuntimeScheduler().getFlushVersion();\n}\n\nexport function flushRuntimeScheduler(): void {\n getRuntimeScheduler().flush();\n}\n\nexport function setRuntimeBulkCommitProbe(probe: () => boolean): void {\n getRuntimeScheduler().setBulkCommitProbe(probe);\n}\n\nexport function markRuntimeReactivePropsDirtySource(\n source: ReadableSource<unknown>\n): void {\n getRuntimeRenderer().markReactivePropsDirtySource(source);\n}\n"],"mappings":";;AAUA,SAAgB,sBAAiC;CAC/C,OAAO,kBAAkB,CAAC,CAAC;AAC7B;AAEA,SAAgB,4BAAyC;CACvD,OAAO,kBAAkB;AAC3B;AAEA,SAAgB,qBAA0C;CACxD,OAAO,kBAAkB,CAAC,CAAC;AAC7B;AAEA,SAAgB,mBAAmB,MAAyB;CAC1D,oBAAoB,CAAC,CAAC,QAAQ,IAAI;AACpC;AAEA,SAAgB,mBACd,MACA,MACM;CACN,oBAAoB,CAAC,CAAC,cAAc,MAAM,IAAI;AAChD;AAEA,SAAgB,uBACd,IACA,YAA8B,SAC3B;CACH,OAAO,oBAAoB,CAAC,CAAC,kBAAkB,IAAI,SAAS;AAC9D;AAEA,SAAgB,2BAA8B,IAAgB;CAC5D,OAAO,oBAAoB,CAAC,CAAC,oBAAoB,EAAE;AACrD;AAEA,SAAgB,2BAA8D;CAC5E,OAAO,oBAAoB,CAAC,CAAC,SAAS;AACxC;AAEA,SAAgB,8BAAuC;CACrD,OAAO,oBAAoB,CAAC,CAAC,YAAY;AAC3C;AAEA,SAAgB,yBAAiC;CAC/C,OAAO,oBAAoB,CAAC,CAAC,gBAAgB;AAC/C;AAEA,SAAgB,wBAA8B;CAC5C,oBAAoB,CAAC,CAAC,MAAM;AAC9B;AAEA,SAAgB,0BAA0B,OAA4B;CACpE,oBAAoB,CAAC,CAAC,mBAAmB,KAAK;AAChD;AAEA,SAAgB,oCACd,QACM;CACN,mBAAmB,CAAC,CAAC,6BAA6B,MAAM;AAC1D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"child-scope.d.ts","names":[],"sources":["../../src/runtime/child-scope.ts"],"mappings":";;;;UAciB,UAAA;EACf,GAAA;EACA,iBAAA,EAAmB,iBAAA;EACnB,aAAA,EAAe,KAAA;EACf,KAAA,EAAO,KAAA;EACP,GAAA,GAAM,IAAA;EACN,cAAA;EACA,gBAAA;EACA,MAAA,CAAO,QAAA,QAAgB,KAAA,GAAQ,KAAA;EAC/B,SAAA;EACA,OAAA;AAAA;AAAA,iBAiEc,kBAAA,CAAmB,KAAA,EAAO,UAAA,GAAa,KAAK;AAAA,iBAI5C,iBAAA,CAAkB,KAAiB,EAAV,UAAU;AAAA,iBAInC,gBAAA,CACd,MAAA,EAAQ,iBAAA,SACR,GAAA,mBACA,OAAA,gBACC,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"child-scope.js","names":[],"sources":["../../src/runtime/child-scope.ts"],"sourcesContent":["import type { VNode } from '../common/vnode';\nimport { _isDOMElement } from '../common/vnode';\nimport {\n cleanupComponent,\n createComponentInstance,\n finalizeReadSubscriptions,\n getCurrentStateIndex,\n registerOwnedChildScope,\n renderScopedComponent,\n unregisterOwnedChildScope,\n type ComponentInstance,\n} from './component';\nimport { isDevelopmentEnvironment } from '../common/env';\n\nexport interface ChildScope {\n key: string | number;\n componentInstance: ComponentInstance;\n previousVnode: VNode | undefined;\n vnode: VNode | undefined;\n dom?: Node;\n needsDomUpdate: boolean;\n hydrationPending: boolean;\n render(renderFn: () => VNode): VNode;\n markDirty(): void;\n dispose(): void;\n}\n\ninterface MutableChildScope extends ChildScope {\n _startStateIndex: number;\n _renderFn?: (() => VNode) | undefined;\n _onDirty?: (() => void) | undefined;\n _parent?: ComponentInstance | null;\n _disposed: boolean;\n}\n\nfunction renderScope(scope: MutableChildScope): VNode | undefined {\n if (scope._disposed) {\n if (isDevelopmentEnvironment()) {\n throw new Error(\n `[askr] Attempted to render disposed child scope ${String(scope.key)}.`\n );\n }\n return scope.vnode;\n }\n\n if (!scope._renderFn) {\n return scope.vnode;\n }\n\n const { componentInstance } = scope;\n const previousVNode = scope.vnode;\n\n try {\n const nextVNode = renderScopedComponent(\n componentInstance,\n scope._startStateIndex,\n scope._renderFn\n );\n if (\n previousVNode &&\n nextVNode &&\n _isDOMElement(previousVNode) &&\n _isDOMElement(nextVNode) &&\n typeof previousVNode.type === 'function' &&\n previousVNode.type === nextVNode.type &&\n '__instance' in previousVNode &&\n !('__instance' in nextVNode)\n ) {\n (\n nextVNode as VNode & {\n __instance?: ComponentInstance;\n }\n ).__instance = (\n previousVNode as VNode & {\n __instance?: ComponentInstance;\n }\n ).__instance;\n }\n scope.previousVnode = previousVNode;\n scope.vnode = nextVNode;\n scope.markDirty();\n finalizeReadSubscriptions(componentInstance);\n return scope.vnode;\n } catch (error) {\n componentInstance.hasPendingUpdate = false;\n throw error;\n }\n}\n\nexport function rerenderChildScope(scope: ChildScope): VNode | undefined {\n return renderScope(scope as MutableChildScope);\n}\n\nexport function disposeChildScope(scope: ChildScope): void {\n scope.dispose();\n}\n\nexport function createChildScope(\n parent: ComponentInstance | null,\n key: string | number,\n onDirty?: () => void\n): ChildScope {\n const scope = {} as MutableChildScope;\n\n const componentInstance = createComponentInstance(\n `child-scope-${String(key)}`,\n () => scope._renderFn?.() ?? null,\n {},\n null\n );\n\n if (parent) {\n componentInstance.parentInstance = parent;\n componentInstance.ownerFrame = parent.ownerFrame;\n componentInstance.portalScope = parent.portalScope;\n }\n\n scope.key = key;\n scope.componentInstance = componentInstance;\n scope.previousVnode = undefined;\n scope.vnode = undefined;\n scope.dom = undefined;\n scope.needsDomUpdate = true;\n scope.hydrationPending = true;\n scope._startStateIndex = getCurrentStateIndex();\n scope._renderFn = undefined;\n scope._onDirty = onDirty;\n scope._parent = parent;\n scope._disposed = false;\n scope.markDirty = () => {\n scope.needsDomUpdate = true;\n };\n scope.render = (renderFn: () => VNode) => {\n scope._renderFn = renderFn;\n return renderScope(scope) as VNode;\n };\n scope.dispose = () => {\n if (scope._disposed) {\n return;\n }\n scope._disposed = true;\n if (scope._parent) {\n unregisterOwnedChildScope(scope._parent, scope);\n }\n cleanupComponent(componentInstance);\n scope._renderFn = undefined;\n scope.previousVnode = undefined;\n scope.vnode = undefined;\n scope.dom = undefined;\n scope.needsDomUpdate = false;\n scope.hydrationPending = false;\n componentInstance.hasPendingUpdate = false;\n };\n\n componentInstance._pendingFlushTask = () => {\n componentInstance.hasPendingUpdate = false;\n if (componentInstance.notifyUpdate === null || scope._disposed) {\n return;\n }\n renderScope(scope);\n scope._onDirty?.();\n };\n\n if (parent) {\n registerOwnedChildScope(parent, scope);\n }\n\n return scope;\n}\n"],"mappings":";;;;;;;AAmCA,SAAS,YAAY,OAA6C;CAChE,IAAI,MAAM,WAAW;EACnB,IAAI,yBAAyB,GAC3B,MAAM,IAAI,MACR,mDAAmD,OAAO,MAAM,GAAG,EAAE,EACvE;EAEF,OAAO,MAAM;CACf;CAEA,IAAI,CAAC,MAAM,WACT,OAAO,MAAM;CAGf,MAAM,EAAE,sBAAsB;CAC9B,MAAM,gBAAgB,MAAM;CAE5B,IAAI;EACF,MAAM,YAAY,sBAChB,mBACA,MAAM,kBACN,MAAM,SACR;EACA,IACE,iBACA,aACA,cAAc,aAAa,KAC3B,cAAc,SAAS,KACvB,OAAO,cAAc,SAAS,cAC9B,cAAc,SAAS,UAAU,QACjC,gBAAgB,iBAChB,EAAE,gBAAgB,YAElB,UAIE,aACA,cAGA;EAEJ,MAAM,gBAAgB;EACtB,MAAM,QAAQ;EACd,MAAM,UAAU;EAChB,0BAA0B,iBAAiB;EAC3C,OAAO,MAAM;CACf,SAAS,OAAO;EACd,kBAAkB,mBAAmB;EACrC,MAAM;CACR;AACF;AAEA,SAAgB,mBAAmB,OAAsC;CACvE,OAAO,YAAY,KAA0B;AAC/C;AAEA,SAAgB,kBAAkB,OAAyB;CACzD,MAAM,QAAQ;AAChB;AAEA,SAAgB,iBACd,QACA,KACA,SACY;CACZ,MAAM,QAAQ,CAAC;CAEf,MAAM,oBAAoB,wBACxB,eAAe,OAAO,GAAG,WACnB,MAAM,YAAY,KAAK,MAC7B,CAAC,GACD,IACF;CAEA,IAAI,QAAQ;EACV,kBAAkB,iBAAiB;EACnC,kBAAkB,aAAa,OAAO;EACtC,kBAAkB,cAAc,OAAO;CACzC;CAEA,MAAM,MAAM;CACZ,MAAM,oBAAoB;CAC1B,MAAM,gBAAgB;CACtB,MAAM,QAAQ;CACd,MAAM,MAAM;CACZ,MAAM,iBAAiB;CACvB,MAAM,mBAAmB;CACzB,MAAM,mBAAmB,qBAAqB;CAC9C,MAAM,YAAY;CAClB,MAAM,WAAW;CACjB,MAAM,UAAU;CAChB,MAAM,YAAY;CAClB,MAAM,kBAAkB;EACtB,MAAM,iBAAiB;CACzB;CACA,MAAM,UAAU,aAA0B;EACxC,MAAM,YAAY;EAClB,OAAO,YAAY,KAAK;CAC1B;CACA,MAAM,gBAAgB;EACpB,IAAI,MAAM,WACR;EAEF,MAAM,YAAY;EAClB,IAAI,MAAM,SACR,0BAA0B,MAAM,SAAS,KAAK;EAEhD,iBAAiB,iBAAiB;EAClC,MAAM,YAAY;EAClB,MAAM,gBAAgB;EACtB,MAAM,QAAQ;EACd,MAAM,MAAM;EACZ,MAAM,iBAAiB;EACvB,MAAM,mBAAmB;EACzB,kBAAkB,mBAAmB;CACvC;CAEA,kBAAkB,0BAA0B;EAC1C,kBAAkB,mBAAmB;EACrC,IAAI,kBAAkB,iBAAiB,QAAQ,MAAM,WACnD;EAEF,YAAY,KAAK;EACjB,MAAM,WAAW;CACnB;CAEA,IAAI,QACF,wBAAwB,QAAQ,KAAK;CAGvC,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-cleanup.d.ts","names":[],"sources":["../../src/runtime/component-cleanup.ts"],"mappings":";;;KAaY,eAAA;EACV,GAAA;EACA,OAAO;AAAA;AAMT;;;AAAA,iBAAgB,gBAAA,CAAiB,QAA2B,EAAjB,iBAAiB;AAAA,iBA0E5C,uBAAA,CACd,QAAA,EAAU,iBAAA,EACV,KAAA,EAAO,eAAe;AAAA,iBAMR,yBAAA,CACd,QAAA,EAAU,iBAAA,EACV,KAAA,EAAO,eAAe"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-cleanup.js","names":[],"sources":["../../src/runtime/component-cleanup.ts"],"sourcesContent":["/**\n * Component cleanup and owned child-scope bookkeeping.\n */\n\nimport { isDevelopmentEnvironment } from '../common/env';\nimport { logger } from '../common/logger';\nimport type { ComponentInstance } from './component-internal';\nimport {\n clearCurrentComponentScope,\n restoreCurrentComponentScope,\n} from './component-scope';\nimport { cleanupReadableSubscriptions } from './readable';\n\nexport type OwnedChildScope = {\n key: string | number;\n dispose(): void;\n};\n\n/**\n * Clean up component resources on unmount or route changes.\n */\nexport function cleanupComponent(instance: ComponentInstance): void {\n const savedScope = clearCurrentComponentScope();\n\n try {\n const cleanupErrors: unknown[] = [];\n const recordCleanupError = (message: string, err: unknown): void => {\n if (instance.cleanupStrict) {\n cleanupErrors.push(err);\n } else if (isDevelopmentEnvironment()) {\n logger.warn(message, err);\n }\n };\n\n const ownedChildScopes = instance._ownedChildScopes;\n if (ownedChildScopes && ownedChildScopes.size > 0) {\n instance._ownedChildScopes = new Set();\n for (const scope of ownedChildScopes) {\n try {\n scope.dispose();\n } catch (err) {\n recordCleanupError('[Askr] child scope cleanup threw:', err);\n }\n }\n }\n\n const cleanupFns = instance.cleanupFns;\n instance.cleanupFns = [];\n for (const cleanup of cleanupFns) {\n try {\n cleanup();\n } catch (err) {\n recordCleanupError('[Askr] cleanup function threw:', err);\n }\n }\n\n try {\n cleanupReadableSubscriptions(instance);\n } catch (err) {\n recordCleanupError('[Askr] readable subscription cleanup threw:', err);\n }\n\n try {\n if (\n instance.abortController &&\n !instance.abortController.signal.aborted\n ) {\n instance.abortController.abort();\n }\n } catch (err) {\n recordCleanupError('[Askr] abort controller cleanup threw:', err);\n }\n instance.abortController = null;\n\n instance.lifecycleGeneration++;\n instance.evaluationGeneration++;\n instance.mountOperations = [];\n instance.commitOperations = [];\n instance.lifecycleSlots = [];\n instance.hasPendingUpdate = false;\n instance.notifyUpdate = null;\n instance._placeholder = undefined;\n instance.mounted = false;\n\n if (cleanupErrors.length > 0) {\n throw new AggregateError(\n cleanupErrors,\n `Cleanup failed for component ${instance.id}`\n );\n }\n } finally {\n restoreCurrentComponentScope(savedScope);\n }\n}\n\nexport function registerOwnedChildScope(\n instance: ComponentInstance,\n scope: OwnedChildScope\n): void {\n const scopes = (instance._ownedChildScopes ??= new Set());\n scopes.add(scope);\n}\n\nexport function unregisterOwnedChildScope(\n instance: ComponentInstance,\n scope: OwnedChildScope\n): void {\n instance._ownedChildScopes?.delete(scope);\n}\n"],"mappings":";;;;;;;;;;;AAqBA,SAAgB,iBAAiB,UAAmC;CAClE,MAAM,aAAa,2BAA2B;CAE9C,IAAI;EACF,MAAM,gBAA2B,CAAC;EAClC,MAAM,sBAAsB,SAAiB,QAAuB;GAClE,IAAI,SAAS,eACX,cAAc,KAAK,GAAG;QACjB,IAAI,yBAAyB,GAClC,OAAO,KAAK,SAAS,GAAG;EAE5B;EAEA,MAAM,mBAAmB,SAAS;EAClC,IAAI,oBAAoB,iBAAiB,OAAO,GAAG;GACjD,SAAS,oCAAoB,IAAI,IAAI;GACrC,KAAK,MAAM,SAAS,kBAClB,IAAI;IACF,MAAM,QAAQ;GAChB,SAAS,KAAK;IACZ,mBAAmB,qCAAqC,GAAG;GAC7D;EAEJ;EAEA,MAAM,aAAa,SAAS;EAC5B,SAAS,aAAa,CAAC;EACvB,KAAK,MAAM,WAAW,YACpB,IAAI;GACF,QAAQ;EACV,SAAS,KAAK;GACZ,mBAAmB,kCAAkC,GAAG;EAC1D;EAGF,IAAI;GACF,6BAA6B,QAAQ;EACvC,SAAS,KAAK;GACZ,mBAAmB,+CAA+C,GAAG;EACvE;EAEA,IAAI;GACF,IACE,SAAS,mBACT,CAAC,SAAS,gBAAgB,OAAO,SAEjC,SAAS,gBAAgB,MAAM;EAEnC,SAAS,KAAK;GACZ,mBAAmB,0CAA0C,GAAG;EAClE;EACA,SAAS,kBAAkB;EAE3B,SAAS;EACT,SAAS;EACT,SAAS,kBAAkB,CAAC;EAC5B,SAAS,mBAAmB,CAAC;EAC7B,SAAS,iBAAiB,CAAC;EAC3B,SAAS,mBAAmB;EAC5B,SAAS,eAAe;EACxB,SAAS,eAAe;EACxB,SAAS,UAAU;EAEnB,IAAI,cAAc,SAAS,GACzB,MAAM,IAAI,eACR,eACA,gCAAgC,SAAS,IAC3C;CAEJ,UAAU;EACR,6BAA6B,UAAU;CACzC;AACF;AAEA,SAAgB,wBACd,UACA,OACM;CAEN,CADgB,SAAS,sCAAsB,IAAI,IAAI,EACvD,CAAO,IAAI,KAAK;AAClB;AAEA,SAAgB,0BACd,UACA,OACM;CACN,SAAS,mBAAmB,OAAO,KAAK;AAC1C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-commit.js","names":[],"sources":["../../src/runtime/component-commit.ts"],"sourcesContent":["import { isDevelopmentEnvironment } from '../common/env';\nimport { isPromiseLike } from '../common/promise';\nimport { logger } from '../common/logger';\nimport { enqueueRuntimeTask, getRuntimeRenderer } from './access';\nimport {\n beginLifecycleCommitBatch,\n discardCommitOperations,\n discardLifecycleCommitBatch,\n executeCommittedLifecycleOperations,\n flushLifecycleCommitBatch,\n} from './component-lifecycle';\nimport {\n beginRenderTracking,\n enterDomCommitScope,\n restoreDomCommitScope,\n} from './component-scope';\nimport type { ContextFrame } from './context';\nimport { withContext } from './context';\nimport { incDevCounter, setDevValue } from './dev-namespace';\nimport { tryRuntimeFastLaneSync } from './fastlane';\nimport type { ComponentInstance } from './component-internal';\n\nexport interface ScheduledComponentCommitHost {\n execute(instance: ComponentInstance): unknown | Promise<unknown>;\n finalizeReadSubscriptions(instance: ComponentInstance): void;\n warnUnusedStateReads(instance: ComponentInstance): void;\n commitRenderedComponent(instance: ComponentInstance): void;\n}\n\nexport function runScheduledComponent(\n instance: ComponentInstance,\n host: ScheduledComponentCommitHost\n): void {\n instance.notifyUpdate = instance._enqueueRun!;\n beginRenderTracking(instance);\n const domSnapshot = instance.target ? instance.target.innerHTML : '';\n\n let result: unknown | Promise<unknown>;\n try {\n result = host.execute(instance);\n } catch (err) {\n discardCommitOperations(instance);\n throw err;\n }\n\n if (isPromiseLike(result)) {\n throw new Error(\n 'Async components are not supported. Components must be synchronous.'\n );\n }\n\n try {\n const used = tryRuntimeFastLaneSync(instance, result);\n if (used) {\n host.warnUnusedStateReads(instance);\n return;\n }\n } catch (err) {\n if (isDevelopmentEnvironment()) throw err;\n }\n\n enqueueRuntimeTask(() => {\n if (!instance.target && instance._placeholder) {\n commitPlaceholderReplacement(instance, result, host);\n return;\n }\n\n if (instance.target) {\n commitToTarget(instance, result, domSnapshot, host);\n }\n });\n}\n\nfunction commitPlaceholderReplacement(\n instance: ComponentInstance,\n result: unknown,\n host: ScheduledComponentCommitHost\n): void {\n if (result === null || result === undefined) {\n host.finalizeReadSubscriptions(instance);\n host.warnUnusedStateReads(instance);\n host.commitRenderedComponent(instance);\n return;\n }\n\n const placeholder = instance._placeholder!;\n const parent = placeholder.parentNode;\n if (!parent) {\n logger.warn('[Askr] placeholder no longer in DOM, cannot render component');\n return;\n }\n\n const renderer = getRuntimeRenderer();\n const hostElement = document.createElement('div');\n const executionFrame: ContextFrame = {\n parent: instance.ownerFrame,\n values: null,\n };\n\n const oldInstance = enterDomCommitScope(instance);\n const lifecycleBatch = beginLifecycleCommitBatch();\n try {\n try {\n withContext(executionFrame, () => {\n renderer.evaluate(result, hostElement);\n });\n parent.replaceChild(hostElement, placeholder);\n } catch (err) {\n discardLifecycleCommitBatch(lifecycleBatch);\n throw err;\n }\n\n instance.target = hostElement;\n instance._placeholder = undefined;\n (\n hostElement as Element & {\n __ASKR_INSTANCE?: ComponentInstance;\n }\n ).__ASKR_INSTANCE = instance;\n\n flushLifecycleCommitBatch(lifecycleBatch);\n host.finalizeReadSubscriptions(instance);\n host.warnUnusedStateReads(instance);\n host.commitRenderedComponent(instance);\n } finally {\n restoreDomCommitScope(oldInstance);\n }\n}\n\nfunction commitToTarget(\n instance: ComponentInstance,\n result: unknown,\n domSnapshot: string,\n host: ScheduledComponentCommitHost\n): void {\n const renderer = getRuntimeRenderer();\n const target = instance.target!;\n let oldChildren: Node[] = [];\n let restoredOldChildren = false;\n\n try {\n const wasFirstMount = !instance.mounted;\n const oldInstance = enterDomCommitScope(instance);\n const executionFrame: ContextFrame = {\n parent: instance.ownerFrame,\n values: null,\n };\n oldChildren = Array.from(target.childNodes);\n\n const lifecycleBatch = beginLifecycleCommitBatch();\n try {\n try {\n withContext(executionFrame, () => {\n renderer.evaluate(result, target, undefined, instance);\n });\n } catch (err) {\n discardLifecycleCommitBatch(lifecycleBatch);\n throw err;\n }\n } catch (err) {\n cleanupFailedCommitChildren(renderer, target, oldChildren);\n try {\n incDevCounter('__DOM_REPLACE_COUNT');\n setDevValue(\n '__LAST_DOM_REPLACE_STACK_COMPONENT_RESTORE',\n new Error().stack\n );\n } catch (devErr) {\n void devErr;\n }\n target.replaceChildren(...oldChildren);\n restoredOldChildren = true;\n throw err;\n } finally {\n restoreDomCommitScope(oldInstance);\n }\n\n flushLifecycleCommitBatch(lifecycleBatch);\n host.finalizeReadSubscriptions(instance);\n host.warnUnusedStateReads(instance);\n instance.mounted = true;\n executeCommittedLifecycleOperations(instance, wasFirstMount);\n } catch (renderError) {\n discardCommitOperations(instance);\n cleanupRollbackChildren(renderer, target, oldChildren, restoredOldChildren);\n\n try {\n incDevCounter('__DOM_REPLACE_COUNT');\n setDevValue(\n '__LAST_DOM_REPLACE_STACK_COMPONENT_ROLLBACK',\n new Error().stack\n );\n target.replaceChildren(...oldChildren);\n } catch {\n target.innerHTML = domSnapshot;\n }\n\n throw renderError;\n }\n}\n\nfunction cleanupFailedCommitChildren(\n renderer: ReturnType<typeof getRuntimeRenderer>,\n target: Element,\n oldChildren: Node[]\n): void {\n try {\n const newChildren = Array.from(target.childNodes);\n const preservedChildren = new Set(oldChildren);\n for (const node of newChildren) {\n if (preservedChildren.has(node)) {\n continue;\n }\n try {\n renderer.cleanupInstancesUnder(node);\n } catch (err) {\n logger.warn('[Askr] error cleaning up failed commit children:', err);\n }\n }\n } catch (err) {\n void err;\n }\n}\n\nfunction cleanupRollbackChildren(\n renderer: ReturnType<typeof getRuntimeRenderer>,\n target: Element,\n oldChildren: Node[],\n restoredOldChildren: boolean\n): void {\n try {\n const currentChildren = Array.from(target.childNodes);\n const preservedChildren = restoredOldChildren ? new Set(oldChildren) : null;\n for (const node of currentChildren) {\n if (preservedChildren?.has(node)) {\n continue;\n }\n try {\n renderer.cleanupInstancesUnder(node);\n } catch (err) {\n logger.warn(\n '[Askr] error cleaning up partial children during rollback:',\n err\n );\n }\n }\n } catch (err) {\n void err;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-internal.d.ts","names":[],"sources":["../../src/runtime/component-internal.ts"],"mappings":";;;;;;;;;UA2DiB,iBAAA;EACf,EAAA;EACA,EAAA,EAAI,iBAAA;EACJ,KAAA,EAAO,KAAA;EACP,MAAA,EAAQ,OAAA;EACR,cAAA,EAAgB,iBAAA;EAChB,WAAA;EACA,OAAA;EACA,eAAA,EAAiB,eAAA;EACjB,GAAA;EAEA,aAAA;EACA,WAAA,EAAa,KAAA;EACb,oBAAA;EACA,YAAA;EAEA,iBAAA;EACA,eAAA;EACA,WAAA;EACA,eAAA;EACA,oBAAA;EACA,mBAAA;EACA,eAAA,EAAiB,KAAA,6BACa,WAAA;EAE9B,gBAAA,EAAkB,KAAA,6BACY,WAAA;EAE9B,UAAA,EAAY,KAAA;EACZ,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,UAAA,EAAY,YAAA;EACZ,MAAA;EAGA,mBAAA;EACA,eAAA;EACA,mBAAA,GAAsB,GAAA,CAAI,cAAA;EAC1B,0BAAA,GAA6B,GAAA,CAAI,cAAA;EACjC,gBAAA,GAAmB,GAAA,CAAI,cAAA;EACvB,kBAAA,GAAqB,GAAA;EAIrB,YAAA,GAAe,OAAA;EACf,iBAAA,GAAoB,GAAA,CAAI,eAAA;EACxB,kBAAA;IACE,KAAA;IACA,QAAA;IACA,QAAA;EAAA;AAAA;AAAA,iBAIY,uBAAA,CACd,EAAA,UACA,EAAA,EAAI,iBAAA,EACJ,KAAA,EAAO,KAAA,EACP,MAAA,EAAQ,OAAA,UACP,iBAAA;;;;;iBA6Ea,2BAAA,CAA4B,QAA2B,EAAjB,iBAAiB;AAAA,iBAIvD,sBAAA,CAAuB,SAA6B,EAAlB,kBAAkB;AAAA,iBAIpD,uBAAA,CAAwB,SAA6B,EAAlB,kBAAkB;AAAA,iBAIrD,uBAAA,CAAwB,QAA2B,EAAjB,iBAAiB;AAAA,iBAInD,mBAAA,CACd,QAAA,EAAU,iBAAA,EACV,MAAA,EAAQ,OAAO;;;;;;;;iBAuCD,qBAAA,IACd,QAAA,EAAU,iBAAA,EACV,eAAA,UACA,MAAA,QAAc,CAAA,GACb,CAAA;;;;;;iBA6Ba,qBAAA,CACd,QAAA,EAAU,iBAAA,aACC,OAAO;AAAA,iBAwCJ,oBAAA,CAAqB,QAA2B,EAAjB,iBAAiB;;;;;;iBAmGhD,gBAAA,CAAiB,QAA2B,EAAjB,iBAAiB;;;;;;;;;iBAmB5C,yBAAA,CAA0B,QAA2B,EAAjB,iBAAiB;;;;AAhVzD;AAIZ;iBAqVgB,cAAA,CAAe,QAA2B,EAAjB,iBAAiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-internal.js","names":[],"sources":["../../src/runtime/component-internal.ts"],"sourcesContent":["/**\n * Component instance lifecycle management\n * Internal only — users never see this\n */\n\nimport { type State } from './state';\nimport { enqueueRuntimeTask } from './access';\nimport type { Props } from '../common/props';\nimport type { ComponentFunction } from '../common/component';\nimport {\n // withContext is the sole primitive for context restoration\n withContext,\n type ContextFrame,\n} from './context';\nimport { type ReadableSource, finalizeReadableSubscriptions } from './readable';\nimport {\n isDevelopmentEnvironment,\n isProductionEnvironment,\n} from '../common/env';\nimport { logger } from '../common/logger';\nimport { incDevCounter } from './dev-namespace';\nimport {\n cleanupComponent,\n registerOwnedChildScope,\n unregisterOwnedChildScope,\n type OwnedChildScope,\n} from './component-cleanup';\nimport { runScheduledComponent } from './component-commit';\nimport {\n captureInlineRenderSnapshot as captureLifecycleInlineRenderSnapshot,\n commitLifecycleForInstance,\n commitRenderedComponent as commitRenderedLifecycleComponent,\n discardCommitOperations,\n finalizeInlineReadSubscriptions,\n registerCommitOperationForInstance,\n registerMountOperationForInstance,\n type LifecycleOperation,\n} from './component-lifecycle';\nimport {\n beginRenderTracking,\n captureInlineComponentScope,\n captureInlineRenderTracking,\n clearRenderTracking,\n enterComponentExecutionScope,\n enterRenderScopedComponent,\n exitComponentExecutionScope,\n getCurrentComponentInstance,\n getCurrentInstance,\n getCurrentPortalScope,\n getSignalForInstance,\n resetRenderState,\n restoreInlineComponentScope,\n restoreInlineRenderTracking,\n restoreRenderScopedComponent,\n} from './component-scope';\n\nexport type { ComponentFunction } from '../common/component';\nexport { cleanupComponent, registerOwnedChildScope, unregisterOwnedChildScope };\n\nexport interface ComponentInstance {\n id: string;\n fn: ComponentFunction;\n props: Props;\n target: Element | null;\n parentInstance: ComponentInstance | null;\n portalScope: object | null;\n mounted: boolean;\n abortController: AbortController | null; // Lazily created per-component abort lifecycle\n ssr?: boolean; // Set to true for SSR temporary instances\n // Opt-in strict cleanup mode: when true cleanup errors are aggregated and re-thrown\n cleanupStrict?: boolean;\n stateValues: State<unknown>[]; // Persistent state storage across renders\n evaluationGeneration: number; // Prevents stale async evaluation completions\n notifyUpdate: (() => void) | null; // Callback for state updates (persisted on instance)\n // Internal: prebound helpers to avoid per-update closures (allocation hot-path)\n _pendingFlushTask?: () => void; // Clears hasPendingUpdate and triggers notifyUpdate\n _pendingRunTask?: () => void; // Clears hasPendingUpdate and runs component\n _enqueueRun?: () => void; // Batches run requests and enqueues _pendingRunTask\n stateIndexCheck: number; // Track state indices to catch conditional calls\n expectedStateIndices: number[]; // Expected sequence of render-scoped hook indices (frozen after first render)\n firstRenderComplete: boolean; // Flag to detect transition from first to subsequent renders\n mountOperations: Array<\n () => void | (() => void) | PromiseLike<void | (() => void)>\n >; // Operations to run when component mounts\n commitOperations: Array<\n () => void | (() => void) | PromiseLike<void | (() => void)>\n >; // Operations to run after a successful committed render\n cleanupFns: Array<() => void>; // Cleanup functions to run on unmount\n lifecycleSlots: unknown[]; // Render-scoped lifecycle primitive storage\n lifecycleGeneration: number; // Invalidates async mount-operation settlement after disposal\n hasPendingUpdate: boolean; // Flag to batch state updates (coalescing)\n ownerFrame: ContextFrame | null; // Provider chain for this component (set by Scope, never overwritten)\n isRoot?: boolean;\n\n // Render-tracking for precise subscriptions (internal)\n _currentRenderToken?: number; // Token for the in-progress render (set before render)\n lastRenderToken?: number; // Token of the last *committed* render\n _pendingReadSources?: Set<ReadableSource<unknown>>; // Readables read during the in-progress render\n _pendingReadSourceVersions?: Map<ReadableSource<unknown>, number>; // Source versions captured during the in-progress render\n _lastReadSources?: Set<ReadableSource<unknown>>; // Readables read during the last committed render\n devWarningsEmitted?: Set<string>; // Dev-only warning dedupe for this instance\n\n // Placeholder for null-returning components. When a component initially returns\n // null, we create a comment placeholder so updates can replace it with content.\n _placeholder?: Comment;\n _ownedChildScopes?: Set<OwnedChildScope>;\n errorBoundaryState?: {\n error: unknown | null;\n resetKey: unknown;\n notified: boolean;\n };\n}\n\nexport function createComponentInstance(\n id: string,\n fn: ComponentFunction,\n props: Props,\n target: Element | null\n): ComponentInstance {\n const parentInstance = getCurrentInstance();\n const portalScope = parentInstance?.portalScope ?? getCurrentPortalScope();\n const instance: ComponentInstance = {\n id,\n fn,\n props,\n target,\n parentInstance,\n portalScope: portalScope ?? null,\n mounted: false,\n abortController: null,\n stateValues: [],\n evaluationGeneration: 0,\n notifyUpdate: null,\n // Prebound helpers (initialized below) to avoid per-update allocations\n _pendingFlushTask: undefined,\n _pendingRunTask: undefined,\n _enqueueRun: undefined,\n stateIndexCheck: -1,\n expectedStateIndices: [],\n firstRenderComplete: false,\n mountOperations: [],\n commitOperations: [],\n cleanupFns: [],\n lifecycleSlots: [],\n lifecycleGeneration: 0,\n hasPendingUpdate: false,\n ownerFrame: null, // Will be set by renderer when vnode is marked\n ssr: false,\n cleanupStrict: false,\n isRoot: false,\n\n // Render-tracking (for precise state subscriptions)\n _currentRenderToken: undefined,\n lastRenderToken: 0,\n _pendingReadSources: undefined,\n _pendingReadSourceVersions: undefined,\n _lastReadSources: undefined,\n devWarningsEmitted: undefined,\n };\n\n // Initialize prebound helper tasks once per instance to avoid allocations\n instance._pendingRunTask = () => {\n // Clear pending flag when the run task executes\n instance.hasPendingUpdate = false;\n if (instance.notifyUpdate === null) {\n return;\n }\n // Execute component run (will set up notifyUpdate before render)\n runScheduledComponent(instance, {\n execute: executeComponentSync,\n finalizeReadSubscriptions,\n warnUnusedStateReads,\n commitRenderedComponent,\n });\n };\n\n instance._enqueueRun = () => {\n if (!instance.hasPendingUpdate) {\n instance.hasPendingUpdate = true;\n // Enqueue single run task (coalesces multiple writes)\n enqueueRuntimeTask(instance._pendingRunTask!);\n }\n };\n\n // Default state-driven updates enqueue the run task directly. Specialized\n // runtimes (for example `For` item instances) can still override this hook.\n instance._pendingFlushTask = instance._pendingRunTask;\n\n return instance;\n}\n\n/**\n * Register a mount operation that will run after the component is mounted\n * Used by operations (task, on, timer, etc) to execute after render completes\n */\nexport function captureInlineRenderSnapshot(instance: ComponentInstance): void {\n captureLifecycleInlineRenderSnapshot(instance);\n}\n\nexport function registerMountOperation(operation: LifecycleOperation): void {\n registerMountOperationForInstance(getCurrentComponentInstance(), operation);\n}\n\nexport function registerCommitOperation(operation: LifecycleOperation): void {\n registerCommitOperationForInstance(getCurrentComponentInstance(), operation);\n}\n\nexport function commitRenderedComponent(instance: ComponentInstance): void {\n commitRenderedLifecycleComponent(instance);\n}\n\nexport function mountInstanceInline(\n instance: ComponentInstance,\n target: Element | null\n): void {\n instance.target = target;\n // Record backref on host element so renderer can clean up when the\n // node is removed. Avoids leaks if the node is detached or replaced.\n try {\n if (target instanceof Element) {\n const host = target as Element & {\n __ASKR_INSTANCE?: ComponentInstance;\n __ASKR_INSTANCES?: ComponentInstance[];\n };\n const instances = host.__ASKR_INSTANCES ?? [];\n const nextInstances = instances.filter((entry) => entry !== instance);\n nextInstances.push(instance);\n host.__ASKR_INSTANCES = nextInstances;\n host.__ASKR_INSTANCE = nextInstances[0] ?? instance;\n }\n } catch (err) {\n void err;\n }\n\n // Ensure notifyUpdate is available for async resource completions that may\n // try to trigger re-render. This mirrors the setup in executeComponent().\n // Use prebound enqueue helper to avoid allocating a new closure\n instance.notifyUpdate = instance._enqueueRun!;\n\n const wasFirstMount = !instance.mounted;\n instance.mounted = true;\n commitLifecycleForInstance(instance, wasFirstMount);\n}\n\n/**\n * Run a component synchronously: execute function, handle result\n * This is the internal workhorse that manages async continuations and generation tracking.\n * Must always be called through the scheduler.\n *\n * ACTOR INVARIANT: This function is enqueued as a task, never called directly.\n */\n\nexport function renderScopedComponent<T>(\n instance: ComponentInstance,\n startStateIndex: number,\n render: () => T\n): T {\n instance.notifyUpdate = instance._enqueueRun!;\n resetRenderState(instance);\n beginRenderTracking(instance);\n const savedScope = enterRenderScopedComponent(instance, startStateIndex);\n\n let didComplete = false;\n\n try {\n const executionFrame: ContextFrame = {\n parent: instance.ownerFrame,\n values: null,\n };\n const result = withContext(executionFrame, render);\n didComplete = true;\n return result;\n } finally {\n if (!didComplete) {\n clearRenderTracking(instance);\n }\n restoreRenderScopedComponent(savedScope);\n }\n}\n\n/**\n * Execute a component's render function synchronously.\n * Returns either a vnode/promise immediately (does NOT render).\n * Rendering happens separately through the scheduled commit helper.\n */\nexport function renderComponentInline(\n instance: ComponentInstance\n): unknown | Promise<unknown> {\n // Reused inline instances can cross renderer cleanup boundaries while their\n // host node is retained. Make sure state writes still enqueue this instance.\n instance.notifyUpdate = instance._enqueueRun!;\n\n // Ensure inline executions (rendered during parent's evaluate) still\n // receive a render token and have their state reads finalized so\n // subscriptions are correctly recorded. If this function is called\n // as part of a scheduled run, the token will already be set by\n // runComponent and we should not overwrite it.\n const trackingSnapshot = captureInlineRenderTracking(instance);\n const scopeSnapshot = captureInlineComponentScope();\n const hadToken = trackingSnapshot.currentRenderToken !== undefined;\n\n if (!hadToken) {\n beginRenderTracking(instance);\n }\n\n try {\n const result = executeComponentSync(instance);\n // If we set the token for inline execution, finalize subscriptions now\n // unless the parent DOM commit is still provisional. Renderer commit\n // batches flush these reads only after DOM evaluation succeeds.\n if (!hadToken) {\n finalizeInlineReadSubscriptions(\n instance,\n instance._currentRenderToken!,\n instance._pendingReadSources,\n instance._pendingReadSourceVersions\n );\n }\n commitRenderedComponent(instance);\n return result;\n } finally {\n // Restore previous token/read states for nested inline render scenarios\n restoreInlineRenderTracking(instance, trackingSnapshot);\n restoreInlineComponentScope(scopeSnapshot);\n }\n}\n\nexport function warnUnusedStateReads(instance: ComponentInstance): void {\n for (let i = 0; i < instance.stateValues.length; i++) {\n const state = instance.stateValues[i];\n const hasCommittedUsage =\n (state?._readers?.size ?? 0) > 0 ||\n ((state as { _derivedSubscribers?: Set<unknown> } | undefined)\n ?._derivedSubscribers?.size ?? 0) > 0;\n\n if (\n state &&\n !state._hasBeenRead &&\n !state._hasEverBeenRead &&\n !hasCommittedUsage\n ) {\n try {\n const name = instance.fn?.name || '<anonymous>';\n warnInstanceOnce(\n instance,\n `unused-state:${i}`,\n `[askr] Unused state variable detected in ${name} at index ${i}. State should be read during render or removed.`\n );\n } catch {\n warnInstanceOnce(\n instance,\n `unused-state:${i}`,\n `[askr] Unused state variable detected. State should be read during render or removed.`\n );\n }\n }\n }\n}\n\nfunction executeComponentSync(\n instance: ComponentInstance\n): unknown | Promise<unknown> {\n resetRenderState(instance);\n incDevCounter('componentRuns');\n incDevCounter('componentReruns');\n\n const savedPortalScope = enterComponentExecutionScope(instance);\n\n let didComplete = false;\n\n try {\n // Track render time in dev mode\n const renderStartTime = isDevelopmentEnvironment() ? Date.now() : 0;\n\n // Create context object with abort signal\n const context = {\n get signal(): AbortSignal {\n return getSignalForInstance(instance);\n },\n };\n\n // Execute component within its owner frame (provider chain).\n // This ensures all context reads see the correct provider values.\n // We create a new execution frame whose parent is the ownerFrame. The\n // `values` map is lazily allocated to avoid per-render Map allocations\n // for components that do not use context.\n const executionFrame: ContextFrame = {\n parent: instance.ownerFrame,\n values: null,\n };\n const result = withContext(executionFrame, () =>\n instance.fn(instance.props, context)\n );\n\n // Check render time\n const renderTime = Date.now() - renderStartTime;\n if (renderTime > 5) {\n warnInstanceOnce(\n instance,\n 'slow-render',\n `[askr] Slow render detected: ${renderTime}ms. Consider optimizing component performance.`\n );\n }\n\n // Mark first render complete after successful execution\n // This enables hook order validation on subsequent renders\n if (!instance.firstRenderComplete) {\n instance.firstRenderComplete = true;\n }\n\n didComplete = true;\n return result;\n } finally {\n if (!didComplete) {\n discardCommitOperations(instance);\n }\n // Synchronous path: we did not push a fresh frame, so nothing to pop here.\n exitComponentExecutionScope(savedPortalScope);\n }\n}\n\n/**\n * Public entry point: Execute component with full lifecycle (execute + render)\n * Handles both initial mount and re-execution. Always enqueues through scheduler.\n * Single entry point to avoid lifecycle divergence.\n */\nexport function executeComponent(instance: ComponentInstance): void {\n // Lazily recreate abort controller only when signal is actually requested.\n instance.abortController = null;\n\n // Setup notifyUpdate callback using prebound helper to avoid per-call closures\n instance.notifyUpdate = instance._enqueueRun!;\n\n // Enqueue the initial component run\n enqueueRuntimeTask(instance._pendingRunTask!);\n}\n\n/**\n * Finalize read subscriptions for an instance after a successful commit.\n * - Update per-state readers map to point to this instance's last committed token\n * - Remove this instance from states it no longer reads\n * This is deterministic and runs synchronously with commit to ensure\n * subscribers are only notified when they actually read a state in their\n * last committed render.\n */\nexport function finalizeReadSubscriptions(instance: ComponentInstance): void {\n finalizeReadableSubscriptions(instance);\n}\n\n/**\n * Mount a component instance.\n * This is just an alias to executeComponent() to maintain API compatibility.\n * All lifecycle logic is unified in executeComponent().\n */\nexport function mountComponent(instance: ComponentInstance): void {\n executeComponent(instance);\n}\n\nfunction warnInstanceOnce(\n instance: ComponentInstance,\n key: string,\n message: string\n): void {\n if (isProductionEnvironment()) return;\n const warnings = (instance.devWarningsEmitted ??= new Set());\n if (warnings.has(key)) return;\n warnings.add(key);\n logger.warn(message);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-lifecycle.d.ts","names":[],"sources":["../../src/runtime/component-lifecycle.ts"],"mappings":";;;;;;KAYY,kBAAA,+BAGR,WAAW;AAAA,KAEV,yBAAA;EACH,QAAA,EAAU,iBAAiB;EAC3B,aAAA;AAAA;AAAA,KAGG,sBAAA;EACH,QAAA,EAAU,iBAAA;EACV,KAAA;EACA,kBAAA,EAAoB,GAAA,CAAI,cAAA;EACxB,yBAAA,EAA2B,GAAA,CAAI,cAAA;AAAA;AAAA,KAG5B,oBAAA;EACH,QAAA,EAAU,iBAAA;EACV,KAAA,EAAO,KAAA;EACP,UAAA,EAAY,YAAA;EACZ,WAAA;EACA,cAAA,EAAgB,iBAAA;EAChB,MAAA;AAAA;AAAA,KAGU,oBAAA;EACV,MAAA,EAAQ,oBAAA;EACR,OAAA,EAAS,yBAAA;EACT,iBAAA,EAAmB,GAAA,CAAI,iBAAA,EAAmB,yBAAA;EAC1C,WAAA,EAAa,sBAAA;EACb,qBAAA,EAAuB,GAAA,CAAI,iBAAA,EAAmB,sBAAA;EAC9C,eAAA,EAAiB,oBAAA;EACjB,yBAAA,EAA2B,GAAA,CAAI,iBAAA,EAAmB,oBAAA;EAClD,MAAA;AAAA;AAAA,iBAKc,yBAAA,IAA6B,oBAAoB;AAAA,iBAkFjD,2BAAA,CAA4B,QAA2B,EAAjB,iBAAiB;AAAA,iBAevD,+BAAA,CACd,QAAA,EAAU,iBAAA,EACV,KAAA,UACA,kBAAA,EAAoB,GAAA,CAAI,cAAA,wBACxB,yBAAA,EAA2B,GAAA,CAAI,cAAA;AAAA,iBAqBjB,yBAAA,CAA0B,KAA2B,EAApB,oBAAoB;AAAA,iBAsCrD,2BAAA,CAA4B,KAA2B,EAApB,oBAAoB;AAAA,iBAsBvD,iCAAA,CACd,QAAA,EAAU,iBAAA,SACV,SAAA,EAAW,kBAAkB;AAAA,iBAkBf,kCAAA,CACd,QAAA,EAAU,iBAAA,SACV,SAAA,EAAW,kBAAkB;AAAA,iBA6Ef,uBAAA,CAAwB,QAA2B,EAAjB,iBAAiB;AAAA,iBAInD,mCAAA,CACd,QAAA,EAAU,iBAAiB,EAC3B,aAAA;AAAA,iBAUc,0BAAA,CACd,QAAA,EAAU,iBAAiB,EAC3B,aAAA;AAAA,iBAcc,uBAAA,CAAwB,QAA2B,EAAjB,iBAAiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-lifecycle.js","names":[],"sources":["../../src/runtime/component-lifecycle.ts"],"sourcesContent":["import { isDevelopmentEnvironment } from '../common/env';\nimport { isPromiseLike } from '../common/promise';\nimport type { Props } from '../common/props';\nimport { logger } from '../common/logger';\nimport type { ContextFrame } from './context';\nimport type { ComponentInstance } from './component-internal';\nimport { isBulkCommitActive } from './fastlane';\nimport {\n type ReadableSource,\n finalizeReadableSubscriptionsFromSnapshot,\n} from './readable';\n\nexport type LifecycleOperation = () =>\n | void\n | (() => void)\n | PromiseLike<void | (() => void)>;\n\ntype LifecycleCommitBatchEntry = {\n instance: ComponentInstance;\n wasFirstMount: boolean;\n};\n\ntype ReadSubscriptionCommit = {\n instance: ComponentInstance;\n token: number;\n pendingReadSources: Set<ReadableSource<unknown>> | undefined;\n pendingReadSourceVersions: Map<ReadableSource<unknown>, number> | undefined;\n};\n\ntype InlineRenderSnapshot = {\n instance: ComponentInstance;\n props: Props;\n ownerFrame: ContextFrame | null;\n portalScope: object | null;\n parentInstance: ComponentInstance | null;\n isRoot: boolean | undefined;\n};\n\nexport type LifecycleCommitBatch = {\n parent: LifecycleCommitBatch | null;\n entries: LifecycleCommitBatchEntry[];\n entriesByInstance: Map<ComponentInstance, LifecycleCommitBatchEntry>;\n readCommits: ReadSubscriptionCommit[];\n readCommitsByInstance: Map<ComponentInstance, ReadSubscriptionCommit>;\n renderSnapshots: InlineRenderSnapshot[];\n renderSnapshotsByInstance: Map<ComponentInstance, InlineRenderSnapshot>;\n active: boolean;\n};\n\nlet currentLifecycleCommitBatch: LifecycleCommitBatch | null = null;\n\nexport function beginLifecycleCommitBatch(): LifecycleCommitBatch {\n const batch: LifecycleCommitBatch = {\n parent: currentLifecycleCommitBatch,\n entries: [],\n entriesByInstance: new Map(),\n readCommits: [],\n readCommitsByInstance: new Map(),\n renderSnapshots: [],\n renderSnapshotsByInstance: new Map(),\n active: true,\n };\n currentLifecycleCommitBatch = batch;\n return batch;\n}\n\nfunction closeLifecycleCommitBatch(batch: LifecycleCommitBatch): boolean {\n if (!batch.active) {\n return false;\n }\n\n batch.active = false;\n currentLifecycleCommitBatch = batch.parent;\n return true;\n}\n\nfunction enqueueLifecycleCommit(\n batch: LifecycleCommitBatch,\n instance: ComponentInstance,\n wasFirstMount: boolean\n): void {\n const existing = batch.entriesByInstance.get(instance);\n if (existing) {\n existing.wasFirstMount = existing.wasFirstMount || wasFirstMount;\n return;\n }\n\n const entry = { instance, wasFirstMount };\n batch.entriesByInstance.set(instance, entry);\n batch.entries.push(entry);\n}\n\nfunction enqueueReadSubscriptionCommit(\n batch: LifecycleCommitBatch,\n instance: ComponentInstance,\n token: number,\n pendingReadSources: Set<ReadableSource<unknown>> | undefined,\n pendingReadSourceVersions: Map<ReadableSource<unknown>, number> | undefined\n): void {\n const existing = batch.readCommitsByInstance.get(instance);\n const commit = existing ?? {\n instance,\n token,\n pendingReadSources,\n pendingReadSourceVersions,\n };\n\n commit.token = token;\n commit.pendingReadSources = pendingReadSources\n ? new Set(pendingReadSources)\n : undefined;\n commit.pendingReadSourceVersions = pendingReadSourceVersions\n ? new Map(pendingReadSourceVersions)\n : undefined;\n\n if (!existing) {\n batch.readCommitsByInstance.set(instance, commit);\n batch.readCommits.push(commit);\n }\n}\n\nfunction enqueueInlineRenderSnapshot(\n batch: LifecycleCommitBatch,\n snapshot: InlineRenderSnapshot\n): void {\n if (batch.renderSnapshotsByInstance.has(snapshot.instance)) {\n return;\n }\n\n batch.renderSnapshotsByInstance.set(snapshot.instance, snapshot);\n batch.renderSnapshots.push(snapshot);\n}\n\nexport function captureInlineRenderSnapshot(instance: ComponentInstance): void {\n if (!currentLifecycleCommitBatch?.active) {\n return;\n }\n\n enqueueInlineRenderSnapshot(currentLifecycleCommitBatch, {\n instance,\n props: instance.props,\n ownerFrame: instance.ownerFrame,\n portalScope: instance.portalScope,\n parentInstance: instance.parentInstance,\n isRoot: instance.isRoot,\n });\n}\n\nexport function finalizeInlineReadSubscriptions(\n instance: ComponentInstance,\n token: number,\n pendingReadSources: Set<ReadableSource<unknown>> | undefined,\n pendingReadSourceVersions: Map<ReadableSource<unknown>, number> | undefined\n): void {\n if (currentLifecycleCommitBatch?.active) {\n enqueueReadSubscriptionCommit(\n currentLifecycleCommitBatch,\n instance,\n token,\n pendingReadSources,\n pendingReadSourceVersions\n );\n return;\n }\n\n finalizeReadableSubscriptionsFromSnapshot(\n instance,\n token,\n pendingReadSources,\n pendingReadSourceVersions\n );\n}\n\nexport function flushLifecycleCommitBatch(batch: LifecycleCommitBatch): void {\n if (!closeLifecycleCommitBatch(batch)) {\n return;\n }\n\n if (batch.parent?.active) {\n for (const snapshot of batch.renderSnapshots) {\n enqueueInlineRenderSnapshot(batch.parent, snapshot);\n }\n for (const commit of batch.readCommits) {\n enqueueReadSubscriptionCommit(\n batch.parent,\n commit.instance,\n commit.token,\n commit.pendingReadSources,\n commit.pendingReadSourceVersions\n );\n }\n for (const entry of batch.entries) {\n enqueueLifecycleCommit(batch.parent, entry.instance, entry.wasFirstMount);\n }\n return;\n }\n\n for (const commit of batch.readCommits) {\n finalizeReadableSubscriptionsFromSnapshot(\n commit.instance,\n commit.token,\n commit.pendingReadSources,\n commit.pendingReadSourceVersions\n );\n }\n\n for (const entry of batch.entries) {\n executeCommittedLifecycleOperations(entry.instance, entry.wasFirstMount);\n }\n}\n\nexport function discardLifecycleCommitBatch(batch: LifecycleCommitBatch): void {\n if (!closeLifecycleCommitBatch(batch)) {\n return;\n }\n\n for (let index = batch.renderSnapshots.length - 1; index >= 0; index -= 1) {\n const snapshot = batch.renderSnapshots[index]!;\n snapshot.instance.props = snapshot.props;\n snapshot.instance.ownerFrame = snapshot.ownerFrame;\n snapshot.instance.portalScope = snapshot.portalScope;\n snapshot.instance.parentInstance = snapshot.parentInstance;\n snapshot.instance.isRoot = snapshot.isRoot;\n }\n\n for (const entry of batch.entries) {\n if (entry.wasFirstMount) {\n entry.instance.mountOperations = [];\n }\n discardCommitOperations(entry.instance);\n }\n}\n\nexport function registerMountOperationForInstance(\n instance: ComponentInstance | null,\n operation: LifecycleOperation\n): void {\n if (instance) {\n // If we're in bulk-commit fast lane, registering mount operations is a\n // violation of the fast-lane preconditions. Throw in dev, otherwise ignore\n // silently in production (we must avoid scheduling work during bulk commit).\n if (isBulkCommitActive()) {\n if (isDevelopmentEnvironment()) {\n throw new Error(\n 'registerMountOperation called during bulk commit fast-lane'\n );\n }\n return;\n }\n instance.mountOperations.push(operation);\n }\n}\n\nexport function registerCommitOperationForInstance(\n instance: ComponentInstance | null,\n operation: LifecycleOperation\n): void {\n if (instance) {\n if (isBulkCommitActive()) {\n if (isDevelopmentEnvironment()) {\n throw new Error(\n 'registerCommitOperation called during bulk commit fast-lane'\n );\n }\n return;\n }\n instance.commitOperations.push(operation);\n }\n}\n\nfunction settleLifecycleOperationResult(\n instance: ComponentInstance,\n lifecycleGeneration: number,\n result: void | (() => void) | PromiseLike<void | (() => void)>\n): void {\n if (isPromiseLike(result)) {\n Promise.resolve(result).then(\n (cleanup) => {\n if (typeof cleanup === 'function') {\n if (\n instance.lifecycleGeneration === lifecycleGeneration &&\n instance.mounted\n ) {\n instance.cleanupFns.push(cleanup);\n return;\n }\n\n try {\n cleanup();\n } catch (err) {\n logger.error('[Askr] async mount cleanup failed:', err);\n }\n }\n },\n (err) => {\n logger.error('[Askr] async mount operation failed:', err);\n }\n );\n } else if (typeof result === 'function') {\n instance.cleanupFns.push(result);\n }\n}\n\nfunction executeMountOperations(instance: ComponentInstance): void {\n const mountOperations = instance.mountOperations;\n if (mountOperations.length === 0) {\n return;\n }\n\n const lifecycleGeneration = instance.lifecycleGeneration;\n\n for (const operation of mountOperations) {\n settleLifecycleOperationResult(instance, lifecycleGeneration, operation());\n }\n // Clear the operations array so they don't run again on subsequent renders\n instance.mountOperations = [];\n}\n\nfunction executeCommitOperations(instance: ComponentInstance): void {\n const commitOperations = instance.commitOperations;\n if (commitOperations.length === 0) {\n return;\n }\n\n instance.commitOperations = [];\n const lifecycleGeneration = instance.lifecycleGeneration;\n\n for (const operation of commitOperations) {\n settleLifecycleOperationResult(instance, lifecycleGeneration, operation());\n }\n}\n\nexport function discardCommitOperations(instance: ComponentInstance): void {\n instance.commitOperations = [];\n}\n\nexport function executeCommittedLifecycleOperations(\n instance: ComponentInstance,\n wasFirstMount: boolean\n): void {\n if (wasFirstMount && instance.mountOperations.length > 0) {\n executeMountOperations(instance);\n }\n if (instance.commitOperations.length > 0) {\n executeCommitOperations(instance);\n }\n}\n\nexport function commitLifecycleForInstance(\n instance: ComponentInstance,\n wasFirstMount: boolean\n): void {\n if (currentLifecycleCommitBatch) {\n enqueueLifecycleCommit(\n currentLifecycleCommitBatch,\n instance,\n wasFirstMount\n );\n return;\n }\n\n executeCommittedLifecycleOperations(instance, wasFirstMount);\n}\n\nexport function commitRenderedComponent(instance: ComponentInstance): void {\n if (instance.mounted && instance.commitOperations.length > 0) {\n commitLifecycleForInstance(instance, false);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-scope.d.ts","names":[],"sources":["../../src/runtime/component-scope.ts"],"mappings":";;;;KASK,sBAAA;EACH,QAAA,EAAU,iBAAiB;EAC3B,WAAA;EACA,UAAA;AAAA;AAAA,KAGG,2BAAA;EACH,QAAA,EAAU,iBAAiB;EAC3B,WAAA;AAAA;AAAA,KAGG,4BAAA;EACH,kBAAA;EACA,kBAAA,EAAoB,GAAA,CAAI,cAAA;EACxB,yBAAA,EAA2B,GAAA,CAAI,cAAA;AAAA;AAAA,iBA0CjB,2BAAA,IAA+B,iBAAiB;AAAA,iBAIhD,kBAAA,IAAsB,iBAAiB;AAAA,iBAIvC,2BAAA,CACd,QAAkC,EAAxB,iBAAiB;AAAA,iBAMb,qBAAA;AAAA,iBAIA,oBAAA,CAAqB,QAAA,EAAU,iBAAA,GAAoB,WAAW;;;;;;;;;iBAY9D,SAAA,IAAa,WAAW;AAAA,iBAUxB,gBAAA,CAAiB,QAA2B,EAAjB,iBAAiB;AAAA,iBAa5C,mBAAA,CAAoB,QAA2B,EAAjB,iBAAiB;AAAA,iBAM/C,mBAAA,CAAoB,QAA2B,EAAjB,iBAAiB;AAAA,iBAM/C,2BAAA,CACd,QAAA,EAAU,iBAAA,GACT,4BAA4B;AAAA,iBAQf,2BAAA,CACd,QAAA,EAAU,iBAAA,EACV,QAAA,EAAU,4BAA4B;AAAA,iBAOxB,0BAAA,CACd,QAAA,EAAU,iBAAA,EACV,eAAA,WACC,sBAAsB;AAAA,iBAQT,4BAAA,CACd,QAAgC,EAAtB,sBAAsB;AAAA,iBAKlB,2BAAA,IAA+B,2BAA2B;AAAA,iBAI1D,2BAAA,CACd,QAAqC,EAA3B,2BAA2B;AAAA,iBAMvB,4BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBASb,2BAAA,CACd,gBAA+B;AAAA,iBAMjB,mBAAA,CACd,QAAA,EAAU,iBAAA,GACT,iBAAiB;AAAA,iBAMJ,qBAAA,CACd,gBAA0C,EAAxB,iBAAiB;AAAA,iBAKrB,0BAAA,IAA8B,sBAAsB;AAAA,iBAOpD,4BAAA,CACd,QAAgC,EAAtB,sBAAsB;AAAA,iBAKlB,iBAAA;AAAA,iBAIA,cAAA,CACd,QAAA,EAAU,iBAAiB,EAC3B,QAAA;AAAA,iBAgCc,oBAAA;AAAA,iBAIA,eAAA;AAAA,iBAIA,aAAA,CAAc,KAAa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-scope.js","names":[],"sources":["../../src/runtime/component-scope.ts"],"sourcesContent":["/**\n * Component render scope and hook cursor ownership.\n * Internal helpers in this module intentionally keep mutable render-scope\n * state out of component execution and cleanup orchestration.\n */\n\nimport type { ReadableSource } from './readable';\nimport type { ComponentInstance } from './component-internal';\n\ntype ComponentScopeSnapshot = {\n instance: ComponentInstance | null;\n portalScope: object | null;\n stateIndex: number;\n};\n\ntype InstancePortalScopeSnapshot = {\n instance: ComponentInstance | null;\n portalScope: object | null;\n};\n\ntype InlineRenderTrackingSnapshot = {\n currentRenderToken: number | undefined;\n pendingReadSources: Set<ReadableSource<unknown>> | undefined;\n pendingReadSourceVersions: Map<ReadableSource<unknown>, number> | undefined;\n};\n\nlet currentInstance: ComponentInstance | null = null;\nlet currentPortalScope: object | null = null;\nlet stateIndex = 0;\nlet globalRenderCounter = 0;\n\nfunction ensureAbortController(instance: ComponentInstance): AbortController {\n let controller = instance.abortController;\n if (!controller || controller.signal.aborted) {\n controller = new AbortController();\n instance.abortController = controller;\n }\n return controller;\n}\n\nfunction nextRenderToken(): number {\n return ++globalRenderCounter;\n}\n\nfunction captureScope(): ComponentScopeSnapshot {\n return {\n instance: currentInstance,\n portalScope: currentPortalScope,\n stateIndex,\n };\n}\n\nfunction restoreScope(snapshot: ComponentScopeSnapshot): void {\n currentInstance = snapshot.instance;\n currentPortalScope = snapshot.portalScope;\n stateIndex = snapshot.stateIndex;\n}\n\nfunction captureInstancePortalScope(): InstancePortalScopeSnapshot {\n return {\n instance: currentInstance,\n portalScope: currentPortalScope,\n };\n}\n\nexport function getCurrentComponentInstance(): ComponentInstance | null {\n return currentInstance;\n}\n\nexport function getCurrentInstance(): ComponentInstance | null {\n return currentInstance;\n}\n\nexport function setCurrentComponentInstance(\n instance: ComponentInstance | null\n): void {\n currentInstance = instance;\n currentPortalScope = instance?.portalScope ?? null;\n}\n\nexport function getCurrentPortalScope(): object | null {\n return currentInstance?.portalScope ?? currentPortalScope;\n}\n\nexport function getSignalForInstance(instance: ComponentInstance): AbortSignal {\n return ensureAbortController(instance).signal;\n}\n\n/**\n * Get the abort signal for the current component.\n *\n * The signal is guaranteed to be aborted when:\n * - Component unmounts\n * - Navigation occurs (different route)\n * - Parent is destroyed\n */\nexport function getSignal(): AbortSignal {\n if (!currentInstance) {\n throw new Error(\n 'getSignal() can only be called during component render execution. ' +\n 'Ensure you are calling this from inside your component function.'\n );\n }\n return getSignalForInstance(currentInstance);\n}\n\nexport function resetRenderState(instance: ComponentInstance): void {\n instance.stateIndexCheck = -1;\n\n for (const state of instance.stateValues) {\n if (state) {\n state._hasBeenRead = false;\n }\n }\n\n instance._pendingReadSources = undefined;\n instance._pendingReadSourceVersions = undefined;\n}\n\nexport function beginRenderTracking(instance: ComponentInstance): void {\n instance._currentRenderToken = nextRenderToken();\n instance._pendingReadSources = undefined;\n instance._pendingReadSourceVersions = undefined;\n}\n\nexport function clearRenderTracking(instance: ComponentInstance): void {\n instance._pendingReadSources = undefined;\n instance._pendingReadSourceVersions = undefined;\n instance._currentRenderToken = undefined;\n}\n\nexport function captureInlineRenderTracking(\n instance: ComponentInstance\n): InlineRenderTrackingSnapshot {\n return {\n currentRenderToken: instance._currentRenderToken,\n pendingReadSources: instance._pendingReadSources,\n pendingReadSourceVersions: instance._pendingReadSourceVersions,\n };\n}\n\nexport function restoreInlineRenderTracking(\n instance: ComponentInstance,\n snapshot: InlineRenderTrackingSnapshot\n): void {\n instance._currentRenderToken = snapshot.currentRenderToken;\n instance._pendingReadSources = snapshot.pendingReadSources;\n instance._pendingReadSourceVersions = snapshot.pendingReadSourceVersions;\n}\n\nexport function enterRenderScopedComponent(\n instance: ComponentInstance,\n startStateIndex: number\n): ComponentScopeSnapshot {\n const savedScope = captureScope();\n currentInstance = instance;\n currentPortalScope = instance.portalScope ?? savedScope.portalScope;\n stateIndex = startStateIndex;\n return savedScope;\n}\n\nexport function restoreRenderScopedComponent(\n snapshot: ComponentScopeSnapshot\n): void {\n restoreScope(snapshot);\n}\n\nexport function captureInlineComponentScope(): InstancePortalScopeSnapshot {\n return captureInstancePortalScope();\n}\n\nexport function restoreInlineComponentScope(\n snapshot: InstancePortalScopeSnapshot\n): void {\n currentInstance = snapshot.instance;\n currentPortalScope = snapshot.portalScope;\n}\n\nexport function enterComponentExecutionScope(\n instance: ComponentInstance\n): object | null {\n const savedPortalScope = currentPortalScope;\n currentInstance = instance;\n currentPortalScope = instance.portalScope ?? savedPortalScope;\n stateIndex = 0;\n return savedPortalScope;\n}\n\nexport function exitComponentExecutionScope(\n savedPortalScope: object | null\n): void {\n currentInstance = null;\n currentPortalScope = savedPortalScope;\n}\n\nexport function enterDomCommitScope(\n instance: ComponentInstance\n): ComponentInstance | null {\n const previousInstance = currentInstance;\n currentInstance = instance;\n return previousInstance;\n}\n\nexport function restoreDomCommitScope(\n previousInstance: ComponentInstance | null\n): void {\n currentInstance = previousInstance;\n}\n\nexport function clearCurrentComponentScope(): ComponentScopeSnapshot {\n const savedScope = captureScope();\n currentInstance = null;\n currentPortalScope = null;\n return savedScope;\n}\n\nexport function restoreCurrentComponentScope(\n snapshot: ComponentScopeSnapshot\n): void {\n restoreScope(snapshot);\n}\n\nexport function getNextStateIndex(): number {\n return stateIndex++;\n}\n\nexport function claimHookIndex(\n instance: ComponentInstance,\n hookName: string\n): number {\n const index = getNextStateIndex();\n\n if (index < instance.stateIndexCheck) {\n throw new Error(\n `Hook index violation: ${hookName}() call at index ${index}, ` +\n `but previously saw index ${instance.stateIndexCheck}. ` +\n `This happens when render-scoped hooks are called conditionally (inside if/for/etc). ` +\n `Move all ${hookName}() calls to the top level of your component function, ` +\n `before any conditionals.`\n );\n }\n\n instance.stateIndexCheck = index;\n\n if (instance.firstRenderComplete) {\n if (instance.expectedStateIndices[index] !== index) {\n throw new Error(\n `Hook order violation: ${hookName}() called at index ${index}, ` +\n `but this index was not in the first render's sequence [${instance.expectedStateIndices.join(', ')}]. ` +\n `This usually means ${hookName}() is inside a conditional or loop. ` +\n `Move all render-scoped hooks to the top level of your component function.`\n );\n }\n } else {\n instance.expectedStateIndices.push(index);\n }\n\n return index;\n}\n\nexport function getCurrentStateIndex(): number {\n return stateIndex;\n}\n\nexport function resetStateIndex(): void {\n stateIndex = 0;\n}\n\nexport function setStateIndex(value: number): void {\n stateIndex = value;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","names":[],"sources":["../../src/runtime/context.ts"],"mappings":";;;;KA6BY,UAAA;AAAA,KAEP,UAAA,GAAa,eAAe;AAAA,KAC5B,oBAAA,GAAuB,UAAA,UAAoB,UAAU;AAAA,UAEzC,OAAA;EAAA,SACN,GAAA,EAAK,UAAA;EAAA,SACL,YAAA,EAAc,CAAA;EAAA,SAEd,KAAA,GAAQ,KAAA;IACf,KAAA,EAAO,CAAA;IACP,QAAA,GAAW,oBAAA;EAAA,MACP,UAAA;AAAA;AAAA,UAGS,YAAA;EACf,MAAA,EAAQ,YAAA;EAER,MAAA,EAAQ,GAAA,CAAI,UAAA;AAAA;AAAA,cAID,oBAAA;AAAA,iBAQG,oBAAA,CAAqB,IAAA,YAAgB,YAAY;AAAA,iBASjD,yBAAA,CACd,IAAA,WACA,KAAA,EAAO,YAAY,EACnB,SAAA;AAAA,iBAsEc,6BAAA,CACd,IAAA,WACA,KAAA,EAAO,YAAY,SACnB,SAAA;AAvGgB;AAGlB;;;;;;;;;;AAHkB,iBAsKF,WAAA,IAAe,KAAA,EAAO,YAAA,SAAqB,EAAA,QAAU,CAAA,GAAI,CAAA;;;;AAhKjD;AAIxB;;;;AAAmE;iBA+KnD,wBAAA,IACd,KAAA,EAAO,YAAA,SACP,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAYa,aAAA,IAAiB,YAAA,EAAc,CAAA,GAAI,OAAA,CAAQ,CAAA;AAAA,iBAiD3C,WAAA,IAAe,OAAA,EAAS,OAAA,CAAQ,CAAA,IAAK,CAAA;;AAvOY;AASjE;;iBA6WgB,gBAAA,IAAoB,YAAY;;;;;iBAgBhC,eAAA;;AA1XG;AAsEnB;iBA6TgB,sBAAA,IAA0B,YAAY;;;;;iBAQtC,qBAAA,IAAyB,YAAY"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../src/runtime/context.ts"],"sourcesContent":["/**\n * Context system: lexical scope + render-time snapshots\n *\n * CORE SEMANTIC (Option A — Snapshot-Based):\n * ============================================\n * An async resource observes the context of the render that created it.\n * Context changes only take effect via re-render, not magically mid-await.\n *\n * This ensures:\n * - Deterministic behavior\n * - Concurrency safety\n * - Replayable execution\n * - Debuggability\n *\n * INVARIANTS:\n * - readContext() only works during component render (has currentContextFrame)\n * - Each render captures a context snapshot\n * - Async continuations see the snapshot from render start (frozen)\n * - Provider (Scope) creates a new frame that shadows parent\n * - Context updates require re-render to take effect\n */\n\nimport type { JSXElement } from '../common/jsx';\nimport { ELEMENT_TYPE, STATIC_CHILDREN } from '../common/jsx';\nimport type { Props } from '../common/props';\nimport type { RenderableChild } from '../common/vnode';\nimport { getCurrentComponentInstance } from './component';\nimport type { ComponentInstance } from './component';\n\nexport type ContextKey = symbol;\n\ntype Renderable = RenderableChild;\ntype ContextScopeChildren = Renderable | (() => Renderable);\n\nexport interface Context<T> {\n readonly key: ContextKey;\n readonly defaultValue: T;\n // A Scope is a JSX-style element factory returning a JSXElement (component invocation)\n readonly Scope: (props: {\n value: T;\n children?: ContextScopeChildren;\n }) => JSXElement;\n}\n\nexport interface ContextFrame {\n parent: ContextFrame | null;\n // Lazily allocate `values` Map only when a provider sets values or a read occurs.\n values: Map<ContextKey, unknown> | null;\n}\n\n// Symbol to mark vnodes that need frame restoration\nexport const CONTEXT_FRAME_SYMBOL = Symbol('__tempoContextFrame__');\n\ntype ContextFrameCarrier = {\n [CONTEXT_FRAME_SYMBOL]?: ContextFrame;\n};\n\nconst vnodeContextFrames = new WeakMap<object, ContextFrame>();\n\nexport function getVNodeContextFrame(node: unknown): ContextFrame | undefined {\n if (typeof node !== 'object' || node === null) {\n return undefined;\n }\n\n const objectNode = node as ContextFrameCarrier;\n return vnodeContextFrames.get(node) ?? objectNode[CONTEXT_FRAME_SYMBOL];\n}\n\nexport function markVNodeWithContextFrame(\n node: unknown,\n frame: ContextFrame,\n overwrite = false\n): void {\n if (typeof node !== 'object' || node === null) {\n return;\n }\n\n if (!overwrite && getVNodeContextFrame(node)) {\n return;\n }\n\n const objectNode = node as ContextFrameCarrier;\n if (Object.prototype.hasOwnProperty.call(node, CONTEXT_FRAME_SYMBOL)) {\n try {\n objectNode[CONTEXT_FRAME_SYMBOL] = frame;\n return;\n } catch {\n // Fall through to WeakMap metadata when the symbol slot is readonly.\n }\n }\n\n if (Object.isExtensible(node)) {\n try {\n Object.defineProperty(node, CONTEXT_FRAME_SYMBOL, {\n value: frame,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n return;\n } catch {\n // Fall through to WeakMap metadata for exotic objects/proxies.\n }\n }\n\n vnodeContextFrames.set(node, frame);\n}\n\nfunction isVNodeLike(value: unknown): boolean {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n\n const objectValue = value as Record<string | symbol, unknown>;\n if (objectValue.$$typeof === ELEMENT_TYPE) {\n return true;\n }\n\n return (\n 'type' in objectValue &&\n ('props' in objectValue || 'children' in objectValue)\n );\n}\n\nfunction markContextPropValue(\n value: unknown,\n frame: ContextFrame,\n overwrite: boolean\n): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n markContextPropValue(item, frame, overwrite);\n }\n return;\n }\n\n if (isVNodeLike(value)) {\n markVNodeTreeWithContextFrame(value, frame, overwrite);\n }\n}\n\nexport function markVNodeTreeWithContextFrame(\n node: unknown,\n frame: ContextFrame | null,\n overwrite = false\n): unknown {\n if (!frame) return node;\n\n if (Array.isArray(node)) {\n for (const child of node) {\n markVNodeTreeWithContextFrame(child, frame, overwrite);\n }\n return node;\n }\n\n if (typeof node !== 'object' || node === null) {\n return node;\n }\n\n markVNodeWithContextFrame(node, frame, overwrite);\n\n const objectNode = node as Record<string | symbol, unknown>;\n const props =\n typeof objectNode.props === 'object' && objectNode.props !== null\n ? (objectNode.props as Record<string, unknown>)\n : null;\n const children = (props?.children ?? objectNode.children) as unknown;\n\n if (Array.isArray(children)) {\n for (const child of children) {\n markVNodeTreeWithContextFrame(child, frame, overwrite);\n }\n } else if (children) {\n markVNodeTreeWithContextFrame(children, frame, overwrite);\n }\n\n if (props) {\n for (const key in props) {\n if (key !== 'children') {\n markContextPropValue(props[key], frame, overwrite);\n }\n }\n }\n\n return node;\n}\n\n// Global context frame stack (maintained during render)\n// INVARIANT: Must NEVER be non-null across an await boundary\nlet currentContextFrame: ContextFrame | null = null;\n\n// Async resource frame (maintained during async resource execution)\n// INVARIANT: Set only for synchronous execution steps, cleared in finally\n// This allows async resources to access their frozen render-time snapshot\nlet currentAsyncResourceFrame: ContextFrame | null = null;\n\n/**\n * Execute a function within a specific context frame.\n *\n * CORE PRIMITIVE for context restoration:\n * - Saves the current context\n * - Sets the provided frame as current\n * - Executes the function\n * - Restores the previous context in finally\n *\n * This ensures no context frame remains globally active across await.\n */\nexport function withContext<T>(frame: ContextFrame | null, fn: () => T): T {\n const oldFrame = currentContextFrame;\n currentContextFrame = frame;\n try {\n return fn();\n } finally {\n currentContextFrame = oldFrame;\n }\n}\n\n/**\n * Execute an async resource step within its frozen context snapshot.\n *\n * CRITICAL: This wrapper is applied only to synchronous execution steps of\n * an async resource (the initial call). We intentionally DO NOT restore\n * the resource frame for post-await continuations — continuations must not\n * observe or rely on a live resource frame. This keeps semantics simple and\n * deterministic: async resources see only their creation-time snapshot.\n */\nexport function withAsyncResourceContext<T>(\n frame: ContextFrame | null,\n fn: () => T\n): T {\n const oldFrame = currentAsyncResourceFrame;\n // Only set the frame for the synchronous execution step\n currentAsyncResourceFrame = frame;\n try {\n return fn();\n } finally {\n // Clear the frame to avoid exposing it across await boundaries\n currentAsyncResourceFrame = oldFrame;\n }\n}\n\nexport function defineContext<T>(defaultValue: T): Context<T> {\n const key = Symbol('AskrContext');\n\n return {\n key,\n defaultValue,\n Scope: (props: {\n value: T;\n children?: ContextScopeChildren;\n }): JSXElement => {\n const value = props.value;\n // Scope component: creates a new frame and renders children within it\n return {\n $$typeof: ELEMENT_TYPE,\n type: ContextScopeComponent,\n props: { key, value, children: props.children },\n key: null,\n } as JSXElement;\n },\n };\n}\n\nfunction preserveStaticChildrenMarker(\n source: readonly unknown[],\n target: unknown[]\n): unknown[] {\n if (\n (\n source as {\n [STATIC_CHILDREN]?: boolean;\n }\n )[STATIC_CHILDREN] === true\n ) {\n Object.defineProperty(target, STATIC_CHILDREN, {\n value: true,\n enumerable: false,\n configurable: true,\n });\n }\n\n return target;\n}\n\nfunction isPresentRenderable(\n value: Renderable | null | undefined\n): value is Renderable {\n return value !== null && value !== undefined && value !== false;\n}\n\nexport function readContext<T>(context: Context<T>): T {\n // Check render frame first (components), then async resource frame (resources)\n const frame = currentContextFrame || currentAsyncResourceFrame;\n\n if (!frame) {\n throw new Error(\n 'readContext() can only be called during component render or async resource execution. ' +\n 'Ensure you are calling this from inside your component or resource function.'\n );\n }\n\n let current: ContextFrame | null = frame;\n while (current) {\n // `values` may be null when no provider has created it yet — treat as empty\n const values = current.values;\n if (values && values.has(context.key)) {\n return values.get(context.key) as T;\n }\n current = current.parent;\n }\n return context.defaultValue;\n}\n\n/**\n * Internal component that manages context frame\n * Used by Context.Scope to provide shadowed value to children\n */\nfunction ContextScopeComponent(props: Props): Renderable {\n // Extract expected properties (we accept a loose shape so this can be used as a component type)\n const key = props['key'] as ContextKey;\n const value = props['value'];\n const children = props['children'] as ContextScopeChildren;\n\n // Create a new frame with this value\n const instance = getCurrentComponentInstance();\n const parentFrame: ContextFrame | null = (() => {\n // Prefer the live render frame.\n // Note: the runtime executes component functions inside an empty \"render frame\"\n // whose parent points at the nearest provider chain. Even if this frame has no\n // values, it must still be used to preserve the parent linkage.\n if (currentContextFrame) return currentContextFrame;\n\n // If there is no live render frame (should be rare), fall back to the\n // instance's owner frame.\n if (instance && instance.ownerFrame) return instance.ownerFrame;\n\n // Do NOT fall back to the async snapshot stack here: that stack represents\n // unrelated async continuations and must not affect lexical provider chaining.\n return null;\n })();\n\n const newFrame: ContextFrame = {\n parent: parentFrame,\n values: new Map([[key, value]]),\n };\n\n // Helper: create a function-child invoker node (centralized cast)\n function createFunctionChildInvoker(\n fn: () => Renderable,\n frame: ContextFrame,\n owner: ComponentInstance | null\n ): Renderable {\n return {\n type: ContextFunctionChildInvoker,\n props: { fn, __frame: frame, __owner: owner },\n } as unknown as Renderable;\n }\n\n // The renderer will set ownerFrame on child component instances when they're created.\n // We mark vnodes with the frame so the renderer knows which frame to assign.\n if (Array.isArray(children)) {\n // Mark array elements with the frame. If an element is a function-child,\n // convert it into a lazy invoker so it's executed later inside the frame.\n return preserveStaticChildrenMarker(\n children,\n children.map((child) => {\n if (typeof child === 'function') {\n return createFunctionChildInvoker(\n child as () => Renderable,\n newFrame,\n getCurrentComponentInstance()\n );\n }\n return markWithFrame(child, newFrame);\n })\n ) as unknown as Renderable;\n } else if (typeof children === 'function') {\n // If children is a function (render callback), do NOT execute it eagerly\n // during the parent render. Instead, return a small internal component\n // that will execute the function later (when it itself is rendered) and\n // will execute it within the provider frame so any reads performed during\n // that execution observe the provider's frame.\n return createFunctionChildInvoker(\n children as () => Renderable,\n newFrame,\n getCurrentComponentInstance()\n );\n } else if (isPresentRenderable(children)) {\n return markWithFrame(children, newFrame);\n }\n\n return null;\n}\n\n/**\n * Internal: Mark a vnode with a context frame\n * The renderer will restore this frame before executing component functions\n */\nfunction markWithFrame(node: Renderable, frame: ContextFrame): Renderable {\n return markVNodeTreeWithContextFrame(node, frame, true) as Renderable;\n}\n\n/**\n * Internal helper component: executes a function-child lazily inside the\n * provided frame and marks the returned subtree with that frame so later\n * component executions will restore the correct context frame.\n *\n * SNAPSHOT SEMANTIC: The frame passed here is the snapshot captured at render\n * time. Any resources created during this execution will observe this frozen\n * snapshot, ensuring deterministic behavior.\n */\nfunction ContextFunctionChildInvoker(props: {\n fn: () => Renderable;\n __frame: ContextFrame;\n __owner?: ComponentInstance | null;\n}): Renderable {\n const { fn, __frame } = props;\n\n // Execute the function-child within the provider frame.\n // The owner's ownerFrame is already set by the renderer when the component was created.\n // Any resources started during this execution will capture this frame as their\n // snapshot, ensuring they see the context values from this render, not future renders.\n const res = withContext(__frame, () => fn());\n\n // Mark the result so the renderer knows to set ownerFrame on child instances\n if (isPresentRenderable(res)) return markWithFrame(res, __frame);\n return null;\n}\n\n/**\n * Push a new context frame (for render entry)\n * Called by component runtime when render starts\n */\nexport function pushContextFrame(): ContextFrame {\n // Lazily allocate the `values` map to avoid per-render allocations when\n // components do not use context. The map will be created when a provider\n // sets a value or when a read discovers no map and needs to behave as empty.\n const frame: ContextFrame = {\n parent: currentContextFrame,\n values: null,\n };\n currentContextFrame = frame;\n return frame;\n}\n\n/**\n * Pop context frame (for render exit)\n * Called by component runtime when render ends\n */\nexport function popContextFrame(): void {\n if (currentContextFrame) {\n currentContextFrame = currentContextFrame.parent;\n }\n}\n\n/**\n * Get the current context frame for inspection (used by tests/diagnostics only)\n */\nexport function getCurrentContextFrame(): ContextFrame | null {\n return currentContextFrame;\n}\n\n/**\n * Get the top of the context snapshot stack (used by runtime when deciding\n * how to link snapshots for async continuations). Returns null if stack empty.\n */\nexport function getTopContextSnapshot(): ContextFrame | null {\n return currentContextFrame;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","names":[],"sources":["../../src/runtime/control.ts"],"mappings":";;;;;;UASiB,WAAA;EACf,GAAA;EACA,MAAA,QAAc,KAAK;EACnB,IAAA;AAAA;AAAA,UAGQ,sBAAA;EACR,SAAA;EACA,WAAA,EAAa,UAAA;EACb,YAAA,EAAc,KAAA;EACd,gBAAA,EAAkB,IAAA;EAClB,cAAA,EAAgB,iBAAA;EAChB,sBAAA;EACA,yBAAA;AAAA;AAAA,UAGe,SAAA,SAAkB,sBAAA;EACjC,IAAA;EACA,aAAA,EAAe,UAAA;EACf,cAAA,SAAuB,KAAA;EACvB,YAAA,IAAgB,KAAA,cAAmB,KAAA,WAAgB,KAAA;EACnD,aAAA;EACA,WAAA,EAAa,UAAA;AAAA;AAAA,UAGE,SAAA,SAAkB,sBAAA;EACjC,IAAA;EACA,QAAA,SAAiB,KAAA;EACjB,OAAA,EAAS,WAAA;AAAA;AAAA,KAGC,oBAAA,GAAuB,QAAA,YAAoB,SAAA,GAAY,SAAA;AAAA,iBAkCnD,eAAA,CACd,KAAA,WACA,YAAA,EAAc,SAAA,kBACd,cAAA,EAAgB,SAAA,qBACf,SAAA;AAAA,iBAkBa,iBAAA,CAAkB,KAAA,EAAO,SAAA,GAAY,KAAK;AAAA,iBAiD1C,uBAAA,CAAwB,KAAgB,EAAT,SAAS;AAAA,iBAUxC,eAAA,CACd,OAAA,EAAS,WAAA,IACT,QAAA,SAAiB,KAAA,WAChB,SAAA;AAAA,iBAea,iBAAA,CAAkB,KAAA,EAAO,SAAA,GAAY,KAAK;AAAA,iBAiC1C,uBAAA,CAAwB,KAAgB,EAAT,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","names":[],"sources":["../../src/runtime/control.ts"],"sourcesContent":["import type { VNode } from '../common/vnode';\nimport {\n createChildScope,\n disposeChildScope,\n type ChildScope,\n} from './child-scope';\nimport { getCurrentInstance, type ComponentInstance } from './component';\nimport type { ForState } from './for';\n\nexport interface MatchBranch {\n key: string | number;\n render: () => VNode;\n when: unknown;\n}\n\ninterface BranchControlStateBase {\n activeKey: string | number | null;\n activeScope: ChildScope | null;\n activeVNodes: VNode[];\n lastRemovedNodes: Node[];\n parentInstance: ComponentInstance | null;\n _enqueueBoundaryCommit?: (() => void) | null;\n _hasPendingBoundaryCommit?: boolean;\n}\n\nexport interface ShowState extends BranchControlStateBase {\n kind: 'show';\n fallbackScope: ChildScope | null;\n renderFallback: (() => VNode) | null;\n renderTruthy: ((value: unknown) => VNode) | (() => VNode);\n selectedValue: unknown;\n truthyScope: ChildScope | null;\n}\n\nexport interface CaseState extends BranchControlStateBase {\n kind: 'case';\n fallback: (() => VNode) | null;\n matches: MatchBranch[];\n}\n\nexport type ControlBoundaryState = ForState<unknown> | ShowState | CaseState;\n\nconst SHOW_TRUTHY_KEY = '__show-truthy__';\nconst SHOW_FALLBACK_KEY = '__show-fallback__';\nconst CASE_FALLBACK_KEY = '__case-fallback__';\n\nfunction disposeBranchScope(\n state: BranchControlStateBase,\n scope: ChildScope | null\n): void {\n if (!scope) {\n return;\n }\n const removedDom = scope.dom;\n disposeChildScope(scope);\n if (removedDom) {\n state.lastRemovedNodes.push(removedDom);\n }\n}\n\nfunction createBranchScope(\n state: BranchControlStateBase,\n key: string | number\n): ChildScope {\n return createChildScope(state.parentInstance, key, () => {\n if (state._enqueueBoundaryCommit) {\n state._enqueueBoundaryCommit();\n return;\n }\n\n state.parentInstance?._enqueueRun?.();\n });\n}\n\nexport function createShowState(\n value: unknown,\n renderTruthy: ShowState['renderTruthy'],\n renderFallback: ShowState['renderFallback']\n): ShowState {\n return {\n kind: 'show',\n activeKey: null,\n activeScope: null,\n activeVNodes: [],\n fallbackScope: null,\n lastRemovedNodes: [],\n parentInstance: getCurrentInstance(),\n _enqueueBoundaryCommit: null,\n _hasPendingBoundaryCommit: false,\n renderFallback,\n renderTruthy,\n selectedValue: value,\n truthyScope: null,\n };\n}\n\nexport function evaluateShowState(state: ShowState): VNode[] {\n state.lastRemovedNodes = [];\n\n if (state.selectedValue) {\n if (state.fallbackScope) {\n disposeBranchScope(state, state.fallbackScope);\n state.fallbackScope = null;\n }\n\n const truthyScope =\n state.truthyScope ?? createBranchScope(state, SHOW_TRUTHY_KEY);\n state.truthyScope = truthyScope;\n state.activeScope = truthyScope;\n state.activeKey = SHOW_TRUTHY_KEY;\n\n const vnode = truthyScope.render(() =>\n state.renderTruthy(state.selectedValue)\n );\n state.activeVNodes = vnode == null || vnode === false ? [] : [vnode];\n return state.activeVNodes;\n }\n\n if (state.truthyScope) {\n disposeBranchScope(state, state.truthyScope);\n state.truthyScope = null;\n }\n\n if (!state.renderFallback) {\n if (state.fallbackScope) {\n disposeBranchScope(state, state.fallbackScope);\n state.fallbackScope = null;\n }\n state.activeKey = null;\n state.activeScope = null;\n state.activeVNodes = [];\n return state.activeVNodes;\n }\n\n const fallbackScope =\n state.fallbackScope ?? createBranchScope(state, SHOW_FALLBACK_KEY);\n state.fallbackScope = fallbackScope;\n state.activeScope = fallbackScope;\n state.activeKey = SHOW_FALLBACK_KEY;\n\n const vnode = fallbackScope.render(state.renderFallback);\n state.activeVNodes = vnode == null || vnode === false ? [] : [vnode];\n return state.activeVNodes;\n}\n\nexport function clearShowDomUpdateState(state: ShowState): void {\n if (state.truthyScope) {\n state.truthyScope.needsDomUpdate = false;\n }\n if (state.fallbackScope) {\n state.fallbackScope.needsDomUpdate = false;\n }\n state.lastRemovedNodes = [];\n}\n\nexport function createCaseState(\n matches: MatchBranch[],\n fallback: (() => VNode) | null\n): CaseState {\n return {\n kind: 'case',\n activeKey: null,\n activeScope: null,\n activeVNodes: [],\n fallback,\n lastRemovedNodes: [],\n matches,\n parentInstance: getCurrentInstance(),\n _enqueueBoundaryCommit: null,\n _hasPendingBoundaryCommit: false,\n };\n}\n\nexport function evaluateCaseState(state: CaseState): VNode[] {\n state.lastRemovedNodes = [];\n\n const selectedMatch =\n state.matches.find((candidate) => Boolean(candidate.when)) ?? null;\n const nextKey =\n selectedMatch?.key ?? (state.fallback ? CASE_FALLBACK_KEY : null);\n\n if (nextKey === null) {\n if (state.activeScope) {\n disposeBranchScope(state, state.activeScope);\n }\n state.activeKey = null;\n state.activeScope = null;\n state.activeVNodes = [];\n return state.activeVNodes;\n }\n\n if (state.activeScope && state.activeKey !== nextKey) {\n disposeBranchScope(state, state.activeScope);\n state.activeScope = null;\n }\n\n const activeScope = state.activeScope ?? createBranchScope(state, nextKey);\n state.activeKey = nextKey;\n state.activeScope = activeScope;\n\n const renderBranch = selectedMatch?.render ?? state.fallback;\n const vnode = renderBranch ? activeScope.render(renderBranch) : null;\n state.activeVNodes = vnode == null || vnode === false ? [] : [vnode];\n return state.activeVNodes;\n}\n\nexport function clearCaseDomUpdateState(state: CaseState): void {\n if (state.activeScope) {\n state.activeScope.needsDomUpdate = false;\n }\n state.lastRemovedNodes = [];\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive.d.ts","names":[],"sources":["../../src/runtime/derive.ts"],"mappings":";;;;UAmBiB,OAAA,YAAmB,cAAA,CAAe,CAAA;EAAA,IAC7C,CAAA;AAAA;AAAA,KAkBD,cAAA;EACH,KAAA,EAAO,CAAA;EACP,OAAA;EACA,KAAA,GAAQ,KAAA;AAAA,IACN,mBAAA;AAAA,iBAgMY,MAAA,OAAa,EAAA,QAAU,IAAA,GAAO,OAAA,CAAQ,IAAA;AAAA,iBAEtC,MAAA,YACd,MAAA,EAAQ,cAAA,CAAe,GAAA,IAAO,GAAA,UAAa,GAAA,GAC3C,GAAA,GAAM,KAAA,EAAO,GAAA,KAAQ,IAAA,GACpB,OAAA,CAAQ,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","names":[],"sources":["../../src/runtime/derive.ts"],"sourcesContent":["import {\n claimHookIndex,\n getCurrentInstance,\n type ComponentInstance,\n} from './component';\nimport { enqueueRuntimeLane, getRuntimeFlushVersion } from './access';\nimport {\n clearDerivedDependencySubscriptions,\n markReadableDerivedSubscribersDirty,\n markReactivePropsDirtySource,\n notifyReadableReaders,\n recordReadableRead,\n syncDerivedDependencySubscriptions,\n type DerivedSubscriber,\n type ReadableSource,\n withDerivedReadTracking,\n} from './readable';\nimport { isSnapshotSource, type SnapshotSourceBrand } from './snapshot-source';\n\nexport interface Derived<T> extends ReadableSource<T> {\n (): T;\n}\n\ninterface DerivedCell<T> extends Derived<T>, DerivedSubscriber {\n _owner: ComponentInstance;\n _hookIndex: number;\n _compute: () => T;\n _value: T;\n _hasValue: boolean;\n _dirty: boolean;\n _scheduled: boolean;\n _evaluating: boolean;\n _lastRecomputeFlushVersion: number;\n _sources: Set<ReadableSource<unknown>>;\n _pendingDependencySources?: Set<ReadableSource<unknown>>;\n _cleanup(): void;\n}\n\ntype SnapshotSource<T> = {\n value: T | null;\n pending?: boolean;\n error?: Error | null;\n} & SnapshotSourceBrand;\n\nconst deriveCells = new WeakMap<\n ComponentInstance,\n Map<number, DerivedCell<unknown>>\n>();\nconst dirtyDerivedCells = new Set<DerivedCell<unknown>>();\nlet hasPendingDerivedFlush = false;\n\nfunction getDeriveStore(\n instance: ComponentInstance\n): Map<number, DerivedCell<unknown>> {\n let store = deriveCells.get(instance);\n if (!store) {\n store = new Map();\n deriveCells.set(instance, store);\n }\n return store;\n}\n\nfunction markDerivedCellDirty(cell: DerivedCell<unknown>): void {\n cell._dirty = true;\n if (cell._scheduled) {\n return;\n }\n\n cell._scheduled = true;\n dirtyDerivedCells.add(cell);\n\n if (!hasPendingDerivedFlush) {\n hasPendingDerivedFlush = true;\n enqueueRuntimeLane('derived', flushDirtyDerivedCells);\n }\n}\n\nfunction flushDirtyDerivedCells(): void {\n hasPendingDerivedFlush = false;\n\n if (dirtyDerivedCells.size === 0) {\n return;\n }\n\n const pending = dirtyDerivedCells.values();\n let next = pending.next();\n\n while (!next.done) {\n const cell = next.value as DerivedCell<unknown>;\n dirtyDerivedCells.delete(cell);\n cell._scheduled = false;\n if (!cell._dirty) {\n next = pending.next();\n continue;\n }\n recomputeDerivedCell(cell, true);\n next = pending.next();\n }\n}\n\nfunction recomputeDerivedCell<T>(\n cell: DerivedCell<T>,\n notifyDownstream: boolean\n): T {\n if (!cell._dirty && cell._hasValue) {\n return cell._value;\n }\n\n if (cell._evaluating) {\n throw new Error('derive() cannot read itself recursively');\n }\n\n cell._evaluating = true;\n cell._dirty = false;\n cell._pendingDependencySources = new Set();\n\n const prevSources = cell._sources;\n let nextValue: T;\n\n try {\n nextValue = withDerivedReadTracking(cell, cell._compute);\n } catch (error) {\n cell._dirty = true;\n cell._pendingDependencySources = undefined;\n throw error;\n } finally {\n cell._evaluating = false;\n }\n\n const nextSources = cell._pendingDependencySources ?? new Set();\n cell._pendingDependencySources = undefined;\n syncDerivedDependencySubscriptions(cell, prevSources, nextSources);\n cell._sources = nextSources;\n\n const valueChanged = !cell._hasValue || !Object.is(cell._value, nextValue);\n cell._hasValue = true;\n cell._value = nextValue;\n cell._lastRecomputeFlushVersion = getRuntimeFlushVersion();\n\n if (valueChanged && notifyDownstream) {\n markReadableDerivedSubscribersDirty(cell);\n markReactivePropsDirtySource(cell);\n notifyReadableReaders(cell);\n }\n\n return cell._value;\n}\n\nfunction createDerivedCell<T>(\n instance: ComponentInstance,\n hookIndex: number,\n compute: () => T\n): DerivedCell<T> {\n const cell = function derivedGetter(): T {\n recordReadableRead(cell as DerivedCell<T>);\n return recomputeDerivedCell(\n cell as DerivedCell<T>,\n (cell as DerivedCell<T>)._scheduled\n );\n } as DerivedCell<T>;\n\n cell._owner = instance;\n cell._hookIndex = hookIndex;\n cell._compute = compute;\n cell._value = undefined as T;\n cell._hasValue = false;\n cell._dirty = true;\n cell._scheduled = false;\n cell._evaluating = false;\n cell._lastRecomputeFlushVersion = -1;\n cell._sources = new Set();\n cell._markDirty = () => {\n markDerivedCellDirty(cell);\n };\n cell._cleanup = () => {\n cell._scheduled = false;\n cell._dirty = false;\n cell._hasValue = false;\n dirtyDerivedCells.delete(cell);\n clearDerivedDependencySubscriptions(cell, cell._sources);\n cell._derivedSubscribers?.clear();\n cell._readers?.clear();\n };\n\n (instance.cleanupFns ??= []).push(() => {\n cell._cleanup();\n deriveCells.get(instance)?.delete(hookIndex);\n });\n\n return cell;\n}\n\nfunction getOrCreateDerivedCell<T>(\n instance: ComponentInstance,\n hookIndex: number,\n compute: () => T\n): DerivedCell<T> {\n const store = getDeriveStore(instance);\n const existing = store.get(hookIndex) as DerivedCell<T> | undefined;\n if (existing) {\n existing._compute = compute;\n if (existing._lastRecomputeFlushVersion !== getRuntimeFlushVersion()) {\n existing._dirty = true;\n }\n return existing;\n }\n\n const created = createDerivedCell(instance, hookIndex, compute);\n store.set(hookIndex, created as DerivedCell<unknown>);\n return created;\n}\n\nfunction createMappedSelector<TIn, TOut>(\n source: SnapshotSource<TIn> | TIn | (() => TIn),\n map: (value: TIn) => TOut\n): () => TOut | null {\n return () => {\n let value: TIn;\n if (typeof source === 'function') {\n value = (source as () => TIn)();\n } else if (isSnapshotSource(source)) {\n value = (source as SnapshotSource<TIn>).value ?? (source as TIn);\n } else {\n value = source as TIn;\n }\n\n if (value == null) {\n return null;\n }\n\n return map(value);\n };\n}\n\nexport function derive<TOut>(fn: () => TOut): Derived<TOut>;\n\nexport function derive<TIn, TOut>(\n source: SnapshotSource<TIn> | TIn | (() => TIn),\n map: (value: TIn) => TOut\n): Derived<TOut | null>;\n\nexport function derive<TIn, TOut>(\n source: SnapshotSource<TIn> | TIn | (() => TIn),\n map?: (value: TIn) => TOut\n): Derived<TOut | null> | Derived<TIn> {\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error(\n 'derive() can only be called during component render execution. ' +\n 'Move derive() calls to the top level of your component function.'\n );\n }\n\n const hookIndex = claimHookIndex(instance, 'derive');\n const compute =\n map === undefined\n ? () => (source as () => TIn)()\n : createMappedSelector(source, map);\n\n const cell = getOrCreateDerivedCell(\n instance,\n hookIndex,\n compute as () => TOut | null | TIn\n );\n recomputeDerivedCell(cell, false);\n return cell as Derived<TOut | null> | Derived<TIn>;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-namespace.d.ts","names":[],"sources":["../../src/runtime/dev-namespace.ts"],"mappings":";;;;;;AAS0B;KAArB,YAAA,GAAe,MAAM;;;;AAMqB;iBAA/B,eAAA,IAAmB,YAAY;;;;iBAc/B,WAAA,CAAY,GAAA,UAAa,KAAc;AAYvD;;;AAAA,iBAAgB,WAAA,IAAe,GAAA,WAAc,CAAC;;;;iBAY9B,cAAA,CAAe,GAAW;AAZI;AAY9C;;;AAZ8C,iBAyB9B,aAAA,CAAc,GAAW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-namespace.js","names":[],"sources":["../../src/runtime/dev-namespace.ts"],"sourcesContent":["/**\n * Dev-only namespace helpers for diagnostics\n *\n * Centralizes the repetitive globalThis.__ASKR__ access pattern\n * used throughout runtime for dev-mode diagnostics.\n */\n\nimport { isProductionEnvironment } from '../common/env';\n\ntype DevNamespace = Record<string, unknown>;\n\n/**\n * Get or create the __ASKR__ dev namespace on globalThis.\n * Returns empty object in production to avoid allocations.\n */\nexport function getDevNamespace(): DevNamespace {\n if (isProductionEnvironment()) return {};\n try {\n const g = globalThis as unknown as Record<string, DevNamespace>;\n if (!g.__ASKR__) g.__ASKR__ = {};\n return g.__ASKR__;\n } catch {\n return {};\n }\n}\n\n/**\n * Set a value in the dev namespace (no-op in production).\n */\nexport function setDevValue(key: string, value: unknown): void {\n if (isProductionEnvironment()) return;\n try {\n getDevNamespace()[key] = value;\n } catch {\n // ignore\n }\n}\n\n/**\n * Get a value from the dev namespace (returns undefined in production).\n */\nexport function getDevValue<T>(key: string): T | undefined {\n if (isProductionEnvironment()) return undefined;\n try {\n return getDevNamespace()[key] as T | undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Delete a value from the dev namespace (no-op in production).\n */\nexport function deleteDevValue(key: string): void {\n if (isProductionEnvironment()) return;\n try {\n delete getDevNamespace()[key];\n } catch {\n // ignore\n }\n}\n\n/**\n * Increment a counter in the dev namespace (no-op in production).\n * Safely handles non-number values by resetting to 1.\n */\nexport function incDevCounter(key: string): void {\n if (isProductionEnvironment()) return;\n try {\n const ns = getDevNamespace();\n const prev = typeof ns[key] === 'number' ? (ns[key] as number) : 0;\n ns[key] = prev + 1;\n } catch {\n // ignore\n }\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAgB,kBAAgC;CAC9C,IAAI,wBAAwB,GAAG,OAAO,CAAC;CACvC,IAAI;EACF,MAAM,IAAI;EACV,IAAI,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC;EAC/B,OAAO,EAAE;CACX,QAAQ;EACN,OAAO,CAAC;CACV;AACF;;;;AAKA,SAAgB,YAAY,KAAa,OAAsB;CAC7D,IAAI,wBAAwB,GAAG;CAC/B,IAAI;EACF,gBAAgB,CAAC,CAAC,OAAO;CAC3B,QAAQ,CAER;AACF;;;;AAKA,SAAgB,YAAe,KAA4B;CACzD,IAAI,wBAAwB,GAAG,OAAO;CACtC,IAAI;EACF,OAAO,gBAAgB,CAAC,CAAC;CAC3B,QAAQ;EACN;CACF;AACF;;;;;AAkBA,SAAgB,cAAc,KAAmB;CAC/C,IAAI,wBAAwB,GAAG;CAC/B,IAAI;EACF,MAAM,KAAK,gBAAgB;EAE3B,GAAG,QADU,OAAO,GAAG,SAAS,WAAY,GAAG,OAAkB,KAChD;CACnB,QAAQ,CAER;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect.d.ts","names":[],"sources":["../../src/runtime/effect.ts"],"mappings":";;;;UA4CiB,iBAAA;EACf,IAAA,EAAM,aAAA;EACN,OAAA,IAAW,CAAA;EACX,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,CAAA;EAChC,MAAA,CAAO,aAAA,EAAe,CAAA,EAAG,SAAA,EAAW,CAAA;EACpC,WAAA,EAAa,GAAA,CAAI,cAAA;EACjB,QAAA;EACA,QAAA;EACA,SAAA,EAAW,CAAA;EACX,OAAA,EAAS,KAAA;AAAA;AAAA,UAGM,uBAAA;EACf,OAAA;EACA,aAAA,CAAc,WAAA,QAAmB,CAAC;EAClC,KAAA;AAAA;AAAA,UAGe,8BAAA;EACf,IAAA,EAAM,aAAA;EACN,OAAA,QAAe,CAAA;EACf,MAAA,GAAS,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,CAAA;EAClC,MAAA,IAAU,aAAA,EAAe,CAAA,EAAG,SAAA,EAAW,CAAA;EACvC,OAAA,IAAW,KAAA;AAAA;AAAA,iBA2KG,iCAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBAmCR,uBAAA,IACd,OAAA,EAAS,8BAAA,CAA+B,CAAA,IACvC,uBAAA,CAAwB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect.js","names":[],"sources":["../../src/runtime/effect.ts"],"sourcesContent":["import { incDevCounter } from './dev-namespace';\nimport { type ReadableSource, withFineGrainedReadTracking } from './readable';\nimport { enqueueRuntimeLane } from './access';\nimport type { SchedulerLane } from './scheduler';\n\ntype EffectRegistry = WeakMap<\n ReadableSource<unknown>,\n Set<FineGrainedEffect<unknown>>\n>;\n\ntype EffectFlushSets = Record<SchedulerLane, Set<FineGrainedEffect<unknown>>>;\n\ntype EffectPendingFlushState = Record<SchedulerLane, boolean>;\ntype EffectLaneDirtyState = Record<SchedulerLane, boolean>;\n\nconst effectSources: EffectRegistry = new WeakMap();\nconst dirtyEffectsByLane: EffectFlushSets = {\n derived: new Set(),\n component: new Set(),\n reactive: new Set(),\n post: new Set(),\n};\nconst hasPendingLaneFlush: EffectPendingFlushState = {\n derived: false,\n component: false,\n reactive: false,\n post: false,\n};\n\nconst dirtyLaneState: EffectLaneDirtyState = {\n derived: false,\n component: false,\n reactive: false,\n post: false,\n};\n\nconst MAX_EFFECT_RUNS_PER_FLUSH = 50;\nconst LANE_FLUSH_TASKS: Record<SchedulerLane, () => void> = {\n derived: () => flushLaneEffects('derived'),\n component: () => flushLaneEffects('component'),\n reactive: () => flushLaneEffects('reactive'),\n post: () => flushLaneEffects('post'),\n};\n\nexport interface FineGrainedEffect<T> {\n lane: SchedulerLane;\n compute(): T;\n commit(value: T, previousValue: T | undefined): void;\n equals(previousValue: T, nextValue: T): boolean;\n readSources: Set<ReadableSource<unknown>>;\n isActive: boolean;\n hasValue: boolean;\n lastValue: T | undefined;\n onError?(error: unknown): void;\n}\n\nexport interface FineGrainedEffectHandle<T> {\n cleanup(): void;\n updateCompute(nextCompute: () => T): void;\n flush(): void;\n}\n\nexport interface CreateFineGrainedEffectOptions<T> {\n lane: SchedulerLane;\n compute: () => T;\n commit: (value: T, previousValue: T | undefined) => void;\n equals?: (previousValue: T, nextValue: T) => boolean;\n onError?: (error: unknown) => void;\n}\n\nfunction registerEffectSource(\n source: ReadableSource<unknown>,\n effect: FineGrainedEffect<unknown>\n): void {\n let effects = effectSources.get(source);\n if (!effects) {\n effects = new Set();\n effectSources.set(source, effects);\n }\n effects.add(effect);\n}\n\nfunction unregisterEffectSource(\n source: ReadableSource<unknown>,\n effect: FineGrainedEffect<unknown>\n): void {\n effectSources.get(source)?.delete(effect);\n}\n\nfunction clearEffectSubscriptions(effect: FineGrainedEffect<unknown>): void {\n for (const source of effect.readSources) {\n unregisterEffectSource(source, effect);\n }\n effect.readSources.clear();\n}\n\nfunction normalizeNextSources(\n previousSources: Set<ReadableSource<unknown>>,\n pendingSources: Set<ReadableSource<unknown>>\n): Set<ReadableSource<unknown>> {\n if (previousSources.size === pendingSources.size) {\n let same = true;\n for (const source of previousSources) {\n if (!pendingSources.has(source)) {\n same = false;\n break;\n }\n }\n\n if (same) {\n return previousSources;\n }\n }\n\n return new Set(pendingSources);\n}\n\nfunction evaluateEffect<T>(effect: FineGrainedEffect<T>): {\n value: T;\n nextSources: Set<ReadableSource<unknown>>;\n} {\n const pendingSources = new Set<ReadableSource<unknown>>();\n\n incDevCounter('effectRuns');\n const value = withFineGrainedReadTracking(pendingSources, () =>\n effect.compute()\n );\n const nextSources = normalizeNextSources(effect.readSources, pendingSources);\n return { value, nextSources };\n}\n\nfunction commitEffectSubscriptions(\n effect: FineGrainedEffect<unknown>,\n nextSources: Set<ReadableSource<unknown>>\n): void {\n const previousSources = effect.readSources;\n\n if (previousSources === nextSources) {\n return;\n }\n\n for (const source of previousSources) {\n if (!nextSources.has(source)) {\n unregisterEffectSource(source, effect);\n }\n }\n\n for (const source of nextSources) {\n if (!previousSources.has(source)) {\n registerEffectSource(source, effect);\n }\n }\n\n effect.readSources = nextSources;\n}\n\nfunction commitEffectResult<T>(\n effect: FineGrainedEffect<T>,\n value: T,\n nextSources: Set<ReadableSource<unknown>>\n): void {\n const previousValue = effect.lastValue;\n const shouldCommit =\n !effect.hasValue || !effect.equals(previousValue as T, value);\n\n if (shouldCommit) {\n effect.commit(value, effect.hasValue ? previousValue : undefined);\n }\n\n commitEffectSubscriptions(effect, nextSources);\n effect.lastValue = value;\n effect.hasValue = true;\n}\n\nfunction flushLaneEffects(lane: SchedulerLane): void {\n hasPendingLaneFlush[lane] = false;\n\n const effects = dirtyEffectsByLane[lane];\n if (effects.size === 0) {\n return;\n }\n\n const pending = effects.values();\n const effectRuns = new Map<FineGrainedEffect<unknown>, number>();\n let next = pending.next();\n\n while (!next.done) {\n const effect = next.value as FineGrainedEffect<unknown>;\n effects.delete(effect);\n if (!effect.isActive) {\n next = pending.next();\n continue;\n }\n\n const runCount = (effectRuns.get(effect) ?? 0) + 1;\n effectRuns.set(effect, runCount);\n if (runCount > MAX_EFFECT_RUNS_PER_FLUSH) {\n const error = new Error(\n `[Askr] fine-grained effect exceeded ${MAX_EFFECT_RUNS_PER_FLUSH} runs in one flush. Likely reactive cycle.`\n );\n if (effect.onError) {\n effect.onError(error);\n } else {\n throw error;\n }\n next = pending.next();\n continue;\n }\n\n try {\n const { value, nextSources } = evaluateEffect(effect);\n commitEffectResult(effect, value, nextSources);\n } catch (error) {\n effect.onError?.(error);\n }\n\n next = pending.next();\n }\n}\n\nfunction scheduleLaneFlush(lane: SchedulerLane): void {\n if (hasPendingLaneFlush[lane]) {\n return;\n }\n\n hasPendingLaneFlush[lane] = true;\n enqueueRuntimeLane(lane, LANE_FLUSH_TASKS[lane]);\n}\n\nfunction unscheduleEffect(effect: FineGrainedEffect<unknown>): void {\n dirtyEffectsByLane[effect.lane].delete(effect);\n}\n\nfunction recomputeEffectNow<T>(effect: FineGrainedEffect<T>): void {\n const { value, nextSources } = evaluateEffect(effect);\n commitEffectResult(effect, value, nextSources);\n}\n\nexport function markFineGrainedEffectsDirtySource(\n source: ReadableSource<unknown>\n): void {\n const effects = effectSources.get(source);\n if (!effects || effects.size === 0) {\n return;\n }\n\n dirtyLaneState.derived = false;\n dirtyLaneState.component = false;\n dirtyLaneState.reactive = false;\n dirtyLaneState.post = false;\n\n for (const effect of effects) {\n if (!effect.isActive) {\n continue;\n }\n const lane = effect.lane;\n dirtyEffectsByLane[lane].add(effect);\n dirtyLaneState[lane] = true;\n }\n\n if (dirtyLaneState.derived) {\n scheduleLaneFlush('derived');\n }\n if (dirtyLaneState.component) {\n scheduleLaneFlush('component');\n }\n if (dirtyLaneState.reactive) {\n scheduleLaneFlush('reactive');\n }\n if (dirtyLaneState.post) {\n scheduleLaneFlush('post');\n }\n}\n\nexport function createFineGrainedEffect<T>(\n options: CreateFineGrainedEffectOptions<T>\n): FineGrainedEffectHandle<T> {\n const effect: FineGrainedEffect<T> = {\n lane: options.lane,\n compute: options.compute,\n commit: options.commit,\n equals: options.equals ?? Object.is,\n readSources: new Set(),\n isActive: true,\n hasValue: false,\n lastValue: undefined,\n onError: options.onError,\n };\n\n recomputeEffectNow(effect);\n\n return {\n cleanup(): void {\n if (!effect.isActive) {\n return;\n }\n\n effect.isActive = false;\n unscheduleEffect(effect);\n clearEffectSubscriptions(effect);\n },\n\n updateCompute(nextCompute: () => T): void {\n if (!effect.isActive) {\n return;\n }\n\n effect.compute = nextCompute;\n unscheduleEffect(effect);\n recomputeEffectNow(effect);\n },\n\n flush(): void {\n if (!effect.isActive) {\n return;\n }\n\n unscheduleEffect(effect);\n recomputeEffectNow(effect);\n },\n };\n}\n"],"mappings":";;;;AAeA,MAAM,gCAAgC,IAAI,QAAQ;AAClD,MAAM,qBAAsC;CAC1C,yBAAS,IAAI,IAAI;CACjB,2BAAW,IAAI,IAAI;CACnB,0BAAU,IAAI,IAAI;CAClB,sBAAM,IAAI,IAAI;AAChB;AACA,MAAM,sBAA+C;CACnD,SAAS;CACT,WAAW;CACX,UAAU;CACV,MAAM;AACR;AAEA,MAAM,iBAAuC;CAC3C,SAAS;CACT,WAAW;CACX,UAAU;CACV,MAAM;AACR;AAEA,MAAM,4BAA4B;AAClC,MAAM,mBAAsD;CAC1D,eAAe,iBAAiB,SAAS;CACzC,iBAAiB,iBAAiB,WAAW;CAC7C,gBAAgB,iBAAiB,UAAU;CAC3C,YAAY,iBAAiB,MAAM;AACrC;AA4BA,SAAS,qBACP,QACA,QACM;CACN,IAAI,UAAU,cAAc,IAAI,MAAM;CACtC,IAAI,CAAC,SAAS;EACZ,0BAAU,IAAI,IAAI;EAClB,cAAc,IAAI,QAAQ,OAAO;CACnC;CACA,QAAQ,IAAI,MAAM;AACpB;AAEA,SAAS,uBACP,QACA,QACM;CACN,cAAc,IAAI,MAAM,CAAC,EAAE,OAAO,MAAM;AAC1C;AAEA,SAAS,yBAAyB,QAA0C;CAC1E,KAAK,MAAM,UAAU,OAAO,aAC1B,uBAAuB,QAAQ,MAAM;CAEvC,OAAO,YAAY,MAAM;AAC3B;AAEA,SAAS,qBACP,iBACA,gBAC8B;CAC9B,IAAI,gBAAgB,SAAS,eAAe,MAAM;EAChD,IAAI,OAAO;EACX,KAAK,MAAM,UAAU,iBACnB,IAAI,CAAC,eAAe,IAAI,MAAM,GAAG;GAC/B,OAAO;GACP;EACF;EAGF,IAAI,MACF,OAAO;CAEX;CAEA,OAAO,IAAI,IAAI,cAAc;AAC/B;AAEA,SAAS,eAAkB,QAGzB;CACA,MAAM,iCAAiB,IAAI,IAA6B;CAExD,cAAc,YAAY;CAK1B,OAAO;EAAE,OAJK,4BAA4B,sBACxC,OAAO,QAAQ,CAGR;EAAO,aADI,qBAAqB,OAAO,aAAa,cAC7C;CAAY;AAC9B;AAEA,SAAS,0BACP,QACA,aACM;CACN,MAAM,kBAAkB,OAAO;CAE/B,IAAI,oBAAoB,aACtB;CAGF,KAAK,MAAM,UAAU,iBACnB,IAAI,CAAC,YAAY,IAAI,MAAM,GACzB,uBAAuB,QAAQ,MAAM;CAIzC,KAAK,MAAM,UAAU,aACnB,IAAI,CAAC,gBAAgB,IAAI,MAAM,GAC7B,qBAAqB,QAAQ,MAAM;CAIvC,OAAO,cAAc;AACvB;AAEA,SAAS,mBACP,QACA,OACA,aACM;CACN,MAAM,gBAAgB,OAAO;CAI7B,IAFE,CAAC,OAAO,YAAY,CAAC,OAAO,OAAO,eAAoB,KAAK,GAG5D,OAAO,OAAO,OAAO,OAAO,WAAW,gBAAgB,MAAS;CAGlE,0BAA0B,QAAQ,WAAW;CAC7C,OAAO,YAAY;CACnB,OAAO,WAAW;AACpB;AAEA,SAAS,iBAAiB,MAA2B;CACnD,oBAAoB,QAAQ;CAE5B,MAAM,UAAU,mBAAmB;CACnC,IAAI,QAAQ,SAAS,GACnB;CAGF,MAAM,UAAU,QAAQ,OAAO;CAC/B,MAAM,6BAAa,IAAI,IAAwC;CAC/D,IAAI,OAAO,QAAQ,KAAK;CAExB,OAAO,CAAC,KAAK,MAAM;EACjB,MAAM,SAAS,KAAK;EACpB,QAAQ,OAAO,MAAM;EACrB,IAAI,CAAC,OAAO,UAAU;GACpB,OAAO,QAAQ,KAAK;GACpB;EACF;EAEA,MAAM,YAAY,WAAW,IAAI,MAAM,KAAK,KAAK;EACjD,WAAW,IAAI,QAAQ,QAAQ;EAC/B,IAAI,WAAW,2BAA2B;GACxC,MAAM,wBAAQ,IAAI,MAChB,uCAAuC,0BAA0B,2CACnE;GACA,IAAI,OAAO,SACT,OAAO,QAAQ,KAAK;QAEpB,MAAM;GAER,OAAO,QAAQ,KAAK;GACpB;EACF;EAEA,IAAI;GACF,MAAM,EAAE,OAAO,gBAAgB,eAAe,MAAM;GACpD,mBAAmB,QAAQ,OAAO,WAAW;EAC/C,SAAS,OAAO;GACd,OAAO,UAAU,KAAK;EACxB;EAEA,OAAO,QAAQ,KAAK;CACtB;AACF;AAEA,SAAS,kBAAkB,MAA2B;CACpD,IAAI,oBAAoB,OACtB;CAGF,oBAAoB,QAAQ;CAC5B,mBAAmB,MAAM,iBAAiB,KAAK;AACjD;AAEA,SAAS,iBAAiB,QAA0C;CAClE,mBAAmB,OAAO,KAAK,CAAC,OAAO,MAAM;AAC/C;AAEA,SAAS,mBAAsB,QAAoC;CACjE,MAAM,EAAE,OAAO,gBAAgB,eAAe,MAAM;CACpD,mBAAmB,QAAQ,OAAO,WAAW;AAC/C;AAEA,SAAgB,kCACd,QACM;CACN,MAAM,UAAU,cAAc,IAAI,MAAM;CACxC,IAAI,CAAC,WAAW,QAAQ,SAAS,GAC/B;CAGF,eAAe,UAAU;CACzB,eAAe,YAAY;CAC3B,eAAe,WAAW;CAC1B,eAAe,OAAO;CAEtB,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,CAAC,OAAO,UACV;EAEF,MAAM,OAAO,OAAO;EACpB,mBAAmB,KAAK,CAAC,IAAI,MAAM;EACnC,eAAe,QAAQ;CACzB;CAEA,IAAI,eAAe,SACjB,kBAAkB,SAAS;CAE7B,IAAI,eAAe,WACjB,kBAAkB,WAAW;CAE/B,IAAI,eAAe,UACjB,kBAAkB,UAAU;CAE9B,IAAI,eAAe,MACjB,kBAAkB,MAAM;AAE5B;AAEA,SAAgB,wBACd,SAC4B;CAC5B,MAAM,SAA+B;EACnC,MAAM,QAAQ;EACd,SAAS,QAAQ;EACjB,QAAQ,QAAQ;EAChB,QAAQ,QAAQ,UAAU,OAAO;EACjC,6BAAa,IAAI,IAAI;EACrB,UAAU;EACV,UAAU;EACV,WAAW;EACX,SAAS,QAAQ;CACnB;CAEA,mBAAmB,MAAM;CAEzB,OAAO;EACL,UAAgB;GACd,IAAI,CAAC,OAAO,UACV;GAGF,OAAO,WAAW;GAClB,iBAAiB,MAAM;GACvB,yBAAyB,MAAM;EACjC;EAEA,cAAc,aAA4B;GACxC,IAAI,CAAC,OAAO,UACV;GAGF,OAAO,UAAU;GACjB,iBAAiB,MAAM;GACvB,mBAAmB,MAAM;EAC3B;EAEA,QAAc;GACZ,IAAI,CAAC,OAAO,UACV;GAGF,iBAAiB,MAAM;GACvB,mBAAmB,MAAM;EAC3B;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.d.ts","names":[],"sources":["../../src/runtime/error-boundary.ts"],"mappings":";;iBAGgB,mBAAA,CAAoB,QAA2B,EAAjB,iBAAiB;AAAA,iBAc/C,mBAAA,CACd,QAAA,EAAU,iBAAiB,EAC3B,KAAA,WACA,OAAA,IAAW,KAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.js","names":[],"sources":["../../src/runtime/error-boundary.ts"],"sourcesContent":["import { logger } from '../common/logger';\nimport type { ComponentInstance } from './component';\n\nexport function createBoundaryReset(instance: ComponentInstance): () => void {\n return () => {\n const boundaryState = instance.errorBoundaryState;\n if (!boundaryState) {\n return;\n }\n boundaryState.error = null;\n boundaryState.notified = false;\n queueMicrotask(() => {\n instance._enqueueRun?.();\n });\n };\n}\n\nexport function reportBoundaryError(\n instance: ComponentInstance,\n error: unknown,\n onError?: (error: unknown) => void\n): void {\n const boundaryState = instance.errorBoundaryState;\n if (\n boundaryState &&\n Object.is(boundaryState.error, error) &&\n boundaryState.notified\n ) {\n return;\n }\n\n if (boundaryState) {\n boundaryState.error = error;\n boundaryState.notified = true;\n }\n\n try {\n onError?.(error);\n } catch (hookError) {\n logger.error('[Askr] ErrorBoundary onError handler threw:', hookError);\n }\n\n logger.error('[Askr] ErrorBoundary caught render error:', error);\n}\n"],"mappings":";;AAGA,SAAgB,oBAAoB,UAAyC;CAC3E,aAAa;EACX,MAAM,gBAAgB,SAAS;EAC/B,IAAI,CAAC,eACH;EAEF,cAAc,QAAQ;EACtB,cAAc,WAAW;EACzB,qBAAqB;GACnB,SAAS,cAAc;EACzB,CAAC;CACH;AACF;AAEA,SAAgB,oBACd,UACA,OACA,SACM;CACN,MAAM,gBAAgB,SAAS;CAC/B,IACE,iBACA,OAAO,GAAG,cAAc,OAAO,KAAK,KACpC,cAAc,UAEd;CAGF,IAAI,eAAe;EACjB,cAAc,QAAQ;EACtB,cAAc,WAAW;CAC3B;CAEA,IAAI;EACF,UAAU,KAAK;CACjB,SAAS,WAAW;EAClB,OAAO,MAAM,+CAA+C,SAAS;CACvE;CAEA,OAAO,MAAM,6CAA6C,KAAK;AACjE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","names":[],"sources":["../../src/runtime/events.ts"],"mappings":";;AAgBA;;;;;;;;;UAAiB,iBAAA;EACf,KAAA,EAAO,UAAA;EACP,QAAA,EAAU,UAAA;EACV,SAAA,EAAW,UAAA;EACX,OAAA,EAAS,UAAA;EACT,SAAA,EAAW,UAAA;EACX,QAAA,EAAU,UAAA;EACV,SAAA,EAAW,UAAA;EACX,KAAA,EAAO,UAAA;EACP,IAAA,EAAM,UAAA;EACN,KAAA,EAAO,UAAA;EACP,MAAA,EAAQ,KAAA;EACR,OAAA,EAAS,aAAA;EACT,KAAA,EAAO,aAAA;EACP,QAAA,EAAU,aAAA;EACV,MAAA,EAAQ,KAAA;EACR,MAAA,EAAQ,KAAA;EACR,KAAA,EAAO,UAAA;EACP,UAAA,EAAY,UAAA;EACZ,QAAA,EAAU,UAAA;EACV,SAAA,EAAW,UAAA;EACX,WAAA,EAAa,UAAA;AAAA;AAAA,UA2BL,gBAAA;EACR,OAAA,EAAS,aAAA;EACT,QAAA,EAAU,aAAA;EACV,OAAA,EAAS,OAAA;EACT,SAAA,EAAW,OAAA;EACX,SAAA;EACA,OAAA,GAAU,uBAAA;AAAA;AAAA,iBAgBI,wBAAA;AAAA,iBAIA,sBAAA;AAAA,iBAKA,qBAAA,CAAsB,SAAmB,GAAP,OAAO;AAAA,iBAOzC,4BAAA,CAA6B,SAAkB,EAAP,OAAO;AAAA,iBAyK/C,oBAAA,CACd,OAAA,EAAS,OAAA,EACT,SAAA,UACA,OAAA,EAAS,aAAA,EACT,eAAA,EAAiB,aAAA,EACjB,OAAA,GAAU,uBAAA;AAAA,iBAmBI,uBAAA,CACd,OAAA,EAAS,OAAA,EACT,SAAA,UACA,OAAA,EAAS,aAAA,EACT,eAAA,EAAiB,aAAA,EACjB,OAAA,GAAU,uBAAA;AAAA,iBAuBI,uBAAA,CACd,OAAA,EAAS,OAAO,EAChB,SAAA;AAAA,iBA+Bc,6BAAA,CACd,OAAA,EAAS,OAAA,EACT,SAAA,WACC,gBAAgB;AAAA,iBAOH,8BAAA,CACd,OAAA,EAAS,OAAA,GACR,GAAA,SAAY,gBAAA;AAAA,iBAOC,mBAAA,CACd,OAAA,EAAS,OAAO,EAChB,SAAA;AAAA,iBAKc,gCAAA,CAAiC,OAAgB,EAAP,OAAO;AAAA,iBAYjD,sBAAA,oBAA0C,iBAAiB;AAAA,iBAI3D,gBAAA,CAAiB,SAAiB"}
|