@askrjs/askr 0.0.51 → 0.0.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +190 -20
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.js +103 -0
- package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -3
- package/dist/benchmark.d.ts +7 -4
- package/dist/benchmark.js +63 -13
- package/dist/boot/index.d.ts +62 -4
- package/dist/boot/index.js +1 -194
- package/dist/boot-j2KoN6ss.js +647 -0
- package/dist/cleanup-COv77su2.js +487 -0
- package/dist/component-internal-B3z7GXlD.js +614 -0
- package/dist/component-lifecycle-CO4hXlP4.js +357 -0
- package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +35 -9
- package/dist/component-scope-CvPba6O6.d.ts +12 -0
- package/dist/components/index.d.ts +17 -2
- package/dist/components/index.js +39 -1
- package/dist/compose-ref-Cc_YkUpM.js +92 -0
- package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -2
- package/dist/control/index.d.ts +1 -3
- package/dist/control/index.js +1 -3
- package/dist/control-BQvNVfAd.d.ts +436 -0
- package/dist/control-BYyLTFyw.js +165 -0
- package/dist/control-Bf4Wkdvv.d.ts +9 -0
- package/dist/{common/control.js → control-DhFRTIoE.js} +1 -3
- package/dist/data/index.d.ts +2 -6
- package/dist/data/index.js +4 -5
- package/dist/data-DnxnDxD-.js +559 -0
- package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +35 -36
- package/dist/deferred-lKE8uR0z.js +386 -0
- package/dist/effect-BwnIvLah.js +260 -0
- package/dist/fastlane-Dw8SOBr9.js +343 -0
- package/dist/for-internal-BKf_Tnv1.js +1563 -0
- package/dist/foundations/icon/index.d.ts +68 -2
- package/dist/foundations/icon/index.js +85 -1
- package/dist/foundations/index.d.ts +2 -5
- package/dist/foundations/index.js +2 -5
- package/dist/foundations/interactions/index.d.ts +264 -6
- package/dist/foundations/interactions/index.js +1 -6
- package/dist/foundations/state/index.d.ts +32 -1
- package/dist/foundations/state/index.js +78 -1
- package/dist/foundations/structures/index.d.ts +2 -7
- package/dist/foundations/structures/index.js +2 -7
- package/dist/foundations/utilities/index.d.ts +2 -6
- package/dist/foundations/utilities/index.js +2 -5
- package/dist/fx/index.d.ts +190 -3
- package/dist/fx/index.js +454 -4
- package/dist/index-31Uoz_NS.d.ts +239 -0
- package/dist/index-Bki2rqcr.d.ts +233 -0
- package/dist/index-BnU0NPwM.d.ts +101 -0
- package/dist/index-D73jgYx1.d.ts +48 -0
- package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -9
- package/dist/index-SJXJkssx.d.ts +44 -0
- package/dist/index.d.ts +8 -13
- package/dist/index.js +150 -17
- package/dist/interactions-w7gQN4ha.js +280 -0
- package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -3
- package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -6
- package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -3
- package/dist/jsx-dev-runtime.d.ts +17 -5
- package/dist/jsx-dev-runtime.js +3 -10
- package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
- package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
- package/dist/jsx-runtime.d.ts +3 -22
- package/dist/jsx-runtime.js +17 -20
- package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +9 -11
- package/dist/navigate-BVDCzOuB.d.ts +34 -0
- package/dist/navigate-CmPLSXyw.js +1449 -0
- package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +124 -35
- package/dist/query-registry-CQIT4mXr.js +73 -0
- package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -8
- package/dist/renderer-DzPjeLby.js +6197 -0
- package/dist/resource-operation-CEzfpnDk.js +276 -0
- package/dist/resources/index.d.ts +42 -3
- package/dist/resources/index.js +3 -4
- package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -3
- package/dist/route-matching-vJpvLVbX.js +515 -0
- package/dist/router/index.d.ts +166 -14
- package/dist/router/index.js +150 -12
- package/dist/{common/router.d.ts → router-CeYvjj5_.d.ts} +72 -29
- package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -3
- package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -4
- package/dist/{runtime/selector.js → selector-DafVYzV4.js} +35 -20
- package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -3
- package/dist/ssg/index.d.ts +252 -4
- package/dist/ssg/index.js +857 -1
- package/dist/ssr/index.d.ts +225 -8
- package/dist/ssr/index.js +3 -6
- package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -3
- package/dist/ssr-D3t80Rc0.js +1413 -0
- package/dist/{runtime/state.js → state-DPl8lffD.js} +4 -8
- package/dist/structures-DUB3HchX.js +221 -0
- package/dist/testing/index.d.ts +4 -4
- package/dist/testing/index.js +2 -7
- package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -6
- package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -3
- package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -4
- package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -4
- package/package.json +63 -45
- package/dist/bench/components/benchmark-row.d.ts +0 -20
- package/dist/bench/components/benchmark-row.d.ts.map +0 -1
- package/dist/bench/components/benchmark-row.js +0 -42
- package/dist/bench/components/benchmark-row.js.map +0 -1
- package/dist/bench/components/benchmark-table.js +0 -25
- 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 +0 -28
- package/dist/bin/askr-ssg.d.ts.map +0 -1
- package/dist/bin/askr-ssg.js +0 -171
- package/dist/bin/askr-ssg.js.map +0 -1
- package/dist/boot/hydration.js +0 -140
- 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 +0 -15
- package/dist/boot/root-lifecycle.d.ts.map +0 -1
- package/dist/boot/root-lifecycle.js +0 -205
- package/dist/boot/root-lifecycle.js.map +0 -1
- package/dist/boot/route-startup.js +0 -45
- package/dist/boot/route-startup.js.map +0 -1
- package/dist/boot/types.d.ts +0 -62
- package/dist/boot/types.d.ts.map +0 -1
- package/dist/common/attr-names.js.map +0 -1
- package/dist/common/component.d.ts +0 -19
- package/dist/common/component.d.ts.map +0 -1
- package/dist/common/control.d.ts +0 -13
- package/dist/common/control.d.ts.map +0 -1
- package/dist/common/control.js.map +0 -1
- package/dist/common/env.js +0 -47
- package/dist/common/env.js.map +0 -1
- package/dist/common/error-boundary.d.ts +0 -16
- package/dist/common/error-boundary.d.ts.map +0 -1
- package/dist/common/invariant.js +0 -17
- package/dist/common/invariant.js.map +0 -1
- package/dist/common/jsx.d.ts +0 -23
- package/dist/common/jsx.d.ts.map +0 -1
- package/dist/common/jsx.js.map +0 -1
- package/dist/common/logger.js +0 -36
- package/dist/common/logger.js.map +0 -1
- package/dist/common/promise.js +0 -8
- 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 +0 -11
- package/dist/common/ssr-errors.d.ts.map +0 -1
- package/dist/common/ssr-errors.js +0 -16
- package/dist/common/ssr-errors.js.map +0 -1
- package/dist/common/ssr.d.ts +0 -42
- package/dist/common/ssr.d.ts.map +0 -1
- package/dist/common/ssr.js.map +0 -1
- package/dist/common/vnode.d.ts +0 -22
- package/dist/common/vnode.d.ts.map +0 -1
- package/dist/common/vnode.js.map +0 -1
- package/dist/components/error-boundary.d.ts +0 -15
- package/dist/components/error-boundary.d.ts.map +0 -1
- package/dist/components/error-boundary.js +0 -43
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/link.d.ts +0 -68
- package/dist/components/link.d.ts.map +0 -1
- package/dist/components/link.js +0 -76
- package/dist/components/link.js.map +0 -1
- package/dist/control/case.d.ts +0 -19
- package/dist/control/case.d.ts.map +0 -1
- package/dist/control/case.js +0 -70
- package/dist/control/case.js.map +0 -1
- package/dist/control/for.d.ts +0 -24
- package/dist/control/for.d.ts.map +0 -1
- package/dist/control/for.js +0 -63
- package/dist/control/for.js.map +0 -1
- package/dist/control/shared.d.ts +0 -9
- package/dist/control/shared.d.ts.map +0 -1
- package/dist/control/shared.js +0 -20
- package/dist/control/shared.js.map +0 -1
- package/dist/control/show.d.ts +0 -15
- package/dist/control/show.d.ts.map +0 -1
- package/dist/control/show.js +0 -34
- package/dist/control/show.js.map +0 -1
- package/dist/data/data-runtime.d.ts +0 -28
- 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 +0 -9
- package/dist/data/invalidation.d.ts.map +0 -1
- package/dist/data/invalidation.js +0 -27
- package/dist/data/invalidation.js.map +0 -1
- package/dist/data/mutation-cell.d.ts +0 -28
- package/dist/data/mutation-cell.d.ts.map +0 -1
- package/dist/data/mutation-cell.js +0 -132
- package/dist/data/mutation-cell.js.map +0 -1
- package/dist/data/query-cell.d.ts +0 -46
- package/dist/data/query-cell.d.ts.map +0 -1
- package/dist/data/query-cell.js +0 -290
- package/dist/data/query-cell.js.map +0 -1
- package/dist/data/query-key.js +0 -42
- package/dist/data/query-key.js.map +0 -1
- package/dist/data/shared.js +0 -21
- package/dist/data/shared.js.map +0 -1
- package/dist/data/testing.js +0 -2
- package/dist/data/types.d.ts +0 -161
- package/dist/data/types.d.ts.map +0 -1
- package/dist/foundations/icon/icon.d.ts +0 -53
- package/dist/foundations/icon/icon.d.ts.map +0 -1
- package/dist/foundations/icon/icon.js +0 -88
- package/dist/foundations/icon/icon.js.map +0 -1
- package/dist/foundations/icon/icon.types.d.ts +0 -22
- package/dist/foundations/icon/icon.types.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.d.ts +0 -72
- package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
- package/dist/foundations/interactions/dismissable.js +0 -26
- package/dist/foundations/interactions/dismissable.js.map +0 -1
- package/dist/foundations/interactions/focusable.d.ts +0 -22
- package/dist/foundations/interactions/focusable.d.ts.map +0 -1
- package/dist/foundations/interactions/focusable.js +0 -18
- package/dist/foundations/interactions/focusable.js.map +0 -1
- package/dist/foundations/interactions/hoverable.d.ts +0 -26
- package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
- package/dist/foundations/interactions/hoverable.js +0 -15
- package/dist/foundations/interactions/hoverable.js.map +0 -1
- package/dist/foundations/interactions/interaction-policy.d.ts +0 -50
- package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
- package/dist/foundations/interactions/interaction-policy.js +0 -122
- package/dist/foundations/interactions/interaction-policy.js.map +0 -1
- package/dist/foundations/interactions/pressable.d.ts +0 -61
- package/dist/foundations/interactions/pressable.d.ts.map +0 -1
- package/dist/foundations/interactions/pressable.js +0 -51
- package/dist/foundations/interactions/pressable.js.map +0 -1
- package/dist/foundations/interactions/roving-focus.d.ts +0 -52
- package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
- package/dist/foundations/interactions/roving-focus.js +0 -71
- package/dist/foundations/interactions/roving-focus.js.map +0 -1
- package/dist/foundations/state/controllable.d.ts +0 -33
- package/dist/foundations/state/controllable.d.ts.map +0 -1
- package/dist/foundations/state/controllable.js +0 -82
- package/dist/foundations/state/controllable.js.map +0 -1
- package/dist/foundations/structures/collection.d.ts +0 -52
- package/dist/foundations/structures/collection.d.ts.map +0 -1
- package/dist/foundations/structures/collection.js +0 -51
- package/dist/foundations/structures/collection.js.map +0 -1
- package/dist/foundations/structures/layer.d.ts +0 -81
- package/dist/foundations/structures/layer.d.ts.map +0 -1
- package/dist/foundations/structures/layer.js +0 -81
- package/dist/foundations/structures/layer.js.map +0 -1
- package/dist/foundations/structures/layout.d.ts +0 -33
- package/dist/foundations/structures/layout.d.ts.map +0 -1
- package/dist/foundations/structures/layout.js +0 -13
- package/dist/foundations/structures/layout.js.map +0 -1
- package/dist/foundations/structures/portal.d.ts +0 -2
- package/dist/foundations/structures/portal.js +0 -3
- package/dist/foundations/structures/presence.d.ts +0 -37
- package/dist/foundations/structures/presence.d.ts.map +0 -1
- package/dist/foundations/structures/presence.js +0 -39
- package/dist/foundations/structures/presence.js.map +0 -1
- package/dist/foundations/structures/slot.d.ts +0 -35
- package/dist/foundations/structures/slot.d.ts.map +0 -1
- package/dist/foundations/structures/slot.js +0 -41
- package/dist/foundations/structures/slot.js.map +0 -1
- package/dist/foundations/utilities/aria.d.ts +0 -16
- package/dist/foundations/utilities/aria.d.ts.map +0 -1
- package/dist/foundations/utilities/aria.js +0 -17
- package/dist/foundations/utilities/aria.js.map +0 -1
- package/dist/foundations/utilities/compose-handlers.d.ts +0 -37
- package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
- package/dist/foundations/utilities/compose-handlers.js +0 -20
- 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 +0 -18
- package/dist/foundations/utilities/compose-ref.js.map +0 -1
- package/dist/foundations/utilities/event-types.d.ts +0 -20
- package/dist/foundations/utilities/event-types.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.d.ts +0 -5
- package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
- package/dist/foundations/utilities/merge-props.js +0 -49
- package/dist/foundations/utilities/merge-props.js.map +0 -1
- package/dist/foundations/utilities/use-id.d.ts +0 -32
- 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 +0 -33
- package/dist/fx/fx.d.ts.map +0 -1
- package/dist/fx/fx.js +0 -213
- package/dist/fx/fx.js.map +0 -1
- package/dist/fx/noop.js +0 -9
- package/dist/fx/noop.js.map +0 -1
- package/dist/fx/timing.d.ts +0 -159
- package/dist/fx/timing.d.ts.map +0 -1
- package/dist/fx/timing.js +0 -243
- package/dist/fx/timing.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsx/index.d.ts +0 -2
- package/dist/jsx/index.js +0 -4
- package/dist/jsx/types.d.ts.map +0 -1
- package/dist/jsx/types.js +0 -2
- package/dist/jsx/utils.d.ts +0 -5
- package/dist/jsx/utils.d.ts.map +0 -1
- package/dist/jsx/utils.js +0 -19
- 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/jsx-runtime2.d.ts +0 -3
- package/dist/jsx-runtime2.js +0 -4
- package/dist/renderer/attributes.js +0 -232
- package/dist/renderer/attributes.js.map +0 -1
- package/dist/renderer/boundaries.js +0 -266
- package/dist/renderer/boundaries.js.map +0 -1
- package/dist/renderer/child-shape.js +0 -85
- package/dist/renderer/child-shape.js.map +0 -1
- package/dist/renderer/children-fastpath.js +0 -149
- package/dist/renderer/children-fastpath.js.map +0 -1
- package/dist/renderer/children.js +0 -160
- package/dist/renderer/children.js.map +0 -1
- package/dist/renderer/cleanup.js +0 -210
- package/dist/renderer/cleanup.js.map +0 -1
- package/dist/renderer/component-host-cleanup.js +0 -68
- package/dist/renderer/component-host-cleanup.js.map +0 -1
- package/dist/renderer/component-host-instances.js +0 -65
- package/dist/renderer/component-host-instances.js.map +0 -1
- package/dist/renderer/component-host.js +0 -247
- package/dist/renderer/component-host.js.map +0 -1
- package/dist/renderer/dom-host.js +0 -13
- package/dist/renderer/dom-host.js.map +0 -1
- package/dist/renderer/dom-internal.js +0 -186
- package/dist/renderer/dom-internal.js.map +0 -1
- package/dist/renderer/dom.js +0 -10
- package/dist/renderer/element-children.js +0 -279
- package/dist/renderer/element-children.js.map +0 -1
- package/dist/renderer/env.js +0 -2
- package/dist/renderer/error-boundary-dom.js +0 -78
- package/dist/renderer/error-boundary-dom.js.map +0 -1
- package/dist/renderer/evaluate-dom-range.js +0 -85
- package/dist/renderer/evaluate-dom-range.js.map +0 -1
- package/dist/renderer/evaluate-reconcile.js +0 -282
- package/dist/renderer/evaluate-reconcile.js.map +0 -1
- package/dist/renderer/evaluate.js +0 -84
- package/dist/renderer/evaluate.js.map +0 -1
- package/dist/renderer/fastpath.js +0 -150
- package/dist/renderer/fastpath.js.map +0 -1
- package/dist/renderer/for-commit-dom-map.js +0 -83
- package/dist/renderer/for-commit-dom-map.js.map +0 -1
- package/dist/renderer/for-commit-removal.js +0 -36
- package/dist/renderer/for-commit-removal.js.map +0 -1
- package/dist/renderer/for-commit-reorder.js +0 -89
- package/dist/renderer/for-commit-reorder.js.map +0 -1
- package/dist/renderer/for-commit.js +0 -314
- package/dist/renderer/for-commit.js.map +0 -1
- package/dist/renderer/index.js +0 -38
- package/dist/renderer/index.js.map +0 -1
- package/dist/renderer/keyed-children.js +0 -32
- package/dist/renderer/keyed-children.js.map +0 -1
- package/dist/renderer/keyed.js +0 -167
- package/dist/renderer/keyed.js.map +0 -1
- package/dist/renderer/namespaces.js +0 -23
- package/dist/renderer/namespaces.js.map +0 -1
- package/dist/renderer/prop-bindings.js +0 -280
- package/dist/renderer/prop-bindings.js.map +0 -1
- package/dist/renderer/reactive-child-dom.js +0 -133
- package/dist/renderer/reactive-child-dom.js.map +0 -1
- package/dist/renderer/reactive-child-sources.js +0 -184
- package/dist/renderer/reactive-child-sources.js.map +0 -1
- package/dist/renderer/reactive-children.js +0 -294
- package/dist/renderer/reactive-children.js.map +0 -1
- package/dist/renderer/reconcile-commit.js +0 -38
- package/dist/renderer/reconcile-commit.js.map +0 -1
- package/dist/renderer/reconcile-fastpaths.js +0 -107
- package/dist/renderer/reconcile-fastpaths.js.map +0 -1
- package/dist/renderer/reconcile-resolution.js +0 -187
- package/dist/renderer/reconcile-resolution.js.map +0 -1
- package/dist/renderer/reconcile.js +0 -39
- package/dist/renderer/reconcile.js.map +0 -1
- package/dist/renderer/retained-element-rollback.js +0 -277
- package/dist/renderer/retained-element-rollback.js.map +0 -1
- package/dist/renderer/stable-patch.js +0 -81
- package/dist/renderer/stable-patch.js.map +0 -1
- package/dist/renderer/static-reuse.js +0 -96
- package/dist/renderer/static-reuse.js.map +0 -1
- package/dist/renderer/types.js +0 -2
- package/dist/renderer/utils.js +0 -256
- package/dist/renderer/utils.js.map +0 -1
- package/dist/router/access.js +0 -36
- package/dist/router/access.js.map +0 -1
- package/dist/router/activity.d.ts +0 -10
- package/dist/router/activity.d.ts.map +0 -1
- package/dist/router/activity.js +0 -87
- package/dist/router/activity.js.map +0 -1
- package/dist/router/authoring.d.ts +0 -22
- package/dist/router/authoring.d.ts.map +0 -1
- package/dist/router/authoring.js +0 -198
- package/dist/router/authoring.js.map +0 -1
- package/dist/router/internal-types.d.ts +0 -31
- package/dist/router/internal-types.d.ts.map +0 -1
- package/dist/router/lazy.d.ts +0 -19
- package/dist/router/lazy.d.ts.map +0 -1
- package/dist/router/lazy.js +0 -52
- package/dist/router/lazy.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -10
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -49
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match.js +0 -122
- package/dist/router/match.js.map +0 -1
- package/dist/router/navigate.d.ts +0 -11
- package/dist/router/navigate.d.ts.map +0 -1
- package/dist/router/navigate.js +0 -76
- package/dist/router/navigate.js.map +0 -1
- package/dist/router/navigation-registry.d.ts +0 -32
- package/dist/router/navigation-registry.d.ts.map +0 -1
- package/dist/router/navigation-registry.js +0 -105
- package/dist/router/navigation-registry.js.map +0 -1
- package/dist/router/navigation-scroll.d.ts +0 -14
- package/dist/router/navigation-scroll.d.ts.map +0 -1
- package/dist/router/navigation-scroll.js +0 -93
- package/dist/router/navigation-scroll.js.map +0 -1
- package/dist/router/navigation-targets.d.ts +0 -31
- package/dist/router/navigation-targets.d.ts.map +0 -1
- package/dist/router/navigation-targets.js +0 -255
- package/dist/router/navigation-targets.js.map +0 -1
- package/dist/router/policy.d.ts +0 -28
- package/dist/router/policy.d.ts.map +0 -1
- package/dist/router/policy.js +0 -132
- package/dist/router/policy.js.map +0 -1
- package/dist/router/rendering.d.ts +0 -10
- package/dist/router/rendering.d.ts.map +0 -1
- package/dist/router/rendering.js +0 -46
- package/dist/router/rendering.js.map +0 -1
- package/dist/router/resolution.d.ts +0 -4
- package/dist/router/resolution.d.ts.map +0 -1
- package/dist/router/resolution.js +0 -86
- package/dist/router/resolution.js.map +0 -1
- package/dist/router/route-context.js +0 -79
- package/dist/router/route-context.js.map +0 -1
- package/dist/router/route-matching.d.ts +0 -20
- package/dist/router/route-matching.d.ts.map +0 -1
- package/dist/router/route-matching.js +0 -175
- package/dist/router/route-matching.js.map +0 -1
- package/dist/router/route-query.d.ts +0 -17
- package/dist/router/route-query.d.ts.map +0 -1
- package/dist/router/route-query.js +0 -47
- package/dist/router/route-query.js.map +0 -1
- package/dist/router/route.d.ts +0 -8
- package/dist/router/route.js +0 -10
- package/dist/router/store.d.ts +0 -50
- package/dist/router/store.d.ts.map +0 -1
- package/dist/router/store.js +0 -171
- package/dist/router/store.js.map +0 -1
- package/dist/router/testing.js +0 -4
- package/dist/runtime/access.d.ts +0 -20
- package/dist/runtime/access.d.ts.map +0 -1
- package/dist/runtime/access.js +0 -45
- package/dist/runtime/access.js.map +0 -1
- package/dist/runtime/child-scope.d.ts +0 -22
- package/dist/runtime/child-scope.d.ts.map +0 -1
- package/dist/runtime/child-scope.js +0 -87
- package/dist/runtime/child-scope.js.map +0 -1
- package/dist/runtime/component-cleanup.d.ts +0 -16
- package/dist/runtime/component-cleanup.d.ts.map +0 -1
- package/dist/runtime/component-cleanup.js +0 -70
- package/dist/runtime/component-cleanup.js.map +0 -1
- package/dist/runtime/component-commit.js +0 -165
- package/dist/runtime/component-commit.js.map +0 -1
- package/dist/runtime/component-facade.d.ts +0 -5
- package/dist/runtime/component-facade.js +0 -4
- package/dist/runtime/component-internal.d.ts +0 -100
- package/dist/runtime/component-internal.d.ts.map +0 -1
- package/dist/runtime/component-internal.js +0 -219
- package/dist/runtime/component-internal.js.map +0 -1
- package/dist/runtime/component-lifecycle.d.ts +0 -49
- package/dist/runtime/component-lifecycle.d.ts.map +0 -1
- package/dist/runtime/component-lifecycle.js +0 -176
- package/dist/runtime/component-lifecycle.js.map +0 -1
- package/dist/runtime/component-scope.d.ts +0 -55
- package/dist/runtime/component-scope.d.ts.map +0 -1
- package/dist/runtime/component-scope.js.map +0 -1
- package/dist/runtime/component.d.ts +0 -5
- package/dist/runtime/component.js +0 -5
- package/dist/runtime/context.d.ts +0 -69
- package/dist/runtime/context.d.ts.map +0 -1
- package/dist/runtime/context.js +0 -210
- package/dist/runtime/context.js.map +0 -1
- package/dist/runtime/control.d.ts +0 -43
- package/dist/runtime/control.d.ts.map +0 -1
- package/dist/runtime/control.js +0 -126
- package/dist/runtime/control.js.map +0 -1
- package/dist/runtime/derive.d.ts +0 -17
- package/dist/runtime/derive.d.ts.map +0 -1
- package/dist/runtime/derive.js +0 -142
- package/dist/runtime/derive.js.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/dev-namespace.js +0 -57
- package/dist/runtime/dev-namespace.js.map +0 -1
- package/dist/runtime/effect.d.ts +0 -32
- package/dist/runtime/effect.d.ts.map +0 -1
- package/dist/runtime/effect.js +0 -177
- package/dist/runtime/effect.js.map +0 -1
- package/dist/runtime/error-boundary.d.ts +0 -5
- package/dist/runtime/error-boundary.d.ts.map +0 -1
- package/dist/runtime/error-boundary.js +0 -31
- package/dist/runtime/error-boundary.js.map +0 -1
- package/dist/runtime/events.d.ts +0 -58
- package/dist/runtime/events.d.ts.map +0 -1
- package/dist/runtime/events.js +0 -204
- package/dist/runtime/events.js.map +0 -1
- package/dist/runtime/execution-model.d.ts +0 -7
- package/dist/runtime/execution-model.d.ts.map +0 -1
- package/dist/runtime/execution-model.js +0 -15
- package/dist/runtime/execution-model.js.map +0 -1
- package/dist/runtime/fastlane.d.ts +0 -34
- package/dist/runtime/fastlane.d.ts.map +0 -1
- package/dist/runtime/fastlane.js +0 -175
- package/dist/runtime/fastlane.js.map +0 -1
- package/dist/runtime/for-bench.d.ts +0 -41
- package/dist/runtime/for-bench.d.ts.map +0 -1
- package/dist/runtime/for-bench.js +0 -171
- package/dist/runtime/for-bench.js.map +0 -1
- package/dist/runtime/for-internal.d.ts +0 -43
- package/dist/runtime/for-internal.d.ts.map +0 -1
- package/dist/runtime/for-internal.js +0 -98
- package/dist/runtime/for-internal.js.map +0 -1
- package/dist/runtime/for-reconcile.d.ts +0 -8
- package/dist/runtime/for-reconcile.d.ts.map +0 -1
- package/dist/runtime/for-reconcile.js +0 -389
- package/dist/runtime/for-reconcile.js.map +0 -1
- package/dist/runtime/for-scopes.d.ts +0 -26
- package/dist/runtime/for-scopes.d.ts.map +0 -1
- package/dist/runtime/for-scopes.js +0 -160
- package/dist/runtime/for-scopes.js.map +0 -1
- package/dist/runtime/for-signals.d.ts +0 -30
- package/dist/runtime/for-signals.d.ts.map +0 -1
- package/dist/runtime/for-signals.js +0 -139
- package/dist/runtime/for-signals.js.map +0 -1
- package/dist/runtime/for-types.d.ts +0 -9
- package/dist/runtime/for-types.d.ts.map +0 -1
- package/dist/runtime/for.d.ts +0 -4
- package/dist/runtime/for.js +0 -5
- package/dist/runtime/index.d.ts +0 -24
- package/dist/runtime/index.js +0 -31
- package/dist/runtime/lifecycle-operations.d.ts +0 -31
- package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
- package/dist/runtime/lifecycle-operations.js.map +0 -1
- package/dist/runtime/operations.d.ts +0 -3
- package/dist/runtime/operations.js +0 -3
- package/dist/runtime/perf-metrics.d.ts +0 -26
- package/dist/runtime/perf-metrics.d.ts.map +0 -1
- package/dist/runtime/perf-metrics.js +0 -70
- package/dist/runtime/perf-metrics.js.map +0 -1
- package/dist/runtime/portal.d.ts +0 -22
- package/dist/runtime/portal.d.ts.map +0 -1
- package/dist/runtime/portal.js.map +0 -1
- package/dist/runtime/readable.d.ts +0 -29
- package/dist/runtime/readable.d.ts.map +0 -1
- package/dist/runtime/readable.js +0 -159
- package/dist/runtime/readable.js.map +0 -1
- package/dist/runtime/resource-cell.js +0 -114
- package/dist/runtime/resource-cell.js.map +0 -1
- package/dist/runtime/resource-operation.d.ts +0 -13
- package/dist/runtime/resource-operation.d.ts.map +0 -1
- package/dist/runtime/resource-operation.js +0 -170
- package/dist/runtime/resource-operation.js.map +0 -1
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js +0 -59
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/runtime/scheduler.d.ts.map +0 -1
- package/dist/runtime/scheduler.js.map +0 -1
- package/dist/runtime/selector-store.js +0 -24
- package/dist/runtime/selector-store.js.map +0 -1
- package/dist/runtime/selector.d.ts +0 -11
- package/dist/runtime/selector.d.ts.map +0 -1
- package/dist/runtime/selector.js.map +0 -1
- package/dist/runtime/snapshot-source.d.ts +0 -10
- 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 +0 -55
- package/dist/runtime/state.d.ts.map +0 -1
- package/dist/runtime/state.js.map +0 -1
- package/dist/ssg/batch-render.js +0 -103
- package/dist/ssg/batch-render.js.map +0 -1
- package/dist/ssg/create-static-gen.d.ts +0 -64
- package/dist/ssg/create-static-gen.d.ts.map +0 -1
- package/dist/ssg/create-static-gen.js +0 -199
- package/dist/ssg/create-static-gen.js.map +0 -1
- package/dist/ssg/generate-metadata.js +0 -94
- package/dist/ssg/generate-metadata.js.map +0 -1
- package/dist/ssg/generation-plan.js +0 -70
- package/dist/ssg/generation-plan.js.map +0 -1
- package/dist/ssg/incremental-manifest.js +0 -56
- package/dist/ssg/incremental-manifest.js.map +0 -1
- package/dist/ssg/resolve-ssg-data.js +0 -105
- package/dist/ssg/resolve-ssg-data.js.map +0 -1
- package/dist/ssg/route-utils.js +0 -24
- package/dist/ssg/route-utils.js.map +0 -1
- package/dist/ssg/static-routes.js +0 -102
- package/dist/ssg/static-routes.js.map +0 -1
- package/dist/ssg/types.d.ts +0 -189
- package/dist/ssg/types.d.ts.map +0 -1
- package/dist/ssg/write-static-files.js +0 -73
- package/dist/ssg/write-static-files.js.map +0 -1
- package/dist/ssr/attrs.js +0 -94
- package/dist/ssr/attrs.js.map +0 -1
- package/dist/ssr/boundaries.js +0 -113
- package/dist/ssr/boundaries.js.map +0 -1
- package/dist/ssr/component-runtime.js +0 -111
- package/dist/ssr/component-runtime.js.map +0 -1
- package/dist/ssr/context.d.ts +0 -50
- package/dist/ssr/context.d.ts.map +0 -1
- package/dist/ssr/context.js +0 -91
- package/dist/ssr/context.js.map +0 -1
- package/dist/ssr/errors.d.ts +0 -10
- package/dist/ssr/errors.d.ts.map +0 -1
- package/dist/ssr/errors.js +0 -14
- package/dist/ssr/errors.js.map +0 -1
- package/dist/ssr/escape.js +0 -193
- package/dist/ssr/escape.js.map +0 -1
- package/dist/ssr/hydration-data.js +0 -10
- package/dist/ssr/hydration-data.js.map +0 -1
- package/dist/ssr/hydration-verify.d.ts +0 -12
- package/dist/ssr/hydration-verify.d.ts.map +0 -1
- package/dist/ssr/hydration-verify.js +0 -144
- package/dist/ssr/hydration-verify.js.map +0 -1
- package/dist/ssr/index-internal.d.ts +0 -15
- package/dist/ssr/index-internal.d.ts.map +0 -1
- package/dist/ssr/index-internal.js +0 -19
- package/dist/ssr/index-internal.js.map +0 -1
- package/dist/ssr/render-keys.js +0 -16
- package/dist/ssr/render-keys.js.map +0 -1
- package/dist/ssr/render-resolved.d.ts +0 -20
- package/dist/ssr/render-resolved.d.ts.map +0 -1
- package/dist/ssr/render-resolved.js +0 -35
- package/dist/ssr/render-resolved.js.map +0 -1
- package/dist/ssr/render-sync.d.ts +0 -21
- package/dist/ssr/render-sync.d.ts.map +0 -1
- package/dist/ssr/render-sync.js +0 -275
- package/dist/ssr/render-sync.js.map +0 -1
- package/dist/ssr/route-policy-resolution.js +0 -78
- package/dist/ssr/route-policy-resolution.js.map +0 -1
- package/dist/ssr/route-render.d.ts +0 -77
- package/dist/ssr/route-render.d.ts.map +0 -1
- package/dist/ssr/route-render.js +0 -120
- package/dist/ssr/route-render.js.map +0 -1
- package/dist/ssr/sink.d.ts +0 -26
- package/dist/ssr/sink.d.ts.map +0 -1
- package/dist/ssr/sink.js +0 -86
- package/dist/ssr/sink.js.map +0 -1
- package/dist/ssr/types.d.ts +0 -23
- package/dist/ssr/types.d.ts.map +0 -1
- package/dist/ssr/verify-hydration.js.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactive-children.js","names":[],"sources":["../../src/renderer/reactive-children.ts"],"sourcesContent":["import { logger } from '../common/logger';\nimport {\n createChildScope,\n disposeChildScope,\n rerenderChildScope,\n type ChildScope,\n} from '../runtime';\nimport { getCurrentInstance } from '../runtime';\nimport { incDevCounter } from '../runtime';\nimport {\n createFineGrainedEffect,\n type FineGrainedEffectHandle,\n} from '../runtime';\nimport {\n elementReactivePropsCleanup,\n REACTIVE_CHILDREN_KEY,\n teardownNodeSubtree,\n type ReactivePropCleanupEntry,\n} from './cleanup';\nimport { getRuntimeEnv } from './env';\nimport { getParentNamespace } from './namespaces';\nimport type { VNode } from './types';\nimport {\n commitReactiveChildBoundaryEntryNodes,\n createReactiveChildBoundaryHost,\n disposeReactiveChildBoundaryNodes,\n materializeReactiveChildBoundaryNodes,\n syncReactiveChildExpectedNodes,\n syncReactiveChildSequenceNodes,\n syncReactiveScalarTextNodes,\n type ReactiveChildBoundarySequenceEntry,\n type ReactiveChildDOMHost,\n} from './reactive-child-dom';\nimport {\n areReactiveChildBoundarySequenceSourcesEqual,\n areReactiveScalarChildSourcesEqual,\n canUpdateReactiveChildBoundarySequenceSource,\n collectReactiveChildValuesAsVNodes,\n getReactiveChildBoundarySequenceSource,\n getReactiveScalarChildSource,\n getSingleReactiveChildBoundarySource,\n normalizeOwnedReactiveTextValue,\n normalizeReactiveChildBoundaryVNode,\n normalizeReactiveScalarSequenceValues,\n type ReactiveChildBoundarySequenceSource,\n type ReactiveScalarChildSource,\n} from './reactive-child-sources';\n\nexport type { ReactiveChildDOMHost } from './reactive-child-dom';\n\nlet reactiveChildScopeId = 0;\n\nfunction getOrCreateElementReactiveCleanupMap(\n el: Element\n): Map<string, ReactivePropCleanupEntry> {\n let cleanupMap = elementReactivePropsCleanup.get(el);\n if (!cleanupMap) {\n cleanupMap = new Map();\n elementReactivePropsCleanup.set(el, cleanupMap);\n }\n\n return cleanupMap;\n}\n\nexport function trySyncScalarChildSequenceInPlace(\n el: Element,\n children: unknown[],\n host: ReactiveChildDOMHost\n): boolean {\n const normalized = normalizeReactiveScalarSequenceValues(children);\n if (!normalized) {\n return false;\n }\n\n if (el.childNodes.length !== normalized.length) {\n return false;\n }\n\n for (let index = 0; index < el.childNodes.length; index += 1) {\n if (el.childNodes[index]?.nodeType !== Node.TEXT_NODE) {\n return false;\n }\n }\n\n syncReactiveScalarTextNodes(el, children, normalized, host);\n return true;\n}\n\nfunction setupReactiveScalarChild(\n el: Element,\n source: ReactiveScalarChildSource,\n host: ReactiveChildDOMHost\n): {\n cleanup: () => void;\n updateFn: (nextSource: ReactiveScalarChildSource) => void;\n} {\n let currentSource = source;\n\n if (source.length === 1 && source[0]?.kind === 'dynamic') {\n let ownedTextNode =\n el.childNodes.length === 1 && el.firstChild?.nodeType === Node.TEXT_NODE\n ? (el.firstChild as Text)\n : null;\n\n let effectHandle: FineGrainedEffectHandle<string> | null =\n createFineGrainedEffect({\n lane: 'reactive',\n compute: () => {\n const currentSlot = currentSource[0];\n if (!currentSlot || currentSlot.kind !== 'dynamic') {\n throw new Error(\n '[Askr] Direct reactive text bindings require a single dynamic slot.'\n );\n }\n\n const rawValue = currentSlot.compute();\n const normalized = normalizeOwnedReactiveTextValue(rawValue);\n return normalized ?? (rawValue as string);\n },\n commit: (value) => {\n const normalized = normalizeOwnedReactiveTextValue(value);\n\n if (normalized === null) {\n ownedTextNode = null;\n host.updateElementChildren(\n el,\n value as unknown as VNode | VNode[] | undefined\n );\n return;\n }\n\n if (\n !ownedTextNode ||\n el.childNodes.length !== 1 ||\n el.firstChild !== ownedTextNode\n ) {\n host.updateElementChildren(el, normalized);\n ownedTextNode =\n el.childNodes.length === 1 &&\n el.firstChild?.nodeType === Node.TEXT_NODE\n ? (el.firstChild as Text)\n : null;\n }\n\n if (!ownedTextNode) {\n return;\n }\n\n if (ownedTextNode.data !== normalized) {\n ownedTextNode.data = normalized;\n incDevCounter('textNodeWrites');\n }\n },\n onError: (err) => {\n if (getRuntimeEnv().NODE_ENV !== 'production') {\n logger.warn('[Askr] Reactive child update failed:', err);\n }\n },\n });\n\n return {\n cleanup: () => {\n effectHandle?.cleanup();\n effectHandle = null;\n },\n updateFn: (nextSource: ReactiveScalarChildSource) => {\n if (!effectHandle) {\n return;\n }\n\n currentSource = nextSource;\n effectHandle.updateCompute(() => {\n const currentSlot = currentSource[0];\n if (!currentSlot || currentSlot.kind !== 'dynamic') {\n throw new Error(\n '[Askr] Direct reactive text bindings require a single dynamic slot.'\n );\n }\n\n const rawValue = currentSlot.compute();\n const normalized = normalizeOwnedReactiveTextValue(rawValue);\n return normalized ?? (rawValue as string);\n });\n },\n };\n }\n\n let effectHandle: FineGrainedEffectHandle<unknown> | null =\n createFineGrainedEffect({\n lane: 'reactive',\n compute: () =>\n currentSource.map((slot) =>\n slot.kind === 'static' ? slot.value : slot.compute()\n ),\n commit: (values) => {\n if (!Array.isArray(values)) {\n throw new Error(\n '[Askr] Reactive scalar children must evaluate to a slot array.'\n );\n }\n\n const normalized = normalizeReactiveScalarSequenceValues(values);\n if (normalized) {\n syncReactiveScalarTextNodes(el, values, normalized, host);\n return;\n }\n\n const nextChildren: VNode[] = [];\n collectReactiveChildValuesAsVNodes(values, nextChildren);\n\n const boundaryHost = createReactiveChildBoundaryHost(el);\n for (let node = el.firstChild; node; ) {\n const next = node.nextSibling;\n boundaryHost.appendChild(node);\n node = next;\n }\n\n host.updateElementChildren(boundaryHost, nextChildren);\n syncReactiveChildExpectedNodes(el, Array.from(boundaryHost.childNodes));\n },\n equals: (previousValue, nextValue) => {\n if (!Array.isArray(previousValue) || !Array.isArray(nextValue)) {\n return false;\n }\n\n const previousNormalized =\n normalizeReactiveScalarSequenceValues(previousValue);\n const nextNormalized = normalizeReactiveScalarSequenceValues(nextValue);\n\n if (!previousNormalized || !nextNormalized) {\n return false;\n }\n\n if (previousNormalized.length !== nextNormalized.length) {\n return false;\n }\n\n for (let index = 0; index < previousNormalized.length; index += 1) {\n if (previousNormalized[index] !== nextNormalized[index]) {\n return false;\n }\n }\n\n return true;\n },\n onError: (err) => {\n if (getRuntimeEnv().NODE_ENV !== 'production') {\n logger.warn('[Askr] Reactive child update failed:', err);\n }\n },\n });\n\n return {\n cleanup: () => {\n effectHandle?.cleanup();\n effectHandle = null;\n },\n updateFn: (nextSource: ReactiveScalarChildSource) => {\n if (!effectHandle) {\n return;\n }\n\n currentSource = nextSource;\n effectHandle.updateCompute(() =>\n currentSource.map((slot) =>\n slot.kind === 'static' ? slot.value : slot.compute()\n )\n );\n },\n };\n}\n\nfunction setupReactiveChildBoundary(\n el: Element,\n childFn: () => VNode,\n host: ReactiveChildDOMHost\n): { cleanup: () => void; updateFn: (nextValue: unknown) => void } {\n let currentChildFn = childFn;\n const parentInstance = getCurrentInstance();\n const entry: { scope: ChildScope; nodes: Node[] } = {\n scope: createChildScope(\n parentInstance,\n `__reactive-child__:${(reactiveChildScopeId += 1)}`,\n () => {\n const expectedNodes = commitReactiveChildBoundaryEntryNodes(\n el,\n entry,\n host\n );\n syncReactiveChildExpectedNodes(el, expectedNodes);\n }\n ),\n nodes: [],\n };\n\n entry.scope.render(() =>\n normalizeReactiveChildBoundaryVNode(currentChildFn())\n );\n syncReactiveChildExpectedNodes(\n el,\n commitReactiveChildBoundaryEntryNodes(el, entry, host)\n );\n\n return {\n cleanup: () => {\n const dom = entry.scope.dom;\n const nodes = entry.nodes;\n disposeChildScope(entry.scope);\n entry.nodes = [];\n\n if (nodes.length > 0) {\n disposeReactiveChildBoundaryNodes(nodes);\n return;\n }\n\n if (dom?.parentNode === el) {\n teardownNodeSubtree(dom);\n el.removeChild(dom);\n }\n },\n updateFn: (nextValue: unknown) => {\n currentChildFn = nextValue as () => VNode;\n rerenderChildScope(entry.scope);\n const expectedNodes = commitReactiveChildBoundaryEntryNodes(\n el,\n entry,\n host\n );\n syncReactiveChildExpectedNodes(el, expectedNodes);\n },\n };\n}\n\nfunction setupReactiveChildBoundarySequence(\n el: Element,\n source: ReactiveChildBoundarySequenceSource,\n host: ReactiveChildDOMHost\n): { cleanup: () => void; updateFn: (nextValue: unknown) => void } {\n let currentSource = source;\n const parentInstance = getCurrentInstance();\n const entries: ReactiveChildBoundarySequenceEntry[] = [];\n const dynamicEntries: Array<{\n index: number;\n entry: Extract<ReactiveChildBoundarySequenceEntry, { kind: 'dynamic' }>;\n }> = [];\n\n if (!currentSource.some((slot) => slot.kind === 'dynamic')) {\n throw new Error(\n '[Askr] Reactive child boundary sequence requires at least one dynamic slot.'\n );\n }\n\n const syncSequence = () => {\n syncReactiveChildSequenceNodes(el, entries, host);\n };\n\n const parentNamespace = getParentNamespace(el);\n\n for (let index = 0; index < currentSource.length; index += 1) {\n const slot = currentSource[index];\n if (!slot) {\n continue;\n }\n\n if (slot.kind === 'static-text') {\n entries.push({\n kind: 'static',\n nodes: [document.createTextNode(slot.value)],\n });\n continue;\n }\n\n if (slot.kind === 'static-node') {\n entries.push({\n kind: 'static',\n nodes: materializeReactiveChildBoundaryNodes(\n slot.value,\n parentNamespace,\n host\n ),\n });\n continue;\n }\n\n const scope = createChildScope(\n parentInstance,\n `__reactive-child-seq__:${(reactiveChildScopeId += 1)}`,\n syncSequence\n );\n\n const dynamicEntry: Extract<\n ReactiveChildBoundarySequenceEntry,\n { kind: 'dynamic' }\n > = {\n kind: 'dynamic',\n scope,\n nodes: [],\n };\n entries.push(dynamicEntry);\n dynamicEntries.push({ index, entry: dynamicEntry });\n }\n\n for (const dynamicEntry of dynamicEntries) {\n dynamicEntry.entry.scope.render(() =>\n normalizeReactiveChildBoundaryVNode(\n (\n currentSource[dynamicEntry.index] as {\n kind: 'dynamic';\n compute: () => VNode;\n }\n ).compute()\n )\n );\n }\n\n syncSequence();\n\n return {\n cleanup: () => {\n for (const dynamicEntry of dynamicEntries) {\n const dom = dynamicEntry.entry.scope.dom;\n const nodes = dynamicEntry.entry.nodes;\n disposeChildScope(dynamicEntry.entry.scope);\n\n if (nodes.length > 0) {\n disposeReactiveChildBoundaryNodes(nodes);\n continue;\n }\n\n if (dom?.parentNode === el) {\n teardownNodeSubtree(dom);\n el.removeChild(dom);\n }\n }\n\n for (const entry of entries) {\n if (entry.kind === 'static') {\n disposeReactiveChildBoundaryNodes(entry.nodes);\n }\n }\n },\n updateFn: (nextValue: unknown) => {\n currentSource = nextValue as ReactiveChildBoundarySequenceSource;\n for (const dynamicEntry of dynamicEntries) {\n rerenderChildScope(dynamicEntry.entry.scope);\n }\n syncSequence();\n },\n };\n}\n\nexport function syncReactiveScalarChild(\n el: Element,\n children: unknown,\n host: ReactiveChildDOMHost\n): boolean {\n const reactiveChildSource = getReactiveScalarChildSource(children);\n const reactiveChildBoundary = getSingleReactiveChildBoundarySource(children);\n const reactiveChildBoundarySequence =\n getReactiveChildBoundarySequenceSource(children);\n const existingReactiveEntry = elementReactivePropsCleanup\n .get(el)\n ?.get(REACTIVE_CHILDREN_KEY);\n\n if (\n !reactiveChildSource &&\n !reactiveChildBoundary &&\n !reactiveChildBoundarySequence\n ) {\n if (existingReactiveEntry) {\n existingReactiveEntry.cleanup();\n const cleanupMap = elementReactivePropsCleanup.get(el);\n cleanupMap?.delete(REACTIVE_CHILDREN_KEY);\n if (cleanupMap && cleanupMap.size === 0) {\n elementReactivePropsCleanup.delete(el);\n }\n }\n\n return false;\n }\n\n if (reactiveChildSource && !reactiveChildBoundarySequence) {\n if (\n existingReactiveEntry &&\n Array.isArray(existingReactiveEntry.fnRef) &&\n areReactiveScalarChildSourcesEqual(\n existingReactiveEntry.fnRef,\n reactiveChildSource\n )\n ) {\n return true;\n }\n\n if (\n existingReactiveEntry?.updateFn &&\n Array.isArray(existingReactiveEntry.fnRef)\n ) {\n existingReactiveEntry.updateFn(reactiveChildSource);\n existingReactiveEntry.fnRef = reactiveChildSource;\n return true;\n }\n\n existingReactiveEntry?.cleanup();\n\n try {\n const reactive = setupReactiveScalarChild(el, reactiveChildSource, host);\n getOrCreateElementReactiveCleanupMap(el).set(REACTIVE_CHILDREN_KEY, {\n cleanup: reactive.cleanup,\n updateFn: (nextValue) => {\n reactive.updateFn(nextValue as ReactiveScalarChildSource);\n },\n fnRef: reactiveChildSource,\n });\n return true;\n } catch (error) {\n if (!reactiveChildBoundary && !reactiveChildBoundarySequence) {\n throw error;\n }\n }\n }\n\n if (reactiveChildBoundarySequence) {\n if (\n existingReactiveEntry &&\n Array.isArray(existingReactiveEntry.fnRef) &&\n areReactiveChildBoundarySequenceSourcesEqual(\n existingReactiveEntry.fnRef,\n reactiveChildBoundarySequence\n )\n ) {\n return true;\n }\n\n if (\n existingReactiveEntry?.updateFn &&\n Array.isArray(existingReactiveEntry.fnRef) &&\n canUpdateReactiveChildBoundarySequenceSource(\n existingReactiveEntry.fnRef,\n reactiveChildBoundarySequence\n )\n ) {\n existingReactiveEntry.updateFn(reactiveChildBoundarySequence);\n existingReactiveEntry.fnRef = reactiveChildBoundarySequence;\n return true;\n }\n\n existingReactiveEntry?.cleanup();\n\n const reactive = setupReactiveChildBoundarySequence(\n el,\n reactiveChildBoundarySequence,\n host\n );\n getOrCreateElementReactiveCleanupMap(el).set(REACTIVE_CHILDREN_KEY, {\n cleanup: reactive.cleanup,\n updateFn: reactive.updateFn,\n fnRef: reactiveChildBoundarySequence,\n });\n return true;\n }\n\n if (existingReactiveEntry?.fnRef === reactiveChildBoundary) {\n return true;\n }\n\n if (\n existingReactiveEntry?.updateFn &&\n !Array.isArray(existingReactiveEntry.fnRef)\n ) {\n existingReactiveEntry.updateFn(reactiveChildBoundary);\n existingReactiveEntry.fnRef = reactiveChildBoundary;\n return true;\n }\n\n existingReactiveEntry?.cleanup();\n\n if (!reactiveChildBoundary) {\n return false;\n }\n\n const reactive = setupReactiveChildBoundary(el, reactiveChildBoundary, host);\n getOrCreateElementReactiveCleanupMap(el).set(REACTIVE_CHILDREN_KEY, {\n cleanup: reactive.cleanup,\n updateFn: reactive.updateFn,\n fnRef: reactiveChildBoundary,\n });\n return true;\n}\n"],"mappings":";;;;;;;;;;;;;AAkDA,IAAI,uBAAuB;AAE3B,SAAS,qCACP,IACuC;CACvC,IAAI,aAAa,4BAA4B,IAAI,EAAE;CACnD,IAAI,CAAC,YAAY;EACf,6BAAa,IAAI,IAAI;EACrB,4BAA4B,IAAI,IAAI,UAAU;CAChD;CAEA,OAAO;AACT;AAEA,SAAgB,kCACd,IACA,UACA,MACS;CACT,MAAM,aAAa,sCAAsC,QAAQ;CACjE,IAAI,CAAC,YACH,OAAO;CAGT,IAAI,GAAG,WAAW,WAAW,WAAW,QACtC,OAAO;CAGT,KAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,WAAW,QAAQ,SAAS,GACzD,IAAI,GAAG,WAAW,MAAM,EAAE,aAAa,KAAK,WAC1C,OAAO;CAIX,4BAA4B,IAAI,UAAU,YAAY,IAAI;CAC1D,OAAO;AACT;AAEA,SAAS,yBACP,IACA,QACA,MAIA;CACA,IAAI,gBAAgB;CAEpB,IAAI,OAAO,WAAW,KAAK,OAAO,EAAE,EAAE,SAAS,WAAW;EACxD,IAAI,gBACF,GAAG,WAAW,WAAW,KAAK,GAAG,YAAY,aAAa,KAAK,YAC1D,GAAG,aACJ;EAEN,IAAI,eACF,wBAAwB;GACtB,MAAM;GACN,eAAe;IACb,MAAM,cAAc,cAAc;IAClC,IAAI,CAAC,eAAe,YAAY,SAAS,WACvC,MAAM,IAAI,MACR,qEACF;IAGF,MAAM,WAAW,YAAY,QAAQ;IAErC,OADmB,gCAAgC,QAC5C,KAAe;GACxB;GACA,SAAS,UAAU;IACjB,MAAM,aAAa,gCAAgC,KAAK;IAExD,IAAI,eAAe,MAAM;KACvB,gBAAgB;KAChB,KAAK,sBACH,IACA,KACF;KACA;IACF;IAEA,IACE,CAAC,iBACD,GAAG,WAAW,WAAW,KACzB,GAAG,eAAe,eAClB;KACA,KAAK,sBAAsB,IAAI,UAAU;KACzC,gBACE,GAAG,WAAW,WAAW,KACzB,GAAG,YAAY,aAAa,KAAK,YAC5B,GAAG,aACJ;IACR;IAEA,IAAI,CAAC,eACH;IAGF,IAAI,cAAc,SAAS,YAAY;KACrC,cAAc,OAAO;KACrB,cAAc,gBAAgB;IAChC;GACF;GACA,UAAU,QAAQ;IAChB,IAAI,cAAc,CAAC,CAAC,aAAa,cAC/B,OAAO,KAAK,wCAAwC,GAAG;GAE3D;EACF,CAAC;EAEH,OAAO;GACL,eAAe;IACb,cAAc,QAAQ;IACtB,eAAe;GACjB;GACA,WAAW,eAA0C;IACnD,IAAI,CAAC,cACH;IAGF,gBAAgB;IAChB,aAAa,oBAAoB;KAC/B,MAAM,cAAc,cAAc;KAClC,IAAI,CAAC,eAAe,YAAY,SAAS,WACvC,MAAM,IAAI,MACR,qEACF;KAGF,MAAM,WAAW,YAAY,QAAQ;KAErC,OADmB,gCAAgC,QAC5C,KAAe;IACxB,CAAC;GACH;EACF;CACF;CAEA,IAAI,eACF,wBAAwB;EACtB,MAAM;EACN,eACE,cAAc,KAAK,SACjB,KAAK,SAAS,WAAW,KAAK,QAAQ,KAAK,QAAQ,CACrD;EACF,SAAS,WAAW;GAClB,IAAI,CAAC,MAAM,QAAQ,MAAM,GACvB,MAAM,IAAI,MACR,gEACF;GAGF,MAAM,aAAa,sCAAsC,MAAM;GAC/D,IAAI,YAAY;IACd,4BAA4B,IAAI,QAAQ,YAAY,IAAI;IACxD;GACF;GAEA,MAAM,eAAwB,CAAC;GAC/B,mCAAmC,QAAQ,YAAY;GAEvD,MAAM,eAAe,gCAAgC,EAAE;GACvD,KAAK,IAAI,OAAO,GAAG,YAAY,OAAQ;IACrC,MAAM,OAAO,KAAK;IAClB,aAAa,YAAY,IAAI;IAC7B,OAAO;GACT;GAEA,KAAK,sBAAsB,cAAc,YAAY;GACrD,+BAA+B,IAAI,MAAM,KAAK,aAAa,UAAU,CAAC;EACxE;EACA,SAAS,eAAe,cAAc;GACpC,IAAI,CAAC,MAAM,QAAQ,aAAa,KAAK,CAAC,MAAM,QAAQ,SAAS,GAC3D,OAAO;GAGT,MAAM,qBACJ,sCAAsC,aAAa;GACrD,MAAM,iBAAiB,sCAAsC,SAAS;GAEtE,IAAI,CAAC,sBAAsB,CAAC,gBAC1B,OAAO;GAGT,IAAI,mBAAmB,WAAW,eAAe,QAC/C,OAAO;GAGT,KAAK,IAAI,QAAQ,GAAG,QAAQ,mBAAmB,QAAQ,SAAS,GAC9D,IAAI,mBAAmB,WAAW,eAAe,QAC/C,OAAO;GAIX,OAAO;EACT;EACA,UAAU,QAAQ;GAChB,IAAI,cAAc,CAAC,CAAC,aAAa,cAC/B,OAAO,KAAK,wCAAwC,GAAG;EAE3D;CACF,CAAC;CAEH,OAAO;EACL,eAAe;GACb,cAAc,QAAQ;GACtB,eAAe;EACjB;EACA,WAAW,eAA0C;GACnD,IAAI,CAAC,cACH;GAGF,gBAAgB;GAChB,aAAa,oBACX,cAAc,KAAK,SACjB,KAAK,SAAS,WAAW,KAAK,QAAQ,KAAK,QAAQ,CACrD,CACF;EACF;CACF;AACF;AAEA,SAAS,2BACP,IACA,SACA,MACiE;CACjE,IAAI,iBAAiB;CAErB,MAAM,QAA8C;EAClD,OAAO,iBAFc,mBAGnB,GACA,sBAAuB,wBAAwB,WACzC;GAMJ,+BAA+B,IALT,sCACpB,IACA,OACA,IAEiC,CAAa;EAClD,CACF;EACA,OAAO,CAAC;CACV;CAEA,MAAM,MAAM,aACV,oCAAoC,eAAe,CAAC,CACtD;CACA,+BACE,IACA,sCAAsC,IAAI,OAAO,IAAI,CACvD;CAEA,OAAO;EACL,eAAe;GACb,MAAM,MAAM,MAAM,MAAM;GACxB,MAAM,QAAQ,MAAM;GACpB,kBAAkB,MAAM,KAAK;GAC7B,MAAM,QAAQ,CAAC;GAEf,IAAI,MAAM,SAAS,GAAG;IACpB,kCAAkC,KAAK;IACvC;GACF;GAEA,IAAI,KAAK,eAAe,IAAI;IAC1B,oBAAoB,GAAG;IACvB,GAAG,YAAY,GAAG;GACpB;EACF;EACA,WAAW,cAAuB;GAChC,iBAAiB;GACjB,mBAAmB,MAAM,KAAK;GAM9B,+BAA+B,IALT,sCACpB,IACA,OACA,IAEiC,CAAa;EAClD;CACF;AACF;AAEA,SAAS,mCACP,IACA,QACA,MACiE;CACjE,IAAI,gBAAgB;CACpB,MAAM,iBAAiB,mBAAmB;CAC1C,MAAM,UAAgD,CAAC;CACvD,MAAM,iBAGD,CAAC;CAEN,IAAI,CAAC,cAAc,MAAM,SAAS,KAAK,SAAS,SAAS,GACvD,MAAM,IAAI,MACR,6EACF;CAGF,MAAM,qBAAqB;EACzB,+BAA+B,IAAI,SAAS,IAAI;CAClD;CAEA,MAAM,kBAAkB,mBAAmB,EAAE;CAE7C,KAAK,IAAI,QAAQ,GAAG,QAAQ,cAAc,QAAQ,SAAS,GAAG;EAC5D,MAAM,OAAO,cAAc;EAC3B,IAAI,CAAC,MACH;EAGF,IAAI,KAAK,SAAS,eAAe;GAC/B,QAAQ,KAAK;IACX,MAAM;IACN,OAAO,CAAC,SAAS,eAAe,KAAK,KAAK,CAAC;GAC7C,CAAC;GACD;EACF;EAEA,IAAI,KAAK,SAAS,eAAe;GAC/B,QAAQ,KAAK;IACX,MAAM;IACN,OAAO,sCACL,KAAK,OACL,iBACA,IACF;GACF,CAAC;GACD;EACF;EAQA,MAAM,eAGF;GACF,MAAM;GACN,OAXY,iBACZ,gBACA,0BAA2B,wBAAwB,KACnD,YAQA;GACA,OAAO,CAAC;EACV;EACA,QAAQ,KAAK,YAAY;EACzB,eAAe,KAAK;GAAE;GAAO,OAAO;EAAa,CAAC;CACpD;CAEA,KAAK,MAAM,gBAAgB,gBACzB,aAAa,MAAM,MAAM,aACvB,oCAEI,cAAc,aAAa,MAAM,CAIjC,QAAQ,CACZ,CACF;CAGF,aAAa;CAEb,OAAO;EACL,eAAe;GACb,KAAK,MAAM,gBAAgB,gBAAgB;IACzC,MAAM,MAAM,aAAa,MAAM,MAAM;IACrC,MAAM,QAAQ,aAAa,MAAM;IACjC,kBAAkB,aAAa,MAAM,KAAK;IAE1C,IAAI,MAAM,SAAS,GAAG;KACpB,kCAAkC,KAAK;KACvC;IACF;IAEA,IAAI,KAAK,eAAe,IAAI;KAC1B,oBAAoB,GAAG;KACvB,GAAG,YAAY,GAAG;IACpB;GACF;GAEA,KAAK,MAAM,SAAS,SAClB,IAAI,MAAM,SAAS,UACjB,kCAAkC,MAAM,KAAK;EAGnD;EACA,WAAW,cAAuB;GAChC,gBAAgB;GAChB,KAAK,MAAM,gBAAgB,gBACzB,mBAAmB,aAAa,MAAM,KAAK;GAE7C,aAAa;EACf;CACF;AACF;AAEA,SAAgB,wBACd,IACA,UACA,MACS;CACT,MAAM,sBAAsB,6BAA6B,QAAQ;CACjE,MAAM,wBAAwB,qCAAqC,QAAQ;CAC3E,MAAM,gCACJ,uCAAuC,QAAQ;CACjD,MAAM,wBAAwB,4BAC3B,IAAI,EAAE,CAAC,EACN,IAAI,qBAAqB;CAE7B,IACE,CAAC,uBACD,CAAC,yBACD,CAAC,+BACD;EACA,IAAI,uBAAuB;GACzB,sBAAsB,QAAQ;GAC9B,MAAM,aAAa,4BAA4B,IAAI,EAAE;GACrD,YAAY,OAAO,qBAAqB;GACxC,IAAI,cAAc,WAAW,SAAS,GACpC,4BAA4B,OAAO,EAAE;EAEzC;EAEA,OAAO;CACT;CAEA,IAAI,uBAAuB,CAAC,+BAA+B;EACzD,IACE,yBACA,MAAM,QAAQ,sBAAsB,KAAK,KACzC,mCACE,sBAAsB,OACtB,mBACF,GAEA,OAAO;EAGT,IACE,uBAAuB,YACvB,MAAM,QAAQ,sBAAsB,KAAK,GACzC;GACA,sBAAsB,SAAS,mBAAmB;GAClD,sBAAsB,QAAQ;GAC9B,OAAO;EACT;EAEA,uBAAuB,QAAQ;EAE/B,IAAI;GACF,MAAM,WAAW,yBAAyB,IAAI,qBAAqB,IAAI;GACvE,qCAAqC,EAAE,CAAC,CAAC,IAAI,uBAAuB;IAClE,SAAS,SAAS;IAClB,WAAW,cAAc;KACvB,SAAS,SAAS,SAAsC;IAC1D;IACA,OAAO;GACT,CAAC;GACD,OAAO;EACT,SAAS,OAAO;GACd,IAAI,CAAC,yBAAyB,CAAC,+BAC7B,MAAM;EAEV;CACF;CAEA,IAAI,+BAA+B;EACjC,IACE,yBACA,MAAM,QAAQ,sBAAsB,KAAK,KACzC,6CACE,sBAAsB,OACtB,6BACF,GAEA,OAAO;EAGT,IACE,uBAAuB,YACvB,MAAM,QAAQ,sBAAsB,KAAK,KACzC,6CACE,sBAAsB,OACtB,6BACF,GACA;GACA,sBAAsB,SAAS,6BAA6B;GAC5D,sBAAsB,QAAQ;GAC9B,OAAO;EACT;EAEA,uBAAuB,QAAQ;EAE/B,MAAM,WAAW,mCACf,IACA,+BACA,IACF;EACA,qCAAqC,EAAE,CAAC,CAAC,IAAI,uBAAuB;GAClE,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,OAAO;EACT,CAAC;EACD,OAAO;CACT;CAEA,IAAI,uBAAuB,UAAU,uBACnC,OAAO;CAGT,IACE,uBAAuB,YACvB,CAAC,MAAM,QAAQ,sBAAsB,KAAK,GAC1C;EACA,sBAAsB,SAAS,qBAAqB;EACpD,sBAAsB,QAAQ;EAC9B,OAAO;CACT;CAEA,uBAAuB,QAAQ;CAE/B,IAAI,CAAC,uBACH,OAAO;CAGT,MAAM,WAAW,2BAA2B,IAAI,uBAAuB,IAAI;CAC3E,qCAAqC,EAAE,CAAC,CAAC,IAAI,uBAAuB;EAClE,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,OAAO;CACT,CAAC;CACD,OAAO;AACT"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { teardownNodeSubtree } from "./cleanup.js";
|
|
2
|
-
import { recordDOMReplace } from "./utils.js";
|
|
3
|
-
//#region src/renderer/reconcile-commit.ts
|
|
4
|
-
function commitReconciliation(parent, finalNodes) {
|
|
5
|
-
try {
|
|
6
|
-
const finalSet = new Set(finalNodes);
|
|
7
|
-
for (let n = parent.firstChild; n;) {
|
|
8
|
-
const next = n.nextSibling;
|
|
9
|
-
if (!finalSet.has(n)) {
|
|
10
|
-
teardownNodeSubtree(n);
|
|
11
|
-
parent.removeChild(n);
|
|
12
|
-
}
|
|
13
|
-
n = next;
|
|
14
|
-
}
|
|
15
|
-
for (let i = 0; i < finalNodes.length; i++) {
|
|
16
|
-
const desiredNode = finalNodes[i];
|
|
17
|
-
const anchor = parent.childNodes[i] ?? null;
|
|
18
|
-
if (desiredNode !== anchor) parent.insertBefore(desiredNode, anchor);
|
|
19
|
-
}
|
|
20
|
-
} catch {
|
|
21
|
-
const fragment = document.createDocumentFragment();
|
|
22
|
-
for (let i = 0; i < finalNodes.length; i++) fragment.appendChild(finalNodes[i]);
|
|
23
|
-
try {
|
|
24
|
-
for (let n = parent.firstChild; n;) {
|
|
25
|
-
const next = n.nextSibling;
|
|
26
|
-
teardownNodeSubtree(n);
|
|
27
|
-
n = next;
|
|
28
|
-
}
|
|
29
|
-
} catch {}
|
|
30
|
-
recordDOMReplace("reconcile");
|
|
31
|
-
parent.replaceChildren(fragment);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { commitReconciliation };
|
|
37
|
-
|
|
38
|
-
//# sourceMappingURL=reconcile-commit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-commit.js","names":[],"sources":["../../src/renderer/reconcile-commit.ts"],"sourcesContent":["import { teardownNodeSubtree } from './cleanup';\nimport { recordDOMReplace } from './utils';\n\nexport function commitReconciliation(\n parent: Element,\n finalNodes: Node[]\n): void {\n try {\n const finalSet = new Set<Node>(finalNodes);\n\n for (let n = parent.firstChild; n; ) {\n const next = n.nextSibling;\n if (!finalSet.has(n)) {\n teardownNodeSubtree(n);\n parent.removeChild(n);\n }\n n = next;\n }\n\n for (let i = 0; i < finalNodes.length; i++) {\n const desiredNode = finalNodes[i];\n const anchor = parent.childNodes[i] ?? null;\n if (desiredNode !== anchor) {\n parent.insertBefore(desiredNode, anchor);\n }\n }\n } catch {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < finalNodes.length; i++) {\n fragment.appendChild(finalNodes[i]);\n }\n\n try {\n for (let n = parent.firstChild; n; ) {\n const next = n.nextSibling;\n teardownNodeSubtree(n);\n n = next;\n }\n } catch {\n // Ignore fallback cleanup failures.\n }\n\n recordDOMReplace('reconcile');\n parent.replaceChildren(fragment);\n return;\n }\n}\n"],"mappings":";;;AAGA,SAAgB,qBACd,QACA,YACM;CACN,IAAI;EACF,MAAM,WAAW,IAAI,IAAU,UAAU;EAEzC,KAAK,IAAI,IAAI,OAAO,YAAY,IAAK;GACnC,MAAM,OAAO,EAAE;GACf,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG;IACpB,oBAAoB,CAAC;IACrB,OAAO,YAAY,CAAC;GACtB;GACA,IAAI;EACN;EAEA,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;GAC1C,MAAM,cAAc,WAAW;GAC/B,MAAM,SAAS,OAAO,WAAW,MAAM;GACvC,IAAI,gBAAgB,QAClB,OAAO,aAAa,aAAa,MAAM;EAE3C;CACF,QAAQ;EACN,MAAM,WAAW,SAAS,uBAAuB;EACjD,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,SAAS,YAAY,WAAW,EAAE;EAGpC,IAAI;GACF,KAAK,IAAI,IAAI,OAAO,YAAY,IAAK;IACnC,MAAM,OAAO,EAAE;IACf,oBAAoB,CAAC;IACrB,IAAI;GACN;EACF,QAAQ,CAER;EAEA,iBAAiB,WAAW;EAC5B,OAAO,gBAAgB,QAAQ;EAC/B;CACF;AACF"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { getRuntimeEnv } from "../common/env.js";
|
|
2
|
-
import "./env.js";
|
|
3
|
-
import { checkPropChanges, recordFastPathStats } from "./utils.js";
|
|
4
|
-
import { keyedElements, planKeyedReorderFastPath } from "./keyed.js";
|
|
5
|
-
import { canReuseIntrinsicElementInNamespace, getParentNamespace } from "./namespaces.js";
|
|
6
|
-
import { performBulkPositionalKeyedTextUpdate } from "./children-fastpath.js";
|
|
7
|
-
import "./children.js";
|
|
8
|
-
import { applyRendererFastPath } from "./fastpath.js";
|
|
9
|
-
//#region src/renderer/reconcile-fastpaths.ts
|
|
10
|
-
function tryFastPaths(parent, newChildren, keyedVnodes, oldKeyMap) {
|
|
11
|
-
try {
|
|
12
|
-
const forcedResult = tryForcedPositionalBulkUpdate(parent, newChildren, keyedVnodes);
|
|
13
|
-
if (forcedResult) return forcedResult;
|
|
14
|
-
const rendererResult = tryRendererFastPath(parent, keyedVnodes, newChildren.length, oldKeyMap);
|
|
15
|
-
if (rendererResult) return rendererResult;
|
|
16
|
-
const positionalResult = tryPositionalBulkUpdate(parent, keyedVnodes);
|
|
17
|
-
if (positionalResult) return positionalResult;
|
|
18
|
-
} catch {}
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
function tryRendererFastPath(parent, keyedVnodes, totalChildren, oldKeyMap) {
|
|
22
|
-
if (planKeyedReorderFastPath(parent, keyedVnodes, totalChildren, oldKeyMap).useFastPath) try {
|
|
23
|
-
const map = applyRendererFastPath(parent, keyedVnodes, oldKeyMap);
|
|
24
|
-
if (map) {
|
|
25
|
-
keyedElements.set(parent, map);
|
|
26
|
-
return map;
|
|
27
|
-
}
|
|
28
|
-
} catch {}
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
function tryForcedPositionalBulkUpdate(parent, newChildren, keyedVnodes) {
|
|
32
|
-
if (getRuntimeEnv().ASKR_FORCE_BULK_POSREUSE !== "1") return null;
|
|
33
|
-
if (keyedVnodes.length === 0 || keyedVnodes.length !== newChildren.length) return null;
|
|
34
|
-
try {
|
|
35
|
-
recordFastPathStats(performBulkPositionalKeyedTextUpdate(parent, keyedVnodes), "bulkKeyedPositionalForced");
|
|
36
|
-
rebuildKeyedMap(parent);
|
|
37
|
-
return keyedElements.get(parent);
|
|
38
|
-
} catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function tryPositionalBulkUpdate(parent, keyedVnodes) {
|
|
43
|
-
const total = keyedVnodes.length;
|
|
44
|
-
if (total < 10) return null;
|
|
45
|
-
if (parent.children.length !== total) return null;
|
|
46
|
-
const matchCount = countPositionalMatches(parent, keyedVnodes, getParentNamespace(parent));
|
|
47
|
-
const matchFraction = matchCount / total;
|
|
48
|
-
if (keyedVnodes.length > 0) {
|
|
49
|
-
if (matchCount !== total && matchFraction >= .1) return null;
|
|
50
|
-
} else if (matchFraction < .9) return null;
|
|
51
|
-
if (hasPositionalPropChanges(parent, keyedVnodes)) return null;
|
|
52
|
-
try {
|
|
53
|
-
recordFastPathStats(performBulkPositionalKeyedTextUpdate(parent, keyedVnodes), "bulkKeyedPositionalHits");
|
|
54
|
-
rebuildKeyedMap(parent);
|
|
55
|
-
return keyedElements.get(parent);
|
|
56
|
-
} catch {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function countPositionalMatches(parent, keyedVnodes, parentNamespace) {
|
|
61
|
-
let matchCount = 0;
|
|
62
|
-
try {
|
|
63
|
-
for (let i = 0; i < keyedVnodes.length; i++) {
|
|
64
|
-
const vnode = keyedVnodes[i].vnode;
|
|
65
|
-
const expectedKey = keyedVnodes[i].key;
|
|
66
|
-
if (!vnode || typeof vnode !== "object" || typeof vnode.type !== "string") continue;
|
|
67
|
-
const el = parent.children[i];
|
|
68
|
-
if (!el) continue;
|
|
69
|
-
if (canReuseIntrinsicElementInNamespace(el, vnode.type, parentNamespace)) {
|
|
70
|
-
const actualKey = el.getAttribute("data-key");
|
|
71
|
-
if (actualKey === String(expectedKey) || actualKey !== null && !Number.isNaN(Number(actualKey)) && Number(actualKey) === expectedKey) matchCount++;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
} catch {}
|
|
75
|
-
return matchCount;
|
|
76
|
-
}
|
|
77
|
-
function hasPositionalPropChanges(parent, keyedVnodes) {
|
|
78
|
-
try {
|
|
79
|
-
for (let i = 0; i < keyedVnodes.length; i++) {
|
|
80
|
-
const vnode = keyedVnodes[i].vnode;
|
|
81
|
-
const el = parent.children[i];
|
|
82
|
-
if (!el || !vnode || typeof vnode !== "object") continue;
|
|
83
|
-
if (checkPropChanges(el, vnode.props || {})) return true;
|
|
84
|
-
}
|
|
85
|
-
} catch {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
function rebuildKeyedMap(parent) {
|
|
91
|
-
try {
|
|
92
|
-
const map = /* @__PURE__ */ new Map();
|
|
93
|
-
for (let el = parent.firstElementChild; el; el = el.nextElementSibling) {
|
|
94
|
-
const k = el.getAttribute("data-key");
|
|
95
|
-
if (k !== null) {
|
|
96
|
-
map.set(k, el);
|
|
97
|
-
const n = Number(k);
|
|
98
|
-
if (!Number.isNaN(n)) map.set(n, el);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
keyedElements.set(parent, map);
|
|
102
|
-
} catch {}
|
|
103
|
-
}
|
|
104
|
-
//#endregion
|
|
105
|
-
export { tryFastPaths };
|
|
106
|
-
|
|
107
|
-
//# sourceMappingURL=reconcile-fastpaths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-fastpaths.js","names":[],"sources":["../../src/renderer/reconcile-fastpaths.ts"],"sourcesContent":["import type { VNode } from './types';\nimport { performBulkPositionalKeyedTextUpdate } from './children';\nimport { getRuntimeEnv } from './env';\nimport { applyRendererFastPath } from './fastpath';\nimport { keyedElements, planKeyedReorderFastPath } from './keyed';\nimport type { KeyedVnode } from './keyed-children';\nimport {\n canReuseIntrinsicElementInNamespace,\n getParentNamespace,\n} from './namespaces';\nimport { checkPropChanges, recordFastPathStats } from './utils';\n\ntype VnodeObj = VNode & { type?: unknown; props?: Record<string, unknown> };\n\nexport function tryFastPaths(\n parent: Element,\n newChildren: VNode[],\n keyedVnodes: KeyedVnode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> | null {\n try {\n const forcedResult = tryForcedPositionalBulkUpdate(\n parent,\n newChildren,\n keyedVnodes\n );\n if (forcedResult) {\n return forcedResult;\n }\n\n const rendererResult = tryRendererFastPath(\n parent,\n keyedVnodes,\n newChildren.length,\n oldKeyMap\n );\n if (rendererResult) {\n return rendererResult;\n }\n\n const positionalResult = tryPositionalBulkUpdate(parent, keyedVnodes);\n if (positionalResult) {\n return positionalResult;\n }\n } catch {\n // Fall through to full reconciliation.\n }\n\n return null;\n}\n\nfunction tryRendererFastPath(\n parent: Element,\n keyedVnodes: KeyedVnode[],\n totalChildren: number,\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> | null {\n const decision = planKeyedReorderFastPath(\n parent,\n keyedVnodes,\n totalChildren,\n oldKeyMap\n );\n\n if (decision.useFastPath) {\n try {\n const map = applyRendererFastPath(parent, keyedVnodes, oldKeyMap);\n if (map) {\n keyedElements.set(parent, map);\n return map;\n }\n } catch {\n // Fall through.\n }\n }\n\n return null;\n}\n\nfunction tryForcedPositionalBulkUpdate(\n parent: Element,\n newChildren: VNode[],\n keyedVnodes: KeyedVnode[]\n): Map<string | number, Element> | null {\n if (getRuntimeEnv().ASKR_FORCE_BULK_POSREUSE !== '1') return null;\n if (keyedVnodes.length === 0 || keyedVnodes.length !== newChildren.length) {\n return null;\n }\n\n try {\n const stats = performBulkPositionalKeyedTextUpdate(parent, keyedVnodes);\n recordFastPathStats(stats, 'bulkKeyedPositionalForced');\n\n rebuildKeyedMap(parent);\n return keyedElements.get(parent) as Map<string | number, Element>;\n } catch {\n return null;\n }\n}\n\nfunction tryPositionalBulkUpdate(\n parent: Element,\n keyedVnodes: KeyedVnode[]\n): Map<string | number, Element> | null {\n const total = keyedVnodes.length;\n if (total < 10) return null;\n\n if (parent.children.length !== total) {\n return null;\n }\n\n const parentNamespace = getParentNamespace(parent);\n const matchCount = countPositionalMatches(\n parent,\n keyedVnodes,\n parentNamespace\n );\n const matchFraction = matchCount / total;\n\n if (keyedVnodes.length > 0) {\n if (matchCount !== total && matchFraction >= 0.1) {\n return null;\n }\n } else if (matchFraction < 0.9) {\n return null;\n }\n\n if (hasPositionalPropChanges(parent, keyedVnodes)) {\n return null;\n }\n\n try {\n const stats = performBulkPositionalKeyedTextUpdate(parent, keyedVnodes);\n recordFastPathStats(stats, 'bulkKeyedPositionalHits');\n\n rebuildKeyedMap(parent);\n return keyedElements.get(parent) as Map<string | number, Element>;\n } catch {\n return null;\n }\n}\n\nfunction countPositionalMatches(\n parent: Element,\n keyedVnodes: KeyedVnode[],\n parentNamespace: string | undefined\n): number {\n let matchCount = 0;\n\n try {\n for (let i = 0; i < keyedVnodes.length; i++) {\n const vnode = keyedVnodes[i].vnode as VnodeObj;\n const expectedKey = keyedVnodes[i].key;\n\n if (!vnode || typeof vnode !== 'object' || typeof vnode.type !== 'string')\n continue;\n\n const el = parent.children[i] as Element | undefined;\n if (!el) continue;\n\n if (\n canReuseIntrinsicElementInNamespace(el, vnode.type, parentNamespace)\n ) {\n const actualKey = el.getAttribute('data-key');\n const keyMatches =\n actualKey === String(expectedKey) ||\n (actualKey !== null &&\n !Number.isNaN(Number(actualKey)) &&\n Number(actualKey) === expectedKey);\n\n if (keyMatches) {\n matchCount++;\n }\n }\n }\n } catch {\n // Ignore.\n }\n\n return matchCount;\n}\n\nfunction hasPositionalPropChanges(\n parent: Element,\n keyedVnodes: KeyedVnode[]\n): boolean {\n try {\n for (let i = 0; i < keyedVnodes.length; i++) {\n const vnode = keyedVnodes[i].vnode as VnodeObj;\n const el = parent.children[i] as Element | undefined;\n if (!el || !vnode || typeof vnode !== 'object') continue;\n\n if (checkPropChanges(el, vnode.props || {})) {\n return true;\n }\n }\n } catch {\n return true;\n }\n\n return false;\n}\n\nfunction rebuildKeyedMap(parent: Element): void {\n try {\n const map = new Map<string | number, Element>();\n for (let el = parent.firstElementChild; el; el = el.nextElementSibling) {\n const k = el.getAttribute('data-key');\n if (k !== null) {\n map.set(k, el);\n const n = Number(k);\n if (!Number.isNaN(n)) map.set(n, el);\n }\n }\n keyedElements.set(parent, map);\n } catch {\n // Ignore.\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { __FOR_BOUNDARY__ } from "../common/vnode.js";
|
|
2
|
-
import { evaluateCaseState, evaluateShowState } from "../runtime/control.js";
|
|
3
|
-
import { evaluateForState } from "../runtime/for-internal.js";
|
|
4
|
-
import "../runtime/index.js";
|
|
5
|
-
import { extractKey } from "./utils.js";
|
|
6
|
-
import { canReuseIntrinsicElementInNamespace, getParentNamespace } from "./namespaces.js";
|
|
7
|
-
import { getRendererDOMHost } from "./dom-host.js";
|
|
8
|
-
//#region src/renderer/reconcile-resolution.ts
|
|
9
|
-
function createOldElResolver(parent, oldKeyMap, usedOldEls) {
|
|
10
|
-
return (k) => {
|
|
11
|
-
if (!oldKeyMap) return void 0;
|
|
12
|
-
const direct = oldKeyMap.get(k);
|
|
13
|
-
if (direct && !usedOldEls.has(direct)) {
|
|
14
|
-
usedOldEls.add(direct);
|
|
15
|
-
return direct;
|
|
16
|
-
}
|
|
17
|
-
const s = String(k);
|
|
18
|
-
const byString = oldKeyMap.get(s);
|
|
19
|
-
if (byString && !usedOldEls.has(byString)) {
|
|
20
|
-
usedOldEls.add(byString);
|
|
21
|
-
return byString;
|
|
22
|
-
}
|
|
23
|
-
const n = Number(s);
|
|
24
|
-
if (!Number.isNaN(n)) {
|
|
25
|
-
const byNum = oldKeyMap.get(n);
|
|
26
|
-
if (byNum && !usedOldEls.has(byNum)) {
|
|
27
|
-
usedOldEls.add(byNum);
|
|
28
|
-
return byNum;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return scanForElementByKey(parent, k, s, usedOldEls);
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function scanForElementByKey(parent, k, keyStr, usedOldEls) {
|
|
35
|
-
try {
|
|
36
|
-
for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {
|
|
37
|
-
if (usedOldEls.has(ch)) continue;
|
|
38
|
-
const attr = ch.getAttribute("data-key");
|
|
39
|
-
if (attr === keyStr) {
|
|
40
|
-
usedOldEls.add(ch);
|
|
41
|
-
return ch;
|
|
42
|
-
}
|
|
43
|
-
if (attr !== null) {
|
|
44
|
-
const numAttr = Number(attr);
|
|
45
|
-
if (!Number.isNaN(numAttr) && numAttr === k) {
|
|
46
|
-
usedOldEls.add(ch);
|
|
47
|
-
return ch;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
} catch {}
|
|
52
|
-
}
|
|
53
|
-
function reconcileSingleChild(child, index, parent, resolveOldElOnce, resolveUnkeyedOnce, usedOldEls, newKeyMap) {
|
|
54
|
-
const resolvedControlBoundary = prepareControlBoundaryResolution(child);
|
|
55
|
-
if (resolvedControlBoundary !== null) {
|
|
56
|
-
if (resolvedControlBoundary.remount) return getRendererDOMHost().createDOMNode(resolvedControlBoundary.vnode, getParentNamespace(parent));
|
|
57
|
-
return reconcileSingleChild(resolvedControlBoundary.vnode, index, parent, resolveOldElOnce, resolveUnkeyedOnce, usedOldEls, newKeyMap);
|
|
58
|
-
}
|
|
59
|
-
const key = extractKey(child);
|
|
60
|
-
if (key !== void 0) return reconcileKeyedChild(child, key, parent, resolveOldElOnce, newKeyMap);
|
|
61
|
-
return reconcileUnkeyedChild(child, index, parent, resolveUnkeyedOnce, usedOldEls);
|
|
62
|
-
}
|
|
63
|
-
function reconcileKeyedChild(child, key, parent, resolveOldElOnce, newKeyMap) {
|
|
64
|
-
const el = resolveOldElOnce(key);
|
|
65
|
-
const parentNamespace = getParentNamespace(parent);
|
|
66
|
-
const domHost = getRendererDOMHost();
|
|
67
|
-
if (el && el.parentElement === parent) try {
|
|
68
|
-
const childObj = child;
|
|
69
|
-
if (childObj && typeof childObj === "object" && typeof childObj.type === "string") {
|
|
70
|
-
if (canReuseIntrinsicElementInNamespace(el, childObj.type, parentNamespace)) {
|
|
71
|
-
domHost.updateElementFromVnode(el, child);
|
|
72
|
-
newKeyMap.set(key, el);
|
|
73
|
-
return el;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (isComponentVNode(child)) {
|
|
77
|
-
const synced = domHost.syncComponentElement(el, child, child.type, (child.props ?? {}) || {}, parentNamespace);
|
|
78
|
-
if (synced) {
|
|
79
|
-
if (synced instanceof Element) newKeyMap.set(key, synced);
|
|
80
|
-
return synced;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
} catch {}
|
|
84
|
-
const dom = domHost.createDOMNode(child, parentNamespace);
|
|
85
|
-
if (dom) {
|
|
86
|
-
if (dom instanceof Element) newKeyMap.set(key, dom);
|
|
87
|
-
return dom;
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
function reconcileUnkeyedChild(child, index, parent, resolveUnkeyedOnce, usedOldEls) {
|
|
92
|
-
const parentNamespace = getParentNamespace(parent);
|
|
93
|
-
const domHost = getRendererDOMHost();
|
|
94
|
-
try {
|
|
95
|
-
const existing = parent.childNodes[index];
|
|
96
|
-
if (typeof child === "string" || typeof child === "number") {
|
|
97
|
-
if (existing && existing.nodeType === 3) {
|
|
98
|
-
existing.data = String(child);
|
|
99
|
-
usedOldEls.add(existing);
|
|
100
|
-
return existing;
|
|
101
|
-
}
|
|
102
|
-
return domHost.createDOMNode(child, parentNamespace);
|
|
103
|
-
}
|
|
104
|
-
if (existing instanceof Element) {
|
|
105
|
-
const synced = trySyncComponentChild(existing, child, usedOldEls, parentNamespace);
|
|
106
|
-
if (synced) return synced;
|
|
107
|
-
}
|
|
108
|
-
if (existing instanceof Element && canReuseElement(existing, child, parentNamespace)) {
|
|
109
|
-
domHost.updateElementFromVnode(existing, child);
|
|
110
|
-
usedOldEls.add(existing);
|
|
111
|
-
return existing;
|
|
112
|
-
}
|
|
113
|
-
const avail = resolveUnkeyedOnce();
|
|
114
|
-
if (avail) {
|
|
115
|
-
const reuseResult = tryReuseElement(avail, child, usedOldEls, parentNamespace);
|
|
116
|
-
if (reuseResult) return reuseResult;
|
|
117
|
-
}
|
|
118
|
-
} catch {}
|
|
119
|
-
return domHost.createDOMNode(child, parentNamespace);
|
|
120
|
-
}
|
|
121
|
-
function isComponentVNode(child) {
|
|
122
|
-
return typeof child === "object" && child !== null && "type" in child && typeof child.type === "function";
|
|
123
|
-
}
|
|
124
|
-
function isControlBoundaryVNode(child) {
|
|
125
|
-
return typeof child === "object" && child !== null && "type" in child && child.type === __FOR_BOUNDARY__;
|
|
126
|
-
}
|
|
127
|
-
function prepareControlBoundaryResolution(child) {
|
|
128
|
-
if (!isControlBoundaryVNode(child)) return null;
|
|
129
|
-
const controlState = child._controlState ?? child._forState;
|
|
130
|
-
if (!controlState) return null;
|
|
131
|
-
if (controlState.kind === "for") {
|
|
132
|
-
const childrenVNodes = evaluateControlBoundaryChildren(controlState);
|
|
133
|
-
return childrenVNodes.length === 1 ? {
|
|
134
|
-
remount: false,
|
|
135
|
-
vnode: childrenVNodes[0] ?? null
|
|
136
|
-
} : null;
|
|
137
|
-
}
|
|
138
|
-
const previousActiveKey = controlState.activeKey;
|
|
139
|
-
const childrenVNodes = evaluateControlBoundaryChildren(controlState);
|
|
140
|
-
return {
|
|
141
|
-
remount: previousActiveKey !== null && controlState.activeKey !== previousActiveKey,
|
|
142
|
-
vnode: childrenVNodes[0] ?? null
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
function evaluateControlBoundaryChildren(controlState) {
|
|
146
|
-
if (controlState.kind === "for") return evaluateForState(controlState);
|
|
147
|
-
if (controlState.kind === "show") return evaluateShowState(controlState);
|
|
148
|
-
return evaluateCaseState(controlState);
|
|
149
|
-
}
|
|
150
|
-
function trySyncComponentChild(existing, child, usedOldEls, parentNamespace) {
|
|
151
|
-
if (!isComponentVNode(child)) return null;
|
|
152
|
-
const synced = getRendererDOMHost().syncComponentElement(existing, child, child.type, (child.props ?? {}) || {}, parentNamespace);
|
|
153
|
-
if (!synced) return null;
|
|
154
|
-
usedOldEls.add(existing);
|
|
155
|
-
usedOldEls.add(synced);
|
|
156
|
-
return synced;
|
|
157
|
-
}
|
|
158
|
-
function canReuseElement(existing, child, parentNamespace) {
|
|
159
|
-
if (!existing) return false;
|
|
160
|
-
if (typeof child !== "object" || child === null || !("type" in child)) return false;
|
|
161
|
-
const childObj = child;
|
|
162
|
-
const existingKey = existing.getAttribute("data-key");
|
|
163
|
-
return (existingKey === null || existingKey === void 0) && typeof childObj.type === "string" && canReuseIntrinsicElementInNamespace(existing, childObj.type, parentNamespace);
|
|
164
|
-
}
|
|
165
|
-
function collectUnkeyedElements(parent) {
|
|
166
|
-
const elements = [];
|
|
167
|
-
for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) if (ch.getAttribute("data-key") === null) elements.push(ch);
|
|
168
|
-
return elements;
|
|
169
|
-
}
|
|
170
|
-
function tryReuseElement(avail, child, usedOldEls, parentNamespace) {
|
|
171
|
-
if (typeof child === "string" || typeof child === "number") return null;
|
|
172
|
-
const synced = trySyncComponentChild(avail, child, usedOldEls, parentNamespace);
|
|
173
|
-
if (synced) return synced;
|
|
174
|
-
if (typeof child === "object" && child !== null && "type" in child) {
|
|
175
|
-
const childObj = child;
|
|
176
|
-
if (typeof childObj.type === "string" && canReuseIntrinsicElementInNamespace(avail, childObj.type, parentNamespace)) {
|
|
177
|
-
getRendererDOMHost().updateElementFromVnode(avail, child);
|
|
178
|
-
usedOldEls.add(avail);
|
|
179
|
-
return avail;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
//#endregion
|
|
185
|
-
export { collectUnkeyedElements, createOldElResolver, reconcileSingleChild };
|
|
186
|
-
|
|
187
|
-
//# sourceMappingURL=reconcile-resolution.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-resolution.js","names":[],"sources":["../../src/renderer/reconcile-resolution.ts"],"sourcesContent":["import { __FOR_BOUNDARY__ } from '../common/vnode';\nimport type { Props } from '../common/props';\nimport type { ComponentFunction } from '../runtime';\nimport {\n evaluateCaseState,\n evaluateShowState,\n type ControlBoundaryState,\n} from '../runtime';\nimport { evaluateForState } from '../runtime';\nimport { getRendererDOMHost, type ElementWithContext } from './dom-host';\nimport {\n canReuseIntrinsicElementInNamespace,\n getParentNamespace,\n} from './namespaces';\nimport type { DOMElement, VNode } from './types';\nimport { extractKey } from './utils';\n\ntype VnodeObj = VNode & { type?: unknown; props?: Record<string, unknown> };\ntype ComponentVNode = DOMElement & { type: ComponentFunction };\n\nexport function createOldElResolver(\n parent: Element,\n oldKeyMap: Map<string | number, Element> | undefined,\n usedOldEls: WeakSet<Node>\n): (k: string | number) => Element | undefined {\n return (k: string | number) => {\n if (!oldKeyMap) return undefined;\n\n const direct = oldKeyMap.get(k);\n if (direct && !usedOldEls.has(direct)) {\n usedOldEls.add(direct);\n return direct;\n }\n\n const s = String(k);\n const byString = oldKeyMap.get(s);\n if (byString && !usedOldEls.has(byString)) {\n usedOldEls.add(byString);\n return byString;\n }\n\n const n = Number(s);\n if (!Number.isNaN(n)) {\n const byNum = oldKeyMap.get(n);\n if (byNum && !usedOldEls.has(byNum)) {\n usedOldEls.add(byNum);\n return byNum;\n }\n }\n\n return scanForElementByKey(parent, k, s, usedOldEls);\n };\n}\n\nfunction scanForElementByKey(\n parent: Element,\n k: string | number,\n keyStr: string,\n usedOldEls: WeakSet<Node>\n): Element | undefined {\n try {\n for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {\n if (usedOldEls.has(ch)) continue;\n const attr = ch.getAttribute('data-key');\n if (attr === keyStr) {\n usedOldEls.add(ch);\n return ch;\n }\n if (attr !== null) {\n const numAttr = Number(attr);\n if (!Number.isNaN(numAttr) && numAttr === (k as number)) {\n usedOldEls.add(ch);\n return ch;\n }\n }\n }\n } catch {\n // Ignore.\n }\n return undefined;\n}\n\nexport function reconcileSingleChild(\n child: VNode,\n index: number,\n parent: Element,\n resolveOldElOnce: (k: string | number) => Element | undefined,\n resolveUnkeyedOnce: () => Element | undefined,\n usedOldEls: WeakSet<Node>,\n newKeyMap: Map<string | number, Element>\n): Node | null {\n const resolvedControlBoundary = prepareControlBoundaryResolution(child);\n if (resolvedControlBoundary !== null) {\n if (resolvedControlBoundary.remount) {\n return getRendererDOMHost().createDOMNode(\n resolvedControlBoundary.vnode,\n getParentNamespace(parent)\n );\n }\n\n return reconcileSingleChild(\n resolvedControlBoundary.vnode,\n index,\n parent,\n resolveOldElOnce,\n resolveUnkeyedOnce,\n usedOldEls,\n newKeyMap\n );\n }\n\n const key = extractKey(child);\n\n if (key !== undefined) {\n return reconcileKeyedChild(child, key, parent, resolveOldElOnce, newKeyMap);\n }\n\n return reconcileUnkeyedChild(\n child,\n index,\n parent,\n resolveUnkeyedOnce,\n usedOldEls\n );\n}\n\nfunction reconcileKeyedChild(\n child: VNode,\n key: string | number,\n parent: Element,\n resolveOldElOnce: (k: string | number) => Element | undefined,\n newKeyMap: Map<string | number, Element>\n): Node | null {\n const el = resolveOldElOnce(key);\n const parentNamespace = getParentNamespace(parent);\n const domHost = getRendererDOMHost();\n\n if (el && el.parentElement === parent) {\n try {\n const childObj = child as VnodeObj;\n if (\n childObj &&\n typeof childObj === 'object' &&\n typeof childObj.type === 'string'\n ) {\n if (\n canReuseIntrinsicElementInNamespace(\n el,\n childObj.type,\n parentNamespace\n )\n ) {\n domHost.updateElementFromVnode(el, child);\n newKeyMap.set(key, el);\n return el;\n }\n }\n if (isComponentVNode(child)) {\n const synced = domHost.syncComponentElement(\n el,\n child as unknown as ElementWithContext,\n child.type,\n ((child.props ?? {}) as Props) || {},\n parentNamespace\n );\n if (synced) {\n if (synced instanceof Element) newKeyMap.set(key, synced);\n return synced;\n }\n }\n } catch {\n // Fall through to replacement.\n }\n }\n\n const dom = domHost.createDOMNode(child, parentNamespace);\n if (dom) {\n if (dom instanceof Element) newKeyMap.set(key, dom);\n return dom;\n }\n\n return null;\n}\n\nfunction reconcileUnkeyedChild(\n child: VNode,\n index: number,\n parent: Element,\n resolveUnkeyedOnce: () => Element | undefined,\n usedOldEls: WeakSet<Node>\n): Node | null {\n const parentNamespace = getParentNamespace(parent);\n const domHost = getRendererDOMHost();\n\n try {\n const existing = parent.childNodes[index] as Node | undefined;\n\n if (typeof child === 'string' || typeof child === 'number') {\n if (existing && existing.nodeType === 3) {\n (existing as Text).data = String(child);\n usedOldEls.add(existing);\n return existing;\n }\n return domHost.createDOMNode(child, parentNamespace);\n }\n\n if (existing instanceof Element) {\n const synced = trySyncComponentChild(\n existing,\n child,\n usedOldEls,\n parentNamespace\n );\n if (synced) return synced;\n }\n\n if (\n existing instanceof Element &&\n canReuseElement(existing, child, parentNamespace)\n ) {\n domHost.updateElementFromVnode(existing, child);\n usedOldEls.add(existing);\n return existing;\n }\n\n const avail = resolveUnkeyedOnce();\n if (avail) {\n const reuseResult = tryReuseElement(\n avail,\n child,\n usedOldEls,\n parentNamespace\n );\n if (reuseResult) return reuseResult;\n }\n } catch {\n // Fall through to create new.\n }\n\n return domHost.createDOMNode(child, parentNamespace);\n}\n\nfunction isComponentVNode(child: VNode): child is ComponentVNode {\n return (\n typeof child === 'object' &&\n child !== null &&\n 'type' in child &&\n typeof (child as VnodeObj).type === 'function'\n );\n}\n\nfunction isControlBoundaryVNode(child: VNode): child is DOMElement {\n return (\n typeof child === 'object' &&\n child !== null &&\n 'type' in child &&\n (child as VnodeObj).type === __FOR_BOUNDARY__\n );\n}\n\nfunction prepareControlBoundaryResolution(child: VNode): {\n remount: boolean;\n vnode: VNode | null;\n} | null {\n if (!isControlBoundaryVNode(child)) {\n return null;\n }\n\n const controlState = child._controlState ?? child._forState;\n if (!controlState) {\n return null;\n }\n if (controlState.kind === 'for') {\n const childrenVNodes = evaluateControlBoundaryChildren(controlState);\n return childrenVNodes.length === 1\n ? { remount: false, vnode: childrenVNodes[0] ?? null }\n : null;\n }\n\n const previousActiveKey = controlState.activeKey;\n const childrenVNodes = evaluateControlBoundaryChildren(controlState);\n\n return {\n remount:\n previousActiveKey !== null &&\n controlState.activeKey !== previousActiveKey,\n vnode: childrenVNodes[0] ?? null,\n };\n}\n\nfunction evaluateControlBoundaryChildren(\n controlState: ControlBoundaryState\n): VNode[] {\n if (controlState.kind === 'for') {\n return evaluateForState(controlState);\n }\n\n if (controlState.kind === 'show') {\n return evaluateShowState(controlState);\n }\n\n return evaluateCaseState(controlState);\n}\n\nfunction trySyncComponentChild(\n existing: Element,\n child: VNode,\n usedOldEls: WeakSet<Node>,\n parentNamespace: string | undefined\n): Node | null {\n if (!isComponentVNode(child)) return null;\n\n const synced = getRendererDOMHost().syncComponentElement(\n existing,\n child as unknown as ElementWithContext,\n child.type,\n ((child.props ?? {}) as Props) || {},\n parentNamespace\n );\n if (!synced) return null;\n\n usedOldEls.add(existing);\n usedOldEls.add(synced);\n return synced;\n}\n\nfunction canReuseElement(\n existing: Element | undefined,\n child: VNode,\n parentNamespace: string | undefined\n): boolean {\n if (!existing) return false;\n if (typeof child !== 'object' || child === null || !('type' in child))\n return false;\n\n const childObj = child as VnodeObj;\n const existingKey = existing.getAttribute('data-key');\n const hasNoKey = existingKey === null || existingKey === undefined;\n\n return (\n hasNoKey &&\n typeof childObj.type === 'string' &&\n canReuseIntrinsicElementInNamespace(\n existing,\n childObj.type,\n parentNamespace\n )\n );\n}\n\nexport function collectUnkeyedElements(parent: Element): Element[] {\n const elements: Element[] = [];\n for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {\n if (ch.getAttribute('data-key') === null) elements.push(ch);\n }\n return elements;\n}\n\nfunction tryReuseElement(\n avail: Element,\n child: VNode,\n usedOldEls: WeakSet<Node>,\n parentNamespace: string | undefined\n): Node | null {\n if (typeof child === 'string' || typeof child === 'number') {\n return null;\n }\n\n const synced = trySyncComponentChild(\n avail,\n child,\n usedOldEls,\n parentNamespace\n );\n if (synced) {\n return synced;\n }\n\n if (typeof child === 'object' && child !== null && 'type' in child) {\n const childObj = child as VnodeObj;\n if (\n typeof childObj.type === 'string' &&\n canReuseIntrinsicElementInNamespace(avail, childObj.type, parentNamespace)\n ) {\n getRendererDOMHost().updateElementFromVnode(avail, child);\n usedOldEls.add(avail);\n return avail;\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { buildDOMKeyMap, extractKeyedVnodes } from "./keyed-children.js";
|
|
2
|
-
import { keyedElements } from "./keyed.js";
|
|
3
|
-
import { commitReconciliation } from "./reconcile-commit.js";
|
|
4
|
-
import { tryFastPaths } from "./reconcile-fastpaths.js";
|
|
5
|
-
import { collectUnkeyedElements, createOldElResolver, reconcileSingleChild } from "./reconcile-resolution.js";
|
|
6
|
-
function reconcileKeyedChildren(parent, newChildren, oldKeyMap) {
|
|
7
|
-
const keyedVnodes = extractKeyedVnodes(newChildren);
|
|
8
|
-
const ensuredOldKeyMap = oldKeyMap || buildDOMKeyMap(parent);
|
|
9
|
-
const fastPathResult = tryFastPaths(parent, newChildren, keyedVnodes, ensuredOldKeyMap);
|
|
10
|
-
if (fastPathResult) return fastPathResult;
|
|
11
|
-
return performFullReconciliation(parent, newChildren, ensuredOldKeyMap);
|
|
12
|
-
}
|
|
13
|
-
function performFullReconciliation(parent, newChildren, oldKeyMap) {
|
|
14
|
-
const newKeyMap = /* @__PURE__ */ new Map();
|
|
15
|
-
const finalNodes = [];
|
|
16
|
-
const usedOldEls = /* @__PURE__ */ new WeakSet();
|
|
17
|
-
const resolveOldElOnce = createOldElResolver(parent, oldKeyMap, usedOldEls);
|
|
18
|
-
const unkeyedEls = collectUnkeyedElements(parent);
|
|
19
|
-
let unkeyedIndex = 0;
|
|
20
|
-
const resolveUnkeyedOnce = () => {
|
|
21
|
-
while (unkeyedIndex < unkeyedEls.length) {
|
|
22
|
-
const candidate = unkeyedEls[unkeyedIndex++];
|
|
23
|
-
if (!usedOldEls.has(candidate)) return candidate;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
for (let i = 0; i < newChildren.length; i++) {
|
|
27
|
-
const child = newChildren[i];
|
|
28
|
-
const node = reconcileSingleChild(child, i, parent, resolveOldElOnce, resolveUnkeyedOnce, usedOldEls, newKeyMap);
|
|
29
|
-
if (node) finalNodes.push(node);
|
|
30
|
-
}
|
|
31
|
-
if (typeof document === "undefined") return newKeyMap;
|
|
32
|
-
commitReconciliation(parent, finalNodes);
|
|
33
|
-
keyedElements.delete(parent);
|
|
34
|
-
return newKeyMap;
|
|
35
|
-
}
|
|
36
|
-
//#endregion
|
|
37
|
-
export { reconcileKeyedChildren };
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=reconcile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.js","names":[],"sources":["../../src/renderer/reconcile.ts"],"sourcesContent":["/**\n * RENDERER & RECONCILIATION INVARIANTS (LOCKED)\n *\n * 1. DOM order derives only from current vnode order.\n * 2. VNode identity is not vnode stability.\n * 3. Keyed reconciliation is element-only.\n * 4. Primitive children map to text nodes.\n * 5. Fast paths must prove eligibility and fall back cleanly.\n * 6. Cleanup is position-independent.\n * 7. For-boundaries and keyed lists obey the same ordering rules.\n */\n\nimport type { VNode } from './types';\nimport { keyedElements } from './keyed';\nimport { buildDOMKeyMap, extractKeyedVnodes } from './keyed-children';\nimport { commitReconciliation } from './reconcile-commit';\nimport { tryFastPaths } from './reconcile-fastpaths';\nimport {\n collectUnkeyedElements,\n createOldElResolver,\n reconcileSingleChild,\n} from './reconcile-resolution';\n\nexport const IS_DOM_AVAILABLE = typeof document !== 'undefined';\n\nexport function reconcileKeyedChildren(\n parent: Element,\n newChildren: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> {\n const keyedVnodes = extractKeyedVnodes(newChildren);\n const ensuredOldKeyMap = oldKeyMap || buildDOMKeyMap(parent);\n\n const fastPathResult = tryFastPaths(\n parent,\n newChildren,\n keyedVnodes,\n ensuredOldKeyMap\n );\n if (fastPathResult) {\n return fastPathResult;\n }\n\n return performFullReconciliation(parent, newChildren, ensuredOldKeyMap);\n}\n\nfunction performFullReconciliation(\n parent: Element,\n newChildren: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> {\n const newKeyMap = new Map<string | number, Element>();\n const finalNodes: Node[] = [];\n const usedOldEls = new WeakSet<Node>();\n\n const resolveOldElOnce = createOldElResolver(parent, oldKeyMap, usedOldEls);\n const unkeyedEls = collectUnkeyedElements(parent);\n let unkeyedIndex = 0;\n const resolveUnkeyedOnce = (): Element | undefined => {\n while (unkeyedIndex < unkeyedEls.length) {\n const candidate = unkeyedEls[unkeyedIndex++];\n if (!usedOldEls.has(candidate)) return candidate;\n }\n return undefined;\n };\n\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i];\n const node = reconcileSingleChild(\n child,\n i,\n parent,\n resolveOldElOnce,\n resolveUnkeyedOnce,\n usedOldEls,\n newKeyMap\n );\n if (node) finalNodes.push(node);\n }\n\n if (typeof document === 'undefined') return newKeyMap;\n\n commitReconciliation(parent, finalNodes);\n keyedElements.delete(parent);\n\n return newKeyMap;\n}\n"],"mappings":";;;;;AAyBA,SAAgB,uBACd,QACA,aACA,WAC+B;CAC/B,MAAM,cAAc,mBAAmB,WAAW;CAClD,MAAM,mBAAmB,aAAa,eAAe,MAAM;CAE3D,MAAM,iBAAiB,aACrB,QACA,aACA,aACA,gBACF;CACA,IAAI,gBACF,OAAO;CAGT,OAAO,0BAA0B,QAAQ,aAAa,gBAAgB;AACxE;AAEA,SAAS,0BACP,QACA,aACA,WAC+B;CAC/B,MAAM,4BAAY,IAAI,IAA8B;CACpD,MAAM,aAAqB,CAAC;CAC5B,MAAM,6BAAa,IAAI,QAAc;CAErC,MAAM,mBAAmB,oBAAoB,QAAQ,WAAW,UAAU;CAC1E,MAAM,aAAa,uBAAuB,MAAM;CAChD,IAAI,eAAe;CACnB,MAAM,2BAAgD;EACpD,OAAO,eAAe,WAAW,QAAQ;GACvC,MAAM,YAAY,WAAW;GAC7B,IAAI,CAAC,WAAW,IAAI,SAAS,GAAG,OAAO;EACzC;CAEF;CAEA,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,MAAM,QAAQ,YAAY;EAC1B,MAAM,OAAO,qBACX,OACA,GACA,QACA,kBACA,oBACA,YACA,SACF;EACA,IAAI,MAAM,WAAW,KAAK,IAAI;CAChC;CAEA,IAAI,OAAO,aAAa,aAAa,OAAO;CAE5C,qBAAqB,QAAQ,UAAU;CACvC,cAAc,OAAO,MAAM;CAE3B,OAAO;AACT"}
|