@askrjs/askr 0.0.35 → 0.0.36
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.js.map +1 -1
- package/dist/bench/components/benchmark-table.js.map +1 -1
- package/dist/benchmark.js +2 -2
- package/dist/benchmark.js.map +1 -1
- package/dist/bin/askr-ssg.js.map +1 -1
- package/dist/boot/index.d.ts.map +1 -1
- package/dist/boot/index.js +9 -29
- package/dist/boot/index.js.map +1 -1
- package/dist/common/control.js.map +1 -1
- package/dist/common/env.js.map +1 -1
- package/dist/common/ssr-errors.js.map +1 -1
- package/dist/common/vnode.js.map +1 -1
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/link.js.map +1 -1
- package/dist/control/case.js.map +1 -1
- package/dist/control/for.js.map +1 -1
- package/dist/control/shared.js.map +1 -1
- package/dist/control/show.js.map +1 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +165 -23
- package/dist/data/index.js.map +1 -1
- package/dist/dev/invariant.js.map +1 -1
- package/dist/dev/logger.js.map +1 -1
- package/dist/foundations/icon/icon.js.map +1 -1
- package/dist/foundations/interactions/dismissable.js.map +1 -1
- package/dist/foundations/interactions/focusable.js.map +1 -1
- package/dist/foundations/interactions/hoverable.js.map +1 -1
- package/dist/foundations/interactions/interaction-policy.js.map +1 -1
- package/dist/foundations/interactions/pressable.js.map +1 -1
- package/dist/foundations/interactions/roving-focus.js.map +1 -1
- package/dist/foundations/state/controllable.js.map +1 -1
- package/dist/foundations/structures/collection.js.map +1 -1
- package/dist/foundations/structures/layer.js.map +1 -1
- package/dist/foundations/structures/layout.js.map +1 -1
- package/dist/foundations/structures/portal.js.map +1 -1
- package/dist/foundations/structures/presence.js.map +1 -1
- package/dist/foundations/structures/slot.js.map +1 -1
- package/dist/foundations/utilities/aria.js.map +1 -1
- package/dist/foundations/utilities/compose-handlers.js.map +1 -1
- package/dist/foundations/utilities/compose-ref.js.map +1 -1
- package/dist/foundations/utilities/merge-props.js.map +1 -1
- package/dist/foundations/utilities/use-id.js.map +1 -1
- package/dist/fx/fx.js.map +1 -1
- package/dist/fx/timing.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/jsx/utils.js.map +1 -1
- package/dist/jsx-dev-runtime.js.map +1 -1
- package/dist/jsx-runtime.js.map +1 -1
- package/dist/renderer/children.js.map +1 -1
- package/dist/renderer/cleanup.js.map +1 -1
- package/dist/renderer/dom.js +128 -53
- package/dist/renderer/dom.js.map +1 -1
- package/dist/renderer/evaluate.js +7 -0
- package/dist/renderer/evaluate.js.map +1 -1
- package/dist/renderer/fastpath.js.map +1 -1
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/keyed.js +1 -1
- package/dist/renderer/keyed.js.map +1 -1
- package/dist/renderer/reconcile.js.map +1 -1
- package/dist/renderer/utils.js.map +1 -1
- package/dist/router/index.d.ts +2 -2
- package/dist/router/index.js +2 -2
- package/dist/router/match.js.map +1 -1
- package/dist/router/navigate.d.ts.map +1 -1
- package/dist/router/navigate.js +4 -2
- package/dist/router/navigate.js.map +1 -1
- package/dist/router/policy.js.map +1 -1
- package/dist/router/route-context.js.map +1 -1
- package/dist/router/route.d.ts +1 -1
- package/dist/router/route.d.ts.map +1 -1
- package/dist/router/route.js +3 -34
- package/dist/router/route.js.map +1 -1
- package/dist/runtime/child-scope.d.ts +1 -0
- package/dist/runtime/child-scope.d.ts.map +1 -1
- package/dist/runtime/child-scope.js +2 -0
- package/dist/runtime/child-scope.js.map +1 -1
- package/dist/runtime/component.js +1 -1
- package/dist/runtime/component.js.map +1 -1
- package/dist/runtime/context.js.map +1 -1
- package/dist/runtime/control.js.map +1 -1
- package/dist/runtime/derive.d.ts +2 -1
- package/dist/runtime/derive.d.ts.map +1 -1
- package/dist/runtime/derive.js +15 -10
- package/dist/runtime/derive.js.map +1 -1
- package/dist/runtime/dev-namespace.js.map +1 -1
- package/dist/runtime/effect.d.ts.map +1 -1
- package/dist/runtime/effect.js +34 -9
- package/dist/runtime/effect.js.map +1 -1
- package/dist/runtime/events.js.map +1 -1
- package/dist/runtime/execution-model.js.map +1 -1
- package/dist/runtime/fastlane.js.map +1 -1
- package/dist/runtime/for-bench.d.ts +1 -1
- package/dist/runtime/for-bench.d.ts.map +1 -1
- package/dist/runtime/for-bench.js +15 -14
- package/dist/runtime/for-bench.js.map +1 -1
- package/dist/runtime/for.d.ts +1 -0
- package/dist/runtime/for.d.ts.map +1 -1
- package/dist/runtime/for.js +63 -16
- package/dist/runtime/for.js.map +1 -1
- package/dist/runtime/operations.d.ts.map +1 -1
- package/dist/runtime/operations.js +9 -7
- package/dist/runtime/operations.js.map +1 -1
- package/dist/runtime/perf-metrics.js +8 -2
- package/dist/runtime/perf-metrics.js.map +1 -1
- package/dist/runtime/readable.js.map +1 -1
- package/dist/runtime/resource-cell.js +3 -2
- package/dist/runtime/resource-cell.js.map +1 -1
- package/dist/runtime/scheduler.d.ts +0 -1
- package/dist/runtime/scheduler.d.ts.map +1 -1
- package/dist/runtime/scheduler.js +6 -19
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/selector.d.ts.map +1 -1
- package/dist/runtime/selector.js +6 -4
- package/dist/runtime/selector.js.map +1 -1
- package/dist/runtime/snapshot-source.d.ts +10 -0
- package/dist/runtime/snapshot-source.d.ts.map +1 -0
- package/dist/runtime/snapshot-source.js +17 -0
- package/dist/runtime/snapshot-source.js.map +1 -0
- package/dist/runtime/ssr-bridge.js.map +1 -1
- package/dist/runtime/state.d.ts.map +1 -1
- package/dist/runtime/state.js +1 -5
- package/dist/runtime/state.js.map +1 -1
- package/dist/ssg/batch-render.js.map +1 -1
- package/dist/ssg/create-static-gen.js.map +1 -1
- package/dist/ssg/generate-metadata.js.map +1 -1
- package/dist/ssg/incremental-manifest.js.map +1 -1
- package/dist/ssg/resolve-ssg-data.js.map +1 -1
- package/dist/ssg/route-utils.js.map +1 -1
- package/dist/ssg/write-static-files.js.map +1 -1
- package/dist/ssr/attrs.js.map +1 -1
- package/dist/ssr/context.d.ts +1 -0
- package/dist/ssr/context.d.ts.map +1 -1
- package/dist/ssr/context.js +3 -0
- package/dist/ssr/context.js.map +1 -1
- package/dist/ssr/escape.js +56 -16
- package/dist/ssr/escape.js.map +1 -1
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +15 -3
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/render-keys.js.map +1 -1
- package/dist/ssr/sink.js.map +1 -1
- package/dist/ssr/stream-render.js +14 -2
- package/dist/ssr/stream-render.js.map +1 -1
- package/package.json +8 -6
|
@@ -69,47 +69,48 @@ function resetBenchMetricsLive(metrics) {
|
|
|
69
69
|
publishBenchMetrics(metrics);
|
|
70
70
|
}
|
|
71
71
|
const benchMetrics = BENCH_BUILD_ENABLED ? createInitialBenchMetrics() : null;
|
|
72
|
-
const recordBenchEventLive = (event) => {
|
|
72
|
+
const recordBenchEventLive = (event, delta = 1) => {
|
|
73
73
|
if (!isBenchRuntimeEnabled() || !benchMetrics) return;
|
|
74
|
+
if (delta === 0) return;
|
|
74
75
|
switch (event) {
|
|
75
76
|
case "itemCreated":
|
|
76
|
-
benchMetrics.itemsCreated
|
|
77
|
+
benchMetrics.itemsCreated += delta;
|
|
77
78
|
break;
|
|
78
79
|
case "itemReused":
|
|
79
|
-
benchMetrics.itemsReused
|
|
80
|
+
benchMetrics.itemsReused += delta;
|
|
80
81
|
break;
|
|
81
82
|
case "itemRemoved":
|
|
82
|
-
benchMetrics.itemsRemoved
|
|
83
|
+
benchMetrics.itemsRemoved += delta;
|
|
83
84
|
break;
|
|
84
85
|
case "itemMoved":
|
|
85
|
-
benchMetrics.itemsMoved
|
|
86
|
+
benchMetrics.itemsMoved += delta;
|
|
86
87
|
break;
|
|
87
88
|
case "rowFactory":
|
|
88
|
-
benchMetrics.rowFactoryInvocations
|
|
89
|
+
benchMetrics.rowFactoryInvocations += delta;
|
|
89
90
|
break;
|
|
90
91
|
case "keyLookup":
|
|
91
|
-
benchMetrics.keyLookups
|
|
92
|
+
benchMetrics.keyLookups += delta;
|
|
92
93
|
break;
|
|
93
94
|
case "keyHit":
|
|
94
|
-
benchMetrics.keyHits
|
|
95
|
+
benchMetrics.keyHits += delta;
|
|
95
96
|
break;
|
|
96
97
|
case "keyMiss":
|
|
97
|
-
benchMetrics.keyMisses
|
|
98
|
+
benchMetrics.keyMisses += delta;
|
|
98
99
|
break;
|
|
99
100
|
case "domInsert":
|
|
100
|
-
benchMetrics.domInserts
|
|
101
|
+
benchMetrics.domInserts += delta;
|
|
101
102
|
break;
|
|
102
103
|
case "domRemove":
|
|
103
|
-
benchMetrics.domRemoves
|
|
104
|
+
benchMetrics.domRemoves += delta;
|
|
104
105
|
break;
|
|
105
106
|
case "domMove":
|
|
106
|
-
benchMetrics.domMoves
|
|
107
|
+
benchMetrics.domMoves += delta;
|
|
107
108
|
break;
|
|
108
109
|
case "domAttrSet":
|
|
109
|
-
benchMetrics.domAttrSets
|
|
110
|
+
benchMetrics.domAttrSets += delta;
|
|
110
111
|
break;
|
|
111
112
|
case "domTextSet":
|
|
112
|
-
benchMetrics.domTextSets
|
|
113
|
+
benchMetrics.domTextSets += delta;
|
|
113
114
|
break;
|
|
114
115
|
}
|
|
115
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for-bench.js","names":[],"sources":["../../src/runtime/for-bench.ts"],"sourcesContent":["import { isRuntimeEnvFlagEnabled } from '../common/env';\n\nconst BENCH_BUILD_ENABLED = isRuntimeEnvFlagEnabled('ASKR_BENCH');\n\ntype BenchGlobal = typeof globalThis & {\n __ASKR_BENCH__?: boolean;\n __ASKR_FOR_BENCH__?: BenchMetrics;\n};\n\nexport interface BenchMetrics {\n itemsCreated: number;\n itemsReused: number;\n itemsRemoved: number;\n itemsMoved: number;\n rowFactoryInvocations: number;\n keyLookups: number;\n keyHits: number;\n keyMisses: number;\n domInserts: number;\n domRemoves: number;\n domMoves: number;\n domAttrSets: number;\n domTextSets: number;\n domNodesCreated: number;\n listenerBindings: number;\n reactivePropsMounted: number;\n replaceChildrenCommits: number;\n bulkClearCommits: number;\n reconcilePhaseMs: number;\n domCommitPhaseMs: number;\n fastLaneName: string | null;\n}\n\nexport type BenchEvent =\n | 'itemCreated'\n | 'itemReused'\n | 'itemRemoved'\n | 'itemMoved'\n | 'rowFactory'\n | 'keyLookup'\n | 'keyHit'\n | 'keyMiss'\n | 'domInsert'\n | 'domRemove'\n | 'domMove'\n | 'domAttrSet'\n | 'domTextSet';\n\nfunction createInitialBenchMetrics(): BenchMetrics {\n return {\n itemsCreated: 0,\n itemsReused: 0,\n itemsRemoved: 0,\n itemsMoved: 0,\n rowFactoryInvocations: 0,\n keyLookups: 0,\n keyHits: 0,\n keyMisses: 0,\n domInserts: 0,\n domRemoves: 0,\n domMoves: 0,\n domAttrSets: 0,\n domTextSets: 0,\n domNodesCreated: 0,\n listenerBindings: 0,\n reactivePropsMounted: 0,\n replaceChildrenCommits: 0,\n bulkClearCommits: 0,\n reconcilePhaseMs: 0,\n domCommitPhaseMs: 0,\n fastLaneName: null,\n };\n}\n\nconst emptyBenchMetrics = createInitialBenchMetrics();\ntype BenchMetricScope = 'coldCreate' | 'fullClear';\ntype BenchCounter =\n | 'domNodesCreated'\n | 'listenerBindings'\n | 'reactivePropsMounted'\n | 'replaceChildrenCommits'\n | 'bulkClearCommits';\nlet activeBenchMetricScope: BenchMetricScope | null = null;\n\nfunction isBenchRuntimeEnabled(): boolean {\n if (!BENCH_BUILD_ENABLED) {\n return false;\n }\n\n try {\n return !!(globalThis as BenchGlobal).__ASKR_BENCH__;\n } catch {\n return false;\n }\n}\n\nfunction publishBenchMetrics(metrics: BenchMetrics): void {\n if (!isBenchRuntimeEnabled()) {\n return;\n }\n\n (globalThis as BenchGlobal).__ASKR_FOR_BENCH__ = { ...metrics };\n}\n\nconst flushBenchMetricsLive = (): void => {\n if (!benchMetrics) {\n return;\n }\n\n publishBenchMetrics(benchMetrics);\n};\n\nfunction resetBenchMetricsLive(metrics: BenchMetrics): void {\n metrics.itemsCreated = 0;\n metrics.itemsReused = 0;\n metrics.itemsRemoved = 0;\n metrics.itemsMoved = 0;\n metrics.rowFactoryInvocations = 0;\n metrics.keyLookups = 0;\n metrics.keyHits = 0;\n metrics.keyMisses = 0;\n metrics.domInserts = 0;\n metrics.domRemoves = 0;\n metrics.domMoves = 0;\n metrics.domAttrSets = 0;\n metrics.domTextSets = 0;\n metrics.domNodesCreated = 0;\n metrics.listenerBindings = 0;\n metrics.reactivePropsMounted = 0;\n metrics.replaceChildrenCommits = 0;\n metrics.bulkClearCommits = 0;\n metrics.reconcilePhaseMs = 0;\n metrics.domCommitPhaseMs = 0;\n metrics.fastLaneName = null;\n publishBenchMetrics(metrics);\n}\n\nconst benchMetrics = BENCH_BUILD_ENABLED ? createInitialBenchMetrics() : null;\n\nconst recordBenchEventLive = (event: BenchEvent): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n switch (event) {\n case 'itemCreated':\n benchMetrics.itemsCreated++;\n break;\n case 'itemReused':\n benchMetrics.itemsReused++;\n break;\n case 'itemRemoved':\n benchMetrics.itemsRemoved++;\n break;\n case 'itemMoved':\n benchMetrics.itemsMoved++;\n break;\n case 'rowFactory':\n benchMetrics.rowFactoryInvocations++;\n break;\n case 'keyLookup':\n benchMetrics.keyLookups++;\n break;\n case 'keyHit':\n benchMetrics.keyHits++;\n break;\n case 'keyMiss':\n benchMetrics.keyMisses++;\n break;\n case 'domInsert':\n benchMetrics.domInserts++;\n break;\n case 'domRemove':\n benchMetrics.domRemoves++;\n break;\n case 'domMove':\n benchMetrics.domMoves++;\n break;\n case 'domAttrSet':\n benchMetrics.domAttrSets++;\n break;\n case 'domTextSet':\n benchMetrics.domTextSets++;\n break;\n }\n};\n\nconst recordBenchFastLaneLive = (name: string): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n benchMetrics.fastLaneName = name;\n};\n\nconst recordBenchCounterLive = (counter: BenchCounter, delta = 1): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics || delta === 0) {\n return;\n }\n\n switch (counter) {\n case 'domNodesCreated':\n benchMetrics.domNodesCreated += delta;\n break;\n case 'listenerBindings':\n benchMetrics.listenerBindings += delta;\n break;\n case 'reactivePropsMounted':\n benchMetrics.reactivePropsMounted += delta;\n break;\n case 'replaceChildrenCommits':\n benchMetrics.replaceChildrenCommits += delta;\n break;\n case 'bulkClearCommits':\n benchMetrics.bulkClearCommits += delta;\n break;\n }\n};\n\nfunction withBenchMetricScopeLive<T>(scope: BenchMetricScope, run: () => T): T {\n if (!isBenchRuntimeEnabled()) {\n return run();\n }\n\n const previousScope = activeBenchMetricScope;\n activeBenchMetricScope = scope;\n\n try {\n return run();\n } finally {\n activeBenchMetricScope = previousScope;\n }\n}\n\nconst isBenchMetricScopeActiveLive = (scope: BenchMetricScope): boolean =>\n isBenchRuntimeEnabled() && activeBenchMetricScope === scope;\n\nconst recordBenchTimingLive = (\n phase: 'reconcile' | 'domCommit',\n ms: number\n): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n if (phase === 'reconcile') {\n benchMetrics.reconcilePhaseMs = ms;\n } else {\n benchMetrics.domCommitPhaseMs = ms;\n }\n};\n\nconst getBenchMetricsLive = (): BenchMetrics =>\n benchMetrics ? { ...benchMetrics } : { ...emptyBenchMetrics };\n\nexport const resetBenchMetrics = BENCH_BUILD_ENABLED\n ? (): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n resetBenchMetricsLive(benchMetrics);\n }\n : (): void => {};\n\nexport const recordBenchEvent = BENCH_BUILD_ENABLED\n ? recordBenchEventLive\n : (_event: BenchEvent): void => {};\n\nexport const recordBenchFastLane = BENCH_BUILD_ENABLED\n ? recordBenchFastLaneLive\n : (_name: string): void => {};\n\nexport const recordBenchTiming = BENCH_BUILD_ENABLED\n ? recordBenchTimingLive\n : (_phase: 'reconcile' | 'domCommit', _ms: number): void => {};\n\nexport const recordBenchCounter = BENCH_BUILD_ENABLED\n ? recordBenchCounterLive\n : (_counter: BenchCounter, _delta = 1): void => {};\n\nexport const withBenchMetricScope = BENCH_BUILD_ENABLED\n ? withBenchMetricScopeLive\n : <T>(_scope: BenchMetricScope, run: () => T): T => run();\n\nexport const isBenchMetricScopeActive = BENCH_BUILD_ENABLED\n ? isBenchMetricScopeActiveLive\n : (_scope: BenchMetricScope): boolean => false;\n\nexport const getBenchMetrics = BENCH_BUILD_ENABLED\n ? getBenchMetricsLive\n : (): BenchMetrics => ({ ...emptyBenchMetrics });\n\nexport const flushBenchMetrics = BENCH_BUILD_ENABLED\n ? flushBenchMetricsLive\n : (): void => {};\n\nexport const isBenchBuildEnabled = (): boolean => BENCH_BUILD_ENABLED;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"for-bench.js","names":[],"sources":["../../src/runtime/for-bench.ts"],"sourcesContent":["import { isRuntimeEnvFlagEnabled } from '../common/env';\n\nconst BENCH_BUILD_ENABLED = isRuntimeEnvFlagEnabled('ASKR_BENCH');\n\ntype BenchGlobal = typeof globalThis & {\n __ASKR_BENCH__?: boolean;\n __ASKR_FOR_BENCH__?: BenchMetrics;\n};\n\nexport interface BenchMetrics {\n itemsCreated: number;\n itemsReused: number;\n itemsRemoved: number;\n itemsMoved: number;\n rowFactoryInvocations: number;\n keyLookups: number;\n keyHits: number;\n keyMisses: number;\n domInserts: number;\n domRemoves: number;\n domMoves: number;\n domAttrSets: number;\n domTextSets: number;\n domNodesCreated: number;\n listenerBindings: number;\n reactivePropsMounted: number;\n replaceChildrenCommits: number;\n bulkClearCommits: number;\n reconcilePhaseMs: number;\n domCommitPhaseMs: number;\n fastLaneName: string | null;\n}\n\nexport type BenchEvent =\n | 'itemCreated'\n | 'itemReused'\n | 'itemRemoved'\n | 'itemMoved'\n | 'rowFactory'\n | 'keyLookup'\n | 'keyHit'\n | 'keyMiss'\n | 'domInsert'\n | 'domRemove'\n | 'domMove'\n | 'domAttrSet'\n | 'domTextSet';\n\nfunction createInitialBenchMetrics(): BenchMetrics {\n return {\n itemsCreated: 0,\n itemsReused: 0,\n itemsRemoved: 0,\n itemsMoved: 0,\n rowFactoryInvocations: 0,\n keyLookups: 0,\n keyHits: 0,\n keyMisses: 0,\n domInserts: 0,\n domRemoves: 0,\n domMoves: 0,\n domAttrSets: 0,\n domTextSets: 0,\n domNodesCreated: 0,\n listenerBindings: 0,\n reactivePropsMounted: 0,\n replaceChildrenCommits: 0,\n bulkClearCommits: 0,\n reconcilePhaseMs: 0,\n domCommitPhaseMs: 0,\n fastLaneName: null,\n };\n}\n\nconst emptyBenchMetrics = createInitialBenchMetrics();\ntype BenchMetricScope = 'coldCreate' | 'fullClear';\ntype BenchCounter =\n | 'domNodesCreated'\n | 'listenerBindings'\n | 'reactivePropsMounted'\n | 'replaceChildrenCommits'\n | 'bulkClearCommits';\nlet activeBenchMetricScope: BenchMetricScope | null = null;\n\nfunction isBenchRuntimeEnabled(): boolean {\n if (!BENCH_BUILD_ENABLED) {\n return false;\n }\n\n try {\n return !!(globalThis as BenchGlobal).__ASKR_BENCH__;\n } catch {\n return false;\n }\n}\n\nfunction publishBenchMetrics(metrics: BenchMetrics): void {\n if (!isBenchRuntimeEnabled()) {\n return;\n }\n\n (globalThis as BenchGlobal).__ASKR_FOR_BENCH__ = { ...metrics };\n}\n\nconst flushBenchMetricsLive = (): void => {\n if (!benchMetrics) {\n return;\n }\n\n publishBenchMetrics(benchMetrics);\n};\n\nfunction resetBenchMetricsLive(metrics: BenchMetrics): void {\n metrics.itemsCreated = 0;\n metrics.itemsReused = 0;\n metrics.itemsRemoved = 0;\n metrics.itemsMoved = 0;\n metrics.rowFactoryInvocations = 0;\n metrics.keyLookups = 0;\n metrics.keyHits = 0;\n metrics.keyMisses = 0;\n metrics.domInserts = 0;\n metrics.domRemoves = 0;\n metrics.domMoves = 0;\n metrics.domAttrSets = 0;\n metrics.domTextSets = 0;\n metrics.domNodesCreated = 0;\n metrics.listenerBindings = 0;\n metrics.reactivePropsMounted = 0;\n metrics.replaceChildrenCommits = 0;\n metrics.bulkClearCommits = 0;\n metrics.reconcilePhaseMs = 0;\n metrics.domCommitPhaseMs = 0;\n metrics.fastLaneName = null;\n publishBenchMetrics(metrics);\n}\n\nconst benchMetrics = BENCH_BUILD_ENABLED ? createInitialBenchMetrics() : null;\n\nconst recordBenchEventLive = (event: BenchEvent, delta = 1): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n if (delta === 0) {\n return;\n }\n\n switch (event) {\n case 'itemCreated':\n benchMetrics.itemsCreated += delta;\n break;\n case 'itemReused':\n benchMetrics.itemsReused += delta;\n break;\n case 'itemRemoved':\n benchMetrics.itemsRemoved += delta;\n break;\n case 'itemMoved':\n benchMetrics.itemsMoved += delta;\n break;\n case 'rowFactory':\n benchMetrics.rowFactoryInvocations += delta;\n break;\n case 'keyLookup':\n benchMetrics.keyLookups += delta;\n break;\n case 'keyHit':\n benchMetrics.keyHits += delta;\n break;\n case 'keyMiss':\n benchMetrics.keyMisses += delta;\n break;\n case 'domInsert':\n benchMetrics.domInserts += delta;\n break;\n case 'domRemove':\n benchMetrics.domRemoves += delta;\n break;\n case 'domMove':\n benchMetrics.domMoves += delta;\n break;\n case 'domAttrSet':\n benchMetrics.domAttrSets += delta;\n break;\n case 'domTextSet':\n benchMetrics.domTextSets += delta;\n break;\n }\n};\n\nconst recordBenchFastLaneLive = (name: string): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n benchMetrics.fastLaneName = name;\n};\n\nconst recordBenchCounterLive = (counter: BenchCounter, delta = 1): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics || delta === 0) {\n return;\n }\n\n switch (counter) {\n case 'domNodesCreated':\n benchMetrics.domNodesCreated += delta;\n break;\n case 'listenerBindings':\n benchMetrics.listenerBindings += delta;\n break;\n case 'reactivePropsMounted':\n benchMetrics.reactivePropsMounted += delta;\n break;\n case 'replaceChildrenCommits':\n benchMetrics.replaceChildrenCommits += delta;\n break;\n case 'bulkClearCommits':\n benchMetrics.bulkClearCommits += delta;\n break;\n }\n};\n\nfunction withBenchMetricScopeLive<T>(scope: BenchMetricScope, run: () => T): T {\n if (!isBenchRuntimeEnabled()) {\n return run();\n }\n\n const previousScope = activeBenchMetricScope;\n activeBenchMetricScope = scope;\n\n try {\n return run();\n } finally {\n activeBenchMetricScope = previousScope;\n }\n}\n\nconst isBenchMetricScopeActiveLive = (scope: BenchMetricScope): boolean =>\n isBenchRuntimeEnabled() && activeBenchMetricScope === scope;\n\nconst recordBenchTimingLive = (\n phase: 'reconcile' | 'domCommit',\n ms: number\n): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n if (phase === 'reconcile') {\n benchMetrics.reconcilePhaseMs = ms;\n } else {\n benchMetrics.domCommitPhaseMs = ms;\n }\n};\n\nconst getBenchMetricsLive = (): BenchMetrics =>\n benchMetrics ? { ...benchMetrics } : { ...emptyBenchMetrics };\n\nexport const resetBenchMetrics = BENCH_BUILD_ENABLED\n ? (): void => {\n if (!isBenchRuntimeEnabled() || !benchMetrics) {\n return;\n }\n\n resetBenchMetricsLive(benchMetrics);\n }\n : (): void => {};\n\nexport const recordBenchEvent = BENCH_BUILD_ENABLED\n ? recordBenchEventLive\n : (_event: BenchEvent): void => {};\n\nexport const recordBenchFastLane = BENCH_BUILD_ENABLED\n ? recordBenchFastLaneLive\n : (_name: string): void => {};\n\nexport const recordBenchTiming = BENCH_BUILD_ENABLED\n ? recordBenchTimingLive\n : (_phase: 'reconcile' | 'domCommit', _ms: number): void => {};\n\nexport const recordBenchCounter = BENCH_BUILD_ENABLED\n ? recordBenchCounterLive\n : (_counter: BenchCounter, _delta = 1): void => {};\n\nexport const withBenchMetricScope = BENCH_BUILD_ENABLED\n ? withBenchMetricScopeLive\n : <T>(_scope: BenchMetricScope, run: () => T): T => run();\n\nexport const isBenchMetricScopeActive = BENCH_BUILD_ENABLED\n ? isBenchMetricScopeActiveLive\n : (_scope: BenchMetricScope): boolean => false;\n\nexport const getBenchMetrics = BENCH_BUILD_ENABLED\n ? getBenchMetricsLive\n : (): BenchMetrics => ({ ...emptyBenchMetrics });\n\nexport const flushBenchMetrics = BENCH_BUILD_ENABLED\n ? flushBenchMetricsLive\n : (): void => {};\n\nexport const isBenchBuildEnabled = (): boolean => BENCH_BUILD_ENABLED;\n"],"mappings":"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"}
|
package/dist/runtime/for.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ interface ForState<T> {
|
|
|
37
37
|
fallbackScope: ChildScope | null;
|
|
38
38
|
items: Map<string | number, ForItemInstance<T>>;
|
|
39
39
|
orderedKeys: Array<string | number>;
|
|
40
|
+
orderedItems: ForItemInstance<T>[];
|
|
40
41
|
orderedVNodes: VNode[];
|
|
41
42
|
byFn: NonNullable<ForProps<T>['by']> | ((item: T, index: number) => number);
|
|
42
43
|
renderFn: (item: T, index: () => number) => VNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for.d.ts","names":[],"sources":["../../src/runtime/for.ts"],"mappings":";;;;;;;;;UAoDiB,eAAA;EACf,GAAA;EACA,IAAA,EAAM,CAAA;EACN,YAAA,EAAc,CAAA;EACd,UAAA,EAAY,aAAA,CAAc,CAAA;EAC1B,mBAAA,EAAqB,GAAA,CAAI,WAAA,EAAa,qBAAA;EACtC,WAAA,EAAa,cAAA;EACb,KAAA,EAAO,UAAA;AAAA;AAAA,KAGJ,aAAA,MAAmB,cAAA,CAAe,CAAA,WAC9B,CAAA;EACL,IAAA,IAAQ,CAAA;EACR,GAAA,CAAI,QAAA,EAAU,CAAA,EAAG,aAAA;AAAA;AAAA,KAGhB,qBAAA,GAAwB,cAAA;EAEzB,IAAA;EACA,GAAA,CAAI,QAAA,WAAmB,aAAA;AAAA;AAAA,KAGtB,cAAA,GAAiB,cAAA;EAElB,IAAA;EACA,GAAA,CAAI,QAAA,aAAqB,IAAA;AAAA;AAAA,KAGjB,iBAAA;AAAA,UAOK,QAAA;EACf,IAAA;EACA,YAAA,EAAc,CAAA;EACd,UAAA,EAAY,aAAA,CAAc,CAAA;EAC1B,QAAA,EAAU,KAAA;EACV,aAAA,EAAe,UAAA;EACf,KAAA,EAAO,GAAA,kBAAqB,eAAA,CAAgB,CAAA;EAC5C,WAAA,EAAa,KAAA;EACb,aAAA,EAAe,KAAA;EACf,IAAA,EAAM,WAAA,CAAY,QAAA,CAAS,CAAA,aAAc,IAAA,EAAM,CAAA,EAAG,KAAA;EAClD,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA;EAC5C,cAAA,EAAgB,iBAAA;EAChB,kBAAA,EAAoB,iBAAA;EACpB,gBAAA,EAAkB,IAAA;EAClB,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,qBAAA;EACA,aAAA,EAAe,uBAAA,CAAwB,CAAA;EACvC,oBAAA;EACA,sBAAA;EACA,yBAAA;EACA,WAAA,GAAc,GAAA;AAAA;AAAA,iBAmBA,cAAA,GAAA,CACd,UAAA,EAAY,aAAA,CAAc,CAAA,GAC1B,IAAA,EAAM,QAAA,CAAS,CAAA,WACf,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA,EAC5C,QAAA,EAAU,KAAA,UACT,QAAA,CAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"for.d.ts","names":[],"sources":["../../src/runtime/for.ts"],"mappings":";;;;;;;;;UAoDiB,eAAA;EACf,GAAA;EACA,IAAA,EAAM,CAAA;EACN,YAAA,EAAc,CAAA;EACd,UAAA,EAAY,aAAA,CAAc,CAAA;EAC1B,mBAAA,EAAqB,GAAA,CAAI,WAAA,EAAa,qBAAA;EACtC,WAAA,EAAa,cAAA;EACb,KAAA,EAAO,UAAA;AAAA;AAAA,KAGJ,aAAA,MAAmB,cAAA,CAAe,CAAA,WAC9B,CAAA;EACL,IAAA,IAAQ,CAAA;EACR,GAAA,CAAI,QAAA,EAAU,CAAA,EAAG,aAAA;AAAA;AAAA,KAGhB,qBAAA,GAAwB,cAAA;EAEzB,IAAA;EACA,GAAA,CAAI,QAAA,WAAmB,aAAA;AAAA;AAAA,KAGtB,cAAA,GAAiB,cAAA;EAElB,IAAA;EACA,GAAA,CAAI,QAAA,aAAqB,IAAA;AAAA;AAAA,KAGjB,iBAAA;AAAA,UAOK,QAAA;EACf,IAAA;EACA,YAAA,EAAc,CAAA;EACd,UAAA,EAAY,aAAA,CAAc,CAAA;EAC1B,QAAA,EAAU,KAAA;EACV,aAAA,EAAe,UAAA;EACf,KAAA,EAAO,GAAA,kBAAqB,eAAA,CAAgB,CAAA;EAC5C,WAAA,EAAa,KAAA;EACb,YAAA,EAAc,eAAA,CAAgB,CAAA;EAC9B,aAAA,EAAe,KAAA;EACf,IAAA,EAAM,WAAA,CAAY,QAAA,CAAS,CAAA,aAAc,IAAA,EAAM,CAAA,EAAG,KAAA;EAClD,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA;EAC5C,cAAA,EAAgB,iBAAA;EAChB,kBAAA,EAAoB,iBAAA;EACpB,gBAAA,EAAkB,IAAA;EAClB,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,qBAAA;EACA,aAAA,EAAe,uBAAA,CAAwB,CAAA;EACvC,oBAAA;EACA,sBAAA;EACA,yBAAA;EACA,WAAA,GAAc,GAAA;AAAA;AAAA,iBAmBA,cAAA,GAAA,CACd,UAAA,EAAY,aAAA,CAAc,CAAA,GAC1B,IAAA,EAAM,QAAA,CAAS,CAAA,WACf,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA,EAC5C,QAAA,EAAU,KAAA,UACT,QAAA,CAAS,CAAA;AAAA,iBA8BI,WAAA,GAAA,CACd,UAAA,EAAY,aAAA,CAAc,CAAA,GAC1B,IAAA,EAAM,QAAA,CAAS,CAAA,WACf,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA,EAC5C,QAAA,EAAU,KAAA,UACT,QAAA,CAAS,CAAA;AAAA,iBAwTI,kBAAA,GAAA,CACd,GAAA,mBACA,IAAA,EAAM,CAAA,EACN,KAAA,UACA,QAAA,EAAU,QAAA,CAAS,CAAA,IAClB,eAAA,CAAgB,CAAA;AAAA,iBAyLH,iBAAA,GAAA,CACd,QAAA,EAAU,QAAA,CAAS,CAAA,GACnB,QAAA,EAAU,CAAA,KACT,KAAA;AAAA,iBA0iBa,gBAAA,GAAA,CAAoB,QAAA,EAAU,QAAA,CAAS,CAAA,IAAK,KAAA;AAAA,iBAS5C,sBAAA,GAAA,CAA0B,QAAA,EAAU,QAAA,CAAS,CAAA"}
|
package/dist/runtime/for.js
CHANGED
|
@@ -31,6 +31,7 @@ function createForState(eachSource, byFn, renderFn, fallback) {
|
|
|
31
31
|
fallbackScope: null,
|
|
32
32
|
items: /* @__PURE__ */ new Map(),
|
|
33
33
|
orderedKeys: [],
|
|
34
|
+
orderedItems: [],
|
|
34
35
|
orderedVNodes: [],
|
|
35
36
|
byFn,
|
|
36
37
|
renderFn,
|
|
@@ -135,6 +136,9 @@ function createForItemPropertySignal(initialValue) {
|
|
|
135
136
|
function readForItemProperty(item, prop) {
|
|
136
137
|
return Reflect.get(Object(item), prop);
|
|
137
138
|
}
|
|
139
|
+
function scopeReadsSource(scope, source) {
|
|
140
|
+
return source._readers?.has(scope.componentInstance) ?? false;
|
|
141
|
+
}
|
|
138
142
|
function getOrCreateForItemPropertySignal(item, propertySignals, prop) {
|
|
139
143
|
const existingSignal = propertySignals.get(prop);
|
|
140
144
|
if (existingSignal) return existingSignal;
|
|
@@ -258,26 +262,31 @@ function updateItemInstance(forState, itemInstance, item) {
|
|
|
258
262
|
if (itemInstance.item === item) return false;
|
|
259
263
|
const previousItem = itemInstance.item;
|
|
260
264
|
itemInstance.item = item;
|
|
261
|
-
|
|
265
|
+
const scope = itemInstance.scope;
|
|
266
|
+
let scopeReadsChangedSignal = false;
|
|
262
267
|
const itemSignal = itemInstance.itemSignal;
|
|
263
268
|
if (!itemSignal) {
|
|
264
269
|
rerenderItemInstance(forState, itemInstance, item);
|
|
265
270
|
return true;
|
|
266
271
|
}
|
|
267
272
|
const propertySignals = itemInstance.itemPropertySignals;
|
|
273
|
+
const changedPropertySignals = [];
|
|
268
274
|
if (propertySignals && propertySignals.size > 0) for (const [prop, propertySignal] of propertySignals) {
|
|
269
275
|
const previousValue = readForItemProperty(previousItem, prop);
|
|
270
276
|
const nextValue = readForItemProperty(item, prop);
|
|
271
277
|
if (Object.is(previousValue, nextValue)) continue;
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
278
|
+
if (scopeReadsSource(scope, propertySignal)) scopeReadsChangedSignal = true;
|
|
279
|
+
changedPropertySignals.push([propertySignal, nextValue]);
|
|
280
|
+
}
|
|
281
|
+
if (scopeReadsSource(scope, itemSignal)) scopeReadsChangedSignal = true;
|
|
282
|
+
const notifyReaders = !scopeReadsChangedSignal;
|
|
283
|
+
for (const [propertySignal, nextValue] of changedPropertySignals) propertySignal.set(nextValue, notifyReaders);
|
|
284
|
+
itemSignal.set(item, notifyReaders);
|
|
285
|
+
if (scopeReadsChangedSignal) {
|
|
286
|
+
rerenderItemInstance(forState, itemInstance, itemInstance.reactiveItem);
|
|
287
|
+
return true;
|
|
275
288
|
}
|
|
276
|
-
|
|
277
|
-
if (hasRenderReaders) needsRerender = true;
|
|
278
|
-
itemSignal.set(item, hasRenderReaders);
|
|
279
|
-
if (needsRerender) rerenderItemInstance(forState, itemInstance, itemInstance.reactiveItem);
|
|
280
|
-
return true;
|
|
289
|
+
return false;
|
|
281
290
|
}
|
|
282
291
|
const FOR_FALLBACK_SCOPE_KEY = "__for-fallback__";
|
|
283
292
|
function disposeFallbackScope(forState, domCleanup) {
|
|
@@ -296,6 +305,7 @@ function renderFallbackScope(forState) {
|
|
|
296
305
|
if (forState.fallback == null || forState.fallback === false) {
|
|
297
306
|
if (forState.fallbackScope) disposeFallbackScope(forState, "none");
|
|
298
307
|
forState.orderedVNodes = [];
|
|
308
|
+
forState.orderedItems = [];
|
|
299
309
|
return [];
|
|
300
310
|
}
|
|
301
311
|
const fallbackScope = forState.fallbackScope ?? createChildScope(forState.parentInstance, FOR_FALLBACK_SCOPE_KEY, () => {
|
|
@@ -308,6 +318,7 @@ function renderFallbackScope(forState) {
|
|
|
308
318
|
forState.fallbackScope = fallbackScope;
|
|
309
319
|
const vnode = fallbackScope.render(() => forState.fallback);
|
|
310
320
|
forState.orderedVNodes = vnode == null || vnode === false ? [] : [vnode];
|
|
321
|
+
forState.orderedItems = [];
|
|
311
322
|
return forState.orderedVNodes;
|
|
312
323
|
}
|
|
313
324
|
function disposeAllItems(forState, domCleanup) {
|
|
@@ -355,20 +366,24 @@ function reconcileForItems(forState, newArray) {
|
|
|
355
366
|
recordBenchFastLane("APPEND");
|
|
356
367
|
forState.lastCommitStrategy = "APPEND";
|
|
357
368
|
const resultVNodes = forState.orderedVNodes;
|
|
369
|
+
const resultItems = forState.orderedItems;
|
|
358
370
|
resultVNodes.length = newLen;
|
|
371
|
+
resultItems.length = newLen;
|
|
359
372
|
for (let i = 0; i < oldLen; i++) {
|
|
360
373
|
const item = newArray[i];
|
|
361
374
|
const key = orderedKeys[i];
|
|
362
|
-
const existing = items.get(key);
|
|
363
|
-
recordBenchEvent("itemReused");
|
|
375
|
+
const existing = resultItems[i] ?? items.get(key);
|
|
364
376
|
updateItemInstance(forState, existing, item);
|
|
377
|
+
resultItems[i] = existing;
|
|
365
378
|
resultVNodes[i] = existing.scope.vnode;
|
|
366
379
|
}
|
|
380
|
+
recordBenchEvent("itemReused", oldLen);
|
|
367
381
|
for (let i = oldLen; i < newLen; i++) {
|
|
368
382
|
const item = newArray[i];
|
|
369
383
|
const key = byFn(item, i);
|
|
370
384
|
const itemInstance = createItemInstance(key, item, i, forState);
|
|
371
385
|
items.set(key, itemInstance);
|
|
386
|
+
resultItems[i] = itemInstance;
|
|
372
387
|
resultVNodes[i] = itemInstance.scope.vnode;
|
|
373
388
|
orderedKeys[i] = key;
|
|
374
389
|
}
|
|
@@ -399,22 +414,26 @@ function reconcileForItems(forState, newArray) {
|
|
|
399
414
|
if (canUseRemoveOnePath) {
|
|
400
415
|
recordBenchFastLane("REMOVE_ONE");
|
|
401
416
|
forState.lastCommitStrategy = "NO_REORDER";
|
|
417
|
+
const previousOrderedItems = forState.orderedItems.slice();
|
|
402
418
|
const resultVNodes = forState.orderedVNodes;
|
|
419
|
+
const resultItems = forState.orderedItems;
|
|
403
420
|
resultVNodes.length = newLen;
|
|
421
|
+
resultItems.length = newLen;
|
|
404
422
|
const dirtyIndices = [];
|
|
405
423
|
for (let i = 0; i < newLen; i++) {
|
|
406
424
|
const item = newArray[i];
|
|
407
425
|
const key = i < removedIndex ? orderedKeys[i] : orderedKeys[i + 1];
|
|
408
426
|
const existing = items.get(key);
|
|
409
|
-
recordBenchEvent("itemReused");
|
|
410
427
|
const itemChanged = existing.item !== item;
|
|
411
428
|
const needsDomUpdate = existing.scope.needsDomUpdate;
|
|
412
429
|
const indexChanged = existing.indexSignal.peek() !== i;
|
|
413
430
|
if (itemChanged) updateItemInstance(forState, existing, item);
|
|
414
431
|
if (indexChanged && existing.indexSignal._hasBeenRead) existing.indexSignal.set(i);
|
|
415
432
|
if (itemChanged || indexChanged || needsDomUpdate || existing.scope.needsDomUpdate) dirtyIndices.push(i);
|
|
433
|
+
resultItems[i] = existing;
|
|
416
434
|
resultVNodes[i] = existing.scope.vnode;
|
|
417
435
|
}
|
|
436
|
+
recordBenchEvent("itemReused", newLen);
|
|
418
437
|
const removedKey = orderedKeys[removedIndex];
|
|
419
438
|
const removedItem = items.get(removedKey);
|
|
420
439
|
if (removedItem) {
|
|
@@ -422,8 +441,13 @@ function reconcileForItems(forState, newArray) {
|
|
|
422
441
|
items.delete(removedKey);
|
|
423
442
|
}
|
|
424
443
|
const nextOrderedKeys = orderedKeys.slice(0, newLen);
|
|
425
|
-
|
|
444
|
+
const nextOrderedItems = previousOrderedItems.slice(0, newLen);
|
|
445
|
+
for (let i = removedIndex; i < newLen; i++) {
|
|
446
|
+
nextOrderedKeys[i] = orderedKeys[i + 1];
|
|
447
|
+
nextOrderedItems[i] = previousOrderedItems[i + 1];
|
|
448
|
+
}
|
|
426
449
|
forState.orderedKeys = nextOrderedKeys;
|
|
450
|
+
forState.orderedItems = nextOrderedItems;
|
|
427
451
|
if (BENCH_BUILD_ENABLED) {
|
|
428
452
|
recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
|
|
429
453
|
flushBenchMetrics();
|
|
@@ -444,16 +468,19 @@ function reconcileForItems(forState, newArray) {
|
|
|
444
468
|
recordBenchFastLane("TRUNCATE");
|
|
445
469
|
forState.lastCommitStrategy = "TRUNCATE";
|
|
446
470
|
const resultVNodes = forState.orderedVNodes;
|
|
471
|
+
const resultItems = forState.orderedItems;
|
|
447
472
|
resultVNodes.length = newLen;
|
|
473
|
+
resultItems.length = newLen;
|
|
448
474
|
const isFullClear = newLen === 0;
|
|
449
475
|
for (let i = 0; i < newLen; i++) {
|
|
450
476
|
const item = newArray[i];
|
|
451
477
|
const key = orderedKeys[i];
|
|
452
478
|
const existing = items.get(key);
|
|
453
|
-
recordBenchEvent("itemReused");
|
|
454
479
|
updateItemInstance(forState, existing, item);
|
|
480
|
+
resultItems[i] = existing;
|
|
455
481
|
resultVNodes[i] = existing.scope.vnode;
|
|
456
482
|
}
|
|
483
|
+
recordBenchEvent("itemReused", newLen);
|
|
457
484
|
for (let i = newLen; i < oldLen; i++) {
|
|
458
485
|
const key = orderedKeys[i];
|
|
459
486
|
const itemInstance = items.get(key);
|
|
@@ -464,6 +491,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
464
491
|
}
|
|
465
492
|
orderedKeys.length = newLen;
|
|
466
493
|
forState.orderedKeys = orderedKeys;
|
|
494
|
+
forState.orderedItems.length = newLen;
|
|
467
495
|
if (BENCH_BUILD_ENABLED) {
|
|
468
496
|
recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
|
|
469
497
|
flushBenchMetrics();
|
|
@@ -485,20 +513,23 @@ function reconcileForItems(forState, newArray) {
|
|
|
485
513
|
recordBenchFastLane("NO_REORDER");
|
|
486
514
|
forState.lastCommitStrategy = "NO_REORDER";
|
|
487
515
|
const resultVNodes = forState.orderedVNodes;
|
|
516
|
+
const resultItems = forState.orderedItems;
|
|
488
517
|
resultVNodes.length = oldLen;
|
|
518
|
+
resultItems.length = oldLen;
|
|
489
519
|
const dirtyIndices = [];
|
|
490
520
|
for (let i = 0; i < oldLen; i++) {
|
|
491
521
|
const item = newArray[i];
|
|
492
522
|
const key = orderedKeys[i];
|
|
493
523
|
const existing = items.get(key);
|
|
494
|
-
recordBenchEvent("itemReused");
|
|
495
524
|
const itemChanged = existing.item !== item;
|
|
496
525
|
const needsDomUpdate = existing.scope.needsDomUpdate;
|
|
497
526
|
let rerendered = false;
|
|
498
527
|
if (itemChanged) rerendered = updateItemInstance(forState, existing, item);
|
|
499
528
|
if (rerendered || needsDomUpdate || existing.scope.needsDomUpdate) dirtyIndices.push(i);
|
|
529
|
+
resultItems[i] = existing;
|
|
500
530
|
resultVNodes[i] = existing.scope.vnode;
|
|
501
531
|
}
|
|
532
|
+
recordBenchEvent("itemReused", oldLen);
|
|
502
533
|
if (BENCH_BUILD_ENABLED) {
|
|
503
534
|
recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
|
|
504
535
|
flushBenchMetrics();
|
|
@@ -552,6 +583,9 @@ function reconcileForItems(forState, newArray) {
|
|
|
552
583
|
const secondExisting = items.get(secondMismatchKey);
|
|
553
584
|
const firstItem = newArray[firstMismatch];
|
|
554
585
|
const secondItem = newArray[secondMismatch];
|
|
586
|
+
const nextOrderedItems = forState.orderedItems.slice();
|
|
587
|
+
nextOrderedItems[firstMismatch] = secondExisting;
|
|
588
|
+
nextOrderedItems[secondMismatch] = firstExisting;
|
|
555
589
|
recordBenchEvent("itemReused");
|
|
556
590
|
recordBenchEvent("itemReused");
|
|
557
591
|
if (firstExisting.item !== firstItem) updateItemInstance(forState, firstExisting, firstItem);
|
|
@@ -561,6 +595,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
561
595
|
resultVNodes[firstMismatch] = firstExisting.scope.vnode;
|
|
562
596
|
resultVNodes[secondMismatch] = secondExisting.scope.vnode;
|
|
563
597
|
forState.orderedKeys = nextOrderedKeys;
|
|
598
|
+
forState.orderedItems = nextOrderedItems;
|
|
564
599
|
if (BENCH_BUILD_ENABLED) {
|
|
565
600
|
recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
|
|
566
601
|
flushBenchMetrics();
|
|
@@ -572,6 +607,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
572
607
|
}
|
|
573
608
|
let canUseMoveOnlyPath = true;
|
|
574
609
|
const moveOnlyKeys = [];
|
|
610
|
+
const moveOnlyItems = [];
|
|
575
611
|
const moveOnlyVNodes = [];
|
|
576
612
|
for (let i = 0; i < oldLen; i++) {
|
|
577
613
|
const item = newArray[i];
|
|
@@ -582,6 +618,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
582
618
|
break;
|
|
583
619
|
}
|
|
584
620
|
moveOnlyKeys[i] = key;
|
|
621
|
+
moveOnlyItems[i] = existing;
|
|
585
622
|
moveOnlyVNodes[i] = existing.scope.vnode;
|
|
586
623
|
recordBenchEvent("itemReused");
|
|
587
624
|
}
|
|
@@ -589,6 +626,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
589
626
|
recordBenchFastLane("FULL_KEYED");
|
|
590
627
|
forState.lastCommitStrategy = "FULL_KEYED";
|
|
591
628
|
forState.orderedKeys = moveOnlyKeys;
|
|
629
|
+
forState.orderedItems = moveOnlyItems;
|
|
592
630
|
forState.orderedVNodes = moveOnlyVNodes;
|
|
593
631
|
if (BENCH_BUILD_ENABLED) {
|
|
594
632
|
recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
|
|
@@ -604,6 +642,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
604
642
|
forState.lastCommitStrategy = "FULL_KEYED";
|
|
605
643
|
const toRemove = new Set(orderedKeys);
|
|
606
644
|
const newOrderedKeys = [];
|
|
645
|
+
const newOrderedItems = [];
|
|
607
646
|
const resultVNodes = [];
|
|
608
647
|
let moveOnly = toRemove.size === newArray.length;
|
|
609
648
|
for (let i = 0; i < newArray.length; i++) {
|
|
@@ -617,6 +656,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
617
656
|
if (!existing) {
|
|
618
657
|
const itemInstance = createItemInstance(key, item, i, forState);
|
|
619
658
|
items.set(key, itemInstance);
|
|
659
|
+
newOrderedItems.push(itemInstance);
|
|
620
660
|
resultVNodes.push(itemInstance.scope.vnode);
|
|
621
661
|
} else {
|
|
622
662
|
recordBenchEvent("itemReused");
|
|
@@ -627,6 +667,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
627
667
|
updateItemInstance(forState, existing, item);
|
|
628
668
|
}
|
|
629
669
|
if (indexChanged) existing.indexSignal.set(i);
|
|
670
|
+
newOrderedItems.push(existing);
|
|
630
671
|
resultVNodes.push(existing.scope.vnode);
|
|
631
672
|
}
|
|
632
673
|
}
|
|
@@ -639,6 +680,7 @@ function reconcileForItems(forState, newArray) {
|
|
|
639
680
|
}
|
|
640
681
|
}
|
|
641
682
|
forState.orderedKeys = newOrderedKeys;
|
|
683
|
+
forState.orderedItems = newOrderedItems;
|
|
642
684
|
if (BENCH_BUILD_ENABLED) {
|
|
643
685
|
recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
|
|
644
686
|
flushBenchMetrics();
|
|
@@ -655,7 +697,12 @@ function evaluateForState(forState) {
|
|
|
655
697
|
return reconcileForItems(forState, forState.currentItems);
|
|
656
698
|
}
|
|
657
699
|
function clearForDomUpdateState(forState) {
|
|
658
|
-
|
|
700
|
+
const dirtyIndices = forState.pendingDirtyIndices;
|
|
701
|
+
if (dirtyIndices && dirtyIndices.length > 0) for (let i = 0; i < dirtyIndices.length; i++) {
|
|
702
|
+
const itemInstance = forState.orderedItems[dirtyIndices[i]];
|
|
703
|
+
if (itemInstance) itemInstance.scope.needsDomUpdate = false;
|
|
704
|
+
}
|
|
705
|
+
else for (let i = 0; i < forState.orderedKeys.length; i++) {
|
|
659
706
|
const key = forState.orderedKeys[i];
|
|
660
707
|
const itemInstance = forState.items.get(key);
|
|
661
708
|
if (itemInstance) itemInstance.scope.needsDomUpdate = false;
|