@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,84 +0,0 @@
1
- import { _isDOMElement } from "../common/vnode.js";
2
- import "./types.js";
3
- import { teardownNodeSubtree } from "./cleanup.js";
4
- import { RANGE_END_MARKER, RANGE_START_MARKER } from "./dom-range.js";
5
- import { getRendererDOMHost } from "./dom-host.js";
6
- import { smartUpdateElement, tagNamesEqualIgnoreCase } from "./evaluate-reconcile.js";
7
- //#region src/renderer/evaluate-dom-range.ts
8
- const domRanges = /* @__PURE__ */ new WeakMap();
9
- function hasDOMRange(context) {
10
- return domRanges.has(context);
11
- }
12
- function createDOMRange(target, context, node) {
13
- const start = document.createComment(RANGE_START_MARKER);
14
- const end = document.createComment(RANGE_END_MARKER);
15
- target.appendChild(start);
16
- target.appendChild(end);
17
- domRanges.set(context, {
18
- start,
19
- end
20
- });
21
- const dom = getRendererDOMHost().createDOMNode(node);
22
- if (dom) target.insertBefore(dom, end);
23
- }
24
- function cleanupRangeNode(node) {
25
- teardownNodeSubtree(node);
26
- }
27
- function updateDOMRangeForContext(target, context, children) {
28
- const range = domRanges.get(context);
29
- if (!range) return;
30
- let current = range.start.nextSibling;
31
- const domHost = getRendererDOMHost();
32
- for (let i = 0; i < children.length; i++) {
33
- const nextChild = children[i];
34
- const currentNode = current === range.end ? null : current;
35
- const nextCurrent = currentNode?.nextSibling ?? null;
36
- if (nextChild === null || nextChild === void 0 || nextChild === false) {
37
- if (currentNode) {
38
- cleanupRangeNode(currentNode);
39
- target.removeChild(currentNode);
40
- }
41
- current = nextCurrent;
42
- continue;
43
- }
44
- if (typeof nextChild === "string" || typeof nextChild === "number") {
45
- if (currentNode?.nodeType === 3) currentNode.data = String(nextChild);
46
- else {
47
- const textNode = document.createTextNode(String(nextChild));
48
- if (currentNode) {
49
- cleanupRangeNode(currentNode);
50
- target.replaceChild(textNode, currentNode);
51
- } else target.insertBefore(textNode, range.end);
52
- }
53
- current = nextCurrent;
54
- continue;
55
- }
56
- if (currentNode instanceof Element && _isDOMElement(nextChild) && typeof nextChild.type === "string" && tagNamesEqualIgnoreCase(currentNode.tagName, nextChild.type)) {
57
- smartUpdateElement(currentNode, nextChild, cleanupRangeNode);
58
- current = nextCurrent;
59
- continue;
60
- }
61
- const newDom = domHost.createDOMNode(nextChild);
62
- if (!newDom) {
63
- if (currentNode) {
64
- cleanupRangeNode(currentNode);
65
- target.removeChild(currentNode);
66
- }
67
- current = nextCurrent;
68
- continue;
69
- }
70
- if (currentNode) {
71
- cleanupRangeNode(currentNode);
72
- target.replaceChild(newDom, currentNode);
73
- } else target.insertBefore(newDom, range.end);
74
- current = nextCurrent;
75
- }
76
- while (current && current !== range.end) {
77
- const next = current.nextSibling;
78
- cleanupRangeNode(current);
79
- target.removeChild(current);
80
- current = next;
81
- }
82
- }
83
- //#endregion
84
- export { cleanupRangeNode, createDOMRange, hasDOMRange, updateDOMRangeForContext };
@@ -1,257 +0,0 @@
1
- import { __FOR_BOUNDARY__, _isDOMElement } from "../common/vnode.js";
2
- import "./types.js";
3
- import { getRuntimeEnv } from "../common/env.js";
4
- import { logger } from "../common/logger.js";
5
- import { Fragment } from "../common/jsx.js";
6
- import { incDevCounter, setDevValue } from "../runtime/dev-namespace.js";
7
- import { evaluateCaseState, evaluateShowState } from "../runtime/control.js";
8
- import { evaluateForState } from "../runtime/for-internal.js";
9
- import "../runtime/index.js";
10
- import { elementListeners, updateElementRef } from "./cleanup.js";
11
- import "./env.js";
12
- import { createWrappedHandler, extractKey, getEventListenerKey, getEventListenerOptions, getMaterializedKey, parseEventProp, setRenderedAttribute, tagNamesEqualIgnoreCase as tagNamesEqualIgnoreCase$1, writeElementClassName } from "./utils.js";
13
- import { keyedElements } from "./keyed.js";
14
- import { createElementForNamespace, getParentNamespace } from "./namespaces.js";
15
- import { performBulkPositionalKeyedTextUpdate } from "./children-fastpath.js";
16
- import { isBulkTextFastPathEligible, performBulkTextReplace } from "./children.js";
17
- import { getRendererDOMHost } from "./dom-host.js";
18
- import { reconcileKeyedChildren } from "./reconcile.js";
19
- import { updateUnkeyedChildren } from "./element-children.js";
20
- import { runRetainedElementUpdate } from "./retained-element-rollback.js";
21
- import { tryAdoptMatchingIntrinsicSubtree } from "./intrinsic-hydration-adoption.js";
22
- import { commitForBoundaryChildren } from "./boundaries.js";
23
- //#region src/renderer/evaluate-reconcile.ts
24
- function getRetainedHostOwnerChain(host, owner) {
25
- const instances = host.__ASKR_INSTANCES ?? [];
26
- const ownerIndex = instances.indexOf(owner);
27
- return ownerIndex >= 0 ? instances.slice(ownerIndex) : [owner];
28
- }
29
- function retainHostOwnerChain(host, owner, retainedInstances) {
30
- const componentHost = host;
31
- const nextInstances = [...componentHost.__ASKR_INSTANCES ?? []];
32
- for (const instance of retainedInstances) if (!nextInstances.includes(instance)) nextInstances.push(instance);
33
- componentHost.__ASKR_INSTANCES = nextInstances;
34
- componentHost.__ASKR_INSTANCE = owner;
35
- }
36
- function tagNamesEqualIgnoreCase(a, b) {
37
- return tagNamesEqualIgnoreCase$1(a, b);
38
- }
39
- function checkSimpleText(vnodeChildren) {
40
- if (!Array.isArray(vnodeChildren)) {
41
- if (typeof vnodeChildren === "string" || typeof vnodeChildren === "number") return {
42
- isSimple: true,
43
- text: String(vnodeChildren)
44
- };
45
- } else if (vnodeChildren.length === 1) {
46
- const child = vnodeChildren[0];
47
- if (typeof child === "string" || typeof child === "number") return {
48
- isSimple: true,
49
- text: String(child)
50
- };
51
- }
52
- return { isSimple: false };
53
- }
54
- function tryUpdateTextInPlace(element, text) {
55
- if (element.childNodes.length === 1 && element.firstChild?.nodeType === 3) {
56
- element.firstChild.data = text;
57
- return true;
58
- }
59
- return false;
60
- }
61
- function buildKeyMapFromDOM(parent) {
62
- const keyMap = /* @__PURE__ */ new Map();
63
- for (let child = parent.firstElementChild; child; child = child.nextElementSibling) {
64
- const key = getMaterializedKey(child);
65
- if (key !== void 0) keyMap.set(key, child);
66
- }
67
- return keyMap;
68
- }
69
- function getOrBuildKeyMap(parent) {
70
- let keyMap = keyedElements.get(parent);
71
- if (!keyMap) {
72
- keyMap = buildKeyMapFromDOM(parent);
73
- if (keyMap.size > 0) keyedElements.set(parent, keyMap);
74
- }
75
- return keyMap.size > 0 ? keyMap : void 0;
76
- }
77
- function hasKeyedChildren(children) {
78
- for (let i = 0; i < children.length; i++) if (extractKey(children[i]) !== void 0) return true;
79
- return false;
80
- }
81
- function trackBulkTextStats(stats) {
82
- if (getRuntimeEnv().NODE_ENV !== "production") try {
83
- setDevValue("__LAST_BULK_TEXT_FASTPATH_STATS", stats);
84
- incDevCounter("bulkTextHits");
85
- } catch {}
86
- }
87
- function trackBulkTextMiss() {
88
- if (getRuntimeEnv().NODE_ENV !== "production") try {
89
- incDevCounter("bulkTextMisses");
90
- } catch {}
91
- }
92
- function reconcileKeyed(parent, children, oldKeyMap) {
93
- if (getRuntimeEnv().ASKR_FORCE_BULK_POSREUSE === "1") {
94
- if (tryForcedBulkKeyedPath(parent, children)) return;
95
- }
96
- const newKeyMap = reconcileKeyedChildren(parent, children, oldKeyMap);
97
- keyedElements.set(parent, newKeyMap);
98
- }
99
- function tryForcedBulkKeyedPath(parent, children) {
100
- try {
101
- const keyedVnodes = [];
102
- for (const child of children) {
103
- const key = extractKey(child);
104
- if (_isDOMElement(child) && key !== void 0) keyedVnodes.push({
105
- key,
106
- vnode: child
107
- });
108
- }
109
- if (keyedVnodes.length === 0 || keyedVnodes.length !== children.length) return false;
110
- const fastPathEnv = getRuntimeEnv();
111
- if (fastPathEnv.ASKR_FASTPATH_DEBUG === "1" || fastPathEnv.ASKR_FASTPATH_DEBUG === "true") logger.warn("[Askr][FASTPATH] forced positional bulk keyed reuse (evaluate-level)");
112
- const stats = performBulkPositionalKeyedTextUpdate(parent, keyedVnodes);
113
- const statsEnv = getRuntimeEnv();
114
- if (statsEnv.NODE_ENV !== "production" || statsEnv.ASKR_FASTPATH_DEBUG === "1") try {
115
- setDevValue("__LAST_FASTPATH_STATS", stats);
116
- setDevValue("__LAST_FASTPATH_COMMIT_COUNT", 1);
117
- incDevCounter("bulkKeyedPositionalForced");
118
- } catch {}
119
- const newMap = buildKeyMapFromDOM(parent);
120
- keyedElements.set(parent, newMap);
121
- return true;
122
- } catch (err) {
123
- const fallbackEnv = getRuntimeEnv();
124
- if (fallbackEnv.ASKR_FASTPATH_DEBUG === "1" || fallbackEnv.ASKR_FASTPATH_DEBUG === "true") logger.warn("[Askr][FASTPATH] forced bulk path failed, falling back", err);
125
- return false;
126
- }
127
- }
128
- function reconcileUnkeyed(parent, children) {
129
- if (isBulkTextFastPathEligible(parent, children)) trackBulkTextStats(performBulkTextReplace(parent, children));
130
- else {
131
- trackBulkTextMiss();
132
- updateUnkeyedChildren(parent, children);
133
- }
134
- keyedElements.delete(parent);
135
- }
136
- function updateForBoundaryChildren(element, forVnode) {
137
- const controlState = forVnode._controlState ?? forVnode._forState;
138
- if (!controlState) return;
139
- commitForBoundaryChildren(element, controlState, controlState.kind === "for" ? evaluateForState(controlState) : controlState.kind === "show" ? evaluateShowState(controlState) : evaluateCaseState(controlState));
140
- }
141
- function updateElementChildren(element, vnodeChildren, cleanupRangeNode) {
142
- const domHost = getRendererDOMHost();
143
- if (vnodeChildren === null || vnodeChildren === void 0) {
144
- for (let n = element.firstChild; n;) {
145
- const next = n.nextSibling;
146
- cleanupRangeNode(n);
147
- n = next;
148
- }
149
- element.textContent = "";
150
- keyedElements.delete(element);
151
- return;
152
- }
153
- if (!Array.isArray(vnodeChildren) && _isDOMElement(vnodeChildren) && vnodeChildren.type === __FOR_BOUNDARY__) {
154
- updateForBoundaryChildren(element, vnodeChildren);
155
- return;
156
- }
157
- if (!Array.isArray(vnodeChildren) && isFragment(vnodeChildren)) {
158
- updateElementChildren(element, getFragmentChildren(vnodeChildren), cleanupRangeNode);
159
- return;
160
- }
161
- if (!Array.isArray(vnodeChildren)) {
162
- for (let n = element.firstChild; n;) {
163
- const next = n.nextSibling;
164
- cleanupRangeNode(n);
165
- n = next;
166
- }
167
- element.textContent = "";
168
- const dom = domHost.createDOMNode(vnodeChildren);
169
- if (dom) element.appendChild(dom);
170
- keyedElements.delete(element);
171
- return;
172
- }
173
- if (vnodeChildren.length === 1 && _isDOMElement(vnodeChildren[0]) && vnodeChildren[0].type === __FOR_BOUNDARY__) {
174
- updateForBoundaryChildren(element, vnodeChildren[0]);
175
- return;
176
- }
177
- if (hasKeyedChildren(vnodeChildren)) reconcileKeyed(element, vnodeChildren, getOrBuildKeyMap(element));
178
- else reconcileUnkeyed(element, vnodeChildren);
179
- }
180
- function smartUpdateElement(element, vnode, cleanupRangeNode) {
181
- if (tryAdoptMatchingIntrinsicSubtree(element, vnode)) return;
182
- const hadVNodeKey = Object.prototype.hasOwnProperty.call(vnode, "key");
183
- const previousVNodeKey = vnode.key;
184
- runRetainedElementUpdate(element, cleanupRangeNode, () => applySmartUpdateElement(element, vnode, cleanupRangeNode), () => {
185
- if (hadVNodeKey) vnode.key = previousVNodeKey;
186
- else delete vnode.key;
187
- });
188
- }
189
- function applySmartUpdateElement(element, vnode, cleanupRangeNode) {
190
- const domHost = getRendererDOMHost();
191
- if (vnode.key == null && element.hasAttribute("data-key")) {
192
- const existingKey = getMaterializedKey(element);
193
- if (existingKey !== void 0) vnode.key = existingKey;
194
- }
195
- let vnodeChildren = vnode.props?.children ?? vnode.children;
196
- if (vnodeChildren && _isDOMElement(vnodeChildren) && vnodeChildren.type === __FOR_BOUNDARY__) {
197
- updateElementChildren(element, vnodeChildren, cleanupRangeNode);
198
- domHost.updateElementFromVnode(element, vnode, false);
199
- return;
200
- }
201
- if (vnodeChildren && !Array.isArray(vnodeChildren)) vnodeChildren = [vnodeChildren];
202
- const textCheck = checkSimpleText(vnodeChildren);
203
- if (textCheck.isSimple && tryUpdateTextInPlace(element, textCheck.text)) {} else updateElementChildren(element, vnodeChildren, cleanupRangeNode);
204
- domHost.updateElementFromVnode(element, vnode, false);
205
- }
206
- function processFragmentChildren(target, childArray, cleanupRangeNode) {
207
- updateElementChildren(target, childArray, cleanupRangeNode);
208
- }
209
- function applyPropsToElement(el, props) {
210
- for (const [key, value] of Object.entries(props)) {
211
- if (key === "children" || key === "key") continue;
212
- if (value === void 0 || value === null || value === false) continue;
213
- if (key === "ref") {
214
- updateElementRef(el, value);
215
- continue;
216
- }
217
- const eventProp = parseEventProp(key);
218
- if (eventProp) {
219
- const { eventName, capture } = eventProp;
220
- const wrappedHandler = createWrappedHandler(value, true);
221
- const options = getEventListenerOptions(eventName, capture);
222
- const listenerKey = getEventListenerKey(eventName, capture);
223
- if (options !== void 0) el.addEventListener(eventName, wrappedHandler, options);
224
- else el.addEventListener(eventName, wrappedHandler);
225
- if (!elementListeners.has(el)) elementListeners.set(el, /* @__PURE__ */ new Map());
226
- elementListeners.get(el).set(listenerKey, {
227
- handler: wrappedHandler,
228
- original: value,
229
- eventName,
230
- options
231
- });
232
- continue;
233
- }
234
- if (key === "class" || key === "className") writeElementClassName(el, String(value));
235
- else if (key === "value" || key === "checked") el[key] = value;
236
- else setRenderedAttribute(el, key, String(value));
237
- }
238
- }
239
- function tryFirstRenderKeyedChildren(target, vnode) {
240
- const children = vnode.children;
241
- if (!Array.isArray(children) || !hasKeyedChildren(children)) return false;
242
- const el = createElementForNamespace(vnode.type, getParentNamespace(target));
243
- target.appendChild(el);
244
- applyPropsToElement(el, vnode.props || {});
245
- const newKeyMap = reconcileKeyedChildren(el, children, void 0);
246
- keyedElements.set(el, newKeyMap);
247
- return true;
248
- }
249
- function isFragment(vnode) {
250
- return _isDOMElement(vnode) && typeof vnode.type === "symbol" && (vnode.type === Fragment || String(vnode.type) === "Symbol(askr.fragment)");
251
- }
252
- function getFragmentChildren(vnode) {
253
- const fragmentChildren = vnode.props?.children ?? vnode.children ?? [];
254
- return Array.isArray(fragmentChildren) ? fragmentChildren : [fragmentChildren];
255
- }
256
- //#endregion
257
- export { getFragmentChildren, getRetainedHostOwnerChain, isFragment, processFragmentChildren, retainHostOwnerChain, smartUpdateElement, tagNamesEqualIgnoreCase, tryFirstRenderKeyedChildren, updateElementChildren, updateForBoundaryChildren };
@@ -1,95 +0,0 @@
1
- import { __FOR_BOUNDARY__, _isDOMElement } from "../common/vnode.js";
2
- import "./types.js";
3
- import { getRuntimeEnv } from "../common/env.js";
4
- import { beginLifecycleCommitBatch, discardLifecycleCommitBatch, flushLifecycleCommitBatch, getCurrentLifecycleCommitBatch } from "../runtime/lifecycle-batch.js";
5
- import "../runtime/index.js";
6
- import { removeAllListeners } from "./cleanup.js";
7
- import "./env.js";
8
- import { getFragmentChildren, getRetainedHostOwnerChain, isFragment, processFragmentChildren, retainHostOwnerChain, smartUpdateElement, tagNamesEqualIgnoreCase, tryFirstRenderKeyedChildren, updateElementChildren, updateForBoundaryChildren } from "./evaluate-reconcile.js";
9
- import { syncComponentElement } from "./component-host.js";
10
- import { createDOMNode } from "./dom-internal.js";
11
- import "./dom.js";
12
- import { cleanupRangeNode, createDOMRange, hasDOMRange, updateDOMRangeForContext } from "./evaluate-dom-range.js";
13
- function evaluate(node, target, context, retainedOwner) {
14
- if (!target) return;
15
- if (typeof document === "undefined") {
16
- if (getRuntimeEnv().NODE_ENV !== "production") try {
17
- console.warn("[Askr] evaluate() called in non-DOM environment; no-op.");
18
- } catch (e) {}
19
- return;
20
- }
21
- const batch = !getCurrentLifecycleCommitBatch() ? beginLifecycleCommitBatch() : null;
22
- try {
23
- evaluateInLifecycleBatch(node, target, context, retainedOwner);
24
- if (batch) flushLifecycleCommitBatch(batch);
25
- } catch (error) {
26
- if (batch) discardLifecycleCommitBatch(batch);
27
- throw error;
28
- }
29
- }
30
- function evaluateInLifecycleBatch(node, target, context, retainedOwner) {
31
- if (!target) return;
32
- if (context && hasDOMRange(context)) updateDOMRangeForContext(target, context, node === null || node === void 0 || node === false ? [] : isFragment(node) ? getFragmentChildren(node) : Array.isArray(node) ? node : [node]);
33
- else if (context) createDOMRange(target, context, node);
34
- else {
35
- let vnode = node;
36
- if (isFragment(vnode)) {
37
- const childArray = getFragmentChildren(vnode);
38
- if (childArray.length === 1 && _isDOMElement(childArray[0]) && typeof childArray[0].type === "string") vnode = childArray[0];
39
- else {
40
- processFragmentChildren(target, childArray, cleanupRangeNode);
41
- return;
42
- }
43
- }
44
- if (_isDOMElement(vnode) && vnode.type === __FOR_BOUNDARY__) {
45
- updateForBoundaryChildren(target, vnode);
46
- return;
47
- }
48
- if (Array.isArray(vnode)) {
49
- updateElementChildren(target, vnode, cleanupRangeNode);
50
- return;
51
- }
52
- const targetWithInstance = target;
53
- const targetInstance = retainedOwner?.target === target ? retainedOwner : targetWithInstance.__ASKR_INSTANCE;
54
- if (targetInstance && targetInstance.target === target) {
55
- const retainedHostInstances = getRetainedHostOwnerChain(targetWithInstance, targetInstance);
56
- if (_isDOMElement(vnode) && typeof vnode.type === "function") {
57
- const syncedDom = syncComponentElement(target, vnode, vnode.type, (vnode.props ?? {}) || {}, void 0, false, retainedHostInstances);
58
- if (syncedDom instanceof Element) {
59
- retainHostOwnerChain(syncedDom, targetInstance, retainedHostInstances);
60
- targetInstance.target = syncedDom;
61
- return;
62
- }
63
- }
64
- if (_isDOMElement(vnode) && typeof vnode.type === "string" && tagNamesEqualIgnoreCase(target.tagName, vnode.type)) {
65
- smartUpdateElement(target, vnode, cleanupRangeNode);
66
- return;
67
- }
68
- const newDom = createDOMNode(vnode);
69
- if (newDom && target.parentNode) {
70
- if (newDom instanceof Element) {
71
- newDom.__ASKR_INSTANCE = targetInstance;
72
- targetInstance.target = newDom;
73
- }
74
- removeAllListeners(target);
75
- target.parentNode.replaceChild(newDom, target);
76
- return;
77
- }
78
- }
79
- const firstChild = target.children[0];
80
- if (firstChild && _isDOMElement(vnode) && typeof vnode.type === "string" && tagNamesEqualIgnoreCase(firstChild.tagName, vnode.type)) smartUpdateElement(firstChild, vnode, cleanupRangeNode);
81
- else {
82
- for (let node = target.firstChild; node;) {
83
- const next = node.nextSibling;
84
- cleanupRangeNode(node);
85
- node = next;
86
- }
87
- target.textContent = "";
88
- if (_isDOMElement(vnode) && typeof vnode.type === "string" && tryFirstRenderKeyedChildren(target, vnode)) return;
89
- const dom = createDOMNode(vnode);
90
- if (dom) target.appendChild(dom);
91
- }
92
- }
93
- }
94
- //#endregion
95
- export { evaluate };
@@ -1,142 +0,0 @@
1
- import { getRuntimeEnv } from "../common/env.js";
2
- import { logger } from "../common/logger.js";
3
- import { isRuntimeSchedulerExecuting } from "../runtime/access.js";
4
- import { incDevCounter, setDevValue } from "../runtime/dev-namespace.js";
5
- import { isBulkCommitActive, markFastPathApplied } from "../runtime/fastlane.js";
6
- import { recordBenchCounter, recordBenchEvent } from "../runtime/for-bench.js";
7
- import "../runtime/index.js";
8
- import { cleanupInstanceIfPresent, removeAllListeners } from "./cleanup.js";
9
- import "./env.js";
10
- import { canUseDirectReplaceChildrenSpread, getMaterializedKey } from "./utils.js";
11
- import { _reconcilerRecordedParents } from "./keyed.js";
12
- import { createDOMNode, updateElementFromVnode } from "./dom-internal.js";
13
- import "./dom.js";
14
- function applyRendererFastPath(parent, keyedVnodes, oldKeyMap) {
15
- if (typeof document === "undefined") return null;
16
- const totalKeyed = keyedVnodes.length;
17
- if (totalKeyed === 0) return null;
18
- if (!isRuntimeSchedulerExecuting()) logger.warn("[Askr][FASTPATH][DEV] Fast-path reconciliation invoked outside scheduler execution");
19
- let parentChildrenArr;
20
- let localOldKeyMap;
21
- if (totalKeyed <= 20) try {
22
- parentChildrenArr = Array.from(parent.children, (child) => child);
23
- } catch (e) {
24
- parentChildrenArr = void 0;
25
- }
26
- else if (!oldKeyMap || oldKeyMap.size === 0) {
27
- localOldKeyMap = /* @__PURE__ */ new Map();
28
- try {
29
- for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {
30
- const key = getMaterializedKey(ch);
31
- if (key !== void 0) localOldKeyMap.set(key, ch);
32
- }
33
- } catch (e) {
34
- localOldKeyMap = void 0;
35
- }
36
- }
37
- const finalNodes = [];
38
- let mapLookups = 0;
39
- let createdNodes = 0;
40
- let reusedCount = 0;
41
- for (let i = 0; i < keyedVnodes.length; i++) {
42
- const { key, vnode } = keyedVnodes[i];
43
- mapLookups++;
44
- let el;
45
- if (totalKeyed <= 20 && parentChildrenArr) {
46
- for (let j = 0; j < parentChildrenArr.length; j++) {
47
- const ch = parentChildrenArr[j];
48
- if (getMaterializedKey(ch) === key) {
49
- el = ch;
50
- break;
51
- }
52
- }
53
- if (!el) el = oldKeyMap?.get(key);
54
- } else el = localOldKeyMap?.get(key) ?? oldKeyMap?.get(key);
55
- if (el) {
56
- updateElementFromVnode(el, vnode);
57
- finalNodes.push(el);
58
- reusedCount++;
59
- } else {
60
- const newEl = createDOMNode(vnode);
61
- if (newEl) {
62
- finalNodes.push(newEl);
63
- createdNodes++;
64
- }
65
- }
66
- }
67
- try {
68
- const tCommitStart = Date.now();
69
- const fragmentAppendCount = finalNodes.length;
70
- const useDirectReplace = canUseDirectReplaceChildrenSpread(finalNodes.length);
71
- const finalNodeSet = useDirectReplace ? new Set(finalNodes) : null;
72
- const fragment = useDirectReplace ? null : parent.ownerDocument.createDocumentFragment();
73
- if (fragment) for (let i = 0; i < finalNodes.length; i++) fragment.appendChild(finalNodes[i]);
74
- try {
75
- for (let n = parent.firstChild; n;) {
76
- const next = n.nextSibling;
77
- if (finalNodeSet?.has(n)) {
78
- n = next;
79
- continue;
80
- }
81
- if (n instanceof Element) removeAllListeners(n);
82
- cleanupInstanceIfPresent(n);
83
- n = next;
84
- }
85
- } catch (e) {}
86
- try {
87
- incDevCounter("__DOM_REPLACE_COUNT");
88
- setDevValue("__LAST_DOM_REPLACE_STACK_FASTPATH", (/* @__PURE__ */ new Error()).stack);
89
- } catch (e) {}
90
- if (useDirectReplace) parent.replaceChildren(...finalNodes);
91
- else parent.replaceChildren(fragment);
92
- recordBenchEvent("domMove", reusedCount);
93
- recordBenchEvent("domInsert", createdNodes);
94
- recordBenchCounter("replaceChildrenCommits");
95
- try {
96
- setDevValue("__LAST_FASTPATH_COMMIT_COUNT", 1);
97
- } catch (e) {}
98
- try {
99
- if (isBulkCommitActive()) markFastPathApplied(parent);
100
- } catch (e) {}
101
- const newKeyMap = /* @__PURE__ */ new Map();
102
- for (let i = 0; i < keyedVnodes.length; i++) {
103
- const key = keyedVnodes[i].key;
104
- const node = finalNodes[i];
105
- if (node instanceof Element) newKeyMap.set(key, node);
106
- }
107
- try {
108
- const stats = {
109
- n: totalKeyed,
110
- moves: 0,
111
- lisLen: 0,
112
- t_lookup: 0,
113
- t_fragment: Date.now() - tCommitStart,
114
- t_commit: 0,
115
- t_bookkeeping: 0,
116
- fragmentAppendCount,
117
- mapLookups,
118
- createdNodes,
119
- reusedCount
120
- };
121
- if (typeof globalThis !== "undefined") {
122
- setDevValue("__LAST_FASTPATH_STATS", stats);
123
- setDevValue("__LAST_FASTPATH_REUSED", reusedCount > 0);
124
- incDevCounter("fastpathHistoryPush");
125
- }
126
- const env = getRuntimeEnv();
127
- if (env.ASKR_FASTPATH_DEBUG === "1" || env.ASKR_FASTPATH_DEBUG === "true") logger.warn("[Askr][FASTPATH]", JSON.stringify({
128
- n: totalKeyed,
129
- createdNodes,
130
- reusedCount
131
- }));
132
- } catch (e) {}
133
- try {
134
- _reconcilerRecordedParents.add(parent);
135
- } catch (e) {}
136
- return newKeyMap;
137
- } catch (e) {
138
- return null;
139
- }
140
- }
141
- //#endregion
142
- export { applyRendererFastPath };
@@ -1,71 +0,0 @@
1
- import { getMaterializedKey } from "./utils.js";
2
- import { keyedElements } from "./keyed.js";
3
- //#region src/renderer/for-commit-dom-map.ts
4
- function getOrBuildDomKeyMap(parent) {
5
- let keyMap = keyedElements.get(parent);
6
- if (!keyMap) {
7
- keyMap = /* @__PURE__ */ new Map();
8
- for (let child = parent.firstElementChild; child; child = child.nextElementSibling) {
9
- const key = getMaterializedKey(child);
10
- if (key !== void 0) keyMap.set(key, child);
11
- }
12
- if (keyMap.size > 0) keyedElements.set(parent, keyMap);
13
- }
14
- return keyMap.size > 0 ? keyMap : void 0;
15
- }
16
- function hydrateExistingForDomInOrder(parent, forState) {
17
- if (parent.children.length !== forState.orderedKeys.length) return false;
18
- for (let i = 0; i < forState.orderedKeys.length; i += 1) {
19
- const itemKey = forState.orderedKeys[i];
20
- const itemInstance = forState.items.get(itemKey);
21
- const currentDom = parent.children[i];
22
- if (!itemInstance || getMaterializedKey(currentDom) !== itemKey) return false;
23
- itemInstance.scope.dom = currentDom;
24
- itemInstance.scope.needsDomUpdate = true;
25
- }
26
- return true;
27
- }
28
- function syncKeyedMapFromForState(parent, forState, strategy, removedNodes) {
29
- const existing = keyedElements.get(parent);
30
- if (strategy === "SWAP") {
31
- if (existing) return;
32
- }
33
- if (strategy === "FULL_KEYED" && existing && removedNodes.length === 0) return;
34
- if (strategy === "NO_REORDER") {
35
- if (existing && removedNodes.length === 0) return;
36
- if (existing) {
37
- for (const [mapKey, element] of existing) if (element.parentNode !== parent) existing.delete(mapKey);
38
- if (existing.size > 0) keyedElements.set(parent, existing);
39
- else keyedElements.delete(parent);
40
- return;
41
- }
42
- }
43
- if (strategy === "TRUNCATE" && forState.orderedKeys.length === 0) {
44
- if (existing) existing.clear();
45
- keyedElements.delete(parent);
46
- return;
47
- }
48
- if (strategy === "APPEND" && existing) {
49
- for (let i = 0; i < forState.orderedKeys.length; i++) {
50
- const key = forState.orderedKeys[i];
51
- if (key === null || existing.has(key)) continue;
52
- const itemInstance = forState.items.get(key);
53
- if (itemInstance?.scope.dom instanceof Element) existing.set(key, itemInstance.scope.dom);
54
- }
55
- if (existing.size > 0) keyedElements.set(parent, existing);
56
- else keyedElements.delete(parent);
57
- return;
58
- }
59
- const nextMap = existing ?? /* @__PURE__ */ new Map();
60
- nextMap.clear();
61
- for (let i = 0; i < forState.orderedKeys.length; i++) {
62
- const key = forState.orderedKeys[i];
63
- if (key === null) continue;
64
- const itemInstance = forState.items.get(key);
65
- if (itemInstance?.scope.dom instanceof Element) nextMap.set(key, itemInstance.scope.dom);
66
- }
67
- if (nextMap.size > 0) keyedElements.set(parent, nextMap);
68
- else keyedElements.delete(parent);
69
- }
70
- //#endregion
71
- export { getOrBuildDomKeyMap, hydrateExistingForDomInOrder, syncKeyedMapFromForState };
@@ -1,27 +0,0 @@
1
- import "../runtime/for-bench.js";
2
- import "../runtime/index.js";
3
- import { teardownNodeSubtree } from "./cleanup.js";
4
- function removeForBoundaryNodes(parent, removedNodes, options = {}) {
5
- const shouldTeardown = options.teardown !== false;
6
- if (removedNodes.length > 0 && removedNodes.length === parent.childNodes.length) {
7
- let canBulkClear = true;
8
- for (let i = 0; i < removedNodes.length; i++) if (removedNodes[i] !== parent.childNodes[i]) {
9
- canBulkClear = false;
10
- break;
11
- }
12
- if (canBulkClear) {
13
- if (shouldTeardown) for (let i = 0; i < removedNodes.length; i++) teardownNodeSubtree(removedNodes[i]);
14
- parent.textContent = "";
15
- return;
16
- }
17
- }
18
- for (let i = 0; i < removedNodes.length; i++) {
19
- const node = removedNodes[i];
20
- if (node.parentNode === parent) {
21
- if (shouldTeardown) teardownNodeSubtree(node);
22
- parent.removeChild(node);
23
- }
24
- }
25
- }
26
- //#endregion
27
- export { removeForBoundaryNodes };