@askrjs/askr 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -147
- package/dist/_virtual/_rolldown/runtime.js +7 -0
- package/dist/bench/components/benchmark-row.d.ts +20 -0
- package/dist/bench/components/benchmark-row.d.ts.map +1 -0
- package/dist/bench/components/benchmark-row.js +42 -0
- package/dist/bench/components/benchmark-row.js.map +1 -0
- package/dist/bench/components/benchmark-table.js +25 -0
- package/dist/bench/components/benchmark-table.js.map +1 -0
- package/dist/benchmark.d.ts +22 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +64 -1
- package/dist/benchmark.js.map +1 -0
- package/dist/bin/askr-ssg.d.ts +28 -0
- package/dist/bin/askr-ssg.d.ts.map +1 -0
- package/dist/bin/askr-ssg.js +171 -0
- package/dist/bin/askr-ssg.js.map +1 -0
- package/dist/boot/index.d.ts +64 -42
- package/dist/boot/index.d.ts.map +1 -1
- package/dist/boot/index.js +416 -2
- package/dist/boot/index.js.map +1 -0
- package/dist/common/component.d.ts +14 -13
- package/dist/common/component.d.ts.map +1 -1
- package/dist/common/control.d.ts +13 -0
- package/dist/common/control.d.ts.map +1 -0
- package/dist/common/control.js +14 -0
- package/dist/common/control.js.map +1 -0
- package/dist/common/env.js +47 -0
- package/dist/common/env.js.map +1 -0
- package/dist/common/jsx.d.ts +17 -15
- package/dist/common/jsx.d.ts.map +1 -1
- package/dist/common/jsx.js +8 -1
- package/dist/common/jsx.js.map +1 -0
- package/dist/common/props.d.ts +14 -11
- package/dist/common/props.d.ts.map +1 -1
- package/dist/common/router.d.ts +190 -32
- package/dist/common/router.d.ts.map +1 -1
- package/dist/common/ssr-errors.d.ts +6 -3
- package/dist/common/ssr-errors.d.ts.map +1 -1
- package/dist/common/ssr-errors.js +16 -1
- package/dist/common/ssr-errors.js.map +1 -0
- package/dist/common/ssr.d.ts +12 -9
- package/dist/common/ssr.d.ts.map +1 -1
- package/dist/common/vnode.d.ts +17 -15
- package/dist/common/vnode.d.ts.map +1 -1
- package/dist/common/vnode.js +10 -1
- package/dist/common/vnode.js.map +1 -0
- package/dist/components/link.d.ts +37 -25
- package/dist/components/link.d.ts.map +1 -1
- package/dist/components/link.js +64 -1
- package/dist/components/link.js.map +1 -0
- package/dist/control/case.d.ts +17 -0
- package/dist/control/case.d.ts.map +1 -0
- package/dist/control/case.js +69 -0
- package/dist/control/case.js.map +1 -0
- package/dist/control/for.d.ts +23 -0
- package/dist/control/for.d.ts.map +1 -0
- package/dist/control/for.js +62 -0
- package/dist/control/for.js.map +1 -0
- package/dist/control/index.d.ts +4 -0
- package/dist/control/index.js +4 -0
- package/dist/control/shared.js +20 -0
- package/dist/control/shared.js.map +1 -0
- package/dist/control/show.d.ts +14 -0
- package/dist/control/show.d.ts.map +1 -0
- package/dist/control/show.js +33 -0
- package/dist/control/show.js.map +1 -0
- package/dist/dev/invariant.js +29 -2
- package/dist/dev/invariant.js.map +1 -0
- package/dist/dev/logger.js +37 -1
- package/dist/dev/logger.js.map +1 -0
- package/dist/foundations/icon/icon.d.ts +53 -0
- package/dist/foundations/icon/icon.d.ts.map +1 -0
- package/dist/foundations/icon/icon.js +88 -0
- package/dist/foundations/icon/icon.js.map +1 -0
- package/dist/foundations/icon/icon.types.d.ts +21 -0
- package/dist/foundations/icon/icon.types.d.ts.map +1 -0
- package/dist/foundations/index.d.ts +10 -3
- package/dist/foundations/index.js +9 -1
- package/dist/foundations/interactions/interaction-policy.js +93 -1
- package/dist/foundations/interactions/interaction-policy.js.map +1 -0
- package/dist/foundations/interactions/pressable.js +51 -1
- package/dist/foundations/interactions/pressable.js.map +1 -0
- package/dist/foundations/structures/collection.d.ts +25 -40
- package/dist/foundations/structures/collection.d.ts.map +1 -1
- package/dist/foundations/structures/collection.js +51 -1
- package/dist/foundations/structures/collection.js.map +1 -0
- package/dist/foundations/structures/layer.d.ts +47 -68
- package/dist/foundations/structures/layer.d.ts.map +1 -1
- package/dist/foundations/structures/layer.js +81 -1
- package/dist/foundations/structures/layer.js.map +1 -0
- package/dist/foundations/structures/layout.d.ts +6 -3
- package/dist/foundations/structures/layout.d.ts.map +1 -1
- package/dist/foundations/structures/layout.js +13 -1
- package/dist/foundations/structures/layout.js.map +1 -0
- package/dist/foundations/structures/portal.d.ts +17 -10
- package/dist/foundations/structures/portal.d.ts.map +1 -1
- package/dist/foundations/structures/portal.js +105 -1
- package/dist/foundations/structures/portal.js.map +1 -0
- package/dist/foundations/structures/presence.d.ts +11 -5
- package/dist/foundations/structures/presence.d.ts.map +1 -1
- package/dist/foundations/structures/presence.js +39 -1
- package/dist/foundations/structures/presence.js.map +1 -0
- package/dist/foundations/structures/slot.d.ts +11 -8
- package/dist/foundations/structures/slot.d.ts.map +1 -1
- package/dist/foundations/structures/slot.js +41 -1
- package/dist/foundations/structures/slot.js.map +1 -0
- package/dist/foundations/structures.d.ts +7 -14
- package/dist/foundations/structures.js +6 -1
- package/dist/foundations/utilities/aria.js +11 -1
- package/dist/foundations/utilities/aria.js.map +1 -0
- package/dist/foundations/utilities/compose-handlers.js +20 -1
- package/dist/foundations/utilities/compose-handlers.js.map +1 -0
- package/dist/foundations/utilities/compose-ref.d.ts +7 -4
- package/dist/foundations/utilities/compose-ref.d.ts.map +1 -1
- package/dist/foundations/utilities/compose-ref.js +18 -1
- package/dist/foundations/utilities/compose-ref.js.map +1 -0
- package/dist/foundations/utilities/merge-props.js +49 -1
- package/dist/foundations/utilities/merge-props.js.map +1 -0
- package/dist/fx/fx.d.ts +24 -21
- package/dist/fx/fx.d.ts.map +1 -1
- package/dist/fx/fx.js +212 -1
- package/dist/fx/fx.js.map +1 -0
- package/dist/fx/index.d.ts +4 -7
- package/dist/fx/index.js +4 -1
- package/dist/fx/noop.js +9 -1
- package/dist/fx/noop.js.map +1 -0
- package/dist/fx/timing.d.ts +24 -21
- package/dist/fx/timing.d.ts.map +1 -1
- package/dist/fx/timing.js +236 -1
- package/dist/fx/timing.js.map +1 -0
- package/dist/index.d.ts +21 -20
- package/dist/index.js +34 -1
- package/dist/index.js.map +1 -0
- package/dist/jsx/index.d.ts +1 -4
- package/dist/jsx/index.js +3 -1
- package/dist/jsx/types.d.ts +18 -25
- package/dist/jsx/types.d.ts.map +1 -1
- package/dist/jsx/types.js +1 -1
- package/dist/jsx/utils.d.ts +4 -3
- package/dist/jsx/utils.d.ts.map +1 -1
- package/dist/jsx/utils.js +19 -1
- package/dist/jsx/utils.js.map +1 -0
- package/dist/jsx-dev-runtime.d.ts +8 -0
- package/dist/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/jsx-dev-runtime.js +32 -1
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-runtime.d.ts +12 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +45 -1
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/jsx-runtime2.d.ts +2 -0
- package/dist/jsx-runtime2.js +3 -0
- package/dist/renderer/children.js +293 -0
- package/dist/renderer/children.js.map +1 -0
- package/dist/renderer/cleanup.js +150 -1
- package/dist/renderer/cleanup.js.map +1 -0
- package/dist/renderer/dom.js +2439 -1
- package/dist/renderer/dom.js.map +1 -0
- package/dist/renderer/env.js +1 -0
- package/dist/renderer/evaluate.js +450 -1
- package/dist/renderer/evaluate.js.map +1 -0
- package/dist/renderer/fastpath.js +145 -1
- package/dist/renderer/fastpath.js.map +1 -0
- package/dist/renderer/index.js +24 -1
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/keyed.js +119 -1
- package/dist/renderer/keyed.js.map +1 -0
- package/dist/renderer/reconcile.js +359 -1
- package/dist/renderer/reconcile.js.map +1 -0
- package/dist/renderer/types.js +1 -1
- package/dist/renderer/utils.js +220 -1
- package/dist/renderer/utils.js.map +1 -0
- package/dist/resources/index.d.ts +3 -9
- package/dist/resources/index.js +3 -1
- package/dist/router/index.d.ts +6 -10
- package/dist/router/index.js +5 -1
- package/dist/router/match.js +83 -1
- package/dist/router/match.js.map +1 -0
- package/dist/router/navigate.d.ts +20 -8
- package/dist/router/navigate.d.ts.map +1 -1
- package/dist/router/navigate.js +288 -1
- package/dist/router/navigate.js.map +1 -0
- package/dist/router/policy.d.ts +22 -0
- package/dist/router/policy.d.ts.map +1 -0
- package/dist/router/policy.js +116 -0
- package/dist/router/policy.js.map +1 -0
- package/dist/router/route-context.js +79 -0
- package/dist/router/route-context.js.map +1 -0
- package/dist/router/route.d.ts +101 -33
- package/dist/router/route.d.ts.map +1 -1
- package/dist/router/route.js +599 -1
- package/dist/router/route.js.map +1 -0
- package/dist/runtime/child-scope.d.ts +21 -0
- package/dist/runtime/child-scope.d.ts.map +1 -0
- package/dist/runtime/child-scope.js +77 -0
- package/dist/runtime/child-scope.js.map +1 -0
- package/dist/runtime/component.d.ts +67 -53
- package/dist/runtime/component.d.ts.map +1 -1
- package/dist/runtime/component.js +462 -1
- package/dist/runtime/component.js.map +1 -0
- package/dist/runtime/context.d.ts +28 -42
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/context.js +205 -1
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/control.d.ts +43 -0
- package/dist/runtime/control.d.ts.map +1 -0
- package/dist/runtime/control.js +125 -0
- package/dist/runtime/control.js.map +1 -0
- package/dist/runtime/derive.d.ts +15 -6
- package/dist/runtime/derive.d.ts.map +1 -1
- package/dist/runtime/derive.js +134 -1
- package/dist/runtime/derive.js.map +1 -0
- package/dist/runtime/dev-namespace.js +57 -1
- package/dist/runtime/dev-namespace.js.map +1 -0
- package/dist/runtime/effect.d.ts +32 -0
- package/dist/runtime/effect.d.ts.map +1 -0
- package/dist/runtime/effect.js +146 -0
- package/dist/runtime/effect.js.map +1 -0
- package/dist/runtime/events.js +162 -1
- package/dist/runtime/events.js.map +1 -0
- package/dist/runtime/execution-model.js +15 -1
- package/dist/runtime/execution-model.js.map +1 -0
- package/dist/runtime/fastlane.js +204 -1
- package/dist/runtime/fastlane.js.map +1 -0
- package/dist/runtime/for-bench.d.ts +41 -0
- package/dist/runtime/for-bench.d.ts.map +1 -0
- package/dist/runtime/for-bench.js +173 -0
- package/dist/runtime/for-bench.js.map +1 -0
- package/dist/runtime/for.d.ts +62 -49
- package/dist/runtime/for.d.ts.map +1 -1
- package/dist/runtime/for.js +668 -1
- package/dist/runtime/for.js.map +1 -0
- package/dist/runtime/operations.d.ts +18 -15
- package/dist/runtime/operations.d.ts.map +1 -1
- package/dist/runtime/operations.js +209 -1
- package/dist/runtime/operations.js.map +1 -0
- package/dist/runtime/perf-metrics.js +64 -0
- package/dist/runtime/perf-metrics.js.map +1 -0
- package/dist/runtime/readable.d.ts +27 -0
- package/dist/runtime/readable.d.ts.map +1 -0
- package/dist/runtime/readable.js +118 -0
- package/dist/runtime/readable.js.map +1 -0
- package/dist/runtime/resource-cell.js +102 -1
- package/dist/runtime/resource-cell.js.map +1 -0
- package/dist/runtime/scheduler.d.ts +51 -35
- package/dist/runtime/scheduler.d.ts.map +1 -1
- package/dist/runtime/scheduler.js +328 -1
- package/dist/runtime/scheduler.js.map +1 -0
- package/dist/runtime/selector.d.ts +11 -0
- package/dist/runtime/selector.d.ts.map +1 -0
- package/dist/runtime/selector.js +188 -0
- package/dist/runtime/selector.js.map +1 -0
- package/dist/runtime/ssr-bridge.js +24 -1
- package/dist/runtime/ssr-bridge.js.map +1 -0
- package/dist/runtime/state.d.ts +11 -21
- package/dist/runtime/state.d.ts.map +1 -1
- package/dist/runtime/state.js +99 -1
- package/dist/runtime/state.js.map +1 -0
- package/dist/ssg/batch-render.d.ts +16 -0
- package/dist/ssg/batch-render.d.ts.map +1 -0
- package/dist/ssg/batch-render.js +84 -0
- package/dist/ssg/batch-render.js.map +1 -0
- package/dist/ssg/create-static-gen.d.ts +50 -0
- package/dist/ssg/create-static-gen.d.ts.map +1 -0
- package/dist/ssg/create-static-gen.js +282 -0
- package/dist/ssg/create-static-gen.js.map +1 -0
- package/dist/ssg/generate-metadata.d.ts +24 -0
- package/dist/ssg/generate-metadata.d.ts.map +1 -0
- package/dist/ssg/generate-metadata.js +94 -0
- package/dist/ssg/generate-metadata.js.map +1 -0
- package/dist/ssg/incremental-manifest.js +56 -0
- package/dist/ssg/incremental-manifest.js.map +1 -0
- package/dist/ssg/index.d.ts +8 -0
- package/dist/ssg/index.js +7 -0
- package/dist/ssg/resolve-ssg-data.d.ts +23 -0
- package/dist/ssg/resolve-ssg-data.d.ts.map +1 -0
- package/dist/ssg/resolve-ssg-data.js +46 -0
- package/dist/ssg/resolve-ssg-data.js.map +1 -0
- package/dist/ssg/route-utils.d.ts +16 -0
- package/dist/ssg/route-utils.d.ts.map +1 -0
- package/dist/ssg/route-utils.js +24 -0
- package/dist/ssg/route-utils.js.map +1 -0
- package/dist/ssg/types.d.ts +177 -0
- package/dist/ssg/types.d.ts.map +1 -0
- package/dist/ssg/write-static-files.d.ts +15 -0
- package/dist/ssg/write-static-files.d.ts.map +1 -0
- package/dist/ssg/write-static-files.js +73 -0
- package/dist/ssg/write-static-files.js.map +1 -0
- package/dist/ssr/attrs.js +93 -1
- package/dist/ssr/attrs.js.map +1 -0
- package/dist/ssr/context.d.ts +31 -32
- package/dist/ssr/context.d.ts.map +1 -1
- package/dist/ssr/context.js +63 -1
- package/dist/ssr/context.js.map +1 -0
- package/dist/ssr/errors.d.ts +6 -4
- package/dist/ssr/errors.d.ts.map +1 -1
- package/dist/ssr/errors.js +4 -1
- package/dist/ssr/errors.js.map +1 -0
- package/dist/ssr/escape.js +153 -1
- package/dist/ssr/escape.js.map +1 -0
- package/dist/ssr/index.d.ts +75 -46
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +543 -1
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/render-keys.d.ts +27 -29
- package/dist/ssr/render-keys.d.ts.map +1 -1
- package/dist/ssr/render-keys.js +39 -1
- package/dist/ssr/render-keys.js.map +1 -0
- package/dist/ssr/sink.js +86 -1
- package/dist/ssr/sink.js.map +1 -0
- package/dist/ssr/stream-render.js +76 -1
- package/dist/ssr/stream-render.js.map +1 -0
- package/dist/ssr/types.d.ts +14 -13
- package/dist/ssr/types.d.ts.map +1 -1
- package/package.json +53 -48
- package/dist/_virtual/___vite-browser-external.js +0 -1
- package/dist/_virtual/__vite-browser-external.js +0 -1
- package/dist/_virtual/_commonjsHelpers.js +0 -1
- package/dist/_virtual/main.js +0 -1
- package/dist/_virtual/preload-helper.js +0 -1
- package/dist/bench/benchmark-entry.d.ts +0 -14
- package/dist/bench/benchmark-entry.d.ts.map +0 -1
- package/dist/common/errors.d.ts +0 -53
- package/dist/common/errors.d.ts.map +0 -1
- package/dist/common/index.d.ts +0 -14
- package/dist/common/index.d.ts.map +0 -1
- package/dist/dev/invariant.d.ts +0 -83
- package/dist/dev/invariant.d.ts.map +0 -1
- package/dist/dev/logger.d.ts +0 -13
- package/dist/dev/logger.d.ts.map +0 -1
- package/dist/dev/vite-plugin-askr.d.ts +0 -18
- package/dist/dev/vite-plugin-askr.d.ts.map +0 -1
- package/dist/dev/warnings.d.ts +0 -5
- package/dist/dev/warnings.d.ts.map +0 -1
- package/dist/for/for.d.ts +0 -16
- package/dist/for/for.d.ts.map +0 -1
- package/dist/for/for.js +0 -1
- package/dist/for/index.d.ts +0 -2
- package/dist/for/index.d.ts.map +0 -1
- package/dist/for/index.js +0 -1
- package/dist/foundations/core.d.ts +0 -23
- package/dist/foundations/core.d.ts.map +0 -1
- package/dist/foundations/core.js +0 -1
- package/dist/foundations/index.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.d.ts +0 -58
- package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.js +0 -1
- package/dist/foundations/interactions/focusable.d.ts +0 -16
- package/dist/foundations/interactions/focusable.d.ts.map +0 -1
- package/dist/foundations/interactions/focusable.js +0 -1
- package/dist/foundations/interactions/hoverable.d.ts +0 -19
- package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
- package/dist/foundations/interactions/hoverable.js +0 -1
- package/dist/foundations/interactions/index.d.ts +0 -5
- package/dist/foundations/interactions/index.d.ts.map +0 -1
- package/dist/foundations/interactions/interaction-policy.d.ts +0 -96
- package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
- package/dist/foundations/interactions/pressable.d.ts +0 -54
- package/dist/foundations/interactions/pressable.d.ts.map +0 -1
- package/dist/foundations/interactions/roving-focus.d.ts +0 -117
- package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
- package/dist/foundations/interactions/roving-focus.js +0 -1
- package/dist/foundations/state/controllable.d.ts +0 -53
- package/dist/foundations/state/controllable.d.ts.map +0 -1
- package/dist/foundations/state/controllable.js +0 -1
- package/dist/foundations/state/index.d.ts +0 -2
- package/dist/foundations/state/index.d.ts.map +0 -1
- package/dist/foundations/structures/index.d.ts +0 -5
- package/dist/foundations/structures/index.d.ts.map +0 -1
- package/dist/foundations/structures.d.ts.map +0 -1
- package/dist/foundations/utilities/aria.d.ts +0 -13
- package/dist/foundations/utilities/aria.d.ts.map +0 -1
- package/dist/foundations/utilities/compose-handlers.d.ts +0 -34
- package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
- package/dist/foundations/utilities/event-types.d.ts +0 -17
- package/dist/foundations/utilities/event-types.d.ts.map +0 -1
- package/dist/foundations/utilities/index.d.ts +0 -7
- package/dist/foundations/utilities/index.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.d.ts +0 -2
- package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
- package/dist/foundations/utilities/use-id.d.ts +0 -29
- package/dist/foundations/utilities/use-id.d.ts.map +0 -1
- package/dist/foundations/utilities/use-id.js +0 -1
- package/dist/fx/index.d.ts.map +0 -1
- package/dist/fx/noop.d.ts +0 -12
- package/dist/fx/noop.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jsx/index.d.ts.map +0 -1
- package/dist/jsx/jsx-dev-runtime.d.ts +0 -4
- package/dist/jsx/jsx-dev-runtime.d.ts.map +0 -1
- package/dist/jsx/jsx-runtime.d.ts +0 -10
- package/dist/jsx/jsx-runtime.d.ts.map +0 -1
- package/dist/node_modules/esbuild/lib/main.js +0 -65
- package/dist/renderer/cleanup.d.ts +0 -25
- package/dist/renderer/cleanup.d.ts.map +0 -1
- package/dist/renderer/dom.d.ts +0 -62
- package/dist/renderer/dom.d.ts.map +0 -1
- package/dist/renderer/evaluate.d.ts +0 -4
- package/dist/renderer/evaluate.d.ts.map +0 -1
- package/dist/renderer/fastpath.d.ts +0 -7
- package/dist/renderer/fastpath.d.ts.map +0 -1
- package/dist/renderer/index.d.ts +0 -6
- package/dist/renderer/index.d.ts.map +0 -1
- package/dist/renderer/keyed.d.ts +0 -23
- package/dist/renderer/keyed.d.ts.map +0 -1
- package/dist/renderer/reconcile.d.ts +0 -88
- package/dist/renderer/reconcile.d.ts.map +0 -1
- package/dist/renderer/types.d.ts +0 -3
- package/dist/renderer/types.d.ts.map +0 -1
- package/dist/renderer/utils.d.ts +0 -63
- package/dist/renderer/utils.d.ts.map +0 -1
- package/dist/resources/index.d.ts.map +0 -1
- package/dist/router/index.d.ts.map +0 -1
- package/dist/router/match.d.ts +0 -22
- package/dist/router/match.d.ts.map +0 -1
- package/dist/runtime/dev-namespace.d.ts +0 -31
- package/dist/runtime/dev-namespace.d.ts.map +0 -1
- package/dist/runtime/events.d.ts +0 -52
- package/dist/runtime/events.d.ts.map +0 -1
- package/dist/runtime/execution-model.d.ts +0 -4
- package/dist/runtime/execution-model.d.ts.map +0 -1
- package/dist/runtime/fastlane.d.ts +0 -27
- package/dist/runtime/fastlane.d.ts.map +0 -1
- package/dist/runtime/hydration.d.ts +0 -25
- package/dist/runtime/hydration.d.ts.map +0 -1
- package/dist/runtime/resource-cell.d.ts +0 -35
- package/dist/runtime/resource-cell.d.ts.map +0 -1
- package/dist/runtime/snapshot.d.ts +0 -25
- package/dist/runtime/snapshot.d.ts.map +0 -1
- package/dist/runtime/ssr-bridge.d.ts +0 -10
- package/dist/runtime/ssr-bridge.d.ts.map +0 -1
- package/dist/ssr/attrs.d.ts +0 -26
- package/dist/ssr/attrs.d.ts.map +0 -1
- package/dist/ssr/create-ssr.d.ts +0 -19
- package/dist/ssr/create-ssr.d.ts.map +0 -1
- package/dist/ssr/escape.d.ts +0 -38
- package/dist/ssr/escape.d.ts.map +0 -1
- package/dist/ssr/sink.d.ts +0 -23
- package/dist/ssr/sink.d.ts.map +0 -1
- package/dist/ssr/stream-render.d.ts +0 -7
- package/dist/ssr/stream-render.d.ts.map +0 -1
- package/dist/vite/index.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/boot/index.ts"],"sourcesContent":["/**\n * App bootstrap and mount\n */\n\nimport {\n createComponentInstance,\n mountComponent,\n cleanupComponent,\n type ComponentFunction,\n type ComponentInstance,\n} from '../runtime/component';\nimport {\n isDevelopmentEnvironment,\n isProductionEnvironment,\n} from '../common/env';\nimport { logger } from '../dev/logger';\nimport { initializeNavigation, registerAppInstance } from '../router/navigate';\nimport {\n configureScrollRestoration,\n type ScrollRestorationOptions,\n} from '../router/navigate';\nimport {\n _applyManifest,\n _drainLazy,\n _setActiveRouteAuthOptions,\n _snapshotLazy,\n clearRoutes,\n lockRouteRegistration,\n resolveRoute,\n resolveRouteRequest,\n route as registerRoute,\n setServerLocation,\n} from '../router/route';\nimport { globalScheduler } from '../runtime/scheduler';\nimport { assertExecutionModel } from '../runtime/execution-model';\n\nconst HAS_ROUTES_KEY = Symbol.for('__ASKR_HAS_ROUTES__');\n\nlet componentIdCounter = 0;\n\n// Track instances by root element to support multiple createIsland calls on same root\nconst instancesByRoot = new WeakMap<Element, ComponentInstance>();\n\n// Symbol for storing cleanup on elements\nconst CLEANUP_SYMBOL = Symbol.for('__tempoCleanup__');\n\n// Type for elements that have cleanup functions attached\ninterface ElementWithCleanup extends Element {\n [CLEANUP_SYMBOL]?: () => void;\n}\n\nfunction attachCleanupForRoot(\n rootElement: Element,\n instance: ComponentInstance\n) {\n (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL] = () => {\n // Attempt to remove listeners and cleanup instances under the root.\n // In non-strict mode we preserve previous behavior by swallowing errors\n // (but logging in dev); in strict mode we aggregate and re-throw.\n const errors: unknown[] = [];\n try {\n removeAllListeners(rootElement);\n } catch (e) {\n errors.push(e);\n }\n\n // Manually traverse descendants and attempt to cleanup their instances.\n // Avoids import cycles by using local traversal and existing cleanupComponent.\n try {\n const descendants = rootElement.querySelectorAll('*');\n for (const d of Array.from(descendants)) {\n try {\n const inst = (d as Element & { __ASKR_INSTANCE?: ComponentInstance })\n .__ASKR_INSTANCE;\n if (inst) {\n try {\n cleanupComponent(inst);\n } catch (err) {\n errors.push(err);\n }\n try {\n delete (d as Element & { __ASKR_INSTANCE?: ComponentInstance })\n .__ASKR_INSTANCE;\n } catch (err) {\n errors.push(err);\n }\n }\n } catch (err) {\n errors.push(err);\n }\n }\n } catch (e) {\n errors.push(e);\n }\n\n try {\n cleanupComponent(instance as ComponentInstance);\n } catch (e) {\n errors.push(e);\n }\n\n if (errors.length > 0) {\n if (instance.cleanupStrict) {\n throw new AggregateError(errors, `cleanup failed for app root`);\n } else if (isDevelopmentEnvironment()) {\n for (const err of errors) logger.warn('[Askr] cleanup error:', err);\n }\n }\n };\n\n try {\n const descriptor =\n Object.getOwnPropertyDescriptor(rootElement, 'innerHTML') ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(rootElement),\n 'innerHTML'\n ) ||\n Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');\n\n if (descriptor && (descriptor.get || descriptor.set)) {\n Object.defineProperty(rootElement, 'innerHTML', {\n get: descriptor.get\n ? function (this: Element) {\n return descriptor.get!.call(this);\n }\n : undefined,\n set: function (this: Element, value: string) {\n if (value === '' && instancesByRoot.get(this) === instance) {\n try {\n removeAllListeners(rootElement);\n } catch (e) {\n if (instance.cleanupStrict) throw e;\n if (isDevelopmentEnvironment()) {\n logger.warn('[Askr] cleanup error:', e);\n }\n }\n\n try {\n cleanupComponent(instance as ComponentInstance);\n } catch (e) {\n if (instance.cleanupStrict) throw e;\n if (isDevelopmentEnvironment()) {\n logger.warn('[Askr] cleanup error:', e);\n }\n }\n }\n if (descriptor.set) {\n return descriptor.set.call(this, value);\n }\n },\n configurable: true,\n });\n }\n } catch {\n // If Object.defineProperty fails, ignore\n }\n}\n\n/**\n * Explicitly teardown an app mounted on `root` if present. This is the\n * recommended API for deterministic cleanup rather than relying on overriding\n * `innerHTML` setter behavior.\n */\nexport function teardownApp(_root: Element | string) {\n throw new Error(\n 'The `teardownApp` alias has been removed. Use `cleanupApp(root)` instead.'\n );\n}\n\nimport { Fragment, ELEMENT_TYPE } from '../jsx';\n\nimport { DefaultPortal } from '../foundations/structures/portal';\n\nfunction mountOrUpdate(\n rootElement: Element,\n componentFn: ComponentFunction,\n options?: { cleanupStrict?: boolean }\n) {\n // Ensure root component always includes a DefaultPortal host by wrapping it.\n const wrappedFn: ComponentFunction = (props, ctx) => {\n const out = componentFn(props, ctx);\n const portalVNode = {\n $$typeof: ELEMENT_TYPE,\n type: DefaultPortal,\n props: {},\n key: '__default_portal',\n } as unknown;\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: {\n children:\n out === undefined || out === null\n ? [portalVNode]\n : [out, portalVNode],\n },\n } as unknown as ReturnType<ComponentFunction>;\n };\n // Preserve the original component name for debugging/dev warnings\n Object.defineProperty(wrappedFn, 'name', {\n value: componentFn.name || 'Component',\n });\n\n // Clean up existing cleanup function before mounting new one\n const existingCleanup = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n if (existingCleanup) existingCleanup();\n\n let instance = instancesByRoot.get(rootElement);\n\n if (instance) {\n removeAllListeners(rootElement);\n try {\n cleanupComponent(instance);\n } catch (e) {\n // If previous cleanup threw in strict mode, log but continue mounting new instance\n if (isDevelopmentEnvironment()) {\n logger.warn('[Askr] prior cleanup threw:', e);\n }\n }\n\n instance.fn = wrappedFn;\n instance.evaluationGeneration++;\n instance.mounted = false;\n instance.expectedStateIndices = [];\n instance.firstRenderComplete = false;\n instance.isRoot = true;\n // Update strict flag if provided\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n } else {\n const componentId = String(++componentIdCounter);\n instance = createComponentInstance(componentId, wrappedFn, {}, rootElement);\n instancesByRoot.set(rootElement, instance);\n instance.isRoot = true;\n // Initialize strict flag from options\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n }\n\n attachCleanupForRoot(rootElement, instance);\n mountComponent(instance);\n globalScheduler.flush();\n}\n\nfunction bindResolvedRouteHandler(resolved: ResolvedRoute): ComponentFunction {\n return () =>\n resolved.handler(resolved.params) as ReturnType<ComponentFunction>;\n}\n\nfunction bindDeniedStatus(status: number): ComponentFunction {\n return () => ({\n type: 'div',\n props: {\n 'data-route-denied': String(status),\n },\n children: [String(status)],\n });\n}\n\n// New strongly-typed init functions\nimport type {\n Route,\n RouteManifest,\n ResolvedRoute,\n RouteAuthOptions,\n} from '../common/router';\nimport { installRendererBridge, removeAllListeners } from '../renderer';\ninstallRendererBridge();\n\nexport type IslandConfig = {\n root: Element | string;\n component: ComponentFunction;\n // Optional: surface cleanup errors during teardown for this island\n cleanupStrict?: boolean;\n // Explicitly disallow routes on islands at type level\n routes?: never;\n};\n\nexport type IslandsConfig = {\n islands: IslandConfig[];\n};\n\nexport type SPAConfig = {\n root: Element | string;\n /**\n * Preferred: pass the route manifest built via `registerRoutes(() => { ... })`.\n * ```ts\n * import { getManifest } from '@askrjs/askr/router';\n * await createSPA({ root: '#app', manifest: getManifest() });\n * ```\n */\n manifest?: RouteManifest;\n /** Legacy: flat route array — kept for backward compatibility and test fixtures. */\n routes?: Route[];\n auth?: RouteAuthOptions;\n scrollRestoration?: boolean | ScrollRestorationOptions;\n cleanupStrict?: boolean;\n component?: never;\n};\n\nexport type HydrateSPAConfig = {\n root: Element | string;\n /** Preferred manifest input — see `SPAConfig.manifest`. */\n manifest?: RouteManifest;\n /** Legacy flat route array. */\n routes?: Route[];\n auth?: RouteAuthOptions;\n scrollRestoration?: boolean | ScrollRestorationOptions;\n cleanupStrict?: boolean;\n hydrate?: {\n verifyMarkup?: boolean;\n deferUntilIdle?: boolean;\n deferBelowFold?: boolean;\n foldThreshold?: number;\n skipSelectors?: string[];\n };\n};\n\n/**\n * createIsland: Enhances existing DOM (no router, mounts once)\n */\nexport function createIsland(config: IslandConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIsland requires a config object');\n }\n if (typeof config.component !== 'function') {\n throw new Error('createIsland: component must be a function');\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Islands must not initialize router or routes\n if ('routes' in config) {\n throw new Error(\n 'createIsland does not accept routes; use createSPA for routed apps'\n );\n }\n\n // Routes are never supported with islands.\n // If routes were registered (even at module load time), fail fast to avoid\n // surprising partial router behavior.\n try {\n const g = globalThis as unknown as Record<string | symbol, unknown>;\n if (g[HAS_ROUTES_KEY]) {\n throw new Error(\n 'Routes are not supported with islands. Use createSPA (client) or createSSR (server) instead.'\n );\n }\n } catch {\n // ignore\n }\n\n mountOrUpdate(rootElement, config.component, {\n cleanupStrict: config.cleanupStrict,\n });\n}\n\n/**\n * createIslands: Enhances one or more existing DOM roots (no router).\n * The only public islands constructor.\n */\nexport function createIslands(config: IslandsConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIslands requires a config object');\n }\n if (!Array.isArray(config.islands) || config.islands.length === 0) {\n throw new Error('createIslands requires a non-empty islands array');\n }\n for (const island of config.islands) {\n createIsland(island);\n }\n}\n\n/**\n * createSPA: Initializes router and mounts the app with the provided route manifest or route table.\n *\n * Preferred usage with manifest:\n * ```ts\n * import { getManifest } from '@askrjs/askr/router';\n * await createSPA({ root: '#app', manifest: getManifest() });\n * ```\n *\n * Legacy usage with plain routes array (still supported):\n * ```ts\n * await createSPA({ root: '#app', routes: getRoutes() });\n * ```\n */\nexport async function createSPA(config: SPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('createSPA requires a config object');\n }\n\n const hasManifest =\n config.manifest != null && config.manifest.records.length > 0;\n const hasRoutes = Array.isArray(config.routes) && config.routes.length > 0;\n\n if (!hasManifest && !hasRoutes) {\n throw new Error(\n 'createSPA requires a route manifest or route table. ' +\n 'Pass `manifest: getManifest()` or `routes: getRoutes()`. ' +\n 'If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n const pendingLazyAtBoot = _snapshotLazy();\n\n configureScrollRestoration(config.scrollRestoration);\n\n clearRoutes();\n\n if (hasManifest) {\n // Preferred path: apply pre-built manifest records directly\n _applyManifest(config.manifest!);\n } else {\n // Legacy path: register plain Route objects (no layout metadata)\n for (const r of config.routes!) {\n registerRoute(r.path, r.handler as Parameters<typeof registerRoute>[1]);\n }\n }\n\n const routeAuth = config.auth ?? config.manifest?.auth;\n _setActiveRouteAuthOptions(routeAuth);\n\n // Drain any lazy() imports so all split chunks are ready before mounting\n await _drainLazy(pendingLazyAtBoot);\n\n // Lock registration in production to prevent late registration surprises\n if (isProductionEnvironment()) lockRouteRegistration();\n\n // Mount the currently-resolved route handler (if any)\n let path = typeof window !== 'undefined' ? window.location.pathname : '/';\n let href =\n typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}${window.location.hash}`\n : path;\n let resolved = await resolveRouteRequest(href, { auth: routeAuth });\n\n while (\n typeof window !== 'undefined' &&\n resolved &&\n resolved.kind === 'redirect'\n ) {\n const redirectTarget = new URL(resolved.to, window.location.href);\n const redirectHref = `${redirectTarget.pathname}${redirectTarget.search}${redirectTarget.hash}`;\n window.history.replaceState({ path: redirectHref }, '', redirectHref);\n path = redirectTarget.pathname;\n href = redirectHref;\n resolved = await resolveRouteRequest(href, { auth: routeAuth });\n }\n\n if (!resolved) {\n mountOrUpdate(rootElement, () => ({ type: 'div', children: [] }), {\n cleanupStrict: config.cleanupStrict,\n });\n\n await registerAppNavigation(rootElement, path);\n return;\n }\n\n if (resolved.kind === 'redirect') {\n mountOrUpdate(rootElement, () => ({ type: 'div', children: [] }), {\n cleanupStrict: config.cleanupStrict,\n });\n\n await registerAppNavigation(rootElement, path);\n return;\n }\n\n mountOrUpdate(\n rootElement,\n resolved.kind === 'deny'\n ? bindDeniedStatus(resolved.status)\n : bindResolvedRouteHandler({\n handler: resolved.handler,\n params: resolved.params,\n }),\n {\n cleanupStrict: config.cleanupStrict,\n }\n );\n\n await registerAppNavigation(rootElement, path);\n}\n\n/**\n * Mark elements that should be skipped during hydration\n */\nfunction markSkippedElements(root: Element, skipSelectors: string[]): void {\n for (const selector of skipSelectors) {\n const elements = root.querySelectorAll(selector);\n elements.forEach((el) => el.setAttribute('data-skip-hydrate', 'true'));\n }\n}\n\nfunction collectDeferredBelowFoldBoundaries(\n root: Element,\n foldY: number\n): Element[] {\n const boundaries: Element[] = [];\n const stack: Element[] = [];\n\n for (let index = root.children.length - 1; index >= 0; index -= 1) {\n stack.push(root.children[index]);\n }\n\n while (stack.length > 0) {\n const element = stack.pop()!;\n\n if (element.hasAttribute('data-skip-hydrate')) {\n continue;\n }\n\n const rect = element.getBoundingClientRect();\n if (rect.top >= foldY) {\n element.setAttribute('data-skip-hydrate', 'true');\n boundaries.push(element);\n continue;\n }\n\n for (let index = element.children.length - 1; index >= 0; index -= 1) {\n stack.push(element.children[index]);\n }\n }\n\n return boundaries;\n}\n\nfunction activateVisibleDeferredBoundaries(\n boundaries: Element[],\n foldY: number\n): { activated: boolean; remaining: number } {\n let activated = false;\n let remaining = 0;\n\n for (const element of boundaries) {\n if (!element.hasAttribute('data-skip-hydrate')) {\n continue;\n }\n\n const rect = element.getBoundingClientRect();\n if (rect.top < foldY) {\n element.removeAttribute('data-skip-hydrate');\n activated = true;\n } else {\n remaining += 1;\n }\n }\n\n return { activated, remaining };\n}\n\nfunction queueIdleWork(work: () => void): Promise<void> {\n return new Promise((resolve) => {\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(\n () => {\n work();\n resolve();\n },\n { timeout: 2000 }\n );\n return;\n }\n\n setTimeout(() => {\n work();\n resolve();\n }, 0);\n });\n}\n\nfunction flushHydrationActivation(rootElement: Element): void {\n const instance = instancesByRoot.get(rootElement);\n if (!instance) return;\n instance._enqueueRun?.();\n globalScheduler.flush();\n}\n\nfunction shouldVerifyHydrationMarkup(config: HydrateSPAConfig): boolean {\n const explicit = config.hydrate?.verifyMarkup;\n if (typeof explicit === 'boolean') {\n return explicit;\n }\n\n return !isProductionEnvironment();\n}\n\nasync function registerAppNavigation(rootElement: Element, path: string) {\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n}\n\n/**\n * Apply selective hydration with deferral options\n */\nasync function applySelectiveHydration(\n rootElement: Element,\n resolved: { handler: ComponentFunction; params: Record<string, unknown> },\n path: string,\n cleanupStrict: boolean | undefined,\n hydrateOptions: NonNullable<HydrateSPAConfig['hydrate']>\n): Promise<void> {\n const hasPermanentSkips = (hydrateOptions.skipSelectors?.length ?? 0) > 0;\n const hasBelowFoldDeferral = !!hydrateOptions.deferBelowFold;\n const hasSelectiveBoundaries = hasPermanentSkips || hasBelowFoldDeferral;\n\n if (hydrateOptions.skipSelectors?.length) {\n markSkippedElements(rootElement, hydrateOptions.skipSelectors);\n }\n\n let deferredBoundaries: Element[] = [];\n if (hydrateOptions.deferBelowFold) {\n const foldY = hydrateOptions.foldThreshold ?? window.innerHeight;\n deferredBoundaries = collectDeferredBelowFoldBoundaries(rootElement, foldY);\n\n const handleScroll = () => {\n const { activated, remaining } = activateVisibleDeferredBoundaries(\n deferredBoundaries,\n foldY\n );\n\n if (!activated) {\n return;\n }\n\n flushHydrationActivation(rootElement);\n\n if (remaining === 0) {\n window.removeEventListener('scroll', handleScroll);\n }\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n }\n\n if (hydrateOptions.deferUntilIdle && !hasSelectiveBoundaries) {\n await queueIdleWork(() => {\n mountOrUpdate(\n rootElement,\n (() => resolved.handler(resolved.params)) as ComponentFunction,\n {\n cleanupStrict,\n }\n );\n });\n await registerAppNavigation(rootElement, path);\n return;\n }\n\n mountOrUpdate(\n rootElement,\n (() => resolved.handler(resolved.params)) as ComponentFunction,\n {\n cleanupStrict,\n }\n );\n await registerAppNavigation(rootElement, path);\n\n if (hydrateOptions.deferUntilIdle && deferredBoundaries.length > 0) {\n await queueIdleWork(() => {\n const { activated } = activateVisibleDeferredBoundaries(\n deferredBoundaries,\n Number.POSITIVE_INFINITY\n );\n if (activated) {\n flushHydrationActivation(rootElement);\n }\n });\n }\n}\n\n/**\n * hydrateSPA: Hydrate server-rendered HTML.\n * Accepts either a `manifest` (preferred) or a legacy `routes` array.\n */\nexport async function hydrateSPA(config: HydrateSPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('hydrateSPA requires a config object');\n }\n\n const hasManifest =\n config.manifest != null && config.manifest.records.length > 0;\n const hasRoutes = Array.isArray(config.routes) && config.routes.length > 0;\n\n if (!hasManifest && !hasRoutes) {\n throw new Error(\n 'hydrateSPA requires a route manifest or route table. ' +\n 'Pass `manifest: getManifest()` or `routes: getRoutes()`. ' +\n 'If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n const pendingLazyAtHydrationBoot = _snapshotLazy();\n\n configureScrollRestoration(config.scrollRestoration);\n\n clearRoutes();\n\n if (hasManifest) {\n _applyManifest(config.manifest!);\n } else {\n for (const r of config.routes!) {\n registerRoute(r.path, r.handler as Parameters<typeof registerRoute>[1]);\n }\n }\n\n _setActiveRouteAuthOptions(config.auth ?? config.manifest?.auth);\n\n // Drain any lazy() imports so all split chunks are ready before mounting\n await _drainLazy(pendingLazyAtHydrationBoot);\n\n const path = typeof window !== 'undefined' ? window.location.pathname : '/';\n const currentUrl =\n typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}${window.location.hash}`\n : path;\n setServerLocation(currentUrl);\n if (isProductionEnvironment()) lockRouteRegistration();\n\n const resolved = resolveRoute(path);\n if (!resolved) {\n throw new Error(`hydrateSPA: no route found for current path (${path}).`);\n }\n\n // Build a legacy-compatible routes array for the hydration verify call\n const legacyRouteTable = hasManifest\n ? config.manifest!.records.map((r) => ({\n path: r.path,\n handler: r.handler,\n namespace: r.options.namespace,\n }))\n : config.routes!;\n\n if (shouldVerifyHydrationMarkup(config)) {\n const { verifyHydrationSyncForUrl } = await import('../ssr');\n if (\n !verifyHydrationSyncForUrl({\n root: rootElement,\n url: currentUrl,\n routes: legacyRouteTable,\n })\n ) {\n throw new Error(\n '[Askr] Hydration mismatch detected. Server HTML does not match expected server-render output.'\n );\n }\n }\n\n const hydrateOptions = config.hydrate;\n if (hydrateOptions) {\n if (hydrateOptions.deferUntilIdle || hydrateOptions.deferBelowFold) {\n await applySelectiveHydration(\n rootElement,\n {\n handler: resolved.handler as ComponentFunction,\n params: resolved.params as Record<string, unknown>,\n },\n path,\n config.cleanupStrict,\n hydrateOptions\n );\n return;\n }\n\n if (hydrateOptions.skipSelectors?.length) {\n markSkippedElements(rootElement, hydrateOptions.skipSelectors);\n }\n }\n\n mountOrUpdate(rootElement, bindResolvedRouteHandler(resolved), {\n cleanupStrict: config.cleanupStrict,\n });\n await registerAppNavigation(rootElement, path);\n}\n\n/**\n * Cleanup an app mounted on a root element (element or id).\n * Safe to call multiple times — no-op when nothing is mounted.\n */\nexport function cleanupApp(root: Element | string): void {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return;\n\n const cleanupFn = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n if (typeof cleanupFn === 'function') {\n cleanupFn();\n }\n\n instancesByRoot.delete(rootElement);\n}\n\n/**\n * Check whether an app is mounted on the given root\n */\nexport function hasApp(root: Element | string): boolean {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return false;\n return instancesByRoot.has(rootElement);\n}\n"],"mappings":"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"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { Props } from "./props.js";
|
|
2
|
+
import { JSXElement } from "./jsx.js";
|
|
3
|
+
import { VNode } from "./vnode.js";
|
|
4
|
+
|
|
5
|
+
//#region src/common/component.d.ts
|
|
6
|
+
type ComponentContext = {
|
|
7
|
+
signal: AbortSignal;
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
children?: (string | ComponentVNode | null | undefined | false)[];
|
|
9
|
+
type ComponentVNode = {
|
|
10
|
+
type: string;
|
|
11
|
+
props?: Props;
|
|
12
|
+
children?: (string | ComponentVNode | null | undefined | false)[];
|
|
14
13
|
};
|
|
15
|
-
|
|
14
|
+
type ComponentFunction = (props: Props, context?: ComponentContext) => JSXElement | VNode;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { ComponentFunction };
|
|
16
17
|
//# sourceMappingURL=component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","
|
|
1
|
+
{"version":3,"file":"component.d.ts","names":[],"sources":["../../src/common/component.ts"],"mappings":";;;;;KAOY,gBAAA;EACV,MAAA,EAAQ,WAAA;AAAA;AAAA,KAQE,cAAA;EACV,IAAA;EACA,KAAA,GAAQ,KAAA;EACR,QAAA,aAAqB,cAAA;AAAA;AAAA,KAGX,iBAAA,IACV,KAAA,EAAO,KAAA,EACP,OAAA,GAAU,gBAAA,KACP,UAAA,GAAa,KAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Props } from "./props.js";
|
|
2
|
+
|
|
3
|
+
//#region src/common/control.d.ts
|
|
4
|
+
declare const __CONTROL_BOUNDARY__: unique symbol;
|
|
5
|
+
declare const EAGER_CONTROL_PRIMITIVE: unique symbol;
|
|
6
|
+
type EagerControlPrimitive<P extends Props = Props> = ((props: P) => unknown) & {
|
|
7
|
+
[EAGER_CONTROL_PRIMITIVE]?: true;
|
|
8
|
+
};
|
|
9
|
+
declare function markEagerControlPrimitive<T extends (...args: never[]) => unknown>(primitive: T): T;
|
|
10
|
+
declare function isEagerControlPrimitive(value: unknown): value is EagerControlPrimitive;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { EagerControlPrimitive };
|
|
13
|
+
//# sourceMappingURL=control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.d.ts","names":[],"sources":["../../src/common/control.ts"],"mappings":";;;cAEa,oBAAA;AAAA,cAEP,uBAAA;AAAA,KAEM,qBAAA,WAAgC,KAAA,GAAQ,KAAA,MAClD,KAAA,EAAO,CAAA;EAAA,CAEN,uBAAA;AAAA;AAAA,iBAGa,yBAAA,eACA,IAAA,sBAAA,CACd,SAAA,EAAW,CAAA,GAAI,CAAA;AAAA,iBASD,uBAAA,CACd,KAAA,YACC,KAAA,IAAS,qBAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/common/control.ts
|
|
2
|
+
const __CONTROL_BOUNDARY__ = Symbol("__CONTROL_BOUNDARY__");
|
|
3
|
+
const EAGER_CONTROL_PRIMITIVE = Symbol("__ASKR_EAGER_CONTROL_PRIMITIVE__");
|
|
4
|
+
function markEagerControlPrimitive(primitive) {
|
|
5
|
+
primitive[EAGER_CONTROL_PRIMITIVE] = true;
|
|
6
|
+
return primitive;
|
|
7
|
+
}
|
|
8
|
+
function isEagerControlPrimitive(value) {
|
|
9
|
+
return typeof value === "function" && Boolean(value[EAGER_CONTROL_PRIMITIVE]);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { __CONTROL_BOUNDARY__, isEagerControlPrimitive, markEagerControlPrimitive };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.js","names":[],"sources":["../../src/common/control.ts"],"sourcesContent":["import type { Props } from './props';\n\nexport const __CONTROL_BOUNDARY__ = Symbol('__CONTROL_BOUNDARY__');\n\nconst EAGER_CONTROL_PRIMITIVE = Symbol('__ASKR_EAGER_CONTROL_PRIMITIVE__');\n\nexport type EagerControlPrimitive<P extends Props = Props> = ((\n props: P\n) => unknown) & {\n [EAGER_CONTROL_PRIMITIVE]?: true;\n};\n\nexport function markEagerControlPrimitive<\n T extends (...args: never[]) => unknown,\n>(primitive: T): T {\n (\n primitive as T & {\n [EAGER_CONTROL_PRIMITIVE]?: true;\n }\n )[EAGER_CONTROL_PRIMITIVE] = true;\n return primitive;\n}\n\nexport function isEagerControlPrimitive(\n value: unknown\n): value is EagerControlPrimitive {\n return (\n typeof value === 'function' &&\n Boolean(\n (\n value as {\n [EAGER_CONTROL_PRIMITIVE]?: true;\n }\n )[EAGER_CONTROL_PRIMITIVE]\n )\n );\n}\n"],"mappings":";AAEA,MAAa,uBAAuB,OAAO,uBAAuB;AAElE,MAAM,0BAA0B,OAAO,mCAAmC;AAQ1E,SAAgB,0BAEd,WAAiB;AAEf,WAGA,2BAA2B;AAC7B,QAAO;;AAGT,SAAgB,wBACd,OACgC;AAChC,QACE,OAAO,UAAU,cACjB,QAEI,MAGA,yBACH"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/common/env.ts
|
|
2
|
+
function normalizeEnv(source) {
|
|
3
|
+
if (!source) return {};
|
|
4
|
+
const normalized = {};
|
|
5
|
+
for (const [key, value] of Object.entries(source)) if (typeof value === "string") normalized[key] = value;
|
|
6
|
+
else if (typeof value === "boolean" || typeof value === "number") normalized[key] = String(value);
|
|
7
|
+
return normalized;
|
|
8
|
+
}
|
|
9
|
+
function getBuildTimeEnv() {
|
|
10
|
+
const metaEnv = import.meta.env;
|
|
11
|
+
const normalized = normalizeEnv(metaEnv);
|
|
12
|
+
if (normalized.NODE_ENV == null && metaEnv) {
|
|
13
|
+
if (typeof metaEnv.MODE === "string" && metaEnv.MODE.length > 0) normalized.NODE_ENV = metaEnv.MODE;
|
|
14
|
+
else if (metaEnv.PROD === true || metaEnv.PROD === "true") normalized.NODE_ENV = "production";
|
|
15
|
+
else if (metaEnv.DEV === true || metaEnv.DEV === "true") normalized.NODE_ENV = "development";
|
|
16
|
+
}
|
|
17
|
+
return normalized;
|
|
18
|
+
}
|
|
19
|
+
function resolveNodeEnv(processNodeEnv, buildNodeEnv) {
|
|
20
|
+
if (buildNodeEnv === "production") return "production";
|
|
21
|
+
if (processNodeEnv != null) return processNodeEnv;
|
|
22
|
+
if (buildNodeEnv === "development") return "development";
|
|
23
|
+
return buildNodeEnv === "test" ? void 0 : buildNodeEnv;
|
|
24
|
+
}
|
|
25
|
+
function getRuntimeEnv() {
|
|
26
|
+
const processEnv = globalThis.process?.env ?? {};
|
|
27
|
+
const buildTimeEnv = getBuildTimeEnv();
|
|
28
|
+
return {
|
|
29
|
+
...processEnv,
|
|
30
|
+
...buildTimeEnv,
|
|
31
|
+
NODE_ENV: resolveNodeEnv(processEnv.NODE_ENV, buildTimeEnv.NODE_ENV)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function isProductionEnvironment() {
|
|
35
|
+
return getRuntimeEnv().NODE_ENV === "production";
|
|
36
|
+
}
|
|
37
|
+
function isDevelopmentEnvironment() {
|
|
38
|
+
return !isProductionEnvironment();
|
|
39
|
+
}
|
|
40
|
+
function isRuntimeEnvFlagEnabled(name) {
|
|
41
|
+
const value = getRuntimeEnv()[name];
|
|
42
|
+
return value === "1" || value === "true";
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { getRuntimeEnv, isDevelopmentEnvironment, isProductionEnvironment, isRuntimeEnvFlagEnabled };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","names":[],"sources":["../../src/common/env.ts"],"sourcesContent":["export type RuntimeEnv = Record<string, string | undefined>;\n\ntype RuntimeEnvGlobal = typeof globalThis & {\n process?: {\n env?: RuntimeEnv;\n };\n};\n\ntype BuildTimeEnv = Record<string, unknown> & {\n NODE_ENV?: unknown;\n MODE?: unknown;\n PROD?: unknown;\n DEV?: unknown;\n};\n\nfunction normalizeEnv(source?: Record<string, unknown>): RuntimeEnv {\n if (!source) {\n return {};\n }\n\n const normalized: RuntimeEnv = {};\n for (const [key, value] of Object.entries(source)) {\n if (typeof value === 'string') {\n normalized[key] = value;\n } else if (typeof value === 'boolean' || typeof value === 'number') {\n normalized[key] = String(value);\n }\n }\n\n return normalized;\n}\n\nfunction getBuildTimeEnv(): RuntimeEnv {\n const metaEnv = (import.meta as ImportMeta & { env?: BuildTimeEnv }).env;\n const normalized = normalizeEnv(metaEnv);\n\n if (normalized.NODE_ENV == null && metaEnv) {\n if (typeof metaEnv.MODE === 'string' && metaEnv.MODE.length > 0) {\n normalized.NODE_ENV = metaEnv.MODE;\n } else if (metaEnv.PROD === true || metaEnv.PROD === 'true') {\n normalized.NODE_ENV = 'production';\n } else if (metaEnv.DEV === true || metaEnv.DEV === 'true') {\n normalized.NODE_ENV = 'development';\n }\n }\n\n return normalized;\n}\n\nfunction resolveNodeEnv(\n processNodeEnv: string | undefined,\n buildNodeEnv: string | undefined\n): string | undefined {\n if (buildNodeEnv === 'production') {\n return 'production';\n }\n\n if (processNodeEnv != null) {\n return processNodeEnv;\n }\n\n if (buildNodeEnv === 'development') {\n return 'development';\n }\n\n return buildNodeEnv === 'test' ? undefined : buildNodeEnv;\n}\n\nexport function getRuntimeEnv(): RuntimeEnv {\n const processEnv = (globalThis as RuntimeEnvGlobal).process?.env ?? {};\n const buildTimeEnv = getBuildTimeEnv();\n\n return {\n ...processEnv,\n ...buildTimeEnv,\n NODE_ENV: resolveNodeEnv(processEnv.NODE_ENV, buildTimeEnv.NODE_ENV),\n };\n}\n\nexport function isProductionEnvironment(): boolean {\n return getRuntimeEnv().NODE_ENV === 'production';\n}\n\nexport function isDevelopmentEnvironment(): boolean {\n return !isProductionEnvironment();\n}\n\nexport function isRuntimeEnvFlagEnabled(name: string): boolean {\n const value = getRuntimeEnv()[name];\n return value === '1' || value === 'true';\n}\n"],"mappings":";AAeA,SAAS,aAAa,QAA8C;AAClE,KAAI,CAAC,OACH,QAAO,EAAE;CAGX,MAAM,aAAyB,EAAE;AACjC,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,KAAI,OAAO,UAAU,SACnB,YAAW,OAAO;UACT,OAAO,UAAU,aAAa,OAAO,UAAU,SACxD,YAAW,OAAO,OAAO,MAAM;AAInC,QAAO;;AAGT,SAAS,kBAA8B;CACrC,MAAM,UAAW,OAAO,KAA6C;CACrE,MAAM,aAAa,aAAa,QAAQ;AAExC,KAAI,WAAW,YAAY,QAAQ,SACjC;MAAI,OAAO,QAAQ,SAAS,YAAY,QAAQ,KAAK,SAAS,EAC5D,YAAW,WAAW,QAAQ;WACrB,QAAQ,SAAS,QAAQ,QAAQ,SAAS,OACnD,YAAW,WAAW;WACb,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OACjD,YAAW,WAAW;;AAI1B,QAAO;;AAGT,SAAS,eACP,gBACA,cACoB;AACpB,KAAI,iBAAiB,aACnB,QAAO;AAGT,KAAI,kBAAkB,KACpB,QAAO;AAGT,KAAI,iBAAiB,cACnB,QAAO;AAGT,QAAO,iBAAiB,SAAS,SAAY;;AAG/C,SAAgB,gBAA4B;CAC1C,MAAM,aAAc,WAAgC,SAAS,OAAO,EAAE;CACtE,MAAM,eAAe,iBAAiB;AAEtC,QAAO;EACL,GAAG;EACH,GAAG;EACH,UAAU,eAAe,WAAW,UAAU,aAAa,SAAS;EACrE;;AAGH,SAAgB,0BAAmC;AACjD,QAAO,eAAe,CAAC,aAAa;;AAGtC,SAAgB,2BAAoC;AAClD,QAAO,CAAC,yBAAyB;;AAGnC,SAAgB,wBAAwB,MAAuB;CAC7D,MAAM,QAAQ,eAAe,CAAC;AAC9B,QAAO,UAAU,OAAO,UAAU"}
|
package/dist/common/jsx.d.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { Props } from "./props.js";
|
|
2
|
+
|
|
3
|
+
//#region src/common/jsx.d.ts
|
|
4
|
+
declare const ELEMENT_TYPE: unique symbol;
|
|
5
|
+
declare const Fragment: unique symbol;
|
|
6
|
+
declare const STATIC_CHILDREN: unique symbol;
|
|
7
|
+
interface JSXElement {
|
|
8
|
+
/** Internal element marker */
|
|
9
|
+
$$typeof: symbol;
|
|
10
|
+
/** Element type: string, component, Fragment, etc */
|
|
11
|
+
type: string | ((props: Props) => unknown) | symbol;
|
|
12
|
+
/** Props bag */
|
|
13
|
+
props: Props;
|
|
14
|
+
/** Optional key (normalized by runtime) */
|
|
15
|
+
key?: string | number | null;
|
|
16
16
|
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { Fragment, JSXElement };
|
|
17
19
|
//# sourceMappingURL=jsx.d.ts.map
|
package/dist/common/jsx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx.d.ts","
|
|
1
|
+
{"version":3,"file":"jsx.d.ts","names":[],"sources":["../../src/common/jsx.ts"],"mappings":";;;cAMa,YAAA;AAAA,cACA,QAAA;AAAA,cACA,eAAA;AAAA,UAEI,UAAA;EAHJ;EAKX,QAAA;;EAGA,IAAA,aAAiB,KAAA,EAAO,KAAA;EARyB;EAWjD,KAAA,EAAO,KAAA;EAVwD;EAa/D,GAAA;AAAA"}
|
package/dist/common/jsx.js
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/common/jsx.ts
|
|
2
|
+
const ELEMENT_TYPE = Symbol.for("askr.element");
|
|
3
|
+
const Fragment = Symbol.for("askr.fragment");
|
|
4
|
+
const STATIC_CHILDREN = Symbol.for("askr.static-children");
|
|
5
|
+
//#endregion
|
|
6
|
+
export { ELEMENT_TYPE, Fragment, STATIC_CHILDREN };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=jsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.js","names":[],"sources":["../../src/common/jsx.ts"],"sourcesContent":["/**\n * Common call contracts: JSX element shape\n */\n\nimport type { Props } from './props';\n\nexport const ELEMENT_TYPE = Symbol.for('askr.element');\nexport const Fragment = Symbol.for('askr.fragment');\nexport const STATIC_CHILDREN = Symbol.for('askr.static-children');\n\nexport interface JSXElement {\n /** Internal element marker */\n $$typeof: symbol;\n\n /** Element type: string, component, Fragment, etc */\n type: string | ((props: Props) => unknown) | symbol;\n\n /** Props bag */\n props: Props;\n\n /** Optional key (normalized by runtime) */\n key?: string | number | null;\n}\n"],"mappings":";AAMA,MAAa,eAAe,OAAO,IAAI,eAAe;AACtD,MAAa,WAAW,OAAO,IAAI,gBAAgB;AACnD,MAAa,kBAAkB,OAAO,IAAI,uBAAuB"}
|
package/dist/common/props.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/common/props.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* Common call contracts: Props
|
|
3
4
|
*
|
|
@@ -7,17 +8,19 @@
|
|
|
7
8
|
* Props accepted by components and elements.
|
|
8
9
|
* Intentionally permissive but provides a single named type.
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
interface Props {
|
|
12
|
+
/** Optional key for keyed lists (string | number | symbol for internal frames) */
|
|
13
|
+
key?: string | number | symbol;
|
|
14
|
+
/** Optional children slot */
|
|
15
|
+
children?: unknown;
|
|
16
|
+
/** Allow additional arbitrary attributes (e.g., class, id, data-*) */
|
|
17
|
+
[attr: string]: unknown;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
interface ComponentNode {
|
|
20
|
+
type: 'component' | 'element' | 'text';
|
|
21
|
+
value?: unknown;
|
|
22
|
+
children?: ComponentNode[];
|
|
22
23
|
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { Props };
|
|
23
26
|
//# sourceMappingURL=props.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.d.ts","
|
|
1
|
+
{"version":3,"file":"props.d.ts","names":[],"sources":["../../src/common/props.ts"],"mappings":";;AAUA;;;;;;;;UAAiB,KAAA;EASA;EAPf,GAAA;;EAEA,QAAA;EAMA;EAAA,CAJC,IAAA;AAAA;AAAA,UAGc,aAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA,GAAW,aAAA;AAAA"}
|
package/dist/common/router.d.ts
CHANGED
|
@@ -1,39 +1,197 @@
|
|
|
1
|
+
//#region src/common/router.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* Common call contracts: Router types
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
/**
|
|
6
|
+
* A route page component: a regular component that receives route params as
|
|
7
|
+
* props (always `Record<string, string>` derived from the URL pattern).
|
|
8
|
+
*
|
|
9
|
+
* Components may accept no params at all — `() => unknown` is assignable.
|
|
10
|
+
*/
|
|
11
|
+
type RouteComponent = (props: Record<string, string>) => unknown;
|
|
12
|
+
type RouteMode = 'spa' | 'ssr' | 'ssg';
|
|
13
|
+
type RouteAuthMode = true | 'guest';
|
|
14
|
+
type AccessRedirectStatus = 301 | 302 | 303 | 307 | 308;
|
|
15
|
+
type AccessDenyStatus = 401 | 403 | 404;
|
|
16
|
+
interface AccessAllowDecision {
|
|
17
|
+
kind: 'allow';
|
|
18
|
+
}
|
|
19
|
+
interface AccessRedirectDecision {
|
|
20
|
+
kind: 'redirect';
|
|
21
|
+
to: string;
|
|
22
|
+
status?: AccessRedirectStatus;
|
|
23
|
+
replace?: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface AccessDenyDecision {
|
|
26
|
+
kind: 'deny';
|
|
27
|
+
status: AccessDenyStatus;
|
|
28
|
+
}
|
|
29
|
+
type AccessDecision = AccessAllowDecision | AccessRedirectDecision | AccessDenyDecision;
|
|
30
|
+
interface RouteContext<Session = unknown, User = unknown> {
|
|
31
|
+
mode: RouteMode;
|
|
32
|
+
params: Record<string, string>;
|
|
33
|
+
pathname: string;
|
|
34
|
+
search: string;
|
|
35
|
+
hash: string;
|
|
36
|
+
href: string;
|
|
37
|
+
session: Session | null;
|
|
38
|
+
user: User | null;
|
|
39
|
+
signal: AbortSignal;
|
|
40
|
+
}
|
|
41
|
+
type RoutePolicy = (context: RouteContext) => AccessDecision | Promise<AccessDecision>;
|
|
42
|
+
interface RouteAuthState<Session = unknown, User = unknown> {
|
|
43
|
+
session: Session | null;
|
|
44
|
+
user: User | null;
|
|
45
|
+
}
|
|
46
|
+
type RouteAuthResolver<Session = unknown, User = unknown> = (context: Omit<RouteContext<Session, User>, 'session' | 'user'>) => RouteAuthState<Session, User> | Promise<RouteAuthState<Session, User>>;
|
|
47
|
+
interface RouteAuthOptions<Session = unknown, User = unknown> {
|
|
48
|
+
resolve: RouteAuthResolver<Session, User>;
|
|
49
|
+
loginPath?: string | ((context: RouteContext<Session, User>) => string | Promise<string>);
|
|
50
|
+
guestRedirectTo?: string | ((context: RouteContext<Session, User>) => string | Promise<string>);
|
|
51
|
+
hasRole?: (user: User, role: string, context: RouteContext<Session, User>) => boolean | Promise<boolean>;
|
|
52
|
+
hasPermission?: (user: User, permission: string, context: RouteContext<Session, User>) => boolean | Promise<boolean>;
|
|
53
|
+
}
|
|
54
|
+
interface CommonAccessOptions {
|
|
55
|
+
auth?: RouteAuthMode;
|
|
56
|
+
role?: string;
|
|
57
|
+
permission?: string;
|
|
58
|
+
policies?: readonly RoutePolicy[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Options for `route()` declarations.
|
|
62
|
+
*
|
|
63
|
+
* - `loader`: server data loader called before render, result passed as SSR data
|
|
64
|
+
* - `entries`: SSG entry generator — returns one param map per static page
|
|
65
|
+
* - `title`: page title hint used by SSG and document-meta integrations
|
|
66
|
+
* - `namespace`: MFE namespace key for grouped route management
|
|
67
|
+
*/
|
|
68
|
+
interface RouteOptions extends CommonAccessOptions {
|
|
69
|
+
loader?: (context: {
|
|
16
70
|
params: Record<string, string>;
|
|
71
|
+
}) => unknown;
|
|
72
|
+
entries?: () => Array<Record<string, string>> | Promise<Array<Record<string, string>>>;
|
|
73
|
+
title?: string;
|
|
74
|
+
namespace?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* A single parsed segment from a route path.
|
|
78
|
+
*
|
|
79
|
+
* - `static`: a literal path segment, e.g. `"users"` in `/users/{id}`
|
|
80
|
+
* - `param`: a `{name}` capture group — `value` holds the param name
|
|
81
|
+
* - `wildcard`: a bare `*` segment that captures exactly one segment
|
|
82
|
+
* - `catchall`: the `/*` catch-all that matches any depth
|
|
83
|
+
*/
|
|
84
|
+
interface ParsedSegment {
|
|
85
|
+
kind: 'static' | 'param' | 'wildcard' | 'catchall';
|
|
86
|
+
/** For static/wildcard/catchall: the literal text; for param: the param name. */
|
|
87
|
+
value: string;
|
|
88
|
+
}
|
|
89
|
+
/** Resolved layout component as stored in a route record's layout chain. */
|
|
90
|
+
interface LayoutScopeRecord {
|
|
91
|
+
component: (props: {
|
|
92
|
+
children?: unknown;
|
|
93
|
+
}) => unknown;
|
|
94
|
+
}
|
|
95
|
+
interface RegisterRoutesOptions {
|
|
96
|
+
auth?: RouteAuthOptions;
|
|
97
|
+
}
|
|
98
|
+
type RouteDefinition = () => void;
|
|
99
|
+
interface RouteRequestOptions {
|
|
100
|
+
manifest?: RouteManifest;
|
|
101
|
+
mode?: RouteMode;
|
|
102
|
+
auth?: RouteAuthOptions;
|
|
103
|
+
signal?: AbortSignal;
|
|
104
|
+
}
|
|
105
|
+
interface RouteRenderResult {
|
|
106
|
+
kind: 'render';
|
|
107
|
+
handler: RouteHandler;
|
|
108
|
+
params: Record<string, string>;
|
|
109
|
+
}
|
|
110
|
+
type RouteRequestResult = RouteRenderResult | AccessRedirectDecision | AccessDenyDecision | null;
|
|
111
|
+
interface GroupHelperOptions extends CommonAccessOptions {
|
|
112
|
+
layout?: (props: {
|
|
113
|
+
children?: unknown;
|
|
114
|
+
}) => unknown;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* A fully normalized route record produced by `route(path, Component, options?)`.
|
|
118
|
+
*
|
|
119
|
+
* This is the canonical representation shared by:
|
|
120
|
+
* - SPA matching and navigation
|
|
121
|
+
* - SSR request resolution
|
|
122
|
+
* - SSG manifest expansion
|
|
123
|
+
*/
|
|
124
|
+
interface RouteRecord {
|
|
125
|
+
/** Canonical normalized absolute path, e.g. `/posts/{slug}` */
|
|
126
|
+
path: string;
|
|
127
|
+
/** The page component to render when this route is active */
|
|
128
|
+
component: RouteComponent;
|
|
129
|
+
/** Pre-parsed segment list for fast matching and typed param extraction */
|
|
130
|
+
segments: ParsedSegment[];
|
|
131
|
+
/** Pre-computed specificity rank (higher = more specific) */
|
|
132
|
+
rank: number;
|
|
133
|
+
/** Layout chain from outermost to innermost, applied automatically on render */
|
|
134
|
+
layoutChain: LayoutScopeRecord[];
|
|
135
|
+
/** Route metadata: loader, entries, policies, title, namespace */
|
|
136
|
+
options: RouteOptions;
|
|
137
|
+
/** True when this is the `/*` catch-all fallback route */
|
|
138
|
+
isFallback: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Runtime-ready handler with layout composition baked in.
|
|
141
|
+
* Compatible with the low-level `RouteHandler` signature so that navigation
|
|
142
|
+
* and SSR rendering do not need to know about layout chains.
|
|
143
|
+
*/
|
|
144
|
+
handler: RouteHandler;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The normalized route manifest produced by registered route definitions.
|
|
148
|
+
* declarations. Pass it to `createSPA`, `hydrateSPA`, or `renderToString`
|
|
149
|
+
* instead of assembling plain `Route[]` arrays.
|
|
150
|
+
*
|
|
151
|
+
* ```ts
|
|
152
|
+
* import { getManifest } from '@askrjs/askr/router';
|
|
153
|
+
* await createSPA({ root: '#app', manifest: getManifest() });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
interface RouteManifest {
|
|
157
|
+
records: RouteRecord[];
|
|
158
|
+
auth?: RouteAuthOptions;
|
|
159
|
+
}
|
|
160
|
+
interface RouteHandler {
|
|
161
|
+
(params: Record<string, string>, context?: {
|
|
162
|
+
signal: AbortSignal;
|
|
163
|
+
}): unknown;
|
|
164
|
+
}
|
|
165
|
+
interface Route {
|
|
166
|
+
path: string;
|
|
167
|
+
handler: RouteHandler;
|
|
168
|
+
namespace?: string;
|
|
169
|
+
}
|
|
170
|
+
interface ResolvedRoute {
|
|
171
|
+
handler: RouteHandler;
|
|
172
|
+
params: Record<string, string>;
|
|
173
|
+
}
|
|
174
|
+
interface RouteMatch {
|
|
175
|
+
path: string;
|
|
176
|
+
params: Readonly<Record<string, string>>;
|
|
177
|
+
name?: string;
|
|
178
|
+
namespace?: string;
|
|
179
|
+
}
|
|
180
|
+
interface RouteQuery {
|
|
181
|
+
get(key: string): string | null;
|
|
182
|
+
getAll(key: string): string[];
|
|
183
|
+
has(key: string): boolean;
|
|
184
|
+
toJSON(): Record<string, string | string[]>;
|
|
17
185
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
getAll(key: string): string[];
|
|
27
|
-
has(key: string): boolean;
|
|
28
|
-
toJSON(): Record<string, string | string[]>;
|
|
29
|
-
}
|
|
30
|
-
export interface RouteSnapshot {
|
|
31
|
-
path: string;
|
|
32
|
-
params: Readonly<Record<string, string>>;
|
|
33
|
-
query: Readonly<RouteQuery>;
|
|
34
|
-
hash: string | null;
|
|
35
|
-
name?: string;
|
|
36
|
-
namespace?: string;
|
|
37
|
-
matches: readonly RouteMatch[];
|
|
186
|
+
interface RouteSnapshot {
|
|
187
|
+
path: string;
|
|
188
|
+
params: Readonly<Record<string, string>>;
|
|
189
|
+
query: Readonly<RouteQuery>;
|
|
190
|
+
hash: string | null;
|
|
191
|
+
name?: string;
|
|
192
|
+
namespace?: string;
|
|
193
|
+
matches: readonly RouteMatch[];
|
|
38
194
|
}
|
|
195
|
+
//#endregion
|
|
196
|
+
export { AccessDecision, AccessDenyDecision, AccessDenyStatus, AccessRedirectDecision, AccessRedirectStatus, GroupHelperOptions, LayoutScopeRecord, ParsedSegment, RegisterRoutesOptions, ResolvedRoute, Route, RouteAuthMode, RouteAuthOptions, RouteAuthResolver, RouteAuthState, RouteComponent, RouteContext, RouteDefinition, RouteHandler, RouteManifest, RouteMatch, RouteMode, RouteOptions, RoutePolicy, RouteQuery, RouteRecord, RouteRenderResult, RouteRequestOptions, RouteRequestResult, RouteSnapshot };
|
|
39
197
|
//# sourceMappingURL=router.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","
|
|
1
|
+
{"version":3,"file":"router.d.ts","names":[],"sources":["../../src/common/router.ts"],"mappings":";;AAUA;;;;;AAEA;;;KAFY,cAAA,IAAkB,KAAA,EAAO,MAAA;AAAA,KAEzB,SAAA;AAAA,KACA,aAAA;AAAA,KACA,oBAAA;AAAA,KACA,gBAAA;AAAA,UAEK,mBAAA;EACf,IAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;EACA,EAAA;EACA,MAAA,GAAS,oBAAA;EACT,OAAA;AAAA;AAAA,UAGe,kBAAA;EACf,IAAA;EACA,MAAA,EAAQ,gBAAA;AAAA;AAAA,KAGE,cAAA,GACR,mBAAA,GACA,sBAAA,GACA,kBAAA;AAAA,UAEa,YAAA;EACf,IAAA,EAAM,SAAA;EACN,MAAA,EAAQ,MAAA;EACR,QAAA;EACA,MAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA,EAAS,OAAA;EACT,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,WAAA;AAAA;AAAA,KAGE,WAAA,IACV,OAAA,EAAS,YAAA,KACN,cAAA,GAAiB,OAAA,CAAQ,cAAA;AAAA,UAEb,cAAA;EACf,OAAA,EAAS,OAAA;EACT,IAAA,EAAM,IAAA;AAAA;AAAA,KAGI,iBAAA,uCACV,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,IAAA,2BACjC,cAAA,CAAe,OAAA,EAAS,IAAA,IAAQ,OAAA,CAAQ,cAAA,CAAe,OAAA,EAAS,IAAA;AAAA,UAEpD,gBAAA;EACf,OAAA,EAAS,iBAAA,CAAkB,OAAA,EAAS,IAAA;EACpC,SAAA,cAEM,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,IAAA,eAAmB,OAAA;EACxD,eAAA,cAEM,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,IAAA,eAAmB,OAAA;EACxD,OAAA,IACE,IAAA,EAAM,IAAA,EACN,IAAA,UACA,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,IAAA,gBAClB,OAAA;EACf,aAAA,IACE,IAAA,EAAM,IAAA,EACN,UAAA,UACA,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,IAAA,gBAClB,OAAA;AAAA;AAAA,UAGA,mBAAA;EACf,IAAA,GAAO,aAAA;EACP,IAAA;EACA,UAAA;EACA,QAAA,YAAoB,WAAA;AAAA;;;;;;;AAjDtB;;UA4DiB,YAAA,SAAqB,mBAAA;EACpC,MAAA,IAAU,OAAA;IAAW,MAAA,EAAQ,MAAA;EAAA;EAC7B,OAAA,SACI,KAAA,CAAM,MAAA,oBACN,OAAA,CAAQ,KAAA,CAAM,MAAA;EAClB,KAAA;EACA,SAAA;AAAA;;;;;;;;;UAWe,aAAA;EACf,IAAA;EAvEA;EAyEA,KAAA;AAAA;;UAIe,iBAAA;EACf,SAAA,GAAY,KAAA;IAAS,QAAA;EAAA;AAAA;AAAA,UAGN,qBAAA;EACf,IAAA,GAAO,gBAAA;AAAA;AAAA,KAGG,eAAA;AAAA,UAEK,mBAAA;EACf,QAAA,GAAW,aAAA;EACX,IAAA,GAAO,SAAA;EACP,IAAA,GAAO,gBAAA;EACP,MAAA,GAAS,WAAA;AAAA;AAAA,UAGM,iBAAA;EACf,IAAA;EACA,OAAA,EAAS,YAAA;EACT,MAAA,EAAQ,MAAA;AAAA;AAAA,KAGE,kBAAA,GACR,iBAAA,GACA,sBAAA,GACA,kBAAA;AAAA,UAGa,kBAAA,SAA2B,mBAAA;EAC1C,MAAA,IAAU,KAAA;IAAS,QAAA;EAAA;AAAA;;;;;;;AA7FrB;;UAwGiB,WAAA;EAvGY;EAyG3B,IAAA;EAzGc;EA2Gd,SAAA,EAAW,cAAA;EA1GO;EA4GlB,QAAA,EAAU,aAAA;EA5GP;EA8GH,IAAA;EA9GmE;EAgHnE,WAAA,EAAa,iBAAA;EAhHsB;EAkHnC,OAAA,EAAS,YAAA;EAlHiC;EAoH1C,UAAA;EAtH+C;;;;;EA4H/C,OAAA,EAAS,YAAA;AAAA;;;;;;;;;AAxHX;;UAqIiB,aAAA;EACf,OAAA,EAAS,WAAA;EACT,IAAA,GAAO,gBAAA;AAAA;AAAA,UAGQ,YAAA;EAAA,CACd,MAAA,EAAQ,MAAA,kBAAwB,OAAA;IAAY,MAAA,EAAQ,WAAA;EAAA;AAAA;AAAA,UAGtC,KAAA;EACf,IAAA;EACA,OAAA,EAAS,YAAA;EACT,SAAA;AAAA;AAAA,UAGe,aAAA;EACf,OAAA,EAAS,YAAA;EACT,MAAA,EAAQ,MAAA;AAAA;AAAA,UAGO,UAAA;EACf,IAAA;EACA,MAAA,EAAQ,QAAA,CAAS,MAAA;EACjB,IAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,GAAA,CAAI,GAAA;EACJ,MAAA,CAAO,GAAA;EACP,GAAA,CAAI,GAAA;EACJ,MAAA,IAAU,MAAA;AAAA;AAAA,UAGK,aAAA;EACf,IAAA;EACA,MAAA,EAAQ,QAAA,CAAS,MAAA;EACjB,KAAA,EAAO,QAAA,CAAS,UAAA;EAChB,IAAA;EAEA,IAAA;EACA,SAAA;EACA,OAAA,WAAkB,UAAA;AAAA"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
//#region src/common/ssr-errors.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* Common call contracts: SSR error types
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
declare class SSRDataMissingError extends Error {
|
|
6
|
+
readonly code = "SSR_DATA_MISSING";
|
|
7
|
+
constructor(message?: string);
|
|
7
8
|
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { SSRDataMissingError };
|
|
8
11
|
//# sourceMappingURL=ssr-errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr-errors.d.ts","
|
|
1
|
+
{"version":3,"file":"ssr-errors.d.ts","names":[],"sources":["../../src/common/ssr-errors.ts"],"mappings":";;AAIA;;cAAa,mBAAA,SAA4B,KAAA;EAAA,SAC9B,IAAA;cAEP,OAAA;AAAA"}
|
|
@@ -1 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/common/ssr-errors.ts
|
|
2
|
+
/**
|
|
3
|
+
* Common call contracts: SSR error types
|
|
4
|
+
*/
|
|
5
|
+
var SSRDataMissingError = class SSRDataMissingError extends Error {
|
|
6
|
+
constructor(message = "Server-side rendering requires all data to be available synchronously. This component attempted to use async data during SSR.") {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = "SSR_DATA_MISSING";
|
|
9
|
+
this.name = "SSRDataMissingError";
|
|
10
|
+
Object.setPrototypeOf(this, SSRDataMissingError.prototype);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { SSRDataMissingError };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=ssr-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr-errors.js","names":[],"sources":["../../src/common/ssr-errors.ts"],"sourcesContent":["/**\n * Common call contracts: SSR error types\n */\n\nexport class SSRDataMissingError extends Error {\n readonly code = 'SSR_DATA_MISSING';\n constructor(\n message = 'Server-side rendering requires all data to be available synchronously. This component attempted to use async data during SSR.'\n ) {\n super(message);\n this.name = 'SSRDataMissingError';\n Object.setPrototypeOf(this, SSRDataMissingError.prototype);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,sBAAb,MAAa,4BAA4B,MAAM;CAE7C,YACE,UAAU,iIACV;AACA,QAAM,QAAQ;cAJA;AAKd,OAAK,OAAO;AACZ,SAAO,eAAe,MAAM,oBAAoB,UAAU"}
|