@askrjs/askr 0.0.51 → 0.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/README.md +5 -1
  2. package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +190 -20
  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 -3
  6. package/dist/benchmark.d.ts +7 -4
  7. package/dist/benchmark.js +63 -13
  8. package/dist/boot/index.d.ts +62 -4
  9. package/dist/boot/index.js +1 -194
  10. package/dist/boot-j2KoN6ss.js +647 -0
  11. package/dist/cleanup-COv77su2.js +487 -0
  12. package/dist/component-internal-B3z7GXlD.js +614 -0
  13. package/dist/component-lifecycle-CO4hXlP4.js +357 -0
  14. package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +35 -9
  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 -2
  20. package/dist/control/index.d.ts +1 -3
  21. package/dist/control/index.js +1 -3
  22. package/dist/control-BQvNVfAd.d.ts +436 -0
  23. package/dist/control-BYyLTFyw.js +165 -0
  24. package/dist/control-Bf4Wkdvv.d.ts +9 -0
  25. package/dist/{common/control.js → control-DhFRTIoE.js} +1 -3
  26. package/dist/data/index.d.ts +2 -6
  27. package/dist/data/index.js +4 -5
  28. package/dist/data-DnxnDxD-.js +559 -0
  29. package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +35 -36
  30. package/dist/deferred-lKE8uR0z.js +386 -0
  31. package/dist/effect-BwnIvLah.js +260 -0
  32. package/dist/fastlane-Dw8SOBr9.js +343 -0
  33. package/dist/for-internal-BKf_Tnv1.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-31Uoz_NS.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-D73jgYx1.d.ts +48 -0
  52. package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -9
  53. package/dist/index-SJXJkssx.d.ts +44 -0
  54. package/dist/index.d.ts +8 -13
  55. package/dist/index.js +150 -17
  56. package/dist/interactions-w7gQN4ha.js +280 -0
  57. package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -3
  58. package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -6
  59. package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -3
  60. package/dist/jsx-dev-runtime.d.ts +17 -5
  61. package/dist/jsx-dev-runtime.js +3 -10
  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 +3 -22
  65. package/dist/jsx-runtime.js +17 -20
  66. package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +9 -11
  67. package/dist/navigate-BVDCzOuB.d.ts +34 -0
  68. package/dist/navigate-CmPLSXyw.js +1449 -0
  69. package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +124 -35
  70. package/dist/query-registry-CQIT4mXr.js +73 -0
  71. package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -8
  72. package/dist/renderer-DzPjeLby.js +6197 -0
  73. package/dist/resource-operation-CEzfpnDk.js +276 -0
  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 -3
  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-CeYvjj5_.d.ts} +72 -29
  81. package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -3
  82. package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -4
  83. package/dist/{runtime/selector.js → selector-DafVYzV4.js} +35 -20
  84. package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -3
  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 -3
  90. package/dist/ssr-D3t80Rc0.js +1413 -0
  91. package/dist/{runtime/state.js → state-DPl8lffD.js} +4 -8
  92. package/dist/structures-DUB3HchX.js +221 -0
  93. package/dist/testing/index.d.ts +4 -4
  94. package/dist/testing/index.js +2 -7
  95. package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -6
  96. package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -3
  97. package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -4
  98. package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -4
  99. package/package.json +63 -45
  100. package/dist/bench/components/benchmark-row.d.ts +0 -20
  101. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  102. package/dist/bench/components/benchmark-row.js +0 -42
  103. package/dist/bench/components/benchmark-row.js.map +0 -1
  104. package/dist/bench/components/benchmark-table.js +0 -25
  105. package/dist/bench/components/benchmark-table.js.map +0 -1
  106. package/dist/benchmark.d.ts.map +0 -1
  107. package/dist/benchmark.js.map +0 -1
  108. package/dist/bin/askr-ssg.d.ts +0 -28
  109. package/dist/bin/askr-ssg.d.ts.map +0 -1
  110. package/dist/bin/askr-ssg.js +0 -171
  111. package/dist/bin/askr-ssg.js.map +0 -1
  112. package/dist/boot/hydration.js +0 -140
  113. package/dist/boot/hydration.js.map +0 -1
  114. package/dist/boot/index.d.ts.map +0 -1
  115. package/dist/boot/index.js.map +0 -1
  116. package/dist/boot/root-lifecycle.d.ts +0 -15
  117. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  118. package/dist/boot/root-lifecycle.js +0 -205
  119. package/dist/boot/root-lifecycle.js.map +0 -1
  120. package/dist/boot/route-startup.js +0 -45
  121. package/dist/boot/route-startup.js.map +0 -1
  122. package/dist/boot/types.d.ts +0 -62
  123. package/dist/boot/types.d.ts.map +0 -1
  124. package/dist/common/attr-names.js.map +0 -1
  125. package/dist/common/component.d.ts +0 -19
  126. package/dist/common/component.d.ts.map +0 -1
  127. package/dist/common/control.d.ts +0 -13
  128. package/dist/common/control.d.ts.map +0 -1
  129. package/dist/common/control.js.map +0 -1
  130. package/dist/common/env.js +0 -47
  131. package/dist/common/env.js.map +0 -1
  132. package/dist/common/error-boundary.d.ts +0 -16
  133. package/dist/common/error-boundary.d.ts.map +0 -1
  134. package/dist/common/invariant.js +0 -17
  135. package/dist/common/invariant.js.map +0 -1
  136. package/dist/common/jsx.d.ts +0 -23
  137. package/dist/common/jsx.d.ts.map +0 -1
  138. package/dist/common/jsx.js.map +0 -1
  139. package/dist/common/logger.js +0 -36
  140. package/dist/common/logger.js.map +0 -1
  141. package/dist/common/promise.js +0 -8
  142. package/dist/common/promise.js.map +0 -1
  143. package/dist/common/props.d.ts.map +0 -1
  144. package/dist/common/render-context.js.map +0 -1
  145. package/dist/common/route-activity.js.map +0 -1
  146. package/dist/common/router-internal.js.map +0 -1
  147. package/dist/common/router.d.ts.map +0 -1
  148. package/dist/common/ssr-errors.d.ts +0 -11
  149. package/dist/common/ssr-errors.d.ts.map +0 -1
  150. package/dist/common/ssr-errors.js +0 -16
  151. package/dist/common/ssr-errors.js.map +0 -1
  152. package/dist/common/ssr.d.ts +0 -42
  153. package/dist/common/ssr.d.ts.map +0 -1
  154. package/dist/common/ssr.js.map +0 -1
  155. package/dist/common/vnode.d.ts +0 -22
  156. package/dist/common/vnode.d.ts.map +0 -1
  157. package/dist/common/vnode.js.map +0 -1
  158. package/dist/components/error-boundary.d.ts +0 -15
  159. package/dist/components/error-boundary.d.ts.map +0 -1
  160. package/dist/components/error-boundary.js +0 -43
  161. package/dist/components/error-boundary.js.map +0 -1
  162. package/dist/components/link.d.ts +0 -68
  163. package/dist/components/link.d.ts.map +0 -1
  164. package/dist/components/link.js +0 -76
  165. package/dist/components/link.js.map +0 -1
  166. package/dist/control/case.d.ts +0 -19
  167. package/dist/control/case.d.ts.map +0 -1
  168. package/dist/control/case.js +0 -70
  169. package/dist/control/case.js.map +0 -1
  170. package/dist/control/for.d.ts +0 -24
  171. package/dist/control/for.d.ts.map +0 -1
  172. package/dist/control/for.js +0 -63
  173. package/dist/control/for.js.map +0 -1
  174. package/dist/control/shared.d.ts +0 -9
  175. package/dist/control/shared.d.ts.map +0 -1
  176. package/dist/control/shared.js +0 -20
  177. package/dist/control/shared.js.map +0 -1
  178. package/dist/control/show.d.ts +0 -15
  179. package/dist/control/show.d.ts.map +0 -1
  180. package/dist/control/show.js +0 -34
  181. package/dist/control/show.js.map +0 -1
  182. package/dist/data/data-runtime.d.ts +0 -28
  183. package/dist/data/data-runtime.d.ts.map +0 -1
  184. package/dist/data/data-runtime.js.map +0 -1
  185. package/dist/data/invalidation-listeners.js.map +0 -1
  186. package/dist/data/invalidation.d.ts +0 -9
  187. package/dist/data/invalidation.d.ts.map +0 -1
  188. package/dist/data/invalidation.js +0 -27
  189. package/dist/data/invalidation.js.map +0 -1
  190. package/dist/data/mutation-cell.d.ts +0 -28
  191. package/dist/data/mutation-cell.d.ts.map +0 -1
  192. package/dist/data/mutation-cell.js +0 -132
  193. package/dist/data/mutation-cell.js.map +0 -1
  194. package/dist/data/query-cell.d.ts +0 -46
  195. package/dist/data/query-cell.d.ts.map +0 -1
  196. package/dist/data/query-cell.js +0 -290
  197. package/dist/data/query-cell.js.map +0 -1
  198. package/dist/data/query-key.js +0 -42
  199. package/dist/data/query-key.js.map +0 -1
  200. package/dist/data/shared.js +0 -21
  201. package/dist/data/shared.js.map +0 -1
  202. package/dist/data/testing.js +0 -2
  203. package/dist/data/types.d.ts +0 -161
  204. package/dist/data/types.d.ts.map +0 -1
  205. package/dist/foundations/icon/icon.d.ts +0 -53
  206. package/dist/foundations/icon/icon.d.ts.map +0 -1
  207. package/dist/foundations/icon/icon.js +0 -88
  208. package/dist/foundations/icon/icon.js.map +0 -1
  209. package/dist/foundations/icon/icon.types.d.ts +0 -22
  210. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  211. package/dist/foundations/interactions/dismissable.d.ts +0 -72
  212. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  213. package/dist/foundations/interactions/dismissable.js +0 -26
  214. package/dist/foundations/interactions/dismissable.js.map +0 -1
  215. package/dist/foundations/interactions/focusable.d.ts +0 -22
  216. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  217. package/dist/foundations/interactions/focusable.js +0 -18
  218. package/dist/foundations/interactions/focusable.js.map +0 -1
  219. package/dist/foundations/interactions/hoverable.d.ts +0 -26
  220. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  221. package/dist/foundations/interactions/hoverable.js +0 -15
  222. package/dist/foundations/interactions/hoverable.js.map +0 -1
  223. package/dist/foundations/interactions/interaction-policy.d.ts +0 -50
  224. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  225. package/dist/foundations/interactions/interaction-policy.js +0 -122
  226. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  227. package/dist/foundations/interactions/pressable.d.ts +0 -61
  228. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  229. package/dist/foundations/interactions/pressable.js +0 -51
  230. package/dist/foundations/interactions/pressable.js.map +0 -1
  231. package/dist/foundations/interactions/roving-focus.d.ts +0 -52
  232. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  233. package/dist/foundations/interactions/roving-focus.js +0 -71
  234. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  235. package/dist/foundations/state/controllable.d.ts +0 -33
  236. package/dist/foundations/state/controllable.d.ts.map +0 -1
  237. package/dist/foundations/state/controllable.js +0 -82
  238. package/dist/foundations/state/controllable.js.map +0 -1
  239. package/dist/foundations/structures/collection.d.ts +0 -52
  240. package/dist/foundations/structures/collection.d.ts.map +0 -1
  241. package/dist/foundations/structures/collection.js +0 -51
  242. package/dist/foundations/structures/collection.js.map +0 -1
  243. package/dist/foundations/structures/layer.d.ts +0 -81
  244. package/dist/foundations/structures/layer.d.ts.map +0 -1
  245. package/dist/foundations/structures/layer.js +0 -81
  246. package/dist/foundations/structures/layer.js.map +0 -1
  247. package/dist/foundations/structures/layout.d.ts +0 -33
  248. package/dist/foundations/structures/layout.d.ts.map +0 -1
  249. package/dist/foundations/structures/layout.js +0 -13
  250. package/dist/foundations/structures/layout.js.map +0 -1
  251. package/dist/foundations/structures/portal.d.ts +0 -2
  252. package/dist/foundations/structures/portal.js +0 -3
  253. package/dist/foundations/structures/presence.d.ts +0 -37
  254. package/dist/foundations/structures/presence.d.ts.map +0 -1
  255. package/dist/foundations/structures/presence.js +0 -39
  256. package/dist/foundations/structures/presence.js.map +0 -1
  257. package/dist/foundations/structures/slot.d.ts +0 -35
  258. package/dist/foundations/structures/slot.d.ts.map +0 -1
  259. package/dist/foundations/structures/slot.js +0 -41
  260. package/dist/foundations/structures/slot.js.map +0 -1
  261. package/dist/foundations/utilities/aria.d.ts +0 -16
  262. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  263. package/dist/foundations/utilities/aria.js +0 -17
  264. package/dist/foundations/utilities/aria.js.map +0 -1
  265. package/dist/foundations/utilities/compose-handlers.d.ts +0 -37
  266. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  267. package/dist/foundations/utilities/compose-handlers.js +0 -20
  268. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  269. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  270. package/dist/foundations/utilities/compose-ref.js +0 -18
  271. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  272. package/dist/foundations/utilities/event-types.d.ts +0 -20
  273. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  274. package/dist/foundations/utilities/merge-props.d.ts +0 -5
  275. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  276. package/dist/foundations/utilities/merge-props.js +0 -49
  277. package/dist/foundations/utilities/merge-props.js.map +0 -1
  278. package/dist/foundations/utilities/use-id.d.ts +0 -32
  279. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  280. package/dist/foundations/utilities/use-id.js.map +0 -1
  281. package/dist/fx/fx.d.ts +0 -33
  282. package/dist/fx/fx.d.ts.map +0 -1
  283. package/dist/fx/fx.js +0 -213
  284. package/dist/fx/fx.js.map +0 -1
  285. package/dist/fx/noop.js +0 -9
  286. package/dist/fx/noop.js.map +0 -1
  287. package/dist/fx/timing.d.ts +0 -159
  288. package/dist/fx/timing.d.ts.map +0 -1
  289. package/dist/fx/timing.js +0 -243
  290. package/dist/fx/timing.js.map +0 -1
  291. package/dist/index.js.map +0 -1
  292. package/dist/jsx/index.d.ts +0 -2
  293. package/dist/jsx/index.js +0 -4
  294. package/dist/jsx/types.d.ts.map +0 -1
  295. package/dist/jsx/types.js +0 -2
  296. package/dist/jsx/utils.d.ts +0 -5
  297. package/dist/jsx/utils.d.ts.map +0 -1
  298. package/dist/jsx/utils.js +0 -19
  299. package/dist/jsx/utils.js.map +0 -1
  300. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  301. package/dist/jsx-dev-runtime.js.map +0 -1
  302. package/dist/jsx-runtime.d.ts.map +0 -1
  303. package/dist/jsx-runtime.js.map +0 -1
  304. package/dist/jsx-runtime2.d.ts +0 -3
  305. package/dist/jsx-runtime2.js +0 -4
  306. package/dist/renderer/attributes.js +0 -232
  307. package/dist/renderer/attributes.js.map +0 -1
  308. package/dist/renderer/boundaries.js +0 -266
  309. package/dist/renderer/boundaries.js.map +0 -1
  310. package/dist/renderer/child-shape.js +0 -85
  311. package/dist/renderer/child-shape.js.map +0 -1
  312. package/dist/renderer/children-fastpath.js +0 -149
  313. package/dist/renderer/children-fastpath.js.map +0 -1
  314. package/dist/renderer/children.js +0 -160
  315. package/dist/renderer/children.js.map +0 -1
  316. package/dist/renderer/cleanup.js +0 -210
  317. package/dist/renderer/cleanup.js.map +0 -1
  318. package/dist/renderer/component-host-cleanup.js +0 -68
  319. package/dist/renderer/component-host-cleanup.js.map +0 -1
  320. package/dist/renderer/component-host-instances.js +0 -65
  321. package/dist/renderer/component-host-instances.js.map +0 -1
  322. package/dist/renderer/component-host.js +0 -247
  323. package/dist/renderer/component-host.js.map +0 -1
  324. package/dist/renderer/dom-host.js +0 -13
  325. package/dist/renderer/dom-host.js.map +0 -1
  326. package/dist/renderer/dom-internal.js +0 -186
  327. package/dist/renderer/dom-internal.js.map +0 -1
  328. package/dist/renderer/dom.js +0 -10
  329. package/dist/renderer/element-children.js +0 -279
  330. package/dist/renderer/element-children.js.map +0 -1
  331. package/dist/renderer/env.js +0 -2
  332. package/dist/renderer/error-boundary-dom.js +0 -78
  333. package/dist/renderer/error-boundary-dom.js.map +0 -1
  334. package/dist/renderer/evaluate-dom-range.js +0 -85
  335. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  336. package/dist/renderer/evaluate-reconcile.js +0 -282
  337. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  338. package/dist/renderer/evaluate.js +0 -84
  339. package/dist/renderer/evaluate.js.map +0 -1
  340. package/dist/renderer/fastpath.js +0 -150
  341. package/dist/renderer/fastpath.js.map +0 -1
  342. package/dist/renderer/for-commit-dom-map.js +0 -83
  343. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  344. package/dist/renderer/for-commit-removal.js +0 -36
  345. package/dist/renderer/for-commit-removal.js.map +0 -1
  346. package/dist/renderer/for-commit-reorder.js +0 -89
  347. package/dist/renderer/for-commit-reorder.js.map +0 -1
  348. package/dist/renderer/for-commit.js +0 -314
  349. package/dist/renderer/for-commit.js.map +0 -1
  350. package/dist/renderer/index.js +0 -38
  351. package/dist/renderer/index.js.map +0 -1
  352. package/dist/renderer/keyed-children.js +0 -32
  353. package/dist/renderer/keyed-children.js.map +0 -1
  354. package/dist/renderer/keyed.js +0 -167
  355. package/dist/renderer/keyed.js.map +0 -1
  356. package/dist/renderer/namespaces.js +0 -23
  357. package/dist/renderer/namespaces.js.map +0 -1
  358. package/dist/renderer/prop-bindings.js +0 -280
  359. package/dist/renderer/prop-bindings.js.map +0 -1
  360. package/dist/renderer/reactive-child-dom.js +0 -133
  361. package/dist/renderer/reactive-child-dom.js.map +0 -1
  362. package/dist/renderer/reactive-child-sources.js +0 -184
  363. package/dist/renderer/reactive-child-sources.js.map +0 -1
  364. package/dist/renderer/reactive-children.js +0 -294
  365. package/dist/renderer/reactive-children.js.map +0 -1
  366. package/dist/renderer/reconcile-commit.js +0 -38
  367. package/dist/renderer/reconcile-commit.js.map +0 -1
  368. package/dist/renderer/reconcile-fastpaths.js +0 -107
  369. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  370. package/dist/renderer/reconcile-resolution.js +0 -187
  371. package/dist/renderer/reconcile-resolution.js.map +0 -1
  372. package/dist/renderer/reconcile.js +0 -39
  373. package/dist/renderer/reconcile.js.map +0 -1
  374. package/dist/renderer/retained-element-rollback.js +0 -277
  375. package/dist/renderer/retained-element-rollback.js.map +0 -1
  376. package/dist/renderer/stable-patch.js +0 -81
  377. package/dist/renderer/stable-patch.js.map +0 -1
  378. package/dist/renderer/static-reuse.js +0 -96
  379. package/dist/renderer/static-reuse.js.map +0 -1
  380. package/dist/renderer/types.js +0 -2
  381. package/dist/renderer/utils.js +0 -256
  382. package/dist/renderer/utils.js.map +0 -1
  383. package/dist/router/access.js +0 -36
  384. package/dist/router/access.js.map +0 -1
  385. package/dist/router/activity.d.ts +0 -10
  386. package/dist/router/activity.d.ts.map +0 -1
  387. package/dist/router/activity.js +0 -87
  388. package/dist/router/activity.js.map +0 -1
  389. package/dist/router/authoring.d.ts +0 -22
  390. package/dist/router/authoring.d.ts.map +0 -1
  391. package/dist/router/authoring.js +0 -198
  392. package/dist/router/authoring.js.map +0 -1
  393. package/dist/router/internal-types.d.ts +0 -31
  394. package/dist/router/internal-types.d.ts.map +0 -1
  395. package/dist/router/lazy.d.ts +0 -19
  396. package/dist/router/lazy.d.ts.map +0 -1
  397. package/dist/router/lazy.js +0 -52
  398. package/dist/router/lazy.js.map +0 -1
  399. package/dist/router/manifest.d.ts +0 -10
  400. package/dist/router/manifest.d.ts.map +0 -1
  401. package/dist/router/manifest.js +0 -49
  402. package/dist/router/manifest.js.map +0 -1
  403. package/dist/router/match.js +0 -122
  404. package/dist/router/match.js.map +0 -1
  405. package/dist/router/navigate.d.ts +0 -11
  406. package/dist/router/navigate.d.ts.map +0 -1
  407. package/dist/router/navigate.js +0 -76
  408. package/dist/router/navigate.js.map +0 -1
  409. package/dist/router/navigation-registry.d.ts +0 -32
  410. package/dist/router/navigation-registry.d.ts.map +0 -1
  411. package/dist/router/navigation-registry.js +0 -105
  412. package/dist/router/navigation-registry.js.map +0 -1
  413. package/dist/router/navigation-scroll.d.ts +0 -14
  414. package/dist/router/navigation-scroll.d.ts.map +0 -1
  415. package/dist/router/navigation-scroll.js +0 -93
  416. package/dist/router/navigation-scroll.js.map +0 -1
  417. package/dist/router/navigation-targets.d.ts +0 -31
  418. package/dist/router/navigation-targets.d.ts.map +0 -1
  419. package/dist/router/navigation-targets.js +0 -255
  420. package/dist/router/navigation-targets.js.map +0 -1
  421. package/dist/router/policy.d.ts +0 -28
  422. package/dist/router/policy.d.ts.map +0 -1
  423. package/dist/router/policy.js +0 -132
  424. package/dist/router/policy.js.map +0 -1
  425. package/dist/router/rendering.d.ts +0 -10
  426. package/dist/router/rendering.d.ts.map +0 -1
  427. package/dist/router/rendering.js +0 -46
  428. package/dist/router/rendering.js.map +0 -1
  429. package/dist/router/resolution.d.ts +0 -4
  430. package/dist/router/resolution.d.ts.map +0 -1
  431. package/dist/router/resolution.js +0 -86
  432. package/dist/router/resolution.js.map +0 -1
  433. package/dist/router/route-context.js +0 -79
  434. package/dist/router/route-context.js.map +0 -1
  435. package/dist/router/route-matching.d.ts +0 -20
  436. package/dist/router/route-matching.d.ts.map +0 -1
  437. package/dist/router/route-matching.js +0 -175
  438. package/dist/router/route-matching.js.map +0 -1
  439. package/dist/router/route-query.d.ts +0 -17
  440. package/dist/router/route-query.d.ts.map +0 -1
  441. package/dist/router/route-query.js +0 -47
  442. package/dist/router/route-query.js.map +0 -1
  443. package/dist/router/route.d.ts +0 -8
  444. package/dist/router/route.js +0 -10
  445. package/dist/router/store.d.ts +0 -50
  446. package/dist/router/store.d.ts.map +0 -1
  447. package/dist/router/store.js +0 -171
  448. package/dist/router/store.js.map +0 -1
  449. package/dist/router/testing.js +0 -4
  450. package/dist/runtime/access.d.ts +0 -20
  451. package/dist/runtime/access.d.ts.map +0 -1
  452. package/dist/runtime/access.js +0 -45
  453. package/dist/runtime/access.js.map +0 -1
  454. package/dist/runtime/child-scope.d.ts +0 -22
  455. package/dist/runtime/child-scope.d.ts.map +0 -1
  456. package/dist/runtime/child-scope.js +0 -87
  457. package/dist/runtime/child-scope.js.map +0 -1
  458. package/dist/runtime/component-cleanup.d.ts +0 -16
  459. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  460. package/dist/runtime/component-cleanup.js +0 -70
  461. package/dist/runtime/component-cleanup.js.map +0 -1
  462. package/dist/runtime/component-commit.js +0 -165
  463. package/dist/runtime/component-commit.js.map +0 -1
  464. package/dist/runtime/component-facade.d.ts +0 -5
  465. package/dist/runtime/component-facade.js +0 -4
  466. package/dist/runtime/component-internal.d.ts +0 -100
  467. package/dist/runtime/component-internal.d.ts.map +0 -1
  468. package/dist/runtime/component-internal.js +0 -219
  469. package/dist/runtime/component-internal.js.map +0 -1
  470. package/dist/runtime/component-lifecycle.d.ts +0 -49
  471. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  472. package/dist/runtime/component-lifecycle.js +0 -176
  473. package/dist/runtime/component-lifecycle.js.map +0 -1
  474. package/dist/runtime/component-scope.d.ts +0 -55
  475. package/dist/runtime/component-scope.d.ts.map +0 -1
  476. package/dist/runtime/component-scope.js.map +0 -1
  477. package/dist/runtime/component.d.ts +0 -5
  478. package/dist/runtime/component.js +0 -5
  479. package/dist/runtime/context.d.ts +0 -69
  480. package/dist/runtime/context.d.ts.map +0 -1
  481. package/dist/runtime/context.js +0 -210
  482. package/dist/runtime/context.js.map +0 -1
  483. package/dist/runtime/control.d.ts +0 -43
  484. package/dist/runtime/control.d.ts.map +0 -1
  485. package/dist/runtime/control.js +0 -126
  486. package/dist/runtime/control.js.map +0 -1
  487. package/dist/runtime/derive.d.ts +0 -17
  488. package/dist/runtime/derive.d.ts.map +0 -1
  489. package/dist/runtime/derive.js +0 -142
  490. package/dist/runtime/derive.js.map +0 -1
  491. package/dist/runtime/dev-namespace.d.ts +0 -31
  492. package/dist/runtime/dev-namespace.d.ts.map +0 -1
  493. package/dist/runtime/dev-namespace.js +0 -57
  494. package/dist/runtime/dev-namespace.js.map +0 -1
  495. package/dist/runtime/effect.d.ts +0 -32
  496. package/dist/runtime/effect.d.ts.map +0 -1
  497. package/dist/runtime/effect.js +0 -177
  498. package/dist/runtime/effect.js.map +0 -1
  499. package/dist/runtime/error-boundary.d.ts +0 -5
  500. package/dist/runtime/error-boundary.d.ts.map +0 -1
  501. package/dist/runtime/error-boundary.js +0 -31
  502. package/dist/runtime/error-boundary.js.map +0 -1
  503. package/dist/runtime/events.d.ts +0 -58
  504. package/dist/runtime/events.d.ts.map +0 -1
  505. package/dist/runtime/events.js +0 -204
  506. package/dist/runtime/events.js.map +0 -1
  507. package/dist/runtime/execution-model.d.ts +0 -7
  508. package/dist/runtime/execution-model.d.ts.map +0 -1
  509. package/dist/runtime/execution-model.js +0 -15
  510. package/dist/runtime/execution-model.js.map +0 -1
  511. package/dist/runtime/fastlane.d.ts +0 -34
  512. package/dist/runtime/fastlane.d.ts.map +0 -1
  513. package/dist/runtime/fastlane.js +0 -175
  514. package/dist/runtime/fastlane.js.map +0 -1
  515. package/dist/runtime/for-bench.d.ts +0 -41
  516. package/dist/runtime/for-bench.d.ts.map +0 -1
  517. package/dist/runtime/for-bench.js +0 -171
  518. package/dist/runtime/for-bench.js.map +0 -1
  519. package/dist/runtime/for-internal.d.ts +0 -43
  520. package/dist/runtime/for-internal.d.ts.map +0 -1
  521. package/dist/runtime/for-internal.js +0 -98
  522. package/dist/runtime/for-internal.js.map +0 -1
  523. package/dist/runtime/for-reconcile.d.ts +0 -8
  524. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  525. package/dist/runtime/for-reconcile.js +0 -389
  526. package/dist/runtime/for-reconcile.js.map +0 -1
  527. package/dist/runtime/for-scopes.d.ts +0 -26
  528. package/dist/runtime/for-scopes.d.ts.map +0 -1
  529. package/dist/runtime/for-scopes.js +0 -160
  530. package/dist/runtime/for-scopes.js.map +0 -1
  531. package/dist/runtime/for-signals.d.ts +0 -30
  532. package/dist/runtime/for-signals.d.ts.map +0 -1
  533. package/dist/runtime/for-signals.js +0 -139
  534. package/dist/runtime/for-signals.js.map +0 -1
  535. package/dist/runtime/for-types.d.ts +0 -9
  536. package/dist/runtime/for-types.d.ts.map +0 -1
  537. package/dist/runtime/for.d.ts +0 -4
  538. package/dist/runtime/for.js +0 -5
  539. package/dist/runtime/index.d.ts +0 -24
  540. package/dist/runtime/index.js +0 -31
  541. package/dist/runtime/lifecycle-operations.d.ts +0 -31
  542. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  543. package/dist/runtime/lifecycle-operations.js.map +0 -1
  544. package/dist/runtime/operations.d.ts +0 -3
  545. package/dist/runtime/operations.js +0 -3
  546. package/dist/runtime/perf-metrics.d.ts +0 -26
  547. package/dist/runtime/perf-metrics.d.ts.map +0 -1
  548. package/dist/runtime/perf-metrics.js +0 -70
  549. package/dist/runtime/perf-metrics.js.map +0 -1
  550. package/dist/runtime/portal.d.ts +0 -22
  551. package/dist/runtime/portal.d.ts.map +0 -1
  552. package/dist/runtime/portal.js.map +0 -1
  553. package/dist/runtime/readable.d.ts +0 -29
  554. package/dist/runtime/readable.d.ts.map +0 -1
  555. package/dist/runtime/readable.js +0 -159
  556. package/dist/runtime/readable.js.map +0 -1
  557. package/dist/runtime/resource-cell.js +0 -114
  558. package/dist/runtime/resource-cell.js.map +0 -1
  559. package/dist/runtime/resource-operation.d.ts +0 -13
  560. package/dist/runtime/resource-operation.d.ts.map +0 -1
  561. package/dist/runtime/resource-operation.js +0 -170
  562. package/dist/runtime/resource-operation.js.map +0 -1
  563. package/dist/runtime/runtime.d.ts.map +0 -1
  564. package/dist/runtime/runtime.js +0 -59
  565. package/dist/runtime/runtime.js.map +0 -1
  566. package/dist/runtime/scheduler.d.ts.map +0 -1
  567. package/dist/runtime/scheduler.js.map +0 -1
  568. package/dist/runtime/selector-store.js +0 -24
  569. package/dist/runtime/selector-store.js.map +0 -1
  570. package/dist/runtime/selector.d.ts +0 -11
  571. package/dist/runtime/selector.d.ts.map +0 -1
  572. package/dist/runtime/selector.js.map +0 -1
  573. package/dist/runtime/snapshot-source.d.ts +0 -10
  574. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  575. package/dist/runtime/snapshot-source.js.map +0 -1
  576. package/dist/runtime/state.d.ts +0 -55
  577. package/dist/runtime/state.d.ts.map +0 -1
  578. package/dist/runtime/state.js.map +0 -1
  579. package/dist/ssg/batch-render.js +0 -103
  580. package/dist/ssg/batch-render.js.map +0 -1
  581. package/dist/ssg/create-static-gen.d.ts +0 -64
  582. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  583. package/dist/ssg/create-static-gen.js +0 -199
  584. package/dist/ssg/create-static-gen.js.map +0 -1
  585. package/dist/ssg/generate-metadata.js +0 -94
  586. package/dist/ssg/generate-metadata.js.map +0 -1
  587. package/dist/ssg/generation-plan.js +0 -70
  588. package/dist/ssg/generation-plan.js.map +0 -1
  589. package/dist/ssg/incremental-manifest.js +0 -56
  590. package/dist/ssg/incremental-manifest.js.map +0 -1
  591. package/dist/ssg/resolve-ssg-data.js +0 -105
  592. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  593. package/dist/ssg/route-utils.js +0 -24
  594. package/dist/ssg/route-utils.js.map +0 -1
  595. package/dist/ssg/static-routes.js +0 -102
  596. package/dist/ssg/static-routes.js.map +0 -1
  597. package/dist/ssg/types.d.ts +0 -189
  598. package/dist/ssg/types.d.ts.map +0 -1
  599. package/dist/ssg/write-static-files.js +0 -73
  600. package/dist/ssg/write-static-files.js.map +0 -1
  601. package/dist/ssr/attrs.js +0 -94
  602. package/dist/ssr/attrs.js.map +0 -1
  603. package/dist/ssr/boundaries.js +0 -113
  604. package/dist/ssr/boundaries.js.map +0 -1
  605. package/dist/ssr/component-runtime.js +0 -111
  606. package/dist/ssr/component-runtime.js.map +0 -1
  607. package/dist/ssr/context.d.ts +0 -50
  608. package/dist/ssr/context.d.ts.map +0 -1
  609. package/dist/ssr/context.js +0 -91
  610. package/dist/ssr/context.js.map +0 -1
  611. package/dist/ssr/errors.d.ts +0 -10
  612. package/dist/ssr/errors.d.ts.map +0 -1
  613. package/dist/ssr/errors.js +0 -14
  614. package/dist/ssr/errors.js.map +0 -1
  615. package/dist/ssr/escape.js +0 -193
  616. package/dist/ssr/escape.js.map +0 -1
  617. package/dist/ssr/hydration-data.js +0 -10
  618. package/dist/ssr/hydration-data.js.map +0 -1
  619. package/dist/ssr/hydration-verify.d.ts +0 -12
  620. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  621. package/dist/ssr/hydration-verify.js +0 -144
  622. package/dist/ssr/hydration-verify.js.map +0 -1
  623. package/dist/ssr/index-internal.d.ts +0 -15
  624. package/dist/ssr/index-internal.d.ts.map +0 -1
  625. package/dist/ssr/index-internal.js +0 -19
  626. package/dist/ssr/index-internal.js.map +0 -1
  627. package/dist/ssr/render-keys.js +0 -16
  628. package/dist/ssr/render-keys.js.map +0 -1
  629. package/dist/ssr/render-resolved.d.ts +0 -20
  630. package/dist/ssr/render-resolved.d.ts.map +0 -1
  631. package/dist/ssr/render-resolved.js +0 -35
  632. package/dist/ssr/render-resolved.js.map +0 -1
  633. package/dist/ssr/render-sync.d.ts +0 -21
  634. package/dist/ssr/render-sync.d.ts.map +0 -1
  635. package/dist/ssr/render-sync.js +0 -275
  636. package/dist/ssr/render-sync.js.map +0 -1
  637. package/dist/ssr/route-policy-resolution.js +0 -78
  638. package/dist/ssr/route-policy-resolution.js.map +0 -1
  639. package/dist/ssr/route-render.d.ts +0 -77
  640. package/dist/ssr/route-render.d.ts.map +0 -1
  641. package/dist/ssr/route-render.js +0 -120
  642. package/dist/ssr/route-render.js.map +0 -1
  643. package/dist/ssr/sink.d.ts +0 -26
  644. package/dist/ssr/sink.d.ts.map +0 -1
  645. package/dist/ssr/sink.js +0 -86
  646. package/dist/ssr/sink.js.map +0 -1
  647. package/dist/ssr/types.d.ts +0 -23
  648. package/dist/ssr/types.d.ts.map +0 -1
  649. package/dist/ssr/verify-hydration.js.map +0 -1
  650. package/dist/testing/index.d.ts.map +0 -1
  651. package/dist/testing/index.js.map +0 -1
@@ -1,266 +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 { enqueueRuntimeTask } from "../runtime/access.js";
6
- import { clearCaseDomUpdateState, clearShowDomUpdateState, evaluateCaseState, evaluateShowState } from "../runtime/control.js";
7
- import { recordBenchEvent } from "../runtime/for-bench.js";
8
- import { clearForDomUpdateState, evaluateForState } from "../runtime/for-internal.js";
9
- import "../runtime/index.js";
10
- import { teardownNodeSubtree } from "./cleanup.js";
11
- import "./env.js";
12
- import { tagNamesEqualIgnoreCase } from "./utils.js";
13
- import { keyedElements } from "./keyed.js";
14
- import { commitForStateBoundaryChildren } from "./for-commit.js";
15
- import { getParentNamespace } from "./namespaces.js";
16
- //#region src/renderer/boundaries.ts
17
- let boundaryDOMHost = null;
18
- const controlBoundaryOwners = /* @__PURE__ */ new WeakMap();
19
- function configureBoundaryDOMHost(host) {
20
- boundaryDOMHost = host;
21
- }
22
- function getBoundaryDOMHost() {
23
- if (!boundaryDOMHost) throw new Error("[askr] Control boundary DOM host is not configured.");
24
- return boundaryDOMHost;
25
- }
26
- function checkVNodeShapeChanged(dom, vnode) {
27
- if (!_isDOMElement(vnode)) return true;
28
- if (!(dom instanceof Element)) return true;
29
- const vnodeType = vnode.type;
30
- if (typeof vnodeType !== "string") return true;
31
- return dom.tagName.toLowerCase() !== vnodeType.toLowerCase();
32
- }
33
- function materializeChildScopeDom(vnode, parentNamespace) {
34
- if (vnode === null || vnode === void 0 || vnode === false) return document.createComment("");
35
- const dom = getBoundaryDOMHost().createDOMNode(vnode, parentNamespace);
36
- if (!(dom instanceof DocumentFragment)) return dom;
37
- const firstChild = dom.firstChild;
38
- const secondChild = firstChild?.nextSibling ?? null;
39
- if (!firstChild) return document.createComment("");
40
- if (secondChild) throw new Error("[askr] Child scopes must render a single DOM root node.");
41
- return firstChild;
42
- }
43
- function evaluateControlBoundaryState(controlState) {
44
- if (controlState.kind === "for") return evaluateForState(controlState);
45
- if (controlState.kind === "show") return evaluateShowState(controlState);
46
- return evaluateCaseState(controlState);
47
- }
48
- function clearControlBoundaryDomUpdateState(controlState) {
49
- if (controlState.kind === "for") {
50
- clearForDomUpdateState(controlState);
51
- return;
52
- }
53
- if (controlState.kind === "show") {
54
- clearShowDomUpdateState(controlState);
55
- return;
56
- }
57
- clearCaseDomUpdateState(controlState);
58
- }
59
- function getControlBoundaryState(node) {
60
- return node._controlState ?? node._forState ?? null;
61
- }
62
- function getDirectControlBoundaryVNode(children) {
63
- if (!Array.isArray(children) && _isDOMElement(children) && children.type === __FOR_BOUNDARY__) return children;
64
- if (Array.isArray(children) && children.length === 1 && _isDOMElement(children[0]) && children[0].type === __FOR_BOUNDARY__) return children[0];
65
- return null;
66
- }
67
- function getControlBoundaryCommitChildren(controlState) {
68
- if (controlState.kind === "for" && controlState._needsSourceReconcile) return evaluateForState(controlState);
69
- if (controlState.kind !== "for") {
70
- const activeVNode = controlState.activeScope?.vnode;
71
- return activeVNode == null || activeVNode === false ? [] : [activeVNode];
72
- }
73
- if (controlState.orderedKeys.length === 0) {
74
- const fallbackVNode = controlState.fallbackScope?.vnode;
75
- return fallbackVNode == null || fallbackVNode === false ? [] : [fallbackVNode];
76
- }
77
- const childrenVNodes = [];
78
- for (let index = 0; index < controlState.orderedKeys.length; index += 1) {
79
- const itemKey = controlState.orderedKeys[index];
80
- const itemInstance = controlState.items.get(itemKey);
81
- childrenVNodes.push(itemInstance?.scope.vnode ?? null);
82
- }
83
- return childrenVNodes;
84
- }
85
- function clearControlBoundaryCommitOwner(parent) {
86
- const owner = controlBoundaryOwners.get(parent);
87
- if (owner) {
88
- owner._enqueueBoundaryCommit = null;
89
- owner._hasPendingBoundaryCommit = false;
90
- if (owner._commitOwner === parent) owner._commitOwner = null;
91
- }
92
- controlBoundaryOwners.delete(parent);
93
- }
94
- function registerControlBoundaryCommitOwner(parent, controlState) {
95
- const ownerState = controlState;
96
- const previousParent = ownerState._commitOwner;
97
- if (previousParent && previousParent !== parent && controlBoundaryOwners.get(previousParent) === controlState) controlBoundaryOwners.delete(previousParent);
98
- const previousOwner = controlBoundaryOwners.get(parent);
99
- if (previousOwner && previousOwner !== controlState) {
100
- previousOwner._enqueueBoundaryCommit = null;
101
- previousOwner._hasPendingBoundaryCommit = false;
102
- if (previousOwner._commitOwner === parent) previousOwner._commitOwner = null;
103
- }
104
- controlBoundaryOwners.set(parent, controlState);
105
- ownerState._commitOwner = parent;
106
- controlState._enqueueBoundaryCommit = () => {
107
- if (controlState._hasPendingBoundaryCommit) return;
108
- controlState._hasPendingBoundaryCommit = true;
109
- enqueueRuntimeTask(() => {
110
- controlState._hasPendingBoundaryCommit = false;
111
- if (controlBoundaryOwners.get(parent) !== controlState) return;
112
- commitForBoundaryChildren(parent, controlState, getControlBoundaryCommitChildren(controlState));
113
- });
114
- };
115
- }
116
- /**
117
- * Create DOM from For/Show/Case control boundaries.
118
- *
119
- * DOM order is reconstructed from the current vnode list on every render.
120
- * Reusing DOM nodes never implies preserving their position; appending an
121
- * existing node to the fragment expresses reordering per the DOM spec.
122
- */
123
- function createForBoundary(node, props, parentNamespace) {
124
- const controlState = getControlBoundaryState(node);
125
- if (!controlState) {
126
- if (getRuntimeEnv().NODE_ENV !== "production") logger.warn("[Askr] Control boundary missing state");
127
- return document.createDocumentFragment();
128
- }
129
- const childrenVNodes = evaluateControlBoundaryState(controlState);
130
- const fragment = document.createDocumentFragment();
131
- if (controlState.kind !== "for") {
132
- const activeScope = controlState.activeScope;
133
- const vnode = childrenVNodes[0];
134
- if (activeScope && vnode !== void 0) {
135
- const dom = materializeChildScopeDom(vnode, parentNamespace);
136
- activeScope.dom = dom ?? void 0;
137
- if (dom) fragment.appendChild(dom);
138
- }
139
- clearControlBoundaryDomUpdateState(controlState);
140
- return fragment;
141
- }
142
- const forState = controlState;
143
- if (forState.orderedKeys.length === 0) {
144
- const fallbackScope = forState.fallbackScope;
145
- const fallbackVNode = childrenVNodes[0];
146
- if (fallbackScope && fallbackVNode !== void 0) {
147
- const dom = materializeChildScopeDom(fallbackVNode, parentNamespace);
148
- fallbackScope.dom = dom ?? void 0;
149
- if (dom) fragment.appendChild(dom);
150
- }
151
- clearControlBoundaryDomUpdateState(controlState);
152
- return fragment;
153
- }
154
- for (let i = 0; i < childrenVNodes.length; i++) {
155
- const childVNode = childrenVNodes[i];
156
- const itemKey = forState.orderedKeys[i];
157
- const itemInstance = itemKey != null ? forState.items.get(itemKey) : null;
158
- let dom = null;
159
- if (itemInstance && itemInstance.scope.dom) {
160
- const cachedDom = itemInstance.scope.dom;
161
- if (!checkVNodeShapeChanged(cachedDom, childVNode)) dom = cachedDom;
162
- }
163
- if (!dom) {
164
- dom = materializeChildScopeDom(childVNode, parentNamespace);
165
- if (itemInstance) itemInstance.scope.dom = dom ?? void 0;
166
- }
167
- if (dom) fragment.appendChild(dom);
168
- }
169
- clearControlBoundaryDomUpdateState(controlState);
170
- return fragment;
171
- }
172
- function syncControlBoundaryScopeDom(parent, scope, vnode) {
173
- let dom = scope.dom ?? null;
174
- const parentNamespace = getParentNamespace(parent);
175
- const host = getBoundaryDOMHost();
176
- if (_isDOMElement(vnode) && typeof vnode.type === "function") {
177
- const syncedComponentDom = host.syncComponentElement(dom, vnode, vnode.type, vnode.props ?? {}, parentNamespace);
178
- if (syncedComponentDom) {
179
- scope.dom = syncedComponentDom ?? void 0;
180
- return syncedComponentDom;
181
- }
182
- }
183
- if (!dom) {
184
- dom = materializeChildScopeDom(vnode, parentNamespace);
185
- scope.dom = dom ?? void 0;
186
- return dom;
187
- }
188
- if (dom.nodeType === 3 && (typeof vnode === "string" || typeof vnode === "number")) {
189
- dom.data = String(vnode);
190
- return dom;
191
- }
192
- if (dom.nodeType === 8 && (vnode === null || vnode === void 0 || vnode === false)) return dom;
193
- if (dom instanceof Element && _isDOMElement(vnode) && typeof vnode.type === "string" && tagNamesEqualIgnoreCase(dom.tagName, vnode.type)) {
194
- host.updateElementFromVnode(dom, vnode, true);
195
- return dom;
196
- }
197
- const nextDom = materializeChildScopeDom(vnode, parentNamespace);
198
- if (!nextDom) {
199
- if (dom.parentNode === parent) {
200
- teardownNodeSubtree(dom);
201
- dom.parentNode.removeChild(dom);
202
- }
203
- scope.dom = void 0;
204
- return null;
205
- }
206
- if (dom.parentNode === parent) parent.replaceChild(nextDom, dom);
207
- teardownNodeSubtree(dom);
208
- scope.dom = nextDom;
209
- return nextDom;
210
- }
211
- function commitForBoundaryChildren(parent, controlState, childrenVNodes) {
212
- if (controlState.kind !== "for") {
213
- const activeScope = controlState.activeScope;
214
- const activeVNode = childrenVNodes[0];
215
- const nextDom = activeScope && activeVNode !== void 0 ? syncControlBoundaryScopeDom(parent, activeScope, activeVNode) : null;
216
- for (let i = 0; i < controlState.lastRemovedNodes.length; i++) {
217
- const removedNode = controlState.lastRemovedNodes[i];
218
- if (removedNode instanceof Element) teardownNodeSubtree(removedNode);
219
- if (removedNode.parentNode === parent) {
220
- recordBenchEvent("domRemove");
221
- parent.removeChild(removedNode);
222
- }
223
- }
224
- if (nextDom) {
225
- if (parent.childNodes.length !== 1 || parent.firstChild !== nextDom || controlState.lastRemovedNodes.length > 0) parent.replaceChildren(nextDom);
226
- } else if (parent.firstChild) parent.textContent = "";
227
- keyedElements.delete(parent);
228
- clearControlBoundaryDomUpdateState(controlState);
229
- return;
230
- }
231
- commitForStateBoundaryChildren(parent, controlState, childrenVNodes, {
232
- isProduction: () => getRuntimeEnv().NODE_ENV === "production",
233
- syncForItemDom: syncControlBoundaryScopeDom,
234
- tryPatchStableForDirtyItem: (scope) => getBoundaryDOMHost().tryPatchStableForDirtyItem(scope)
235
- });
236
- }
237
- function trySyncControlBoundaryChild(parent, currentNode, next) {
238
- if (next.type !== __FOR_BOUNDARY__) return false;
239
- const controlState = getControlBoundaryState(next);
240
- if (!controlState || controlState.kind === "for") return false;
241
- const childrenVNodes = evaluateControlBoundaryState(controlState);
242
- const activeScope = controlState.activeScope;
243
- const activeVNode = childrenVNodes[0];
244
- const nextDom = activeScope && activeVNode !== void 0 ? syncControlBoundaryScopeDom(parent, activeScope, activeVNode) : null;
245
- for (let i = 0; i < controlState.lastRemovedNodes.length; i++) {
246
- const removedNode = controlState.lastRemovedNodes[i];
247
- if (removedNode.parentNode !== parent) continue;
248
- teardownNodeSubtree(removedNode);
249
- if (nextDom && nextDom !== removedNode && !nextDom.parentNode) parent.replaceChild(nextDom, removedNode);
250
- else parent.removeChild(removedNode);
251
- }
252
- if (nextDom && !nextDom.parentNode) if (currentNode?.parentNode === parent) {
253
- teardownNodeSubtree(currentNode);
254
- parent.replaceChild(nextDom, currentNode);
255
- } else parent.appendChild(nextDom);
256
- else if (!nextDom && currentNode?.parentNode === parent) {
257
- teardownNodeSubtree(currentNode);
258
- parent.removeChild(currentNode);
259
- }
260
- clearControlBoundaryDomUpdateState(controlState);
261
- return true;
262
- }
263
- //#endregion
264
- export { clearControlBoundaryCommitOwner, commitForBoundaryChildren, configureBoundaryDOMHost, createForBoundary, evaluateControlBoundaryState, getControlBoundaryState, getDirectControlBoundaryVNode, registerControlBoundaryCommitOwner, syncControlBoundaryScopeDom, trySyncControlBoundaryChild };
265
-
266
- //# sourceMappingURL=boundaries.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boundaries.js","names":[],"sources":["../../src/renderer/boundaries.ts"],"sourcesContent":["import { __FOR_BOUNDARY__ } from '../common/vnode';\nimport { logger } from '../common/logger';\nimport { enqueueRuntimeTask } from '../runtime';\nimport type { ChildScope } from '../runtime';\nimport type { ComponentFunction, ComponentInstance } from '../runtime';\nimport {\n clearCaseDomUpdateState,\n clearShowDomUpdateState,\n evaluateCaseState,\n evaluateShowState,\n type ControlBoundaryState,\n} from '../runtime';\nimport {\n clearForDomUpdateState,\n evaluateForState,\n recordBenchEvent,\n} from '../runtime';\nimport { teardownNodeSubtree } from './cleanup';\nimport { getRuntimeEnv } from './env';\nimport { commitForStateBoundaryChildren } from './for-commit';\nimport { keyedElements } from './keyed';\nimport { getParentNamespace } from './namespaces';\nimport { _isDOMElement, type DOMElement, type VNode } from './types';\nimport { tagNamesEqualIgnoreCase } from './utils';\n\ntype ElementWithContext = DOMElement & {\n __instance?: ComponentInstance;\n};\n\ntype BoundaryCommitOwnerState = ControlBoundaryState & {\n _commitOwner?: Element | null;\n};\n\nexport interface BoundaryDOMHost {\n createDOMNode(vnode: unknown, parentNamespace?: string): Node | null;\n syncComponentElement(\n currentDom: Node | null,\n node: ElementWithContext,\n type: ComponentFunction,\n props: Record<string, unknown>,\n parentNamespace?: string,\n forceChildrenUpdate?: boolean,\n retainedHostInstances?: Iterable<ComponentInstance>\n ): Node | null;\n updateElementFromVnode(\n el: Element,\n vnode: VNode,\n updateChildren?: boolean,\n forceChildrenUpdate?: boolean\n ): void;\n tryPatchStableForDirtyItem(scope: { dom?: Node; vnode?: VNode }): boolean;\n}\n\nlet boundaryDOMHost: BoundaryDOMHost | null = null;\nconst controlBoundaryOwners = new WeakMap<Element, ControlBoundaryState>();\n\nexport function configureBoundaryDOMHost(host: BoundaryDOMHost): void {\n boundaryDOMHost = host;\n}\n\nfunction getBoundaryDOMHost(): BoundaryDOMHost {\n if (!boundaryDOMHost) {\n throw new Error('[askr] Control boundary DOM host is not configured.');\n }\n return boundaryDOMHost;\n}\n\nfunction checkVNodeShapeChanged(dom: Node, vnode: VNode): boolean {\n if (!_isDOMElement(vnode)) return true;\n if (!(dom instanceof Element)) return true;\n const vnodeType = (vnode as DOMElement).type;\n if (typeof vnodeType !== 'string') return true;\n return dom.tagName.toLowerCase() !== vnodeType.toLowerCase();\n}\n\nfunction materializeChildScopeDom(\n vnode: VNode,\n parentNamespace?: string\n): Node | null {\n if (vnode === null || vnode === undefined || vnode === false) {\n return document.createComment('');\n }\n\n const dom = getBoundaryDOMHost().createDOMNode(vnode, parentNamespace);\n if (!(dom instanceof DocumentFragment)) {\n return dom;\n }\n\n const firstChild = dom.firstChild;\n const secondChild = firstChild?.nextSibling ?? null;\n if (!firstChild) {\n return document.createComment('');\n }\n if (secondChild) {\n throw new Error('[askr] Child scopes must render a single DOM root node.');\n }\n return firstChild;\n}\n\nexport function evaluateControlBoundaryState(\n controlState: ControlBoundaryState\n): VNode[] {\n if (controlState.kind === 'for') {\n return evaluateForState(controlState);\n }\n if (controlState.kind === 'show') {\n return evaluateShowState(controlState);\n }\n return evaluateCaseState(controlState);\n}\n\nfunction clearControlBoundaryDomUpdateState(\n controlState: ControlBoundaryState\n): void {\n if (controlState.kind === 'for') {\n clearForDomUpdateState(controlState);\n return;\n }\n if (controlState.kind === 'show') {\n clearShowDomUpdateState(controlState);\n return;\n }\n clearCaseDomUpdateState(controlState);\n}\n\nexport function getControlBoundaryState(\n node: DOMElement\n): ControlBoundaryState | null {\n return (\n node._controlState ??\n (node._forState as ControlBoundaryState | undefined) ??\n null\n );\n}\n\nexport function getDirectControlBoundaryVNode(\n children: unknown\n): DOMElement | null {\n if (\n !Array.isArray(children) &&\n _isDOMElement(children) &&\n (children as DOMElement).type === __FOR_BOUNDARY__\n ) {\n return children as DOMElement;\n }\n\n if (\n Array.isArray(children) &&\n children.length === 1 &&\n _isDOMElement(children[0]) &&\n (children[0] as DOMElement).type === __FOR_BOUNDARY__\n ) {\n return children[0] as DOMElement;\n }\n\n return null;\n}\n\nfunction getControlBoundaryCommitChildren(\n controlState: ControlBoundaryState\n): VNode[] {\n if (controlState.kind === 'for' && controlState._needsSourceReconcile) {\n return evaluateForState(controlState);\n }\n\n if (controlState.kind !== 'for') {\n const activeVNode = controlState.activeScope?.vnode;\n return activeVNode == null || activeVNode === false ? [] : [activeVNode];\n }\n\n if (controlState.orderedKeys.length === 0) {\n const fallbackVNode = controlState.fallbackScope?.vnode;\n return fallbackVNode == null || fallbackVNode === false\n ? []\n : [fallbackVNode];\n }\n\n const childrenVNodes: VNode[] = [];\n for (let index = 0; index < controlState.orderedKeys.length; index += 1) {\n const itemKey = controlState.orderedKeys[index];\n const itemInstance = controlState.items.get(itemKey);\n childrenVNodes.push((itemInstance?.scope.vnode ?? null) as VNode);\n }\n\n return childrenVNodes;\n}\n\nexport function clearControlBoundaryCommitOwner(parent: Element): void {\n const owner = controlBoundaryOwners.get(parent) as\n | BoundaryCommitOwnerState\n | undefined;\n if (owner) {\n owner._enqueueBoundaryCommit = null;\n owner._hasPendingBoundaryCommit = false;\n if (owner._commitOwner === parent) {\n owner._commitOwner = null;\n }\n }\n\n controlBoundaryOwners.delete(parent);\n}\n\nexport function registerControlBoundaryCommitOwner(\n parent: Element,\n controlState: ControlBoundaryState\n): void {\n const ownerState = controlState as BoundaryCommitOwnerState;\n const previousParent = ownerState._commitOwner;\n if (\n previousParent &&\n previousParent !== parent &&\n controlBoundaryOwners.get(previousParent) === controlState\n ) {\n controlBoundaryOwners.delete(previousParent);\n }\n\n const previousOwner = controlBoundaryOwners.get(parent) as\n | BoundaryCommitOwnerState\n | undefined;\n if (previousOwner && previousOwner !== controlState) {\n previousOwner._enqueueBoundaryCommit = null;\n previousOwner._hasPendingBoundaryCommit = false;\n if (previousOwner._commitOwner === parent) {\n previousOwner._commitOwner = null;\n }\n }\n\n controlBoundaryOwners.set(parent, controlState);\n ownerState._commitOwner = parent;\n controlState._enqueueBoundaryCommit = () => {\n if (controlState._hasPendingBoundaryCommit) {\n return;\n }\n\n controlState._hasPendingBoundaryCommit = true;\n enqueueRuntimeTask(() => {\n controlState._hasPendingBoundaryCommit = false;\n\n if (controlBoundaryOwners.get(parent) !== controlState) {\n return;\n }\n\n const childrenVNodes = getControlBoundaryCommitChildren(controlState);\n commitForBoundaryChildren(parent, controlState, childrenVNodes);\n });\n };\n}\n\n/**\n * Create DOM from For/Show/Case control boundaries.\n *\n * DOM order is reconstructed from the current vnode list on every render.\n * Reusing DOM nodes never implies preserving their position; appending an\n * existing node to the fragment expresses reordering per the DOM spec.\n */\nexport function createForBoundary(\n node: DOMElement,\n props: Record<string, unknown>,\n parentNamespace?: string\n): DocumentFragment {\n void props;\n const controlState = getControlBoundaryState(node);\n\n if (!controlState) {\n if (getRuntimeEnv().NODE_ENV !== 'production') {\n logger.warn('[Askr] Control boundary missing state');\n }\n return document.createDocumentFragment();\n }\n\n const childrenVNodes = evaluateControlBoundaryState(controlState);\n const fragment = document.createDocumentFragment();\n\n if (controlState.kind !== 'for') {\n const activeScope = controlState.activeScope;\n const vnode = childrenVNodes[0];\n if (activeScope && vnode !== undefined) {\n const dom = materializeChildScopeDom(vnode, parentNamespace);\n activeScope.dom = dom ?? undefined;\n if (dom) {\n fragment.appendChild(dom);\n }\n }\n clearControlBoundaryDomUpdateState(controlState);\n return fragment;\n }\n\n const forState = controlState;\n if (forState.orderedKeys.length === 0) {\n const fallbackScope = forState.fallbackScope;\n const fallbackVNode = childrenVNodes[0];\n if (fallbackScope && fallbackVNode !== undefined) {\n const dom = materializeChildScopeDom(fallbackVNode, parentNamespace);\n fallbackScope.dom = dom ?? undefined;\n if (dom) {\n fragment.appendChild(dom);\n }\n }\n clearControlBoundaryDomUpdateState(controlState);\n return fragment;\n }\n\n for (let i = 0; i < childrenVNodes.length; i++) {\n const childVNode = childrenVNodes[i];\n const itemKey = forState.orderedKeys[i];\n const itemInstance = itemKey != null ? forState.items.get(itemKey) : null;\n\n let dom: Node | null = null;\n\n if (itemInstance && itemInstance.scope.dom) {\n const cachedDom = itemInstance.scope.dom;\n if (!checkVNodeShapeChanged(cachedDom, childVNode)) {\n dom = cachedDom;\n }\n }\n\n if (!dom) {\n dom = materializeChildScopeDom(childVNode, parentNamespace);\n if (itemInstance) {\n itemInstance.scope.dom = dom ?? undefined;\n }\n }\n\n if (dom) {\n fragment.appendChild(dom);\n }\n }\n\n clearControlBoundaryDomUpdateState(controlState);\n return fragment;\n}\n\nexport function syncControlBoundaryScopeDom(\n parent: Element,\n scope: ChildScope,\n vnode: VNode\n): Node | null {\n let dom = scope.dom ?? null;\n const parentNamespace = getParentNamespace(parent);\n const host = getBoundaryDOMHost();\n\n if (_isDOMElement(vnode) && typeof vnode.type === 'function') {\n const syncedComponentDom = host.syncComponentElement(\n dom,\n vnode as ElementWithContext,\n vnode.type as ComponentFunction,\n ((vnode as DOMElement).props ?? {}) as Record<string, unknown>,\n parentNamespace\n );\n if (syncedComponentDom) {\n scope.dom = syncedComponentDom ?? undefined;\n return syncedComponentDom;\n }\n }\n\n if (!dom) {\n dom = materializeChildScopeDom(vnode, parentNamespace);\n scope.dom = dom ?? undefined;\n return dom;\n }\n\n if (\n dom.nodeType === 3 &&\n (typeof vnode === 'string' || typeof vnode === 'number')\n ) {\n (dom as Text).data = String(vnode);\n return dom;\n }\n\n if (\n dom.nodeType === 8 &&\n (vnode === null || vnode === undefined || vnode === false)\n ) {\n return dom;\n }\n\n if (\n dom instanceof Element &&\n _isDOMElement(vnode) &&\n typeof vnode.type === 'string' &&\n tagNamesEqualIgnoreCase(dom.tagName, vnode.type)\n ) {\n host.updateElementFromVnode(dom, vnode, true);\n return dom;\n }\n\n const nextDom = materializeChildScopeDom(vnode, parentNamespace);\n if (!nextDom) {\n if (dom.parentNode === parent) {\n teardownNodeSubtree(dom);\n dom.parentNode.removeChild(dom);\n }\n scope.dom = undefined;\n return null;\n }\n\n if (dom.parentNode === parent) {\n parent.replaceChild(nextDom, dom);\n }\n\n teardownNodeSubtree(dom);\n\n scope.dom = nextDom;\n return nextDom;\n}\n\nexport function commitForBoundaryChildren(\n parent: Element,\n controlState: ControlBoundaryState,\n childrenVNodes: VNode[]\n): void {\n if (controlState.kind !== 'for') {\n const activeScope = controlState.activeScope;\n const activeVNode = childrenVNodes[0];\n const nextDom =\n activeScope && activeVNode !== undefined\n ? syncControlBoundaryScopeDom(parent, activeScope, activeVNode)\n : null;\n\n for (let i = 0; i < controlState.lastRemovedNodes.length; i++) {\n const removedNode = controlState.lastRemovedNodes[i];\n if (removedNode instanceof Element) {\n teardownNodeSubtree(removedNode);\n }\n if (removedNode.parentNode === parent) {\n recordBenchEvent('domRemove');\n parent.removeChild(removedNode);\n }\n }\n\n if (nextDom) {\n if (\n parent.childNodes.length !== 1 ||\n parent.firstChild !== nextDom ||\n controlState.lastRemovedNodes.length > 0\n ) {\n parent.replaceChildren(nextDom);\n }\n } else if (parent.firstChild) {\n parent.textContent = '';\n }\n\n keyedElements.delete(parent);\n clearControlBoundaryDomUpdateState(controlState);\n return;\n }\n\n commitForStateBoundaryChildren(parent, controlState, childrenVNodes, {\n isProduction: () => getRuntimeEnv().NODE_ENV === 'production',\n syncForItemDom: syncControlBoundaryScopeDom,\n tryPatchStableForDirtyItem: (scope) =>\n getBoundaryDOMHost().tryPatchStableForDirtyItem(scope),\n });\n}\n\nexport function trySyncControlBoundaryChild(\n parent: Element,\n currentNode: Node | null,\n next: DOMElement\n): boolean {\n if (next.type !== __FOR_BOUNDARY__) {\n return false;\n }\n\n const controlState = getControlBoundaryState(next);\n if (!controlState || controlState.kind === 'for') {\n return false;\n }\n\n const childrenVNodes = evaluateControlBoundaryState(controlState);\n const activeScope = controlState.activeScope;\n const activeVNode = childrenVNodes[0];\n const nextDom =\n activeScope && activeVNode !== undefined\n ? syncControlBoundaryScopeDom(parent, activeScope, activeVNode)\n : null;\n\n for (let i = 0; i < controlState.lastRemovedNodes.length; i++) {\n const removedNode = controlState.lastRemovedNodes[i];\n if (removedNode.parentNode !== parent) {\n continue;\n }\n\n teardownNodeSubtree(removedNode);\n if (nextDom && nextDom !== removedNode && !nextDom.parentNode) {\n parent.replaceChild(nextDom, removedNode);\n } else {\n parent.removeChild(removedNode);\n }\n }\n\n if (nextDom && !nextDom.parentNode) {\n if (currentNode?.parentNode === parent) {\n teardownNodeSubtree(currentNode);\n parent.replaceChild(nextDom, currentNode);\n } else {\n parent.appendChild(nextDom);\n }\n } else if (!nextDom && currentNode?.parentNode === parent) {\n teardownNodeSubtree(currentNode);\n parent.removeChild(currentNode);\n }\n\n clearControlBoundaryDomUpdateState(controlState);\n return true;\n}\n"],"mappings":"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"}
@@ -1,85 +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, STATIC_CHILDREN } from "../common/jsx.js";
6
- import { getCurrentInstance } from "../runtime/component-scope.js";
7
- import "../runtime/index.js";
8
- import "./env.js";
9
- import { isSkippedProp, parseEventName } from "./utils.js";
10
- import "../jsx-runtime.js";
11
- //#region src/renderer/child-shape.ts
12
- function isFragmentVNode(node) {
13
- return _isDOMElement(node) && typeof node.type === "symbol" && (node.type === Fragment || String(node.type) === "Symbol(askr.fragment)");
14
- }
15
- function normalizeComponentChildren(result) {
16
- if (result === null || result === void 0 || result === false) return [];
17
- if (Array.isArray(result)) {
18
- const children = [];
19
- for (const child of result) children.push(...normalizeComponentChildren(child));
20
- return children;
21
- }
22
- if (isFragmentVNode(result)) return normalizeComponentChildren(result.props?.children ?? result.children ?? []);
23
- return [result];
24
- }
25
- function warnMissingKeys(children) {
26
- if (getRuntimeEnv().NODE_ENV === "production") return;
27
- let hasElements = false;
28
- let hasKeys = false;
29
- for (const item of children) if (typeof item === "object" && item !== null && "type" in item) {
30
- if (item.type === __FOR_BOUNDARY__) continue;
31
- hasElements = true;
32
- if ((item.key ?? item.props?.key) !== void 0) {
33
- hasKeys = true;
34
- break;
35
- }
36
- }
37
- if (hasElements && !hasKeys) {
38
- const inst = getCurrentInstance();
39
- const warnings = inst ? inst.devWarningsEmitted ??= /* @__PURE__ */ new Set() : null;
40
- if (warnings?.has("missing-keys")) return;
41
- warnings?.add("missing-keys");
42
- try {
43
- const name = inst?.fn?.name || "<anonymous>";
44
- logger.warn(`Missing keys on dynamic lists in ${name}. Each child in a list should have a unique "key" prop.`);
45
- } catch {
46
- logger.warn("Missing keys on dynamic lists. Each child in a list should have a unique \"key\" prop.");
47
- }
48
- }
49
- }
50
- function hasStaticChildrenMarker(children) {
51
- return children[STATIC_CHILDREN] === true;
52
- }
53
- function maybeWarnMissingKeys(children) {
54
- if (!hasStaticChildrenMarker(children)) warnMissingKeys(children);
55
- }
56
- function tryGetStaticCreateChildShape(children) {
57
- if (children === null || children === void 0 || children === false) return { textContent: null };
58
- if (typeof children === "string" || typeof children === "number") return { textContent: String(children) };
59
- if (Array.isArray(children) && children.length === 1) {
60
- const child = children[0];
61
- if (child === null || child === void 0 || child === false) return { textContent: null };
62
- if (typeof child === "string" || typeof child === "number") return { textContent: String(child) };
63
- }
64
- return null;
65
- }
66
- function isStaticCreateScalarValue(value) {
67
- const valueType = typeof value;
68
- return valueType === "string" || valueType === "number" || valueType === "boolean";
69
- }
70
- function tryGetStaticCreateFastPathShape(props, children) {
71
- const childShape = tryGetStaticCreateChildShape(children);
72
- if (!childShape) return null;
73
- for (const key in props) {
74
- if (key === "ref") return null;
75
- if (isSkippedProp(key)) continue;
76
- const value = props[key];
77
- if (value === void 0 || value === null || value === false) continue;
78
- if (parseEventName(key) || !isStaticCreateScalarValue(value)) return null;
79
- }
80
- return childShape;
81
- }
82
- //#endregion
83
- export { isFragmentVNode, maybeWarnMissingKeys, normalizeComponentChildren, tryGetStaticCreateFastPathShape };
84
-
85
- //# sourceMappingURL=child-shape.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"child-shape.js","names":[],"sources":["../../src/renderer/child-shape.ts"],"sourcesContent":["import { STATIC_CHILDREN } from '../common/jsx';\nimport { __FOR_BOUNDARY__ } from '../common/vnode';\nimport { logger } from '../common/logger';\nimport { Fragment } from '../jsx/jsx-runtime';\nimport { getCurrentInstance } from '../runtime';\nimport { getRuntimeEnv } from './env';\nimport { _isDOMElement, type DOMElement } from './types';\nimport { isSkippedProp, parseEventName } from './utils';\n\nexport type StaticCreateChildShape = {\n textContent: string | null;\n};\n\nexport function isFragmentVNode(node: unknown): node is DOMElement {\n return (\n _isDOMElement(node) &&\n typeof (node as DOMElement).type === 'symbol' &&\n ((node as DOMElement).type === Fragment ||\n String((node as DOMElement).type) === 'Symbol(askr.fragment)')\n );\n}\n\nexport function normalizeComponentChildren(result: unknown): unknown[] {\n if (result === null || result === undefined || result === false) {\n return [];\n }\n\n if (Array.isArray(result)) {\n const children: unknown[] = [];\n for (const child of result) {\n children.push(...normalizeComponentChildren(child));\n }\n return children;\n }\n\n if (isFragmentVNode(result)) {\n const children = result.props?.children ?? result.children ?? [];\n return normalizeComponentChildren(children);\n }\n\n return [result];\n}\n\nfunction warnMissingKeys(children: unknown[]): void {\n if (getRuntimeEnv().NODE_ENV === 'production') return;\n\n let hasElements = false;\n let hasKeys = false;\n\n for (const item of children) {\n if (typeof item === 'object' && item !== null && 'type' in item) {\n if ((item as DOMElement).type === __FOR_BOUNDARY__) continue;\n hasElements = true;\n const rawKey =\n (item as DOMElement).key ??\n ((item as DOMElement).props as Record<string, unknown> | undefined)\n ?.key;\n if (rawKey !== undefined) {\n hasKeys = true;\n break;\n }\n }\n }\n\n if (hasElements && !hasKeys) {\n const inst = getCurrentInstance();\n const warnings = inst ? (inst.devWarningsEmitted ??= new Set()) : null;\n if (warnings?.has('missing-keys')) return;\n warnings?.add('missing-keys');\n try {\n const name = inst?.fn?.name || '<anonymous>';\n logger.warn(\n `Missing keys on dynamic lists in ${name}. Each child in a list should have a unique \"key\" prop.`\n );\n } catch {\n logger.warn(\n 'Missing keys on dynamic lists. Each child in a list should have a unique \"key\" prop.'\n );\n }\n }\n}\n\nfunction hasStaticChildrenMarker(children: unknown[]): boolean {\n return (\n (\n children as unknown as {\n [STATIC_CHILDREN]?: boolean;\n }\n )[STATIC_CHILDREN] === true\n );\n}\n\nexport function maybeWarnMissingKeys(children: unknown[]): void {\n if (!hasStaticChildrenMarker(children)) {\n warnMissingKeys(children);\n }\n}\n\nfunction tryGetStaticCreateChildShape(\n children: unknown\n): StaticCreateChildShape | null {\n if (children === null || children === undefined || children === false) {\n return { textContent: null };\n }\n\n if (typeof children === 'string' || typeof children === 'number') {\n return { textContent: String(children) };\n }\n\n if (Array.isArray(children) && children.length === 1) {\n const child = children[0];\n if (child === null || child === undefined || child === false) {\n return { textContent: null };\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return { textContent: String(child) };\n }\n }\n\n return null;\n}\n\nfunction isStaticCreateScalarValue(value: unknown): boolean {\n const valueType = typeof value;\n return (\n valueType === 'string' || valueType === 'number' || valueType === 'boolean'\n );\n}\n\nexport function tryGetStaticCreateFastPathShape(\n props: Record<string, unknown>,\n children: unknown\n): StaticCreateChildShape | null {\n const childShape = tryGetStaticCreateChildShape(children);\n if (!childShape) {\n return null;\n }\n\n for (const key in props) {\n if (key === 'ref') {\n return null;\n }\n if (isSkippedProp(key)) {\n continue;\n }\n\n const value = props[key];\n if (value === undefined || value === null || value === false) {\n continue;\n }\n\n if (parseEventName(key) || !isStaticCreateScalarValue(value)) {\n return null;\n }\n }\n\n return childShape;\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAgB,gBAAgB,MAAmC;CACjE,OACE,cAAc,IAAI,KAClB,OAAQ,KAAoB,SAAS,aACnC,KAAoB,SAAS,YAC7B,OAAQ,KAAoB,IAAI,MAAM;AAE5C;AAEA,SAAgB,2BAA2B,QAA4B;CACrE,IAAI,WAAW,QAAQ,WAAW,UAAa,WAAW,OACxD,OAAO,CAAC;CAGV,IAAI,MAAM,QAAQ,MAAM,GAAG;EACzB,MAAM,WAAsB,CAAC;EAC7B,KAAK,MAAM,SAAS,QAClB,SAAS,KAAK,GAAG,2BAA2B,KAAK,CAAC;EAEpD,OAAO;CACT;CAEA,IAAI,gBAAgB,MAAM,GAExB,OAAO,2BADU,OAAO,OAAO,YAAY,OAAO,YAAY,CAAC,CACrB;CAG5C,OAAO,CAAC,MAAM;AAChB;AAEA,SAAS,gBAAgB,UAA2B;CAClD,IAAI,cAAc,CAAC,CAAC,aAAa,cAAc;CAE/C,IAAI,cAAc;CAClB,IAAI,UAAU;CAEd,KAAK,MAAM,QAAQ,UACjB,IAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,MAAM;EAC/D,IAAK,KAAoB,SAAS,kBAAkB;EACpD,cAAc;EAKd,KAHG,KAAoB,OACnB,KAAoB,OAClB,SACS,QAAW;GACxB,UAAU;GACV;EACF;CACF;CAGF,IAAI,eAAe,CAAC,SAAS;EAC3B,MAAM,OAAO,mBAAmB;EAChC,MAAM,WAAW,OAAQ,KAAK,uCAAuB,IAAI,IAAI,IAAK;EAClE,IAAI,UAAU,IAAI,cAAc,GAAG;EACnC,UAAU,IAAI,cAAc;EAC5B,IAAI;GACF,MAAM,OAAO,MAAM,IAAI,QAAQ;GAC/B,OAAO,KACL,oCAAoC,KAAK,wDAC3C;EACF,QAAQ;GACN,OAAO,KACL,wFACF;EACF;CACF;AACF;AAEA,SAAS,wBAAwB,UAA8B;CAC7D,OAEI,SAGA,qBAAqB;AAE3B;AAEA,SAAgB,qBAAqB,UAA2B;CAC9D,IAAI,CAAC,wBAAwB,QAAQ,GACnC,gBAAgB,QAAQ;AAE5B;AAEA,SAAS,6BACP,UAC+B;CAC/B,IAAI,aAAa,QAAQ,aAAa,UAAa,aAAa,OAC9D,OAAO,EAAE,aAAa,KAAK;CAG7B,IAAI,OAAO,aAAa,YAAY,OAAO,aAAa,UACtD,OAAO,EAAE,aAAa,OAAO,QAAQ,EAAE;CAGzC,IAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;EACpD,MAAM,QAAQ,SAAS;EACvB,IAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,OACrD,OAAO,EAAE,aAAa,KAAK;EAE7B,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAChD,OAAO,EAAE,aAAa,OAAO,KAAK,EAAE;CAExC;CAEA,OAAO;AACT;AAEA,SAAS,0BAA0B,OAAyB;CAC1D,MAAM,YAAY,OAAO;CACzB,OACE,cAAc,YAAY,cAAc,YAAY,cAAc;AAEtE;AAEA,SAAgB,gCACd,OACA,UAC+B;CAC/B,MAAM,aAAa,6BAA6B,QAAQ;CACxD,IAAI,CAAC,YACH,OAAO;CAGT,KAAK,MAAM,OAAO,OAAO;EACvB,IAAI,QAAQ,OACV,OAAO;EAET,IAAI,cAAc,GAAG,GACnB;EAGF,MAAM,QAAQ,MAAM;EACpB,IAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,OACrD;EAGF,IAAI,eAAe,GAAG,KAAK,CAAC,0BAA0B,KAAK,GACzD,OAAO;CAEX;CAEA,OAAO;AACT"}
@@ -1,149 +0,0 @@
1
- import { _isDOMElement } from "../common/vnode.js";
2
- import "./types.js";
3
- import { getRuntimeEnv } from "../common/env.js";
4
- import { teardownNodeSubtree } from "./cleanup.js";
5
- import "./env.js";
6
- import { hasNonTrivialProps, logFastPathDebug, now, recordFastPathStats, tagNamesEqualIgnoreCase } from "./utils.js";
7
- import { keyedElements } from "./keyed.js";
8
- import { createDOMNode, updateElementFromVnode } from "./dom-internal.js";
9
- import "./dom.js";
10
- //#region src/renderer/children-fastpath.ts
11
- function upperCommonTagName(tag) {
12
- switch (tag) {
13
- case "div": return "DIV";
14
- case "span": return "SPAN";
15
- case "p": return "P";
16
- case "a": return "A";
17
- case "button": return "BUTTON";
18
- case "input": return "INPUT";
19
- case "ul": return "UL";
20
- case "ol": return "OL";
21
- case "li": return "LI";
22
- default: return null;
23
- }
24
- }
25
- function tagsEqualIgnoreCase(elementTagName, vnodeType) {
26
- if (elementTagName === vnodeType) return true;
27
- const upperCommon = upperCommonTagName(vnodeType);
28
- if (upperCommon !== null && elementTagName === upperCommon) return true;
29
- return tagNamesEqualIgnoreCase(elementTagName, vnodeType);
30
- }
31
- function performBulkPositionalKeyedTextUpdate(parent, keyedVnodes) {
32
- const total = keyedVnodes.length;
33
- let reused = 0;
34
- let updatedKeys = 0;
35
- const start = now();
36
- const env = getRuntimeEnv();
37
- const debugFastPath = env.ASKR_FASTPATH_DEBUG === "1" || env.ASKR_FASTPATH_DEBUG === "true";
38
- for (let index = 0; index < total; index += 1) {
39
- const { key, vnode } = keyedVnodes[index];
40
- const child = parent.children[index];
41
- if (child && _isDOMElement(vnode) && typeof vnode.type === "string") {
42
- const vnodeType = vnode.type;
43
- if (tagsEqualIgnoreCase(child.tagName, vnodeType)) {
44
- const children = vnode.children || vnode.props?.children;
45
- if (debugFastPath) logFastPathDebug("positional idx", index, {
46
- chTag: child.tagName,
47
- vnodeType,
48
- chChildNodes: child.childNodes.length,
49
- childrenType: Array.isArray(children) ? "array" : typeof children
50
- });
51
- updateTextContent(child, children, vnode);
52
- setDataKey(child, key, () => updatedKeys += 1);
53
- reused += 1;
54
- continue;
55
- }
56
- if (debugFastPath) logFastPathDebug("positional tag mismatch", index, {
57
- chTag: child.tagName,
58
- vnodeType
59
- });
60
- } else if (debugFastPath) logFastPathDebug("positional missing or invalid", index, { ch: !!child });
61
- replaceNodeAtPosition(parent, index, vnode);
62
- }
63
- const elapsed = now() - start;
64
- updateKeyedElementsMap(parent, keyedVnodes);
65
- const stats = {
66
- n: total,
67
- reused,
68
- updatedKeys,
69
- t: elapsed
70
- };
71
- recordFastPathStats(stats, "bulkKeyedPositionalHits");
72
- return stats;
73
- }
74
- function updateTextContent(el, children, vnode) {
75
- if (typeof children === "string" || typeof children === "number") {
76
- setTextNodeData(el, String(children));
77
- if (vnode.props && hasNonTrivialProps(vnode.props)) updateElementFromVnode(el, vnode, false);
78
- return;
79
- }
80
- if (Array.isArray(children) && children.length === 1 && (typeof children[0] === "string" || typeof children[0] === "number")) {
81
- setTextNodeData(el, String(children[0]));
82
- if (vnode.props && hasNonTrivialProps(vnode.props)) updateElementFromVnode(el, vnode, false);
83
- return;
84
- }
85
- if (!tryUpdateTwoChildTextPattern(el, vnode)) updateElementFromVnode(el, vnode);
86
- }
87
- function tryUpdateTwoChildTextPattern(parentEl, vnode) {
88
- const vnodeChildren = vnode.props?.children ?? vnode.children;
89
- if (!Array.isArray(vnodeChildren) || vnodeChildren.length !== 2) return false;
90
- const firstChild = vnodeChildren[0];
91
- const secondChild = vnodeChildren[1];
92
- if (!_isDOMElement(firstChild) || !_isDOMElement(secondChild)) return false;
93
- if (typeof firstChild.type !== "string" || typeof secondChild.type !== "string") return false;
94
- const firstElement = parentEl.children[0];
95
- const secondElement = parentEl.children[1];
96
- if (!firstElement || !secondElement) return false;
97
- if (parentEl.children.length !== 2 || parentEl.childNodes.length !== 2) return false;
98
- if (!tagsEqualIgnoreCase(firstElement.tagName, firstChild.type)) return false;
99
- if (!tagsEqualIgnoreCase(secondElement.tagName, secondChild.type)) return false;
100
- const firstText = firstChild.children || firstChild.props?.children;
101
- const secondText = secondChild.children || secondChild.props?.children;
102
- if (typeof firstText === "string" || typeof firstText === "number") setTextNodeData(firstElement, String(firstText));
103
- else if (Array.isArray(firstText) && firstText.length === 1 && (typeof firstText[0] === "string" || typeof firstText[0] === "number")) setTextNodeData(firstElement, String(firstText[0]));
104
- else return false;
105
- if (typeof secondText === "string" || typeof secondText === "number") setTextNodeData(secondElement, String(secondText));
106
- else if (Array.isArray(secondText) && secondText.length === 1 && (typeof secondText[0] === "string" || typeof secondText[0] === "number")) setTextNodeData(secondElement, String(secondText[0]));
107
- else return false;
108
- return true;
109
- }
110
- function setTextNodeData(el, text) {
111
- if (el.childNodes.length === 1 && el.firstChild?.nodeType === 3) {
112
- const textNode = el.firstChild;
113
- if (textNode.data !== text) textNode.data = text;
114
- } else el.textContent = text;
115
- }
116
- function setDataKey(el, key, onSet) {
117
- try {
118
- const next = String(key);
119
- if (el.getAttribute("data-key") === next) return;
120
- el.setAttribute("data-key", next);
121
- onSet();
122
- } catch {}
123
- }
124
- function replaceNodeAtPosition(parent, index, vnode) {
125
- const dom = createDOMNode(vnode);
126
- if (dom) {
127
- const existing = parent.children[index];
128
- if (existing) {
129
- teardownNodeSubtree(existing);
130
- parent.replaceChild(dom, existing);
131
- } else parent.appendChild(dom);
132
- }
133
- }
134
- function updateKeyedElementsMap(parent, keyedVnodes) {
135
- try {
136
- const existing = keyedElements.get(parent);
137
- const newKeyMap = existing ? (existing.clear(), existing) : /* @__PURE__ */ new Map();
138
- for (let index = 0; index < keyedVnodes.length; index += 1) {
139
- const key = keyedVnodes[index].key;
140
- const child = parent.children[index];
141
- if (child) newKeyMap.set(key, child);
142
- }
143
- keyedElements.set(parent, newKeyMap);
144
- } catch {}
145
- }
146
- //#endregion
147
- export { performBulkPositionalKeyedTextUpdate, tagsEqualIgnoreCase };
148
-
149
- //# sourceMappingURL=children-fastpath.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"children-fastpath.js","names":[],"sources":["../../src/renderer/children-fastpath.ts"],"sourcesContent":["import { getRuntimeEnv } from './env';\nimport { keyedElements } from './keyed';\nimport { teardownNodeSubtree } from './cleanup';\nimport { createDOMNode, updateElementFromVnode } from './dom';\nimport { _isDOMElement, type DOMElement, type VNode } from './types';\nimport {\n hasNonTrivialProps,\n logFastPathDebug,\n now,\n recordFastPathStats,\n tagNamesEqualIgnoreCase,\n} from './utils';\n\nfunction upperCommonTagName(tag: string): string | null {\n switch (tag) {\n case 'div':\n return 'DIV';\n case 'span':\n return 'SPAN';\n case 'p':\n return 'P';\n case 'a':\n return 'A';\n case 'button':\n return 'BUTTON';\n case 'input':\n return 'INPUT';\n case 'ul':\n return 'UL';\n case 'ol':\n return 'OL';\n case 'li':\n return 'LI';\n default:\n return null;\n }\n}\n\nexport function tagsEqualIgnoreCase(\n elementTagName: string,\n vnodeType: string\n): boolean {\n if (elementTagName === vnodeType) return true;\n\n const upperCommon = upperCommonTagName(vnodeType);\n if (upperCommon !== null && elementTagName === upperCommon) return true;\n\n return tagNamesEqualIgnoreCase(elementTagName, vnodeType);\n}\n\nexport function performBulkPositionalKeyedTextUpdate(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n) {\n const total = keyedVnodes.length;\n let reused = 0;\n let updatedKeys = 0;\n const start = now();\n const env = getRuntimeEnv();\n const debugFastPath =\n env.ASKR_FASTPATH_DEBUG === '1' || env.ASKR_FASTPATH_DEBUG === 'true';\n\n for (let index = 0; index < total; index += 1) {\n const { key, vnode } = keyedVnodes[index];\n const child = parent.children[index] as Element | undefined;\n\n if (\n child &&\n _isDOMElement(vnode) &&\n typeof (vnode as DOMElement).type === 'string'\n ) {\n const vnodeType = (vnode as DOMElement).type as string;\n\n if (tagsEqualIgnoreCase(child.tagName, vnodeType)) {\n const children =\n (vnode as DOMElement).children ||\n (vnode as DOMElement).props?.children;\n\n if (debugFastPath) {\n logFastPathDebug('positional idx', index, {\n chTag: child.tagName,\n vnodeType,\n chChildNodes: child.childNodes.length,\n childrenType: Array.isArray(children) ? 'array' : typeof children,\n });\n }\n\n updateTextContent(child, children, vnode as DOMElement);\n setDataKey(child, key, () => (updatedKeys += 1));\n reused += 1;\n continue;\n }\n\n if (debugFastPath) {\n logFastPathDebug('positional tag mismatch', index, {\n chTag: child.tagName,\n vnodeType,\n });\n }\n } else if (debugFastPath) {\n logFastPathDebug('positional missing or invalid', index, { ch: !!child });\n }\n\n replaceNodeAtPosition(parent, index, vnode);\n }\n\n const elapsed = now() - start;\n updateKeyedElementsMap(parent, keyedVnodes);\n\n const stats = { n: total, reused, updatedKeys, t: elapsed } as const;\n recordFastPathStats(stats, 'bulkKeyedPositionalHits');\n\n return stats;\n}\n\nfunction updateTextContent(\n el: Element,\n children: unknown,\n vnode: DOMElement\n): void {\n if (typeof children === 'string' || typeof children === 'number') {\n setTextNodeData(el, String(children));\n if (vnode.props && hasNonTrivialProps(vnode.props)) {\n updateElementFromVnode(el, vnode, false);\n }\n return;\n }\n\n if (\n Array.isArray(children) &&\n children.length === 1 &&\n (typeof children[0] === 'string' || typeof children[0] === 'number')\n ) {\n setTextNodeData(el, String(children[0]));\n if (vnode.props && hasNonTrivialProps(vnode.props)) {\n updateElementFromVnode(el, vnode, false);\n }\n return;\n }\n\n if (!tryUpdateTwoChildTextPattern(el, vnode)) {\n updateElementFromVnode(el, vnode);\n }\n}\n\nfunction tryUpdateTwoChildTextPattern(\n parentEl: Element,\n vnode: DOMElement\n): boolean {\n const vnodeChildren = vnode.props?.children ?? vnode.children;\n if (!Array.isArray(vnodeChildren) || vnodeChildren.length !== 2) return false;\n\n const firstChild = vnodeChildren[0];\n const secondChild = vnodeChildren[1];\n if (!_isDOMElement(firstChild) || !_isDOMElement(secondChild)) return false;\n if (\n typeof firstChild.type !== 'string' ||\n typeof secondChild.type !== 'string'\n ) {\n return false;\n }\n\n const firstElement = parentEl.children[0] as Element | undefined;\n const secondElement = parentEl.children[1] as Element | undefined;\n if (!firstElement || !secondElement) return false;\n if (parentEl.children.length !== 2 || parentEl.childNodes.length !== 2) {\n return false;\n }\n\n if (!tagsEqualIgnoreCase(firstElement.tagName, firstChild.type)) return false;\n if (!tagsEqualIgnoreCase(secondElement.tagName, secondChild.type))\n return false;\n\n const firstText = (firstChild.children ||\n firstChild.props?.children) as unknown;\n const secondText = (secondChild.children ||\n secondChild.props?.children) as unknown;\n\n if (typeof firstText === 'string' || typeof firstText === 'number') {\n setTextNodeData(firstElement, String(firstText));\n } else if (\n Array.isArray(firstText) &&\n firstText.length === 1 &&\n (typeof firstText[0] === 'string' || typeof firstText[0] === 'number')\n ) {\n setTextNodeData(firstElement, String(firstText[0]));\n } else {\n return false;\n }\n\n if (typeof secondText === 'string' || typeof secondText === 'number') {\n setTextNodeData(secondElement, String(secondText));\n } else if (\n Array.isArray(secondText) &&\n secondText.length === 1 &&\n (typeof secondText[0] === 'string' || typeof secondText[0] === 'number')\n ) {\n setTextNodeData(secondElement, String(secondText[0]));\n } else {\n return false;\n }\n\n return true;\n}\n\nfunction setTextNodeData(el: Element, text: string): void {\n if (el.childNodes.length === 1 && el.firstChild?.nodeType === 3) {\n const textNode = el.firstChild as Text;\n if (textNode.data !== text) textNode.data = text;\n } else {\n el.textContent = text;\n }\n}\n\nfunction setDataKey(\n el: Element,\n key: string | number,\n onSet: () => void\n): void {\n try {\n const next = String(key);\n if (el.getAttribute('data-key') === next) return;\n el.setAttribute('data-key', next);\n onSet();\n } catch {\n // Ignore errors setting data-key\n }\n}\n\nfunction replaceNodeAtPosition(\n parent: Element,\n index: number,\n vnode: VNode\n): void {\n const dom = createDOMNode(vnode);\n if (dom) {\n const existing = parent.children[index];\n if (existing) {\n teardownNodeSubtree(existing);\n parent.replaceChild(dom, existing);\n } else {\n parent.appendChild(dom);\n }\n }\n}\n\nfunction updateKeyedElementsMap(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n): void {\n try {\n const existing = keyedElements.get(parent);\n const newKeyMap = existing\n ? (existing.clear(), existing)\n : new Map<string | number, Element>();\n\n for (let index = 0; index < keyedVnodes.length; index += 1) {\n const key = keyedVnodes[index].key;\n const child = parent.children[index] as Element | undefined;\n if (child) newKeyMap.set(key, child);\n }\n\n keyedElements.set(parent, newKeyMap);\n } catch {\n // Ignore errors updating key map\n }\n}\n"],"mappings":"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"}