@askrjs/askr 0.0.52 → 0.0.54

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 (386) hide show
  1. package/README.md +5 -1
  2. package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +182 -9
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.js +103 -0
  5. package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -1
  6. package/dist/benchmark.d.ts +6 -2
  7. package/dist/benchmark.js +63 -11
  8. package/dist/boot/index.d.ts +61 -2
  9. package/dist/boot/index.js +1 -203
  10. package/dist/boot-2ZR3MtO0.js +647 -0
  11. package/dist/cleanup-DScKZG2i.js +487 -0
  12. package/dist/component-internal-D9PLuFUc.js +614 -0
  13. package/dist/component-lifecycle-C7lnU9Bt.js +359 -0
  14. package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +8 -1
  15. package/dist/component-scope-CvPba6O6.d.ts +12 -0
  16. package/dist/components/index.d.ts +17 -2
  17. package/dist/components/index.js +39 -1
  18. package/dist/compose-ref-Cc_YkUpM.js +92 -0
  19. package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -1
  20. package/dist/control/index.d.ts +1 -3
  21. package/dist/control/index.js +1 -3
  22. package/dist/control-BI4RMD2z.d.ts +437 -0
  23. package/dist/control-Bf4Wkdvv.d.ts +9 -0
  24. package/dist/{common/control.js → control-DhFRTIoE.js} +1 -1
  25. package/dist/control-mXROCjL3.js +165 -0
  26. package/dist/data/index.d.ts +2 -6
  27. package/dist/data/index.js +4 -5
  28. package/dist/data-B9dauyDn.js +559 -0
  29. package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +32 -31
  30. package/dist/deferred-DklLG4qM.js +386 -0
  31. package/dist/{runtime/effect.js → effect-BwnIvLah.js} +4 -4
  32. package/dist/fastlane-Dw8SOBr9.js +343 -0
  33. package/dist/for-internal-CSz8Unkq.js +1563 -0
  34. package/dist/foundations/icon/index.d.ts +68 -2
  35. package/dist/foundations/icon/index.js +85 -1
  36. package/dist/foundations/index.d.ts +2 -5
  37. package/dist/foundations/index.js +2 -5
  38. package/dist/foundations/interactions/index.d.ts +264 -6
  39. package/dist/foundations/interactions/index.js +1 -6
  40. package/dist/foundations/state/index.d.ts +32 -1
  41. package/dist/foundations/state/index.js +78 -1
  42. package/dist/foundations/structures/index.d.ts +2 -7
  43. package/dist/foundations/structures/index.js +2 -7
  44. package/dist/foundations/utilities/index.d.ts +2 -6
  45. package/dist/foundations/utilities/index.js +2 -5
  46. package/dist/fx/index.d.ts +190 -3
  47. package/dist/fx/index.js +454 -4
  48. package/dist/index-B1LNotpU.d.ts +239 -0
  49. package/dist/index-Bki2rqcr.d.ts +233 -0
  50. package/dist/index-BnU0NPwM.d.ts +101 -0
  51. package/dist/index-C8iW3xCt.d.ts +44 -0
  52. package/dist/index-DwxdIA-t.d.ts +48 -0
  53. package/dist/{runtime/runtime.d.ts → index-Zb31mCiU.d.ts} +31 -8
  54. package/dist/index.d.ts +8 -13
  55. package/dist/index.js +150 -15
  56. package/dist/interactions-w7gQN4ha.js +280 -0
  57. package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -1
  58. package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -5
  59. package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -1
  60. package/dist/jsx-dev-runtime.d.ts +2 -4
  61. package/dist/jsx-dev-runtime.js +7 -5
  62. package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
  63. package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
  64. package/dist/jsx-runtime.d.ts +2 -35
  65. package/dist/jsx-runtime.js +11 -5
  66. package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-CdRjdsHo.js} +4 -5
  67. package/dist/navigate-BVDCzOuB.d.ts +34 -0
  68. package/dist/navigate-D17eVQyI.js +1449 -0
  69. package/dist/{runtime/portal.js → portal-C47xkwXj.js} +71 -41
  70. package/dist/query-registry-CQIT4mXr.js +73 -0
  71. package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -6
  72. package/dist/renderer-DrLRAD5y.js +6266 -0
  73. package/dist/{runtime/resource-operation.js → resource-operation-BNY29MVH.js} +118 -15
  74. package/dist/resources/index.d.ts +42 -3
  75. package/dist/resources/index.js +3 -4
  76. package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -1
  77. package/dist/route-matching-vJpvLVbX.js +515 -0
  78. package/dist/router/index.d.ts +166 -14
  79. package/dist/router/index.js +150 -12
  80. package/dist/{common/router.d.ts → router-DCfwLBr-.d.ts} +72 -28
  81. package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -1
  82. package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -3
  83. package/dist/{runtime/selector.js → selector-DafVYzV4.js} +34 -11
  84. package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -1
  85. package/dist/ssg/index.d.ts +252 -4
  86. package/dist/ssg/index.js +857 -1
  87. package/dist/ssr/index.d.ts +225 -8
  88. package/dist/ssr/index.js +3 -6
  89. package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -1
  90. package/dist/ssr-DEARZxJ5.js +1413 -0
  91. package/dist/{runtime/state.js → state-DPl8lffD.js} +3 -5
  92. package/dist/structures-DUB3HchX.js +221 -0
  93. package/dist/testing/index.d.ts +3 -2
  94. package/dist/testing/index.js +2 -5
  95. package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -5
  96. package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -1
  97. package/dist/{ssr/verify-hydration.js → verify-hydration-BWwu-mWu.js} +2 -2
  98. package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -2
  99. package/package.json +12 -7
  100. package/dist/bench/components/benchmark-row.d.ts +0 -20
  101. package/dist/bench/components/benchmark-row.js +0 -40
  102. package/dist/bench/components/benchmark-table.js +0 -23
  103. package/dist/bin/askr-ssg.d.ts +0 -27
  104. package/dist/bin/askr-ssg.js +0 -186
  105. package/dist/boot/hydration.js +0 -139
  106. package/dist/boot/root-lifecycle.d.ts +0 -18
  107. package/dist/boot/root-lifecycle.js +0 -209
  108. package/dist/boot/route-startup.js +0 -54
  109. package/dist/boot/types.d.ts +0 -61
  110. package/dist/common/component.d.ts +0 -18
  111. package/dist/common/control.d.ts +0 -12
  112. package/dist/common/dom-range.d.ts +0 -13
  113. package/dist/common/env.js +0 -41
  114. package/dist/common/error-boundary.d.ts +0 -15
  115. package/dist/common/invariant.js +0 -15
  116. package/dist/common/jsx.d.ts +0 -22
  117. package/dist/common/logger.js +0 -34
  118. package/dist/common/promise.js +0 -6
  119. package/dist/common/ssr-errors.d.ts +0 -10
  120. package/dist/common/ssr-errors.js +0 -14
  121. package/dist/common/ssr.d.ts +0 -41
  122. package/dist/common/vnode.d.ts +0 -21
  123. package/dist/components/error-boundary.d.ts +0 -14
  124. package/dist/components/error-boundary.js +0 -41
  125. package/dist/components/link.d.ts +0 -68
  126. package/dist/components/link.js +0 -74
  127. package/dist/control/case.d.ts +0 -18
  128. package/dist/control/case.js +0 -68
  129. package/dist/control/for.d.ts +0 -23
  130. package/dist/control/for.js +0 -61
  131. package/dist/control/shared.d.ts +0 -8
  132. package/dist/control/shared.js +0 -18
  133. package/dist/control/show.d.ts +0 -14
  134. package/dist/control/show.js +0 -32
  135. package/dist/data/data-runtime.d.ts +0 -27
  136. package/dist/data/invalidation.d.ts +0 -8
  137. package/dist/data/invalidation.js +0 -25
  138. package/dist/data/mutation-cell.d.ts +0 -27
  139. package/dist/data/mutation-cell.js +0 -133
  140. package/dist/data/query-cell.d.ts +0 -47
  141. package/dist/data/query-cell.js +0 -324
  142. package/dist/data/query-key.js +0 -40
  143. package/dist/data/shared.js +0 -20
  144. package/dist/data/testing.js +0 -2
  145. package/dist/data/types.d.ts +0 -160
  146. package/dist/foundations/icon/icon.d.ts +0 -52
  147. package/dist/foundations/icon/icon.js +0 -86
  148. package/dist/foundations/icon/icon.types.d.ts +0 -21
  149. package/dist/foundations/interactions/dismissable.d.ts +0 -71
  150. package/dist/foundations/interactions/dismissable.js +0 -24
  151. package/dist/foundations/interactions/focusable.d.ts +0 -21
  152. package/dist/foundations/interactions/focusable.js +0 -16
  153. package/dist/foundations/interactions/hoverable.d.ts +0 -25
  154. package/dist/foundations/interactions/hoverable.js +0 -13
  155. package/dist/foundations/interactions/interaction-policy.d.ts +0 -49
  156. package/dist/foundations/interactions/interaction-policy.js +0 -120
  157. package/dist/foundations/interactions/pressable.d.ts +0 -60
  158. package/dist/foundations/interactions/pressable.js +0 -49
  159. package/dist/foundations/interactions/roving-focus.d.ts +0 -51
  160. package/dist/foundations/interactions/roving-focus.js +0 -69
  161. package/dist/foundations/state/controllable.d.ts +0 -32
  162. package/dist/foundations/state/controllable.js +0 -80
  163. package/dist/foundations/structures/collection.d.ts +0 -51
  164. package/dist/foundations/structures/collection.js +0 -49
  165. package/dist/foundations/structures/layer.d.ts +0 -80
  166. package/dist/foundations/structures/layer.js +0 -79
  167. package/dist/foundations/structures/layout.d.ts +0 -32
  168. package/dist/foundations/structures/layout.js +0 -11
  169. package/dist/foundations/structures/portal.d.ts +0 -2
  170. package/dist/foundations/structures/portal.js +0 -3
  171. package/dist/foundations/structures/presence.d.ts +0 -36
  172. package/dist/foundations/structures/presence.js +0 -37
  173. package/dist/foundations/structures/slot.d.ts +0 -34
  174. package/dist/foundations/structures/slot.js +0 -39
  175. package/dist/foundations/utilities/aria.d.ts +0 -15
  176. package/dist/foundations/utilities/aria.js +0 -15
  177. package/dist/foundations/utilities/compose-handlers.d.ts +0 -36
  178. package/dist/foundations/utilities/compose-handlers.js +0 -18
  179. package/dist/foundations/utilities/compose-ref.js +0 -16
  180. package/dist/foundations/utilities/event-types.d.ts +0 -19
  181. package/dist/foundations/utilities/merge-props.d.ts +0 -4
  182. package/dist/foundations/utilities/merge-props.js +0 -47
  183. package/dist/foundations/utilities/use-id.d.ts +0 -31
  184. package/dist/fx/fx.d.ts +0 -32
  185. package/dist/fx/fx.js +0 -211
  186. package/dist/fx/noop.js +0 -7
  187. package/dist/fx/timing.d.ts +0 -158
  188. package/dist/fx/timing.js +0 -241
  189. package/dist/jsx/index.d.ts +0 -2
  190. package/dist/jsx/index.js +0 -4
  191. package/dist/jsx/types.js +0 -2
  192. package/dist/jsx/utils.d.ts +0 -4
  193. package/dist/jsx/utils.js +0 -17
  194. package/dist/jsx-runtime2.d.ts +0 -3
  195. package/dist/jsx-runtime2.js +0 -4
  196. package/dist/renderer/attributes.js +0 -254
  197. package/dist/renderer/boundaries.js +0 -142
  198. package/dist/renderer/boundary-materialization.js +0 -72
  199. package/dist/renderer/boundary-range-adoption.js +0 -76
  200. package/dist/renderer/boundary-range-sync.js +0 -101
  201. package/dist/renderer/boundary-state.js +0 -50
  202. package/dist/renderer/child-shape.js +0 -83
  203. package/dist/renderer/children-fastpath.js +0 -149
  204. package/dist/renderer/children.js +0 -158
  205. package/dist/renderer/cleanup.js +0 -267
  206. package/dist/renderer/component-host-cleanup.js +0 -143
  207. package/dist/renderer/component-host-instances.js +0 -116
  208. package/dist/renderer/component-host-replacement.js +0 -105
  209. package/dist/renderer/component-host-results.js +0 -138
  210. package/dist/renderer/component-host.js +0 -172
  211. package/dist/renderer/dom-host.js +0 -11
  212. package/dist/renderer/dom-internal.js +0 -243
  213. package/dist/renderer/dom-range.js +0 -161
  214. package/dist/renderer/dom.js +0 -11
  215. package/dist/renderer/element-children.js +0 -359
  216. package/dist/renderer/env.js +0 -2
  217. package/dist/renderer/error-boundary-dom.js +0 -86
  218. package/dist/renderer/evaluate-dom-range.js +0 -84
  219. package/dist/renderer/evaluate-reconcile.js +0 -257
  220. package/dist/renderer/evaluate.js +0 -95
  221. package/dist/renderer/fastpath.js +0 -142
  222. package/dist/renderer/for-commit-dom-map.js +0 -71
  223. package/dist/renderer/for-commit-removal.js +0 -27
  224. package/dist/renderer/for-commit-reorder.js +0 -87
  225. package/dist/renderer/for-commit.js +0 -442
  226. package/dist/renderer/hydration-boundaries.js +0 -60
  227. package/dist/renderer/hydration-listener-transaction.js +0 -49
  228. package/dist/renderer/index.js +0 -39
  229. package/dist/renderer/intrinsic-blueprint-analysis.js +0 -202
  230. package/dist/renderer/intrinsic-blueprint-bindings.js +0 -152
  231. package/dist/renderer/intrinsic-blueprint-materialization.js +0 -100
  232. package/dist/renderer/intrinsic-blueprint.js +0 -30
  233. package/dist/renderer/intrinsic-hydration-adoption.js +0 -66
  234. package/dist/renderer/keyed-children.js +0 -26
  235. package/dist/renderer/keyed.js +0 -167
  236. package/dist/renderer/namespaces.js +0 -21
  237. package/dist/renderer/prop-bindings.js +0 -315
  238. package/dist/renderer/reactive-child-dom.js +0 -139
  239. package/dist/renderer/reactive-child-sources.js +0 -182
  240. package/dist/renderer/reactive-children.js +0 -303
  241. package/dist/renderer/reconcile-commit.js +0 -36
  242. package/dist/renderer/reconcile-fastpaths.js +0 -100
  243. package/dist/renderer/reconcile-resolution.js +0 -163
  244. package/dist/renderer/reconcile.js +0 -37
  245. package/dist/renderer/retained-element-rollback.js +0 -288
  246. package/dist/renderer/stable-patch.js +0 -80
  247. package/dist/renderer/static-reuse.js +0 -94
  248. package/dist/renderer/types.js +0 -2
  249. package/dist/renderer/utils.js +0 -265
  250. package/dist/router/access.js +0 -34
  251. package/dist/router/activity.d.ts +0 -9
  252. package/dist/router/activity.js +0 -85
  253. package/dist/router/authoring.d.ts +0 -21
  254. package/dist/router/authoring.js +0 -196
  255. package/dist/router/internal-types.d.ts +0 -30
  256. package/dist/router/lazy.d.ts +0 -18
  257. package/dist/router/lazy.js +0 -50
  258. package/dist/router/manifest.d.ts +0 -9
  259. package/dist/router/manifest.js +0 -47
  260. package/dist/router/match.js +0 -120
  261. package/dist/router/navigate.d.ts +0 -10
  262. package/dist/router/navigate.js +0 -73
  263. package/dist/router/navigation-registry.d.ts +0 -31
  264. package/dist/router/navigation-registry.js +0 -103
  265. package/dist/router/navigation-scroll.d.ts +0 -13
  266. package/dist/router/navigation-scroll.js +0 -91
  267. package/dist/router/navigation-targets.d.ts +0 -30
  268. package/dist/router/navigation-targets.js +0 -634
  269. package/dist/router/policy.d.ts +0 -27
  270. package/dist/router/policy.js +0 -130
  271. package/dist/router/rendering.d.ts +0 -9
  272. package/dist/router/rendering.js +0 -47
  273. package/dist/router/resolution.d.ts +0 -3
  274. package/dist/router/resolution.js +0 -84
  275. package/dist/router/route-context.js +0 -77
  276. package/dist/router/route-matching.d.ts +0 -19
  277. package/dist/router/route-matching.js +0 -173
  278. package/dist/router/route-query.d.ts +0 -16
  279. package/dist/router/route-query.js +0 -45
  280. package/dist/router/route.d.ts +0 -8
  281. package/dist/router/route.js +0 -10
  282. package/dist/router/store.d.ts +0 -49
  283. package/dist/router/store.js +0 -169
  284. package/dist/router/testing.js +0 -4
  285. package/dist/runtime/access.d.ts +0 -19
  286. package/dist/runtime/access.js +0 -43
  287. package/dist/runtime/child-scope.d.ts +0 -41
  288. package/dist/runtime/child-scope.js +0 -134
  289. package/dist/runtime/component-cleanup.d.ts +0 -15
  290. package/dist/runtime/component-cleanup.js +0 -68
  291. package/dist/runtime/component-commit.js +0 -167
  292. package/dist/runtime/component-facade.d.ts +0 -5
  293. package/dist/runtime/component-facade.js +0 -6
  294. package/dist/runtime/component-internal.d.ts +0 -105
  295. package/dist/runtime/component-internal.js +0 -237
  296. package/dist/runtime/component-lifecycle.d.ts +0 -10
  297. package/dist/runtime/component-lifecycle.js +0 -33
  298. package/dist/runtime/component-scope.d.ts +0 -54
  299. package/dist/runtime/component.d.ts +0 -5
  300. package/dist/runtime/component.js +0 -6
  301. package/dist/runtime/context.d.ts +0 -72
  302. package/dist/runtime/context.js +0 -236
  303. package/dist/runtime/control.d.ts +0 -62
  304. package/dist/runtime/control.js +0 -239
  305. package/dist/runtime/derive.d.ts +0 -16
  306. package/dist/runtime/derive.js +0 -140
  307. package/dist/runtime/dev-namespace.d.ts +0 -30
  308. package/dist/runtime/dev-namespace.js +0 -64
  309. package/dist/runtime/effect.d.ts +0 -35
  310. package/dist/runtime/error-boundary.d.ts +0 -4
  311. package/dist/runtime/error-boundary.js +0 -29
  312. package/dist/runtime/events.d.ts +0 -58
  313. package/dist/runtime/events.js +0 -201
  314. package/dist/runtime/execution-model.d.ts +0 -6
  315. package/dist/runtime/execution-model.js +0 -13
  316. package/dist/runtime/fastlane.d.ts +0 -33
  317. package/dist/runtime/fastlane.js +0 -173
  318. package/dist/runtime/for-bench.d.ts +0 -40
  319. package/dist/runtime/for-bench.js +0 -13
  320. package/dist/runtime/for-internal.d.ts +0 -106
  321. package/dist/runtime/for-internal.js +0 -285
  322. package/dist/runtime/for-reconcile.d.ts +0 -7
  323. package/dist/runtime/for-reconcile.js +0 -442
  324. package/dist/runtime/for-scopes.d.ts +0 -26
  325. package/dist/runtime/for-scopes.js +0 -280
  326. package/dist/runtime/for-signals.d.ts +0 -39
  327. package/dist/runtime/for-signals.js +0 -213
  328. package/dist/runtime/for-types.d.ts +0 -8
  329. package/dist/runtime/for.d.ts +0 -4
  330. package/dist/runtime/for.js +0 -5
  331. package/dist/runtime/index.d.ts +0 -24
  332. package/dist/runtime/index.js +0 -33
  333. package/dist/runtime/lifecycle-batch.d.ts +0 -59
  334. package/dist/runtime/lifecycle-batch.js +0 -178
  335. package/dist/runtime/lifecycle-operation-settlement.d.ts +0 -5
  336. package/dist/runtime/lifecycle-operation-settlement.js +0 -51
  337. package/dist/runtime/lifecycle-operations.d.ts +0 -30
  338. package/dist/runtime/operations.d.ts +0 -3
  339. package/dist/runtime/operations.js +0 -3
  340. package/dist/runtime/perf-metrics.d.ts +0 -27
  341. package/dist/runtime/perf-metrics.js +0 -6
  342. package/dist/runtime/portal.d.ts +0 -21
  343. package/dist/runtime/readable.d.ts +0 -34
  344. package/dist/runtime/readable.js +0 -183
  345. package/dist/runtime/resource-cell.js +0 -112
  346. package/dist/runtime/resource-operation.d.ts +0 -12
  347. package/dist/runtime/runtime.js +0 -57
  348. package/dist/runtime/selector-store.js +0 -22
  349. package/dist/runtime/selector.d.ts +0 -10
  350. package/dist/runtime/snapshot-source.d.ts +0 -9
  351. package/dist/runtime/state.d.ts +0 -54
  352. package/dist/ssg/batch-render.js +0 -101
  353. package/dist/ssg/create-static-gen.d.ts +0 -66
  354. package/dist/ssg/create-static-gen.js +0 -250
  355. package/dist/ssg/generate-metadata.js +0 -92
  356. package/dist/ssg/generation-plan.js +0 -68
  357. package/dist/ssg/incremental-manifest.js +0 -54
  358. package/dist/ssg/resolve-ssg-data.js +0 -103
  359. package/dist/ssg/route-utils.js +0 -22
  360. package/dist/ssg/static-routes.js +0 -100
  361. package/dist/ssg/types.d.ts +0 -188
  362. package/dist/ssg/write-static-files.js +0 -77
  363. package/dist/ssr/attrs.js +0 -92
  364. package/dist/ssr/boundaries.js +0 -124
  365. package/dist/ssr/component-runtime.js +0 -85
  366. package/dist/ssr/context.d.ts +0 -49
  367. package/dist/ssr/context.js +0 -89
  368. package/dist/ssr/errors.d.ts +0 -9
  369. package/dist/ssr/errors.js +0 -12
  370. package/dist/ssr/escape.js +0 -191
  371. package/dist/ssr/hydration-data.js +0 -8
  372. package/dist/ssr/hydration-verify.d.ts +0 -11
  373. package/dist/ssr/hydration-verify.js +0 -171
  374. package/dist/ssr/index-internal.d.ts +0 -14
  375. package/dist/ssr/index-internal.js +0 -17
  376. package/dist/ssr/render-keys.js +0 -14
  377. package/dist/ssr/render-resolved.d.ts +0 -19
  378. package/dist/ssr/render-resolved.js +0 -33
  379. package/dist/ssr/render-sync.d.ts +0 -20
  380. package/dist/ssr/render-sync.js +0 -283
  381. package/dist/ssr/route-policy-resolution.js +0 -76
  382. package/dist/ssr/route-render.d.ts +0 -76
  383. package/dist/ssr/route-render.js +0 -118
  384. package/dist/ssr/sink.d.ts +0 -25
  385. package/dist/ssr/sink.js +0 -84
  386. package/dist/ssr/types.d.ts +0 -22
@@ -1,442 +0,0 @@
1
- import { isDevelopmentEnvironment } from "../common/env.js";
2
- import { flushBenchMetrics, isBenchBuildEnabled, recordBenchEvent, recordBenchFastLane, recordBenchTiming, resetBenchMetrics } from "./for-bench.js";
3
- import { createItemInstance, disposeAllItems, disposeFallbackScope, disposeItemInstance, renderFallbackScope, syncForItemIndex, updateItemInstance } from "./for-scopes.js";
4
- //#region src/runtime/for-reconcile.ts
5
- const BENCH_BUILD_ENABLED = isBenchBuildEnabled();
6
- function failForValidation(message) {
7
- throw new Error(message);
8
- }
9
- function validateForKeys(forState, newArray) {
10
- if (!isDevelopmentEnvironment()) return;
11
- const seen = /* @__PURE__ */ new Set();
12
- const keyKinds = /* @__PURE__ */ new Map();
13
- for (let i = 0; i < newArray.length; i++) {
14
- const key = forState.byFn(newArray[i], i);
15
- if (key === null || key === void 0) failForValidation("[askr] Invalid For key detected. Keys should be stable, non-null, and unique within a For list.");
16
- if (seen.has(key)) failForValidation(`[askr] Duplicate For key detected: ${String(key)}. Keys should be stable, non-null, and unique within a For list.`);
17
- seen.add(key);
18
- const keyKind = typeof key;
19
- const previousKeyKind = forState.devKeyKinds?.get(key);
20
- if (previousKeyKind && previousKeyKind !== keyKind) failForValidation(`[askr] For key type changed for ${String(key)}. Keys must remain consistently typed across renders.`);
21
- keyKinds.set(key, keyKind);
22
- }
23
- forState.devKeyKinds = keyKinds;
24
- }
25
- function reconcileForItems(forState, newArray) {
26
- forState.currentItems = newArray;
27
- validateForKeys(forState, newArray);
28
- if (BENCH_BUILD_ENABLED) resetBenchMetrics();
29
- const reconcileStartMs = BENCH_BUILD_ENABLED ? performance.now() : 0;
30
- const { items, orderedKeys, byFn } = forState;
31
- const oldLen = orderedKeys.length;
32
- const newLen = newArray.length;
33
- forState.lastRemovedNodes = [];
34
- forState.lastRemovedRanges = [];
35
- if (newLen === 0) {
36
- if (oldLen > 0) disposeAllItems(forState, forState.fallback ? "teardown" : "none");
37
- recordBenchFastLane("TRUNCATE");
38
- forState.lastCommitStrategy = "TRUNCATE";
39
- forState.pendingDirtyIndices = null;
40
- forState.pendingSwapIndices = null;
41
- forState.pendingMoveOnly = false;
42
- if (BENCH_BUILD_ENABLED) {
43
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
44
- flushBenchMetrics();
45
- }
46
- return renderFallbackScope(forState);
47
- }
48
- if (forState.fallbackScope) disposeFallbackScope(forState, "none");
49
- if (newLen === oldLen + 1) {
50
- let oldIndex = 0;
51
- let insertedIndex = -1;
52
- let insertedKey = null;
53
- for (let newIndex = 0; newIndex < newLen; newIndex++) {
54
- const item = newArray[newIndex];
55
- const key = byFn(item, newIndex);
56
- const expectedKey = orderedKeys[oldIndex];
57
- if (oldIndex < oldLen && key === expectedKey) {
58
- const existing = items.get(key);
59
- if (!existing || existing.item !== item || existing.scope.needsDomUpdate || oldIndex !== newIndex && existing.indexSignal._hasBeenRead) {
60
- insertedIndex = -2;
61
- break;
62
- }
63
- oldIndex++;
64
- } else if (insertedIndex === -1 && !items.has(key)) {
65
- insertedIndex = newIndex;
66
- insertedKey = key;
67
- } else {
68
- insertedIndex = -2;
69
- break;
70
- }
71
- }
72
- if (insertedIndex >= 0 && oldIndex === oldLen && insertedKey !== null) {
73
- const insertedItem = createItemInstance(insertedKey, newArray[insertedIndex], insertedIndex, forState);
74
- const resultVNodes = forState.orderedVNodes.slice();
75
- const resultItems = forState.orderedItems.slice();
76
- const resultKeys = orderedKeys.slice();
77
- resultVNodes.splice(insertedIndex, 0, insertedItem.scope.vnode);
78
- resultItems.splice(insertedIndex, 0, insertedItem);
79
- resultKeys.splice(insertedIndex, 0, insertedKey);
80
- items.set(insertedKey, insertedItem);
81
- recordBenchFastLane("INSERT_ONE");
82
- recordBenchEvent("itemReused", oldLen);
83
- forState.lastCommitStrategy = "INSERT_ONE";
84
- forState.orderedKeys = resultKeys;
85
- forState.orderedItems = resultItems;
86
- forState.orderedVNodes = resultVNodes;
87
- forState.pendingDirtyIndices = null;
88
- forState.pendingSwapIndices = null;
89
- forState.pendingMoveOnly = false;
90
- forState.pendingInsertedIndex = insertedIndex;
91
- if (BENCH_BUILD_ENABLED) {
92
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
93
- flushBenchMetrics();
94
- }
95
- return resultVNodes;
96
- }
97
- }
98
- if (oldLen < newLen) {
99
- let canUseAppendPath = true;
100
- let canSkipCommittedPrefix = true;
101
- for (let i = 0; i < oldLen; i++) {
102
- const key = byFn(newArray[i], i);
103
- if (key !== orderedKeys[i]) {
104
- canUseAppendPath = false;
105
- break;
106
- }
107
- const existing = forState.orderedItems[i] ?? items.get(key);
108
- if (!existing || existing.item !== newArray[i] || existing.scope.needsDomUpdate || existing.scope.hydrationPending) canSkipCommittedPrefix = false;
109
- }
110
- if (canUseAppendPath) {
111
- if (BENCH_BUILD_ENABLED) recordBenchFastLane("APPEND");
112
- forState.lastCommitStrategy = "APPEND";
113
- const resultVNodes = forState.orderedVNodes;
114
- const resultItems = forState.orderedItems;
115
- resultVNodes.length = newLen;
116
- resultItems.length = newLen;
117
- if (!canSkipCommittedPrefix) for (let i = 0; i < oldLen; i++) {
118
- const item = newArray[i];
119
- const key = orderedKeys[i];
120
- const existing = resultItems[i] ?? items.get(key);
121
- updateItemInstance(forState, existing, item);
122
- resultItems[i] = existing;
123
- resultVNodes[i] = existing.scope.vnode;
124
- }
125
- if (BENCH_BUILD_ENABLED) recordBenchEvent("itemReused", oldLen);
126
- for (let i = oldLen; i < newLen; i++) {
127
- const item = newArray[i];
128
- const key = byFn(item, i);
129
- const itemInstance = createItemInstance(key, item, i, forState);
130
- items.set(key, itemInstance);
131
- resultItems[i] = itemInstance;
132
- resultVNodes[i] = itemInstance.scope.vnode;
133
- orderedKeys[i] = key;
134
- }
135
- if (BENCH_BUILD_ENABLED) {
136
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
137
- flushBenchMetrics();
138
- }
139
- forState.orderedVNodes = resultVNodes;
140
- forState.pendingDirtyIndices = null;
141
- forState.pendingSwapIndices = null;
142
- forState.pendingMoveOnly = false;
143
- forState.pendingAppendStart = canSkipCommittedPrefix ? oldLen : 0;
144
- return resultVNodes;
145
- }
146
- }
147
- if (newLen < oldLen) {
148
- if (oldLen === newLen + 1) {
149
- let removedIndex = -1;
150
- for (let i = 0; i < newLen; i++) if (byFn(newArray[i], i) !== orderedKeys[i]) {
151
- removedIndex = i;
152
- break;
153
- }
154
- if (removedIndex !== -1) {
155
- let canUseRemoveOnePath = true;
156
- for (let i = removedIndex; i < newLen; i++) if (byFn(newArray[i], i) !== orderedKeys[i + 1]) {
157
- canUseRemoveOnePath = false;
158
- break;
159
- }
160
- if (canUseRemoveOnePath) {
161
- if (BENCH_BUILD_ENABLED) recordBenchFastLane("REMOVE_ONE");
162
- forState.lastCommitStrategy = "NO_REORDER";
163
- const previousOrderedItems = forState.orderedItems.slice();
164
- const resultVNodes = forState.orderedVNodes;
165
- const resultItems = forState.orderedItems;
166
- resultVNodes.length = newLen;
167
- resultItems.length = newLen;
168
- const dirtyIndices = [];
169
- for (let i = 0; i < newLen; i++) {
170
- const item = newArray[i];
171
- const key = i < removedIndex ? orderedKeys[i] : orderedKeys[i + 1];
172
- const existing = items.get(key);
173
- const scopeNeedsDomUpdate = existing.scope.needsDomUpdate;
174
- const itemChanged = existing.item !== item;
175
- const indexChanged = existing.indexSignal.peek() !== i;
176
- if (itemChanged) updateItemInstance(forState, existing, item);
177
- const indexVisibleChange = indexChanged ? syncForItemIndex(forState, existing, i) : false;
178
- if (itemChanged || indexVisibleChange || scopeNeedsDomUpdate) dirtyIndices.push(i);
179
- resultItems[i] = existing;
180
- resultVNodes[i] = existing.scope.vnode;
181
- }
182
- if (BENCH_BUILD_ENABLED) recordBenchEvent("itemReused", newLen);
183
- const removedKey = orderedKeys[removedIndex];
184
- const removedItem = items.get(removedKey);
185
- if (removedItem) {
186
- disposeItemInstance(forState, removedItem, "teardown");
187
- items.delete(removedKey);
188
- }
189
- const nextOrderedKeys = orderedKeys.slice(0, newLen);
190
- const nextOrderedItems = previousOrderedItems.slice(0, newLen);
191
- for (let i = removedIndex; i < newLen; i++) {
192
- nextOrderedKeys[i] = orderedKeys[i + 1];
193
- nextOrderedItems[i] = previousOrderedItems[i + 1];
194
- }
195
- forState.orderedKeys = nextOrderedKeys;
196
- forState.orderedItems = nextOrderedItems;
197
- if (BENCH_BUILD_ENABLED) {
198
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
199
- flushBenchMetrics();
200
- }
201
- forState.pendingDirtyIndices = dirtyIndices;
202
- forState.pendingSwapIndices = null;
203
- forState.pendingMoveOnly = false;
204
- return resultVNodes;
205
- }
206
- }
207
- }
208
- let canUseTruncatePath = true;
209
- for (let i = 0; i < newLen; i++) if (byFn(newArray[i], i) !== orderedKeys[i]) {
210
- canUseTruncatePath = false;
211
- break;
212
- }
213
- if (canUseTruncatePath) {
214
- recordBenchFastLane("TRUNCATE");
215
- forState.lastCommitStrategy = "TRUNCATE";
216
- const resultVNodes = forState.orderedVNodes;
217
- const resultItems = forState.orderedItems;
218
- resultVNodes.length = newLen;
219
- resultItems.length = newLen;
220
- const isFullClear = newLen === 0;
221
- for (let i = 0; i < newLen; i++) {
222
- const item = newArray[i];
223
- const key = orderedKeys[i];
224
- const existing = items.get(key);
225
- updateItemInstance(forState, existing, item);
226
- resultItems[i] = existing;
227
- resultVNodes[i] = existing.scope.vnode;
228
- }
229
- recordBenchEvent("itemReused", newLen);
230
- for (let i = newLen; i < oldLen; i++) {
231
- const key = orderedKeys[i];
232
- const itemInstance = items.get(key);
233
- if (itemInstance) {
234
- disposeItemInstance(forState, itemInstance, isFullClear ? "full-clear" : "teardown");
235
- items.delete(key);
236
- }
237
- }
238
- orderedKeys.length = newLen;
239
- forState.orderedKeys = orderedKeys;
240
- forState.orderedItems.length = newLen;
241
- if (BENCH_BUILD_ENABLED) {
242
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
243
- flushBenchMetrics();
244
- }
245
- forState.orderedVNodes = resultVNodes;
246
- forState.pendingDirtyIndices = null;
247
- forState.pendingSwapIndices = null;
248
- forState.pendingMoveOnly = false;
249
- return resultVNodes;
250
- }
251
- }
252
- if (oldLen === newLen) {
253
- let canUseNoReorderPath = true;
254
- for (let i = 0; i < oldLen; i++) if (byFn(newArray[i], i) !== orderedKeys[i]) {
255
- canUseNoReorderPath = false;
256
- break;
257
- }
258
- if (canUseNoReorderPath) {
259
- recordBenchFastLane("NO_REORDER");
260
- forState.lastCommitStrategy = "NO_REORDER";
261
- const resultVNodes = forState.orderedVNodes;
262
- const resultItems = forState.orderedItems;
263
- resultVNodes.length = oldLen;
264
- resultItems.length = oldLen;
265
- const dirtyIndices = [];
266
- for (let i = 0; i < oldLen; i++) {
267
- const item = newArray[i];
268
- const key = orderedKeys[i];
269
- const existing = items.get(key);
270
- if (existing.item !== item) updateItemInstance(forState, existing, item);
271
- if (existing.scope.needsDomUpdate) dirtyIndices.push(i);
272
- resultItems[i] = existing;
273
- resultVNodes[i] = existing.scope.vnode;
274
- }
275
- recordBenchEvent("itemReused", oldLen);
276
- if (BENCH_BUILD_ENABLED) {
277
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
278
- flushBenchMetrics();
279
- }
280
- forState.pendingDirtyIndices = dirtyIndices;
281
- forState.pendingSwapIndices = null;
282
- forState.pendingMoveOnly = false;
283
- return resultVNodes;
284
- }
285
- let firstMismatch = -1;
286
- let secondMismatch = -1;
287
- let firstMismatchKey = null;
288
- let secondMismatchKey = null;
289
- let mismatchCount = 0;
290
- let canUseSwapPath = true;
291
- for (let i = 0; i < oldLen; i++) {
292
- const item = newArray[i];
293
- const key = byFn(newArray[i], i);
294
- if (key === orderedKeys[i]) {
295
- const existing = items.get(key);
296
- if (existing && existing.item !== item) {
297
- canUseSwapPath = false;
298
- break;
299
- }
300
- continue;
301
- }
302
- mismatchCount++;
303
- if (firstMismatch === -1) {
304
- firstMismatch = i;
305
- firstMismatchKey = key;
306
- continue;
307
- }
308
- if (secondMismatch === -1) {
309
- secondMismatch = i;
310
- secondMismatchKey = key;
311
- continue;
312
- }
313
- mismatchCount = 3;
314
- break;
315
- }
316
- if (canUseSwapPath && mismatchCount === 2 && firstMismatch !== -1 && secondMismatch !== -1 && firstMismatchKey === orderedKeys[secondMismatch] && secondMismatchKey === orderedKeys[firstMismatch]) {
317
- recordBenchFastLane("SWAP");
318
- recordBenchEvent("itemMoved");
319
- recordBenchEvent("itemMoved");
320
- forState.lastCommitStrategy = "SWAP";
321
- const nextOrderedKeys = orderedKeys.slice();
322
- nextOrderedKeys[firstMismatch] = firstMismatchKey;
323
- nextOrderedKeys[secondMismatch] = secondMismatchKey;
324
- const resultVNodes = forState.orderedVNodes;
325
- const firstExisting = items.get(firstMismatchKey);
326
- const secondExisting = items.get(secondMismatchKey);
327
- const firstItem = newArray[firstMismatch];
328
- const secondItem = newArray[secondMismatch];
329
- const nextOrderedItems = forState.orderedItems.slice();
330
- nextOrderedItems[firstMismatch] = secondExisting;
331
- nextOrderedItems[secondMismatch] = firstExisting;
332
- if (BENCH_BUILD_ENABLED) recordBenchEvent("itemReused");
333
- recordBenchEvent("itemReused");
334
- if (firstExisting.item !== firstItem) updateItemInstance(forState, firstExisting, firstItem);
335
- if (secondExisting.item !== secondItem) updateItemInstance(forState, secondExisting, secondItem);
336
- syncForItemIndex(forState, firstExisting, firstMismatch);
337
- syncForItemIndex(forState, secondExisting, secondMismatch);
338
- resultVNodes[firstMismatch] = firstExisting.scope.vnode;
339
- resultVNodes[secondMismatch] = secondExisting.scope.vnode;
340
- forState.orderedKeys = nextOrderedKeys;
341
- forState.orderedItems = nextOrderedItems;
342
- if (BENCH_BUILD_ENABLED) {
343
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
344
- flushBenchMetrics();
345
- }
346
- forState.pendingDirtyIndices = null;
347
- forState.pendingSwapIndices = [firstMismatch, secondMismatch];
348
- forState.pendingMoveOnly = true;
349
- return resultVNodes;
350
- }
351
- let canUseMoveOnlyPath = true;
352
- const moveOnlyKeys = [];
353
- const moveOnlyItems = [];
354
- const moveOnlyVNodes = [];
355
- for (let i = 0; i < oldLen; i++) {
356
- const item = newArray[i];
357
- const key = byFn(item, i);
358
- const existing = items.get(key);
359
- if (!existing || existing.item !== item || existing.indexSignal._hasBeenRead && existing.indexSignal.peek() !== i) {
360
- canUseMoveOnlyPath = false;
361
- break;
362
- }
363
- moveOnlyKeys[i] = key;
364
- moveOnlyItems[i] = existing;
365
- moveOnlyVNodes[i] = existing.scope.vnode;
366
- recordBenchEvent("itemReused");
367
- }
368
- if (canUseMoveOnlyPath) {
369
- if (BENCH_BUILD_ENABLED) recordBenchFastLane("FULL_KEYED");
370
- forState.lastCommitStrategy = "FULL_KEYED";
371
- for (let i = 0; i < moveOnlyItems.length; i++) {
372
- syncForItemIndex(forState, moveOnlyItems[i], i);
373
- moveOnlyVNodes[i] = moveOnlyItems[i].scope.vnode;
374
- }
375
- forState.orderedKeys = moveOnlyKeys;
376
- forState.orderedItems = moveOnlyItems;
377
- forState.orderedVNodes = moveOnlyVNodes;
378
- if (BENCH_BUILD_ENABLED) {
379
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
380
- flushBenchMetrics();
381
- }
382
- forState.pendingDirtyIndices = null;
383
- forState.pendingSwapIndices = null;
384
- forState.pendingMoveOnly = true;
385
- return moveOnlyVNodes;
386
- }
387
- }
388
- if (BENCH_BUILD_ENABLED) recordBenchFastLane("FULL_KEYED");
389
- forState.lastCommitStrategy = "FULL_KEYED";
390
- const toRemove = new Set(orderedKeys);
391
- const newOrderedKeys = [];
392
- const newOrderedItems = [];
393
- const resultVNodes = [];
394
- let moveOnly = toRemove.size === newArray.length;
395
- for (let i = 0; i < newArray.length; i++) {
396
- const item = newArray[i];
397
- const key = byFn(item, i);
398
- if (BENCH_BUILD_ENABLED) recordBenchEvent("keyLookup");
399
- toRemove.delete(key);
400
- newOrderedKeys.push(key);
401
- const existing = items.get(key);
402
- if (BENCH_BUILD_ENABLED) recordBenchEvent(existing ? "keyHit" : "keyMiss");
403
- if (!existing) {
404
- const itemInstance = createItemInstance(key, item, i, forState);
405
- items.set(key, itemInstance);
406
- newOrderedItems.push(itemInstance);
407
- resultVNodes.push(itemInstance.scope.vnode);
408
- } else {
409
- if (BENCH_BUILD_ENABLED) recordBenchEvent("itemReused");
410
- const itemChanged = existing.item !== item;
411
- const indexChanged = existing.indexSignal.peek() !== i;
412
- if (itemChanged) {
413
- moveOnly = false;
414
- updateItemInstance(forState, existing, item);
415
- }
416
- if (indexChanged) syncForItemIndex(forState, existing, i);
417
- newOrderedItems.push(existing);
418
- resultVNodes.push(existing.scope.vnode);
419
- }
420
- }
421
- for (const key of toRemove) {
422
- moveOnly = false;
423
- const itemInstance = items.get(key);
424
- if (itemInstance) {
425
- disposeItemInstance(forState, itemInstance, "none");
426
- items.delete(key);
427
- }
428
- }
429
- forState.orderedKeys = newOrderedKeys;
430
- forState.orderedItems = newOrderedItems;
431
- if (BENCH_BUILD_ENABLED) {
432
- recordBenchTiming("reconcile", performance.now() - reconcileStartMs);
433
- flushBenchMetrics();
434
- }
435
- forState.orderedVNodes = resultVNodes;
436
- forState.pendingDirtyIndices = null;
437
- forState.pendingSwapIndices = null;
438
- forState.pendingMoveOnly = moveOnly;
439
- return resultVNodes;
440
- }
441
- //#endregion
442
- export { reconcileForItems };
@@ -1,26 +0,0 @@
1
- import { ChildScope } from "./child-scope.js";
2
- import { ForIndexSignal, ReactiveForItemState } from "./for-signals.js";
3
- import { ForState } from "./for-internal.js";
4
- import { VNode } from "../common/vnode.js";
5
-
6
- //#region src/runtime/for-scopes.d.ts
7
- interface ForItemInstance<T> {
8
- key: string | number;
9
- item: T;
10
- reactiveItem: T;
11
- reactiveItemState: ReactiveForItemState<T> | null;
12
- indexSignal: ForIndexSignal;
13
- scope: ChildScope;
14
- }
15
- type RemovedDomCleanupMode = 'none' | 'teardown' | 'full-clear';
16
- declare function captureForItemTransactionSnapshot<T>(forState: ForState<T>, itemInstance: ForItemInstance<T>): void;
17
- declare function captureForFallbackTransactionSnapshot<T>(forState: ForState<T>, fallbackScope?: ChildScope | null): void;
18
- declare function syncForItemIndex<T>(forState: ForState<T>, itemInstance: ForItemInstance<T>, nextIndex: number): boolean;
19
- declare function disposeItemInstance<T>(forState: ForState<T>, itemInstance: ForItemInstance<T>, domCleanup: RemovedDomCleanupMode): void;
20
- declare function createItemInstance<T>(key: string | number, item: T, index: number, forState: ForState<T>): ForItemInstance<T>;
21
- declare function updateItemInstance<T>(forState: ForState<T>, itemInstance: ForItemInstance<T>, item: T): boolean;
22
- declare function disposeFallbackScope<T>(forState: ForState<T>, domCleanup: RemovedDomCleanupMode): void;
23
- declare function renderFallbackScope<T>(forState: ForState<T>): VNode[];
24
- declare function disposeAllItems<T>(forState: ForState<T>, domCleanup: RemovedDomCleanupMode): void;
25
- //#endregion
26
- export { ForItemInstance, RemovedDomCleanupMode };