@askrjs/askr 0.0.50 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bench/components/benchmark-row.d.ts +2 -2
- package/dist/bench/components/benchmark-row.js +0 -2
- package/dist/bench/components/benchmark-table.js +0 -2
- package/dist/benchmark.d.ts +1 -2
- package/dist/benchmark.js +5 -6
- package/dist/bin/askr-ssg.d.ts +1 -2
- package/dist/bin/askr-ssg.js +21 -6
- package/dist/boot/hydration.js +10 -11
- package/dist/boot/index.d.ts +1 -2
- package/dist/boot/index.js +21 -11
- package/dist/boot/root-lifecycle.d.ts +6 -3
- package/dist/boot/root-lifecycle.js +18 -14
- package/dist/boot/route-startup.js +13 -4
- package/dist/boot/types.d.ts +1 -2
- package/dist/common/attr-names.js +0 -2
- package/dist/common/component.d.ts +1 -2
- package/dist/common/control.d.ts +1 -2
- package/dist/common/control.js +0 -2
- package/dist/common/dom-range.d.ts +13 -0
- package/dist/common/env.js +1 -7
- package/dist/common/error-boundary.d.ts +15 -0
- package/dist/common/invariant.js +15 -0
- package/dist/common/jsx.d.ts +1 -2
- package/dist/common/jsx.js +0 -2
- package/dist/{dev → common}/logger.js +5 -8
- package/dist/common/promise.js +0 -2
- package/dist/common/props.d.ts +1 -2
- package/dist/common/render-context.js +0 -2
- package/dist/common/route-activity.js +0 -2
- package/dist/common/router-internal.js +0 -2
- package/dist/common/router.d.ts +1 -2
- package/dist/common/ssr-errors.d.ts +1 -2
- package/dist/common/ssr-errors.js +0 -2
- package/dist/common/ssr.d.ts +1 -2
- package/dist/common/ssr.js +0 -2
- package/dist/common/vnode.d.ts +1 -2
- package/dist/common/vnode.js +0 -2
- package/dist/components/error-boundary.d.ts +2 -16
- package/dist/components/error-boundary.js +2 -76
- package/dist/components/index.d.ts +2 -1
- package/dist/components/link.d.ts +2 -2
- package/dist/components/link.js +2 -2
- package/dist/control/case.d.ts +1 -2
- package/dist/control/case.js +1 -2
- package/dist/control/for.d.ts +3 -4
- package/dist/control/for.js +2 -4
- package/dist/control/shared.d.ts +1 -2
- package/dist/control/shared.js +0 -2
- package/dist/control/show.d.ts +1 -2
- package/dist/control/show.js +1 -2
- package/dist/data/data-runtime.d.ts +1 -2
- package/dist/data/data-runtime.js +3 -5
- package/dist/data/invalidation-listeners.js +0 -2
- package/dist/data/invalidation.d.ts +1 -2
- package/dist/data/invalidation.js +2 -4
- package/dist/data/mutation-cell.d.ts +1 -2
- package/dist/data/mutation-cell.js +7 -6
- package/dist/data/query-cell.d.ts +3 -2
- package/dist/data/query-cell.js +45 -11
- package/dist/data/query-key.js +0 -2
- package/dist/data/shared.js +3 -3
- package/dist/data/testing.js +2 -0
- package/dist/data/types.d.ts +1 -2
- package/dist/foundations/icon/icon.d.ts +1 -2
- package/dist/foundations/icon/icon.js +0 -2
- package/dist/foundations/icon/icon.types.d.ts +1 -2
- package/dist/foundations/index.d.ts +1 -1
- package/dist/foundations/index.js +1 -1
- package/dist/foundations/interactions/dismissable.d.ts +1 -2
- package/dist/foundations/interactions/dismissable.js +0 -2
- package/dist/foundations/interactions/focusable.d.ts +1 -2
- package/dist/foundations/interactions/focusable.js +0 -2
- package/dist/foundations/interactions/hoverable.d.ts +1 -2
- package/dist/foundations/interactions/hoverable.js +0 -2
- package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
- package/dist/foundations/interactions/interaction-policy.js +0 -2
- package/dist/foundations/interactions/pressable.d.ts +1 -2
- package/dist/foundations/interactions/pressable.js +0 -2
- package/dist/foundations/interactions/roving-focus.d.ts +1 -2
- package/dist/foundations/interactions/roving-focus.js +0 -2
- package/dist/foundations/state/controllable.d.ts +1 -3
- package/dist/foundations/state/controllable.js +1 -2
- package/dist/foundations/structures/collection.d.ts +1 -2
- package/dist/foundations/structures/collection.js +0 -2
- package/dist/foundations/structures/index.d.ts +1 -1
- package/dist/foundations/structures/index.js +2 -1
- package/dist/foundations/structures/layer.d.ts +1 -2
- package/dist/foundations/structures/layer.js +0 -2
- package/dist/foundations/structures/layout.d.ts +1 -2
- package/dist/foundations/structures/layout.js +0 -2
- package/dist/foundations/structures/portal.d.ts +2 -24
- package/dist/foundations/structures/portal.js +3 -187
- package/dist/foundations/structures/presence.d.ts +1 -2
- package/dist/foundations/structures/presence.js +0 -2
- package/dist/foundations/structures/slot.d.ts +1 -2
- package/dist/foundations/structures/slot.js +0 -2
- package/dist/foundations/utilities/aria.d.ts +1 -2
- package/dist/foundations/utilities/aria.js +0 -2
- package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
- package/dist/foundations/utilities/compose-handlers.js +0 -2
- package/dist/foundations/utilities/compose-ref.d.ts +1 -2
- package/dist/foundations/utilities/compose-ref.js +0 -2
- package/dist/foundations/utilities/event-types.d.ts +1 -2
- package/dist/foundations/utilities/merge-props.d.ts +1 -2
- package/dist/foundations/utilities/merge-props.js +0 -2
- package/dist/foundations/utilities/use-id.d.ts +1 -2
- package/dist/foundations/utilities/use-id.js +0 -2
- package/dist/fx/fx.d.ts +1 -2
- package/dist/fx/fx.js +2 -4
- package/dist/fx/index.js +1 -0
- package/dist/fx/noop.js +0 -2
- package/dist/fx/timing.d.ts +1 -2
- package/dist/fx/timing.js +0 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -6
- package/dist/jsx/types.d.ts +1 -2
- package/dist/jsx/utils.d.ts +1 -2
- package/dist/jsx/utils.js +0 -2
- package/dist/jsx-dev-runtime.d.ts +16 -2
- package/dist/jsx-dev-runtime.js +4 -12
- package/dist/jsx-runtime.d.ts +16 -2
- package/dist/jsx-runtime.js +16 -24
- package/dist/jsx-runtime2.d.ts +1 -1
- package/dist/renderer/attributes.js +29 -6
- package/dist/renderer/boundaries.js +50 -174
- package/dist/renderer/boundary-materialization.js +72 -0
- package/dist/renderer/boundary-range-adoption.js +76 -0
- package/dist/renderer/boundary-range-sync.js +101 -0
- package/dist/renderer/boundary-state.js +50 -0
- package/dist/renderer/child-shape.js +2 -4
- package/dist/renderer/children-fastpath.js +149 -0
- package/dist/renderer/children.js +3 -140
- package/dist/renderer/cleanup.js +72 -15
- package/dist/renderer/component-host-cleanup.js +124 -49
- package/dist/renderer/component-host-instances.js +60 -9
- package/dist/renderer/component-host-replacement.js +105 -0
- package/dist/renderer/component-host-results.js +138 -0
- package/dist/renderer/component-host.js +95 -170
- package/dist/renderer/dom-host.js +0 -2
- package/dist/renderer/dom-internal.js +115 -57
- package/dist/renderer/dom-range.js +161 -0
- package/dist/renderer/dom.js +7 -5
- package/dist/renderer/element-children.js +112 -32
- package/dist/renderer/error-boundary-dom.js +70 -13
- package/dist/renderer/evaluate-dom-range.js +3 -4
- package/dist/renderer/evaluate-reconcile.js +18 -42
- package/dist/renderer/evaluate.js +14 -3
- package/dist/renderer/fastpath.js +7 -14
- package/dist/renderer/for-commit-dom-map.js +6 -18
- package/dist/renderer/for-commit-removal.js +8 -17
- package/dist/renderer/for-commit-reorder.js +2 -4
- package/dist/renderer/for-commit.js +173 -45
- package/dist/renderer/hydration-boundaries.js +60 -0
- package/dist/renderer/hydration-listener-transaction.js +49 -0
- package/dist/renderer/index.js +11 -8
- package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
- package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
- package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
- package/dist/renderer/intrinsic-blueprint.js +30 -0
- package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
- package/dist/renderer/keyed-children.js +3 -9
- package/dist/renderer/keyed.js +10 -10
- package/dist/renderer/namespaces.js +0 -2
- package/dist/renderer/prop-bindings.js +59 -24
- package/dist/renderer/reactive-child-dom.js +10 -4
- package/dist/renderer/reactive-child-sources.js +0 -2
- package/dist/renderer/reactive-children.js +33 -24
- package/dist/renderer/reconcile-commit.js +0 -2
- package/dist/renderer/reconcile-fastpaths.js +6 -12
- package/dist/renderer/reconcile-resolution.js +32 -56
- package/dist/renderer/reconcile.js +0 -2
- package/dist/renderer/retained-element-rollback.js +161 -149
- package/dist/renderer/stable-patch.js +5 -7
- package/dist/renderer/static-reuse.js +0 -2
- package/dist/renderer/utils.js +20 -10
- package/dist/resources/index.js +1 -2
- package/dist/router/access.js +0 -2
- package/dist/router/activity.d.ts +1 -2
- package/dist/router/activity.js +20 -24
- package/dist/router/authoring.d.ts +1 -2
- package/dist/router/authoring.js +1 -3
- package/dist/router/index.d.ts +1 -1
- package/dist/router/internal-types.d.ts +1 -2
- package/dist/router/lazy.d.ts +1 -2
- package/dist/router/lazy.js +0 -2
- package/dist/router/manifest.d.ts +1 -2
- package/dist/router/manifest.js +0 -2
- package/dist/router/match.js +0 -2
- package/dist/router/navigate.d.ts +1 -2
- package/dist/router/navigate.js +5 -8
- package/dist/router/navigation-registry.d.ts +1 -2
- package/dist/router/navigation-registry.js +1 -3
- package/dist/router/navigation-scroll.d.ts +1 -2
- package/dist/router/navigation-scroll.js +0 -2
- package/dist/router/navigation-targets.d.ts +3 -4
- package/dist/router/navigation-targets.js +425 -44
- package/dist/router/policy.d.ts +1 -2
- package/dist/router/policy.js +0 -2
- package/dist/router/rendering.d.ts +1 -2
- package/dist/router/rendering.js +5 -3
- package/dist/router/resolution.d.ts +2 -16
- package/dist/router/resolution.js +6 -175
- package/dist/router/route-context.js +0 -2
- package/dist/router/route-matching.d.ts +19 -0
- package/dist/router/route-matching.js +173 -0
- package/dist/router/route-query.d.ts +1 -2
- package/dist/router/route-query.js +1 -3
- package/dist/router/route.js +4 -2
- package/dist/router/store.d.ts +1 -2
- package/dist/router/store.js +0 -2
- package/dist/router/testing.js +4 -0
- package/dist/runtime/access.d.ts +19 -0
- package/dist/runtime/access.js +0 -2
- package/dist/runtime/child-scope.d.ts +21 -2
- package/dist/runtime/child-scope.js +101 -54
- package/dist/runtime/component-cleanup.d.ts +1 -2
- package/dist/runtime/component-cleanup.js +3 -5
- package/dist/runtime/component-commit.js +26 -24
- package/dist/runtime/component-facade.js +5 -3
- package/dist/runtime/component-internal.d.ts +12 -7
- package/dist/runtime/component-internal.js +64 -46
- package/dist/runtime/component-lifecycle.d.ts +2 -41
- package/dist/runtime/component-lifecycle.js +6 -149
- package/dist/runtime/component-scope.d.ts +4 -5
- package/dist/runtime/component-scope.js +27 -8
- package/dist/runtime/component.js +4 -3
- package/dist/runtime/context.d.ts +5 -2
- package/dist/runtime/context.js +29 -3
- package/dist/runtime/control.d.ts +22 -3
- package/dist/runtime/control.js +168 -55
- package/dist/runtime/derive.d.ts +1 -2
- package/dist/runtime/derive.js +0 -2
- package/dist/runtime/dev-namespace.d.ts +30 -0
- package/dist/runtime/dev-namespace.js +32 -25
- package/dist/runtime/effect.d.ts +8 -5
- package/dist/runtime/effect.js +158 -75
- package/dist/runtime/error-boundary.d.ts +4 -0
- package/dist/runtime/error-boundary.js +29 -0
- package/dist/runtime/events.d.ts +58 -0
- package/dist/runtime/events.js +67 -70
- package/dist/runtime/execution-model.d.ts +6 -0
- package/dist/runtime/execution-model.js +0 -2
- package/dist/runtime/fastlane.d.ts +33 -0
- package/dist/runtime/fastlane.js +0 -2
- package/dist/runtime/for-bench.d.ts +1 -2
- package/dist/runtime/for-bench.js +9 -167
- package/dist/runtime/for-internal.d.ts +73 -10
- package/dist/runtime/for-internal.js +201 -14
- package/dist/runtime/for-reconcile.d.ts +1 -2
- package/dist/runtime/for-reconcile.js +76 -23
- package/dist/runtime/for-scopes.d.ts +5 -5
- package/dist/runtime/for-scopes.js +168 -48
- package/dist/runtime/for-signals.d.ts +14 -5
- package/dist/runtime/for-signals.js +157 -83
- package/dist/runtime/for-types.d.ts +8 -0
- package/dist/runtime/for.d.ts +2 -2
- package/dist/runtime/for.js +3 -3
- package/dist/runtime/index.d.ts +24 -0
- package/dist/runtime/index.js +33 -0
- package/dist/runtime/lifecycle-batch.d.ts +59 -0
- package/dist/runtime/lifecycle-batch.js +178 -0
- package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
- package/dist/runtime/lifecycle-operation-settlement.js +51 -0
- package/dist/runtime/lifecycle-operations.d.ts +1 -2
- package/dist/runtime/lifecycle-operations.js +5 -6
- package/dist/runtime/perf-metrics.d.ts +27 -0
- package/dist/runtime/perf-metrics.js +4 -68
- package/dist/runtime/portal.d.ts +21 -0
- package/dist/runtime/portal.js +305 -0
- package/dist/runtime/readable.d.ts +9 -4
- package/dist/runtime/readable.js +41 -17
- package/dist/runtime/resource-cell.js +3 -5
- package/dist/runtime/resource-operation.d.ts +1 -2
- package/dist/runtime/resource-operation.js +38 -35
- package/dist/runtime/runtime.d.ts +2 -3
- package/dist/runtime/runtime.js +0 -2
- package/dist/runtime/scheduler.d.ts +1 -2
- package/dist/runtime/scheduler.js +10 -13
- package/dist/runtime/selector-store.js +22 -0
- package/dist/runtime/selector.d.ts +1 -2
- package/dist/runtime/selector.js +6 -29
- package/dist/runtime/snapshot-source.d.ts +1 -2
- package/dist/runtime/snapshot-source.js +0 -2
- package/dist/runtime/state.d.ts +1 -2
- package/dist/runtime/state.js +1 -3
- package/dist/ssg/batch-render.js +0 -2
- package/dist/ssg/create-static-gen.d.ts +4 -2
- package/dist/ssg/create-static-gen.js +66 -14
- package/dist/ssg/generate-metadata.js +0 -2
- package/dist/ssg/generation-plan.js +0 -2
- package/dist/ssg/incremental-manifest.js +1 -3
- package/dist/ssg/resolve-ssg-data.js +0 -2
- package/dist/ssg/route-utils.js +0 -2
- package/dist/ssg/static-routes.js +1 -2
- package/dist/ssg/types.d.ts +2 -3
- package/dist/ssg/write-static-files.js +16 -12
- package/dist/ssr/attrs.js +0 -2
- package/dist/ssr/boundaries.js +17 -6
- package/dist/ssr/component-runtime.js +4 -30
- package/dist/ssr/context.d.ts +1 -2
- package/dist/ssr/context.js +0 -2
- package/dist/ssr/errors.d.ts +1 -2
- package/dist/ssr/errors.js +0 -2
- package/dist/ssr/escape.js +0 -2
- package/dist/ssr/hydration-data.js +0 -2
- package/dist/ssr/hydration-verify.d.ts +1 -2
- package/dist/ssr/hydration-verify.js +34 -7
- package/dist/ssr/index-internal.d.ts +1 -2
- package/dist/ssr/index-internal.js +0 -2
- package/dist/ssr/render-keys.js +0 -2
- package/dist/ssr/render-resolved.d.ts +1 -2
- package/dist/ssr/render-resolved.js +1 -3
- package/dist/ssr/render-sync.d.ts +1 -2
- package/dist/ssr/render-sync.js +28 -20
- package/dist/ssr/route-policy-resolution.js +2 -3
- package/dist/ssr/route-render.d.ts +1 -2
- package/dist/ssr/route-render.js +2 -3
- package/dist/ssr/sink.d.ts +1 -2
- package/dist/ssr/sink.js +0 -2
- package/dist/ssr/types.d.ts +1 -2
- package/dist/ssr/verify-hydration.js +0 -2
- package/dist/testing/index.d.ts +1 -2
- package/dist/testing/index.js +3 -4
- package/package.json +60 -47
- package/dist/bench/components/benchmark-row.d.ts.map +0 -1
- package/dist/bench/components/benchmark-row.js.map +0 -1
- package/dist/bench/components/benchmark-table.js.map +0 -1
- package/dist/benchmark.d.ts.map +0 -1
- package/dist/benchmark.js.map +0 -1
- package/dist/bin/askr-ssg.d.ts.map +0 -1
- package/dist/bin/askr-ssg.js.map +0 -1
- package/dist/boot/hydration.js.map +0 -1
- package/dist/boot/index.d.ts.map +0 -1
- package/dist/boot/index.js.map +0 -1
- package/dist/boot/root-lifecycle.d.ts.map +0 -1
- package/dist/boot/root-lifecycle.js.map +0 -1
- package/dist/boot/route-startup.js.map +0 -1
- package/dist/boot/types.d.ts.map +0 -1
- package/dist/common/attr-names.js.map +0 -1
- package/dist/common/component.d.ts.map +0 -1
- package/dist/common/control.d.ts.map +0 -1
- package/dist/common/control.js.map +0 -1
- package/dist/common/env.js.map +0 -1
- package/dist/common/jsx.d.ts.map +0 -1
- package/dist/common/jsx.js.map +0 -1
- package/dist/common/promise.js.map +0 -1
- package/dist/common/props.d.ts.map +0 -1
- package/dist/common/render-context.js.map +0 -1
- package/dist/common/route-activity.js.map +0 -1
- package/dist/common/router-internal.js.map +0 -1
- package/dist/common/router.d.ts.map +0 -1
- package/dist/common/ssr-errors.d.ts.map +0 -1
- package/dist/common/ssr-errors.js.map +0 -1
- package/dist/common/ssr.d.ts.map +0 -1
- package/dist/common/ssr.js.map +0 -1
- package/dist/common/vnode.d.ts.map +0 -1
- package/dist/common/vnode.js.map +0 -1
- package/dist/components/error-boundary.d.ts.map +0 -1
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/link.d.ts.map +0 -1
- package/dist/components/link.js.map +0 -1
- package/dist/control/case.d.ts.map +0 -1
- package/dist/control/case.js.map +0 -1
- package/dist/control/for.d.ts.map +0 -1
- package/dist/control/for.js.map +0 -1
- package/dist/control/shared.d.ts.map +0 -1
- package/dist/control/shared.js.map +0 -1
- package/dist/control/show.d.ts.map +0 -1
- package/dist/control/show.js.map +0 -1
- package/dist/data/data-runtime.d.ts.map +0 -1
- package/dist/data/data-runtime.js.map +0 -1
- package/dist/data/invalidation-listeners.js.map +0 -1
- package/dist/data/invalidation.d.ts.map +0 -1
- package/dist/data/invalidation.js.map +0 -1
- package/dist/data/mutation-cell.d.ts.map +0 -1
- package/dist/data/mutation-cell.js.map +0 -1
- package/dist/data/query-cell.d.ts.map +0 -1
- package/dist/data/query-cell.js.map +0 -1
- package/dist/data/query-key.js.map +0 -1
- package/dist/data/shared.js.map +0 -1
- package/dist/data/types.d.ts.map +0 -1
- package/dist/dev/invariant.js +0 -29
- package/dist/dev/invariant.js.map +0 -1
- package/dist/dev/logger.js.map +0 -1
- package/dist/foundations/icon/icon.d.ts.map +0 -1
- package/dist/foundations/icon/icon.js.map +0 -1
- package/dist/foundations/icon/icon.types.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.js.map +0 -1
- package/dist/foundations/interactions/focusable.d.ts.map +0 -1
- package/dist/foundations/interactions/focusable.js.map +0 -1
- package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
- package/dist/foundations/interactions/hoverable.js.map +0 -1
- package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
- package/dist/foundations/interactions/interaction-policy.js.map +0 -1
- package/dist/foundations/interactions/pressable.d.ts.map +0 -1
- package/dist/foundations/interactions/pressable.js.map +0 -1
- package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
- package/dist/foundations/interactions/roving-focus.js.map +0 -1
- package/dist/foundations/state/controllable.d.ts.map +0 -1
- package/dist/foundations/state/controllable.js.map +0 -1
- package/dist/foundations/structures/collection.d.ts.map +0 -1
- package/dist/foundations/structures/collection.js.map +0 -1
- package/dist/foundations/structures/layer.d.ts.map +0 -1
- package/dist/foundations/structures/layer.js.map +0 -1
- package/dist/foundations/structures/layout.d.ts.map +0 -1
- package/dist/foundations/structures/layout.js.map +0 -1
- package/dist/foundations/structures/portal.d.ts.map +0 -1
- package/dist/foundations/structures/portal.js.map +0 -1
- package/dist/foundations/structures/presence.d.ts.map +0 -1
- package/dist/foundations/structures/presence.js.map +0 -1
- package/dist/foundations/structures/slot.d.ts.map +0 -1
- package/dist/foundations/structures/slot.js.map +0 -1
- package/dist/foundations/utilities/aria.d.ts.map +0 -1
- package/dist/foundations/utilities/aria.js.map +0 -1
- package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
- package/dist/foundations/utilities/compose-handlers.js.map +0 -1
- package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
- package/dist/foundations/utilities/compose-ref.js.map +0 -1
- package/dist/foundations/utilities/event-types.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.js.map +0 -1
- package/dist/foundations/utilities/use-id.d.ts.map +0 -1
- package/dist/foundations/utilities/use-id.js.map +0 -1
- package/dist/fx/fx.d.ts.map +0 -1
- package/dist/fx/fx.js.map +0 -1
- package/dist/fx/noop.js.map +0 -1
- package/dist/fx/timing.d.ts.map +0 -1
- package/dist/fx/timing.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsx/types.d.ts.map +0 -1
- package/dist/jsx/utils.d.ts.map +0 -1
- package/dist/jsx/utils.js.map +0 -1
- package/dist/jsx-dev-runtime.d.ts.map +0 -1
- package/dist/jsx-dev-runtime.js.map +0 -1
- package/dist/jsx-runtime.d.ts.map +0 -1
- package/dist/jsx-runtime.js.map +0 -1
- package/dist/renderer/attributes.js.map +0 -1
- package/dist/renderer/boundaries.js.map +0 -1
- package/dist/renderer/child-shape.js.map +0 -1
- package/dist/renderer/children.js.map +0 -1
- package/dist/renderer/cleanup.js.map +0 -1
- package/dist/renderer/component-host-cleanup.js.map +0 -1
- package/dist/renderer/component-host-instances.js.map +0 -1
- package/dist/renderer/component-host.js.map +0 -1
- package/dist/renderer/dom-host.js.map +0 -1
- package/dist/renderer/dom-internal.js.map +0 -1
- package/dist/renderer/element-children.js.map +0 -1
- package/dist/renderer/error-boundary-dom.js.map +0 -1
- package/dist/renderer/evaluate-dom-range.js.map +0 -1
- package/dist/renderer/evaluate-reconcile.js.map +0 -1
- package/dist/renderer/evaluate.js.map +0 -1
- package/dist/renderer/fastpath.js.map +0 -1
- package/dist/renderer/for-commit-dom-map.js.map +0 -1
- package/dist/renderer/for-commit-removal.js.map +0 -1
- package/dist/renderer/for-commit-reorder.js.map +0 -1
- package/dist/renderer/for-commit.js.map +0 -1
- package/dist/renderer/index.js.map +0 -1
- package/dist/renderer/keyed-children.js.map +0 -1
- package/dist/renderer/keyed.js.map +0 -1
- package/dist/renderer/namespaces.js.map +0 -1
- package/dist/renderer/prop-bindings.js.map +0 -1
- package/dist/renderer/reactive-child-dom.js.map +0 -1
- package/dist/renderer/reactive-child-sources.js.map +0 -1
- package/dist/renderer/reactive-children.js.map +0 -1
- package/dist/renderer/reconcile-commit.js.map +0 -1
- package/dist/renderer/reconcile-fastpaths.js.map +0 -1
- package/dist/renderer/reconcile-resolution.js.map +0 -1
- package/dist/renderer/reconcile.js.map +0 -1
- package/dist/renderer/retained-element-rollback.js.map +0 -1
- package/dist/renderer/stable-patch.js.map +0 -1
- package/dist/renderer/static-reuse.js.map +0 -1
- package/dist/renderer/utils.js.map +0 -1
- package/dist/router/access.js.map +0 -1
- package/dist/router/activity.d.ts.map +0 -1
- package/dist/router/activity.js.map +0 -1
- package/dist/router/authoring.d.ts.map +0 -1
- package/dist/router/authoring.js.map +0 -1
- package/dist/router/internal-types.d.ts.map +0 -1
- package/dist/router/lazy.d.ts.map +0 -1
- package/dist/router/lazy.js.map +0 -1
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match.js.map +0 -1
- package/dist/router/navigate.d.ts.map +0 -1
- package/dist/router/navigate.js.map +0 -1
- package/dist/router/navigation-registry.d.ts.map +0 -1
- package/dist/router/navigation-registry.js.map +0 -1
- package/dist/router/navigation-scroll.d.ts.map +0 -1
- package/dist/router/navigation-scroll.js.map +0 -1
- package/dist/router/navigation-targets.d.ts.map +0 -1
- package/dist/router/navigation-targets.js.map +0 -1
- package/dist/router/policy.d.ts.map +0 -1
- package/dist/router/policy.js.map +0 -1
- package/dist/router/rendering.d.ts.map +0 -1
- package/dist/router/rendering.js.map +0 -1
- package/dist/router/resolution.d.ts.map +0 -1
- package/dist/router/resolution.js.map +0 -1
- package/dist/router/route-context.js.map +0 -1
- package/dist/router/route-query.d.ts.map +0 -1
- package/dist/router/route-query.js.map +0 -1
- package/dist/router/store.d.ts.map +0 -1
- package/dist/router/store.js.map +0 -1
- package/dist/runtime/access.js.map +0 -1
- package/dist/runtime/child-scope.d.ts.map +0 -1
- package/dist/runtime/child-scope.js.map +0 -1
- package/dist/runtime/component-cleanup.d.ts.map +0 -1
- package/dist/runtime/component-cleanup.js.map +0 -1
- package/dist/runtime/component-commit.js.map +0 -1
- package/dist/runtime/component-contracts.js +0 -5
- package/dist/runtime/component-internal.d.ts.map +0 -1
- package/dist/runtime/component-internal.js.map +0 -1
- package/dist/runtime/component-lifecycle.d.ts.map +0 -1
- package/dist/runtime/component-lifecycle.js.map +0 -1
- package/dist/runtime/component-scope.d.ts.map +0 -1
- package/dist/runtime/component-scope.js.map +0 -1
- package/dist/runtime/context.d.ts.map +0 -1
- package/dist/runtime/context.js.map +0 -1
- package/dist/runtime/control.d.ts.map +0 -1
- package/dist/runtime/control.js.map +0 -1
- package/dist/runtime/derive.d.ts.map +0 -1
- package/dist/runtime/derive.js.map +0 -1
- package/dist/runtime/dev-namespace.js.map +0 -1
- package/dist/runtime/effect.d.ts.map +0 -1
- package/dist/runtime/effect.js.map +0 -1
- package/dist/runtime/events.js.map +0 -1
- package/dist/runtime/execution-model.js.map +0 -1
- package/dist/runtime/fastlane.js.map +0 -1
- package/dist/runtime/for-bench.d.ts.map +0 -1
- package/dist/runtime/for-bench.js.map +0 -1
- package/dist/runtime/for-internal.d.ts.map +0 -1
- package/dist/runtime/for-internal.js.map +0 -1
- package/dist/runtime/for-reconcile.d.ts.map +0 -1
- package/dist/runtime/for-reconcile.js.map +0 -1
- package/dist/runtime/for-scopes.d.ts.map +0 -1
- package/dist/runtime/for-scopes.js.map +0 -1
- package/dist/runtime/for-signals.d.ts.map +0 -1
- package/dist/runtime/for-signals.js.map +0 -1
- package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
- package/dist/runtime/lifecycle-operations.js.map +0 -1
- package/dist/runtime/perf-metrics.js.map +0 -1
- package/dist/runtime/readable.d.ts.map +0 -1
- package/dist/runtime/readable.js.map +0 -1
- package/dist/runtime/resource-cell.js.map +0 -1
- package/dist/runtime/resource-operation.d.ts.map +0 -1
- package/dist/runtime/resource-operation.js.map +0 -1
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/runtime/scheduler.d.ts.map +0 -1
- package/dist/runtime/scheduler.js.map +0 -1
- package/dist/runtime/selector.d.ts.map +0 -1
- package/dist/runtime/selector.js.map +0 -1
- package/dist/runtime/snapshot-source.d.ts.map +0 -1
- package/dist/runtime/snapshot-source.js.map +0 -1
- package/dist/runtime/state.d.ts.map +0 -1
- package/dist/runtime/state.js.map +0 -1
- package/dist/ssg/batch-render.js.map +0 -1
- package/dist/ssg/create-static-gen.d.ts.map +0 -1
- package/dist/ssg/create-static-gen.js.map +0 -1
- package/dist/ssg/generate-metadata.js.map +0 -1
- package/dist/ssg/generation-plan.js.map +0 -1
- package/dist/ssg/incremental-manifest.js.map +0 -1
- package/dist/ssg/resolve-ssg-data.js.map +0 -1
- package/dist/ssg/route-utils.js.map +0 -1
- package/dist/ssg/static-routes.js.map +0 -1
- package/dist/ssg/types.d.ts.map +0 -1
- package/dist/ssg/write-static-files.js.map +0 -1
- package/dist/ssr/attrs.js.map +0 -1
- package/dist/ssr/boundaries.js.map +0 -1
- package/dist/ssr/component-runtime.js.map +0 -1
- package/dist/ssr/context.d.ts.map +0 -1
- package/dist/ssr/context.js.map +0 -1
- package/dist/ssr/errors.d.ts.map +0 -1
- package/dist/ssr/errors.js.map +0 -1
- package/dist/ssr/escape.js.map +0 -1
- package/dist/ssr/hydration-data.js.map +0 -1
- package/dist/ssr/hydration-verify.d.ts.map +0 -1
- package/dist/ssr/hydration-verify.js.map +0 -1
- package/dist/ssr/index-internal.d.ts.map +0 -1
- package/dist/ssr/index-internal.js.map +0 -1
- package/dist/ssr/render-keys.js.map +0 -1
- package/dist/ssr/render-resolved.d.ts.map +0 -1
- package/dist/ssr/render-resolved.js.map +0 -1
- package/dist/ssr/render-sync.d.ts.map +0 -1
- package/dist/ssr/render-sync.js.map +0 -1
- package/dist/ssr/route-policy-resolution.js.map +0 -1
- package/dist/ssr/route-render.d.ts.map +0 -1
- package/dist/ssr/route-render.js.map +0 -1
- package/dist/ssr/sink.d.ts.map +0 -1
- package/dist/ssr/sink.js.map +0 -1
- package/dist/ssr/types.d.ts.map +0 -1
- package/dist/ssr/verify-hydration.js.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js.map +0 -1
package/dist/runtime/effect.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { enqueueRuntimeLane } from "./access.js";
|
|
2
2
|
import { withFineGrainedReadTracking } from "./readable.js";
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import "./dev-namespace.js";
|
|
4
|
+
const SOURCE_EFFECTS = Symbol("askr.source-effects");
|
|
5
5
|
const effectSources = /* @__PURE__ */ new WeakMap();
|
|
6
6
|
const dirtyEffectsByLane = {
|
|
7
7
|
derived: /* @__PURE__ */ new Set(),
|
|
@@ -28,51 +28,124 @@ const LANE_FLUSH_TASKS = {
|
|
|
28
28
|
reactive: () => flushLaneEffects("reactive"),
|
|
29
29
|
post: () => flushLaneEffects("post")
|
|
30
30
|
};
|
|
31
|
+
function isEffectReadSourceCollection(sources) {
|
|
32
|
+
return Array.isArray(sources) || sources instanceof Set;
|
|
33
|
+
}
|
|
34
|
+
function effectReadSourceCollectionHas(sources, source) {
|
|
35
|
+
return Array.isArray(sources) ? sources.includes(source) : sources.has(source);
|
|
36
|
+
}
|
|
37
|
+
function getRegisteredEffects(source) {
|
|
38
|
+
return source[SOURCE_EFFECTS] ?? effectSources.get(source);
|
|
39
|
+
}
|
|
40
|
+
function setRegisteredEffects(source, registered) {
|
|
41
|
+
const effectSource = source;
|
|
42
|
+
try {
|
|
43
|
+
effectSource[SOURCE_EFFECTS] = registered;
|
|
44
|
+
if (effectSource[SOURCE_EFFECTS] === registered) return;
|
|
45
|
+
} catch {}
|
|
46
|
+
effectSources.set(source, registered);
|
|
47
|
+
}
|
|
48
|
+
function deleteRegisteredEffects(source) {
|
|
49
|
+
const effectSource = source;
|
|
50
|
+
if (effectSource[SOURCE_EFFECTS] !== void 0) try {
|
|
51
|
+
delete effectSource[SOURCE_EFFECTS];
|
|
52
|
+
return;
|
|
53
|
+
} catch {}
|
|
54
|
+
effectSources.delete(source);
|
|
55
|
+
}
|
|
31
56
|
function registerEffectSource(source, effect) {
|
|
32
|
-
|
|
33
|
-
if (!
|
|
34
|
-
|
|
35
|
-
|
|
57
|
+
const registered = getRegisteredEffects(source);
|
|
58
|
+
if (!registered) {
|
|
59
|
+
setRegisteredEffects(source, effect);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (registered instanceof Set) {
|
|
63
|
+
registered.add(effect);
|
|
64
|
+
return;
|
|
36
65
|
}
|
|
37
|
-
|
|
66
|
+
if (registered === effect) return;
|
|
67
|
+
setRegisteredEffects(source, /* @__PURE__ */ new Set([registered, effect]));
|
|
38
68
|
}
|
|
39
69
|
function unregisterEffectSource(source, effect) {
|
|
40
|
-
|
|
70
|
+
const registered = getRegisteredEffects(source);
|
|
71
|
+
if (!registered) return;
|
|
72
|
+
if (!(registered instanceof Set)) {
|
|
73
|
+
if (registered === effect) deleteRegisteredEffects(source);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
registered.delete(effect);
|
|
77
|
+
if (registered.size === 0) deleteRegisteredEffects(source);
|
|
78
|
+
else if (registered.size === 1) setRegisteredEffects(source, registered.values().next().value);
|
|
41
79
|
}
|
|
42
80
|
function clearEffectSubscriptions(effect) {
|
|
43
|
-
|
|
44
|
-
|
|
81
|
+
const sources = effect.readSources;
|
|
82
|
+
if (isEffectReadSourceCollection(sources)) {
|
|
83
|
+
for (const source of sources) unregisterEffectSource(source, effect);
|
|
84
|
+
if (sources instanceof Set) sources.clear();
|
|
85
|
+
else sources.length = 0;
|
|
86
|
+
} else if (sources) unregisterEffectSource(sources, effect);
|
|
87
|
+
if (effect.readSource2) unregisterEffectSource(effect.readSource2, effect);
|
|
88
|
+
effect.readSources = null;
|
|
89
|
+
effect.readSource2 = null;
|
|
45
90
|
}
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
91
|
+
function evaluateAndCommitEffect(effect) {
|
|
92
|
+
effect._pendingFineGrainedReadSource = null;
|
|
93
|
+
effect._pendingFineGrainedReadSources = null;
|
|
94
|
+
try {
|
|
95
|
+
const value = withFineGrainedReadTracking(effect, effect.compute);
|
|
96
|
+
const pendingAdditionalSources = effect._pendingFineGrainedReadSources;
|
|
97
|
+
const hasPendingCollection = isEffectReadSourceCollection(pendingAdditionalSources);
|
|
98
|
+
commitEffectResult(effect, value, hasPendingCollection ? pendingAdditionalSources : effect._pendingFineGrainedReadSource, pendingAdditionalSources && !hasPendingCollection ? pendingAdditionalSources : null);
|
|
99
|
+
} finally {
|
|
100
|
+
effect._pendingFineGrainedReadSource = null;
|
|
101
|
+
effect._pendingFineGrainedReadSources = null;
|
|
54
102
|
}
|
|
55
|
-
return new Set(pendingSources);
|
|
56
|
-
}
|
|
57
|
-
function evaluateEffect(effect) {
|
|
58
|
-
const pendingSources = /* @__PURE__ */ new Set();
|
|
59
|
-
incDevCounter("effectRuns");
|
|
60
|
-
return {
|
|
61
|
-
value: withFineGrainedReadTracking(pendingSources, () => effect.compute()),
|
|
62
|
-
nextSources: normalizeNextSources(effect.readSources, pendingSources)
|
|
63
|
-
};
|
|
64
103
|
}
|
|
65
|
-
function commitEffectSubscriptions(effect, nextSources) {
|
|
104
|
+
function commitEffectSubscriptions(effect, nextSources, nextSource2) {
|
|
66
105
|
const previousSources = effect.readSources;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
106
|
+
const previousSource2 = effect.readSource2;
|
|
107
|
+
if (previousSources === nextSources && previousSource2 === nextSource2) return;
|
|
108
|
+
const previousCollection = isEffectReadSourceCollection(previousSources);
|
|
109
|
+
const nextCollection = isEffectReadSourceCollection(nextSources);
|
|
110
|
+
if (!previousCollection && !nextCollection) {
|
|
111
|
+
if (previousSources && previousSources !== nextSources && previousSources !== nextSource2) unregisterEffectSource(previousSources, effect);
|
|
112
|
+
if (previousSource2 && previousSource2 !== nextSources && previousSource2 !== nextSource2) unregisterEffectSource(previousSource2, effect);
|
|
113
|
+
if (nextSources && nextSources !== previousSources && nextSources !== previousSource2) registerEffectSource(nextSources, effect);
|
|
114
|
+
if (nextSource2 && nextSource2 !== previousSources && nextSource2 !== previousSource2) registerEffectSource(nextSource2, effect);
|
|
115
|
+
effect.readSources = nextSources;
|
|
116
|
+
effect.readSource2 = nextSource2;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const stateHas = (sources, source2, source) => isEffectReadSourceCollection(sources) ? effectReadSourceCollectionHas(sources, source) : sources === source || source2 === source;
|
|
120
|
+
if ((previousCollection ? Array.isArray(previousSources) ? previousSources.length : previousSources.size : (previousSources ? 1 : 0) + (previousSource2 ? 1 : 0)) === (nextCollection ? Array.isArray(nextSources) ? nextSources.length : nextSources.size : (nextSources ? 1 : 0) + (nextSource2 ? 1 : 0))) {
|
|
121
|
+
let same = true;
|
|
122
|
+
if (previousCollection) {
|
|
123
|
+
for (const source of previousSources) if (!stateHas(nextSources, nextSource2, source)) {
|
|
124
|
+
same = false;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
} else same = (!previousSources || stateHas(nextSources, nextSource2, previousSources)) && (!previousSource2 || stateHas(nextSources, nextSource2, previousSource2));
|
|
128
|
+
if (same) return;
|
|
129
|
+
}
|
|
130
|
+
if (previousCollection) {
|
|
131
|
+
for (const source of previousSources) if (!stateHas(nextSources, nextSource2, source)) unregisterEffectSource(source, effect);
|
|
132
|
+
} else {
|
|
133
|
+
if (previousSources && !stateHas(nextSources, nextSource2, previousSources)) unregisterEffectSource(previousSources, effect);
|
|
134
|
+
if (previousSource2 && !stateHas(nextSources, nextSource2, previousSource2)) unregisterEffectSource(previousSource2, effect);
|
|
135
|
+
}
|
|
136
|
+
if (nextCollection) {
|
|
137
|
+
for (const source of nextSources) if (!stateHas(previousSources, previousSource2, source)) registerEffectSource(source, effect);
|
|
138
|
+
} else {
|
|
139
|
+
if (nextSources && !stateHas(previousSources, previousSource2, nextSources)) registerEffectSource(nextSources, effect);
|
|
140
|
+
if (nextSource2 && !stateHas(previousSources, previousSource2, nextSource2)) registerEffectSource(nextSource2, effect);
|
|
141
|
+
}
|
|
70
142
|
effect.readSources = nextSources;
|
|
143
|
+
effect.readSource2 = nextSource2;
|
|
71
144
|
}
|
|
72
|
-
function commitEffectResult(effect, value, nextSources) {
|
|
145
|
+
function commitEffectResult(effect, value, nextSources, nextSource2) {
|
|
73
146
|
const previousValue = effect.lastValue;
|
|
74
147
|
if (!effect.hasValue || !effect.equals(previousValue, value)) effect.commit(value, effect.hasValue ? previousValue : void 0);
|
|
75
|
-
commitEffectSubscriptions(effect, nextSources);
|
|
148
|
+
commitEffectSubscriptions(effect, nextSources, nextSource2);
|
|
76
149
|
effect.lastValue = value;
|
|
77
150
|
effect.hasValue = true;
|
|
78
151
|
}
|
|
@@ -100,8 +173,7 @@ function flushLaneEffects(lane) {
|
|
|
100
173
|
continue;
|
|
101
174
|
}
|
|
102
175
|
try {
|
|
103
|
-
|
|
104
|
-
commitEffectResult(effect, value, nextSources);
|
|
176
|
+
evaluateAndCommitEffect(effect);
|
|
105
177
|
} catch (error) {
|
|
106
178
|
effect.onError?.(error);
|
|
107
179
|
}
|
|
@@ -117,61 +189,72 @@ function unscheduleEffect(effect) {
|
|
|
117
189
|
dirtyEffectsByLane[effect.lane].delete(effect);
|
|
118
190
|
}
|
|
119
191
|
function recomputeEffectNow(effect) {
|
|
120
|
-
|
|
121
|
-
commitEffectResult(effect, value, nextSources);
|
|
192
|
+
evaluateAndCommitEffect(effect);
|
|
122
193
|
}
|
|
123
194
|
function markFineGrainedEffectsDirtySource(source) {
|
|
124
|
-
const
|
|
125
|
-
if (!
|
|
195
|
+
const registered = getRegisteredEffects(source);
|
|
196
|
+
if (!registered) return;
|
|
126
197
|
dirtyLaneState.derived = false;
|
|
127
198
|
dirtyLaneState.component = false;
|
|
128
199
|
dirtyLaneState.reactive = false;
|
|
129
200
|
dirtyLaneState.post = false;
|
|
130
|
-
|
|
131
|
-
if (!effect.isActive)
|
|
201
|
+
const markDirty = (effect) => {
|
|
202
|
+
if (!effect.isActive) return;
|
|
132
203
|
const lane = effect.lane;
|
|
133
204
|
dirtyEffectsByLane[lane].add(effect);
|
|
134
205
|
dirtyLaneState[lane] = true;
|
|
135
|
-
}
|
|
206
|
+
};
|
|
207
|
+
if (registered instanceof Set) for (const effect of registered) markDirty(effect);
|
|
208
|
+
else markDirty(registered);
|
|
136
209
|
if (dirtyLaneState.derived) scheduleLaneFlush("derived");
|
|
137
210
|
if (dirtyLaneState.component) scheduleLaneFlush("component");
|
|
138
211
|
if (dirtyLaneState.reactive) scheduleLaneFlush("reactive");
|
|
139
212
|
if (dirtyLaneState.post) scheduleLaneFlush("post");
|
|
140
213
|
}
|
|
214
|
+
var FineGrainedEffectImpl = class {
|
|
215
|
+
constructor(lane, compute, commit, equals, onError, owner) {
|
|
216
|
+
this.readSources = null;
|
|
217
|
+
this.readSource2 = null;
|
|
218
|
+
this._pendingFineGrainedReadSource = null;
|
|
219
|
+
this._pendingFineGrainedReadSources = null;
|
|
220
|
+
this.isActive = true;
|
|
221
|
+
this.hasValue = false;
|
|
222
|
+
this.lastValue = void 0;
|
|
223
|
+
this._owner = owner;
|
|
224
|
+
this.lane = lane;
|
|
225
|
+
this.compute = compute;
|
|
226
|
+
this.commit = commit;
|
|
227
|
+
this.equals = equals;
|
|
228
|
+
this.onError = onError;
|
|
229
|
+
}
|
|
230
|
+
cleanup() {
|
|
231
|
+
if (!this.isActive) return;
|
|
232
|
+
this.isActive = false;
|
|
233
|
+
unscheduleEffect(this);
|
|
234
|
+
clearEffectSubscriptions(this);
|
|
235
|
+
}
|
|
236
|
+
updateCompute(nextCompute) {
|
|
237
|
+
if (!this.isActive) return;
|
|
238
|
+
this.compute = nextCompute;
|
|
239
|
+
unscheduleEffect(this);
|
|
240
|
+
recomputeEffectNow(this);
|
|
241
|
+
}
|
|
242
|
+
flush() {
|
|
243
|
+
if (!this.isActive) return;
|
|
244
|
+
unscheduleEffect(this);
|
|
245
|
+
recomputeEffectNow(this);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
141
248
|
function createFineGrainedEffect(options) {
|
|
142
|
-
const effect =
|
|
143
|
-
lane: options.lane,
|
|
144
|
-
compute: options.compute,
|
|
145
|
-
commit: options.commit,
|
|
146
|
-
equals: options.equals ?? Object.is,
|
|
147
|
-
readSources: /* @__PURE__ */ new Set(),
|
|
148
|
-
isActive: true,
|
|
149
|
-
hasValue: false,
|
|
150
|
-
lastValue: void 0,
|
|
151
|
-
onError: options.onError
|
|
152
|
-
};
|
|
249
|
+
const effect = new FineGrainedEffectImpl(options.lane, options.compute, options.commit, options.equals ?? Object.is, options.onError, options._owner);
|
|
153
250
|
recomputeEffectNow(effect);
|
|
154
|
-
return
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
updateCompute(nextCompute) {
|
|
162
|
-
if (!effect.isActive) return;
|
|
163
|
-
effect.compute = nextCompute;
|
|
164
|
-
unscheduleEffect(effect);
|
|
165
|
-
recomputeEffectNow(effect);
|
|
166
|
-
},
|
|
167
|
-
flush() {
|
|
168
|
-
if (!effect.isActive) return;
|
|
169
|
-
unscheduleEffect(effect);
|
|
170
|
-
recomputeEffectNow(effect);
|
|
171
|
-
}
|
|
172
|
-
};
|
|
251
|
+
return effect;
|
|
252
|
+
}
|
|
253
|
+
/** @internal Allocation-sensitive variant for shared renderer callbacks. */
|
|
254
|
+
function createOwnedFineGrainedEffect(lane, compute, commit, equals, onError, owner) {
|
|
255
|
+
const effect = new FineGrainedEffectImpl(lane, compute, commit, equals, onError, owner);
|
|
256
|
+
recomputeEffectNow(effect);
|
|
257
|
+
return effect;
|
|
173
258
|
}
|
|
174
259
|
//#endregion
|
|
175
|
-
export { createFineGrainedEffect, markFineGrainedEffectsDirtySource };
|
|
176
|
-
|
|
177
|
-
//# sourceMappingURL=effect.js.map
|
|
260
|
+
export { createFineGrainedEffect, createOwnedFineGrainedEffect, markFineGrainedEffectsDirtySource };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ComponentInstance } from "./component-internal.js";
|
|
2
|
+
//#region src/runtime/error-boundary.d.ts
|
|
3
|
+
declare function createBoundaryReset(instance: ComponentInstance): () => void;
|
|
4
|
+
declare function reportBoundaryError(instance: ComponentInstance, error: unknown, onError?: (error: unknown) => void): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { logger } from "../common/logger.js";
|
|
2
|
+
//#region src/runtime/error-boundary.ts
|
|
3
|
+
function createBoundaryReset(instance) {
|
|
4
|
+
return () => {
|
|
5
|
+
const boundaryState = instance.errorBoundaryState;
|
|
6
|
+
if (!boundaryState) return;
|
|
7
|
+
boundaryState.error = null;
|
|
8
|
+
boundaryState.notified = false;
|
|
9
|
+
queueMicrotask(() => {
|
|
10
|
+
instance._enqueueRun?.();
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function reportBoundaryError(instance, error, onError) {
|
|
15
|
+
const boundaryState = instance.errorBoundaryState;
|
|
16
|
+
if (boundaryState && Object.is(boundaryState.error, error) && boundaryState.notified) return;
|
|
17
|
+
if (boundaryState) {
|
|
18
|
+
boundaryState.error = error;
|
|
19
|
+
boundaryState.notified = true;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
onError?.(error);
|
|
23
|
+
} catch (hookError) {
|
|
24
|
+
logger.error("[Askr] ErrorBoundary onError handler threw:", hookError);
|
|
25
|
+
}
|
|
26
|
+
logger.error("[Askr] ErrorBoundary caught render error:", error);
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { createBoundaryReset, reportBoundaryError };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/runtime/events.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Event delegation system for Askr
|
|
4
|
+
*
|
|
5
|
+
* Provides efficient event handling by attaching listeners to a container
|
|
6
|
+
* instead of individual elements. This significantly reduces memory usage
|
|
7
|
+
* and improves performance when many elements have the same event type.
|
|
8
|
+
*
|
|
9
|
+
* Delegated handling is enabled by default. Tests and internal runtime code
|
|
10
|
+
* can still disable or re-enable it when they need to exercise both modes.
|
|
11
|
+
*/
|
|
12
|
+
interface DelegatedEventMap {
|
|
13
|
+
click: MouseEvent;
|
|
14
|
+
dblclick: MouseEvent;
|
|
15
|
+
mousedown: MouseEvent;
|
|
16
|
+
mouseup: MouseEvent;
|
|
17
|
+
mouseover: MouseEvent;
|
|
18
|
+
mouseout: MouseEvent;
|
|
19
|
+
mousemove: MouseEvent;
|
|
20
|
+
focus: FocusEvent;
|
|
21
|
+
blur: FocusEvent;
|
|
22
|
+
input: InputEvent;
|
|
23
|
+
change: Event;
|
|
24
|
+
keydown: KeyboardEvent;
|
|
25
|
+
keyup: KeyboardEvent;
|
|
26
|
+
keypress: KeyboardEvent;
|
|
27
|
+
submit: Event;
|
|
28
|
+
scroll: Event;
|
|
29
|
+
wheel: WheelEvent;
|
|
30
|
+
touchstart: TouchEvent;
|
|
31
|
+
touchend: TouchEvent;
|
|
32
|
+
touchmove: TouchEvent;
|
|
33
|
+
touchcancel: TouchEvent;
|
|
34
|
+
}
|
|
35
|
+
interface DelegatedHandler {
|
|
36
|
+
handler: EventListener;
|
|
37
|
+
original: EventListener;
|
|
38
|
+
container: Element;
|
|
39
|
+
eventName: string;
|
|
40
|
+
options?: AddEventListenerOptions;
|
|
41
|
+
}
|
|
42
|
+
declare function isEventDelegationEnabled(): boolean;
|
|
43
|
+
declare function disableEventDelegation(): void;
|
|
44
|
+
declare function enableEventDelegation(container?: Element): void;
|
|
45
|
+
declare function setGlobalDelegationContainer(container: Element): void;
|
|
46
|
+
declare function addDelegatedListener(element: Element, eventName: string, handler: EventListener, originalHandler: EventListener, options?: AddEventListenerOptions): void;
|
|
47
|
+
/** @internal Attach a delegated handler to a newly cloned element. */
|
|
48
|
+
declare function addFreshDelegatedListener(element: Element, eventName: string, handler: EventListener, originalHandler: EventListener, options?: AddEventListenerOptions): void;
|
|
49
|
+
declare function updateDelegatedListener(element: Element, eventName: string, handler: EventListener, originalHandler: EventListener, options?: AddEventListenerOptions): boolean;
|
|
50
|
+
declare function removeDelegatedListener(element: Element, eventName: string): void;
|
|
51
|
+
declare function getDelegatedHandlerForElement(element: Element, eventName: string): DelegatedHandler | undefined;
|
|
52
|
+
declare function getDelegatedHandlersForElement(element: Element): Map<string, DelegatedHandler> | undefined;
|
|
53
|
+
declare function hasDelegatedHandler(element: Element, eventName: string): boolean;
|
|
54
|
+
declare function clearDelegatedHandlersForElement(element: Element): void;
|
|
55
|
+
declare function getDelegatedEventNames(): readonly (keyof DelegatedEventMap)[];
|
|
56
|
+
declare function isDelegatedEvent(eventName: string): boolean;
|
|
57
|
+
//#endregion
|
|
58
|
+
export { DelegatedEventMap };
|
package/dist/runtime/events.js
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
import { logger } from "../
|
|
2
|
-
import
|
|
1
|
+
import { logger } from "../common/logger.js";
|
|
2
|
+
import "./perf-metrics.js";
|
|
3
3
|
import { runRuntimeHandlerScope } from "./access.js";
|
|
4
|
-
import
|
|
5
|
-
//#region src/runtime/events.ts
|
|
6
|
-
/**
|
|
7
|
-
* Event delegation system for Askr
|
|
8
|
-
*
|
|
9
|
-
* Provides efficient event handling by attaching listeners to a container
|
|
10
|
-
* instead of individual elements. This significantly reduces memory usage
|
|
11
|
-
* and improves performance when many elements have the same event type.
|
|
12
|
-
*
|
|
13
|
-
* Delegated handling is enabled by default. Tests and internal runtime code
|
|
14
|
-
* can still disable or re-enable it when they need to exercise both modes.
|
|
15
|
-
*/
|
|
4
|
+
import "./dev-namespace.js";
|
|
16
5
|
const DELEGATED_EVENTS = [
|
|
17
6
|
"click",
|
|
18
7
|
"dblclick",
|
|
@@ -36,56 +25,63 @@ const DELEGATED_EVENTS = [
|
|
|
36
25
|
"touchmove",
|
|
37
26
|
"touchcancel"
|
|
38
27
|
];
|
|
39
|
-
const
|
|
28
|
+
const DELEGATED_HANDLERS = Symbol("askr.delegated-handlers");
|
|
29
|
+
const delegatedHandlerFallback = /* @__PURE__ */ new WeakMap();
|
|
30
|
+
function getDelegatedHandlerStore(element) {
|
|
31
|
+
return element[DELEGATED_HANDLERS] ?? delegatedHandlerFallback.get(element);
|
|
32
|
+
}
|
|
33
|
+
function setDelegatedHandlerStore(element, store) {
|
|
34
|
+
const host = element;
|
|
35
|
+
try {
|
|
36
|
+
host[DELEGATED_HANDLERS] = store;
|
|
37
|
+
if (host[DELEGATED_HANDLERS] === store) return;
|
|
38
|
+
} catch {}
|
|
39
|
+
delegatedHandlerFallback.set(element, store);
|
|
40
|
+
}
|
|
41
|
+
function deleteDelegatedHandlerStore(element) {
|
|
42
|
+
const host = element;
|
|
43
|
+
if (host[DELEGATED_HANDLERS] !== void 0) try {
|
|
44
|
+
delete host[DELEGATED_HANDLERS];
|
|
45
|
+
return;
|
|
46
|
+
} catch {}
|
|
47
|
+
delegatedHandlerFallback.delete(element);
|
|
48
|
+
}
|
|
40
49
|
let eventDelegationEnabled = true;
|
|
41
50
|
const containerDelegatedListeners = /* @__PURE__ */ new Map();
|
|
42
|
-
const containerDelegatedListenerUsage = /* @__PURE__ */ new Map();
|
|
43
51
|
function isEventDelegationEnabled() {
|
|
44
52
|
return eventDelegationEnabled;
|
|
45
53
|
}
|
|
46
|
-
function incrementContainerListenerUsage(container, eventName) {
|
|
47
|
-
let usage = containerDelegatedListenerUsage.get(container);
|
|
48
|
-
if (!usage) {
|
|
49
|
-
usage = /* @__PURE__ */ new Map();
|
|
50
|
-
containerDelegatedListenerUsage.set(container, usage);
|
|
51
|
-
}
|
|
52
|
-
usage.set(eventName, (usage.get(eventName) ?? 0) + 1);
|
|
53
|
-
}
|
|
54
54
|
function decrementContainerListenerUsage(entry) {
|
|
55
|
-
const usage = containerDelegatedListenerUsage.get(entry.container);
|
|
56
|
-
if (!usage) return;
|
|
57
|
-
const nextCount = (usage.get(entry.eventName) ?? 0) - 1;
|
|
58
|
-
if (nextCount > 0) {
|
|
59
|
-
usage.set(entry.eventName, nextCount);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
usage.delete(entry.eventName);
|
|
63
55
|
const listeners = containerDelegatedListeners.get(entry.container);
|
|
64
56
|
const listener = listeners?.get(entry.eventName);
|
|
65
|
-
if (listener)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
if (!listener) return;
|
|
58
|
+
listener.usage -= 1;
|
|
59
|
+
if (listener.usage > 0) return;
|
|
60
|
+
entry.container.removeEventListener(entry.eventName, listener.handler);
|
|
61
|
+
listeners?.delete(entry.eventName);
|
|
69
62
|
if (listeners?.size === 0) containerDelegatedListeners.delete(entry.container);
|
|
70
|
-
if (usage.size === 0) containerDelegatedListenerUsage.delete(entry.container);
|
|
71
63
|
}
|
|
72
64
|
function getDelegationContainer() {
|
|
73
65
|
if (typeof document !== "undefined") return document.body;
|
|
74
66
|
return null;
|
|
75
67
|
}
|
|
76
|
-
function attachDelegatedListener(container, element, eventName, handler, originalHandler, options) {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (!containerListeners
|
|
68
|
+
function attachDelegatedListener(container, element, eventName, handler, originalHandler, options, fresh = false) {
|
|
69
|
+
const existingStore = fresh ? void 0 : getDelegatedHandlerStore(element);
|
|
70
|
+
const hadHandler = existingStore instanceof Map ? existingStore.has(eventName) : existingStore?.eventName === eventName;
|
|
71
|
+
let containerListeners = containerDelegatedListeners.get(container);
|
|
72
|
+
if (!containerListeners) {
|
|
73
|
+
containerListeners = /* @__PURE__ */ new Map();
|
|
74
|
+
containerDelegatedListeners.set(container, containerListeners);
|
|
75
|
+
}
|
|
76
|
+
let containerListener = containerListeners.get(eventName);
|
|
77
|
+
if (!containerListener) {
|
|
81
78
|
const delegatedHandler = (e) => {
|
|
82
79
|
const target = e.target;
|
|
83
80
|
if (!target) return;
|
|
84
81
|
runRuntimeHandlerScope(() => {
|
|
85
82
|
let current = target;
|
|
86
83
|
while (current && current !== container) {
|
|
87
|
-
|
|
88
|
-
const store = delegatedHandlers.get(current);
|
|
84
|
+
const store = getDelegatedHandlerStore(current);
|
|
89
85
|
const entry = !store ? void 0 : store instanceof Map ? store.get(eventName) : store.eventName === eventName ? store : void 0;
|
|
90
86
|
if (entry) try {
|
|
91
87
|
entry.handler(e);
|
|
@@ -99,22 +95,24 @@ function attachDelegatedListener(container, element, eventName, handler, origina
|
|
|
99
95
|
};
|
|
100
96
|
const listenerOptions = getPassiveOptions(eventName) ?? options;
|
|
101
97
|
container.addEventListener(eventName, delegatedHandler, listenerOptions);
|
|
102
|
-
|
|
98
|
+
containerListener = {
|
|
99
|
+
handler: delegatedHandler,
|
|
100
|
+
usage: 0
|
|
101
|
+
};
|
|
102
|
+
containerListeners.set(eventName, containerListener);
|
|
103
103
|
}
|
|
104
104
|
setDelegatedHandlerForElement(element, {
|
|
105
105
|
handler,
|
|
106
106
|
original: originalHandler,
|
|
107
|
-
element,
|
|
108
107
|
container,
|
|
109
108
|
eventName,
|
|
110
109
|
options
|
|
111
|
-
});
|
|
112
|
-
if (!hadHandler)
|
|
110
|
+
}, existingStore);
|
|
111
|
+
if (!hadHandler) containerListener.usage += 1;
|
|
113
112
|
}
|
|
114
|
-
function setDelegatedHandlerForElement(element, entry) {
|
|
115
|
-
const existing = delegatedHandlers.get(element);
|
|
113
|
+
function setDelegatedHandlerForElement(element, entry, existing = getDelegatedHandlerStore(element)) {
|
|
116
114
|
if (!existing) {
|
|
117
|
-
|
|
115
|
+
setDelegatedHandlerStore(element, entry);
|
|
118
116
|
return;
|
|
119
117
|
}
|
|
120
118
|
if (existing instanceof Map) {
|
|
@@ -122,13 +120,13 @@ function setDelegatedHandlerForElement(element, entry) {
|
|
|
122
120
|
return;
|
|
123
121
|
}
|
|
124
122
|
if (existing.eventName === entry.eventName) {
|
|
125
|
-
|
|
123
|
+
setDelegatedHandlerStore(element, entry);
|
|
126
124
|
return;
|
|
127
125
|
}
|
|
128
126
|
const next = /* @__PURE__ */ new Map();
|
|
129
127
|
next.set(existing.eventName, existing);
|
|
130
128
|
next.set(entry.eventName, entry);
|
|
131
|
-
|
|
129
|
+
setDelegatedHandlerStore(element, next);
|
|
132
130
|
}
|
|
133
131
|
function getPassiveOptions(eventName) {
|
|
134
132
|
if (eventName === "wheel" || eventName === "scroll" || eventName.startsWith("touch")) return { passive: true };
|
|
@@ -136,9 +134,14 @@ function getPassiveOptions(eventName) {
|
|
|
136
134
|
function addDelegatedListener(element, eventName, handler, originalHandler, options) {
|
|
137
135
|
const container = getDelegationContainer();
|
|
138
136
|
if (!container) return;
|
|
139
|
-
incDevCounter("listenerAdds");
|
|
140
137
|
attachDelegatedListener(container, element, eventName, handler, originalHandler, options);
|
|
141
138
|
}
|
|
139
|
+
/** @internal Attach a delegated handler to a newly cloned element. */
|
|
140
|
+
function addFreshDelegatedListener(element, eventName, handler, originalHandler, options) {
|
|
141
|
+
const container = getDelegationContainer();
|
|
142
|
+
if (!container) return;
|
|
143
|
+
attachDelegatedListener(container, element, eventName, handler, originalHandler, options, true);
|
|
144
|
+
}
|
|
142
145
|
function updateDelegatedListener(element, eventName, handler, originalHandler, options) {
|
|
143
146
|
const existing = getDelegatedHandlerForElement(element, eventName);
|
|
144
147
|
if (!existing) return false;
|
|
@@ -153,52 +156,46 @@ function updateDelegatedListener(element, eventName, handler, originalHandler, o
|
|
|
153
156
|
return true;
|
|
154
157
|
}
|
|
155
158
|
function removeDelegatedListener(element, eventName) {
|
|
156
|
-
const existing =
|
|
159
|
+
const existing = getDelegatedHandlerStore(element);
|
|
157
160
|
if (!existing) return;
|
|
158
161
|
if (existing instanceof Map) {
|
|
159
|
-
if (existing.has(eventName))
|
|
160
|
-
incDevCounter("listenerRemoves");
|
|
161
|
-
decrementContainerListenerUsage(existing.get(eventName));
|
|
162
|
-
}
|
|
162
|
+
if (existing.has(eventName)) decrementContainerListenerUsage(existing.get(eventName));
|
|
163
163
|
existing.delete(eventName);
|
|
164
164
|
if (existing.size === 0) {
|
|
165
|
-
|
|
165
|
+
deleteDelegatedHandlerStore(element);
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
if (existing.size === 1) {
|
|
169
169
|
const only = existing.values().next().value;
|
|
170
|
-
|
|
170
|
+
setDelegatedHandlerStore(element, only);
|
|
171
171
|
}
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
if (existing.eventName === eventName) {
|
|
175
|
-
incDevCounter("listenerRemoves");
|
|
176
175
|
decrementContainerListenerUsage(existing);
|
|
177
|
-
|
|
176
|
+
deleteDelegatedHandlerStore(element);
|
|
178
177
|
}
|
|
179
178
|
}
|
|
180
179
|
function getDelegatedHandlerForElement(element, eventName) {
|
|
181
|
-
const store =
|
|
180
|
+
const store = getDelegatedHandlerStore(element);
|
|
182
181
|
if (!store) return void 0;
|
|
183
182
|
if (store instanceof Map) return store.get(eventName);
|
|
184
183
|
return store.eventName === eventName ? store : void 0;
|
|
185
184
|
}
|
|
186
185
|
function getDelegatedHandlersForElement(element) {
|
|
187
|
-
const store =
|
|
186
|
+
const store = getDelegatedHandlerStore(element);
|
|
188
187
|
if (!store) return void 0;
|
|
189
188
|
if (store instanceof Map) return store;
|
|
190
189
|
return /* @__PURE__ */ new Map([[store.eventName, store]]);
|
|
191
190
|
}
|
|
192
191
|
function clearDelegatedHandlersForElement(element) {
|
|
193
|
-
const existing =
|
|
192
|
+
const existing = getDelegatedHandlerStore(element);
|
|
194
193
|
if (existing instanceof Map) for (const entry of existing.values()) decrementContainerListenerUsage(entry);
|
|
195
194
|
else if (existing) decrementContainerListenerUsage(existing);
|
|
196
|
-
|
|
195
|
+
deleteDelegatedHandlerStore(element);
|
|
197
196
|
}
|
|
198
197
|
function isDelegatedEvent(eventName) {
|
|
199
198
|
return DELEGATED_EVENTS.includes(eventName);
|
|
200
199
|
}
|
|
201
200
|
//#endregion
|
|
202
|
-
export { addDelegatedListener, clearDelegatedHandlersForElement, getDelegatedHandlerForElement, getDelegatedHandlersForElement, isDelegatedEvent, isEventDelegationEnabled, removeDelegatedListener, updateDelegatedListener };
|
|
203
|
-
|
|
204
|
-
//# sourceMappingURL=events.js.map
|
|
201
|
+
export { addDelegatedListener, addFreshDelegatedListener, clearDelegatedHandlersForElement, getDelegatedHandlerForElement, getDelegatedHandlersForElement, isDelegatedEvent, isEventDelegationEnabled, removeDelegatedListener, updateDelegatedListener };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/runtime/execution-model.d.ts
|
|
2
|
+
type ExecutionModel = 'spa' | 'islands' | 'ssr';
|
|
3
|
+
declare function getExecutionModel(): ExecutionModel | undefined;
|
|
4
|
+
declare function assertExecutionModel(model: ExecutionModel): void;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { ExecutionModel };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ComponentInstance } from "./component-internal.js";
|
|
2
|
+
//#region src/runtime/fastlane.d.ts
|
|
3
|
+
declare function enterBulkCommit(): void;
|
|
4
|
+
declare function exitBulkCommit(): void;
|
|
5
|
+
declare function isBulkCommitActive(): boolean;
|
|
6
|
+
declare function markFastPathApplied(parent: Element): void;
|
|
7
|
+
declare function isFastPathApplied(parent: Element): boolean;
|
|
8
|
+
declare function classifyUpdate(instance: ComponentInstance, result: unknown): {
|
|
9
|
+
useFastPath: boolean;
|
|
10
|
+
reason: string;
|
|
11
|
+
} | {
|
|
12
|
+
useFastPath: boolean;
|
|
13
|
+
reason: string;
|
|
14
|
+
totalKeyed: number;
|
|
15
|
+
totalChildren: number;
|
|
16
|
+
currentKeyCount: number;
|
|
17
|
+
moveCount: number;
|
|
18
|
+
lisLen: number;
|
|
19
|
+
hasPropChanges: boolean;
|
|
20
|
+
isWholeKeyedList: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
readonly useFastPath: true;
|
|
23
|
+
readonly totalKeyed: number;
|
|
24
|
+
readonly totalChildren: number;
|
|
25
|
+
readonly currentKeyCount: number;
|
|
26
|
+
readonly moveCount: number;
|
|
27
|
+
readonly lisLen: number;
|
|
28
|
+
readonly hasPropChanges: boolean;
|
|
29
|
+
readonly isWholeKeyedList: boolean;
|
|
30
|
+
reason?: undefined;
|
|
31
|
+
};
|
|
32
|
+
declare function commitReorderOnly(instance: ComponentInstance, result: unknown): boolean;
|
|
33
|
+
declare function tryRuntimeFastLaneSync(instance: ComponentInstance, result: unknown): boolean;
|