@askrjs/askr 0.0.50 → 0.0.52

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 (594) hide show
  1. package/dist/bench/components/benchmark-row.d.ts +2 -2
  2. package/dist/bench/components/benchmark-row.js +0 -2
  3. package/dist/bench/components/benchmark-table.js +0 -2
  4. package/dist/benchmark.d.ts +1 -2
  5. package/dist/benchmark.js +5 -6
  6. package/dist/bin/askr-ssg.d.ts +1 -2
  7. package/dist/bin/askr-ssg.js +21 -6
  8. package/dist/boot/hydration.js +10 -11
  9. package/dist/boot/index.d.ts +1 -2
  10. package/dist/boot/index.js +21 -11
  11. package/dist/boot/root-lifecycle.d.ts +6 -3
  12. package/dist/boot/root-lifecycle.js +18 -14
  13. package/dist/boot/route-startup.js +13 -4
  14. package/dist/boot/types.d.ts +1 -2
  15. package/dist/common/attr-names.js +0 -2
  16. package/dist/common/component.d.ts +1 -2
  17. package/dist/common/control.d.ts +1 -2
  18. package/dist/common/control.js +0 -2
  19. package/dist/common/dom-range.d.ts +13 -0
  20. package/dist/common/env.js +1 -7
  21. package/dist/common/error-boundary.d.ts +15 -0
  22. package/dist/common/invariant.js +15 -0
  23. package/dist/common/jsx.d.ts +1 -2
  24. package/dist/common/jsx.js +0 -2
  25. package/dist/{dev → common}/logger.js +5 -8
  26. package/dist/common/promise.js +0 -2
  27. package/dist/common/props.d.ts +1 -2
  28. package/dist/common/render-context.js +0 -2
  29. package/dist/common/route-activity.js +0 -2
  30. package/dist/common/router-internal.js +0 -2
  31. package/dist/common/router.d.ts +1 -2
  32. package/dist/common/ssr-errors.d.ts +1 -2
  33. package/dist/common/ssr-errors.js +0 -2
  34. package/dist/common/ssr.d.ts +1 -2
  35. package/dist/common/ssr.js +0 -2
  36. package/dist/common/vnode.d.ts +1 -2
  37. package/dist/common/vnode.js +0 -2
  38. package/dist/components/error-boundary.d.ts +2 -16
  39. package/dist/components/error-boundary.js +2 -76
  40. package/dist/components/index.d.ts +2 -1
  41. package/dist/components/link.d.ts +2 -2
  42. package/dist/components/link.js +2 -2
  43. package/dist/control/case.d.ts +1 -2
  44. package/dist/control/case.js +1 -2
  45. package/dist/control/for.d.ts +3 -4
  46. package/dist/control/for.js +2 -4
  47. package/dist/control/shared.d.ts +1 -2
  48. package/dist/control/shared.js +0 -2
  49. package/dist/control/show.d.ts +1 -2
  50. package/dist/control/show.js +1 -2
  51. package/dist/data/data-runtime.d.ts +1 -2
  52. package/dist/data/data-runtime.js +3 -5
  53. package/dist/data/invalidation-listeners.js +0 -2
  54. package/dist/data/invalidation.d.ts +1 -2
  55. package/dist/data/invalidation.js +2 -4
  56. package/dist/data/mutation-cell.d.ts +1 -2
  57. package/dist/data/mutation-cell.js +7 -6
  58. package/dist/data/query-cell.d.ts +3 -2
  59. package/dist/data/query-cell.js +45 -11
  60. package/dist/data/query-key.js +0 -2
  61. package/dist/data/shared.js +3 -3
  62. package/dist/data/testing.js +2 -0
  63. package/dist/data/types.d.ts +1 -2
  64. package/dist/foundations/icon/icon.d.ts +1 -2
  65. package/dist/foundations/icon/icon.js +0 -2
  66. package/dist/foundations/icon/icon.types.d.ts +1 -2
  67. package/dist/foundations/index.d.ts +1 -1
  68. package/dist/foundations/index.js +1 -1
  69. package/dist/foundations/interactions/dismissable.d.ts +1 -2
  70. package/dist/foundations/interactions/dismissable.js +0 -2
  71. package/dist/foundations/interactions/focusable.d.ts +1 -2
  72. package/dist/foundations/interactions/focusable.js +0 -2
  73. package/dist/foundations/interactions/hoverable.d.ts +1 -2
  74. package/dist/foundations/interactions/hoverable.js +0 -2
  75. package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
  76. package/dist/foundations/interactions/interaction-policy.js +0 -2
  77. package/dist/foundations/interactions/pressable.d.ts +1 -2
  78. package/dist/foundations/interactions/pressable.js +0 -2
  79. package/dist/foundations/interactions/roving-focus.d.ts +1 -2
  80. package/dist/foundations/interactions/roving-focus.js +0 -2
  81. package/dist/foundations/state/controllable.d.ts +1 -3
  82. package/dist/foundations/state/controllable.js +1 -2
  83. package/dist/foundations/structures/collection.d.ts +1 -2
  84. package/dist/foundations/structures/collection.js +0 -2
  85. package/dist/foundations/structures/index.d.ts +1 -1
  86. package/dist/foundations/structures/index.js +2 -1
  87. package/dist/foundations/structures/layer.d.ts +1 -2
  88. package/dist/foundations/structures/layer.js +0 -2
  89. package/dist/foundations/structures/layout.d.ts +1 -2
  90. package/dist/foundations/structures/layout.js +0 -2
  91. package/dist/foundations/structures/portal.d.ts +2 -24
  92. package/dist/foundations/structures/portal.js +3 -187
  93. package/dist/foundations/structures/presence.d.ts +1 -2
  94. package/dist/foundations/structures/presence.js +0 -2
  95. package/dist/foundations/structures/slot.d.ts +1 -2
  96. package/dist/foundations/structures/slot.js +0 -2
  97. package/dist/foundations/utilities/aria.d.ts +1 -2
  98. package/dist/foundations/utilities/aria.js +0 -2
  99. package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
  100. package/dist/foundations/utilities/compose-handlers.js +0 -2
  101. package/dist/foundations/utilities/compose-ref.d.ts +1 -2
  102. package/dist/foundations/utilities/compose-ref.js +0 -2
  103. package/dist/foundations/utilities/event-types.d.ts +1 -2
  104. package/dist/foundations/utilities/merge-props.d.ts +1 -2
  105. package/dist/foundations/utilities/merge-props.js +0 -2
  106. package/dist/foundations/utilities/use-id.d.ts +1 -2
  107. package/dist/foundations/utilities/use-id.js +0 -2
  108. package/dist/fx/fx.d.ts +1 -2
  109. package/dist/fx/fx.js +2 -4
  110. package/dist/fx/index.js +1 -0
  111. package/dist/fx/noop.js +0 -2
  112. package/dist/fx/timing.d.ts +1 -2
  113. package/dist/fx/timing.js +0 -2
  114. package/dist/index.d.ts +4 -4
  115. package/dist/index.js +4 -6
  116. package/dist/jsx/types.d.ts +1 -2
  117. package/dist/jsx/utils.d.ts +1 -2
  118. package/dist/jsx/utils.js +0 -2
  119. package/dist/jsx-dev-runtime.d.ts +16 -2
  120. package/dist/jsx-dev-runtime.js +4 -12
  121. package/dist/jsx-runtime.d.ts +16 -2
  122. package/dist/jsx-runtime.js +16 -24
  123. package/dist/jsx-runtime2.d.ts +1 -1
  124. package/dist/renderer/attributes.js +29 -6
  125. package/dist/renderer/boundaries.js +50 -174
  126. package/dist/renderer/boundary-materialization.js +72 -0
  127. package/dist/renderer/boundary-range-adoption.js +76 -0
  128. package/dist/renderer/boundary-range-sync.js +101 -0
  129. package/dist/renderer/boundary-state.js +50 -0
  130. package/dist/renderer/child-shape.js +2 -4
  131. package/dist/renderer/children-fastpath.js +149 -0
  132. package/dist/renderer/children.js +3 -140
  133. package/dist/renderer/cleanup.js +72 -15
  134. package/dist/renderer/component-host-cleanup.js +124 -49
  135. package/dist/renderer/component-host-instances.js +60 -9
  136. package/dist/renderer/component-host-replacement.js +105 -0
  137. package/dist/renderer/component-host-results.js +138 -0
  138. package/dist/renderer/component-host.js +95 -170
  139. package/dist/renderer/dom-host.js +0 -2
  140. package/dist/renderer/dom-internal.js +115 -57
  141. package/dist/renderer/dom-range.js +161 -0
  142. package/dist/renderer/dom.js +7 -5
  143. package/dist/renderer/element-children.js +112 -32
  144. package/dist/renderer/error-boundary-dom.js +70 -13
  145. package/dist/renderer/evaluate-dom-range.js +3 -4
  146. package/dist/renderer/evaluate-reconcile.js +18 -42
  147. package/dist/renderer/evaluate.js +14 -3
  148. package/dist/renderer/fastpath.js +7 -14
  149. package/dist/renderer/for-commit-dom-map.js +6 -18
  150. package/dist/renderer/for-commit-removal.js +8 -17
  151. package/dist/renderer/for-commit-reorder.js +2 -4
  152. package/dist/renderer/for-commit.js +173 -45
  153. package/dist/renderer/hydration-boundaries.js +60 -0
  154. package/dist/renderer/hydration-listener-transaction.js +49 -0
  155. package/dist/renderer/index.js +11 -8
  156. package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
  157. package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
  158. package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
  159. package/dist/renderer/intrinsic-blueprint.js +30 -0
  160. package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
  161. package/dist/renderer/keyed-children.js +3 -9
  162. package/dist/renderer/keyed.js +10 -10
  163. package/dist/renderer/namespaces.js +0 -2
  164. package/dist/renderer/prop-bindings.js +59 -24
  165. package/dist/renderer/reactive-child-dom.js +10 -4
  166. package/dist/renderer/reactive-child-sources.js +0 -2
  167. package/dist/renderer/reactive-children.js +33 -24
  168. package/dist/renderer/reconcile-commit.js +0 -2
  169. package/dist/renderer/reconcile-fastpaths.js +6 -12
  170. package/dist/renderer/reconcile-resolution.js +32 -56
  171. package/dist/renderer/reconcile.js +0 -2
  172. package/dist/renderer/retained-element-rollback.js +161 -149
  173. package/dist/renderer/stable-patch.js +5 -7
  174. package/dist/renderer/static-reuse.js +0 -2
  175. package/dist/renderer/utils.js +20 -10
  176. package/dist/resources/index.js +1 -2
  177. package/dist/router/access.js +0 -2
  178. package/dist/router/activity.d.ts +1 -2
  179. package/dist/router/activity.js +20 -24
  180. package/dist/router/authoring.d.ts +1 -2
  181. package/dist/router/authoring.js +1 -3
  182. package/dist/router/index.d.ts +1 -1
  183. package/dist/router/internal-types.d.ts +1 -2
  184. package/dist/router/lazy.d.ts +1 -2
  185. package/dist/router/lazy.js +0 -2
  186. package/dist/router/manifest.d.ts +1 -2
  187. package/dist/router/manifest.js +0 -2
  188. package/dist/router/match.js +0 -2
  189. package/dist/router/navigate.d.ts +1 -2
  190. package/dist/router/navigate.js +5 -8
  191. package/dist/router/navigation-registry.d.ts +1 -2
  192. package/dist/router/navigation-registry.js +1 -3
  193. package/dist/router/navigation-scroll.d.ts +1 -2
  194. package/dist/router/navigation-scroll.js +0 -2
  195. package/dist/router/navigation-targets.d.ts +3 -4
  196. package/dist/router/navigation-targets.js +425 -44
  197. package/dist/router/policy.d.ts +1 -2
  198. package/dist/router/policy.js +0 -2
  199. package/dist/router/rendering.d.ts +1 -2
  200. package/dist/router/rendering.js +5 -3
  201. package/dist/router/resolution.d.ts +2 -16
  202. package/dist/router/resolution.js +6 -175
  203. package/dist/router/route-context.js +0 -2
  204. package/dist/router/route-matching.d.ts +19 -0
  205. package/dist/router/route-matching.js +173 -0
  206. package/dist/router/route-query.d.ts +1 -2
  207. package/dist/router/route-query.js +1 -3
  208. package/dist/router/route.js +4 -2
  209. package/dist/router/store.d.ts +1 -2
  210. package/dist/router/store.js +0 -2
  211. package/dist/router/testing.js +4 -0
  212. package/dist/runtime/access.d.ts +19 -0
  213. package/dist/runtime/access.js +0 -2
  214. package/dist/runtime/child-scope.d.ts +21 -2
  215. package/dist/runtime/child-scope.js +101 -54
  216. package/dist/runtime/component-cleanup.d.ts +1 -2
  217. package/dist/runtime/component-cleanup.js +3 -5
  218. package/dist/runtime/component-commit.js +26 -24
  219. package/dist/runtime/component-facade.js +5 -3
  220. package/dist/runtime/component-internal.d.ts +12 -7
  221. package/dist/runtime/component-internal.js +64 -46
  222. package/dist/runtime/component-lifecycle.d.ts +2 -41
  223. package/dist/runtime/component-lifecycle.js +6 -149
  224. package/dist/runtime/component-scope.d.ts +4 -5
  225. package/dist/runtime/component-scope.js +27 -8
  226. package/dist/runtime/component.js +4 -3
  227. package/dist/runtime/context.d.ts +5 -2
  228. package/dist/runtime/context.js +29 -3
  229. package/dist/runtime/control.d.ts +22 -3
  230. package/dist/runtime/control.js +168 -55
  231. package/dist/runtime/derive.d.ts +1 -2
  232. package/dist/runtime/derive.js +0 -2
  233. package/dist/runtime/dev-namespace.d.ts +30 -0
  234. package/dist/runtime/dev-namespace.js +32 -25
  235. package/dist/runtime/effect.d.ts +8 -5
  236. package/dist/runtime/effect.js +158 -75
  237. package/dist/runtime/error-boundary.d.ts +4 -0
  238. package/dist/runtime/error-boundary.js +29 -0
  239. package/dist/runtime/events.d.ts +58 -0
  240. package/dist/runtime/events.js +67 -70
  241. package/dist/runtime/execution-model.d.ts +6 -0
  242. package/dist/runtime/execution-model.js +0 -2
  243. package/dist/runtime/fastlane.d.ts +33 -0
  244. package/dist/runtime/fastlane.js +0 -2
  245. package/dist/runtime/for-bench.d.ts +1 -2
  246. package/dist/runtime/for-bench.js +9 -167
  247. package/dist/runtime/for-internal.d.ts +73 -10
  248. package/dist/runtime/for-internal.js +201 -14
  249. package/dist/runtime/for-reconcile.d.ts +1 -2
  250. package/dist/runtime/for-reconcile.js +76 -23
  251. package/dist/runtime/for-scopes.d.ts +5 -5
  252. package/dist/runtime/for-scopes.js +168 -48
  253. package/dist/runtime/for-signals.d.ts +14 -5
  254. package/dist/runtime/for-signals.js +157 -83
  255. package/dist/runtime/for-types.d.ts +8 -0
  256. package/dist/runtime/for.d.ts +2 -2
  257. package/dist/runtime/for.js +3 -3
  258. package/dist/runtime/index.d.ts +24 -0
  259. package/dist/runtime/index.js +33 -0
  260. package/dist/runtime/lifecycle-batch.d.ts +59 -0
  261. package/dist/runtime/lifecycle-batch.js +178 -0
  262. package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
  263. package/dist/runtime/lifecycle-operation-settlement.js +51 -0
  264. package/dist/runtime/lifecycle-operations.d.ts +1 -2
  265. package/dist/runtime/lifecycle-operations.js +5 -6
  266. package/dist/runtime/perf-metrics.d.ts +27 -0
  267. package/dist/runtime/perf-metrics.js +4 -68
  268. package/dist/runtime/portal.d.ts +21 -0
  269. package/dist/runtime/portal.js +305 -0
  270. package/dist/runtime/readable.d.ts +9 -4
  271. package/dist/runtime/readable.js +41 -17
  272. package/dist/runtime/resource-cell.js +3 -5
  273. package/dist/runtime/resource-operation.d.ts +1 -2
  274. package/dist/runtime/resource-operation.js +38 -35
  275. package/dist/runtime/runtime.d.ts +2 -3
  276. package/dist/runtime/runtime.js +0 -2
  277. package/dist/runtime/scheduler.d.ts +1 -2
  278. package/dist/runtime/scheduler.js +10 -13
  279. package/dist/runtime/selector-store.js +22 -0
  280. package/dist/runtime/selector.d.ts +1 -2
  281. package/dist/runtime/selector.js +6 -29
  282. package/dist/runtime/snapshot-source.d.ts +1 -2
  283. package/dist/runtime/snapshot-source.js +0 -2
  284. package/dist/runtime/state.d.ts +1 -2
  285. package/dist/runtime/state.js +1 -3
  286. package/dist/ssg/batch-render.js +0 -2
  287. package/dist/ssg/create-static-gen.d.ts +4 -2
  288. package/dist/ssg/create-static-gen.js +66 -14
  289. package/dist/ssg/generate-metadata.js +0 -2
  290. package/dist/ssg/generation-plan.js +0 -2
  291. package/dist/ssg/incremental-manifest.js +1 -3
  292. package/dist/ssg/resolve-ssg-data.js +0 -2
  293. package/dist/ssg/route-utils.js +0 -2
  294. package/dist/ssg/static-routes.js +1 -2
  295. package/dist/ssg/types.d.ts +2 -3
  296. package/dist/ssg/write-static-files.js +16 -12
  297. package/dist/ssr/attrs.js +0 -2
  298. package/dist/ssr/boundaries.js +17 -6
  299. package/dist/ssr/component-runtime.js +4 -30
  300. package/dist/ssr/context.d.ts +1 -2
  301. package/dist/ssr/context.js +0 -2
  302. package/dist/ssr/errors.d.ts +1 -2
  303. package/dist/ssr/errors.js +0 -2
  304. package/dist/ssr/escape.js +0 -2
  305. package/dist/ssr/hydration-data.js +0 -2
  306. package/dist/ssr/hydration-verify.d.ts +1 -2
  307. package/dist/ssr/hydration-verify.js +34 -7
  308. package/dist/ssr/index-internal.d.ts +1 -2
  309. package/dist/ssr/index-internal.js +0 -2
  310. package/dist/ssr/render-keys.js +0 -2
  311. package/dist/ssr/render-resolved.d.ts +1 -2
  312. package/dist/ssr/render-resolved.js +1 -3
  313. package/dist/ssr/render-sync.d.ts +1 -2
  314. package/dist/ssr/render-sync.js +28 -20
  315. package/dist/ssr/route-policy-resolution.js +2 -3
  316. package/dist/ssr/route-render.d.ts +1 -2
  317. package/dist/ssr/route-render.js +2 -3
  318. package/dist/ssr/sink.d.ts +1 -2
  319. package/dist/ssr/sink.js +0 -2
  320. package/dist/ssr/types.d.ts +1 -2
  321. package/dist/ssr/verify-hydration.js +0 -2
  322. package/dist/testing/index.d.ts +1 -2
  323. package/dist/testing/index.js +3 -4
  324. package/package.json +60 -47
  325. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  326. package/dist/bench/components/benchmark-row.js.map +0 -1
  327. package/dist/bench/components/benchmark-table.js.map +0 -1
  328. package/dist/benchmark.d.ts.map +0 -1
  329. package/dist/benchmark.js.map +0 -1
  330. package/dist/bin/askr-ssg.d.ts.map +0 -1
  331. package/dist/bin/askr-ssg.js.map +0 -1
  332. package/dist/boot/hydration.js.map +0 -1
  333. package/dist/boot/index.d.ts.map +0 -1
  334. package/dist/boot/index.js.map +0 -1
  335. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  336. package/dist/boot/root-lifecycle.js.map +0 -1
  337. package/dist/boot/route-startup.js.map +0 -1
  338. package/dist/boot/types.d.ts.map +0 -1
  339. package/dist/common/attr-names.js.map +0 -1
  340. package/dist/common/component.d.ts.map +0 -1
  341. package/dist/common/control.d.ts.map +0 -1
  342. package/dist/common/control.js.map +0 -1
  343. package/dist/common/env.js.map +0 -1
  344. package/dist/common/jsx.d.ts.map +0 -1
  345. package/dist/common/jsx.js.map +0 -1
  346. package/dist/common/promise.js.map +0 -1
  347. package/dist/common/props.d.ts.map +0 -1
  348. package/dist/common/render-context.js.map +0 -1
  349. package/dist/common/route-activity.js.map +0 -1
  350. package/dist/common/router-internal.js.map +0 -1
  351. package/dist/common/router.d.ts.map +0 -1
  352. package/dist/common/ssr-errors.d.ts.map +0 -1
  353. package/dist/common/ssr-errors.js.map +0 -1
  354. package/dist/common/ssr.d.ts.map +0 -1
  355. package/dist/common/ssr.js.map +0 -1
  356. package/dist/common/vnode.d.ts.map +0 -1
  357. package/dist/common/vnode.js.map +0 -1
  358. package/dist/components/error-boundary.d.ts.map +0 -1
  359. package/dist/components/error-boundary.js.map +0 -1
  360. package/dist/components/link.d.ts.map +0 -1
  361. package/dist/components/link.js.map +0 -1
  362. package/dist/control/case.d.ts.map +0 -1
  363. package/dist/control/case.js.map +0 -1
  364. package/dist/control/for.d.ts.map +0 -1
  365. package/dist/control/for.js.map +0 -1
  366. package/dist/control/shared.d.ts.map +0 -1
  367. package/dist/control/shared.js.map +0 -1
  368. package/dist/control/show.d.ts.map +0 -1
  369. package/dist/control/show.js.map +0 -1
  370. package/dist/data/data-runtime.d.ts.map +0 -1
  371. package/dist/data/data-runtime.js.map +0 -1
  372. package/dist/data/invalidation-listeners.js.map +0 -1
  373. package/dist/data/invalidation.d.ts.map +0 -1
  374. package/dist/data/invalidation.js.map +0 -1
  375. package/dist/data/mutation-cell.d.ts.map +0 -1
  376. package/dist/data/mutation-cell.js.map +0 -1
  377. package/dist/data/query-cell.d.ts.map +0 -1
  378. package/dist/data/query-cell.js.map +0 -1
  379. package/dist/data/query-key.js.map +0 -1
  380. package/dist/data/shared.js.map +0 -1
  381. package/dist/data/types.d.ts.map +0 -1
  382. package/dist/dev/invariant.js +0 -29
  383. package/dist/dev/invariant.js.map +0 -1
  384. package/dist/dev/logger.js.map +0 -1
  385. package/dist/foundations/icon/icon.d.ts.map +0 -1
  386. package/dist/foundations/icon/icon.js.map +0 -1
  387. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  388. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  389. package/dist/foundations/interactions/dismissable.js.map +0 -1
  390. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  391. package/dist/foundations/interactions/focusable.js.map +0 -1
  392. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  393. package/dist/foundations/interactions/hoverable.js.map +0 -1
  394. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  395. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  396. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  397. package/dist/foundations/interactions/pressable.js.map +0 -1
  398. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  399. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  400. package/dist/foundations/state/controllable.d.ts.map +0 -1
  401. package/dist/foundations/state/controllable.js.map +0 -1
  402. package/dist/foundations/structures/collection.d.ts.map +0 -1
  403. package/dist/foundations/structures/collection.js.map +0 -1
  404. package/dist/foundations/structures/layer.d.ts.map +0 -1
  405. package/dist/foundations/structures/layer.js.map +0 -1
  406. package/dist/foundations/structures/layout.d.ts.map +0 -1
  407. package/dist/foundations/structures/layout.js.map +0 -1
  408. package/dist/foundations/structures/portal.d.ts.map +0 -1
  409. package/dist/foundations/structures/portal.js.map +0 -1
  410. package/dist/foundations/structures/presence.d.ts.map +0 -1
  411. package/dist/foundations/structures/presence.js.map +0 -1
  412. package/dist/foundations/structures/slot.d.ts.map +0 -1
  413. package/dist/foundations/structures/slot.js.map +0 -1
  414. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  415. package/dist/foundations/utilities/aria.js.map +0 -1
  416. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  417. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  418. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  419. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  420. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  421. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  422. package/dist/foundations/utilities/merge-props.js.map +0 -1
  423. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  424. package/dist/foundations/utilities/use-id.js.map +0 -1
  425. package/dist/fx/fx.d.ts.map +0 -1
  426. package/dist/fx/fx.js.map +0 -1
  427. package/dist/fx/noop.js.map +0 -1
  428. package/dist/fx/timing.d.ts.map +0 -1
  429. package/dist/fx/timing.js.map +0 -1
  430. package/dist/index.js.map +0 -1
  431. package/dist/jsx/types.d.ts.map +0 -1
  432. package/dist/jsx/utils.d.ts.map +0 -1
  433. package/dist/jsx/utils.js.map +0 -1
  434. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  435. package/dist/jsx-dev-runtime.js.map +0 -1
  436. package/dist/jsx-runtime.d.ts.map +0 -1
  437. package/dist/jsx-runtime.js.map +0 -1
  438. package/dist/renderer/attributes.js.map +0 -1
  439. package/dist/renderer/boundaries.js.map +0 -1
  440. package/dist/renderer/child-shape.js.map +0 -1
  441. package/dist/renderer/children.js.map +0 -1
  442. package/dist/renderer/cleanup.js.map +0 -1
  443. package/dist/renderer/component-host-cleanup.js.map +0 -1
  444. package/dist/renderer/component-host-instances.js.map +0 -1
  445. package/dist/renderer/component-host.js.map +0 -1
  446. package/dist/renderer/dom-host.js.map +0 -1
  447. package/dist/renderer/dom-internal.js.map +0 -1
  448. package/dist/renderer/element-children.js.map +0 -1
  449. package/dist/renderer/error-boundary-dom.js.map +0 -1
  450. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  451. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  452. package/dist/renderer/evaluate.js.map +0 -1
  453. package/dist/renderer/fastpath.js.map +0 -1
  454. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  455. package/dist/renderer/for-commit-removal.js.map +0 -1
  456. package/dist/renderer/for-commit-reorder.js.map +0 -1
  457. package/dist/renderer/for-commit.js.map +0 -1
  458. package/dist/renderer/index.js.map +0 -1
  459. package/dist/renderer/keyed-children.js.map +0 -1
  460. package/dist/renderer/keyed.js.map +0 -1
  461. package/dist/renderer/namespaces.js.map +0 -1
  462. package/dist/renderer/prop-bindings.js.map +0 -1
  463. package/dist/renderer/reactive-child-dom.js.map +0 -1
  464. package/dist/renderer/reactive-child-sources.js.map +0 -1
  465. package/dist/renderer/reactive-children.js.map +0 -1
  466. package/dist/renderer/reconcile-commit.js.map +0 -1
  467. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  468. package/dist/renderer/reconcile-resolution.js.map +0 -1
  469. package/dist/renderer/reconcile.js.map +0 -1
  470. package/dist/renderer/retained-element-rollback.js.map +0 -1
  471. package/dist/renderer/stable-patch.js.map +0 -1
  472. package/dist/renderer/static-reuse.js.map +0 -1
  473. package/dist/renderer/utils.js.map +0 -1
  474. package/dist/router/access.js.map +0 -1
  475. package/dist/router/activity.d.ts.map +0 -1
  476. package/dist/router/activity.js.map +0 -1
  477. package/dist/router/authoring.d.ts.map +0 -1
  478. package/dist/router/authoring.js.map +0 -1
  479. package/dist/router/internal-types.d.ts.map +0 -1
  480. package/dist/router/lazy.d.ts.map +0 -1
  481. package/dist/router/lazy.js.map +0 -1
  482. package/dist/router/manifest.d.ts.map +0 -1
  483. package/dist/router/manifest.js.map +0 -1
  484. package/dist/router/match.js.map +0 -1
  485. package/dist/router/navigate.d.ts.map +0 -1
  486. package/dist/router/navigate.js.map +0 -1
  487. package/dist/router/navigation-registry.d.ts.map +0 -1
  488. package/dist/router/navigation-registry.js.map +0 -1
  489. package/dist/router/navigation-scroll.d.ts.map +0 -1
  490. package/dist/router/navigation-scroll.js.map +0 -1
  491. package/dist/router/navigation-targets.d.ts.map +0 -1
  492. package/dist/router/navigation-targets.js.map +0 -1
  493. package/dist/router/policy.d.ts.map +0 -1
  494. package/dist/router/policy.js.map +0 -1
  495. package/dist/router/rendering.d.ts.map +0 -1
  496. package/dist/router/rendering.js.map +0 -1
  497. package/dist/router/resolution.d.ts.map +0 -1
  498. package/dist/router/resolution.js.map +0 -1
  499. package/dist/router/route-context.js.map +0 -1
  500. package/dist/router/route-query.d.ts.map +0 -1
  501. package/dist/router/route-query.js.map +0 -1
  502. package/dist/router/store.d.ts.map +0 -1
  503. package/dist/router/store.js.map +0 -1
  504. package/dist/runtime/access.js.map +0 -1
  505. package/dist/runtime/child-scope.d.ts.map +0 -1
  506. package/dist/runtime/child-scope.js.map +0 -1
  507. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  508. package/dist/runtime/component-cleanup.js.map +0 -1
  509. package/dist/runtime/component-commit.js.map +0 -1
  510. package/dist/runtime/component-contracts.js +0 -5
  511. package/dist/runtime/component-internal.d.ts.map +0 -1
  512. package/dist/runtime/component-internal.js.map +0 -1
  513. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  514. package/dist/runtime/component-lifecycle.js.map +0 -1
  515. package/dist/runtime/component-scope.d.ts.map +0 -1
  516. package/dist/runtime/component-scope.js.map +0 -1
  517. package/dist/runtime/context.d.ts.map +0 -1
  518. package/dist/runtime/context.js.map +0 -1
  519. package/dist/runtime/control.d.ts.map +0 -1
  520. package/dist/runtime/control.js.map +0 -1
  521. package/dist/runtime/derive.d.ts.map +0 -1
  522. package/dist/runtime/derive.js.map +0 -1
  523. package/dist/runtime/dev-namespace.js.map +0 -1
  524. package/dist/runtime/effect.d.ts.map +0 -1
  525. package/dist/runtime/effect.js.map +0 -1
  526. package/dist/runtime/events.js.map +0 -1
  527. package/dist/runtime/execution-model.js.map +0 -1
  528. package/dist/runtime/fastlane.js.map +0 -1
  529. package/dist/runtime/for-bench.d.ts.map +0 -1
  530. package/dist/runtime/for-bench.js.map +0 -1
  531. package/dist/runtime/for-internal.d.ts.map +0 -1
  532. package/dist/runtime/for-internal.js.map +0 -1
  533. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  534. package/dist/runtime/for-reconcile.js.map +0 -1
  535. package/dist/runtime/for-scopes.d.ts.map +0 -1
  536. package/dist/runtime/for-scopes.js.map +0 -1
  537. package/dist/runtime/for-signals.d.ts.map +0 -1
  538. package/dist/runtime/for-signals.js.map +0 -1
  539. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  540. package/dist/runtime/lifecycle-operations.js.map +0 -1
  541. package/dist/runtime/perf-metrics.js.map +0 -1
  542. package/dist/runtime/readable.d.ts.map +0 -1
  543. package/dist/runtime/readable.js.map +0 -1
  544. package/dist/runtime/resource-cell.js.map +0 -1
  545. package/dist/runtime/resource-operation.d.ts.map +0 -1
  546. package/dist/runtime/resource-operation.js.map +0 -1
  547. package/dist/runtime/runtime.d.ts.map +0 -1
  548. package/dist/runtime/runtime.js.map +0 -1
  549. package/dist/runtime/scheduler.d.ts.map +0 -1
  550. package/dist/runtime/scheduler.js.map +0 -1
  551. package/dist/runtime/selector.d.ts.map +0 -1
  552. package/dist/runtime/selector.js.map +0 -1
  553. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  554. package/dist/runtime/snapshot-source.js.map +0 -1
  555. package/dist/runtime/state.d.ts.map +0 -1
  556. package/dist/runtime/state.js.map +0 -1
  557. package/dist/ssg/batch-render.js.map +0 -1
  558. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  559. package/dist/ssg/create-static-gen.js.map +0 -1
  560. package/dist/ssg/generate-metadata.js.map +0 -1
  561. package/dist/ssg/generation-plan.js.map +0 -1
  562. package/dist/ssg/incremental-manifest.js.map +0 -1
  563. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  564. package/dist/ssg/route-utils.js.map +0 -1
  565. package/dist/ssg/static-routes.js.map +0 -1
  566. package/dist/ssg/types.d.ts.map +0 -1
  567. package/dist/ssg/write-static-files.js.map +0 -1
  568. package/dist/ssr/attrs.js.map +0 -1
  569. package/dist/ssr/boundaries.js.map +0 -1
  570. package/dist/ssr/component-runtime.js.map +0 -1
  571. package/dist/ssr/context.d.ts.map +0 -1
  572. package/dist/ssr/context.js.map +0 -1
  573. package/dist/ssr/errors.d.ts.map +0 -1
  574. package/dist/ssr/errors.js.map +0 -1
  575. package/dist/ssr/escape.js.map +0 -1
  576. package/dist/ssr/hydration-data.js.map +0 -1
  577. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  578. package/dist/ssr/hydration-verify.js.map +0 -1
  579. package/dist/ssr/index-internal.d.ts.map +0 -1
  580. package/dist/ssr/index-internal.js.map +0 -1
  581. package/dist/ssr/render-keys.js.map +0 -1
  582. package/dist/ssr/render-resolved.d.ts.map +0 -1
  583. package/dist/ssr/render-resolved.js.map +0 -1
  584. package/dist/ssr/render-sync.d.ts.map +0 -1
  585. package/dist/ssr/render-sync.js.map +0 -1
  586. package/dist/ssr/route-policy-resolution.js.map +0 -1
  587. package/dist/ssr/route-render.d.ts.map +0 -1
  588. package/dist/ssr/route-render.js.map +0 -1
  589. package/dist/ssr/sink.d.ts.map +0 -1
  590. package/dist/ssr/sink.js.map +0 -1
  591. package/dist/ssr/types.d.ts.map +0 -1
  592. package/dist/ssr/verify-hydration.js.map +0 -1
  593. package/dist/testing/index.d.ts.map +0 -1
  594. package/dist/testing/index.js.map +0 -1
package/dist/fx/fx.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"fx.js","names":[],"sources":["../../src/fx/fx.ts"],"sourcesContent":["import { enqueueRuntimeTask } from '../runtime/access';\nimport { getCurrentComponentInstance } from '../runtime/component';\nimport { logger } from '../dev/logger';\nimport { noopEventListener, noopEventListenerWithFlush } from './noop';\n\nexport type CancelFn = () => void;\n\n// Platform-specific timer handle types\ntype TimeoutHandle = ReturnType<typeof setTimeout> | null;\n// rAF may fall back to setTimeout in some environments/tests, include both\ntype RafHandle =\n | ReturnType<typeof requestAnimationFrame>\n | ReturnType<typeof setTimeout>\n | null;\n// requestIdleCallback may be unavailable; allow setTimeout fallback handle\ntype IdleHandle =\n | ReturnType<typeof requestIdleCallback>\n | ReturnType<typeof setTimeout>\n | null;\n\nfunction throwIfDuringRender(): void {\n const inst = getCurrentComponentInstance();\n if (inst !== null) {\n throw new Error(\n '[Askr] calling FX handler during render is not allowed. Move calls to event handlers or effects.'\n );\n }\n}\n\n/**\n * Helper: schedule a user callback through the global scheduler\n */\nfunction enqueueUserCallback(fn: () => void) {\n enqueueRuntimeTask(() => {\n try {\n fn();\n } catch (err) {\n // Keep behavior consistent with other scheduler-queued work\n logger.error('[Askr] FX handler error:', err);\n }\n });\n}\n\n// ---------- Event handlers ----------\n\nexport function debounceEvent(\n ms: number,\n handler: EventListener,\n options?: { leading?: boolean; trailing?: boolean }\n): EventListener & { cancel(): void; flush(): void } {\n const { leading = false, trailing = true } = options || {};\n\n const inst = getCurrentComponentInstance();\n // On SSR, event handlers are inert\n if (inst && inst.ssr) {\n return noopEventListenerWithFlush;\n }\n\n let timeoutId: TimeoutHandle = null;\n let lastEvent: Event | null = null;\n let lastCallTime = 0;\n\n const debounced = function (this: unknown, ev: Event) {\n // Disallow using returned handler during render\n throwIfDuringRender();\n\n const now = Date.now();\n lastEvent = ev;\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (leading && now - lastCallTime >= ms) {\n enqueueUserCallback(() => handler.call(null, ev));\n lastCallTime = now;\n }\n\n if (trailing) {\n timeoutId = setTimeout(() => {\n // Schedule through scheduler\n if (lastEvent) {\n enqueueUserCallback(() => handler.call(null, lastEvent!));\n }\n timeoutId = null;\n lastCallTime = Date.now();\n }, ms);\n }\n } as EventListener & { cancel(): void; flush(): void };\n\n debounced.cancel = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n lastEvent = null;\n };\n\n debounced.flush = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n const ev = lastEvent;\n lastEvent = null;\n timeoutId = null;\n if (ev) enqueueUserCallback(() => handler.call(null, ev));\n }\n };\n\n // Auto-cleanup on component unmount\n if (inst) {\n (inst.cleanupFns ??= []).push(() => {\n debounced.cancel();\n });\n }\n\n return debounced;\n}\n\nexport function throttleEvent(\n ms: number,\n handler: EventListener,\n options?: { leading?: boolean; trailing?: boolean }\n): EventListener & { cancel(): void } {\n const { leading = true, trailing = true } = options || {};\n\n const inst = getCurrentComponentInstance();\n if (inst && inst.ssr) {\n return noopEventListener;\n }\n\n let lastCallTime = 0;\n let timeoutId: TimeoutHandle = null;\n let lastEvent: Event | null = null;\n\n const throttled = function (this: unknown, ev: Event) {\n throwIfDuringRender();\n\n const now = Date.now();\n lastEvent = ev;\n\n if (leading && now - lastCallTime >= ms) {\n enqueueUserCallback(() => handler.call(null, ev));\n lastCallTime = now;\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n } else if (!leading && lastCallTime === 0) {\n lastCallTime = now;\n }\n\n if (trailing && timeoutId === null) {\n const wait = ms - (now - lastCallTime);\n timeoutId = setTimeout(\n () => {\n if (lastEvent)\n enqueueUserCallback(() => handler.call(null, lastEvent!));\n lastCallTime = Date.now();\n timeoutId = null;\n },\n Math.max(0, wait)\n );\n }\n } as EventListener & { cancel(): void };\n\n throttled.cancel = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n lastEvent = null;\n };\n\n if (inst) {\n (inst.cleanupFns ??= []).push(() => throttled.cancel());\n }\n\n return throttled;\n}\n\nexport function rafEvent(\n handler: EventListener\n): EventListener & { cancel(): void } {\n const inst = getCurrentComponentInstance();\n if (inst && inst.ssr) {\n return noopEventListener;\n }\n\n let frameId: RafHandle = null;\n let lastEvent: Event | null = null;\n\n const scheduleFrame = () => {\n const rAF =\n typeof requestAnimationFrame !== 'undefined'\n ? requestAnimationFrame\n : (cb: FrameRequestCallback) => setTimeout(() => cb(Date.now()), 16);\n\n frameId = rAF(() => {\n frameId = null;\n if (lastEvent) {\n const ev = lastEvent;\n lastEvent = null;\n enqueueUserCallback(() => handler.call(null, ev));\n }\n });\n };\n\n const fn = function (this: unknown, ev: Event) {\n throwIfDuringRender();\n lastEvent = ev;\n if (frameId === null) scheduleFrame();\n } as EventListener & { cancel(): void };\n\n fn.cancel = () => {\n if (frameId !== null) {\n // If frameId is numeric and cancelAnimationFrame is available, use it;\n // otherwise fall back to clearTimeout for the setTimeout fallback.\n if (\n typeof cancelAnimationFrame !== 'undefined' &&\n typeof frameId === 'number'\n ) {\n cancelAnimationFrame(frameId);\n } else {\n clearTimeout(frameId as ReturnType<typeof setTimeout>);\n }\n frameId = null;\n }\n lastEvent = null;\n };\n\n if (inst) (inst.cleanupFns ??= []).push(() => fn.cancel());\n\n return fn;\n}\n\n// ---------- Scheduled work ----------\n\nexport function scheduleTimeout(ms: number, fn: () => void): CancelFn {\n throwIfDuringRender();\n const inst = getCurrentComponentInstance();\n if (inst && inst.ssr) {\n return () => {};\n }\n\n let id: TimeoutHandle = setTimeout(() => {\n id = null;\n enqueueUserCallback(fn);\n }, ms);\n\n const cancel = () => {\n if (id !== null) {\n clearTimeout(id);\n id = null;\n }\n };\n\n if (inst) (inst.cleanupFns ??= []).push(cancel);\n return cancel;\n}\n\nexport function scheduleIdle(\n fn: () => void,\n options?: { timeout?: number }\n): CancelFn {\n throwIfDuringRender();\n const inst = getCurrentComponentInstance();\n if (inst && inst.ssr) return () => {};\n\n let id: IdleHandle = null;\n let usingRIC = false;\n\n if (typeof requestIdleCallback !== 'undefined') {\n usingRIC = true;\n id = requestIdleCallback(() => {\n id = null;\n enqueueUserCallback(fn);\n }, options);\n } else {\n // Fallback: schedule on next macrotask\n id = setTimeout(() => {\n id = null;\n enqueueUserCallback(fn);\n }, 0);\n }\n\n const cancel = () => {\n if (id !== null) {\n // If using requestIdleCallback and available, call cancelIdleCallback for numeric ids.\n if (\n usingRIC &&\n typeof cancelIdleCallback !== 'undefined' &&\n typeof id === 'number'\n ) {\n cancelIdleCallback(id);\n } else {\n clearTimeout(id as ReturnType<typeof setTimeout>);\n }\n id = null;\n }\n };\n\n if (inst) (inst.cleanupFns ??= []).push(cancel);\n return cancel;\n}\n\nexport interface RetryOptions {\n maxAttempts?: number;\n delayMs?: number;\n backoff?: (attemptIndex: number) => number;\n}\n\nexport function scheduleRetry<T>(\n fn: () => Promise<T>,\n options?: RetryOptions\n): { cancel(): void } {\n throwIfDuringRender();\n const inst = getCurrentComponentInstance();\n if (inst && inst.ssr) return { cancel: () => {} };\n\n const {\n maxAttempts = 3,\n delayMs = 100,\n backoff = (i: number) => delayMs * Math.pow(2, i),\n } = options || {};\n\n let cancelled = false;\n\n const attempt = (index: number) => {\n if (cancelled) return;\n // Run user fn inside scheduler\n enqueueRuntimeTask(() => {\n if (cancelled) return;\n // Call fn (it may be async)\n const p = fn();\n p.then(\n () => {\n // Completed successfully\n },\n () => {\n if (cancelled) return;\n if (index + 1 < maxAttempts) {\n const delay = backoff(index);\n // Schedule next attempt via setTimeout so it gets enqueued through scheduleTimeout\n setTimeout(() => {\n attempt(index + 1);\n }, delay);\n }\n }\n ).catch((e) => {\n logger.error('[Askr] scheduleRetry error:', e);\n });\n });\n };\n\n // Start first attempt\n attempt(0);\n\n const cancel = () => {\n cancelled = true;\n };\n\n if (inst) (inst.cleanupFns ??= []).push(cancel);\n return { cancel };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"noop.js","names":[],"sources":["../../src/fx/noop.ts"],"sourcesContent":["// Lightweight shared no-op helpers to avoid double-casts and duplicated definitions\n\nexport const noop: () => void = () => {};\n\nexport const noopEventListener: EventListener & { cancel(): void } =\n Object.assign((_ev?: Event) => {}, { cancel() {} });\n\nexport const noopEventListenerWithFlush: EventListener & {\n cancel(): void;\n flush(): void;\n} = Object.assign((_ev?: Event) => {}, { cancel() {}, flush() {} });\n\nexport const noopCancel: { cancel(): void } = { cancel() {} };\n"],"mappings":"AAIA,MAAa,oBACX,OAAO,QAAQ,QAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;AAEpD,MAAa,6BAGT,OAAO,QAAQ,QAAgB,CAAC,GAAG;CAAE,SAAS,CAAC;CAAG,QAAQ,CAAC;AAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"timing.d.ts","names":[],"sources":["../../src/fx/timing.ts"],"mappings":";;AAKA;;;UAAiB,eAAA;EACf,OAAA;EACA,QAAQ;AAAA;AAAA,UAGO,eAAA;EACf,OAAA;EACA,QAAQ;AAAA;AAAA,UAGO,YAAA;EACf,WAAA;EACA,OAAA;EACA,OAAA,IAAW,YAAA;AAAA;AAAA,KAGR,KAAA,OAAY,IAAI;;;AAHY;AAChC;;;;AAEoB;AAoBrB;;;;;;;;;iBAAgB,QAAA,WAAmB,KAAA,EACjC,EAAA,EAAI,CAAA,EACJ,EAAA,UACA,OAAA,GAAU,eAAA,GACT,CAAA;EAAM,MAAA;AAAA;;;;;;;;AAAM;AA2Df;;;;;;;;;iBAAgB,QAAA,WAAmB,KAAA,EACjC,EAAA,EAAI,CAAA,EACJ,EAAA,UACA,OAAA,GAAU,eAAA,GACT,CAAA;EAAM,MAAA;AAAA;;;;;;;;AAAM;AAsEf;;;;;;;;iBAAgB,IAAA,WAAe,KAAA,EAAO,EAAA,EAAI,CAAA,GAAI,CAAA;;;;;;AAAC;AA2B/C;;;;AAAoC;AAmBpC;;iBAnBgB,KAAA,CAAM,EAAc;;;;;;;;;;;;AAmBU;AAkC9C;;;iBAlCgB,GAAA,WAAc,KAAA,EAAO,EAAA,EAAI,CAAA,GAAI,CAAA;;;;;AAkCsB;AAyBnE;;;;AAA4C;AAqB5C;;;;iBA9CgB,IAAA,CAAK,EAAA,cAAgB,OAAA;EAAY,OAAA;AAAA;;;;;;;;;;;;;AAiDrC;;iBAxBI,OAAA,CAAQ,EAAA,WAAa,OAAO;;;;;;;;;;;;;;;;;;iBAqBtB,KAAA,IACpB,EAAA,QAAU,OAAA,CAAQ,CAAA,GAClB,OAAA,GAAU,YAAA,GACT,OAAA,CAAQ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"timing.js","names":[],"sources":["../../src/fx/timing.ts"],"sourcesContent":["/**\n * Timing utilities — pure helpers for common async patterns\n * No framework coupling. No lifecycle awareness.\n */\n\nexport interface DebounceOptions {\n leading?: boolean;\n trailing?: boolean;\n}\n\nexport interface ThrottleOptions {\n leading?: boolean;\n trailing?: boolean;\n}\n\nexport interface RetryOptions {\n maxAttempts?: number;\n delayMs?: number;\n backoff?: (attemptIndex: number) => number;\n}\n\ntype AnyFn = (...args: never[]) => unknown;\ntype CallableFn = (this: unknown, ...args: unknown[]) => unknown;\n\n/**\n * Debounce — delay execution, coalesce rapid calls\n *\n * Useful for: text input, resize, autosave\n *\n * @param fn Function to debounce\n * @param ms Delay in milliseconds\n * @param options trailing (default true), leading\n * @returns Debounced function with cancel() method\n *\n * @example\n * ```ts\n * const save = debounce((text) => api.save(text), 500);\n * input.addEventListener('input', (e) => save(e.target.value));\n * save.cancel(); // stop any pending execution\n * ```\n */\nexport function debounce<T extends AnyFn>(\n fn: T,\n ms: number,\n options?: DebounceOptions\n): T & { cancel(): void } {\n const callable = fn as unknown as CallableFn;\n let timeoutId: NodeJS.Timeout | null = null;\n const { leading = false, trailing = true } = options || {};\n let lastArgs: unknown[] | null = null;\n let lastThis: unknown = null;\n let lastCallTime = 0;\n\n const debounced = function (this: unknown, ...args: unknown[]) {\n const callTime = Date.now();\n lastArgs = args;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this;\n\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n\n if (leading && callTime - lastCallTime >= ms) {\n callable.apply(this, args);\n lastCallTime = callTime;\n }\n\n if (trailing) {\n timeoutId = setTimeout(() => {\n callable.apply(lastThis, lastArgs!);\n timeoutId = null;\n lastCallTime = Date.now();\n }, ms);\n }\n };\n\n debounced.cancel = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n return debounced as unknown as T & { cancel(): void };\n}\n\n/**\n * Throttle — rate-limit execution, keep first/last\n *\n * Useful for: scroll, mouse move, high-frequency events\n *\n * @param fn Function to throttle\n * @param ms Minimum interval between calls in milliseconds\n * @param options leading (default true), trailing (default true)\n * @returns Throttled function with cancel() method\n *\n * @example\n * ```ts\n * const handleScroll = throttle(updateUI, 100);\n * window.addEventListener('scroll', handleScroll);\n * handleScroll.cancel();\n * ```\n */\nexport function throttle<T extends AnyFn>(\n fn: T,\n ms: number,\n options?: ThrottleOptions\n): T & { cancel(): void } {\n const callable = fn as unknown as CallableFn;\n let lastCallTime: number | null = null;\n let timeoutId: NodeJS.Timeout | null = null;\n const { leading = true, trailing = true } = options || {};\n let lastArgs: unknown[] | null = null;\n let lastThis: unknown = null;\n\n const throttled = function (this: unknown, ...args: unknown[]) {\n const callTime = Date.now();\n const timeSinceLastCall =\n lastCallTime === null\n ? Number.POSITIVE_INFINITY\n : callTime - lastCallTime;\n lastArgs = args;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this;\n\n if (leading && timeSinceLastCall >= ms) {\n callable.apply(this, args);\n lastCallTime = callTime;\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n return;\n }\n\n if (!leading && lastCallTime === null) {\n lastCallTime = callTime;\n }\n\n if (trailing && timeoutId === null) {\n timeoutId = setTimeout(\n () => {\n callable.apply(lastThis, lastArgs!);\n lastCallTime = Date.now();\n timeoutId = null;\n },\n lastCallTime === null ? ms : Math.max(0, ms - (callTime - lastCallTime))\n );\n }\n };\n\n throttled.cancel = () => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n return throttled as unknown as T & { cancel(): void };\n}\n\n/**\n * Once — guard against double execution\n *\n * Useful for: init logic, event safety\n *\n * @param fn Function to call at most once\n * @returns Function that executes fn only on first call\n *\n * @example\n * ```ts\n * const init = once(setup);\n * init(); // runs\n * init(); // does nothing\n * init(); // does nothing\n * ```\n */\nexport function once<T extends AnyFn>(fn: T): T {\n const callable = fn as unknown as CallableFn;\n let called = false;\n let result: unknown;\n\n return ((...args: unknown[]) => {\n if (!called) {\n called = true;\n result = callable(...args);\n }\n return result;\n }) as unknown as T;\n}\n\n/**\n * Defer — schedule on microtask queue\n *\n * Useful for: run-after-current-stack logic\n * More reliable than setTimeout(..., 0)\n *\n * @param fn Function to defer\n *\n * @example\n * ```ts\n * defer(() => update()); // runs after current stack, before next macrotask\n * ```\n */\nexport function defer(fn: () => void): void {\n Promise.resolve().then(fn);\n}\n\n/**\n * RAF — coalesce multiple updates into single frame\n *\n * Useful for: animation, layout work, render updates\n *\n * @param fn Function to schedule on next animation frame\n * @returns Function that schedules fn on requestAnimationFrame\n *\n * @example\n * ```ts\n * const update = raf(render);\n * update(); // schedules on next frame\n * update(); // same frame, no duplicate\n * ```\n */\nexport function raf<T extends AnyFn>(fn: T): T {\n const callable = fn as unknown as CallableFn;\n let frameId: number | null = null;\n let lastArgs: unknown[] | null = null;\n let lastThis: unknown = null;\n\n return function (this: unknown, ...args: unknown[]) {\n lastArgs = args;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n lastThis = this;\n\n if (frameId === null) {\n frameId = requestAnimationFrame(() => {\n callable.apply(lastThis, lastArgs!);\n frameId = null;\n });\n }\n } as unknown as T;\n}\n\n/**\n * Idle — schedule low-priority work\n *\n * Useful for: background prep, non-urgent updates\n * Falls back to setTimeout if requestIdleCallback unavailable\n *\n * @param fn Function to call when idle\n * @param options timeout for fallback\n *\n * @example\n * ```ts\n * idle(() => prefetchData());\n * ```\n */\nexport function idle(fn: () => void, options?: { timeout?: number }): void {\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(fn, options ? { timeout: options.timeout } : undefined);\n } else {\n // Fallback: defer to microtask, then use setTimeout\n Promise.resolve().then(() => {\n setTimeout(fn, 0);\n });\n }\n}\n\n/**\n * Timeout — Promise-based delay\n *\n * Useful for: readable async code, waiting between retries\n *\n * @param ms Milliseconds to wait\n * @returns Promise that resolves after delay\n *\n * @example\n * ```ts\n * await timeout(300);\n * console.log('300ms later');\n * ```\n */\nexport function timeout(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry — attempt function with backoff\n *\n * Useful for: network calls, transient failures\n *\n * @param fn Async function to retry\n * @param options maxAttempts, delayMs, backoff function\n * @returns Promise with final result or error\n *\n * @example\n * ```ts\n * const data = await retry(() => fetch(url), {\n * maxAttempts: 3,\n * delayMs: 100,\n * });\n * ```\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options?: RetryOptions\n): Promise<T> {\n const {\n maxAttempts = 3,\n delayMs = 100,\n backoff = (i: number) => delayMs * Math.pow(2, i),\n } = options || {};\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n if (attempt < maxAttempts - 1) {\n const delay = backoff(attempt);\n await timeout(delay);\n }\n }\n }\n\n throw lastError || new Error('Retry failed');\n}\n"],"mappings":"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"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * Askr: Actor-backed deterministic UI framework\n *\n * Public API surface — only users should import from here\n */\n\nimport { installRendererBridge } from './renderer';\n\ninstallRendererBridge();\n\nexport { createRuntime, getDefaultRuntime } from './runtime/runtime';\nexport type {\n AskrRuntimeOptions,\n RuntimeRendererHost,\n RuntimeKeyedReorderDecision,\n} from './runtime/runtime';\nexport { AskrRuntime } from './runtime/runtime';\n\n// Runtime primitives\nexport { state } from './runtime/state';\nexport type { State, StateSetter, StateTuple } from './runtime/state';\nexport { derive } from './runtime/derive';\nexport type { Derived } from './runtime/derive';\nexport { getSignal } from './runtime/component';\nexport { selector } from './runtime/selector';\nexport type { Selector } from './runtime/selector';\n\n// Control flow\nexport { Case, For, Match, Show } from './control';\nexport type { CaseProps, ForProps, MatchProps, ShowProps } from './control';\n\n// Context\nexport { defineContext, readContext } from './runtime/context';\nexport type { Context } from './runtime/context';\n\n// Re-export JSX runtime for tsconfig jsxImportSource\nexport { jsx, jsxs, Fragment } from './jsx-runtime';\n\n// Public types\nexport type { Props } from './common/props';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAQA,sBAAsB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/jsx/types.ts"],"mappings":";;;;QAwBQ,MAAA;EAAA,UAEI,GAAA;IAAA,UAEE,OAAA,SAAgB,UAAA;MAAA,SACf,qBAAA;IAAA;IAAA,UAGD,iBAAA,SAA0B,0BAAA;MAAA,CACjC,IAAA,WACG,sBAAA,GACA,0BAAA,OAAiC,0BAAA;IAAA;IAAA,UAG7B,yBAAA;MACR,KAAA,EAAO,KAAA;IAAA;IAAA,UAGC,wBAAA;MACR,QAAA;IAAA;EAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/jsx/utils.ts"],"mappings":";;iBAEgB,SAAA,CAAU,KAAA,YAAiB,KAAA,IAAS,UAAU;AAAA,iBAQ9C,YAAA,CACd,OAAA,EAAS,UAAA,EACT,KAAA,EAAO,MAAA,oBACN,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/jsx/utils.ts"],"sourcesContent":["import { ELEMENT_TYPE, JSXElement } from './types';\n\nexport function isElement(value: unknown): value is JSXElement {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as JSXElement).$$typeof === ELEMENT_TYPE\n );\n}\n\nexport function cloneElement(\n element: JSXElement,\n props: Record<string, unknown>\n): JSXElement {\n return {\n ...element,\n props: { ...element.props, ...props },\n };\n}\n"],"mappings":";;;AAEA,SAAgB,UAAU,OAAqC;CAC7D,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAqB,aAAa;AAEvC;AAEA,SAAgB,aACd,SACA,OACY;CACZ,OAAO;EACL,GAAG;EACH,OAAO;GAAE,GAAG,QAAQ;GAAO,GAAG;EAAM;CACtC;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx-dev-runtime.d.ts","names":[],"sources":["../src/jsx/jsx-dev-runtime.ts"],"mappings":";;;;iBA2CgB,MAAA,CACd,IAAA,EAAM,qBAAA,EACN,KAAA,EAAO,KAAK,SACZ,GAAA,oBACA,gBAAA;AAAA,iBAEc,MAAA,oBAA0B,0BAAA,EACxC,IAAA,EAAM,IAAA,EACN,KAAA,EAAO,0BAAA,CAA2B,IAAA,UAClC,GAAA,oBACA,gBAAA,aACC,UAAA;AAAA,iBACa,MAAA,sBACd,IAAA,EAAM,OAAA,CAAQ,IAAA,QAAY,0BAAA,GAC1B,KAAA,EAAO,sBAAA,SACP,GAAA,oBACA,gBAAA,aACC,UAAA;AAAA,iBACa,MAAA,wBACd,IAAA,GAAO,KAAA,EAAO,MAAA,cACd,KAAA,EAAO,MAAA,SACP,GAAA,oBACA,gBAAA,aACC,UAAA;AAAA,iBACa,MAAA,CACd,IAAA,UACA,KAAA,EAAO,KAAA,SACP,GAAA,oBACA,gBAAA,aACC,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx-dev-runtime.js","names":[],"sources":["../src/jsx/jsx-dev-runtime.ts"],"sourcesContent":["/**\n * JSX dev runtime factory\n * Same element shape as production runtime, with room for dev warnings.\n */\nimport type {\n IntrinsicFallbackProps,\n KnownIntrinsicElementProps,\n Props,\n} from '../common/props';\nimport {\n isEagerControlPrimitive,\n type EagerControlPrimitive,\n} from '../common/control';\nimport {\n ELEMENT_TYPE,\n Fragment,\n STATIC_CHILDREN,\n type JSXElementType,\n type JSXElement,\n} from './types';\nimport { markReadableUsage } from '../runtime/readable';\n\nfunction annotatePropsUsage(props: Record<string, unknown> | null): Props {\n const normalizedProps = (props ?? {}) as Props;\n\n for (const value of Object.values(normalizedProps)) {\n markReadableUsage(value);\n }\n\n return normalizedProps;\n}\n\nfunction markStaticChildren(props: Props): Props {\n if (Array.isArray(props.children)) {\n Object.defineProperty(props.children, STATIC_CHILDREN, {\n value: true,\n configurable: true,\n });\n }\n\n return props;\n}\n\nexport function jsxDEV(\n type: EagerControlPrimitive,\n props: Props | null,\n key?: string | number,\n isStaticChildren?: boolean\n): unknown;\nexport function jsxDEV<TTag extends keyof KnownIntrinsicElementProps>(\n type: TTag,\n props: KnownIntrinsicElementProps[TTag] | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV<TTag extends string>(\n type: Exclude<TTag, keyof KnownIntrinsicElementProps>,\n props: IntrinsicFallbackProps | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV<TProps extends object>(\n type: (props: TProps) => unknown,\n props: TProps | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV(\n type: symbol,\n props: Props | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number,\n isStaticChildren = false\n): JSXElement | unknown {\n const normalizedProps = annotatePropsUsage(props);\n const preparedProps = isStaticChildren\n ? markStaticChildren(normalizedProps)\n : normalizedProps;\n\n if (isEagerControlPrimitive(type)) {\n return type(preparedProps);\n }\n\n return {\n $$typeof: ELEMENT_TYPE,\n type: type as JSXElementType,\n props: preparedProps,\n key: key ?? null,\n };\n}\n\n// Re-export Fragment for JSX\nexport { Fragment };\nexport type { JSXComponent, JSXElement, JSXElementType } from './types';\n"],"mappings":";;;;;AAsBA,SAAS,mBAAmB,OAA8C;CACxE,MAAM,kBAAmB,SAAS,CAAC;CAEnC,KAAK,MAAM,SAAS,OAAO,OAAO,eAAe,GAC/C,kBAAkB,KAAK;CAGzB,OAAO;AACT;AAEA,SAAS,mBAAmB,OAAqB;CAC/C,IAAI,MAAM,QAAQ,MAAM,QAAQ,GAC9B,OAAO,eAAe,MAAM,UAAU,iBAAiB;EACrD,OAAO;EACP,cAAc;CAChB,CAAC;CAGH,OAAO;AACT;AAgCA,SAAgB,OACd,MACA,OACA,KACA,mBAAmB,OACG;CACtB,MAAM,kBAAkB,mBAAmB,KAAK;CAChD,MAAM,gBAAgB,mBAClB,mBAAmB,eAAe,IAClC;CAEJ,IAAI,wBAAwB,IAAI,GAC9B,OAAO,KAAK,aAAa;CAG3B,OAAO;EACL,UAAU;EACJ;EACN,OAAO;EACP,KAAK,OAAO;CACd;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx-runtime.d.ts","names":[],"sources":["../src/jsx/jsx-runtime.ts"],"mappings":";;;;iBA4CgB,MAAA,CACd,IAAA,EAAM,qBAAA,EACN,KAAA,EAAO,KAAK,SACZ,GAAA,oBACA,gBAAA;AAAA,iBAEc,MAAA,oBAA0B,0BAAA,EACxC,IAAA,EAAM,IAAA,EACN,KAAA,EAAO,0BAAA,CAA2B,IAAA,UAClC,GAAA,oBACA,gBAAA,aACC,UAAA;AAAA,iBACa,MAAA,sBACd,IAAA,EAAM,OAAA,CAAQ,IAAA,QAAY,0BAAA,GAC1B,KAAA,EAAO,sBAAA,SACP,GAAA,oBACA,gBAAA,aACC,UAAA;AAAA,iBACa,MAAA,wBACd,IAAA,GAAO,KAAA,EAAO,MAAA,cACd,KAAA,EAAO,MAAA,SACP,GAAA,oBACA,gBAAA,aACC,UAAA;AAAA,iBACa,MAAA,CACd,IAAA,UACA,KAAA,EAAO,KAAA,SACP,GAAA,oBACA,gBAAA,aACC,UAAU;AAAA,iBAyBG,GAAA,CACd,IAAA,EAAM,qBAAA,EACN,KAAA,EAAO,KAAK,SACZ,GAAA;AAAA,iBAEc,GAAA,oBAAuB,0BAAA,EACrC,IAAA,EAAM,IAAA,EACN,KAAA,EAAO,0BAAA,CAA2B,IAAA,UAClC,GAAA,qBACC,UAAA;AAAA,iBACa,GAAA,sBACd,IAAA,EAAM,OAAA,CAAQ,IAAA,QAAY,0BAAA,GAC1B,KAAA,EAAO,sBAAA,SACP,GAAA,qBACC,UAAA;AAAA,iBACa,GAAA,wBACd,IAAA,GAAO,KAAA,EAAO,MAAA,cACd,KAAA,EAAO,MAAA,SACP,GAAA,qBACC,UAAA;AAAA,iBACa,GAAA,CACd,IAAA,UACA,KAAA,EAAO,KAAA,SACP,GAAA,qBACC,UAAU;AAAA,iBASG,IAAA,CACd,IAAA,EAAM,qBAAA,EACN,KAAA,EAAO,KAAK,SACZ,GAAA;AAAA,iBAEc,IAAA,oBAAwB,0BAAA,EACtC,IAAA,EAAM,IAAA,EACN,KAAA,EAAO,0BAAA,CAA2B,IAAA,UAClC,GAAA,qBACC,UAAA;AAAA,iBACa,IAAA,sBACd,IAAA,EAAM,OAAA,CAAQ,IAAA,QAAY,0BAAA,GAC1B,KAAA,EAAO,sBAAA,SACP,GAAA,qBACC,UAAA;AAAA,iBACa,IAAA,wBACd,IAAA,GAAO,KAAA,EAAO,MAAA,cACd,KAAA,EAAO,MAAA,SACP,GAAA,qBACC,UAAA;AAAA,iBACa,IAAA,CACd,IAAA,UACA,KAAA,EAAO,KAAA,SACP,GAAA,qBACC,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx-runtime.js","names":[],"sources":["../src/jsx/jsx-runtime.ts"],"sourcesContent":["/**\n * JSX runtime factory\n * Same element shape as production runtime.\n */\n\nimport type {\n IntrinsicFallbackProps,\n KnownIntrinsicElementProps,\n Props,\n} from '../common/props';\nimport {\n isEagerControlPrimitive,\n type EagerControlPrimitive,\n} from '../common/control';\nimport {\n ELEMENT_TYPE,\n Fragment,\n STATIC_CHILDREN,\n type JSXElementType,\n type JSXElement,\n} from './types';\nimport { markReadableUsage } from '../runtime/readable';\n\nfunction annotatePropsUsage(props: Record<string, unknown> | null): Props {\n const normalizedProps = (props ?? {}) as Props;\n\n for (const value of Object.values(normalizedProps)) {\n markReadableUsage(value);\n }\n\n return normalizedProps;\n}\n\nfunction markStaticChildren(props: Props): Props {\n if (Array.isArray(props.children)) {\n Object.defineProperty(props.children, STATIC_CHILDREN, {\n value: true,\n configurable: true,\n });\n }\n\n return props;\n}\n\nexport function jsxDEV(\n type: EagerControlPrimitive,\n props: Props | null,\n key?: string | number,\n isStaticChildren?: boolean\n): unknown;\nexport function jsxDEV<TTag extends keyof KnownIntrinsicElementProps>(\n type: TTag,\n props: KnownIntrinsicElementProps[TTag] | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV<TTag extends string>(\n type: Exclude<TTag, keyof KnownIntrinsicElementProps>,\n props: IntrinsicFallbackProps | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV<TProps extends object>(\n type: (props: TProps) => unknown,\n props: TProps | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV(\n type: symbol,\n props: Props | null,\n key?: string | number,\n isStaticChildren?: boolean\n): JSXElement;\nexport function jsxDEV(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number,\n isStaticChildren = false\n): JSXElement | unknown {\n const normalizedProps = annotatePropsUsage(props);\n const preparedProps = isStaticChildren\n ? markStaticChildren(normalizedProps)\n : normalizedProps;\n\n if (isEagerControlPrimitive(type)) {\n return type(preparedProps);\n }\n\n return {\n $$typeof: ELEMENT_TYPE,\n type: type as JSXElementType,\n props: preparedProps,\n key: key ?? null,\n };\n}\n\n// Production-style helpers: alias to the DEV factory for now\nexport function jsx(\n type: EagerControlPrimitive,\n props: Props | null,\n key?: string | number\n): unknown;\nexport function jsx<TTag extends keyof KnownIntrinsicElementProps>(\n type: TTag,\n props: KnownIntrinsicElementProps[TTag] | null,\n key?: string | number\n): JSXElement;\nexport function jsx<TTag extends string>(\n type: Exclude<TTag, keyof KnownIntrinsicElementProps>,\n props: IntrinsicFallbackProps | null,\n key?: string | number\n): JSXElement;\nexport function jsx<TProps extends object>(\n type: (props: TProps) => unknown,\n props: TProps | null,\n key?: string | number\n): JSXElement;\nexport function jsx(\n type: symbol,\n props: Props | null,\n key?: string | number\n): JSXElement;\nexport function jsx(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number\n) {\n return jsxDEV(type as never, props, key);\n}\n\nexport function jsxs(\n type: EagerControlPrimitive,\n props: Props | null,\n key?: string | number\n): unknown;\nexport function jsxs<TTag extends keyof KnownIntrinsicElementProps>(\n type: TTag,\n props: KnownIntrinsicElementProps[TTag] | null,\n key?: string | number\n): JSXElement;\nexport function jsxs<TTag extends string>(\n type: Exclude<TTag, keyof KnownIntrinsicElementProps>,\n props: IntrinsicFallbackProps | null,\n key?: string | number\n): JSXElement;\nexport function jsxs<TProps extends object>(\n type: (props: TProps) => unknown,\n props: TProps | null,\n key?: string | number\n): JSXElement;\nexport function jsxs(\n type: symbol,\n props: Props | null,\n key?: string | number\n): JSXElement;\nexport function jsxs(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number\n) {\n const normalizedProps = markStaticChildren(annotatePropsUsage(props));\n\n if (isEagerControlPrimitive(type)) {\n return type(normalizedProps);\n }\n\n return {\n $$typeof: ELEMENT_TYPE,\n type: type as JSXElementType,\n props: normalizedProps,\n key: key ?? null,\n } as JSXElement;\n}\n\n// Re-export Fragment for JSX.\nexport { Fragment };\nexport type { JSXComponent, JSXElement, JSXElementType } from './types';\n"],"mappings":";;;;;AAuBA,SAAS,mBAAmB,OAA8C;CACxE,MAAM,kBAAmB,SAAS,CAAC;CAEnC,KAAK,MAAM,SAAS,OAAO,OAAO,eAAe,GAC/C,kBAAkB,KAAK;CAGzB,OAAO;AACT;AAEA,SAAS,mBAAmB,OAAqB;CAC/C,IAAI,MAAM,QAAQ,MAAM,QAAQ,GAC9B,OAAO,eAAe,MAAM,UAAU,iBAAiB;EACrD,OAAO;EACP,cAAc;CAChB,CAAC;CAGH,OAAO;AACT;AAgCA,SAAgB,OACd,MACA,OACA,KACA,mBAAmB,OACG;CACtB,MAAM,kBAAkB,mBAAmB,KAAK;CAChD,MAAM,gBAAgB,mBAClB,mBAAmB,eAAe,IAClC;CAEJ,IAAI,wBAAwB,IAAI,GAC9B,OAAO,KAAK,aAAa;CAG3B,OAAO;EACL,UAAU;EACJ;EACN,OAAO;EACP,KAAK,OAAO;CACd;AACF;AA4BA,SAAgB,IACd,MACA,OACA,KACA;CACA,OAAO,OAAO,MAAe,OAAO,GAAG;AACzC;AA2BA,SAAgB,KACd,MACA,OACA,KACA;CACA,MAAM,kBAAkB,mBAAmB,mBAAmB,KAAK,CAAC;CAEpE,IAAI,wBAAwB,IAAI,GAC9B,OAAO,KAAK,eAAe;CAG7B,OAAO;EACL,UAAU;EACJ;EACN,OAAO;EACP,KAAK,OAAO;CACd;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributes.js","names":[],"sources":["../../src/renderer/attributes.ts"],"sourcesContent":["import type { Props } from '../common/props';\nimport { incrementPerfMetric } from '../runtime/perf-metrics';\nimport {\n extractKey,\n getRenderedAttributeName,\n isSkippedProp,\n parseEventName,\n readElementClassName,\n removeRenderedAttribute,\n setRenderedAttribute,\n tagNamesEqualIgnoreCase,\n writeElementClassName,\n} from './utils';\n\ntype ClassTokenDescriptor = {\n lastClassTokens: string[] | null;\n};\n\ntype StyleEntries = Map<string, string>;\n\ntype Ref<T> =\n | ((value: T | null) => void)\n | { current: T | null }\n | null\n | undefined;\n\nexport function applyRef<T>(el: T, ref: unknown): void {\n const resolvedRef = ref as Ref<T>;\n if (!resolvedRef) return;\n if (typeof resolvedRef === 'function') {\n resolvedRef(el);\n return;\n }\n\n if (Object.isExtensible(resolvedRef)) {\n (resolvedRef as { current: T | null }).current = el;\n }\n}\n\nexport function applyFormControlProp(\n el: Element,\n key: string,\n value: unknown,\n tagName: string\n): void {\n if (key === 'value') {\n if (\n tagNamesEqualIgnoreCase(tagName, 'input') ||\n tagNamesEqualIgnoreCase(tagName, 'textarea') ||\n tagNamesEqualIgnoreCase(tagName, 'select')\n ) {\n (el as HTMLInputElement & Props).value = String(value);\n el.setAttribute('value', String(value));\n } else {\n el.setAttribute('value', String(value));\n }\n return;\n }\n\n if (key === 'checked') {\n if (tagNamesEqualIgnoreCase(tagName, 'input')) {\n const checked = Boolean(value);\n (el as HTMLInputElement & Props).checked = checked;\n if (checked) {\n el.setAttribute('checked', '');\n } else {\n el.removeAttribute('checked');\n }\n } else if (value) {\n el.setAttribute('checked', '');\n } else {\n el.removeAttribute('checked');\n }\n }\n}\n\nfunction normalizeStylePropertyName(propertyName: string): string {\n if (propertyName.startsWith('--')) {\n return propertyName;\n }\n\n return propertyName.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n\nfunction collectCurrentStyleEntries(el: Element): StyleEntries {\n const entries: StyleEntries = new Map();\n const style = (el as HTMLElement | SVGElement).style;\n\n if (!style) {\n return entries;\n }\n\n for (let index = 0; index < style.length; index += 1) {\n const propertyName = style.item(index);\n entries.set(propertyName, style.getPropertyValue(propertyName));\n }\n\n return entries;\n}\n\nfunction normalizeStyleEntries(value: unknown): StyleEntries | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n\n const entries: StyleEntries = new Map();\n for (const [key, entryValue] of Object.entries(\n value as Record<string, unknown>\n )) {\n if (\n entryValue === undefined ||\n entryValue === null ||\n entryValue === false\n ) {\n continue;\n }\n\n entries.set(normalizeStylePropertyName(key), String(entryValue));\n }\n\n return entries;\n}\n\nexport function applyStylePropValue(el: Element, value: unknown): void {\n const style = (el as HTMLElement | SVGElement).style;\n if (!style) {\n if (value === null || value === undefined || value === false) {\n el.removeAttribute('style');\n return;\n }\n\n el.setAttribute('style', String(value));\n return;\n }\n\n if (value === null || value === undefined || value === false) {\n if (!el.getAttribute('style')) {\n incrementPerfMetric('skippedDomPropWrites');\n return;\n }\n\n style.cssText = '';\n el.removeAttribute('style');\n return;\n }\n\n if (typeof value === 'string') {\n if ((el.getAttribute('style') ?? '') === value) {\n incrementPerfMetric('skippedDomPropWrites');\n return;\n }\n\n style.cssText = value;\n return;\n }\n\n const nextEntries = normalizeStyleEntries(value);\n if (!nextEntries) {\n const nextText = String(value);\n if ((el.getAttribute('style') ?? '') === nextText) {\n incrementPerfMetric('skippedDomPropWrites');\n return;\n }\n\n style.cssText = nextText;\n return;\n }\n\n const previousEntries = collectCurrentStyleEntries(el);\n let didWrite = false;\n\n for (const [propertyName] of previousEntries) {\n if (nextEntries.has(propertyName)) {\n continue;\n }\n\n style.removeProperty(propertyName);\n didWrite = true;\n }\n\n for (const [propertyName, propertyValue] of nextEntries) {\n if (previousEntries.get(propertyName) === propertyValue) {\n continue;\n }\n\n style.setProperty(propertyName, propertyValue);\n didWrite = true;\n }\n\n if (!didWrite) {\n incrementPerfMetric('skippedDomPropWrites');\n }\n}\n\nexport function applyStaticScalarPropsToElement(\n el: Element,\n props: Record<string, unknown>,\n tagName: string\n): void {\n for (const key in props) {\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 (key === 'class' || key === 'className') {\n writeElementClassName(el, String(value));\n } else if (key === 'style') {\n applyStylePropValue(el, value);\n } else if (key === 'value' || key === 'checked') {\n applyFormControlProp(el, key, value, tagName);\n } else {\n setRenderedAttribute(el, key, String(value));\n }\n }\n}\n\nfunction tokenizeClassValue(value: unknown): string[] | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return [];\n }\n\n return trimmed.split(/\\s+/);\n}\n\nfunction patchClassList(\n el: Element,\n previousTokens: string[],\n nextTokens: string[]\n): void {\n if (previousTokens.length === nextTokens.length) {\n let identical = true;\n for (let index = 0; index < previousTokens.length; index += 1) {\n if (previousTokens[index] !== nextTokens[index]) {\n identical = false;\n break;\n }\n }\n if (identical) {\n return;\n }\n }\n\n if (previousTokens.length === 0) {\n if (nextTokens.length === 0) {\n return;\n }\n el.classList.add(...nextTokens);\n incrementPerfMetric('classListPatchOps');\n return;\n }\n\n if (nextTokens.length === 0) {\n el.classList.remove(...previousTokens);\n incrementPerfMetric('classListPatchOps');\n return;\n }\n\n if (previousTokens.length === 1 && nextTokens.length === 1) {\n el.classList.remove(previousTokens[0]);\n el.classList.add(nextTokens[0]);\n incrementPerfMetric('classListPatchOps');\n return;\n }\n\n const nextSet = new Set(nextTokens);\n const previousSet = new Set(previousTokens);\n\n for (const token of previousTokens) {\n if (!nextSet.has(token)) {\n el.classList.remove(token);\n }\n }\n\n for (const token of nextTokens) {\n if (!previousSet.has(token)) {\n el.classList.add(token);\n }\n }\n\n incrementPerfMetric('classListPatchOps');\n}\n\nexport function applyClassPropValue(\n el: Element,\n value: unknown,\n previousValue: unknown,\n descriptor?: ClassTokenDescriptor\n): void {\n const nextString = String(value);\n const nextTokens = tokenizeClassValue(nextString);\n const previousTokens =\n descriptor?.lastClassTokens ?? tokenizeClassValue(previousValue);\n\n if (nextTokens && previousTokens) {\n patchClassList(el, previousTokens, nextTokens);\n if (descriptor) {\n descriptor.lastClassTokens = nextTokens;\n }\n return;\n }\n\n writeElementClassName(el, nextString);\n if (descriptor) {\n descriptor.lastClassTokens = nextTokens;\n }\n}\n\nexport function applyScalarPropValue(\n el: Element,\n key: string,\n value: unknown,\n tagName: string,\n previousValue?: unknown,\n descriptor?: ClassTokenDescriptor\n): void {\n if (value === undefined || value === null || value === false) {\n if (key === 'class' || key === 'className') {\n const previousTokens = descriptor?.lastClassTokens;\n if (previousTokens && previousTokens.length > 0) {\n el.classList.remove(...previousTokens);\n incrementPerfMetric('classListPatchOps');\n } else {\n writeElementClassName(el, '');\n }\n if (descriptor) {\n descriptor.lastClassTokens = [];\n }\n } else if (key === 'value') {\n applyFormControlProp(el, key, '', tagName);\n } else if (key === 'checked') {\n applyFormControlProp(el, key, false, tagName);\n } else if (key === 'style') {\n applyStylePropValue(el, null);\n } else {\n removeRenderedAttribute(el, key);\n }\n return;\n }\n\n if (key === 'class' || key === 'className') {\n applyClassPropValue(el, value, previousValue, descriptor);\n } else if (key === 'style') {\n applyStylePropValue(el, value);\n } else if (key === 'value' || key === 'checked') {\n applyFormControlProp(el, key, value, tagName);\n } else {\n setRenderedAttribute(el, key, String(value));\n }\n}\n\nexport function removeStaleAttributes(\n el: Element,\n vnode: unknown,\n props: Record<string, unknown>\n): void {\n const desiredAttributes = new Set<string>();\n const key = extractKey(vnode);\n\n if (key !== undefined) {\n desiredAttributes.add('data-key');\n }\n\n for (const propName in props) {\n if (isSkippedProp(propName)) continue;\n if (parseEventName(propName)) continue;\n\n const value = props[propName];\n if (value === undefined || value === null || value === false) continue;\n\n desiredAttributes.add(getRenderedAttributeName(el, propName));\n }\n\n for (const attribute of Array.from(el.attributes)) {\n if (!desiredAttributes.has(getRenderedAttributeName(el, attribute.name))) {\n removeRenderedAttribute(el, attribute.name);\n }\n }\n}\n\nexport function materializeKey(\n el: Element,\n vnode: { key?: unknown },\n props: Record<string, unknown>\n): void {\n const rawKey = vnode.key ?? props.key;\n const vnodeKey =\n rawKey === null || rawKey === undefined\n ? undefined\n : typeof rawKey === 'symbol'\n ? String(rawKey)\n : (rawKey as string | number);\n if (vnodeKey !== undefined) {\n const nextKey = String(vnodeKey);\n if (el.getAttribute('data-key') !== nextKey) {\n el.setAttribute('data-key', nextKey);\n }\n }\n}\n\nexport function hasMatchingStaticProps(\n el: Element,\n props: Record<string, unknown>,\n vnodeType: string\n): boolean {\n let staticPropCount = 0;\n\n for (const key in props) {\n if (isSkippedProp(key)) continue;\n\n const value = props[key];\n if (value === undefined || value === null || value === false) {\n return false;\n }\n\n const eventName = parseEventName(key);\n if (eventName || typeof value === 'function') {\n return false;\n }\n\n if (key === 'class' || key === 'className') {\n if (readElementClassName(el) !== String(value)) {\n return false;\n }\n staticPropCount += 1;\n continue;\n }\n\n if (key === 'style') {\n const styleValue =\n typeof value === 'string' ? value.trim().replace(/;$/, '') : null;\n const domStyle = el.getAttribute('style')?.trim().replace(/;$/, '') ?? '';\n if (styleValue === null || domStyle !== styleValue) {\n return false;\n }\n staticPropCount += 1;\n continue;\n }\n\n if (key === 'value' || key === 'checked') {\n if ((el as HTMLElement & Record<string, unknown>)[key] !== value) {\n return false;\n }\n staticPropCount += 1;\n continue;\n }\n\n if (key === 'selected' && vnodeType === 'option') {\n if ((el as HTMLOptionElement).selected !== Boolean(value)) {\n return false;\n }\n staticPropCount += 1;\n continue;\n }\n\n if (el.getAttribute(getRenderedAttributeName(el, key)) !== String(value)) {\n return false;\n }\n\n staticPropCount += 1;\n }\n\n return el.attributes.length === staticPropCount;\n}\n"],"mappings":"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"}
@@ -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 '../dev/logger';\nimport { enqueueRuntimeTask } from '../runtime/access';\nimport type { ChildScope } from '../runtime/child-scope';\nimport type {\n ComponentFunction,\n ComponentInstance,\n} from '../runtime/component-contracts';\nimport {\n clearCaseDomUpdateState,\n clearShowDomUpdateState,\n evaluateCaseState,\n evaluateShowState,\n type ControlBoundaryState,\n} from '../runtime/control';\nimport {\n clearForDomUpdateState,\n evaluateForState,\n recordBenchEvent,\n} from '../runtime/for';\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 +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 '../dev/logger';\nimport { Fragment } from '../jsx/jsx-runtime';\nimport { getCurrentInstance } from '../runtime/component-contracts';\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 +0,0 @@
1
- {"version":3,"file":"children.js","names":[],"sources":["../../src/renderer/children.ts"],"sourcesContent":["import { setDevValue, incDevCounter } from '../runtime/dev-namespace';\nimport { 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 recordDOMReplace,\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\nfunction 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\nexport function performBulkTextReplace(parent: Element, newChildren: VNode[]) {\n const start = now();\n const existing = Array.from(parent.childNodes);\n const finalNodes: Node[] = [];\n let reused = 0;\n let created = 0;\n\n for (let index = 0; index < newChildren.length; index += 1) {\n const result = processChildNode(\n newChildren[index],\n existing[index],\n finalNodes\n );\n if (result === 'reused') reused += 1;\n else if (result === 'created') created += 1;\n }\n\n const tBuild = now() - start;\n const tCommit = commitBulkReplace(parent, finalNodes);\n\n keyedElements.delete(parent);\n\n const stats = {\n n: newChildren.length,\n reused,\n created,\n tBuild,\n tCommit,\n } as const;\n recordBulkTextStats(stats);\n\n return stats;\n}\n\nfunction processChildNode(\n vnode: VNode,\n existingNode: ChildNode | undefined,\n finalNodes: Node[]\n): 'reused' | 'created' | 'skipped' {\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n return processTextVnode(String(vnode), existingNode, finalNodes);\n }\n\n if (typeof vnode === 'object' && vnode !== null && 'type' in vnode) {\n return processElementVnode(vnode, existingNode, finalNodes);\n }\n\n return 'skipped';\n}\n\nfunction processTextVnode(\n text: string,\n existingNode: ChildNode | undefined,\n finalNodes: Node[]\n): 'reused' | 'created' {\n if (existingNode && existingNode.nodeType === 3) {\n (existingNode as Text).data = text;\n finalNodes.push(existingNode);\n return 'reused';\n }\n\n finalNodes.push(document.createTextNode(text));\n return 'created';\n}\n\nfunction processElementVnode(\n vnode: VNode,\n existingNode: ChildNode | undefined,\n finalNodes: Node[]\n): 'reused' | 'created' | 'skipped' {\n const vnodeObj = vnode as unknown as { type?: unknown };\n\n if (typeof vnodeObj.type === 'string') {\n const tag = vnodeObj.type;\n if (\n existingNode &&\n existingNode.nodeType === 1 &&\n tagsEqualIgnoreCase((existingNode as Element).tagName, tag)\n ) {\n updateElementFromVnode(existingNode as Element, vnode);\n finalNodes.push(existingNode);\n return 'reused';\n }\n }\n\n const dom = createDOMNode(vnode);\n if (dom) {\n finalNodes.push(dom);\n return 'created';\n }\n\n return 'skipped';\n}\n\nfunction commitBulkReplace(parent: Element, nodes: Node[]): number {\n const startedAt = Date.now();\n const fragment = document.createDocumentFragment();\n\n for (let index = 0; index < nodes.length; index += 1) {\n fragment.appendChild(nodes[index]);\n }\n\n try {\n for (let node = parent.firstChild; node; ) {\n const next = node.nextSibling;\n teardownNodeSubtree(node);\n node = next;\n }\n } catch {\n // SLOW PATH: cleanup failure\n }\n\n recordDOMReplace('bulk-text-replace');\n parent.replaceChildren(fragment);\n return Date.now() - startedAt;\n}\n\nfunction recordBulkTextStats(stats: {\n n: number;\n reused: number;\n created: number;\n tBuild: number;\n tCommit: number;\n}): void {\n try {\n setDevValue('__LAST_BULK_TEXT_FASTPATH_STATS', stats);\n setDevValue('__LAST_FASTPATH_STATS', stats);\n setDevValue('__LAST_FASTPATH_COMMIT_COUNT', 1);\n incDevCounter('bulkTextFastpathHits');\n } catch {\n // Ignore stats errors\n }\n}\n\nexport function isBulkTextFastPathEligible(\n parent: Element,\n newChildren: VNode[]\n) {\n const env = getRuntimeEnv();\n const threshold = Number(env.ASKR_BULK_TEXT_THRESHOLD) || 1024;\n const requiredFraction = 0.8;\n\n const total = Array.isArray(newChildren) ? newChildren.length : 0;\n\n if (total < threshold) {\n recordBulkDiag({\n phase: 'bulk-unkeyed-eligible',\n reason: 'too-small',\n total,\n threshold,\n });\n return false;\n }\n\n const result = countSimpleChildren(newChildren);\n if (result.componentFound !== undefined) {\n recordBulkDiag({\n phase: 'bulk-unkeyed-eligible',\n reason: 'component-child',\n index: result.componentFound,\n });\n return false;\n }\n\n const fraction = result.simple / total;\n const eligible =\n fraction >= requiredFraction && parent.childNodes.length >= total;\n\n recordBulkDiag({\n phase: 'bulk-unkeyed-eligible',\n total,\n simple: result.simple,\n fraction,\n requiredFraction,\n eligible,\n });\n\n return eligible;\n}\n\nfunction countSimpleChildren(children: VNode[]): {\n simple: number;\n componentFound?: number;\n} {\n let simple = 0;\n\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n\n if (typeof child === 'string' || typeof child === 'number') {\n simple += 1;\n continue;\n }\n\n if (typeof child === 'object' && child !== null && 'type' in child) {\n const dom = child as DOMElement;\n\n if (typeof dom.type === 'function') {\n return { simple, componentFound: index };\n }\n\n if (typeof dom.type === 'string' && isSimpleElement(dom)) {\n simple += 1;\n }\n }\n }\n\n return { simple };\n}\n\nfunction isSimpleElement(dom: DOMElement): boolean {\n const children = dom.props?.children ?? dom.children;\n\n if (children === null || children === undefined) return true;\n\n if (typeof children === 'string' || typeof children === 'number') {\n return true;\n }\n\n if (\n Array.isArray(children) &&\n children.length === 1 &&\n (typeof children[0] === 'string' || typeof children[0] === 'number')\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction recordBulkDiag(data: Record<string, unknown>): void {\n const env = getRuntimeEnv();\n if (env.NODE_ENV !== 'production' || env.ASKR_FASTPATH_DEBUG === '1') {\n try {\n setDevValue('__BULK_DIAG', data);\n } catch {\n // Ignore\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cleanup.js","names":[],"sources":["../../src/renderer/cleanup.ts"],"sourcesContent":["import {\n cleanupComponent,\n type ComponentInstance,\n} from '../runtime/component-contracts';\nimport { logger } from '../dev/logger';\nimport { incDevCounter } from '../runtime/dev-namespace';\nimport {\n clearDelegatedHandlersForElement,\n removeDelegatedListener,\n} from '../runtime/events';\n\ntype InstanceHost = Node & {\n __ASKR_INSTANCE?: unknown;\n __ASKR_INSTANCES?: unknown[];\n};\n\ntype Ref<T> =\n | ((value: T | null) => void)\n | { current: T | null }\n | null\n | undefined;\n\nexport const elementRefs = new WeakMap<Element, unknown>();\n\nfunction applyRefValue<T>(ref: unknown, value: T | null): void {\n const resolvedRef = ref as Ref<T>;\n\n if (!resolvedRef) {\n return;\n }\n\n if (typeof resolvedRef === 'function') {\n resolvedRef(value);\n return;\n }\n\n if (Object.isExtensible(resolvedRef)) {\n (resolvedRef as { current: T | null }).current = value;\n }\n}\n\nexport function updateElementRef<T extends Element>(\n element: T,\n ref: unknown\n): void {\n const previousRef = elementRefs.get(element);\n\n if (previousRef === ref) {\n return;\n }\n\n if (previousRef) {\n applyRefValue(previousRef, null);\n }\n\n if (ref) {\n applyRefValue(ref, element);\n elementRefs.set(element, ref);\n } else {\n elementRefs.delete(element);\n }\n}\n\nexport function removeElementRef(element: Element): void {\n const ref = elementRefs.get(element);\n\n if (!ref) {\n return;\n }\n\n applyRefValue(ref, null);\n elementRefs.delete(element);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Instance Cleanup Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction cleanupSingleInstance(\n node: InstanceHost,\n errors: unknown[] | null,\n strict: boolean\n): void {\n const instances = new Set<ComponentInstance>();\n\n if (Array.isArray(node.__ASKR_INSTANCES)) {\n for (const instance of node.__ASKR_INSTANCES) {\n if (instance) {\n instances.add(instance as ComponentInstance);\n }\n }\n }\n\n if (node.__ASKR_INSTANCE) {\n instances.add(node.__ASKR_INSTANCE as ComponentInstance);\n }\n\n for (const instance of instances) {\n try {\n cleanupComponent(instance);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] cleanupComponent failed:', err);\n }\n }\n\n try {\n delete node.__ASKR_INSTANCE;\n delete node.__ASKR_INSTANCES;\n } catch (e) {\n if (strict) errors!.push(e);\n }\n}\n\nfunction teardownSingleElement(\n element: Element,\n errors: unknown[] | null,\n strict: boolean\n): void {\n try {\n removeElementRef(element);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] removeElementRef failed:', err);\n }\n\n try {\n removeElementListeners(element);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] removeElementListeners failed:', err);\n }\n\n try {\n removeElementReactiveProps(element);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] removeElementReactiveProps failed:', err);\n }\n\n try {\n cleanupSingleInstance(element as InstanceHost, errors, strict);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] cleanupSingleInstance failed:', err);\n }\n}\n\n// Walk descendant elements with minimal allocations.\n// HOT PATH: used during subtree teardown (replace/unmount).\nfunction forEachDescendantElement(root: Element, visit: (el: Element) => void) {\n // Prefer TreeWalker when available; it avoids allocating a NodeList.\n try {\n const doc = root.ownerDocument;\n const createTreeWalker = doc?.createTreeWalker;\n if (typeof createTreeWalker === 'function') {\n // NodeFilter.SHOW_ELEMENT === 1\n const walker = createTreeWalker.call(doc, root, 1);\n let n = walker.firstChild();\n while (n) {\n visit(n as Element);\n n = walker.nextNode();\n }\n return;\n }\n } catch {\n // SLOW PATH: TreeWalker unavailable\n }\n\n // Fallback: querySelectorAll\n const descendants = root.querySelectorAll('*');\n for (let i = 0; i < descendants.length; i++) {\n visit(descendants[i]);\n }\n}\n\nfunction forEachDescendantNode(root: Node, visit: (node: Node) => void) {\n try {\n const doc = root.ownerDocument;\n const createTreeWalker = doc?.createTreeWalker;\n if (typeof createTreeWalker === 'function') {\n // NodeFilter.SHOW_ALL === 0xffffffff\n const walker = createTreeWalker.call(doc, root, 0xffffffff);\n let node = walker.nextNode();\n while (node) {\n visit(node);\n node = walker.nextNode();\n }\n return;\n }\n } catch {\n // SLOW PATH: TreeWalker unavailable\n }\n\n const stack = Array.from(root.childNodes).reverse();\n while (stack.length > 0) {\n const node = stack.pop()!;\n visit(node);\n for (let child = node.lastChild; child; child = child.previousSibling) {\n stack.push(child);\n }\n }\n}\n\nfunction forEachElementInSubtree(root: Element, visit: (el: Element) => void) {\n visit(root);\n forEachDescendantElement(root, visit);\n}\n\n// Track listeners so we can remove them on cleanup\nexport interface ListenerMapEntry {\n handler: EventListener;\n original: EventListener;\n eventName: string;\n options?: boolean | AddEventListenerOptions;\n isDelegated?: boolean;\n updateHandler?: (nextHandler: EventListener) => void;\n}\nexport const elementListeners = new WeakMap<\n Element,\n Map<string, ListenerMapEntry>\n>();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Clean up component instance attached to a DOM node\n * Accepts an optional `opts.strict` flag to surface errors instead of swallowing them.\n */\nexport function cleanupInstanceIfPresent(\n node: Node | null,\n opts?: { strict?: boolean }\n): void {\n if (!node) return;\n\n const strict = opts?.strict ?? false;\n const errors: unknown[] | null = strict ? [] : null;\n\n // Clean up the node itself\n try {\n cleanupSingleInstance(node as InstanceHost, errors, strict);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] cleanupInstanceIfPresent failed:', err);\n }\n\n // Clean up any nested instances, including null-component comment hosts.\n try {\n forEachDescendantNode(node, (descendant) => {\n try {\n cleanupSingleInstance(descendant as InstanceHost, errors, strict);\n } catch (err) {\n if (strict) errors!.push(err);\n else\n logger.warn(\n '[Askr] cleanupInstanceIfPresent descendant cleanup failed:',\n err\n );\n }\n });\n } catch (err) {\n if (strict) errors!.push(err);\n else\n logger.warn(\n '[Askr] cleanupInstanceIfPresent descendant query failed:',\n err\n );\n }\n\n if (errors && errors.length > 0) {\n throw new AggregateError(errors, 'cleanupInstanceIfPresent failed');\n }\n}\n\n// Public helper to clean up any component instances under a node. Used by\n// runtime commit logic to ensure component instances are torn down when their\n// host nodes are removed during an update.\nexport function cleanupInstancesUnder(\n node: Node | null,\n opts?: { strict?: boolean }\n): void {\n cleanupInstanceIfPresent(node, opts);\n}\n\nexport function teardownNodeSubtree(\n node: Node | null,\n opts?: { strict?: boolean }\n): void {\n if (!node) return;\n\n const strict = opts?.strict ?? false;\n const errors: unknown[] | null = strict ? [] : null;\n\n if (!(node instanceof Element)) {\n cleanupSingleInstance(node as InstanceHost, errors, strict);\n if (errors && errors.length > 0) {\n throw new AggregateError(errors, 'teardownNodeSubtree failed');\n }\n return;\n }\n\n try {\n teardownSingleElement(node, errors, strict);\n forEachDescendantNode(node, (descendant) => {\n if (descendant instanceof Element) {\n teardownSingleElement(descendant, errors, strict);\n } else {\n cleanupSingleInstance(descendant as InstanceHost, errors, strict);\n }\n });\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] teardownNodeSubtree failed:', err);\n }\n\n if (errors && errors.length > 0) {\n throw new AggregateError(errors, 'teardownNodeSubtree failed');\n }\n}\n\n// Track reactive props cleanup functions and their function references\nexport interface ReactivePropCleanupEntry {\n cleanup: () => void;\n fnRef: unknown;\n restoreFn?: (nextValue: unknown) => ReactivePropCleanupEntry;\n updateFn?: (nextValue: unknown) => void;\n}\n\nexport const REACTIVE_CHILDREN_KEY = '__askr_reactive_children__';\n\nexport const elementReactivePropsCleanup = new WeakMap<\n Element,\n Map<string, ReactivePropCleanupEntry>\n>();\n\nexport function removeElementReactiveProps(element: Element): void {\n const cleanupMap = elementReactivePropsCleanup.get(element);\n if (cleanupMap) {\n for (const entry of cleanupMap.values()) {\n try {\n entry.cleanup();\n } catch (err) {\n logger.warn('[Askr] reactive prop cleanup failed:', err);\n }\n }\n elementReactivePropsCleanup.delete(element);\n }\n}\n\nexport function removeElementListeners(element: Element): void {\n const map = elementListeners.get(element);\n if (map) {\n for (const entry of map.values()) {\n incDevCounter('listenerRemoves');\n if (entry.isDelegated) {\n removeDelegatedListener(element, entry.eventName);\n } else {\n if (entry.options !== undefined)\n element.removeEventListener(\n entry.eventName,\n entry.handler,\n entry.options\n );\n else element.removeEventListener(entry.eventName, entry.handler);\n }\n }\n elementListeners.delete(element);\n }\n\n clearDelegatedHandlersForElement(element);\n}\n\nexport function removeAllListeners(root: Element | null): void {\n if (!root) return;\n\n forEachElementInSubtree(root, (el) => {\n removeElementRef(el);\n removeElementListeners(el);\n removeElementReactiveProps(el);\n });\n}\n"],"mappings":";;;;;;AAsBA,MAAa,8BAAc,IAAI,QAA0B;AAEzD,SAAS,cAAiB,KAAc,OAAuB;CAC7D,MAAM,cAAc;CAEpB,IAAI,CAAC,aACH;CAGF,IAAI,OAAO,gBAAgB,YAAY;EACrC,YAAY,KAAK;EACjB;CACF;CAEA,IAAI,OAAO,aAAa,WAAW,GACjC,YAAuC,UAAU;AAErD;AAEA,SAAgB,iBACd,SACA,KACM;CACN,MAAM,cAAc,YAAY,IAAI,OAAO;CAE3C,IAAI,gBAAgB,KAClB;CAGF,IAAI,aACF,cAAc,aAAa,IAAI;CAGjC,IAAI,KAAK;EACP,cAAc,KAAK,OAAO;EAC1B,YAAY,IAAI,SAAS,GAAG;CAC9B,OACE,YAAY,OAAO,OAAO;AAE9B;AAEA,SAAgB,iBAAiB,SAAwB;CACvD,MAAM,MAAM,YAAY,IAAI,OAAO;CAEnC,IAAI,CAAC,KACH;CAGF,cAAc,KAAK,IAAI;CACvB,YAAY,OAAO,OAAO;AAC5B;AAMA,SAAS,sBACP,MACA,QACA,QACM;CACN,MAAM,4BAAY,IAAI,IAAuB;CAE7C,IAAI,MAAM,QAAQ,KAAK,gBAAgB,GACrC;OAAK,MAAM,YAAY,KAAK,kBAC1B,IAAI,UACF,UAAU,IAAI,QAA6B;CAE/C;CAGF,IAAI,KAAK,iBACP,UAAU,IAAI,KAAK,eAAoC;CAGzD,KAAK,MAAM,YAAY,WACrB,IAAI;EACF,iBAAiB,QAAQ;CAC3B,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,mCAAmC,GAAG;CACzD;CAGF,IAAI;EACF,OAAO,KAAK;EACZ,OAAO,KAAK;CACd,SAAS,GAAG;EACV,IAAI,QAAQ,OAAQ,KAAK,CAAC;CAC5B;AACF;AAEA,SAAS,sBACP,SACA,QACA,QACM;CACN,IAAI;EACF,iBAAiB,OAAO;CAC1B,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,mCAAmC,GAAG;CACzD;CAEA,IAAI;EACF,uBAAuB,OAAO;CAChC,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,yCAAyC,GAAG;CAC/D;CAEA,IAAI;EACF,2BAA2B,OAAO;CACpC,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,6CAA6C,GAAG;CACnE;CAEA,IAAI;EACF,sBAAsB,SAAyB,QAAQ,MAAM;CAC/D,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,wCAAwC,GAAG;CAC9D;AACF;AAIA,SAAS,yBAAyB,MAAe,OAA8B;CAE7E,IAAI;EACF,MAAM,MAAM,KAAK;EACjB,MAAM,mBAAmB,KAAK;EAC9B,IAAI,OAAO,qBAAqB,YAAY;GAE1C,MAAM,SAAS,iBAAiB,KAAK,KAAK,MAAM,CAAC;GACjD,IAAI,IAAI,OAAO,WAAW;GAC1B,OAAO,GAAG;IACR,MAAM,CAAY;IAClB,IAAI,OAAO,SAAS;GACtB;GACA;EACF;CACF,QAAQ,CAER;CAGA,MAAM,cAAc,KAAK,iBAAiB,GAAG;CAC7C,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KACtC,MAAM,YAAY,EAAE;AAExB;AAEA,SAAS,sBAAsB,MAAY,OAA6B;CACtE,IAAI;EACF,MAAM,MAAM,KAAK;EACjB,MAAM,mBAAmB,KAAK;EAC9B,IAAI,OAAO,qBAAqB,YAAY;GAE1C,MAAM,SAAS,iBAAiB,KAAK,KAAK,MAAM,UAAU;GAC1D,IAAI,OAAO,OAAO,SAAS;GAC3B,OAAO,MAAM;IACX,MAAM,IAAI;IACV,OAAO,OAAO,SAAS;GACzB;GACA;EACF;CACF,QAAQ,CAER;CAEA,MAAM,QAAQ,MAAM,KAAK,KAAK,UAAU,CAAC,CAAC,QAAQ;CAClD,OAAO,MAAM,SAAS,GAAG;EACvB,MAAM,OAAO,MAAM,IAAI;EACvB,MAAM,IAAI;EACV,KAAK,IAAI,QAAQ,KAAK,WAAW,OAAO,QAAQ,MAAM,iBACpD,MAAM,KAAK,KAAK;CAEpB;AACF;AAEA,SAAS,wBAAwB,MAAe,OAA8B;CAC5E,MAAM,IAAI;CACV,yBAAyB,MAAM,KAAK;AACtC;AAWA,MAAa,mCAAmB,IAAI,QAGlC;;;;;AAUF,SAAgB,yBACd,MACA,MACM;CACN,IAAI,CAAC,MAAM;CAEX,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,SAA2B,SAAS,CAAC,IAAI;CAG/C,IAAI;EACF,sBAAsB,MAAsB,QAAQ,MAAM;CAC5D,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,2CAA2C,GAAG;CACjE;CAGA,IAAI;EACF,sBAAsB,OAAO,eAAe;GAC1C,IAAI;IACF,sBAAsB,YAA4B,QAAQ,MAAM;GAClE,SAAS,KAAK;IACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;SAE1B,OAAO,KACL,8DACA,GACF;GACJ;EACF,CAAC;CACH,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OAE1B,OAAO,KACL,4DACA,GACF;CACJ;CAEA,IAAI,UAAU,OAAO,SAAS,GAC5B,MAAM,IAAI,eAAe,QAAQ,iCAAiC;AAEtE;AAKA,SAAgB,sBACd,MACA,MACM;CACN,yBAAyB,MAAM,IAAI;AACrC;AAEA,SAAgB,oBACd,MACA,MACM;CACN,IAAI,CAAC,MAAM;CAEX,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,SAA2B,SAAS,CAAC,IAAI;CAE/C,IAAI,EAAE,gBAAgB,UAAU;EAC9B,sBAAsB,MAAsB,QAAQ,MAAM;EAC1D,IAAI,UAAU,OAAO,SAAS,GAC5B,MAAM,IAAI,eAAe,QAAQ,4BAA4B;EAE/D;CACF;CAEA,IAAI;EACF,sBAAsB,MAAM,QAAQ,MAAM;EAC1C,sBAAsB,OAAO,eAAe;GAC1C,IAAI,sBAAsB,SACxB,sBAAsB,YAAY,QAAQ,MAAM;QAEhD,sBAAsB,YAA4B,QAAQ,MAAM;EAEpE,CAAC;CACH,SAAS,KAAK;EACZ,IAAI,QAAQ,OAAQ,KAAK,GAAG;OACvB,OAAO,KAAK,sCAAsC,GAAG;CAC5D;CAEA,IAAI,UAAU,OAAO,SAAS,GAC5B,MAAM,IAAI,eAAe,QAAQ,4BAA4B;AAEjE;AAUA,MAAa,wBAAwB;AAErC,MAAa,8CAA8B,IAAI,QAG7C;AAEF,SAAgB,2BAA2B,SAAwB;CACjE,MAAM,aAAa,4BAA4B,IAAI,OAAO;CAC1D,IAAI,YAAY;EACd,KAAK,MAAM,SAAS,WAAW,OAAO,GACpC,IAAI;GACF,MAAM,QAAQ;EAChB,SAAS,KAAK;GACZ,OAAO,KAAK,wCAAwC,GAAG;EACzD;EAEF,4BAA4B,OAAO,OAAO;CAC5C;AACF;AAEA,SAAgB,uBAAuB,SAAwB;CAC7D,MAAM,MAAM,iBAAiB,IAAI,OAAO;CACxC,IAAI,KAAK;EACP,KAAK,MAAM,SAAS,IAAI,OAAO,GAAG;GAChC,cAAc,iBAAiB;GAC/B,IAAI,MAAM,aACR,wBAAwB,SAAS,MAAM,SAAS;QAEhD,IAAI,MAAM,YAAY,QACpB,QAAQ,oBACN,MAAM,WACN,MAAM,SACN,MAAM,OACR;QACG,QAAQ,oBAAoB,MAAM,WAAW,MAAM,OAAO;EAEnE;EACA,iBAAiB,OAAO,OAAO;CACjC;CAEA,iCAAiC,OAAO;AAC1C;AAEA,SAAgB,mBAAmB,MAA4B;CAC7D,IAAI,CAAC,MAAM;CAEX,wBAAwB,OAAO,OAAO;EACpC,iBAAiB,EAAE;EACnB,uBAAuB,EAAE;EACzB,2BAA2B,EAAE;CAC/B,CAAC;AACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-host-cleanup.js","names":[],"sources":["../../src/renderer/component-host-cleanup.ts"],"sourcesContent":["import { cleanupComponent } from '../runtime/component-contracts';\nimport type { ComponentInstance } from '../runtime/component-contracts';\nimport { removeElementListeners, removeElementReactiveProps } from './cleanup';\nimport type { InstanceHostElement } from './dom-host';\n\nexport function cleanupDetachedComponentHost(\n host: InstanceHostElement,\n retainedInstance: ComponentInstance\n): void {\n removeElementListeners(host);\n removeElementReactiveProps(host);\n\n const hostInstances = host.__ASKR_INSTANCES;\n if (hostInstances && hostInstances.length > 0) {\n for (const instance of hostInstances) {\n if (instance === retainedInstance) continue;\n cleanupComponent(instance);\n }\n } else if (\n host.__ASKR_INSTANCE &&\n host.__ASKR_INSTANCE !== retainedInstance\n ) {\n cleanupComponent(host.__ASKR_INSTANCE);\n }\n\n const descendants = host.querySelectorAll('*');\n for (let index = 0; index < descendants.length; index += 1) {\n const descendant = descendants[index] as InstanceHostElement;\n removeElementListeners(descendant);\n removeElementReactiveProps(descendant);\n\n if (descendant.__ASKR_INSTANCES?.length) {\n for (const instance of descendant.__ASKR_INSTANCES) {\n if (instance === retainedInstance) continue;\n cleanupComponent(instance);\n }\n try {\n delete descendant.__ASKR_INSTANCES;\n } catch {\n // Ignore host cleanup failures.\n }\n } else if (\n descendant.__ASKR_INSTANCE &&\n descendant.__ASKR_INSTANCE !== retainedInstance\n ) {\n cleanupComponent(descendant.__ASKR_INSTANCE);\n try {\n delete descendant.__ASKR_INSTANCE;\n } catch {\n // Ignore host cleanup failures.\n }\n }\n }\n\n try {\n delete host.__ASKR_INSTANCE;\n delete host.__ASKR_INSTANCES;\n delete host.__ASKR_WRAPPER_HOST;\n } catch {\n // Ignore host cleanup failures.\n }\n}\n\nexport function pruneComponentHostInstances(\n host: InstanceHostElement,\n retainedInstances: Iterable<ComponentInstance>\n): void {\n const retained = new Set(retainedInstances);\n const nextInstances: ComponentInstance[] = [];\n const staleInstances = new Set<ComponentInstance>();\n\n const retainOrMarkStale = (instance: ComponentInstance | undefined) => {\n if (!instance) {\n return;\n }\n\n if (retained.has(instance)) {\n if (!nextInstances.includes(instance)) {\n nextInstances.push(instance);\n }\n return;\n }\n\n staleInstances.add(instance);\n };\n\n for (const instance of host.__ASKR_INSTANCES ?? []) {\n retainOrMarkStale(instance);\n }\n retainOrMarkStale(host.__ASKR_INSTANCE);\n\n for (const instance of staleInstances) {\n cleanupComponent(instance);\n }\n\n try {\n if (nextInstances.length > 0) {\n host.__ASKR_INSTANCES = nextInstances;\n host.__ASKR_INSTANCE = nextInstances[0];\n } else {\n delete host.__ASKR_INSTANCES;\n delete host.__ASKR_INSTANCE;\n }\n } catch {\n // Ignore host metadata cleanup failures.\n }\n}\n"],"mappings":";;;;AAKA,SAAgB,6BACd,MACA,kBACM;CACN,uBAAuB,IAAI;CAC3B,2BAA2B,IAAI;CAE/B,MAAM,gBAAgB,KAAK;CAC3B,IAAI,iBAAiB,cAAc,SAAS,GAC1C,KAAK,MAAM,YAAY,eAAe;EACpC,IAAI,aAAa,kBAAkB;EACnC,iBAAiB,QAAQ;CAC3B;MACK,IACL,KAAK,mBACL,KAAK,oBAAoB,kBAEzB,iBAAiB,KAAK,eAAe;CAGvC,MAAM,cAAc,KAAK,iBAAiB,GAAG;CAC7C,KAAK,IAAI,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS,GAAG;EAC1D,MAAM,aAAa,YAAY;EAC/B,uBAAuB,UAAU;EACjC,2BAA2B,UAAU;EAErC,IAAI,WAAW,kBAAkB,QAAQ;GACvC,KAAK,MAAM,YAAY,WAAW,kBAAkB;IAClD,IAAI,aAAa,kBAAkB;IACnC,iBAAiB,QAAQ;GAC3B;GACA,IAAI;IACF,OAAO,WAAW;GACpB,QAAQ,CAER;EACF,OAAO,IACL,WAAW,mBACX,WAAW,oBAAoB,kBAC/B;GACA,iBAAiB,WAAW,eAAe;GAC3C,IAAI;IACF,OAAO,WAAW;GACpB,QAAQ,CAER;EACF;CACF;CAEA,IAAI;EACF,OAAO,KAAK;EACZ,OAAO,KAAK;EACZ,OAAO,KAAK;CACd,QAAQ,CAER;AACF;AAEA,SAAgB,4BACd,MACA,mBACM;CACN,MAAM,WAAW,IAAI,IAAI,iBAAiB;CAC1C,MAAM,gBAAqC,CAAC;CAC5C,MAAM,iCAAiB,IAAI,IAAuB;CAElD,MAAM,qBAAqB,aAA4C;EACrE,IAAI,CAAC,UACH;EAGF,IAAI,SAAS,IAAI,QAAQ,GAAG;GAC1B,IAAI,CAAC,cAAc,SAAS,QAAQ,GAClC,cAAc,KAAK,QAAQ;GAE7B;EACF;EAEA,eAAe,IAAI,QAAQ;CAC7B;CAEA,KAAK,MAAM,YAAY,KAAK,oBAAoB,CAAC,GAC/C,kBAAkB,QAAQ;CAE5B,kBAAkB,KAAK,eAAe;CAEtC,KAAK,MAAM,YAAY,gBACrB,iBAAiB,QAAQ;CAG3B,IAAI;EACF,IAAI,cAAc,SAAS,GAAG;GAC5B,KAAK,mBAAmB;GACxB,KAAK,kBAAkB,cAAc;EACvC,OAAO;GACL,OAAO,KAAK;GACZ,OAAO,KAAK;EACd;CACF,QAAQ,CAER;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-host-instances.js","names":[],"sources":["../../src/renderer/component-host-instances.ts"],"sourcesContent":["import { ROUTE_ROOT_COMPONENT } from '../common/router-internal';\nimport type { Props } from '../common/props';\nimport {\n getCurrentInstance,\n type ComponentInstance,\n} from '../runtime/component-contracts';\nimport { getDevValue, incDevCounter } from '../runtime/dev-namespace';\nimport type { InstanceHostElement } from './dom-host';\nimport type { DOMElement } from './types';\nimport { extractKey } from './utils';\n\nexport function isRouteRootComponentVNode(node: unknown): boolean {\n return (\n typeof node === 'object' &&\n node !== null &&\n (node as { [ROUTE_ROOT_COMPONENT]?: boolean })[ROUTE_ROOT_COMPONENT] ===\n true\n );\n}\n\nexport function inheritComponentCleanupStrict(\n instance: ComponentInstance\n): void {\n const owner = getCurrentInstance();\n if (owner) {\n instance.cleanupStrict = owner.cleanupStrict;\n }\n}\n\nconst vnodeComponentInstances = new WeakMap<object, ComponentInstance>();\n\nexport function getVNodeComponentInstance(\n node: unknown\n): ComponentInstance | undefined {\n if (typeof node !== 'object' || node === null) {\n return undefined;\n }\n\n return (\n vnodeComponentInstances.get(node) ??\n (node as { __instance?: ComponentInstance }).__instance\n );\n}\n\nexport function setVNodeComponentInstance(\n node: unknown,\n instance: ComponentInstance\n): void {\n if (typeof node !== 'object' || node === null) {\n return;\n }\n\n const objectNode = node as { __instance?: ComponentInstance };\n\n if (Object.prototype.hasOwnProperty.call(objectNode, '__instance')) {\n try {\n objectNode.__instance = instance;\n return;\n } catch {\n // Fall back to WeakMap for readonly vnode metadata.\n }\n }\n\n if (Object.isExtensible(objectNode)) {\n try {\n objectNode.__instance = instance;\n return;\n } catch {\n // Fall back to WeakMap for frozen/proxied objects.\n }\n }\n\n vnodeComponentInstances.set(objectNode, instance);\n}\n\nlet fallbackComponentInstanceId = 0;\n\nexport function nextComponentInstanceId(): string {\n const key = '__COMPONENT_INSTANCE_ID';\n try {\n incDevCounter(key);\n const n = getDevValue<number>(key);\n if (typeof n === 'number' && Number.isFinite(n)) return `comp-${n}`;\n } catch {\n // Fall through to local counter\n }\n fallbackComponentInstanceId++;\n return `comp-${fallbackComponentInstanceId}`;\n}\n\nexport function inheritComponentKey(\n target: DOMElement,\n source: DOMElement\n): DOMElement {\n const inheritedKey = extractKey(source);\n if (inheritedKey === undefined || extractKey(target) !== undefined) {\n return target;\n }\n\n target.key = inheritedKey;\n\n if (typeof target.type === 'string') {\n if (!target.props) {\n target.props = {};\n }\n\n const props = target.props as Record<string, unknown>;\n if (props['data-key'] === undefined) {\n props['data-key'] = String(inheritedKey);\n }\n }\n\n return target;\n}\n\nexport function findHostInstanceByType(\n host: InstanceHostElement,\n type: (props: Props) => unknown\n): ComponentInstance | null {\n const instances = host.__ASKR_INSTANCES;\n if (instances && instances.length > 0) {\n for (let index = instances.length - 1; index >= 0; index -= 1) {\n const instance = instances[index]!;\n if (instance.fn === type) {\n return instance;\n }\n }\n }\n\n return host.__ASKR_INSTANCE?.fn === type ? host.__ASKR_INSTANCE : null;\n}\n"],"mappings":";;;;;;AAWA,SAAgB,0BAA0B,MAAwB;CAChE,OACE,OAAO,SAAS,YAChB,SAAS,QACR,KAA8C,0BAC7C;AAEN;AAEA,SAAgB,8BACd,UACM;CACN,MAAM,QAAQ,mBAAmB;CACjC,IAAI,OACF,SAAS,gBAAgB,MAAM;AAEnC;AAEA,MAAM,0CAA0B,IAAI,QAAmC;AAEvE,SAAgB,0BACd,MAC+B;CAC/B,IAAI,OAAO,SAAS,YAAY,SAAS,MACvC;CAGF,OACE,wBAAwB,IAAI,IAAI,KAC/B,KAA4C;AAEjD;AAEA,SAAgB,0BACd,MACA,UACM;CACN,IAAI,OAAO,SAAS,YAAY,SAAS,MACvC;CAGF,MAAM,aAAa;CAEnB,IAAI,OAAO,UAAU,eAAe,KAAK,YAAY,YAAY,GAC/D,IAAI;EACF,WAAW,aAAa;EACxB;CACF,QAAQ,CAER;CAGF,IAAI,OAAO,aAAa,UAAU,GAChC,IAAI;EACF,WAAW,aAAa;EACxB;CACF,QAAQ,CAER;CAGF,wBAAwB,IAAI,YAAY,QAAQ;AAClD;AAEA,IAAI,8BAA8B;AAElC,SAAgB,0BAAkC;CAChD,MAAM,MAAM;CACZ,IAAI;EACF,cAAc,GAAG;EACjB,MAAM,IAAI,YAAoB,GAAG;EACjC,IAAI,OAAO,MAAM,YAAY,OAAO,SAAS,CAAC,GAAG,OAAO,QAAQ;CAClE,QAAQ,CAER;CACA;CACA,OAAO,QAAQ;AACjB;AAEA,SAAgB,oBACd,QACA,QACY;CACZ,MAAM,eAAe,WAAW,MAAM;CACtC,IAAI,iBAAiB,UAAa,WAAW,MAAM,MAAM,QACvD,OAAO;CAGT,OAAO,MAAM;CAEb,IAAI,OAAO,OAAO,SAAS,UAAU;EACnC,IAAI,CAAC,OAAO,OACV,OAAO,QAAQ,CAAC;EAGlB,MAAM,QAAQ,OAAO;EACrB,IAAI,MAAM,gBAAgB,QACxB,MAAM,cAAc,OAAO,YAAY;CAE3C;CAEA,OAAO;AACT;AAEA,SAAgB,uBACd,MACA,MAC0B;CAC1B,MAAM,YAAY,KAAK;CACvB,IAAI,aAAa,UAAU,SAAS,GAClC,KAAK,IAAI,QAAQ,UAAU,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;EAC7D,MAAM,WAAW,UAAU;EAC3B,IAAI,SAAS,OAAO,MAClB,OAAO;CAEX;CAGF,OAAO,KAAK,iBAAiB,OAAO,OAAO,KAAK,kBAAkB;AACpE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-host.js","names":[],"sources":["../../src/renderer/component-host.ts"],"sourcesContent":["import { isPromiseLike } from '../common/promise';\nimport type { Props } from '../common/props';\nimport {\n captureInlineRenderSnapshot,\n cleanupComponent,\n createComponentInstance,\n getCurrentInstance,\n mountInstanceInline,\n renderComponentInline,\n warnUnusedStateReads,\n type ComponentFunction,\n type ComponentInstance,\n} from '../runtime/component-contracts';\nimport {\n getCurrentContextFrame,\n getVNodeContextFrame,\n markVNodeTreeWithContextFrame,\n withContext,\n type ContextFrame,\n} from '../runtime/context';\nimport { materializeKey } from './attributes';\nimport { normalizeComponentChildren } from './child-shape';\nimport {\n cleanupDetachedComponentHost,\n pruneComponentHostInstances,\n} from './component-host-cleanup';\nimport {\n getRendererDOMHost,\n type ElementWithContext,\n type InstanceHostElement,\n} from './dom-host';\nimport {\n findHostInstanceByType,\n getVNodeComponentInstance,\n inheritComponentCleanupStrict,\n inheritComponentKey,\n isRouteRootComponentVNode,\n nextComponentInstanceId,\n setVNodeComponentInstance,\n} from './component-host-instances';\nimport { _isDOMElement, type DOMElement, type JSXComponent, type VNode } from './types';\nimport { tagNamesEqualIgnoreCase } from './utils';\nexport {\n findHostInstanceByType,\n inheritComponentCleanupStrict,\n inheritComponentKey,\n isRouteRootComponentVNode,\n nextComponentInstanceId,\n} from './component-host-instances';\nfunction materializeComponentResultNode(\n childInstance: ComponentInstance,\n result: unknown,\n parentNamespace?: string\n): Node {\n const dom = getRendererDOMHost().createDOMNode(result, parentNamespace);\n\n if (dom instanceof Element) {\n mountInstanceInline(childInstance, dom);\n return dom;\n }\n\n if (!dom) {\n const placeholder = document.createComment('');\n try {\n (\n placeholder as Comment & { __ASKR_INSTANCE?: ComponentInstance }\n ).__ASKR_INSTANCE = childInstance;\n } catch {\n // Ignore placeholder metadata failures.\n }\n childInstance._placeholder = placeholder;\n mountInstanceInline(childInstance, null);\n return placeholder;\n }\n\n const host = document.createElement('div') as InstanceHostElement;\n host.appendChild(dom);\n host.__ASKR_WRAPPER_HOST = true;\n mountInstanceInline(childInstance, host);\n return host;\n}\n\nexport function resolveNestedComponentResult(\n result: unknown,\n snapshot: ContextFrame | null,\n parentInstance: ComponentInstance | null\n): VNode {\n let currentResult = result as VNode;\n let activeSnapshot = snapshot;\n let depth = 0;\n\n while (\n _isDOMElement(currentResult) &&\n typeof currentResult.type === 'function' &&\n depth < 16\n ) {\n const nestedSnapshot =\n getVNodeContextFrame(currentResult) ?? activeSnapshot;\n const nestedInstance = createComponentInstance(\n nextComponentInstanceId(),\n currentResult.type as ComponentFunction,\n ((currentResult as DOMElement).props ?? {}) as Props,\n null\n );\n nestedInstance.isRoot = isRouteRootComponentVNode(currentResult);\n nestedInstance.parentInstance = parentInstance;\n nestedInstance.portalScope =\n parentInstance?.portalScope ?? nestedInstance.portalScope;\n inheritComponentCleanupStrict(nestedInstance);\n\n if (nestedSnapshot) {\n nestedInstance.ownerFrame = nestedSnapshot;\n }\n\n const nextResult = withContext(nestedSnapshot ?? null, () =>\n renderComponentInline(nestedInstance)\n );\n cleanupComponent(nestedInstance);\n\n if (isPromiseLike(nextResult)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n\n activeSnapshot = nestedSnapshot ?? null;\n currentResult = nextResult as VNode;\n depth += 1;\n }\n\n return currentResult;\n}\n\nfunction resolveHostNestedComponentResult(\n host: InstanceHostElement,\n retainedInstance: ComponentInstance,\n result: unknown,\n snapshot: ContextFrame | null,\n retainedHostInstances?: Iterable<ComponentInstance>\n): VNode {\n let currentResult = result as VNode;\n let activeSnapshot = snapshot;\n let depth = 0;\n const retainedInstances = new Set<ComponentInstance>([retainedInstance]);\n if (retainedHostInstances) {\n for (const instance of retainedHostInstances) {\n retainedInstances.add(instance);\n }\n }\n const createdInstances: ComponentInstance[] = [];\n\n while (\n _isDOMElement(currentResult) &&\n typeof currentResult.type === 'function' &&\n depth < 16\n ) {\n const nestedSnapshot =\n getVNodeContextFrame(currentResult) ?? activeSnapshot;\n let nestedInstance = findHostInstanceByType(\n host,\n currentResult.type as ComponentFunction\n );\n const hadNestedInstance = !!nestedInstance;\n\n if (!nestedInstance) {\n nestedInstance = createComponentInstance(\n nextComponentInstanceId(),\n currentResult.type as ComponentFunction,\n ((currentResult as DOMElement).props ?? {}) as Props,\n null\n );\n createdInstances.push(nestedInstance);\n }\n\n if (hadNestedInstance) {\n captureInlineRenderSnapshot(nestedInstance);\n }\n\n setVNodeComponentInstance(currentResult, nestedInstance);\n nestedInstance.isRoot = isRouteRootComponentVNode(currentResult);\n nestedInstance.parentInstance = retainedInstance;\n nestedInstance.portalScope =\n retainedInstance.portalScope ?? nestedInstance.portalScope;\n inheritComponentCleanupStrict(nestedInstance);\n nestedInstance.props =\n (((currentResult as DOMElement).props ?? {}) as Props) || {};\n\n if (nestedSnapshot) {\n nestedInstance.ownerFrame = nestedSnapshot;\n }\n\n const nextResult = withContext(nestedSnapshot ?? null, () =>\n renderComponentInline(nestedInstance)\n );\n\n if (isPromiseLike(nextResult)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n\n retainedInstances.add(nestedInstance);\n warnUnusedStateReads(nestedInstance);\n activeSnapshot = nestedSnapshot ?? null;\n currentResult = markVNodeTreeWithContextFrame(\n nextResult,\n activeSnapshot\n ) as VNode;\n depth += 1;\n }\n\n const previousInstances = host.__ASKR_INSTANCES ?? [];\n for (const instance of previousInstances) {\n if (!retainedInstances.has(instance)) {\n cleanupComponent(instance);\n }\n }\n\n const nextHostInstances = previousInstances.filter((instance) =>\n retainedInstances.has(instance)\n );\n for (const instance of retainedInstances) {\n if (instance.target === host && !nextHostInstances.includes(instance)) {\n nextHostInstances.push(instance);\n }\n }\n\n host.__ASKR_INSTANCES = nextHostInstances;\n host.__ASKR_INSTANCE = host.__ASKR_INSTANCES[0] ?? retainedInstance;\n\n for (const instance of createdInstances) {\n mountInstanceInline(instance, host);\n }\n\n return currentResult;\n}\n\nfunction resolveWrapperHostResult(\n host: InstanceHostElement,\n result: unknown,\n snapshot: ContextFrame | null\n): unknown {\n let currentResult = result;\n let activeSnapshot = snapshot;\n let depth = 0;\n\n while (\n _isDOMElement(currentResult) &&\n typeof currentResult.type === 'function' &&\n depth < 16\n ) {\n const nestedSnapshot =\n getVNodeContextFrame(currentResult) ?? activeSnapshot;\n const nestedInstance = findHostInstanceByType(\n host,\n currentResult.type as ComponentFunction\n );\n\n if (!nestedInstance) {\n break;\n }\n\n captureInlineRenderSnapshot(nestedInstance);\n\n nestedInstance.props =\n (((currentResult as DOMElement).props ?? {}) as Props) || {};\n nestedInstance.parentInstance = getCurrentInstance();\n nestedInstance.isRoot = isRouteRootComponentVNode(currentResult);\n nestedInstance.portalScope =\n getCurrentInstance()?.portalScope ?? nestedInstance.portalScope;\n inheritComponentCleanupStrict(nestedInstance);\n\n if (nestedSnapshot) {\n nestedInstance.ownerFrame = nestedSnapshot;\n }\n\n const nextResult = withContext(nestedSnapshot ?? null, () =>\n renderComponentInline(nestedInstance)\n );\n\n if (isPromiseLike(nextResult)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n\n warnUnusedStateReads(nestedInstance);\n activeSnapshot = nestedSnapshot ?? null;\n currentResult = nextResult;\n depth += 1;\n }\n\n return markVNodeTreeWithContextFrame(currentResult, activeSnapshot);\n}\n\nexport function syncComponentElement(\n currentDom: Node | null,\n node: ElementWithContext,\n type: ComponentFunction,\n props: Record<string, unknown>,\n parentNamespace?: string,\n forceChildrenUpdate = false,\n retainedHostInstances?: Iterable<ComponentInstance>\n): Node | null {\n const existingHost =\n currentDom instanceof Element ? (currentDom as InstanceHostElement) : null;\n const existingInstance = existingHost\n ? findHostInstanceByType(existingHost, type)\n : null;\n if (!existingHost) {\n return null;\n }\n\n const domHost = getRendererDOMHost();\n\n if (!existingInstance || existingInstance.fn !== type) {\n const snapshot =\n getVNodeContextFrame(node) || getCurrentContextFrame() || null;\n const hydrationInstance = createComponentInstance(\n nextComponentInstanceId(),\n type,\n props || {},\n existingHost\n );\n hydrationInstance.isRoot = isRouteRootComponentVNode(node);\n hydrationInstance.portalScope =\n getCurrentInstance()?.portalScope ?? hydrationInstance.portalScope;\n inheritComponentCleanupStrict(hydrationInstance);\n\n setVNodeComponentInstance(node, hydrationInstance);\n\n if (snapshot) {\n hydrationInstance.ownerFrame = snapshot;\n }\n\n const result = withContext(snapshot, () =>\n renderComponentInline(hydrationInstance)\n );\n if (isPromiseLike(result)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n\n const scopedResult = markVNodeTreeWithContextFrame(\n result,\n snapshot ?? null\n );\n\n if (\n scopedResult &&\n typeof scopedResult === 'object' &&\n 'type' in (scopedResult as DOMElement) &&\n typeof (scopedResult as DOMElement).type === 'string' &&\n tagNamesEqualIgnoreCase(\n existingHost.tagName,\n (scopedResult as DOMElement).type as string\n )\n ) {\n pruneComponentHostInstances(\n existingHost,\n retainedHostInstances\n ? [hydrationInstance, ...retainedHostInstances]\n : [hydrationInstance]\n );\n withContext(snapshot, () => {\n domHost.updateElementFromVnode(\n existingHost,\n inheritComponentKey(scopedResult as DOMElement, node),\n true,\n forceChildrenUpdate || hydrationInstance.mounted === false\n );\n materializeKey(existingHost, node, props);\n });\n mountInstanceInline(hydrationInstance, existingHost);\n itemInstanceHydrationComplete(existingHost);\n warnUnusedStateReads(hydrationInstance);\n return existingHost;\n }\n\n const resolvedResult = resolveHostNestedComponentResult(\n existingHost,\n hydrationInstance,\n scopedResult,\n snapshot ?? null,\n retainedHostInstances\n );\n if (\n _isDOMElement(resolvedResult) &&\n typeof resolvedResult.type === 'string' &&\n tagNamesEqualIgnoreCase(existingHost.tagName, resolvedResult.type)\n ) {\n withContext(snapshot, () => {\n domHost.updateElementFromVnode(\n existingHost,\n inheritComponentKey(resolvedResult, node),\n true,\n forceChildrenUpdate || hydrationInstance.mounted === false\n );\n materializeKey(existingHost, node, props);\n });\n mountInstanceInline(hydrationInstance, existingHost);\n itemInstanceHydrationComplete(existingHost);\n warnUnusedStateReads(hydrationInstance);\n return existingHost;\n }\n\n const nextDom = materializeComponentResultNode(\n hydrationInstance,\n scopedResult,\n parentNamespace\n );\n\n if (nextDom instanceof Element) {\n materializeKey(nextDom, node, props);\n }\n\n if (nextDom !== existingHost && existingHost.parentNode) {\n existingHost.parentNode.replaceChild(nextDom, existingHost);\n cleanupDetachedComponentHost(existingHost, hydrationInstance);\n }\n\n warnUnusedStateReads(hydrationInstance);\n return nextDom;\n }\n\n const snapshot =\n getVNodeContextFrame(node) ||\n getCurrentContextFrame() ||\n existingInstance.ownerFrame ||\n null;\n captureInlineRenderSnapshot(existingInstance);\n existingInstance.props = props || {};\n existingInstance.isRoot = isRouteRootComponentVNode(node);\n existingInstance.portalScope =\n getCurrentInstance()?.portalScope ?? existingInstance.portalScope;\n inheritComponentCleanupStrict(existingInstance);\n\n if (snapshot) {\n existingInstance.ownerFrame = snapshot;\n }\n\n const result = withContext(snapshot, () =>\n renderComponentInline(existingInstance)\n );\n if (isPromiseLike(result)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n const scopedResult = markVNodeTreeWithContextFrame(result, snapshot ?? null);\n\n if (existingHost.__ASKR_WRAPPER_HOST) {\n const wrapperResult = resolveWrapperHostResult(\n existingHost,\n scopedResult,\n snapshot ?? null\n );\n domHost.updateElementChildren(\n existingHost,\n normalizeComponentChildren(wrapperResult) as VNode[]\n );\n warnUnusedStateReads(existingInstance);\n return existingHost;\n }\n\n if (\n scopedResult &&\n typeof scopedResult === 'object' &&\n 'type' in (scopedResult as DOMElement) &&\n typeof (scopedResult as DOMElement).type === 'string' &&\n tagNamesEqualIgnoreCase(\n existingHost.tagName,\n (scopedResult as DOMElement).type as string\n )\n ) {\n pruneComponentHostInstances(\n existingHost,\n retainedHostInstances\n ? [existingInstance, ...retainedHostInstances]\n : [existingInstance]\n );\n withContext(snapshot, () => {\n domHost.updateElementFromVnode(\n existingHost,\n inheritComponentKey(scopedResult as DOMElement, node),\n true,\n forceChildrenUpdate || existingInstance.mounted === false\n );\n materializeKey(existingHost, node, props);\n });\n warnUnusedStateReads(existingInstance);\n return existingHost;\n }\n\n const resolvedResult = resolveHostNestedComponentResult(\n existingHost,\n existingInstance,\n scopedResult,\n snapshot ?? null,\n retainedHostInstances\n );\n if (\n _isDOMElement(resolvedResult) &&\n typeof resolvedResult.type === 'string' &&\n tagNamesEqualIgnoreCase(existingHost.tagName, resolvedResult.type)\n ) {\n withContext(snapshot, () => {\n domHost.updateElementFromVnode(\n existingHost,\n inheritComponentKey(resolvedResult, node),\n true,\n forceChildrenUpdate || existingInstance.mounted === false\n );\n materializeKey(existingHost, node, props);\n });\n warnUnusedStateReads(existingInstance);\n return existingHost;\n }\n\n const nextDom = materializeComponentResultNode(\n existingInstance,\n scopedResult,\n parentNamespace\n );\n\n if (nextDom instanceof Element) {\n materializeKey(nextDom, node, props);\n }\n\n if (nextDom !== existingHost && existingHost.parentNode) {\n existingHost.parentNode.replaceChild(nextDom, existingHost);\n cleanupDetachedComponentHost(existingHost, existingInstance);\n }\n\n warnUnusedStateReads(existingInstance);\n return nextDom;\n}\n\nfunction itemInstanceHydrationComplete(host: InstanceHostElement): void {\n const instance = host.__ASKR_INSTANCE;\n if (instance) {\n const scope = (\n instance as unknown as { scope?: { hydrationPending?: boolean } }\n ).scope;\n if (scope) {\n scope.hydrationPending = false;\n }\n }\n}\n\nexport function createComponentElement(\n node: ElementWithContext,\n type: JSXComponent,\n props: Record<string, unknown>,\n parentNamespace?: string\n): Node {\n const frame = getVNodeContextFrame(node);\n const snapshot = frame || getCurrentContextFrame();\n\n const componentFn = type as unknown as (props: Props) => unknown;\n const isAsync = componentFn.constructor.name === 'AsyncFunction';\n\n if (isAsync) {\n throw new Error(\n 'Async components are not supported. Use resource() for async work.'\n );\n }\n\n let childInstance = getVNodeComponentInstance(node);\n const hadChildInstance = !!childInstance;\n if (!childInstance) {\n childInstance = createComponentInstance(\n nextComponentInstanceId(),\n componentFn as ComponentFunction,\n props || {},\n null\n );\n setVNodeComponentInstance(node, childInstance);\n }\n\n if (hadChildInstance) {\n captureInlineRenderSnapshot(childInstance);\n }\n\n childInstance.portalScope =\n getCurrentInstance()?.portalScope ?? childInstance.portalScope;\n childInstance.parentInstance = getCurrentInstance();\n childInstance.props = props || {};\n childInstance.isRoot = isRouteRootComponentVNode(node);\n inheritComponentCleanupStrict(childInstance);\n\n if (snapshot) {\n childInstance.ownerFrame = snapshot;\n }\n\n const result = withContext(snapshot, () =>\n renderComponentInline(childInstance)\n );\n\n if (isPromiseLike(result)) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n\n const scopedResult = markVNodeTreeWithContextFrame(result, snapshot ?? null);\n\n const dom = withContext(snapshot, () =>\n materializeComponentResultNode(childInstance, scopedResult, parentNamespace)\n );\n\n warnUnusedStateReads(childInstance);\n\n if (dom instanceof Element) {\n materializeKey(dom, node, props);\n }\n return dom;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-host.js","names":[],"sources":["../../src/renderer/dom-host.ts"],"sourcesContent":["import type {\n ComponentFunction,\n ComponentInstance,\n} from '../runtime/component-contracts';\nimport type { ContextFrame } from '../runtime/context';\nimport type { DOMElement, VNode } from './types';\n\nexport type ElementWithContext = DOMElement & {\n [key: symbol]: ContextFrame | boolean | undefined;\n __instance?: ComponentInstance;\n};\n\nexport type InstanceHostElement = Element & {\n __ASKR_INSTANCE?: ComponentInstance;\n __ASKR_INSTANCES?: ComponentInstance[];\n __ASKR_WRAPPER_HOST?: boolean;\n};\n\nexport interface RendererDOMHost {\n createDOMNode(node: 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 updateElementChildren(\n el: Element,\n children: VNode | VNode[] | undefined,\n forceUpdate?: boolean\n ): void;\n tryPatchStableForDirtyItem(scope: { dom?: Node; vnode?: VNode }): boolean;\n}\n\nlet rendererDOMHost: RendererDOMHost | null = null;\n\nexport function configureRendererDOMHost(host: RendererDOMHost): void {\n rendererDOMHost = host;\n}\n\nexport function getRendererDOMHost(): RendererDOMHost {\n if (!rendererDOMHost) {\n throw new Error('[askr] Renderer DOM host is not configured.');\n }\n return rendererDOMHost;\n}\n"],"mappings":";AA2CA,IAAI,kBAA0C;AAE9C,SAAgB,yBAAyB,MAA6B;CACpE,kBAAkB;AACpB;AAEA,SAAgB,qBAAsC;CACpD,IAAI,CAAC,iBACH,MAAM,IAAI,MAAM,6CAA6C;CAE/D,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-internal.js","names":[],"sources":["../../src/renderer/dom-internal.ts"],"sourcesContent":["import { logger } from '../dev/logger';\nimport { Fragment } from '../jsx/jsx-runtime';\nimport { isBenchMetricScopeActive, recordBenchCounter } from '../runtime/for';\nimport { __ERROR_BOUNDARY__, __FOR_BOUNDARY__ } from '../common/vnode';\nimport {\n applyStaticScalarPropsToElement,\n hasMatchingStaticProps,\n materializeKey,\n} from './attributes';\nimport {\n configureBoundaryDOMHost,\n createForBoundary,\n getControlBoundaryState,\n getDirectControlBoundaryVNode,\n registerControlBoundaryCommitOwner,\n} from './boundaries';\nimport {\n isBulkTextFastPathEligible,\n performBulkPositionalKeyedTextUpdate,\n performBulkTextReplace,\n} from './children';\nimport {\n maybeWarnMissingKeys,\n tryGetStaticCreateFastPathShape,\n} from './child-shape';\nimport {\n removeAllListeners,\n removeElementReactiveProps,\n teardownNodeSubtree,\n updateElementRef,\n} from './cleanup';\nimport { createComponentElement, syncComponentElement } from './component-host';\nimport { configureRendererDOMHost, type ElementWithContext } from './dom-host';\nimport {\n rendererReactiveChildDOMHost,\n updateElementChildren,\n updateUnkeyedChildren,\n} from './element-children';\nimport {\n createErrorBoundaryElement,\n type ErrorBoundaryVNode,\n} from './error-boundary-dom';\nimport { getRuntimeEnv } from './env';\nimport { createElementForNamespace, resolveChildNamespace } from './namespaces';\nimport {\n applyPropsToElement,\n hasTrackedElementPropBindings,\n syncElementPropBindings,\n} from './prop-bindings';\nimport { syncReactiveScalarChild } from './reactive-children';\nimport { runRetainedElementUpdate } from './retained-element-rollback';\nimport { canReuseStaticSubtree } from './static-reuse';\nimport { tryPatchStableForDirtyItem } from './stable-patch';\nimport { _isDOMElement, type DOMElement, type JSXComponent, type VNode } from './types';\n\nexport { createForBoundary, commitForBoundaryChildren } from './boundaries';\nexport { markReactivePropsDirtySource } from './prop-bindings';\nexport { setStaticChildSlotsCacheEnabled } from './static-reuse';\nexport {\n isBulkTextFastPathEligible,\n performBulkPositionalKeyedTextUpdate,\n performBulkTextReplace,\n};\nexport {\n syncComponentElement,\n updateElementChildren,\n updateUnkeyedChildren,\n tryPatchStableForDirtyItem,\n};\n\nexport const IS_DOM_AVAILABLE = typeof document !== 'undefined';\n\nfunction getHydrationSkipBoundary(el: Element): Element | null {\n return el.closest('[data-skip-hydrate=\"true\"]');\n}\n\nfunction isHydrationSkipped(el: Element): boolean {\n return getHydrationSkipBoundary(el) !== null;\n}\n\nfunction clearHydrationDeferredSubtree(el: Element): void {\n const boundary = getHydrationSkipBoundary(el);\n if (!boundary) return;\n if (boundary === el) {\n removeAllListeners(el);\n removeElementReactiveProps(el);\n }\n}\n\nexport function createDOMNode(\n node: unknown,\n parentNamespace?: string\n): Node | null {\n if (!IS_DOM_AVAILABLE) {\n if (getRuntimeEnv().NODE_ENV !== 'production') {\n try {\n logger.warn('[Askr] createDOMNode called in non-DOM environment');\n } catch {\n // ignore\n }\n }\n return null;\n }\n\n if (typeof node === 'string') {\n if (isBenchMetricScopeActive('coldCreate')) {\n recordBenchCounter('domNodesCreated');\n }\n return document.createTextNode(node);\n }\n if (typeof node === 'number') {\n if (isBenchMetricScopeActive('coldCreate')) {\n recordBenchCounter('domNodesCreated');\n }\n return document.createTextNode(String(node));\n }\n\n if (!node) {\n return null;\n }\n\n if (Array.isArray(node)) {\n maybeWarnMissingKeys(node);\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n const dom = createDOMNode(child, parentNamespace);\n if (dom) fragment.appendChild(dom);\n }\n return fragment;\n }\n\n if (typeof node === 'object' && node !== null && 'type' in node) {\n const type = (node as DOMElement).type;\n const props = ((node as DOMElement).props || {}) as Record<string, unknown>;\n\n if (typeof type === 'string') {\n return createIntrinsicElement(\n node as DOMElement,\n type,\n props,\n parentNamespace\n );\n }\n\n if (typeof type === 'function') {\n return createComponentElement(\n node as ElementWithContext,\n type as JSXComponent,\n props,\n parentNamespace\n );\n }\n\n if (type === __FOR_BOUNDARY__) {\n return createForBoundary(node as DOMElement, props, parentNamespace);\n }\n\n if (type === __ERROR_BOUNDARY__) {\n return createErrorBoundaryElement(\n node as ErrorBoundaryVNode,\n props,\n parentNamespace\n );\n }\n\n if (\n typeof type === 'symbol' &&\n (type === Fragment || String(type) === 'Symbol(Fragment)')\n ) {\n return createFragmentElement(node as DOMElement, props, parentNamespace);\n }\n }\n\n return null;\n}\n\nfunction createIntrinsicElement(\n node: DOMElement,\n type: string,\n props: Record<string, unknown>,\n parentNamespace?: string\n): Element {\n const children = props.children ?? node.children;\n const elementNamespace = resolveChildNamespace(type, parentNamespace);\n const el = createElementForNamespace(type, parentNamespace);\n\n if (isBenchMetricScopeActive('coldCreate')) {\n recordBenchCounter('domNodesCreated');\n }\n\n materializeKey(el, node, props);\n\n const staticCreateFastPath = tryGetStaticCreateFastPathShape(props, children);\n\n if (staticCreateFastPath) {\n applyStaticScalarPropsToElement(el, props, type);\n if (staticCreateFastPath.textContent !== null) {\n el.textContent = staticCreateFastPath.textContent;\n if (isBenchMetricScopeActive('coldCreate')) {\n recordBenchCounter('domNodesCreated');\n }\n }\n return el;\n }\n\n applyPropsToElement(el, props, type, isHydrationSkipped);\n\n if (children !== null && children !== undefined) {\n const controlBoundaryVNode = getDirectControlBoundaryVNode(children);\n if (controlBoundaryVNode) {\n const controlState = getControlBoundaryState(controlBoundaryVNode);\n if (!controlState) {\n throw new Error(\n '[createIntrinsicElement] Control boundary missing internal state'\n );\n }\n registerControlBoundaryCommitOwner(el, controlState);\n }\n\n if (syncReactiveScalarChild(el, children, rendererReactiveChildDOMHost)) {\n return el;\n }\n\n if (Array.isArray(children)) {\n maybeWarnMissingKeys(children);\n if (children.length > 1) {\n const childFrag = document.createDocumentFragment();\n for (const child of children) {\n const dom = createDOMNode(child, elementNamespace);\n if (dom) childFrag.appendChild(dom);\n }\n el.appendChild(childFrag);\n } else if (children.length === 1) {\n const dom = createDOMNode(children[0], elementNamespace);\n if (dom) el.appendChild(dom);\n }\n } else {\n const dom = createDOMNode(children, elementNamespace);\n if (dom) el.appendChild(dom);\n }\n }\n return el;\n}\n\nfunction createFragmentElement(\n node: DOMElement,\n props: Record<string, unknown>,\n parentNamespace?: string\n): DocumentFragment {\n const fragment = document.createDocumentFragment();\n const children = props.children ?? node.children;\n if (children) {\n if (Array.isArray(children)) {\n maybeWarnMissingKeys(children);\n for (const child of children) {\n const dom = createDOMNode(child, parentNamespace);\n if (dom) fragment.appendChild(dom);\n }\n } else {\n const dom = createDOMNode(children, parentNamespace);\n if (dom) fragment.appendChild(dom);\n }\n }\n return fragment;\n}\n\nexport function updateElementFromVnode(\n el: Element,\n vnode: VNode,\n updateChildren = true,\n forceChildrenUpdate = false\n): void {\n runRetainedElementUpdate(el, teardownNodeSubtree, () => {\n applyElementUpdateFromVnode(el, vnode, updateChildren, forceChildrenUpdate);\n });\n}\n\nfunction applyElementUpdateFromVnode(\n el: Element,\n vnode: VNode,\n updateChildren: boolean,\n forceChildrenUpdate: boolean\n): void {\n if (!_isDOMElement(vnode)) {\n return;\n }\n\n const props = (vnode.props || {}) as Record<string, unknown>;\n const domVNode = vnode as DOMElement;\n\n if (isHydrationSkipped(el)) {\n clearHydrationDeferredSubtree(el);\n return;\n }\n\n materializeKey(el, vnode, props);\n updateElementRef(el, props.ref);\n\n if (!hasTrackedElementPropBindings(el)) {\n if (\n !forceChildrenUpdate &&\n hasMatchingStaticProps(el, props, vnode.type as string)\n ) {\n if (updateChildren) {\n const children =\n (props.children as VNode | VNode[] | undefined) ?? vnode.children;\n if (!forceChildrenUpdate && canReuseStaticSubtree(el, domVNode)) {\n return;\n }\n updateElementChildren(el, children, forceChildrenUpdate);\n }\n return;\n }\n }\n\n const nextChildren = props.children ?? domVNode.children;\n const usesReactiveChildren = syncReactiveScalarChild(\n el,\n nextChildren,\n rendererReactiveChildDOMHost\n );\n syncElementPropBindings(el, domVNode, props, usesReactiveChildren);\n\n if (updateChildren) {\n const children =\n (props.children as VNode | VNode[] | undefined) ?? vnode.children;\n if (usesReactiveChildren) {\n return;\n }\n updateElementChildren(el, children, forceChildrenUpdate);\n }\n}\n\nconfigureRendererDOMHost({\n createDOMNode,\n syncComponentElement,\n updateElementFromVnode,\n updateElementChildren,\n tryPatchStableForDirtyItem,\n});\n\nconfigureBoundaryDOMHost({\n createDOMNode,\n syncComponentElement,\n updateElementFromVnode,\n tryPatchStableForDirtyItem,\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-children.js","names":[],"sources":["../../src/renderer/element-children.ts"],"sourcesContent":["import type { ComponentFunction } from '../runtime/component-contracts';\nimport { clearControlBoundaryCommitOwner } from './boundaries';\nimport {\n commitForBoundaryChildren,\n evaluateControlBoundaryState,\n getControlBoundaryState,\n getDirectControlBoundaryVNode,\n registerControlBoundaryCommitOwner,\n trySyncControlBoundaryChild,\n} from './boundaries';\nimport { isBulkTextFastPathEligible, performBulkTextReplace } from './children';\nimport { isFragmentVNode, normalizeComponentChildren } from './child-shape';\nimport { teardownNodeSubtree } from './cleanup';\nimport { getRendererDOMHost, type ElementWithContext } from './dom-host';\nimport { keyedElements } from './keyed';\nimport { getParentNamespace } from './namespaces';\nimport {\n trySyncScalarChildSequenceInPlace,\n type ReactiveChildDOMHost,\n} from './reactive-children';\nimport { reconcileKeyedChildren } from './reconcile';\nimport { tagsEqualIgnoreCase } from './static-reuse';\nimport { _isDOMElement, type DOMElement, type VNode } from './types';\nimport { extractKey } from './utils';\n\nexport const rendererReactiveChildDOMHost: ReactiveChildDOMHost = {\n createDOMNode: (node, parentNamespace) =>\n getRendererDOMHost().createDOMNode(node, parentNamespace),\n updateElementChildren: (el, children, forceUpdate) =>\n updateElementChildren(el, children, forceUpdate),\n};\n\nexport function updateElementChildren(\n el: Element,\n children: VNode | VNode[] | undefined,\n forceUpdate = false\n): void {\n const directControlBoundary = getDirectControlBoundaryVNode(children);\n if (directControlBoundary) {\n const controlState = getControlBoundaryState(directControlBoundary);\n if (!controlState) {\n throw new Error(\n '[updateElementChildren] Control boundary missing internal state'\n );\n }\n\n registerControlBoundaryCommitOwner(el, controlState);\n const childrenVNodes = evaluateControlBoundaryState(controlState);\n commitForBoundaryChildren(el, controlState, childrenVNodes as VNode[]);\n return;\n }\n\n clearControlBoundaryCommitOwner(el);\n\n if (children === null || children === undefined) {\n for (let n = el.firstChild; n; ) {\n const next = n.nextSibling;\n teardownNodeSubtree(n);\n n = next;\n }\n el.textContent = '';\n return;\n }\n\n if (!Array.isArray(children) && isFragmentVNode(children)) {\n updateUnkeyedChildren(\n el,\n normalizeComponentChildren(children),\n forceUpdate\n );\n return;\n }\n\n if (\n !Array.isArray(children) &&\n (typeof children === 'string' || typeof children === 'number')\n ) {\n if (el.childNodes.length === 1 && el.firstChild?.nodeType === 3) {\n const s = String(children);\n const t = el.firstChild as Text;\n if (t.data !== s) t.data = s;\n } else {\n for (let n = el.firstChild; n; ) {\n const next = n.nextSibling;\n teardownNodeSubtree(n);\n n = next;\n }\n el.textContent = String(children);\n }\n return;\n }\n\n if (Array.isArray(children)) {\n const normalizedChildren = normalizeComponentChildren(children) as VNode[];\n\n if (\n trySyncScalarChildSequenceInPlace(\n el,\n normalizedChildren,\n rendererReactiveChildDOMHost\n )\n ) {\n keyedElements.delete(el);\n return;\n }\n\n if (hasKeyedVNodeChildren(normalizedChildren)) {\n const oldKeyMap = getOrBuildDomKeyMap(el);\n const newKeyMap = reconcileKeyedChildren(\n el,\n normalizedChildren,\n oldKeyMap\n );\n keyedElements.set(el, newKeyMap);\n return;\n }\n if (isBulkTextFastPathEligible(el, normalizedChildren)) {\n performBulkTextReplace(el, normalizedChildren);\n keyedElements.delete(el);\n return;\n }\n updateUnkeyedChildren(el, normalizedChildren, forceUpdate);\n return;\n }\n\n if (_isDOMElement(children)) {\n updateUnkeyedChildren(el, [children], forceUpdate);\n return;\n }\n\n for (let n = el.firstChild; n; ) {\n const next = n.nextSibling;\n teardownNodeSubtree(n);\n n = next;\n }\n el.textContent = '';\n const dom = getRendererDOMHost().createDOMNode(children);\n if (dom) el.appendChild(dom);\n}\n\nfunction hasKeyedVNodeChildren(children: VNode[]): boolean {\n for (let i = 0; i < children.length; i++) {\n if (extractKey(children[i]) !== undefined) return true;\n }\n return false;\n}\n\nfunction isEmptyChild(child: unknown): boolean {\n return child === null || child === undefined || child === false;\n}\n\nfunction getOrBuildDomKeyMap(\n parent: Element\n): Map<string | number, Element> | undefined {\n let keyMap = keyedElements.get(parent);\n if (!keyMap) {\n keyMap = new Map<string | number, Element>();\n for (\n let child = parent.firstElementChild;\n child;\n child = child.nextElementSibling\n ) {\n const key = child.getAttribute('data-key');\n if (key !== null) {\n keyMap.set(key, child);\n const numericKey = Number(key);\n if (!Number.isNaN(numericKey)) keyMap.set(numericKey, child);\n }\n }\n if (keyMap.size > 0) keyedElements.set(parent, keyMap);\n }\n return keyMap.size > 0 ? keyMap : undefined;\n}\n\nexport function updateUnkeyedChildren(\n parent: Element,\n newChildren: unknown[],\n forceUpdate = false\n): void {\n const parentNamespace = getParentNamespace(parent);\n const domHost = getRendererDOMHost();\n\n const trySyncComponentChild = (\n currentDom: Element,\n next: DOMElement\n ): Node | null => {\n if (typeof next.type !== 'function') {\n return null;\n }\n\n return domHost.syncComponentElement(\n currentDom,\n next as ElementWithContext,\n next.type as ComponentFunction,\n (((next as DOMElement).props ?? {}) as Record<string, unknown>) || {},\n parentNamespace,\n forceUpdate\n );\n };\n\n const hasText = newChildren.some(\n (c) => typeof c === 'string' || typeof c === 'number'\n );\n const hasElements = newChildren.some((c) => _isDOMElement(c));\n const hasEmptyChildren = newChildren.some(isEmptyChild);\n const hasComponentChildren = newChildren.some(\n (c) => _isDOMElement(c) && typeof (c as DOMElement).type === 'function'\n );\n const hasNonElementDomChildren =\n parent.childNodes.length !== parent.children.length;\n\n if (\n !hasEmptyChildren &&\n !hasText &&\n !hasComponentChildren &&\n !hasNonElementDomChildren &&\n hasElements &&\n parent.children.length === newChildren.length\n ) {\n const c = parent.children;\n for (let i = 0; i < newChildren.length; i++) {\n const next = newChildren[i];\n const current = c[i];\n if (!current || next === undefined) continue;\n if (_isDOMElement(next) && typeof next.type === 'string') {\n if (tagsEqualIgnoreCase(current.tagName, next.type)) {\n domHost.updateElementFromVnode(current, next, true, forceUpdate);\n } else {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(current);\n parent.replaceChild(dom, current);\n }\n }\n } else if (_isDOMElement(next)) {\n if (trySyncControlBoundaryChild(parent, current, next)) {\n continue;\n }\n\n const synced = trySyncComponentChild(current, next);\n if (synced && synced !== current) {\n teardownNodeSubtree(current);\n } else if (!synced) {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(current);\n parent.replaceChild(dom, current);\n }\n }\n } else {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(current);\n parent.replaceChild(dom, current);\n }\n }\n }\n return;\n }\n\n const existing = Array.from(parent.children);\n\n if (\n hasText ||\n hasComponentChildren ||\n hasEmptyChildren ||\n hasNonElementDomChildren\n ) {\n const allNodes = Array.from(parent.childNodes);\n const max = Math.max(allNodes.length, newChildren.length);\n\n for (let i = 0; i < max; i++) {\n const currentNode = allNodes[i];\n const next = newChildren[i];\n const nextIsEmpty = isEmptyChild(next);\n\n if (nextIsEmpty && currentNode) {\n teardownNodeSubtree(currentNode);\n currentNode.remove();\n continue;\n }\n\n if (!currentNode && !nextIsEmpty) {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) parent.appendChild(dom);\n continue;\n }\n\n if (!currentNode || nextIsEmpty) continue;\n\n if (typeof next === 'string' || typeof next === 'number') {\n if (currentNode.nodeType === 3) {\n (currentNode as Text).data = String(next);\n } else {\n const textNode = document.createTextNode(String(next));\n parent.replaceChild(textNode, currentNode);\n }\n } else if (_isDOMElement(next)) {\n if (currentNode.nodeType === 1) {\n const currentEl = currentNode as Element;\n if (typeof next.type === 'string') {\n if (tagsEqualIgnoreCase(currentEl.tagName, next.type)) {\n domHost.updateElementFromVnode(\n currentEl,\n next,\n true,\n forceUpdate\n );\n } else {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(currentEl);\n parent.replaceChild(dom, currentNode);\n }\n }\n } else {\n if (trySyncControlBoundaryChild(parent, currentNode, next)) {\n continue;\n }\n\n const synced = trySyncComponentChild(currentEl, next);\n if (synced && synced !== currentNode) {\n teardownNodeSubtree(currentEl);\n } else if (!synced) {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(currentEl);\n parent.replaceChild(dom, currentNode);\n }\n }\n }\n } else {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) parent.replaceChild(dom, currentNode);\n }\n }\n }\n return;\n }\n\n if (\n newChildren.length === 1 &&\n existing.length === 0 &&\n parent.childNodes.length === 1\n ) {\n const firstNewChild = newChildren[0];\n const firstExisting = parent.firstChild;\n if (\n (typeof firstNewChild === 'string' ||\n typeof firstNewChild === 'number') &&\n firstExisting?.nodeType === 3\n ) {\n (firstExisting as Text).data = String(firstNewChild);\n return;\n }\n }\n\n if (existing.length === 0 && parent.childNodes.length > 0) {\n for (let n = parent.firstChild; n; ) {\n const next = n.nextSibling;\n teardownNodeSubtree(n);\n n = next;\n }\n parent.textContent = '';\n }\n const max = Math.max(existing.length, newChildren.length);\n\n for (let i = 0; i < max; i++) {\n const current = existing[i];\n const next = newChildren[i];\n const nextIsEmpty = isEmptyChild(next);\n\n if (nextIsEmpty && current) {\n teardownNodeSubtree(current);\n current.remove();\n continue;\n }\n\n if (!current && !nextIsEmpty) {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) parent.appendChild(dom);\n continue;\n }\n\n if (!current || nextIsEmpty) continue;\n\n if (typeof next === 'string' || typeof next === 'number') {\n const textNode = document.createTextNode(String(next));\n teardownNodeSubtree(current);\n parent.replaceChild(textNode, current);\n } else if (_isDOMElement(next)) {\n if (typeof next.type === 'string') {\n if (tagsEqualIgnoreCase(current.tagName, next.type)) {\n domHost.updateElementFromVnode(current, next, true, forceUpdate);\n } else {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(current);\n parent.replaceChild(dom, current);\n }\n }\n } else {\n const synced = trySyncComponentChild(current, next);\n if (synced && synced !== current) {\n teardownNodeSubtree(current);\n } else if (!synced) {\n const dom = domHost.createDOMNode(next, parentNamespace);\n if (dom) {\n teardownNodeSubtree(current);\n parent.replaceChild(dom, current);\n }\n }\n }\n } else {\n const dom = domHost.createDOMNode(next);\n if (dom) {\n teardownNodeSubtree(current);\n parent.replaceChild(dom, current);\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-boundary-dom.js","names":[],"sources":["../../src/renderer/error-boundary-dom.ts"],"sourcesContent":["import { logger } from '../dev/logger';\nimport {\n createBoundaryReset,\n reportBoundaryError,\n resolveErrorBoundaryFallback,\n type ErrorBoundaryProps,\n} from '../components/error-boundary';\nimport type { ComponentInstance } from '../runtime/component-contracts';\nimport { getRendererDOMHost } from './dom-host';\nimport type { DOMElement } from './types';\n\nexport type ErrorBoundaryVNode = DOMElement & {\n __instance?: ComponentInstance;\n};\n\nexport function createErrorBoundaryElement(\n node: ErrorBoundaryVNode,\n props: Record<string, unknown>,\n parentNamespace?: string\n): Node {\n const boundaryState = node.__instance?.errorBoundaryState ?? null;\n const reset = node.__instance\n ? createBoundaryReset(node.__instance)\n : () => {};\n const fallback = props.fallback as ErrorBoundaryProps['fallback'];\n const children = props.children as ErrorBoundaryProps['children'];\n const domHost = getRendererDOMHost();\n\n if (boundaryState?.error != null) {\n const fallbackValue = resolveErrorBoundaryFallback(\n fallback,\n boundaryState.error,\n reset\n );\n if (fallbackValue instanceof Node) {\n return fallbackValue;\n }\n const fallbackDom = domHost.createDOMNode(fallbackValue, parentNamespace);\n return fallbackDom ?? document.createComment('');\n }\n\n try {\n const dom = domHost.createDOMNode(children, parentNamespace);\n return dom ?? document.createComment('');\n } catch (error) {\n if (node.__instance) {\n reportBoundaryError(\n node.__instance,\n error,\n props.onError as ((next: unknown) => void) | undefined\n );\n } else {\n logger.error('[Askr] ErrorBoundary caught render error:', error);\n }\n\n const fallbackValue = resolveErrorBoundaryFallback(fallback, error, reset);\n if (fallbackValue instanceof Node) {\n return fallbackValue;\n }\n const fallbackDom = domHost.createDOMNode(fallbackValue, parentNamespace);\n return fallbackDom ?? document.createComment('');\n }\n}\n"],"mappings":";;;;AAeA,SAAgB,2BACd,MACA,OACA,iBACM;CACN,MAAM,gBAAgB,KAAK,YAAY,sBAAsB;CAC7D,MAAM,QAAQ,KAAK,aACf,oBAAoB,KAAK,UAAU,UAC7B,CAAC;CACX,MAAM,WAAW,MAAM;CACvB,MAAM,WAAW,MAAM;CACvB,MAAM,UAAU,mBAAmB;CAEnC,IAAI,eAAe,SAAS,MAAM;EAChC,MAAM,gBAAgB,6BACpB,UACA,cAAc,OACd,KACF;EACA,IAAI,yBAAyB,MAC3B,OAAO;EAGT,OADoB,QAAQ,cAAc,eAAe,eAClD,KAAe,SAAS,cAAc,EAAE;CACjD;CAEA,IAAI;EAEF,OADY,QAAQ,cAAc,UAAU,eACrC,KAAO,SAAS,cAAc,EAAE;CACzC,SAAS,OAAO;EACd,IAAI,KAAK,YACP,oBACE,KAAK,YACL,OACA,MAAM,OACR;OAEA,OAAO,MAAM,6CAA6C,KAAK;EAGjE,MAAM,gBAAgB,6BAA6B,UAAU,OAAO,KAAK;EACzE,IAAI,yBAAyB,MAC3B,OAAO;EAGT,OADoB,QAAQ,cAAc,eAAe,eAClD,KAAe,SAAS,cAAc,EAAE;CACjD;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluate-dom-range.js","names":[],"sources":["../../src/renderer/evaluate-dom-range.ts"],"sourcesContent":["import { teardownNodeSubtree } from './cleanup';\nimport { getRendererDOMHost } from './dom-host';\nimport {\n smartUpdateElement,\n tagNamesEqualIgnoreCase,\n} from './evaluate-reconcile';\nimport { _isDOMElement } from './types';\n\ninterface DOMRange {\n start: Node;\n end: Node;\n}\n\nconst domRanges = new WeakMap<object, DOMRange>();\n\nexport function hasDOMRange(context: object): boolean {\n return domRanges.has(context);\n}\n\nexport function createDOMRange(\n target: Element,\n context: object,\n node: unknown\n): void {\n const start = document.createComment('component-start');\n const end = document.createComment('component-end');\n target.appendChild(start);\n target.appendChild(end);\n domRanges.set(context, { start, end });\n\n const dom = getRendererDOMHost().createDOMNode(node);\n if (dom) {\n target.insertBefore(dom, end);\n }\n}\n\nexport function cleanupRangeNode(node: Node): void {\n teardownNodeSubtree(node);\n}\n\nexport function updateDOMRangeForContext(\n target: Element,\n context: object,\n children: unknown[]\n): void {\n const range = domRanges.get(context);\n if (!range) {\n return;\n }\n\n let current: Node | null = range.start.nextSibling;\n const domHost = getRendererDOMHost();\n\n for (let i = 0; i < children.length; i++) {\n const nextChild = children[i];\n const currentNode = current === range.end ? null : current;\n const nextCurrent = currentNode?.nextSibling ?? null;\n\n if (nextChild === null || nextChild === undefined || nextChild === false) {\n if (currentNode) {\n cleanupRangeNode(currentNode);\n target.removeChild(currentNode);\n }\n current = nextCurrent;\n continue;\n }\n\n if (typeof nextChild === 'string' || typeof nextChild === 'number') {\n if (currentNode?.nodeType === 3) {\n (currentNode as Text).data = String(nextChild);\n } else {\n const textNode = document.createTextNode(String(nextChild));\n if (currentNode) {\n cleanupRangeNode(currentNode);\n target.replaceChild(textNode, currentNode);\n } else {\n target.insertBefore(textNode, range.end);\n }\n }\n current = nextCurrent;\n continue;\n }\n\n if (\n currentNode instanceof Element &&\n _isDOMElement(nextChild) &&\n typeof nextChild.type === 'string' &&\n tagNamesEqualIgnoreCase(currentNode.tagName, nextChild.type)\n ) {\n smartUpdateElement(currentNode, nextChild, cleanupRangeNode);\n current = nextCurrent;\n continue;\n }\n\n const newDom = domHost.createDOMNode(nextChild);\n if (!newDom) {\n if (currentNode) {\n cleanupRangeNode(currentNode);\n target.removeChild(currentNode);\n }\n current = nextCurrent;\n continue;\n }\n\n if (currentNode) {\n cleanupRangeNode(currentNode);\n target.replaceChild(newDom, currentNode);\n } else {\n target.insertBefore(newDom, range.end);\n }\n\n current = nextCurrent;\n }\n\n while (current && current !== range.end) {\n const next = current.nextSibling;\n cleanupRangeNode(current);\n target.removeChild(current);\n current = next;\n }\n}\n\nexport function clearDOMRange(context: object): void {\n domRanges.delete(context);\n}\n"],"mappings":";;;;;;AAaA,MAAM,4BAAY,IAAI,QAA0B;AAEhD,SAAgB,YAAY,SAA0B;CACpD,OAAO,UAAU,IAAI,OAAO;AAC9B;AAEA,SAAgB,eACd,QACA,SACA,MACM;CACN,MAAM,QAAQ,SAAS,cAAc,iBAAiB;CACtD,MAAM,MAAM,SAAS,cAAc,eAAe;CAClD,OAAO,YAAY,KAAK;CACxB,OAAO,YAAY,GAAG;CACtB,UAAU,IAAI,SAAS;EAAE;EAAO;CAAI,CAAC;CAErC,MAAM,MAAM,mBAAmB,CAAC,CAAC,cAAc,IAAI;CACnD,IAAI,KACF,OAAO,aAAa,KAAK,GAAG;AAEhC;AAEA,SAAgB,iBAAiB,MAAkB;CACjD,oBAAoB,IAAI;AAC1B;AAEA,SAAgB,yBACd,QACA,SACA,UACM;CACN,MAAM,QAAQ,UAAU,IAAI,OAAO;CACnC,IAAI,CAAC,OACH;CAGF,IAAI,UAAuB,MAAM,MAAM;CACvC,MAAM,UAAU,mBAAmB;CAEnC,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,YAAY,SAAS;EAC3B,MAAM,cAAc,YAAY,MAAM,MAAM,OAAO;EACnD,MAAM,cAAc,aAAa,eAAe;EAEhD,IAAI,cAAc,QAAQ,cAAc,UAAa,cAAc,OAAO;GACxE,IAAI,aAAa;IACf,iBAAiB,WAAW;IAC5B,OAAO,YAAY,WAAW;GAChC;GACA,UAAU;GACV;EACF;EAEA,IAAI,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU;GAClE,IAAI,aAAa,aAAa,GAC5B,YAAsB,OAAO,OAAO,SAAS;QACxC;IACL,MAAM,WAAW,SAAS,eAAe,OAAO,SAAS,CAAC;IAC1D,IAAI,aAAa;KACf,iBAAiB,WAAW;KAC5B,OAAO,aAAa,UAAU,WAAW;IAC3C,OACE,OAAO,aAAa,UAAU,MAAM,GAAG;GAE3C;GACA,UAAU;GACV;EACF;EAEA,IACE,uBAAuB,WACvB,cAAc,SAAS,KACvB,OAAO,UAAU,SAAS,YAC1B,wBAAwB,YAAY,SAAS,UAAU,IAAI,GAC3D;GACA,mBAAmB,aAAa,WAAW,gBAAgB;GAC3D,UAAU;GACV;EACF;EAEA,MAAM,SAAS,QAAQ,cAAc,SAAS;EAC9C,IAAI,CAAC,QAAQ;GACX,IAAI,aAAa;IACf,iBAAiB,WAAW;IAC5B,OAAO,YAAY,WAAW;GAChC;GACA,UAAU;GACV;EACF;EAEA,IAAI,aAAa;GACf,iBAAiB,WAAW;GAC5B,OAAO,aAAa,QAAQ,WAAW;EACzC,OACE,OAAO,aAAa,QAAQ,MAAM,GAAG;EAGvC,UAAU;CACZ;CAEA,OAAO,WAAW,YAAY,MAAM,KAAK;EACvC,MAAM,OAAO,QAAQ;EACrB,iBAAiB,OAAO;EACxB,OAAO,YAAY,OAAO;EAC1B,UAAU;CACZ;AACF"}