@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
package/dist/runtime/fastlane.js
CHANGED
|
@@ -1 +1,204 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { isDevelopmentEnvironment } from "../common/env.js";
|
|
2
|
+
import { logger } from "../dev/logger.js";
|
|
3
|
+
import { globalScheduler } from "./scheduler.js";
|
|
4
|
+
import { Fragment } from "../common/jsx.js";
|
|
5
|
+
import { finalizeReadableSubscriptions } from "./readable.js";
|
|
6
|
+
import { getDevNamespace, getDevValue, setDevValue } from "./dev-namespace.js";
|
|
7
|
+
import { getKeyMapForElement, isKeyedReorderFastPathEligible, populateKeyMapForElement } from "../renderer/keyed.js";
|
|
8
|
+
//#region src/runtime/fastlane.ts
|
|
9
|
+
let _bulkCommitActive = false;
|
|
10
|
+
let _appliedParents = null;
|
|
11
|
+
function enterBulkCommit() {
|
|
12
|
+
_bulkCommitActive = true;
|
|
13
|
+
_appliedParents = /* @__PURE__ */ new WeakSet();
|
|
14
|
+
try {
|
|
15
|
+
setDevValue("__ASKR_FASTLANE_CLEARED_TASKS", globalScheduler.clearPendingSyncTasks?.() ?? 0);
|
|
16
|
+
} catch (err) {
|
|
17
|
+
if (isDevelopmentEnvironment()) throw err;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function exitBulkCommit() {
|
|
21
|
+
_bulkCommitActive = false;
|
|
22
|
+
_appliedParents = null;
|
|
23
|
+
}
|
|
24
|
+
function isBulkCommitActive() {
|
|
25
|
+
return _bulkCommitActive;
|
|
26
|
+
}
|
|
27
|
+
function markFastPathApplied(parent) {
|
|
28
|
+
if (!_appliedParents) return;
|
|
29
|
+
try {
|
|
30
|
+
_appliedParents.add(parent);
|
|
31
|
+
} catch (e) {}
|
|
32
|
+
}
|
|
33
|
+
function isFastPathApplied(parent) {
|
|
34
|
+
return !!(_appliedParents && _appliedParents.has(parent));
|
|
35
|
+
}
|
|
36
|
+
function finalizeReadSubscriptions(instance) {
|
|
37
|
+
finalizeReadableSubscriptions(instance);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Attempt to execute a runtime fast-lane for a single component's synchronous
|
|
41
|
+
* render result. Returns true if the fast-lane was used and commit was done.
|
|
42
|
+
*
|
|
43
|
+
* Preconditions (checked conservatively):
|
|
44
|
+
* - The render result is an intrinsic element root with keyed children
|
|
45
|
+
* - The renderer's fast-path heuristics indicate to use the fast-path
|
|
46
|
+
* - No mount operations are pending on the component instance
|
|
47
|
+
* - No child vnodes are component functions (avoid async/component mounts)
|
|
48
|
+
*/
|
|
49
|
+
function unwrapFragmentForFastPath(vnode) {
|
|
50
|
+
if (!vnode || typeof vnode !== "object" || !("type" in vnode)) return vnode;
|
|
51
|
+
const v = vnode;
|
|
52
|
+
if (typeof v.type === "symbol" && (v.type === Fragment || String(v.type) === "Symbol(askr.fragment)")) {
|
|
53
|
+
const children = v.children || v.props?.children;
|
|
54
|
+
if (Array.isArray(children) && children.length > 0) {
|
|
55
|
+
for (const child of children) if (child && typeof child === "object" && "type" in child) {
|
|
56
|
+
if (typeof child.type === "string") return child;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return vnode;
|
|
61
|
+
}
|
|
62
|
+
function classifyUpdate(instance, result) {
|
|
63
|
+
const unwrappedResult = unwrapFragmentForFastPath(result);
|
|
64
|
+
if (!unwrappedResult || typeof unwrappedResult !== "object" || !("type" in unwrappedResult)) return {
|
|
65
|
+
useFastPath: false,
|
|
66
|
+
reason: "not-vnode"
|
|
67
|
+
};
|
|
68
|
+
const vnode = unwrappedResult;
|
|
69
|
+
if (vnode == null || typeof vnode.type !== "string") return {
|
|
70
|
+
useFastPath: false,
|
|
71
|
+
reason: "not-intrinsic"
|
|
72
|
+
};
|
|
73
|
+
const parent = instance.target;
|
|
74
|
+
if (!parent) return {
|
|
75
|
+
useFastPath: false,
|
|
76
|
+
reason: "no-root"
|
|
77
|
+
};
|
|
78
|
+
const firstChild = parent.children[0];
|
|
79
|
+
if (!firstChild) return {
|
|
80
|
+
useFastPath: false,
|
|
81
|
+
reason: "no-first-child"
|
|
82
|
+
};
|
|
83
|
+
if (firstChild.tagName.toLowerCase() !== String(vnode.type).toLowerCase()) return {
|
|
84
|
+
useFastPath: false,
|
|
85
|
+
reason: "root-tag-mismatch"
|
|
86
|
+
};
|
|
87
|
+
const children = vnode.children || vnode.props?.children;
|
|
88
|
+
if (!Array.isArray(children)) return {
|
|
89
|
+
useFastPath: false,
|
|
90
|
+
reason: "no-children-array"
|
|
91
|
+
};
|
|
92
|
+
for (const c of children) if (typeof c === "object" && c !== null && "type" in c && typeof c.type === "function") return {
|
|
93
|
+
useFastPath: false,
|
|
94
|
+
reason: "component-child-present"
|
|
95
|
+
};
|
|
96
|
+
if ((instance.mountOperations?.length ?? 0) > 0) return {
|
|
97
|
+
useFastPath: false,
|
|
98
|
+
reason: "pending-mounts"
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
populateKeyMapForElement(firstChild);
|
|
102
|
+
} catch {}
|
|
103
|
+
const decision = isKeyedReorderFastPathEligible(firstChild, children, getKeyMapForElement(firstChild));
|
|
104
|
+
if (!decision.useFastPath || decision.totalKeyed < 128) return {
|
|
105
|
+
...decision,
|
|
106
|
+
useFastPath: false,
|
|
107
|
+
reason: "renderer-declined"
|
|
108
|
+
};
|
|
109
|
+
return {
|
|
110
|
+
...decision,
|
|
111
|
+
useFastPath: true
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function commitReorderOnly(instance, result) {
|
|
115
|
+
const evaluate = globalThis.__ASKR_RENDERER?.evaluate;
|
|
116
|
+
if (typeof evaluate !== "function") {
|
|
117
|
+
logger.warn("[Tempo][FASTPATH][DEV] renderer.evaluate not available; declining fast-lane");
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const schedBefore = isDevelopmentEnvironment() ? globalScheduler.getState() : null;
|
|
121
|
+
enterBulkCommit();
|
|
122
|
+
try {
|
|
123
|
+
globalScheduler.runWithSyncProgress(() => {
|
|
124
|
+
evaluate(result, instance.target);
|
|
125
|
+
try {
|
|
126
|
+
finalizeReadSubscriptions(instance);
|
|
127
|
+
} catch (e) {
|
|
128
|
+
if (isDevelopmentEnvironment()) throw e;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
setDevValue("__FASTLANE_CLEARED_AFTER", globalScheduler.clearPendingSyncTasks?.() ?? 0);
|
|
132
|
+
if (isDevelopmentEnvironment()) validateFastLaneInvariants(instance, schedBefore);
|
|
133
|
+
return true;
|
|
134
|
+
} finally {
|
|
135
|
+
exitBulkCommit();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Validates fast-lane invariants in dev mode.
|
|
140
|
+
* Extracted to reduce complexity in commitReorderOnly.
|
|
141
|
+
*/
|
|
142
|
+
function validateFastLaneInvariants(instance, schedBefore) {
|
|
143
|
+
const commitCount = getDevValue("__LAST_FASTPATH_COMMIT_COUNT") ?? 0;
|
|
144
|
+
const invariants = {
|
|
145
|
+
commitCount,
|
|
146
|
+
mountOps: instance.mountOperations?.length ?? 0,
|
|
147
|
+
cleanupFns: instance.cleanupFns?.length ?? 0
|
|
148
|
+
};
|
|
149
|
+
setDevValue("__LAST_FASTLANE_INVARIANTS", invariants);
|
|
150
|
+
if (commitCount !== 1) {
|
|
151
|
+
console.error("[FASTLANE][INV] commitCount", commitCount, "diag", getDevNamespace());
|
|
152
|
+
throw new Error("Fast-lane invariant violated: expected exactly one DOM commit during reorder-only commit");
|
|
153
|
+
}
|
|
154
|
+
if (invariants.mountOps > 0) throw new Error("Fast-lane invariant violated: mount operations were registered during bulk commit");
|
|
155
|
+
if (invariants.cleanupFns > 0) throw new Error("Fast-lane invariant violated: cleanup functions were added during bulk commit");
|
|
156
|
+
const schedAfter = globalScheduler.getState();
|
|
157
|
+
if (schedBefore && schedAfter && schedAfter.taskCount > schedBefore.taskCount) {
|
|
158
|
+
console.error("[FASTLANE] schedBefore, schedAfter", schedBefore, schedAfter);
|
|
159
|
+
console.error("[FASTLANE] enqueue logs", getDevValue("__ENQUEUE_LOGS"));
|
|
160
|
+
throw new Error("Fast-lane invariant violated: scheduler enqueued leftover work during bulk commit");
|
|
161
|
+
}
|
|
162
|
+
let finalState = globalScheduler.getState();
|
|
163
|
+
const executing = globalScheduler.isExecuting();
|
|
164
|
+
let outstandingAfter = Math.max(0, finalState.taskCount - (executing ? 1 : 0));
|
|
165
|
+
if (outstandingAfter !== 0) {
|
|
166
|
+
let attempts = 0;
|
|
167
|
+
while (attempts < 5) {
|
|
168
|
+
if ((globalScheduler.clearPendingSyncTasks?.() ?? 0) === 0) break;
|
|
169
|
+
attempts++;
|
|
170
|
+
}
|
|
171
|
+
finalState = globalScheduler.getState();
|
|
172
|
+
outstandingAfter = Math.max(0, finalState.taskCount - (globalScheduler.isExecuting() ? 1 : 0));
|
|
173
|
+
if (outstandingAfter !== 0) {
|
|
174
|
+
console.error("[FASTLANE] Post-commit enqueue logs:", getDevValue("__ENQUEUE_LOGS"));
|
|
175
|
+
console.error("[FASTLANE] Cleared counts:", getDevValue("__FASTLANE_CLEARED_TASKS"), getDevValue("__FASTLANE_CLEARED_AFTER"));
|
|
176
|
+
throw new Error(`Fast-lane invariant violated: scheduler has ${finalState.taskCount} pending task(s) after commit`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function tryRuntimeFastLaneSync(instance, result) {
|
|
181
|
+
if (!classifyUpdate(instance, result).useFastPath) {
|
|
182
|
+
setDevValue("__LAST_FASTPATH_STATS", void 0);
|
|
183
|
+
setDevValue("__LAST_FASTPATH_COMMIT_COUNT", 0);
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
return commitReorderOnly(instance, result);
|
|
188
|
+
} catch (err) {
|
|
189
|
+
if (isDevelopmentEnvironment()) throw err;
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (typeof globalThis !== "undefined") globalThis.__ASKR_FASTLANE = {
|
|
194
|
+
isBulkCommitActive,
|
|
195
|
+
enterBulkCommit,
|
|
196
|
+
exitBulkCommit,
|
|
197
|
+
tryRuntimeFastLaneSync,
|
|
198
|
+
markFastPathApplied,
|
|
199
|
+
isFastPathApplied
|
|
200
|
+
};
|
|
201
|
+
//#endregion
|
|
202
|
+
export { isBulkCommitActive, markFastPathApplied };
|
|
203
|
+
|
|
204
|
+
//# sourceMappingURL=fastlane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastlane.js","names":[],"sources":["../../src/runtime/fastlane.ts"],"sourcesContent":["import { isDevelopmentEnvironment } from '../common/env';\nimport { globalScheduler } from './scheduler';\nimport { logger } from '../dev/logger';\nimport type { ComponentInstance } from './component';\nimport { finalizeReadableSubscriptions } from './readable';\nimport {\n getKeyMapForElement,\n isKeyedReorderFastPathEligible,\n populateKeyMapForElement,\n} from '../renderer/keyed';\nimport { Fragment } from '../common/jsx';\nimport { setDevValue, getDevValue, getDevNamespace } from './dev-namespace';\n\nlet _bulkCommitActive = false;\nlet _appliedParents: WeakSet<Element> | null = null;\n\nexport function enterBulkCommit(): void {\n _bulkCommitActive = true;\n // Initialize registry of parents that had fast-path applied during this bulk commit\n _appliedParents = new WeakSet<Element>();\n\n // Clear any previously scheduled synchronous scheduler tasks so they don't\n // retrigger evaluations during the committed fast-path.\n try {\n const cleared = globalScheduler.clearPendingSyncTasks?.() ?? 0;\n setDevValue('__ASKR_FASTLANE_CLEARED_TASKS', cleared);\n } catch (err) {\n if (isDevelopmentEnvironment()) throw err;\n }\n}\n\nexport function exitBulkCommit(): void {\n _bulkCommitActive = false;\n // Clear registry to avoid leaking across commits\n _appliedParents = null;\n}\n\nexport function isBulkCommitActive(): boolean {\n return _bulkCommitActive;\n}\n\n// Mark that a fast-path was applied on a parent element during the active\n// bulk commit. No-op if there is no active bulk commit.\nexport function markFastPathApplied(parent: Element): void {\n if (!_appliedParents) return;\n try {\n _appliedParents.add(parent);\n } catch (e) {\n void e;\n }\n}\n\nexport function isFastPathApplied(parent: Element): boolean {\n return !!(_appliedParents && _appliedParents.has(parent));\n}\n\nfunction finalizeReadSubscriptions(instance: ComponentInstance): void {\n finalizeReadableSubscriptions(instance);\n}\n\n/**\n * Attempt to execute a runtime fast-lane for a single component's synchronous\n * render result. Returns true if the fast-lane was used and commit was done.\n *\n * Preconditions (checked conservatively):\n * - The render result is an intrinsic element root with keyed children\n * - The renderer's fast-path heuristics indicate to use the fast-path\n * - No mount operations are pending on the component instance\n * - No child vnodes are component functions (avoid async/component mounts)\n */\n\n// Helper to unwrap Fragment vnodes to get the first intrinsic element child\nfunction unwrapFragmentForFastPath(vnode: unknown): unknown {\n if (!vnode || typeof vnode !== 'object' || !('type' in vnode)) return vnode;\n const v = vnode as {\n type: unknown;\n children?: unknown;\n props?: { children?: unknown };\n };\n // Check if it's a Fragment\n if (\n typeof v.type === 'symbol' &&\n (v.type === Fragment || String(v.type) === 'Symbol(askr.fragment)')\n ) {\n const children = v.children || v.props?.children;\n if (Array.isArray(children) && children.length > 0) {\n // Return the first child that's an intrinsic element\n for (const child of children) {\n if (child && typeof child === 'object' && 'type' in child) {\n const c = child as { type: unknown };\n if (typeof c.type === 'string') {\n return child;\n }\n }\n }\n }\n }\n return vnode;\n}\n\nexport function classifyUpdate(instance: ComponentInstance, result: unknown) {\n // Returns a classification describing whether this update is eligible for\n // the reorder-only fast-lane. The classifier mirrors renderer-level\n // heuristics and performs runtime-level checks (mounts, effects, component\n // children) that the renderer cannot reason about.\n\n // Unwrap Fragment to get the actual element vnode for classification\n const unwrappedResult = unwrapFragmentForFastPath(result);\n\n if (\n !unwrappedResult ||\n typeof unwrappedResult !== 'object' ||\n !('type' in unwrappedResult)\n )\n return { useFastPath: false, reason: 'not-vnode' };\n\n const vnode = unwrappedResult as {\n type: unknown;\n children?: unknown;\n props?: { children?: unknown };\n };\n if (vnode == null || typeof vnode.type !== 'string')\n return { useFastPath: false, reason: 'not-intrinsic' };\n\n const parent = instance.target;\n if (!parent) return { useFastPath: false, reason: 'no-root' };\n\n const firstChild = parent.children[0] as Element | undefined;\n if (!firstChild) return { useFastPath: false, reason: 'no-first-child' };\n if (firstChild.tagName.toLowerCase() !== String(vnode.type).toLowerCase())\n return { useFastPath: false, reason: 'root-tag-mismatch' };\n\n const children = vnode.children || vnode.props?.children;\n if (!Array.isArray(children))\n return { useFastPath: false, reason: 'no-children-array' };\n\n // Avoid component child vnodes (they may mount/unmount or trigger async)\n for (const c of children) {\n if (\n typeof c === 'object' &&\n c !== null &&\n 'type' in c &&\n typeof (c as { type?: unknown }).type === 'function'\n ) {\n return { useFastPath: false, reason: 'component-child-present' };\n }\n }\n\n if ((instance.mountOperations?.length ?? 0) > 0)\n return { useFastPath: false, reason: 'pending-mounts' };\n\n // Ask renderer for keyed reorder eligibility (prop differences & heuristics)\n // Ensure a keyed map is available for the first child by populating it proactively.\n try {\n populateKeyMapForElement(firstChild);\n } catch {\n // ignore\n }\n\n const oldKeyMap = getKeyMapForElement(firstChild);\n const decision = isKeyedReorderFastPathEligible(\n firstChild,\n children,\n oldKeyMap\n );\n\n if (!decision.useFastPath || decision.totalKeyed < 128)\n return { ...decision, useFastPath: false, reason: 'renderer-declined' };\n\n return { ...decision, useFastPath: true } as const;\n}\n\nexport function commitReorderOnly(\n instance: ComponentInstance,\n result: unknown\n): boolean {\n // Performs the minimal, synchronous reorder-only commit.\n const evaluate = (\n globalThis as {\n __ASKR_RENDERER?: {\n evaluate?: (node: unknown, target: Element | null) => void;\n };\n }\n ).__ASKR_RENDERER?.evaluate;\n\n if (typeof evaluate !== 'function') {\n logger.warn(\n '[Tempo][FASTPATH][DEV] renderer.evaluate not available; declining fast-lane'\n );\n return false;\n }\n\n const schedBefore = isDevelopmentEnvironment()\n ? globalScheduler.getState()\n : null;\n\n enterBulkCommit();\n\n try {\n globalScheduler.runWithSyncProgress(() => {\n evaluate(result, instance.target);\n\n // Finalize runtime bookkeeping (read subscriptions / tokens)\n try {\n finalizeReadSubscriptions(instance);\n } catch (e) {\n if (isDevelopmentEnvironment()) throw e;\n }\n });\n\n // Clear any synchronous tasks scheduled during the commit\n const clearedAfter = globalScheduler.clearPendingSyncTasks?.() ?? 0;\n setDevValue('__FASTLANE_CLEARED_AFTER', clearedAfter);\n\n // Dev-only invariant checks\n if (isDevelopmentEnvironment()) {\n validateFastLaneInvariants(instance, schedBefore);\n }\n\n return true;\n } finally {\n // Clear bulk commit flag first\n exitBulkCommit();\n }\n // Note: The original code had a check here that was dead code because\n // exitBulkCommit() already ran in the finally block. This comment serves\n // as documentation that we've intentionally removed that unreachable code.\n}\n\n/**\n * Validates fast-lane invariants in dev mode.\n * Extracted to reduce complexity in commitReorderOnly.\n */\nfunction validateFastLaneInvariants(\n instance: ComponentInstance,\n schedBefore: ReturnType<typeof globalScheduler.getState> | null\n): void {\n const commitCount = getDevValue<number>('__LAST_FASTPATH_COMMIT_COUNT') ?? 0;\n const invariants = {\n commitCount,\n mountOps: instance.mountOperations?.length ?? 0,\n cleanupFns: instance.cleanupFns?.length ?? 0,\n };\n setDevValue('__LAST_FASTLANE_INVARIANTS', invariants);\n\n if (commitCount !== 1) {\n console.error(\n '[FASTLANE][INV] commitCount',\n commitCount,\n 'diag',\n getDevNamespace()\n );\n throw new Error(\n 'Fast-lane invariant violated: expected exactly one DOM commit during reorder-only commit'\n );\n }\n\n if (invariants.mountOps > 0) {\n throw new Error(\n 'Fast-lane invariant violated: mount operations were registered during bulk commit'\n );\n }\n\n if (invariants.cleanupFns > 0) {\n throw new Error(\n 'Fast-lane invariant violated: cleanup functions were added during bulk commit'\n );\n }\n\n const schedAfter = globalScheduler.getState();\n if (\n schedBefore &&\n schedAfter &&\n schedAfter.taskCount > schedBefore.taskCount\n ) {\n console.error(\n '[FASTLANE] schedBefore, schedAfter',\n schedBefore,\n schedAfter\n );\n console.error('[FASTLANE] enqueue logs', getDevValue('__ENQUEUE_LOGS'));\n throw new Error(\n 'Fast-lane invariant violated: scheduler enqueued leftover work during bulk commit'\n );\n }\n\n // Final quiescence assertion\n let finalState = globalScheduler.getState();\n const executing = globalScheduler.isExecuting();\n let outstandingAfter = Math.max(\n 0,\n finalState.taskCount - (executing ? 1 : 0)\n );\n\n if (outstandingAfter !== 0) {\n // Attempt to clear newly enqueued synchronous tasks\n let attempts = 0;\n while (attempts < 5) {\n const cleared = globalScheduler.clearPendingSyncTasks?.() ?? 0;\n if (cleared === 0) break;\n attempts++;\n }\n finalState = globalScheduler.getState();\n outstandingAfter = Math.max(\n 0,\n finalState.taskCount - (globalScheduler.isExecuting() ? 1 : 0)\n );\n if (outstandingAfter !== 0) {\n console.error(\n '[FASTLANE] Post-commit enqueue logs:',\n getDevValue('__ENQUEUE_LOGS')\n );\n console.error(\n '[FASTLANE] Cleared counts:',\n getDevValue('__FASTLANE_CLEARED_TASKS'),\n getDevValue('__FASTLANE_CLEARED_AFTER')\n );\n throw new Error(\n `Fast-lane invariant violated: scheduler has ${finalState.taskCount} pending task(s) after commit`\n );\n }\n }\n}\n\nexport function tryRuntimeFastLaneSync(\n instance: ComponentInstance,\n result: unknown\n): boolean {\n const cls = classifyUpdate(instance, result);\n if (!cls.useFastPath) {\n // Clear stale fast-path diagnostics\n setDevValue('__LAST_FASTPATH_STATS', undefined);\n setDevValue('__LAST_FASTPATH_COMMIT_COUNT', 0);\n return false;\n }\n\n try {\n return commitReorderOnly(instance, result);\n } catch (err) {\n // Surface dev-only invariant failures, otherwise decline silently\n if (isDevelopmentEnvironment()) throw err;\n return false;\n }\n}\n\n// Expose fastlane bridge on globalThis for environments/tests\nif (typeof globalThis !== 'undefined') {\n (globalThis as Record<string, unknown>).__ASKR_FASTLANE = {\n isBulkCommitActive,\n enterBulkCommit,\n exitBulkCommit,\n tryRuntimeFastLaneSync,\n markFastPathApplied,\n isFastPathApplied,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/runtime/for-bench.d.ts
|
|
2
|
+
interface BenchMetrics {
|
|
3
|
+
itemsCreated: number;
|
|
4
|
+
itemsReused: number;
|
|
5
|
+
itemsRemoved: number;
|
|
6
|
+
itemsMoved: number;
|
|
7
|
+
rowFactoryInvocations: number;
|
|
8
|
+
keyLookups: number;
|
|
9
|
+
keyHits: number;
|
|
10
|
+
keyMisses: number;
|
|
11
|
+
domInserts: number;
|
|
12
|
+
domRemoves: number;
|
|
13
|
+
domMoves: number;
|
|
14
|
+
domAttrSets: number;
|
|
15
|
+
domTextSets: number;
|
|
16
|
+
domNodesCreated: number;
|
|
17
|
+
listenerBindings: number;
|
|
18
|
+
reactivePropsMounted: number;
|
|
19
|
+
replaceChildrenCommits: number;
|
|
20
|
+
bulkClearCommits: number;
|
|
21
|
+
reconcilePhaseMs: number;
|
|
22
|
+
domCommitPhaseMs: number;
|
|
23
|
+
fastLaneName: string | null;
|
|
24
|
+
}
|
|
25
|
+
type BenchEvent = 'itemCreated' | 'itemReused' | 'itemRemoved' | 'itemMoved' | 'rowFactory' | 'keyLookup' | 'keyHit' | 'keyMiss' | 'domInsert' | 'domRemove' | 'domMove' | 'domAttrSet' | 'domTextSet';
|
|
26
|
+
type BenchMetricScope = 'coldCreate' | 'fullClear';
|
|
27
|
+
type BenchCounter = 'domNodesCreated' | 'listenerBindings' | 'reactivePropsMounted' | 'replaceChildrenCommits' | 'bulkClearCommits';
|
|
28
|
+
declare function withBenchMetricScopeLive<T>(scope: BenchMetricScope, run: () => T): T;
|
|
29
|
+
declare const resetBenchMetrics: () => void;
|
|
30
|
+
declare const recordBenchEvent: (event: BenchEvent) => void;
|
|
31
|
+
declare const recordBenchFastLane: (name: string) => void;
|
|
32
|
+
declare const recordBenchTiming: (phase: "reconcile" | "domCommit", ms: number) => void;
|
|
33
|
+
declare const recordBenchCounter: (counter: BenchCounter, delta?: number) => void;
|
|
34
|
+
declare const withBenchMetricScope: typeof withBenchMetricScopeLive;
|
|
35
|
+
declare const isBenchMetricScopeActive: (scope: BenchMetricScope) => boolean;
|
|
36
|
+
declare const getBenchMetrics: () => BenchMetrics;
|
|
37
|
+
declare const flushBenchMetrics: () => void;
|
|
38
|
+
declare const isBenchBuildEnabled: () => boolean;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { getBenchMetrics, isBenchMetricScopeActive, recordBenchCounter, recordBenchEvent, recordBenchTiming, resetBenchMetrics, withBenchMetricScope };
|
|
41
|
+
//# sourceMappingURL=for-bench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"for-bench.d.ts","names":[],"sources":["../../src/runtime/for-bench.ts"],"mappings":";UASiB,YAAA;EACf,YAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,qBAAA;EACA,UAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,sBAAA;EACA,gBAAA;EACA,gBAAA;EACA,gBAAA;EACA,YAAA;AAAA;AAAA,KAGU,UAAA;AAAA,KA0CP,gBAAA;AAAA,KACA,YAAA;AAAA,iBA+II,wBAAA,GAAA,CAA4B,KAAA,EAAO,gBAAA,EAAkB,GAAA,QAAW,CAAA,GAAI,CAAA;AAAA,cAoChE,iBAAA;AAAA,cAUA,gBAAA,GAAgB,KAAA,EA9HQ,UAAA;AAAA,cAkIxB,mBAAA,GAAmB,IAAA;AAAA,cAInB,iBAAA,GAAiB,KAAA,6BAnCI,EAAA;AAAA,cAuCrB,kBAAA,GAAkB,OAAA,EAlFU,YAAA,EAAY,KAAA;AAAA,cAsFxC,oBAAA,SAAoB,wBAAA;AAAA,cAIpB,wBAAA,GAAwB,KAAA,EAnDQ,gBAAA;AAAA,cAuDhC,eAAA,QArCmB,YAAA;AAAA,cAyCnB,iBAAA;AAAA,cAIA,mBAAA"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { isRuntimeEnvFlagEnabled } from "../common/env.js";
|
|
2
|
+
//#region src/runtime/for-bench.ts
|
|
3
|
+
const BENCH_BUILD_ENABLED = isRuntimeEnvFlagEnabled("ASKR_BENCH");
|
|
4
|
+
function createInitialBenchMetrics() {
|
|
5
|
+
return {
|
|
6
|
+
itemsCreated: 0,
|
|
7
|
+
itemsReused: 0,
|
|
8
|
+
itemsRemoved: 0,
|
|
9
|
+
itemsMoved: 0,
|
|
10
|
+
rowFactoryInvocations: 0,
|
|
11
|
+
keyLookups: 0,
|
|
12
|
+
keyHits: 0,
|
|
13
|
+
keyMisses: 0,
|
|
14
|
+
domInserts: 0,
|
|
15
|
+
domRemoves: 0,
|
|
16
|
+
domMoves: 0,
|
|
17
|
+
domAttrSets: 0,
|
|
18
|
+
domTextSets: 0,
|
|
19
|
+
domNodesCreated: 0,
|
|
20
|
+
listenerBindings: 0,
|
|
21
|
+
reactivePropsMounted: 0,
|
|
22
|
+
replaceChildrenCommits: 0,
|
|
23
|
+
bulkClearCommits: 0,
|
|
24
|
+
reconcilePhaseMs: 0,
|
|
25
|
+
domCommitPhaseMs: 0,
|
|
26
|
+
fastLaneName: null
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const emptyBenchMetrics = createInitialBenchMetrics();
|
|
30
|
+
let activeBenchMetricScope = null;
|
|
31
|
+
function isBenchRuntimeEnabled() {
|
|
32
|
+
if (!BENCH_BUILD_ENABLED) return false;
|
|
33
|
+
try {
|
|
34
|
+
return !!globalThis.__ASKR_BENCH__;
|
|
35
|
+
} catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function publishBenchMetrics(metrics) {
|
|
40
|
+
if (!isBenchRuntimeEnabled()) return;
|
|
41
|
+
globalThis.__ASKR_FOR_BENCH__ = { ...metrics };
|
|
42
|
+
}
|
|
43
|
+
const flushBenchMetricsLive = () => {
|
|
44
|
+
if (!benchMetrics) return;
|
|
45
|
+
publishBenchMetrics(benchMetrics);
|
|
46
|
+
};
|
|
47
|
+
function resetBenchMetricsLive(metrics) {
|
|
48
|
+
metrics.itemsCreated = 0;
|
|
49
|
+
metrics.itemsReused = 0;
|
|
50
|
+
metrics.itemsRemoved = 0;
|
|
51
|
+
metrics.itemsMoved = 0;
|
|
52
|
+
metrics.rowFactoryInvocations = 0;
|
|
53
|
+
metrics.keyLookups = 0;
|
|
54
|
+
metrics.keyHits = 0;
|
|
55
|
+
metrics.keyMisses = 0;
|
|
56
|
+
metrics.domInserts = 0;
|
|
57
|
+
metrics.domRemoves = 0;
|
|
58
|
+
metrics.domMoves = 0;
|
|
59
|
+
metrics.domAttrSets = 0;
|
|
60
|
+
metrics.domTextSets = 0;
|
|
61
|
+
metrics.domNodesCreated = 0;
|
|
62
|
+
metrics.listenerBindings = 0;
|
|
63
|
+
metrics.reactivePropsMounted = 0;
|
|
64
|
+
metrics.replaceChildrenCommits = 0;
|
|
65
|
+
metrics.bulkClearCommits = 0;
|
|
66
|
+
metrics.reconcilePhaseMs = 0;
|
|
67
|
+
metrics.domCommitPhaseMs = 0;
|
|
68
|
+
metrics.fastLaneName = null;
|
|
69
|
+
publishBenchMetrics(metrics);
|
|
70
|
+
}
|
|
71
|
+
const benchMetrics = BENCH_BUILD_ENABLED ? createInitialBenchMetrics() : null;
|
|
72
|
+
const recordBenchEventLive = (event) => {
|
|
73
|
+
if (!isBenchRuntimeEnabled() || !benchMetrics) return;
|
|
74
|
+
switch (event) {
|
|
75
|
+
case "itemCreated":
|
|
76
|
+
benchMetrics.itemsCreated++;
|
|
77
|
+
break;
|
|
78
|
+
case "itemReused":
|
|
79
|
+
benchMetrics.itemsReused++;
|
|
80
|
+
break;
|
|
81
|
+
case "itemRemoved":
|
|
82
|
+
benchMetrics.itemsRemoved++;
|
|
83
|
+
break;
|
|
84
|
+
case "itemMoved":
|
|
85
|
+
benchMetrics.itemsMoved++;
|
|
86
|
+
break;
|
|
87
|
+
case "rowFactory":
|
|
88
|
+
benchMetrics.rowFactoryInvocations++;
|
|
89
|
+
break;
|
|
90
|
+
case "keyLookup":
|
|
91
|
+
benchMetrics.keyLookups++;
|
|
92
|
+
break;
|
|
93
|
+
case "keyHit":
|
|
94
|
+
benchMetrics.keyHits++;
|
|
95
|
+
break;
|
|
96
|
+
case "keyMiss":
|
|
97
|
+
benchMetrics.keyMisses++;
|
|
98
|
+
break;
|
|
99
|
+
case "domInsert":
|
|
100
|
+
benchMetrics.domInserts++;
|
|
101
|
+
break;
|
|
102
|
+
case "domRemove":
|
|
103
|
+
benchMetrics.domRemoves++;
|
|
104
|
+
break;
|
|
105
|
+
case "domMove":
|
|
106
|
+
benchMetrics.domMoves++;
|
|
107
|
+
break;
|
|
108
|
+
case "domAttrSet":
|
|
109
|
+
benchMetrics.domAttrSets++;
|
|
110
|
+
break;
|
|
111
|
+
case "domTextSet":
|
|
112
|
+
benchMetrics.domTextSets++;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const recordBenchFastLaneLive = (name) => {
|
|
117
|
+
if (!isBenchRuntimeEnabled() || !benchMetrics) return;
|
|
118
|
+
benchMetrics.fastLaneName = name;
|
|
119
|
+
};
|
|
120
|
+
const recordBenchCounterLive = (counter, delta = 1) => {
|
|
121
|
+
if (!isBenchRuntimeEnabled() || !benchMetrics || delta === 0) return;
|
|
122
|
+
switch (counter) {
|
|
123
|
+
case "domNodesCreated":
|
|
124
|
+
benchMetrics.domNodesCreated += delta;
|
|
125
|
+
break;
|
|
126
|
+
case "listenerBindings":
|
|
127
|
+
benchMetrics.listenerBindings += delta;
|
|
128
|
+
break;
|
|
129
|
+
case "reactivePropsMounted":
|
|
130
|
+
benchMetrics.reactivePropsMounted += delta;
|
|
131
|
+
break;
|
|
132
|
+
case "replaceChildrenCommits":
|
|
133
|
+
benchMetrics.replaceChildrenCommits += delta;
|
|
134
|
+
break;
|
|
135
|
+
case "bulkClearCommits":
|
|
136
|
+
benchMetrics.bulkClearCommits += delta;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
function withBenchMetricScopeLive(scope, run) {
|
|
141
|
+
if (!isBenchRuntimeEnabled()) return run();
|
|
142
|
+
const previousScope = activeBenchMetricScope;
|
|
143
|
+
activeBenchMetricScope = scope;
|
|
144
|
+
try {
|
|
145
|
+
return run();
|
|
146
|
+
} finally {
|
|
147
|
+
activeBenchMetricScope = previousScope;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const isBenchMetricScopeActiveLive = (scope) => isBenchRuntimeEnabled() && activeBenchMetricScope === scope;
|
|
151
|
+
const recordBenchTimingLive = (phase, ms) => {
|
|
152
|
+
if (!isBenchRuntimeEnabled() || !benchMetrics) return;
|
|
153
|
+
if (phase === "reconcile") benchMetrics.reconcilePhaseMs = ms;
|
|
154
|
+
else benchMetrics.domCommitPhaseMs = ms;
|
|
155
|
+
};
|
|
156
|
+
const getBenchMetricsLive = () => benchMetrics ? { ...benchMetrics } : { ...emptyBenchMetrics };
|
|
157
|
+
const resetBenchMetrics = BENCH_BUILD_ENABLED ? () => {
|
|
158
|
+
if (!isBenchRuntimeEnabled() || !benchMetrics) return;
|
|
159
|
+
resetBenchMetricsLive(benchMetrics);
|
|
160
|
+
} : () => {};
|
|
161
|
+
const recordBenchEvent = BENCH_BUILD_ENABLED ? recordBenchEventLive : (_event) => {};
|
|
162
|
+
const recordBenchFastLane = BENCH_BUILD_ENABLED ? recordBenchFastLaneLive : (_name) => {};
|
|
163
|
+
const recordBenchTiming = BENCH_BUILD_ENABLED ? recordBenchTimingLive : (_phase, _ms) => {};
|
|
164
|
+
const recordBenchCounter = BENCH_BUILD_ENABLED ? recordBenchCounterLive : (_counter, _delta = 1) => {};
|
|
165
|
+
const withBenchMetricScope = BENCH_BUILD_ENABLED ? withBenchMetricScopeLive : (_scope, run) => run();
|
|
166
|
+
const isBenchMetricScopeActive = BENCH_BUILD_ENABLED ? isBenchMetricScopeActiveLive : (_scope) => false;
|
|
167
|
+
const getBenchMetrics = BENCH_BUILD_ENABLED ? getBenchMetricsLive : () => ({ ...emptyBenchMetrics });
|
|
168
|
+
const flushBenchMetrics = BENCH_BUILD_ENABLED ? flushBenchMetricsLive : () => {};
|
|
169
|
+
const isBenchBuildEnabled = () => BENCH_BUILD_ENABLED;
|
|
170
|
+
//#endregion
|
|
171
|
+
export { flushBenchMetrics, getBenchMetrics, isBenchBuildEnabled, isBenchMetricScopeActive, recordBenchCounter, recordBenchEvent, recordBenchFastLane, recordBenchTiming, resetBenchMetrics, withBenchMetricScope };
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=for-bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"for-bench.js","names":[],"sources":["../../src/runtime/for-bench.ts"],"sourcesContent":["import { isRuntimeEnvFlagEnabled } from '../common/env';\n\nconst BENCH_BUILD_ENABLED = isRuntimeEnvFlagEnabled('ASKR_BENCH');\n\ntype BenchGlobal = typeof globalThis & {\n __ASKR_BENCH__?: boolean;\n __ASKR_FOR_BENCH__?: BenchMetrics;\n};\n\nexport interface BenchMetrics {\n itemsCreated: number;\n itemsReused: number;\n itemsRemoved: number;\n itemsMoved: number;\n rowFactoryInvocations: number;\n keyLookups: number;\n keyHits: number;\n keyMisses: number;\n domInserts: number;\n domRemoves: number;\n domMoves: number;\n domAttrSets: number;\n domTextSets: number;\n domNodesCreated: number;\n listenerBindings: number;\n reactivePropsMounted: number;\n replaceChildrenCommits: number;\n bulkClearCommits: number;\n reconcilePhaseMs: number;\n domCommitPhaseMs: number;\n fastLaneName: string | null;\n}\n\nexport type BenchEvent =\n | 'itemCreated'\n | 'itemReused'\n | 'itemRemoved'\n | 'itemMoved'\n | 'rowFactory'\n | 'keyLookup'\n | 'keyHit'\n | 'keyMiss'\n | 'domInsert'\n | 'domRemove'\n | 'domMove'\n | 'domAttrSet'\n | 'domTextSet';\n\nfunction createInitialBenchMetrics(): BenchMetrics {\n return {\n itemsCreated: 0,\n itemsReused: 0,\n itemsRemoved: 0,\n itemsMoved: 0,\n rowFactoryInvocations: 0,\n keyLookups: 0,\n keyHits: 0,\n keyMisses: 0,\n domInserts: 0,\n domRemoves: 0,\n domMoves: 0,\n domAttrSets: 0,\n domTextSets: 0,\n domNodesCreated: 0,\n listenerBindings: 0,\n reactivePropsMounted: 0,\n replaceChildrenCommits: 0,\n bulkClearCommits: 0,\n reconcilePhaseMs: 0,\n domCommitPhaseMs: 0,\n fastLaneName: null,\n };\n}\n\nconst emptyBenchMetrics = createInitialBenchMetrics();\ntype BenchMetricScope = 'coldCreate' | 'fullClear';\ntype BenchCounter =\n | 'domNodesCreated'\n | 'listenerBindings'\n | 'reactivePropsMounted'\n | 'replaceChildrenCommits'\n | 'bulkClearCommits';\nlet activeBenchMetricScope: BenchMetricScope | null = null;\n\nfunction isBenchRuntimeEnabled(): boolean {\n if (!BENCH_BUILD_ENABLED) {\n return false;\n }\n\n try {\n return !!(globalThis as BenchGlobal).__ASKR_BENCH__;\n } catch {\n return false;\n }\n}\n\nfunction publishBenchMetrics(metrics: BenchMetrics): void {\n if (!isBenchRuntimeEnabled()) {\n return;\n }\n\n (globalThis as BenchGlobal).__ASKR_FOR_BENCH__ = { ...metrics };\n}\n\nconst flushBenchMetricsLive = (): void => {\n if (!benchMetrics) {\n return;\n }\n\n publishBenchMetrics(benchMetrics);\n};\n\nfunction resetBenchMetricsLive(metrics: BenchMetrics): void {\n metrics.itemsCreated = 0;\n metrics.itemsReused = 0;\n metrics.itemsRemoved = 0;\n metrics.itemsMoved = 0;\n metrics.rowFactoryInvocations = 0;\n metrics.keyLookups = 0;\n metrics.keyHits = 0;\n metrics.keyMisses = 0;\n metrics.domInserts = 0;\n metrics.domRemoves = 0;\n metrics.domMoves = 0;\n metrics.domAttrSets = 0;\n metrics.domTextSets = 0;\n metrics.domNodesCreated = 0;\n metrics.listenerBindings = 0;\n metrics.reactivePropsMounted = 0;\n metrics.replaceChildrenCommits = 0;\n metrics.bulkClearCommits = 0;\n metrics.reconcilePhaseMs = 0;\n metrics.domCommitPhaseMs = 0;\n metrics.fastLaneName = null;\n publishBenchMetrics(metrics);\n}\n\nconst benchMetrics = BENCH_BUILD_ENABLED ? createInitialBenchMetrics() : null;\n\nconst recordBenchEventLive = (event: BenchEvent): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n switch (event) {\n case 'itemCreated':\n benchMetrics.itemsCreated++;\n break;\n case 'itemReused':\n benchMetrics.itemsReused++;\n break;\n case 'itemRemoved':\n benchMetrics.itemsRemoved++;\n break;\n case 'itemMoved':\n benchMetrics.itemsMoved++;\n break;\n case 'rowFactory':\n benchMetrics.rowFactoryInvocations++;\n break;\n case 'keyLookup':\n benchMetrics.keyLookups++;\n break;\n case 'keyHit':\n benchMetrics.keyHits++;\n break;\n case 'keyMiss':\n benchMetrics.keyMisses++;\n break;\n case 'domInsert':\n benchMetrics.domInserts++;\n break;\n case 'domRemove':\n benchMetrics.domRemoves++;\n break;\n case 'domMove':\n benchMetrics.domMoves++;\n break;\n case 'domAttrSet':\n benchMetrics.domAttrSets++;\n break;\n case 'domTextSet':\n benchMetrics.domTextSets++;\n break;\n }\n};\n\nconst recordBenchFastLaneLive = (name: string): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n benchMetrics.fastLaneName = name;\n};\n\nconst recordBenchCounterLive = (counter: BenchCounter, delta = 1): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics || delta === 0) {\n return;\n }\n\n switch (counter) {\n case 'domNodesCreated':\n benchMetrics.domNodesCreated += delta;\n break;\n case 'listenerBindings':\n benchMetrics.listenerBindings += delta;\n break;\n case 'reactivePropsMounted':\n benchMetrics.reactivePropsMounted += delta;\n break;\n case 'replaceChildrenCommits':\n benchMetrics.replaceChildrenCommits += delta;\n break;\n case 'bulkClearCommits':\n benchMetrics.bulkClearCommits += delta;\n break;\n }\n};\n\nfunction withBenchMetricScopeLive<T>(scope: BenchMetricScope, run: () => T): T {\n if (!isBenchRuntimeEnabled()) {\n return run();\n }\n\n const previousScope = activeBenchMetricScope;\n activeBenchMetricScope = scope;\n\n try {\n return run();\n } finally {\n activeBenchMetricScope = previousScope;\n }\n}\n\nconst isBenchMetricScopeActiveLive = (scope: BenchMetricScope): boolean =>\n isBenchRuntimeEnabled() && activeBenchMetricScope === scope;\n\nconst recordBenchTimingLive = (\n phase: 'reconcile' | 'domCommit',\n ms: number\n): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n if (phase === 'reconcile') {\n benchMetrics.reconcilePhaseMs = ms;\n } else {\n benchMetrics.domCommitPhaseMs = ms;\n }\n};\n\nconst getBenchMetricsLive = (): BenchMetrics =>\n benchMetrics ? { ...benchMetrics } : { ...emptyBenchMetrics };\n\nexport const resetBenchMetrics = BENCH_BUILD_ENABLED\n ? (): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n resetBenchMetricsLive(benchMetrics);\n }\n : (): void => {};\n\nexport const recordBenchEvent = BENCH_BUILD_ENABLED\n ? recordBenchEventLive\n : (_event: BenchEvent): void => {};\n\nexport const recordBenchFastLane = BENCH_BUILD_ENABLED\n ? recordBenchFastLaneLive\n : (_name: string): void => {};\n\nexport const recordBenchTiming = BENCH_BUILD_ENABLED\n ? recordBenchTimingLive\n : (_phase: 'reconcile' | 'domCommit', _ms: number): void => {};\n\nexport const recordBenchCounter = BENCH_BUILD_ENABLED\n ? recordBenchCounterLive\n : (_counter: BenchCounter, _delta = 1): void => {};\n\nexport const withBenchMetricScope = BENCH_BUILD_ENABLED\n ? withBenchMetricScopeLive\n : <T>(_scope: BenchMetricScope, run: () => T): T => run();\n\nexport const isBenchMetricScopeActive = BENCH_BUILD_ENABLED\n ? isBenchMetricScopeActiveLive\n : (_scope: BenchMetricScope): boolean => false;\n\nexport const getBenchMetrics = BENCH_BUILD_ENABLED\n ? getBenchMetricsLive\n : (): BenchMetrics => ({ ...emptyBenchMetrics });\n\nexport const flushBenchMetrics = BENCH_BUILD_ENABLED\n ? flushBenchMetricsLive\n : (): void => {};\n\nexport const isBenchBuildEnabled = (): boolean => BENCH_BUILD_ENABLED;\n"],"mappings":";;AAEA,MAAM,sBAAsB,wBAAwB,aAAa;AA8CjE,SAAS,4BAA0C;AACjD,QAAO;EACL,cAAc;EACd,aAAa;EACb,cAAc;EACd,YAAY;EACZ,uBAAuB;EACvB,YAAY;EACZ,SAAS;EACT,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,UAAU;EACV,aAAa;EACb,aAAa;EACb,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,wBAAwB;EACxB,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,cAAc;EACf;;AAGH,MAAM,oBAAoB,2BAA2B;AAQrD,IAAI,yBAAkD;AAEtD,SAAS,wBAAiC;AACxC,KAAI,CAAC,oBACH,QAAO;AAGT,KAAI;AACF,SAAO,CAAC,CAAE,WAA2B;SAC/B;AACN,SAAO;;;AAIX,SAAS,oBAAoB,SAA6B;AACxD,KAAI,CAAC,uBAAuB,CAC1B;AAGD,YAA2B,qBAAqB,EAAE,GAAG,SAAS;;AAGjE,MAAM,8BAAoC;AACxC,KAAI,CAAC,aACH;AAGF,qBAAoB,aAAa;;AAGnC,SAAS,sBAAsB,SAA6B;AAC1D,SAAQ,eAAe;AACvB,SAAQ,cAAc;AACtB,SAAQ,eAAe;AACvB,SAAQ,aAAa;AACrB,SAAQ,wBAAwB;AAChC,SAAQ,aAAa;AACrB,SAAQ,UAAU;AAClB,SAAQ,YAAY;AACpB,SAAQ,aAAa;AACrB,SAAQ,aAAa;AACrB,SAAQ,WAAW;AACnB,SAAQ,cAAc;AACtB,SAAQ,cAAc;AACtB,SAAQ,kBAAkB;AAC1B,SAAQ,mBAAmB;AAC3B,SAAQ,uBAAuB;AAC/B,SAAQ,yBAAyB;AACjC,SAAQ,mBAAmB;AAC3B,SAAQ,mBAAmB;AAC3B,SAAQ,mBAAmB;AAC3B,SAAQ,eAAe;AACvB,qBAAoB,QAAQ;;AAG9B,MAAM,eAAe,sBAAsB,2BAA2B,GAAG;AAEzE,MAAM,wBAAwB,UAA4B;AACxD,KAAI,CAAC,uBAAuB,IAAI,CAAC,aAC/B;AAGF,SAAQ,OAAR;EACE,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;EACF,KAAK;AACH,gBAAa;AACb;;;AAIN,MAAM,2BAA2B,SAAuB;AACtD,KAAI,CAAC,uBAAuB,IAAI,CAAC,aAC/B;AAGF,cAAa,eAAe;;AAG9B,MAAM,0BAA0B,SAAuB,QAAQ,MAAY;AACzE,KAAI,CAAC,uBAAuB,IAAI,CAAC,gBAAgB,UAAU,EACzD;AAGF,SAAQ,SAAR;EACE,KAAK;AACH,gBAAa,mBAAmB;AAChC;EACF,KAAK;AACH,gBAAa,oBAAoB;AACjC;EACF,KAAK;AACH,gBAAa,wBAAwB;AACrC;EACF,KAAK;AACH,gBAAa,0BAA0B;AACvC;EACF,KAAK;AACH,gBAAa,oBAAoB;AACjC;;;AAIN,SAAS,yBAA4B,OAAyB,KAAiB;AAC7E,KAAI,CAAC,uBAAuB,CAC1B,QAAO,KAAK;CAGd,MAAM,gBAAgB;AACtB,0BAAyB;AAEzB,KAAI;AACF,SAAO,KAAK;WACJ;AACR,2BAAyB;;;AAI7B,MAAM,gCAAgC,UACpC,uBAAuB,IAAI,2BAA2B;AAExD,MAAM,yBACJ,OACA,OACS;AACT,KAAI,CAAC,uBAAuB,IAAI,CAAC,aAC/B;AAGF,KAAI,UAAU,YACZ,cAAa,mBAAmB;KAEhC,cAAa,mBAAmB;;AAIpC,MAAM,4BACJ,eAAe,EAAE,GAAG,cAAc,GAAG,EAAE,GAAG,mBAAmB;AAE/D,MAAa,oBAAoB,4BACjB;AACV,KAAI,CAAC,uBAAuB,IAAI,CAAC,aAC/B;AAGF,uBAAsB,aAAa;UAEzB;AAEhB,MAAa,mBAAmB,sBAC5B,wBACC,WAA6B;AAElC,MAAa,sBAAsB,sBAC/B,2BACC,UAAwB;AAE7B,MAAa,oBAAoB,sBAC7B,yBACC,QAAmC,QAAsB;AAE9D,MAAa,qBAAqB,sBAC9B,0BACC,UAAwB,SAAS,MAAY;AAElD,MAAa,uBAAuB,sBAChC,4BACI,QAA0B,QAAoB,KAAK;AAE3D,MAAa,2BAA2B,sBACpC,gCACC,WAAsC;AAE3C,MAAa,kBAAkB,sBAC3B,6BACqB,EAAE,GAAG,mBAAmB;AAEjD,MAAa,oBAAoB,sBAC7B,8BACY;AAEhB,MAAa,4BAAqC"}
|
package/dist/runtime/for.d.ts
CHANGED
|
@@ -1,52 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
interface
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
keyMisses: number;
|
|
19
|
-
domInserts: number;
|
|
20
|
-
domRemoves: number;
|
|
21
|
-
domMoves: number;
|
|
22
|
-
domAttrSets: number;
|
|
23
|
-
domTextSets: number;
|
|
24
|
-
reconcilePhaseMs: number;
|
|
25
|
-
domCommitPhaseMs: number;
|
|
26
|
-
fastLaneName: string | null;
|
|
1
|
+
import { ReadableSource } from "./readable.js";
|
|
2
|
+
import { ComponentInstance } from "./component.js";
|
|
3
|
+
import { ChildScope } from "./child-scope.js";
|
|
4
|
+
import { ForEachSource, ForProps } from "../control/for.js";
|
|
5
|
+
import { FineGrainedEffectHandle } from "./effect.js";
|
|
6
|
+
import { getBenchMetrics, isBenchMetricScopeActive, recordBenchCounter, recordBenchEvent, recordBenchTiming, resetBenchMetrics, withBenchMetricScope } from "./for-bench.js";
|
|
7
|
+
import { VNode } from "../common/vnode.js";
|
|
8
|
+
|
|
9
|
+
//#region src/runtime/for.d.ts
|
|
10
|
+
interface ForItemInstance<T> {
|
|
11
|
+
key: string | number;
|
|
12
|
+
item: T;
|
|
13
|
+
reactiveItem: T;
|
|
14
|
+
itemSignal: ForItemSignal<T> | null;
|
|
15
|
+
itemPropertySignals: Map<PropertyKey, ForItemPropertySignal> | null;
|
|
16
|
+
indexSignal: ForIndexSignal;
|
|
17
|
+
scope: ChildScope;
|
|
27
18
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
19
|
+
type ForItemSignal<T> = ReadableSource<T> & (() => T) & {
|
|
20
|
+
peek(): T;
|
|
21
|
+
set(newValue: T, notifyReaders?: boolean): void;
|
|
22
|
+
};
|
|
23
|
+
type ForItemPropertySignal = ReadableSource<unknown> & (() => unknown) & {
|
|
24
|
+
peek(): unknown;
|
|
25
|
+
set(newValue: unknown, notifyReaders?: boolean): void;
|
|
26
|
+
};
|
|
27
|
+
type ForIndexSignal = ReadableSource<number> & (() => number) & {
|
|
28
|
+
peek(): number;
|
|
29
|
+
set(newValue: number | ((prev: number) => number)): void;
|
|
30
|
+
};
|
|
31
|
+
type ForCommitStrategy = 'APPEND' | 'TRUNCATE' | 'NO_REORDER' | 'SWAP' | 'FULL_KEYED';
|
|
32
|
+
interface ForState<T> {
|
|
33
|
+
kind: 'for';
|
|
34
|
+
currentItems: T[];
|
|
35
|
+
eachSource: ForEachSource<T>;
|
|
36
|
+
fallback: VNode | null;
|
|
37
|
+
fallbackScope: ChildScope | null;
|
|
38
|
+
items: Map<string | number, ForItemInstance<T>>;
|
|
39
|
+
orderedKeys: Array<string | number>;
|
|
40
|
+
orderedVNodes: VNode[];
|
|
41
|
+
byFn: NonNullable<ForProps<T>['by']> | ((item: T, index: number) => number);
|
|
42
|
+
renderFn: (item: T, index: () => number) => VNode;
|
|
43
|
+
parentInstance: ComponentInstance | null;
|
|
44
|
+
lastCommitStrategy: ForCommitStrategy;
|
|
45
|
+
lastRemovedNodes: Node[];
|
|
46
|
+
pendingDirtyIndices: number[] | null;
|
|
47
|
+
pendingSwapIndices: [number, number] | null;
|
|
48
|
+
pendingMoveOnly: boolean;
|
|
49
|
+
_hasResolvedItemDom: boolean;
|
|
50
|
+
_needsSourceReconcile: boolean;
|
|
51
|
+
_sourceEffect: FineGrainedEffectHandle<T[]> | null;
|
|
52
|
+
_suspendSourceCommit: boolean;
|
|
53
|
+
_enqueueBoundaryCommit?: (() => void) | null;
|
|
54
|
+
_hasPendingBoundaryCommit?: boolean;
|
|
55
|
+
devKeyKinds?: Map<string, 'number' | 'string'>;
|
|
38
56
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
export declare function createForState<T>(source: State<T[]> | (() => T[]), byFn: (item: T, index: number) => string | number, renderFn: (item: T, index: () => number) => VNode): ForState<T>;
|
|
49
|
-
export declare function createItemInstance<T>(key: string | number | null, item: T, index: number, forState: ForState<T>): ForItemInstance<T>;
|
|
50
|
-
export declare function reconcileForItems<T>(forState: ForState<T>, newArray: T[]): VNode[];
|
|
51
|
-
export declare function evaluateForState<T>(forState: ForState<T>, source: State<T[]> | (() => T[])): VNode[];
|
|
57
|
+
declare function createForState<T>(eachSource: ForEachSource<T>, byFn: ForState<T>['byFn'], renderFn: (item: T, index: () => number) => VNode, fallback: VNode | null): ForState<T>;
|
|
58
|
+
declare function useForState<T>(eachSource: ForEachSource<T>, byFn: ForState<T>['byFn'], renderFn: (item: T, index: () => number) => VNode, fallback: VNode | null): ForState<T>;
|
|
59
|
+
declare function createItemInstance<T>(key: string | number, item: T, index: number, forState: ForState<T>): ForItemInstance<T>;
|
|
60
|
+
declare function reconcileForItems<T>(forState: ForState<T>, newArray: T[]): VNode[];
|
|
61
|
+
declare function evaluateForState<T>(forState: ForState<T>): VNode[];
|
|
62
|
+
declare function clearForDomUpdateState<T>(forState: ForState<T>): void;
|
|
63
|
+
//#endregion
|
|
64
|
+
export { ForState };
|
|
52
65
|
//# sourceMappingURL=for.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for.d.ts","
|
|
1
|
+
{"version":3,"file":"for.d.ts","names":[],"sources":["../../src/runtime/for.ts"],"mappings":";;;;;;;;;UAoDiB,eAAA;EACf,GAAA;EACA,IAAA,EAAM,CAAA;EACN,YAAA,EAAc,CAAA;EACd,UAAA,EAAY,aAAA,CAAc,CAAA;EAC1B,mBAAA,EAAqB,GAAA,CAAI,WAAA,EAAa,qBAAA;EACtC,WAAA,EAAa,cAAA;EACb,KAAA,EAAO,UAAA;AAAA;AAAA,KAGJ,aAAA,MAAmB,cAAA,CAAe,CAAA,WAC9B,CAAA;EACL,IAAA,IAAQ,CAAA;EACR,GAAA,CAAI,QAAA,EAAU,CAAA,EAAG,aAAA;AAAA;AAAA,KAGhB,qBAAA,GAAwB,cAAA;EAEzB,IAAA;EACA,GAAA,CAAI,QAAA,WAAmB,aAAA;AAAA;AAAA,KAGtB,cAAA,GAAiB,cAAA;EAElB,IAAA;EACA,GAAA,CAAI,QAAA,aAAqB,IAAA;AAAA;AAAA,KAGjB,iBAAA;AAAA,UAOK,QAAA;EACf,IAAA;EACA,YAAA,EAAc,CAAA;EACd,UAAA,EAAY,aAAA,CAAc,CAAA;EAC1B,QAAA,EAAU,KAAA;EACV,aAAA,EAAe,UAAA;EACf,KAAA,EAAO,GAAA,kBAAqB,eAAA,CAAgB,CAAA;EAC5C,WAAA,EAAa,KAAA;EACb,aAAA,EAAe,KAAA;EACf,IAAA,EAAM,WAAA,CAAY,QAAA,CAAS,CAAA,aAAc,IAAA,EAAM,CAAA,EAAG,KAAA;EAClD,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA;EAC5C,cAAA,EAAgB,iBAAA;EAChB,kBAAA,EAAoB,iBAAA;EACpB,gBAAA,EAAkB,IAAA;EAClB,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,qBAAA;EACA,aAAA,EAAe,uBAAA,CAAwB,CAAA;EACvC,oBAAA;EACA,sBAAA;EACA,yBAAA;EACA,WAAA,GAAc,GAAA;AAAA;AAAA,iBAmBA,cAAA,GAAA,CACd,UAAA,EAAY,aAAA,CAAc,CAAA,GAC1B,IAAA,EAAM,QAAA,CAAS,CAAA,WACf,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA,EAC5C,QAAA,EAAU,KAAA,UACT,QAAA,CAAS,CAAA;AAAA,iBA6BI,WAAA,GAAA,CACd,UAAA,EAAY,aAAA,CAAc,CAAA,GAC1B,IAAA,EAAM,QAAA,CAAS,CAAA,WACf,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA,EAC5C,QAAA,EAAU,KAAA,UACT,QAAA,CAAS,CAAA;AAAA,iBA4SI,kBAAA,GAAA,CACd,GAAA,mBACA,IAAA,EAAM,CAAA,EACN,KAAA,UACA,QAAA,EAAU,QAAA,CAAS,CAAA,IAClB,eAAA,CAAgB,CAAA;AAAA,iBA+KH,iBAAA,GAAA,CACd,QAAA,EAAU,QAAA,CAAS,CAAA,GACnB,QAAA,EAAU,CAAA,KACT,KAAA;AAAA,iBAygBa,gBAAA,GAAA,CAAoB,QAAA,EAAU,QAAA,CAAS,CAAA,IAAK,KAAA;AAAA,iBAS5C,sBAAA,GAAA,CAA0B,QAAA,EAAU,QAAA,CAAS,CAAA"}
|