@askrjs/askr 0.0.51 → 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 (593) 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 +2 -4
  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 +20 -11
  11. package/dist/boot/root-lifecycle.d.ts +6 -3
  12. package/dist/boot/root-lifecycle.js +14 -10
  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 +1 -2
  22. package/dist/common/invariant.js +0 -2
  23. package/dist/common/jsx.d.ts +1 -2
  24. package/dist/common/jsx.js +0 -2
  25. package/dist/common/logger.js +0 -2
  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 +1 -2
  39. package/dist/components/error-boundary.js +0 -2
  40. package/dist/components/link.d.ts +2 -2
  41. package/dist/components/link.js +0 -2
  42. package/dist/control/case.d.ts +1 -2
  43. package/dist/control/case.js +0 -2
  44. package/dist/control/for.d.ts +1 -2
  45. package/dist/control/for.js +0 -2
  46. package/dist/control/shared.d.ts +1 -2
  47. package/dist/control/shared.js +0 -2
  48. package/dist/control/show.d.ts +1 -2
  49. package/dist/control/show.js +0 -2
  50. package/dist/data/data-runtime.d.ts +1 -2
  51. package/dist/data/data-runtime.js +3 -5
  52. package/dist/data/invalidation-listeners.js +0 -2
  53. package/dist/data/invalidation.d.ts +1 -2
  54. package/dist/data/invalidation.js +0 -2
  55. package/dist/data/mutation-cell.d.ts +1 -2
  56. package/dist/data/mutation-cell.js +6 -5
  57. package/dist/data/query-cell.d.ts +3 -2
  58. package/dist/data/query-cell.js +43 -9
  59. package/dist/data/query-key.js +0 -2
  60. package/dist/data/shared.js +2 -3
  61. package/dist/data/types.d.ts +1 -2
  62. package/dist/foundations/icon/icon.d.ts +1 -2
  63. package/dist/foundations/icon/icon.js +0 -2
  64. package/dist/foundations/icon/icon.types.d.ts +1 -2
  65. package/dist/foundations/interactions/dismissable.d.ts +1 -2
  66. package/dist/foundations/interactions/dismissable.js +0 -2
  67. package/dist/foundations/interactions/focusable.d.ts +1 -2
  68. package/dist/foundations/interactions/focusable.js +0 -2
  69. package/dist/foundations/interactions/hoverable.d.ts +1 -2
  70. package/dist/foundations/interactions/hoverable.js +0 -2
  71. package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
  72. package/dist/foundations/interactions/interaction-policy.js +0 -2
  73. package/dist/foundations/interactions/pressable.d.ts +1 -2
  74. package/dist/foundations/interactions/pressable.js +0 -2
  75. package/dist/foundations/interactions/roving-focus.d.ts +1 -2
  76. package/dist/foundations/interactions/roving-focus.js +0 -2
  77. package/dist/foundations/state/controllable.d.ts +1 -2
  78. package/dist/foundations/state/controllable.js +0 -2
  79. package/dist/foundations/structures/collection.d.ts +1 -2
  80. package/dist/foundations/structures/collection.js +0 -2
  81. package/dist/foundations/structures/layer.d.ts +1 -2
  82. package/dist/foundations/structures/layer.js +0 -2
  83. package/dist/foundations/structures/layout.d.ts +1 -2
  84. package/dist/foundations/structures/layout.js +0 -2
  85. package/dist/foundations/structures/presence.d.ts +1 -2
  86. package/dist/foundations/structures/presence.js +0 -2
  87. package/dist/foundations/structures/slot.d.ts +1 -2
  88. package/dist/foundations/structures/slot.js +0 -2
  89. package/dist/foundations/utilities/aria.d.ts +1 -2
  90. package/dist/foundations/utilities/aria.js +0 -2
  91. package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
  92. package/dist/foundations/utilities/compose-handlers.js +0 -2
  93. package/dist/foundations/utilities/compose-ref.d.ts +1 -2
  94. package/dist/foundations/utilities/compose-ref.js +0 -2
  95. package/dist/foundations/utilities/event-types.d.ts +1 -2
  96. package/dist/foundations/utilities/merge-props.d.ts +1 -2
  97. package/dist/foundations/utilities/merge-props.js +0 -2
  98. package/dist/foundations/utilities/use-id.d.ts +1 -2
  99. package/dist/foundations/utilities/use-id.js +0 -2
  100. package/dist/fx/fx.d.ts +1 -2
  101. package/dist/fx/fx.js +0 -2
  102. package/dist/fx/noop.js +0 -2
  103. package/dist/fx/timing.d.ts +1 -2
  104. package/dist/fx/timing.js +0 -2
  105. package/dist/index.d.ts +1 -1
  106. package/dist/index.js +0 -2
  107. package/dist/jsx/types.d.ts +1 -2
  108. package/dist/jsx/utils.d.ts +1 -2
  109. package/dist/jsx/utils.js +0 -2
  110. package/dist/jsx-dev-runtime.d.ts +16 -2
  111. package/dist/jsx-dev-runtime.js +3 -12
  112. package/dist/jsx-runtime.d.ts +16 -2
  113. package/dist/jsx-runtime.js +15 -24
  114. package/dist/jsx-runtime2.d.ts +1 -1
  115. package/dist/renderer/attributes.js +28 -6
  116. package/dist/renderer/boundaries.js +48 -172
  117. package/dist/renderer/boundary-materialization.js +72 -0
  118. package/dist/renderer/boundary-range-adoption.js +76 -0
  119. package/dist/renderer/boundary-range-sync.js +101 -0
  120. package/dist/renderer/boundary-state.js +50 -0
  121. package/dist/renderer/child-shape.js +0 -2
  122. package/dist/renderer/children-fastpath.js +3 -3
  123. package/dist/renderer/children.js +0 -2
  124. package/dist/renderer/cleanup.js +70 -13
  125. package/dist/renderer/component-host-cleanup.js +123 -48
  126. package/dist/renderer/component-host-instances.js +59 -8
  127. package/dist/renderer/component-host-replacement.js +105 -0
  128. package/dist/renderer/component-host-results.js +138 -0
  129. package/dist/renderer/component-host.js +94 -169
  130. package/dist/renderer/dom-host.js +0 -2
  131. package/dist/renderer/dom-internal.js +110 -53
  132. package/dist/renderer/dom-range.js +161 -0
  133. package/dist/renderer/dom.js +5 -4
  134. package/dist/renderer/element-children.js +112 -32
  135. package/dist/renderer/error-boundary-dom.js +19 -11
  136. package/dist/renderer/evaluate-dom-range.js +3 -4
  137. package/dist/renderer/evaluate-reconcile.js +12 -37
  138. package/dist/renderer/evaluate.js +14 -3
  139. package/dist/renderer/fastpath.js +4 -12
  140. package/dist/renderer/for-commit-dom-map.js +6 -18
  141. package/dist/renderer/for-commit-removal.js +7 -16
  142. package/dist/renderer/for-commit-reorder.js +0 -2
  143. package/dist/renderer/for-commit.js +172 -44
  144. package/dist/renderer/hydration-boundaries.js +60 -0
  145. package/dist/renderer/hydration-listener-transaction.js +49 -0
  146. package/dist/renderer/index.js +8 -7
  147. package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
  148. package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
  149. package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
  150. package/dist/renderer/intrinsic-blueprint.js +30 -0
  151. package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
  152. package/dist/renderer/keyed-children.js +3 -9
  153. package/dist/renderer/keyed.js +10 -10
  154. package/dist/renderer/namespaces.js +0 -2
  155. package/dist/renderer/prop-bindings.js +56 -21
  156. package/dist/renderer/reactive-child-dom.js +10 -4
  157. package/dist/renderer/reactive-child-sources.js +0 -2
  158. package/dist/renderer/reactive-children.js +29 -20
  159. package/dist/renderer/reconcile-commit.js +0 -2
  160. package/dist/renderer/reconcile-fastpaths.js +4 -11
  161. package/dist/renderer/reconcile-resolution.js +31 -55
  162. package/dist/renderer/reconcile.js +0 -2
  163. package/dist/renderer/retained-element-rollback.js +159 -148
  164. package/dist/renderer/stable-patch.js +3 -4
  165. package/dist/renderer/static-reuse.js +0 -2
  166. package/dist/renderer/utils.js +18 -9
  167. package/dist/router/access.js +0 -2
  168. package/dist/router/activity.d.ts +1 -2
  169. package/dist/router/activity.js +0 -2
  170. package/dist/router/authoring.d.ts +1 -2
  171. package/dist/router/authoring.js +0 -2
  172. package/dist/router/internal-types.d.ts +1 -2
  173. package/dist/router/lazy.d.ts +1 -2
  174. package/dist/router/lazy.js +0 -2
  175. package/dist/router/manifest.d.ts +1 -2
  176. package/dist/router/manifest.js +0 -2
  177. package/dist/router/match.js +0 -2
  178. package/dist/router/navigate.d.ts +1 -2
  179. package/dist/router/navigate.js +4 -7
  180. package/dist/router/navigation-registry.d.ts +1 -2
  181. package/dist/router/navigation-registry.js +0 -2
  182. package/dist/router/navigation-scroll.d.ts +1 -2
  183. package/dist/router/navigation-scroll.js +0 -2
  184. package/dist/router/navigation-targets.d.ts +3 -4
  185. package/dist/router/navigation-targets.js +419 -40
  186. package/dist/router/policy.d.ts +1 -2
  187. package/dist/router/policy.js +0 -2
  188. package/dist/router/rendering.d.ts +1 -2
  189. package/dist/router/rendering.js +4 -3
  190. package/dist/router/resolution.d.ts +1 -2
  191. package/dist/router/resolution.js +0 -2
  192. package/dist/router/route-context.js +0 -2
  193. package/dist/router/route-matching.d.ts +1 -2
  194. package/dist/router/route-matching.js +0 -2
  195. package/dist/router/route-query.d.ts +1 -2
  196. package/dist/router/route-query.js +1 -3
  197. package/dist/router/store.d.ts +1 -2
  198. package/dist/router/store.js +0 -2
  199. package/dist/runtime/access.d.ts +1 -2
  200. package/dist/runtime/access.js +0 -2
  201. package/dist/runtime/child-scope.d.ts +21 -2
  202. package/dist/runtime/child-scope.js +101 -54
  203. package/dist/runtime/component-cleanup.d.ts +1 -2
  204. package/dist/runtime/component-cleanup.js +2 -4
  205. package/dist/runtime/component-commit.js +25 -23
  206. package/dist/runtime/component-facade.js +5 -3
  207. package/dist/runtime/component-internal.d.ts +11 -6
  208. package/dist/runtime/component-internal.js +63 -45
  209. package/dist/runtime/component-lifecycle.d.ts +2 -41
  210. package/dist/runtime/component-lifecycle.js +6 -149
  211. package/dist/runtime/component-scope.d.ts +3 -4
  212. package/dist/runtime/component-scope.js +27 -8
  213. package/dist/runtime/component.js +4 -3
  214. package/dist/runtime/context.d.ts +5 -2
  215. package/dist/runtime/context.js +29 -3
  216. package/dist/runtime/control.d.ts +22 -3
  217. package/dist/runtime/control.js +168 -55
  218. package/dist/runtime/derive.d.ts +1 -2
  219. package/dist/runtime/derive.js +0 -2
  220. package/dist/runtime/dev-namespace.d.ts +5 -6
  221. package/dist/runtime/dev-namespace.js +32 -25
  222. package/dist/runtime/effect.d.ts +8 -5
  223. package/dist/runtime/effect.js +158 -75
  224. package/dist/runtime/error-boundary.d.ts +1 -2
  225. package/dist/runtime/error-boundary.js +0 -2
  226. package/dist/runtime/events.d.ts +3 -3
  227. package/dist/runtime/events.js +66 -69
  228. package/dist/runtime/execution-model.d.ts +1 -2
  229. package/dist/runtime/execution-model.js +0 -2
  230. package/dist/runtime/fastlane.d.ts +1 -2
  231. package/dist/runtime/fastlane.js +0 -2
  232. package/dist/runtime/for-bench.d.ts +1 -2
  233. package/dist/runtime/for-bench.js +9 -167
  234. package/dist/runtime/for-internal.d.ts +68 -5
  235. package/dist/runtime/for-internal.js +201 -14
  236. package/dist/runtime/for-reconcile.d.ts +1 -2
  237. package/dist/runtime/for-reconcile.js +76 -23
  238. package/dist/runtime/for-scopes.d.ts +5 -5
  239. package/dist/runtime/for-scopes.js +168 -48
  240. package/dist/runtime/for-signals.d.ts +13 -4
  241. package/dist/runtime/for-signals.js +155 -81
  242. package/dist/runtime/for-types.d.ts +1 -2
  243. package/dist/runtime/for.d.ts +2 -2
  244. package/dist/runtime/for.js +3 -3
  245. package/dist/runtime/index.d.ts +5 -5
  246. package/dist/runtime/index.js +12 -10
  247. package/dist/runtime/lifecycle-batch.d.ts +59 -0
  248. package/dist/runtime/lifecycle-batch.js +178 -0
  249. package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
  250. package/dist/runtime/lifecycle-operation-settlement.js +51 -0
  251. package/dist/runtime/lifecycle-operations.d.ts +1 -2
  252. package/dist/runtime/lifecycle-operations.js +5 -6
  253. package/dist/runtime/perf-metrics.d.ts +8 -7
  254. package/dist/runtime/perf-metrics.js +4 -68
  255. package/dist/runtime/portal.d.ts +1 -2
  256. package/dist/runtime/portal.js +103 -11
  257. package/dist/runtime/readable.d.ts +9 -4
  258. package/dist/runtime/readable.js +41 -17
  259. package/dist/runtime/resource-cell.js +2 -4
  260. package/dist/runtime/resource-operation.d.ts +1 -2
  261. package/dist/runtime/resource-operation.js +37 -34
  262. package/dist/runtime/runtime.d.ts +1 -2
  263. package/dist/runtime/runtime.js +0 -2
  264. package/dist/runtime/scheduler.d.ts +1 -2
  265. package/dist/runtime/scheduler.js +8 -11
  266. package/dist/runtime/selector-store.js +0 -2
  267. package/dist/runtime/selector.d.ts +1 -2
  268. package/dist/runtime/selector.js +3 -11
  269. package/dist/runtime/snapshot-source.d.ts +1 -2
  270. package/dist/runtime/snapshot-source.js +0 -2
  271. package/dist/runtime/state.d.ts +1 -2
  272. package/dist/runtime/state.js +1 -3
  273. package/dist/ssg/batch-render.js +0 -2
  274. package/dist/ssg/create-static-gen.d.ts +4 -2
  275. package/dist/ssg/create-static-gen.js +65 -14
  276. package/dist/ssg/generate-metadata.js +0 -2
  277. package/dist/ssg/generation-plan.js +0 -2
  278. package/dist/ssg/incremental-manifest.js +1 -3
  279. package/dist/ssg/resolve-ssg-data.js +0 -2
  280. package/dist/ssg/route-utils.js +0 -2
  281. package/dist/ssg/static-routes.js +0 -2
  282. package/dist/ssg/types.d.ts +2 -3
  283. package/dist/ssg/write-static-files.js +16 -12
  284. package/dist/ssr/attrs.js +0 -2
  285. package/dist/ssr/boundaries.js +16 -5
  286. package/dist/ssr/component-runtime.js +1 -27
  287. package/dist/ssr/context.d.ts +1 -2
  288. package/dist/ssr/context.js +0 -2
  289. package/dist/ssr/errors.d.ts +1 -2
  290. package/dist/ssr/errors.js +0 -2
  291. package/dist/ssr/escape.js +0 -2
  292. package/dist/ssr/hydration-data.js +0 -2
  293. package/dist/ssr/hydration-verify.d.ts +1 -2
  294. package/dist/ssr/hydration-verify.js +34 -7
  295. package/dist/ssr/index-internal.d.ts +1 -2
  296. package/dist/ssr/index-internal.js +0 -2
  297. package/dist/ssr/render-keys.js +0 -2
  298. package/dist/ssr/render-resolved.d.ts +1 -2
  299. package/dist/ssr/render-resolved.js +0 -2
  300. package/dist/ssr/render-sync.d.ts +1 -2
  301. package/dist/ssr/render-sync.js +27 -19
  302. package/dist/ssr/route-policy-resolution.js +0 -2
  303. package/dist/ssr/route-render.d.ts +1 -2
  304. package/dist/ssr/route-render.js +0 -2
  305. package/dist/ssr/sink.d.ts +1 -2
  306. package/dist/ssr/sink.js +0 -2
  307. package/dist/ssr/types.d.ts +1 -2
  308. package/dist/ssr/verify-hydration.js +0 -2
  309. package/dist/testing/index.d.ts +1 -2
  310. package/dist/testing/index.js +0 -2
  311. package/package.json +57 -44
  312. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  313. package/dist/bench/components/benchmark-row.js.map +0 -1
  314. package/dist/bench/components/benchmark-table.js.map +0 -1
  315. package/dist/benchmark.d.ts.map +0 -1
  316. package/dist/benchmark.js.map +0 -1
  317. package/dist/bin/askr-ssg.d.ts.map +0 -1
  318. package/dist/bin/askr-ssg.js.map +0 -1
  319. package/dist/boot/hydration.js.map +0 -1
  320. package/dist/boot/index.d.ts.map +0 -1
  321. package/dist/boot/index.js.map +0 -1
  322. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  323. package/dist/boot/root-lifecycle.js.map +0 -1
  324. package/dist/boot/route-startup.js.map +0 -1
  325. package/dist/boot/types.d.ts.map +0 -1
  326. package/dist/common/attr-names.js.map +0 -1
  327. package/dist/common/component.d.ts.map +0 -1
  328. package/dist/common/control.d.ts.map +0 -1
  329. package/dist/common/control.js.map +0 -1
  330. package/dist/common/env.js.map +0 -1
  331. package/dist/common/error-boundary.d.ts.map +0 -1
  332. package/dist/common/invariant.js.map +0 -1
  333. package/dist/common/jsx.d.ts.map +0 -1
  334. package/dist/common/jsx.js.map +0 -1
  335. package/dist/common/logger.js.map +0 -1
  336. package/dist/common/promise.js.map +0 -1
  337. package/dist/common/props.d.ts.map +0 -1
  338. package/dist/common/render-context.js.map +0 -1
  339. package/dist/common/route-activity.js.map +0 -1
  340. package/dist/common/router-internal.js.map +0 -1
  341. package/dist/common/router.d.ts.map +0 -1
  342. package/dist/common/ssr-errors.d.ts.map +0 -1
  343. package/dist/common/ssr-errors.js.map +0 -1
  344. package/dist/common/ssr.d.ts.map +0 -1
  345. package/dist/common/ssr.js.map +0 -1
  346. package/dist/common/vnode.d.ts.map +0 -1
  347. package/dist/common/vnode.js.map +0 -1
  348. package/dist/components/error-boundary.d.ts.map +0 -1
  349. package/dist/components/error-boundary.js.map +0 -1
  350. package/dist/components/link.d.ts.map +0 -1
  351. package/dist/components/link.js.map +0 -1
  352. package/dist/control/case.d.ts.map +0 -1
  353. package/dist/control/case.js.map +0 -1
  354. package/dist/control/for.d.ts.map +0 -1
  355. package/dist/control/for.js.map +0 -1
  356. package/dist/control/shared.d.ts.map +0 -1
  357. package/dist/control/shared.js.map +0 -1
  358. package/dist/control/show.d.ts.map +0 -1
  359. package/dist/control/show.js.map +0 -1
  360. package/dist/data/data-runtime.d.ts.map +0 -1
  361. package/dist/data/data-runtime.js.map +0 -1
  362. package/dist/data/invalidation-listeners.js.map +0 -1
  363. package/dist/data/invalidation.d.ts.map +0 -1
  364. package/dist/data/invalidation.js.map +0 -1
  365. package/dist/data/mutation-cell.d.ts.map +0 -1
  366. package/dist/data/mutation-cell.js.map +0 -1
  367. package/dist/data/query-cell.d.ts.map +0 -1
  368. package/dist/data/query-cell.js.map +0 -1
  369. package/dist/data/query-key.js.map +0 -1
  370. package/dist/data/shared.js.map +0 -1
  371. package/dist/data/types.d.ts.map +0 -1
  372. package/dist/foundations/icon/icon.d.ts.map +0 -1
  373. package/dist/foundations/icon/icon.js.map +0 -1
  374. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  375. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  376. package/dist/foundations/interactions/dismissable.js.map +0 -1
  377. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  378. package/dist/foundations/interactions/focusable.js.map +0 -1
  379. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  380. package/dist/foundations/interactions/hoverable.js.map +0 -1
  381. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  382. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  383. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  384. package/dist/foundations/interactions/pressable.js.map +0 -1
  385. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  386. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  387. package/dist/foundations/state/controllable.d.ts.map +0 -1
  388. package/dist/foundations/state/controllable.js.map +0 -1
  389. package/dist/foundations/structures/collection.d.ts.map +0 -1
  390. package/dist/foundations/structures/collection.js.map +0 -1
  391. package/dist/foundations/structures/layer.d.ts.map +0 -1
  392. package/dist/foundations/structures/layer.js.map +0 -1
  393. package/dist/foundations/structures/layout.d.ts.map +0 -1
  394. package/dist/foundations/structures/layout.js.map +0 -1
  395. package/dist/foundations/structures/presence.d.ts.map +0 -1
  396. package/dist/foundations/structures/presence.js.map +0 -1
  397. package/dist/foundations/structures/slot.d.ts.map +0 -1
  398. package/dist/foundations/structures/slot.js.map +0 -1
  399. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  400. package/dist/foundations/utilities/aria.js.map +0 -1
  401. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  402. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  403. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  404. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  405. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  406. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  407. package/dist/foundations/utilities/merge-props.js.map +0 -1
  408. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  409. package/dist/foundations/utilities/use-id.js.map +0 -1
  410. package/dist/fx/fx.d.ts.map +0 -1
  411. package/dist/fx/fx.js.map +0 -1
  412. package/dist/fx/noop.js.map +0 -1
  413. package/dist/fx/timing.d.ts.map +0 -1
  414. package/dist/fx/timing.js.map +0 -1
  415. package/dist/index.js.map +0 -1
  416. package/dist/jsx/types.d.ts.map +0 -1
  417. package/dist/jsx/utils.d.ts.map +0 -1
  418. package/dist/jsx/utils.js.map +0 -1
  419. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  420. package/dist/jsx-dev-runtime.js.map +0 -1
  421. package/dist/jsx-runtime.d.ts.map +0 -1
  422. package/dist/jsx-runtime.js.map +0 -1
  423. package/dist/renderer/attributes.js.map +0 -1
  424. package/dist/renderer/boundaries.js.map +0 -1
  425. package/dist/renderer/child-shape.js.map +0 -1
  426. package/dist/renderer/children-fastpath.js.map +0 -1
  427. package/dist/renderer/children.js.map +0 -1
  428. package/dist/renderer/cleanup.js.map +0 -1
  429. package/dist/renderer/component-host-cleanup.js.map +0 -1
  430. package/dist/renderer/component-host-instances.js.map +0 -1
  431. package/dist/renderer/component-host.js.map +0 -1
  432. package/dist/renderer/dom-host.js.map +0 -1
  433. package/dist/renderer/dom-internal.js.map +0 -1
  434. package/dist/renderer/element-children.js.map +0 -1
  435. package/dist/renderer/error-boundary-dom.js.map +0 -1
  436. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  437. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  438. package/dist/renderer/evaluate.js.map +0 -1
  439. package/dist/renderer/fastpath.js.map +0 -1
  440. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  441. package/dist/renderer/for-commit-removal.js.map +0 -1
  442. package/dist/renderer/for-commit-reorder.js.map +0 -1
  443. package/dist/renderer/for-commit.js.map +0 -1
  444. package/dist/renderer/index.js.map +0 -1
  445. package/dist/renderer/keyed-children.js.map +0 -1
  446. package/dist/renderer/keyed.js.map +0 -1
  447. package/dist/renderer/namespaces.js.map +0 -1
  448. package/dist/renderer/prop-bindings.js.map +0 -1
  449. package/dist/renderer/reactive-child-dom.js.map +0 -1
  450. package/dist/renderer/reactive-child-sources.js.map +0 -1
  451. package/dist/renderer/reactive-children.js.map +0 -1
  452. package/dist/renderer/reconcile-commit.js.map +0 -1
  453. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  454. package/dist/renderer/reconcile-resolution.js.map +0 -1
  455. package/dist/renderer/reconcile.js.map +0 -1
  456. package/dist/renderer/retained-element-rollback.js.map +0 -1
  457. package/dist/renderer/stable-patch.js.map +0 -1
  458. package/dist/renderer/static-reuse.js.map +0 -1
  459. package/dist/renderer/utils.js.map +0 -1
  460. package/dist/router/access.js.map +0 -1
  461. package/dist/router/activity.d.ts.map +0 -1
  462. package/dist/router/activity.js.map +0 -1
  463. package/dist/router/authoring.d.ts.map +0 -1
  464. package/dist/router/authoring.js.map +0 -1
  465. package/dist/router/internal-types.d.ts.map +0 -1
  466. package/dist/router/lazy.d.ts.map +0 -1
  467. package/dist/router/lazy.js.map +0 -1
  468. package/dist/router/manifest.d.ts.map +0 -1
  469. package/dist/router/manifest.js.map +0 -1
  470. package/dist/router/match.js.map +0 -1
  471. package/dist/router/navigate.d.ts.map +0 -1
  472. package/dist/router/navigate.js.map +0 -1
  473. package/dist/router/navigation-registry.d.ts.map +0 -1
  474. package/dist/router/navigation-registry.js.map +0 -1
  475. package/dist/router/navigation-scroll.d.ts.map +0 -1
  476. package/dist/router/navigation-scroll.js.map +0 -1
  477. package/dist/router/navigation-targets.d.ts.map +0 -1
  478. package/dist/router/navigation-targets.js.map +0 -1
  479. package/dist/router/policy.d.ts.map +0 -1
  480. package/dist/router/policy.js.map +0 -1
  481. package/dist/router/rendering.d.ts.map +0 -1
  482. package/dist/router/rendering.js.map +0 -1
  483. package/dist/router/resolution.d.ts.map +0 -1
  484. package/dist/router/resolution.js.map +0 -1
  485. package/dist/router/route-context.js.map +0 -1
  486. package/dist/router/route-matching.d.ts.map +0 -1
  487. package/dist/router/route-matching.js.map +0 -1
  488. package/dist/router/route-query.d.ts.map +0 -1
  489. package/dist/router/route-query.js.map +0 -1
  490. package/dist/router/store.d.ts.map +0 -1
  491. package/dist/router/store.js.map +0 -1
  492. package/dist/runtime/access.d.ts.map +0 -1
  493. package/dist/runtime/access.js.map +0 -1
  494. package/dist/runtime/child-scope.d.ts.map +0 -1
  495. package/dist/runtime/child-scope.js.map +0 -1
  496. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  497. package/dist/runtime/component-cleanup.js.map +0 -1
  498. package/dist/runtime/component-commit.js.map +0 -1
  499. package/dist/runtime/component-internal.d.ts.map +0 -1
  500. package/dist/runtime/component-internal.js.map +0 -1
  501. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  502. package/dist/runtime/component-lifecycle.js.map +0 -1
  503. package/dist/runtime/component-scope.d.ts.map +0 -1
  504. package/dist/runtime/component-scope.js.map +0 -1
  505. package/dist/runtime/context.d.ts.map +0 -1
  506. package/dist/runtime/context.js.map +0 -1
  507. package/dist/runtime/control.d.ts.map +0 -1
  508. package/dist/runtime/control.js.map +0 -1
  509. package/dist/runtime/derive.d.ts.map +0 -1
  510. package/dist/runtime/derive.js.map +0 -1
  511. package/dist/runtime/dev-namespace.d.ts.map +0 -1
  512. package/dist/runtime/dev-namespace.js.map +0 -1
  513. package/dist/runtime/effect.d.ts.map +0 -1
  514. package/dist/runtime/effect.js.map +0 -1
  515. package/dist/runtime/error-boundary.d.ts.map +0 -1
  516. package/dist/runtime/error-boundary.js.map +0 -1
  517. package/dist/runtime/events.d.ts.map +0 -1
  518. package/dist/runtime/events.js.map +0 -1
  519. package/dist/runtime/execution-model.d.ts.map +0 -1
  520. package/dist/runtime/execution-model.js.map +0 -1
  521. package/dist/runtime/fastlane.d.ts.map +0 -1
  522. package/dist/runtime/fastlane.js.map +0 -1
  523. package/dist/runtime/for-bench.d.ts.map +0 -1
  524. package/dist/runtime/for-bench.js.map +0 -1
  525. package/dist/runtime/for-internal.d.ts.map +0 -1
  526. package/dist/runtime/for-internal.js.map +0 -1
  527. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  528. package/dist/runtime/for-reconcile.js.map +0 -1
  529. package/dist/runtime/for-scopes.d.ts.map +0 -1
  530. package/dist/runtime/for-scopes.js.map +0 -1
  531. package/dist/runtime/for-signals.d.ts.map +0 -1
  532. package/dist/runtime/for-signals.js.map +0 -1
  533. package/dist/runtime/for-types.d.ts.map +0 -1
  534. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  535. package/dist/runtime/lifecycle-operations.js.map +0 -1
  536. package/dist/runtime/perf-metrics.d.ts.map +0 -1
  537. package/dist/runtime/perf-metrics.js.map +0 -1
  538. package/dist/runtime/portal.d.ts.map +0 -1
  539. package/dist/runtime/portal.js.map +0 -1
  540. package/dist/runtime/readable.d.ts.map +0 -1
  541. package/dist/runtime/readable.js.map +0 -1
  542. package/dist/runtime/resource-cell.js.map +0 -1
  543. package/dist/runtime/resource-operation.d.ts.map +0 -1
  544. package/dist/runtime/resource-operation.js.map +0 -1
  545. package/dist/runtime/runtime.d.ts.map +0 -1
  546. package/dist/runtime/runtime.js.map +0 -1
  547. package/dist/runtime/scheduler.d.ts.map +0 -1
  548. package/dist/runtime/scheduler.js.map +0 -1
  549. package/dist/runtime/selector-store.js.map +0 -1
  550. package/dist/runtime/selector.d.ts.map +0 -1
  551. package/dist/runtime/selector.js.map +0 -1
  552. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  553. package/dist/runtime/snapshot-source.js.map +0 -1
  554. package/dist/runtime/state.d.ts.map +0 -1
  555. package/dist/runtime/state.js.map +0 -1
  556. package/dist/ssg/batch-render.js.map +0 -1
  557. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  558. package/dist/ssg/create-static-gen.js.map +0 -1
  559. package/dist/ssg/generate-metadata.js.map +0 -1
  560. package/dist/ssg/generation-plan.js.map +0 -1
  561. package/dist/ssg/incremental-manifest.js.map +0 -1
  562. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  563. package/dist/ssg/route-utils.js.map +0 -1
  564. package/dist/ssg/static-routes.js.map +0 -1
  565. package/dist/ssg/types.d.ts.map +0 -1
  566. package/dist/ssg/write-static-files.js.map +0 -1
  567. package/dist/ssr/attrs.js.map +0 -1
  568. package/dist/ssr/boundaries.js.map +0 -1
  569. package/dist/ssr/component-runtime.js.map +0 -1
  570. package/dist/ssr/context.d.ts.map +0 -1
  571. package/dist/ssr/context.js.map +0 -1
  572. package/dist/ssr/errors.d.ts.map +0 -1
  573. package/dist/ssr/errors.js.map +0 -1
  574. package/dist/ssr/escape.js.map +0 -1
  575. package/dist/ssr/hydration-data.js.map +0 -1
  576. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  577. package/dist/ssr/hydration-verify.js.map +0 -1
  578. package/dist/ssr/index-internal.d.ts.map +0 -1
  579. package/dist/ssr/index-internal.js.map +0 -1
  580. package/dist/ssr/render-keys.js.map +0 -1
  581. package/dist/ssr/render-resolved.d.ts.map +0 -1
  582. package/dist/ssr/render-resolved.js.map +0 -1
  583. package/dist/ssr/render-sync.d.ts.map +0 -1
  584. package/dist/ssr/render-sync.js.map +0 -1
  585. package/dist/ssr/route-policy-resolution.js.map +0 -1
  586. package/dist/ssr/route-render.d.ts.map +0 -1
  587. package/dist/ssr/route-render.js.map +0 -1
  588. package/dist/ssr/sink.d.ts.map +0 -1
  589. package/dist/ssr/sink.js.map +0 -1
  590. package/dist/ssr/types.d.ts.map +0 -1
  591. package/dist/ssr/verify-hydration.js.map +0 -1
  592. package/dist/testing/index.d.ts.map +0 -1
  593. package/dist/testing/index.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { enqueueRuntimeLane } from "./access.js";
2
2
  import { withFineGrainedReadTracking } from "./readable.js";
3
- import { incDevCounter } from "./dev-namespace.js";
4
- //#region src/runtime/effect.ts
3
+ import "./dev-namespace.js";
4
+ const SOURCE_EFFECTS = Symbol("askr.source-effects");
5
5
  const effectSources = /* @__PURE__ */ new WeakMap();
6
6
  const dirtyEffectsByLane = {
7
7
  derived: /* @__PURE__ */ new Set(),
@@ -28,51 +28,124 @@ const LANE_FLUSH_TASKS = {
28
28
  reactive: () => flushLaneEffects("reactive"),
29
29
  post: () => flushLaneEffects("post")
30
30
  };
31
+ function isEffectReadSourceCollection(sources) {
32
+ return Array.isArray(sources) || sources instanceof Set;
33
+ }
34
+ function effectReadSourceCollectionHas(sources, source) {
35
+ return Array.isArray(sources) ? sources.includes(source) : sources.has(source);
36
+ }
37
+ function getRegisteredEffects(source) {
38
+ return source[SOURCE_EFFECTS] ?? effectSources.get(source);
39
+ }
40
+ function setRegisteredEffects(source, registered) {
41
+ const effectSource = source;
42
+ try {
43
+ effectSource[SOURCE_EFFECTS] = registered;
44
+ if (effectSource[SOURCE_EFFECTS] === registered) return;
45
+ } catch {}
46
+ effectSources.set(source, registered);
47
+ }
48
+ function deleteRegisteredEffects(source) {
49
+ const effectSource = source;
50
+ if (effectSource[SOURCE_EFFECTS] !== void 0) try {
51
+ delete effectSource[SOURCE_EFFECTS];
52
+ return;
53
+ } catch {}
54
+ effectSources.delete(source);
55
+ }
31
56
  function registerEffectSource(source, effect) {
32
- let effects = effectSources.get(source);
33
- if (!effects) {
34
- effects = /* @__PURE__ */ new Set();
35
- effectSources.set(source, effects);
57
+ const registered = getRegisteredEffects(source);
58
+ if (!registered) {
59
+ setRegisteredEffects(source, effect);
60
+ return;
61
+ }
62
+ if (registered instanceof Set) {
63
+ registered.add(effect);
64
+ return;
36
65
  }
37
- effects.add(effect);
66
+ if (registered === effect) return;
67
+ setRegisteredEffects(source, /* @__PURE__ */ new Set([registered, effect]));
38
68
  }
39
69
  function unregisterEffectSource(source, effect) {
40
- effectSources.get(source)?.delete(effect);
70
+ const registered = getRegisteredEffects(source);
71
+ if (!registered) return;
72
+ if (!(registered instanceof Set)) {
73
+ if (registered === effect) deleteRegisteredEffects(source);
74
+ return;
75
+ }
76
+ registered.delete(effect);
77
+ if (registered.size === 0) deleteRegisteredEffects(source);
78
+ else if (registered.size === 1) setRegisteredEffects(source, registered.values().next().value);
41
79
  }
42
80
  function clearEffectSubscriptions(effect) {
43
- for (const source of effect.readSources) unregisterEffectSource(source, effect);
44
- effect.readSources.clear();
81
+ const sources = effect.readSources;
82
+ if (isEffectReadSourceCollection(sources)) {
83
+ for (const source of sources) unregisterEffectSource(source, effect);
84
+ if (sources instanceof Set) sources.clear();
85
+ else sources.length = 0;
86
+ } else if (sources) unregisterEffectSource(sources, effect);
87
+ if (effect.readSource2) unregisterEffectSource(effect.readSource2, effect);
88
+ effect.readSources = null;
89
+ effect.readSource2 = null;
45
90
  }
46
- function normalizeNextSources(previousSources, pendingSources) {
47
- if (previousSources.size === pendingSources.size) {
48
- let same = true;
49
- for (const source of previousSources) if (!pendingSources.has(source)) {
50
- same = false;
51
- break;
52
- }
53
- if (same) return previousSources;
91
+ function evaluateAndCommitEffect(effect) {
92
+ effect._pendingFineGrainedReadSource = null;
93
+ effect._pendingFineGrainedReadSources = null;
94
+ try {
95
+ const value = withFineGrainedReadTracking(effect, effect.compute);
96
+ const pendingAdditionalSources = effect._pendingFineGrainedReadSources;
97
+ const hasPendingCollection = isEffectReadSourceCollection(pendingAdditionalSources);
98
+ commitEffectResult(effect, value, hasPendingCollection ? pendingAdditionalSources : effect._pendingFineGrainedReadSource, pendingAdditionalSources && !hasPendingCollection ? pendingAdditionalSources : null);
99
+ } finally {
100
+ effect._pendingFineGrainedReadSource = null;
101
+ effect._pendingFineGrainedReadSources = null;
54
102
  }
55
- return new Set(pendingSources);
56
- }
57
- function evaluateEffect(effect) {
58
- const pendingSources = /* @__PURE__ */ new Set();
59
- incDevCounter("effectRuns");
60
- return {
61
- value: withFineGrainedReadTracking(pendingSources, () => effect.compute()),
62
- nextSources: normalizeNextSources(effect.readSources, pendingSources)
63
- };
64
103
  }
65
- function commitEffectSubscriptions(effect, nextSources) {
104
+ function commitEffectSubscriptions(effect, nextSources, nextSource2) {
66
105
  const previousSources = effect.readSources;
67
- if (previousSources === nextSources) return;
68
- for (const source of previousSources) if (!nextSources.has(source)) unregisterEffectSource(source, effect);
69
- for (const source of nextSources) if (!previousSources.has(source)) registerEffectSource(source, effect);
106
+ const previousSource2 = effect.readSource2;
107
+ if (previousSources === nextSources && previousSource2 === nextSource2) return;
108
+ const previousCollection = isEffectReadSourceCollection(previousSources);
109
+ const nextCollection = isEffectReadSourceCollection(nextSources);
110
+ if (!previousCollection && !nextCollection) {
111
+ if (previousSources && previousSources !== nextSources && previousSources !== nextSource2) unregisterEffectSource(previousSources, effect);
112
+ if (previousSource2 && previousSource2 !== nextSources && previousSource2 !== nextSource2) unregisterEffectSource(previousSource2, effect);
113
+ if (nextSources && nextSources !== previousSources && nextSources !== previousSource2) registerEffectSource(nextSources, effect);
114
+ if (nextSource2 && nextSource2 !== previousSources && nextSource2 !== previousSource2) registerEffectSource(nextSource2, effect);
115
+ effect.readSources = nextSources;
116
+ effect.readSource2 = nextSource2;
117
+ return;
118
+ }
119
+ const stateHas = (sources, source2, source) => isEffectReadSourceCollection(sources) ? effectReadSourceCollectionHas(sources, source) : sources === source || source2 === source;
120
+ if ((previousCollection ? Array.isArray(previousSources) ? previousSources.length : previousSources.size : (previousSources ? 1 : 0) + (previousSource2 ? 1 : 0)) === (nextCollection ? Array.isArray(nextSources) ? nextSources.length : nextSources.size : (nextSources ? 1 : 0) + (nextSource2 ? 1 : 0))) {
121
+ let same = true;
122
+ if (previousCollection) {
123
+ for (const source of previousSources) if (!stateHas(nextSources, nextSource2, source)) {
124
+ same = false;
125
+ break;
126
+ }
127
+ } else same = (!previousSources || stateHas(nextSources, nextSource2, previousSources)) && (!previousSource2 || stateHas(nextSources, nextSource2, previousSource2));
128
+ if (same) return;
129
+ }
130
+ if (previousCollection) {
131
+ for (const source of previousSources) if (!stateHas(nextSources, nextSource2, source)) unregisterEffectSource(source, effect);
132
+ } else {
133
+ if (previousSources && !stateHas(nextSources, nextSource2, previousSources)) unregisterEffectSource(previousSources, effect);
134
+ if (previousSource2 && !stateHas(nextSources, nextSource2, previousSource2)) unregisterEffectSource(previousSource2, effect);
135
+ }
136
+ if (nextCollection) {
137
+ for (const source of nextSources) if (!stateHas(previousSources, previousSource2, source)) registerEffectSource(source, effect);
138
+ } else {
139
+ if (nextSources && !stateHas(previousSources, previousSource2, nextSources)) registerEffectSource(nextSources, effect);
140
+ if (nextSource2 && !stateHas(previousSources, previousSource2, nextSource2)) registerEffectSource(nextSource2, effect);
141
+ }
70
142
  effect.readSources = nextSources;
143
+ effect.readSource2 = nextSource2;
71
144
  }
72
- function commitEffectResult(effect, value, nextSources) {
145
+ function commitEffectResult(effect, value, nextSources, nextSource2) {
73
146
  const previousValue = effect.lastValue;
74
147
  if (!effect.hasValue || !effect.equals(previousValue, value)) effect.commit(value, effect.hasValue ? previousValue : void 0);
75
- commitEffectSubscriptions(effect, nextSources);
148
+ commitEffectSubscriptions(effect, nextSources, nextSource2);
76
149
  effect.lastValue = value;
77
150
  effect.hasValue = true;
78
151
  }
@@ -100,8 +173,7 @@ function flushLaneEffects(lane) {
100
173
  continue;
101
174
  }
102
175
  try {
103
- const { value, nextSources } = evaluateEffect(effect);
104
- commitEffectResult(effect, value, nextSources);
176
+ evaluateAndCommitEffect(effect);
105
177
  } catch (error) {
106
178
  effect.onError?.(error);
107
179
  }
@@ -117,61 +189,72 @@ function unscheduleEffect(effect) {
117
189
  dirtyEffectsByLane[effect.lane].delete(effect);
118
190
  }
119
191
  function recomputeEffectNow(effect) {
120
- const { value, nextSources } = evaluateEffect(effect);
121
- commitEffectResult(effect, value, nextSources);
192
+ evaluateAndCommitEffect(effect);
122
193
  }
123
194
  function markFineGrainedEffectsDirtySource(source) {
124
- const effects = effectSources.get(source);
125
- if (!effects || effects.size === 0) return;
195
+ const registered = getRegisteredEffects(source);
196
+ if (!registered) return;
126
197
  dirtyLaneState.derived = false;
127
198
  dirtyLaneState.component = false;
128
199
  dirtyLaneState.reactive = false;
129
200
  dirtyLaneState.post = false;
130
- for (const effect of effects) {
131
- if (!effect.isActive) continue;
201
+ const markDirty = (effect) => {
202
+ if (!effect.isActive) return;
132
203
  const lane = effect.lane;
133
204
  dirtyEffectsByLane[lane].add(effect);
134
205
  dirtyLaneState[lane] = true;
135
- }
206
+ };
207
+ if (registered instanceof Set) for (const effect of registered) markDirty(effect);
208
+ else markDirty(registered);
136
209
  if (dirtyLaneState.derived) scheduleLaneFlush("derived");
137
210
  if (dirtyLaneState.component) scheduleLaneFlush("component");
138
211
  if (dirtyLaneState.reactive) scheduleLaneFlush("reactive");
139
212
  if (dirtyLaneState.post) scheduleLaneFlush("post");
140
213
  }
214
+ var FineGrainedEffectImpl = class {
215
+ constructor(lane, compute, commit, equals, onError, owner) {
216
+ this.readSources = null;
217
+ this.readSource2 = null;
218
+ this._pendingFineGrainedReadSource = null;
219
+ this._pendingFineGrainedReadSources = null;
220
+ this.isActive = true;
221
+ this.hasValue = false;
222
+ this.lastValue = void 0;
223
+ this._owner = owner;
224
+ this.lane = lane;
225
+ this.compute = compute;
226
+ this.commit = commit;
227
+ this.equals = equals;
228
+ this.onError = onError;
229
+ }
230
+ cleanup() {
231
+ if (!this.isActive) return;
232
+ this.isActive = false;
233
+ unscheduleEffect(this);
234
+ clearEffectSubscriptions(this);
235
+ }
236
+ updateCompute(nextCompute) {
237
+ if (!this.isActive) return;
238
+ this.compute = nextCompute;
239
+ unscheduleEffect(this);
240
+ recomputeEffectNow(this);
241
+ }
242
+ flush() {
243
+ if (!this.isActive) return;
244
+ unscheduleEffect(this);
245
+ recomputeEffectNow(this);
246
+ }
247
+ };
141
248
  function createFineGrainedEffect(options) {
142
- const effect = {
143
- lane: options.lane,
144
- compute: options.compute,
145
- commit: options.commit,
146
- equals: options.equals ?? Object.is,
147
- readSources: /* @__PURE__ */ new Set(),
148
- isActive: true,
149
- hasValue: false,
150
- lastValue: void 0,
151
- onError: options.onError
152
- };
249
+ const effect = new FineGrainedEffectImpl(options.lane, options.compute, options.commit, options.equals ?? Object.is, options.onError, options._owner);
153
250
  recomputeEffectNow(effect);
154
- return {
155
- cleanup() {
156
- if (!effect.isActive) return;
157
- effect.isActive = false;
158
- unscheduleEffect(effect);
159
- clearEffectSubscriptions(effect);
160
- },
161
- updateCompute(nextCompute) {
162
- if (!effect.isActive) return;
163
- effect.compute = nextCompute;
164
- unscheduleEffect(effect);
165
- recomputeEffectNow(effect);
166
- },
167
- flush() {
168
- if (!effect.isActive) return;
169
- unscheduleEffect(effect);
170
- recomputeEffectNow(effect);
171
- }
172
- };
251
+ return effect;
252
+ }
253
+ /** @internal Allocation-sensitive variant for shared renderer callbacks. */
254
+ function createOwnedFineGrainedEffect(lane, compute, commit, equals, onError, owner) {
255
+ const effect = new FineGrainedEffectImpl(lane, compute, commit, equals, onError, owner);
256
+ recomputeEffectNow(effect);
257
+ return effect;
173
258
  }
174
259
  //#endregion
175
- export { createFineGrainedEffect, markFineGrainedEffectsDirtySource };
176
-
177
- //# sourceMappingURL=effect.js.map
260
+ export { createFineGrainedEffect, createOwnedFineGrainedEffect, markFineGrainedEffectsDirtySource };
@@ -1,5 +1,4 @@
1
1
  import { ComponentInstance } from "./component-internal.js";
2
2
  //#region src/runtime/error-boundary.d.ts
3
3
  declare function createBoundaryReset(instance: ComponentInstance): () => void;
4
- declare function reportBoundaryError(instance: ComponentInstance, error: unknown, onError?: (error: unknown) => void): void;
5
- //# sourceMappingURL=error-boundary.d.ts.map
4
+ declare function reportBoundaryError(instance: ComponentInstance, error: unknown, onError?: (error: unknown) => void): void;
@@ -27,5 +27,3 @@ function reportBoundaryError(instance, error, onError) {
27
27
  }
28
28
  //#endregion
29
29
  export { createBoundaryReset, reportBoundaryError };
30
-
31
- //# sourceMappingURL=error-boundary.js.map
@@ -35,7 +35,6 @@ interface DelegatedEventMap {
35
35
  interface DelegatedHandler {
36
36
  handler: EventListener;
37
37
  original: EventListener;
38
- element: Element;
39
38
  container: Element;
40
39
  eventName: string;
41
40
  options?: AddEventListenerOptions;
@@ -45,6 +44,8 @@ declare function disableEventDelegation(): void;
45
44
  declare function enableEventDelegation(container?: Element): void;
46
45
  declare function setGlobalDelegationContainer(container: Element): void;
47
46
  declare function addDelegatedListener(element: Element, eventName: string, handler: EventListener, originalHandler: EventListener, options?: AddEventListenerOptions): void;
47
+ /** @internal Attach a delegated handler to a newly cloned element. */
48
+ declare function addFreshDelegatedListener(element: Element, eventName: string, handler: EventListener, originalHandler: EventListener, options?: AddEventListenerOptions): void;
48
49
  declare function updateDelegatedListener(element: Element, eventName: string, handler: EventListener, originalHandler: EventListener, options?: AddEventListenerOptions): boolean;
49
50
  declare function removeDelegatedListener(element: Element, eventName: string): void;
50
51
  declare function getDelegatedHandlerForElement(element: Element, eventName: string): DelegatedHandler | undefined;
@@ -54,5 +55,4 @@ declare function clearDelegatedHandlersForElement(element: Element): void;
54
55
  declare function getDelegatedEventNames(): readonly (keyof DelegatedEventMap)[];
55
56
  declare function isDelegatedEvent(eventName: string): boolean;
56
57
  //#endregion
57
- export { DelegatedEventMap };
58
- //# sourceMappingURL=events.d.ts.map
58
+ export { DelegatedEventMap };
@@ -1,18 +1,7 @@
1
1
  import { logger } from "../common/logger.js";
2
- import { incrementPerfMetric } from "./perf-metrics.js";
2
+ import "./perf-metrics.js";
3
3
  import { runRuntimeHandlerScope } from "./access.js";
4
- import { incDevCounter } from "./dev-namespace.js";
5
- //#region src/runtime/events.ts
6
- /**
7
- * Event delegation system for Askr
8
- *
9
- * Provides efficient event handling by attaching listeners to a container
10
- * instead of individual elements. This significantly reduces memory usage
11
- * and improves performance when many elements have the same event type.
12
- *
13
- * Delegated handling is enabled by default. Tests and internal runtime code
14
- * can still disable or re-enable it when they need to exercise both modes.
15
- */
4
+ import "./dev-namespace.js";
16
5
  const DELEGATED_EVENTS = [
17
6
  "click",
18
7
  "dblclick",
@@ -36,56 +25,63 @@ const DELEGATED_EVENTS = [
36
25
  "touchmove",
37
26
  "touchcancel"
38
27
  ];
39
- const delegatedHandlers = /* @__PURE__ */ new WeakMap();
28
+ const DELEGATED_HANDLERS = Symbol("askr.delegated-handlers");
29
+ const delegatedHandlerFallback = /* @__PURE__ */ new WeakMap();
30
+ function getDelegatedHandlerStore(element) {
31
+ return element[DELEGATED_HANDLERS] ?? delegatedHandlerFallback.get(element);
32
+ }
33
+ function setDelegatedHandlerStore(element, store) {
34
+ const host = element;
35
+ try {
36
+ host[DELEGATED_HANDLERS] = store;
37
+ if (host[DELEGATED_HANDLERS] === store) return;
38
+ } catch {}
39
+ delegatedHandlerFallback.set(element, store);
40
+ }
41
+ function deleteDelegatedHandlerStore(element) {
42
+ const host = element;
43
+ if (host[DELEGATED_HANDLERS] !== void 0) try {
44
+ delete host[DELEGATED_HANDLERS];
45
+ return;
46
+ } catch {}
47
+ delegatedHandlerFallback.delete(element);
48
+ }
40
49
  let eventDelegationEnabled = true;
41
50
  const containerDelegatedListeners = /* @__PURE__ */ new Map();
42
- const containerDelegatedListenerUsage = /* @__PURE__ */ new Map();
43
51
  function isEventDelegationEnabled() {
44
52
  return eventDelegationEnabled;
45
53
  }
46
- function incrementContainerListenerUsage(container, eventName) {
47
- let usage = containerDelegatedListenerUsage.get(container);
48
- if (!usage) {
49
- usage = /* @__PURE__ */ new Map();
50
- containerDelegatedListenerUsage.set(container, usage);
51
- }
52
- usage.set(eventName, (usage.get(eventName) ?? 0) + 1);
53
- }
54
54
  function decrementContainerListenerUsage(entry) {
55
- const usage = containerDelegatedListenerUsage.get(entry.container);
56
- if (!usage) return;
57
- const nextCount = (usage.get(entry.eventName) ?? 0) - 1;
58
- if (nextCount > 0) {
59
- usage.set(entry.eventName, nextCount);
60
- return;
61
- }
62
- usage.delete(entry.eventName);
63
55
  const listeners = containerDelegatedListeners.get(entry.container);
64
56
  const listener = listeners?.get(entry.eventName);
65
- if (listener) {
66
- entry.container.removeEventListener(entry.eventName, listener);
67
- listeners?.delete(entry.eventName);
68
- }
57
+ if (!listener) return;
58
+ listener.usage -= 1;
59
+ if (listener.usage > 0) return;
60
+ entry.container.removeEventListener(entry.eventName, listener.handler);
61
+ listeners?.delete(entry.eventName);
69
62
  if (listeners?.size === 0) containerDelegatedListeners.delete(entry.container);
70
- if (usage.size === 0) containerDelegatedListenerUsage.delete(entry.container);
71
63
  }
72
64
  function getDelegationContainer() {
73
65
  if (typeof document !== "undefined") return document.body;
74
66
  return null;
75
67
  }
76
- function attachDelegatedListener(container, element, eventName, handler, originalHandler, options) {
77
- const hadHandler = !!getDelegatedHandlerForElement(element, eventName);
78
- if (!containerDelegatedListeners.has(container)) containerDelegatedListeners.set(container, /* @__PURE__ */ new Map());
79
- const containerListeners = containerDelegatedListeners.get(container);
80
- if (!containerListeners.has(eventName)) {
68
+ function attachDelegatedListener(container, element, eventName, handler, originalHandler, options, fresh = false) {
69
+ const existingStore = fresh ? void 0 : getDelegatedHandlerStore(element);
70
+ const hadHandler = existingStore instanceof Map ? existingStore.has(eventName) : existingStore?.eventName === eventName;
71
+ let containerListeners = containerDelegatedListeners.get(container);
72
+ if (!containerListeners) {
73
+ containerListeners = /* @__PURE__ */ new Map();
74
+ containerDelegatedListeners.set(container, containerListeners);
75
+ }
76
+ let containerListener = containerListeners.get(eventName);
77
+ if (!containerListener) {
81
78
  const delegatedHandler = (e) => {
82
79
  const target = e.target;
83
80
  if (!target) return;
84
81
  runRuntimeHandlerScope(() => {
85
82
  let current = target;
86
83
  while (current && current !== container) {
87
- incrementPerfMetric("delegatedAncestorHops");
88
- const store = delegatedHandlers.get(current);
84
+ const store = getDelegatedHandlerStore(current);
89
85
  const entry = !store ? void 0 : store instanceof Map ? store.get(eventName) : store.eventName === eventName ? store : void 0;
90
86
  if (entry) try {
91
87
  entry.handler(e);
@@ -99,22 +95,24 @@ function attachDelegatedListener(container, element, eventName, handler, origina
99
95
  };
100
96
  const listenerOptions = getPassiveOptions(eventName) ?? options;
101
97
  container.addEventListener(eventName, delegatedHandler, listenerOptions);
102
- containerListeners.set(eventName, delegatedHandler);
98
+ containerListener = {
99
+ handler: delegatedHandler,
100
+ usage: 0
101
+ };
102
+ containerListeners.set(eventName, containerListener);
103
103
  }
104
104
  setDelegatedHandlerForElement(element, {
105
105
  handler,
106
106
  original: originalHandler,
107
- element,
108
107
  container,
109
108
  eventName,
110
109
  options
111
- });
112
- if (!hadHandler) incrementContainerListenerUsage(container, eventName);
110
+ }, existingStore);
111
+ if (!hadHandler) containerListener.usage += 1;
113
112
  }
114
- function setDelegatedHandlerForElement(element, entry) {
115
- const existing = delegatedHandlers.get(element);
113
+ function setDelegatedHandlerForElement(element, entry, existing = getDelegatedHandlerStore(element)) {
116
114
  if (!existing) {
117
- delegatedHandlers.set(element, entry);
115
+ setDelegatedHandlerStore(element, entry);
118
116
  return;
119
117
  }
120
118
  if (existing instanceof Map) {
@@ -122,13 +120,13 @@ function setDelegatedHandlerForElement(element, entry) {
122
120
  return;
123
121
  }
124
122
  if (existing.eventName === entry.eventName) {
125
- delegatedHandlers.set(element, entry);
123
+ setDelegatedHandlerStore(element, entry);
126
124
  return;
127
125
  }
128
126
  const next = /* @__PURE__ */ new Map();
129
127
  next.set(existing.eventName, existing);
130
128
  next.set(entry.eventName, entry);
131
- delegatedHandlers.set(element, next);
129
+ setDelegatedHandlerStore(element, next);
132
130
  }
133
131
  function getPassiveOptions(eventName) {
134
132
  if (eventName === "wheel" || eventName === "scroll" || eventName.startsWith("touch")) return { passive: true };
@@ -136,9 +134,14 @@ function getPassiveOptions(eventName) {
136
134
  function addDelegatedListener(element, eventName, handler, originalHandler, options) {
137
135
  const container = getDelegationContainer();
138
136
  if (!container) return;
139
- incDevCounter("listenerAdds");
140
137
  attachDelegatedListener(container, element, eventName, handler, originalHandler, options);
141
138
  }
139
+ /** @internal Attach a delegated handler to a newly cloned element. */
140
+ function addFreshDelegatedListener(element, eventName, handler, originalHandler, options) {
141
+ const container = getDelegationContainer();
142
+ if (!container) return;
143
+ attachDelegatedListener(container, element, eventName, handler, originalHandler, options, true);
144
+ }
142
145
  function updateDelegatedListener(element, eventName, handler, originalHandler, options) {
143
146
  const existing = getDelegatedHandlerForElement(element, eventName);
144
147
  if (!existing) return false;
@@ -153,52 +156,46 @@ function updateDelegatedListener(element, eventName, handler, originalHandler, o
153
156
  return true;
154
157
  }
155
158
  function removeDelegatedListener(element, eventName) {
156
- const existing = delegatedHandlers.get(element);
159
+ const existing = getDelegatedHandlerStore(element);
157
160
  if (!existing) return;
158
161
  if (existing instanceof Map) {
159
- if (existing.has(eventName)) {
160
- incDevCounter("listenerRemoves");
161
- decrementContainerListenerUsage(existing.get(eventName));
162
- }
162
+ if (existing.has(eventName)) decrementContainerListenerUsage(existing.get(eventName));
163
163
  existing.delete(eventName);
164
164
  if (existing.size === 0) {
165
- delegatedHandlers.delete(element);
165
+ deleteDelegatedHandlerStore(element);
166
166
  return;
167
167
  }
168
168
  if (existing.size === 1) {
169
169
  const only = existing.values().next().value;
170
- delegatedHandlers.set(element, only);
170
+ setDelegatedHandlerStore(element, only);
171
171
  }
172
172
  return;
173
173
  }
174
174
  if (existing.eventName === eventName) {
175
- incDevCounter("listenerRemoves");
176
175
  decrementContainerListenerUsage(existing);
177
- delegatedHandlers.delete(element);
176
+ deleteDelegatedHandlerStore(element);
178
177
  }
179
178
  }
180
179
  function getDelegatedHandlerForElement(element, eventName) {
181
- const store = delegatedHandlers.get(element);
180
+ const store = getDelegatedHandlerStore(element);
182
181
  if (!store) return void 0;
183
182
  if (store instanceof Map) return store.get(eventName);
184
183
  return store.eventName === eventName ? store : void 0;
185
184
  }
186
185
  function getDelegatedHandlersForElement(element) {
187
- const store = delegatedHandlers.get(element);
186
+ const store = getDelegatedHandlerStore(element);
188
187
  if (!store) return void 0;
189
188
  if (store instanceof Map) return store;
190
189
  return /* @__PURE__ */ new Map([[store.eventName, store]]);
191
190
  }
192
191
  function clearDelegatedHandlersForElement(element) {
193
- const existing = delegatedHandlers.get(element);
192
+ const existing = getDelegatedHandlerStore(element);
194
193
  if (existing instanceof Map) for (const entry of existing.values()) decrementContainerListenerUsage(entry);
195
194
  else if (existing) decrementContainerListenerUsage(existing);
196
- delegatedHandlers.delete(element);
195
+ deleteDelegatedHandlerStore(element);
197
196
  }
198
197
  function isDelegatedEvent(eventName) {
199
198
  return DELEGATED_EVENTS.includes(eventName);
200
199
  }
201
200
  //#endregion
202
- export { addDelegatedListener, clearDelegatedHandlersForElement, getDelegatedHandlerForElement, getDelegatedHandlersForElement, isDelegatedEvent, isEventDelegationEnabled, removeDelegatedListener, updateDelegatedListener };
203
-
204
- //# sourceMappingURL=events.js.map
201
+ export { addDelegatedListener, addFreshDelegatedListener, clearDelegatedHandlersForElement, getDelegatedHandlerForElement, getDelegatedHandlersForElement, isDelegatedEvent, isEventDelegationEnabled, removeDelegatedListener, updateDelegatedListener };
@@ -3,5 +3,4 @@ type ExecutionModel = 'spa' | 'islands' | 'ssr';
3
3
  declare function getExecutionModel(): ExecutionModel | undefined;
4
4
  declare function assertExecutionModel(model: ExecutionModel): void;
5
5
  //#endregion
6
- export { ExecutionModel };
7
- //# sourceMappingURL=execution-model.d.ts.map
6
+ export { ExecutionModel };
@@ -11,5 +11,3 @@ function assertExecutionModel(model) {
11
11
  }
12
12
  //#endregion
13
13
  export { assertExecutionModel, getExecutionModel };
14
-
15
- //# sourceMappingURL=execution-model.js.map
@@ -30,5 +30,4 @@ declare function classifyUpdate(instance: ComponentInstance, result: unknown): {
30
30
  reason?: undefined;
31
31
  };
32
32
  declare function commitReorderOnly(instance: ComponentInstance, result: unknown): boolean;
33
- declare function tryRuntimeFastLaneSync(instance: ComponentInstance, result: unknown): boolean;
34
- //# sourceMappingURL=fastlane.d.ts.map
33
+ declare function tryRuntimeFastLaneSync(instance: ComponentInstance, result: unknown): boolean;
@@ -171,5 +171,3 @@ function tryRuntimeFastLaneSync(instance, result) {
171
171
  setRuntimeBulkCommitProbe(isBulkCommitActive);
172
172
  //#endregion
173
173
  export { classifyUpdate, commitReorderOnly, enterBulkCommit, exitBulkCommit, isBulkCommitActive, markFastPathApplied, tryRuntimeFastLaneSync };
174
-
175
- //# sourceMappingURL=fastlane.js.map
@@ -37,5 +37,4 @@ declare const getBenchMetrics: () => BenchMetrics;
37
37
  declare const flushBenchMetrics: () => void;
38
38
  declare const isBenchBuildEnabled: () => boolean;
39
39
  //#endregion
40
- export { BenchEvent, BenchMetrics };
41
- //# sourceMappingURL=for-bench.d.ts.map
40
+ export { BenchEvent, BenchMetrics };