@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.
Files changed (146) hide show
  1. package/dist/bench/components/benchmark-row.js.map +1 -1
  2. package/dist/bench/components/benchmark-table.js.map +1 -1
  3. package/dist/benchmark.js +2 -2
  4. package/dist/benchmark.js.map +1 -1
  5. package/dist/bin/askr-ssg.js.map +1 -1
  6. package/dist/boot/index.d.ts.map +1 -1
  7. package/dist/boot/index.js +9 -29
  8. package/dist/boot/index.js.map +1 -1
  9. package/dist/common/control.js.map +1 -1
  10. package/dist/common/env.js.map +1 -1
  11. package/dist/common/ssr-errors.js.map +1 -1
  12. package/dist/common/vnode.js.map +1 -1
  13. package/dist/components/error-boundary.js.map +1 -1
  14. package/dist/components/link.js.map +1 -1
  15. package/dist/control/case.js.map +1 -1
  16. package/dist/control/for.js.map +1 -1
  17. package/dist/control/shared.js.map +1 -1
  18. package/dist/control/show.js.map +1 -1
  19. package/dist/data/index.d.ts.map +1 -1
  20. package/dist/data/index.js +165 -23
  21. package/dist/data/index.js.map +1 -1
  22. package/dist/dev/invariant.js.map +1 -1
  23. package/dist/dev/logger.js.map +1 -1
  24. package/dist/foundations/icon/icon.js.map +1 -1
  25. package/dist/foundations/interactions/dismissable.js.map +1 -1
  26. package/dist/foundations/interactions/focusable.js.map +1 -1
  27. package/dist/foundations/interactions/hoverable.js.map +1 -1
  28. package/dist/foundations/interactions/interaction-policy.js.map +1 -1
  29. package/dist/foundations/interactions/pressable.js.map +1 -1
  30. package/dist/foundations/interactions/roving-focus.js.map +1 -1
  31. package/dist/foundations/state/controllable.js.map +1 -1
  32. package/dist/foundations/structures/collection.js.map +1 -1
  33. package/dist/foundations/structures/layer.js.map +1 -1
  34. package/dist/foundations/structures/layout.js.map +1 -1
  35. package/dist/foundations/structures/portal.js.map +1 -1
  36. package/dist/foundations/structures/presence.js.map +1 -1
  37. package/dist/foundations/structures/slot.js.map +1 -1
  38. package/dist/foundations/utilities/aria.js.map +1 -1
  39. package/dist/foundations/utilities/compose-handlers.js.map +1 -1
  40. package/dist/foundations/utilities/compose-ref.js.map +1 -1
  41. package/dist/foundations/utilities/merge-props.js.map +1 -1
  42. package/dist/foundations/utilities/use-id.js.map +1 -1
  43. package/dist/fx/fx.js.map +1 -1
  44. package/dist/fx/timing.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js +2 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/jsx/utils.js.map +1 -1
  49. package/dist/jsx-dev-runtime.js.map +1 -1
  50. package/dist/jsx-runtime.js.map +1 -1
  51. package/dist/renderer/children.js.map +1 -1
  52. package/dist/renderer/cleanup.js.map +1 -1
  53. package/dist/renderer/dom.js +128 -53
  54. package/dist/renderer/dom.js.map +1 -1
  55. package/dist/renderer/evaluate.js +7 -0
  56. package/dist/renderer/evaluate.js.map +1 -1
  57. package/dist/renderer/fastpath.js.map +1 -1
  58. package/dist/renderer/index.js.map +1 -1
  59. package/dist/renderer/keyed.js +1 -1
  60. package/dist/renderer/keyed.js.map +1 -1
  61. package/dist/renderer/reconcile.js.map +1 -1
  62. package/dist/renderer/utils.js.map +1 -1
  63. package/dist/router/index.d.ts +2 -2
  64. package/dist/router/index.js +2 -2
  65. package/dist/router/match.js.map +1 -1
  66. package/dist/router/navigate.d.ts.map +1 -1
  67. package/dist/router/navigate.js +4 -2
  68. package/dist/router/navigate.js.map +1 -1
  69. package/dist/router/policy.js.map +1 -1
  70. package/dist/router/route-context.js.map +1 -1
  71. package/dist/router/route.d.ts +1 -1
  72. package/dist/router/route.d.ts.map +1 -1
  73. package/dist/router/route.js +3 -34
  74. package/dist/router/route.js.map +1 -1
  75. package/dist/runtime/child-scope.d.ts +1 -0
  76. package/dist/runtime/child-scope.d.ts.map +1 -1
  77. package/dist/runtime/child-scope.js +2 -0
  78. package/dist/runtime/child-scope.js.map +1 -1
  79. package/dist/runtime/component.js +1 -1
  80. package/dist/runtime/component.js.map +1 -1
  81. package/dist/runtime/context.js.map +1 -1
  82. package/dist/runtime/control.js.map +1 -1
  83. package/dist/runtime/derive.d.ts +2 -1
  84. package/dist/runtime/derive.d.ts.map +1 -1
  85. package/dist/runtime/derive.js +15 -10
  86. package/dist/runtime/derive.js.map +1 -1
  87. package/dist/runtime/dev-namespace.js.map +1 -1
  88. package/dist/runtime/effect.d.ts.map +1 -1
  89. package/dist/runtime/effect.js +34 -9
  90. package/dist/runtime/effect.js.map +1 -1
  91. package/dist/runtime/events.js.map +1 -1
  92. package/dist/runtime/execution-model.js.map +1 -1
  93. package/dist/runtime/fastlane.js.map +1 -1
  94. package/dist/runtime/for-bench.d.ts +1 -1
  95. package/dist/runtime/for-bench.d.ts.map +1 -1
  96. package/dist/runtime/for-bench.js +15 -14
  97. package/dist/runtime/for-bench.js.map +1 -1
  98. package/dist/runtime/for.d.ts +1 -0
  99. package/dist/runtime/for.d.ts.map +1 -1
  100. package/dist/runtime/for.js +63 -16
  101. package/dist/runtime/for.js.map +1 -1
  102. package/dist/runtime/operations.d.ts.map +1 -1
  103. package/dist/runtime/operations.js +9 -7
  104. package/dist/runtime/operations.js.map +1 -1
  105. package/dist/runtime/perf-metrics.js +8 -2
  106. package/dist/runtime/perf-metrics.js.map +1 -1
  107. package/dist/runtime/readable.js.map +1 -1
  108. package/dist/runtime/resource-cell.js +3 -2
  109. package/dist/runtime/resource-cell.js.map +1 -1
  110. package/dist/runtime/scheduler.d.ts +0 -1
  111. package/dist/runtime/scheduler.d.ts.map +1 -1
  112. package/dist/runtime/scheduler.js +6 -19
  113. package/dist/runtime/scheduler.js.map +1 -1
  114. package/dist/runtime/selector.d.ts.map +1 -1
  115. package/dist/runtime/selector.js +6 -4
  116. package/dist/runtime/selector.js.map +1 -1
  117. package/dist/runtime/snapshot-source.d.ts +10 -0
  118. package/dist/runtime/snapshot-source.d.ts.map +1 -0
  119. package/dist/runtime/snapshot-source.js +17 -0
  120. package/dist/runtime/snapshot-source.js.map +1 -0
  121. package/dist/runtime/ssr-bridge.js.map +1 -1
  122. package/dist/runtime/state.d.ts.map +1 -1
  123. package/dist/runtime/state.js +1 -5
  124. package/dist/runtime/state.js.map +1 -1
  125. package/dist/ssg/batch-render.js.map +1 -1
  126. package/dist/ssg/create-static-gen.js.map +1 -1
  127. package/dist/ssg/generate-metadata.js.map +1 -1
  128. package/dist/ssg/incremental-manifest.js.map +1 -1
  129. package/dist/ssg/resolve-ssg-data.js.map +1 -1
  130. package/dist/ssg/route-utils.js.map +1 -1
  131. package/dist/ssg/write-static-files.js.map +1 -1
  132. package/dist/ssr/attrs.js.map +1 -1
  133. package/dist/ssr/context.d.ts +1 -0
  134. package/dist/ssr/context.d.ts.map +1 -1
  135. package/dist/ssr/context.js +3 -0
  136. package/dist/ssr/context.js.map +1 -1
  137. package/dist/ssr/escape.js +56 -16
  138. package/dist/ssr/escape.js.map +1 -1
  139. package/dist/ssr/index.d.ts.map +1 -1
  140. package/dist/ssr/index.js +15 -3
  141. package/dist/ssr/index.js.map +1 -1
  142. package/dist/ssr/render-keys.js.map +1 -1
  143. package/dist/ssr/sink.js.map +1 -1
  144. package/dist/ssr/stream-render.js +14 -2
  145. package/dist/ssr/stream-render.js.map +1 -1
  146. 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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"}
@@ -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,iBA6BI,WAAA,GAAA,CACd,UAAA,EAAY,aAAA,CAAc,CAAA,GAC1B,IAAA,EAAM,QAAA,CAAS,CAAA,WACf,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA,EAC5C,QAAA,EAAU,KAAA,UACT,QAAA,CAAS,CAAA;AAAA,iBAiTI,kBAAA,GAAA,CACd,GAAA,mBACA,IAAA,EAAM,CAAA,EACN,KAAA,UACA,QAAA,EAAU,QAAA,CAAS,CAAA,IAClB,eAAA,CAAgB,CAAA;AAAA,iBAgLH,iBAAA,GAAA,CACd,QAAA,EAAU,QAAA,CAAS,CAAA,GACnB,QAAA,EAAU,CAAA,KACT,KAAA;AAAA,iBAygBa,gBAAA,GAAA,CAAoB,QAAA,EAAU,QAAA,CAAS,CAAA,IAAK,KAAA;AAAA,iBAS5C,sBAAA,GAAA,CAA0B,QAAA,EAAU,QAAA,CAAS,CAAA"}
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"}
@@ -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
- let needsRerender = false;
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
- const propertyHasRenderReaders = (propertySignal._readers?.size ?? 0) > 0;
273
- if (propertyHasRenderReaders) needsRerender = true;
274
- propertySignal.set(nextValue, !propertyHasRenderReaders);
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
- const hasRenderReaders = (itemSignal._readers?.size ?? 0) > 0;
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
- for (let i = removedIndex; i < newLen; i++) nextOrderedKeys[i] = orderedKeys[i + 1];
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
- for (let i = 0; i < forState.orderedKeys.length; i++) {
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;