@askrjs/askr 0.0.51 → 0.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/README.md +5 -1
  2. package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +190 -20
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.js +103 -0
  5. package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -3
  6. package/dist/benchmark.d.ts +7 -4
  7. package/dist/benchmark.js +63 -13
  8. package/dist/boot/index.d.ts +62 -4
  9. package/dist/boot/index.js +1 -194
  10. package/dist/boot-j2KoN6ss.js +647 -0
  11. package/dist/cleanup-COv77su2.js +487 -0
  12. package/dist/component-internal-B3z7GXlD.js +614 -0
  13. package/dist/component-lifecycle-CO4hXlP4.js +357 -0
  14. package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +35 -9
  15. package/dist/component-scope-CvPba6O6.d.ts +12 -0
  16. package/dist/components/index.d.ts +17 -2
  17. package/dist/components/index.js +39 -1
  18. package/dist/compose-ref-Cc_YkUpM.js +92 -0
  19. package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -2
  20. package/dist/control/index.d.ts +1 -3
  21. package/dist/control/index.js +1 -3
  22. package/dist/control-BQvNVfAd.d.ts +436 -0
  23. package/dist/control-BYyLTFyw.js +165 -0
  24. package/dist/control-Bf4Wkdvv.d.ts +9 -0
  25. package/dist/{common/control.js → control-DhFRTIoE.js} +1 -3
  26. package/dist/data/index.d.ts +2 -6
  27. package/dist/data/index.js +4 -5
  28. package/dist/data-DnxnDxD-.js +559 -0
  29. package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +35 -36
  30. package/dist/deferred-lKE8uR0z.js +386 -0
  31. package/dist/effect-BwnIvLah.js +260 -0
  32. package/dist/fastlane-Dw8SOBr9.js +343 -0
  33. package/dist/for-internal-BKf_Tnv1.js +1563 -0
  34. package/dist/foundations/icon/index.d.ts +68 -2
  35. package/dist/foundations/icon/index.js +85 -1
  36. package/dist/foundations/index.d.ts +2 -5
  37. package/dist/foundations/index.js +2 -5
  38. package/dist/foundations/interactions/index.d.ts +264 -6
  39. package/dist/foundations/interactions/index.js +1 -6
  40. package/dist/foundations/state/index.d.ts +32 -1
  41. package/dist/foundations/state/index.js +78 -1
  42. package/dist/foundations/structures/index.d.ts +2 -7
  43. package/dist/foundations/structures/index.js +2 -7
  44. package/dist/foundations/utilities/index.d.ts +2 -6
  45. package/dist/foundations/utilities/index.js +2 -5
  46. package/dist/fx/index.d.ts +190 -3
  47. package/dist/fx/index.js +454 -4
  48. package/dist/index-31Uoz_NS.d.ts +239 -0
  49. package/dist/index-Bki2rqcr.d.ts +233 -0
  50. package/dist/index-BnU0NPwM.d.ts +101 -0
  51. package/dist/index-D73jgYx1.d.ts +48 -0
  52. package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -9
  53. package/dist/index-SJXJkssx.d.ts +44 -0
  54. package/dist/index.d.ts +8 -13
  55. package/dist/index.js +150 -17
  56. package/dist/interactions-w7gQN4ha.js +280 -0
  57. package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -3
  58. package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -6
  59. package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -3
  60. package/dist/jsx-dev-runtime.d.ts +17 -5
  61. package/dist/jsx-dev-runtime.js +3 -10
  62. package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
  63. package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
  64. package/dist/jsx-runtime.d.ts +3 -22
  65. package/dist/jsx-runtime.js +17 -20
  66. package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +9 -11
  67. package/dist/navigate-BVDCzOuB.d.ts +34 -0
  68. package/dist/navigate-CmPLSXyw.js +1449 -0
  69. package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +124 -35
  70. package/dist/query-registry-CQIT4mXr.js +73 -0
  71. package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -8
  72. package/dist/renderer-DzPjeLby.js +6197 -0
  73. package/dist/resource-operation-CEzfpnDk.js +276 -0
  74. package/dist/resources/index.d.ts +42 -3
  75. package/dist/resources/index.js +3 -4
  76. package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -3
  77. package/dist/route-matching-vJpvLVbX.js +515 -0
  78. package/dist/router/index.d.ts +166 -14
  79. package/dist/router/index.js +150 -12
  80. package/dist/{common/router.d.ts → router-CeYvjj5_.d.ts} +72 -29
  81. package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -3
  82. package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -4
  83. package/dist/{runtime/selector.js → selector-DafVYzV4.js} +35 -20
  84. package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -3
  85. package/dist/ssg/index.d.ts +252 -4
  86. package/dist/ssg/index.js +857 -1
  87. package/dist/ssr/index.d.ts +225 -8
  88. package/dist/ssr/index.js +3 -6
  89. package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -3
  90. package/dist/ssr-D3t80Rc0.js +1413 -0
  91. package/dist/{runtime/state.js → state-DPl8lffD.js} +4 -8
  92. package/dist/structures-DUB3HchX.js +221 -0
  93. package/dist/testing/index.d.ts +4 -4
  94. package/dist/testing/index.js +2 -7
  95. package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -6
  96. package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -3
  97. package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -4
  98. package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -4
  99. package/package.json +63 -45
  100. package/dist/bench/components/benchmark-row.d.ts +0 -20
  101. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  102. package/dist/bench/components/benchmark-row.js +0 -42
  103. package/dist/bench/components/benchmark-row.js.map +0 -1
  104. package/dist/bench/components/benchmark-table.js +0 -25
  105. package/dist/bench/components/benchmark-table.js.map +0 -1
  106. package/dist/benchmark.d.ts.map +0 -1
  107. package/dist/benchmark.js.map +0 -1
  108. package/dist/bin/askr-ssg.d.ts +0 -28
  109. package/dist/bin/askr-ssg.d.ts.map +0 -1
  110. package/dist/bin/askr-ssg.js +0 -171
  111. package/dist/bin/askr-ssg.js.map +0 -1
  112. package/dist/boot/hydration.js +0 -140
  113. package/dist/boot/hydration.js.map +0 -1
  114. package/dist/boot/index.d.ts.map +0 -1
  115. package/dist/boot/index.js.map +0 -1
  116. package/dist/boot/root-lifecycle.d.ts +0 -15
  117. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  118. package/dist/boot/root-lifecycle.js +0 -205
  119. package/dist/boot/root-lifecycle.js.map +0 -1
  120. package/dist/boot/route-startup.js +0 -45
  121. package/dist/boot/route-startup.js.map +0 -1
  122. package/dist/boot/types.d.ts +0 -62
  123. package/dist/boot/types.d.ts.map +0 -1
  124. package/dist/common/attr-names.js.map +0 -1
  125. package/dist/common/component.d.ts +0 -19
  126. package/dist/common/component.d.ts.map +0 -1
  127. package/dist/common/control.d.ts +0 -13
  128. package/dist/common/control.d.ts.map +0 -1
  129. package/dist/common/control.js.map +0 -1
  130. package/dist/common/env.js +0 -47
  131. package/dist/common/env.js.map +0 -1
  132. package/dist/common/error-boundary.d.ts +0 -16
  133. package/dist/common/error-boundary.d.ts.map +0 -1
  134. package/dist/common/invariant.js +0 -17
  135. package/dist/common/invariant.js.map +0 -1
  136. package/dist/common/jsx.d.ts +0 -23
  137. package/dist/common/jsx.d.ts.map +0 -1
  138. package/dist/common/jsx.js.map +0 -1
  139. package/dist/common/logger.js +0 -36
  140. package/dist/common/logger.js.map +0 -1
  141. package/dist/common/promise.js +0 -8
  142. package/dist/common/promise.js.map +0 -1
  143. package/dist/common/props.d.ts.map +0 -1
  144. package/dist/common/render-context.js.map +0 -1
  145. package/dist/common/route-activity.js.map +0 -1
  146. package/dist/common/router-internal.js.map +0 -1
  147. package/dist/common/router.d.ts.map +0 -1
  148. package/dist/common/ssr-errors.d.ts +0 -11
  149. package/dist/common/ssr-errors.d.ts.map +0 -1
  150. package/dist/common/ssr-errors.js +0 -16
  151. package/dist/common/ssr-errors.js.map +0 -1
  152. package/dist/common/ssr.d.ts +0 -42
  153. package/dist/common/ssr.d.ts.map +0 -1
  154. package/dist/common/ssr.js.map +0 -1
  155. package/dist/common/vnode.d.ts +0 -22
  156. package/dist/common/vnode.d.ts.map +0 -1
  157. package/dist/common/vnode.js.map +0 -1
  158. package/dist/components/error-boundary.d.ts +0 -15
  159. package/dist/components/error-boundary.d.ts.map +0 -1
  160. package/dist/components/error-boundary.js +0 -43
  161. package/dist/components/error-boundary.js.map +0 -1
  162. package/dist/components/link.d.ts +0 -68
  163. package/dist/components/link.d.ts.map +0 -1
  164. package/dist/components/link.js +0 -76
  165. package/dist/components/link.js.map +0 -1
  166. package/dist/control/case.d.ts +0 -19
  167. package/dist/control/case.d.ts.map +0 -1
  168. package/dist/control/case.js +0 -70
  169. package/dist/control/case.js.map +0 -1
  170. package/dist/control/for.d.ts +0 -24
  171. package/dist/control/for.d.ts.map +0 -1
  172. package/dist/control/for.js +0 -63
  173. package/dist/control/for.js.map +0 -1
  174. package/dist/control/shared.d.ts +0 -9
  175. package/dist/control/shared.d.ts.map +0 -1
  176. package/dist/control/shared.js +0 -20
  177. package/dist/control/shared.js.map +0 -1
  178. package/dist/control/show.d.ts +0 -15
  179. package/dist/control/show.d.ts.map +0 -1
  180. package/dist/control/show.js +0 -34
  181. package/dist/control/show.js.map +0 -1
  182. package/dist/data/data-runtime.d.ts +0 -28
  183. package/dist/data/data-runtime.d.ts.map +0 -1
  184. package/dist/data/data-runtime.js.map +0 -1
  185. package/dist/data/invalidation-listeners.js.map +0 -1
  186. package/dist/data/invalidation.d.ts +0 -9
  187. package/dist/data/invalidation.d.ts.map +0 -1
  188. package/dist/data/invalidation.js +0 -27
  189. package/dist/data/invalidation.js.map +0 -1
  190. package/dist/data/mutation-cell.d.ts +0 -28
  191. package/dist/data/mutation-cell.d.ts.map +0 -1
  192. package/dist/data/mutation-cell.js +0 -132
  193. package/dist/data/mutation-cell.js.map +0 -1
  194. package/dist/data/query-cell.d.ts +0 -46
  195. package/dist/data/query-cell.d.ts.map +0 -1
  196. package/dist/data/query-cell.js +0 -290
  197. package/dist/data/query-cell.js.map +0 -1
  198. package/dist/data/query-key.js +0 -42
  199. package/dist/data/query-key.js.map +0 -1
  200. package/dist/data/shared.js +0 -21
  201. package/dist/data/shared.js.map +0 -1
  202. package/dist/data/testing.js +0 -2
  203. package/dist/data/types.d.ts +0 -161
  204. package/dist/data/types.d.ts.map +0 -1
  205. package/dist/foundations/icon/icon.d.ts +0 -53
  206. package/dist/foundations/icon/icon.d.ts.map +0 -1
  207. package/dist/foundations/icon/icon.js +0 -88
  208. package/dist/foundations/icon/icon.js.map +0 -1
  209. package/dist/foundations/icon/icon.types.d.ts +0 -22
  210. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  211. package/dist/foundations/interactions/dismissable.d.ts +0 -72
  212. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  213. package/dist/foundations/interactions/dismissable.js +0 -26
  214. package/dist/foundations/interactions/dismissable.js.map +0 -1
  215. package/dist/foundations/interactions/focusable.d.ts +0 -22
  216. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  217. package/dist/foundations/interactions/focusable.js +0 -18
  218. package/dist/foundations/interactions/focusable.js.map +0 -1
  219. package/dist/foundations/interactions/hoverable.d.ts +0 -26
  220. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  221. package/dist/foundations/interactions/hoverable.js +0 -15
  222. package/dist/foundations/interactions/hoverable.js.map +0 -1
  223. package/dist/foundations/interactions/interaction-policy.d.ts +0 -50
  224. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  225. package/dist/foundations/interactions/interaction-policy.js +0 -122
  226. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  227. package/dist/foundations/interactions/pressable.d.ts +0 -61
  228. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  229. package/dist/foundations/interactions/pressable.js +0 -51
  230. package/dist/foundations/interactions/pressable.js.map +0 -1
  231. package/dist/foundations/interactions/roving-focus.d.ts +0 -52
  232. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  233. package/dist/foundations/interactions/roving-focus.js +0 -71
  234. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  235. package/dist/foundations/state/controllable.d.ts +0 -33
  236. package/dist/foundations/state/controllable.d.ts.map +0 -1
  237. package/dist/foundations/state/controllable.js +0 -82
  238. package/dist/foundations/state/controllable.js.map +0 -1
  239. package/dist/foundations/structures/collection.d.ts +0 -52
  240. package/dist/foundations/structures/collection.d.ts.map +0 -1
  241. package/dist/foundations/structures/collection.js +0 -51
  242. package/dist/foundations/structures/collection.js.map +0 -1
  243. package/dist/foundations/structures/layer.d.ts +0 -81
  244. package/dist/foundations/structures/layer.d.ts.map +0 -1
  245. package/dist/foundations/structures/layer.js +0 -81
  246. package/dist/foundations/structures/layer.js.map +0 -1
  247. package/dist/foundations/structures/layout.d.ts +0 -33
  248. package/dist/foundations/structures/layout.d.ts.map +0 -1
  249. package/dist/foundations/structures/layout.js +0 -13
  250. package/dist/foundations/structures/layout.js.map +0 -1
  251. package/dist/foundations/structures/portal.d.ts +0 -2
  252. package/dist/foundations/structures/portal.js +0 -3
  253. package/dist/foundations/structures/presence.d.ts +0 -37
  254. package/dist/foundations/structures/presence.d.ts.map +0 -1
  255. package/dist/foundations/structures/presence.js +0 -39
  256. package/dist/foundations/structures/presence.js.map +0 -1
  257. package/dist/foundations/structures/slot.d.ts +0 -35
  258. package/dist/foundations/structures/slot.d.ts.map +0 -1
  259. package/dist/foundations/structures/slot.js +0 -41
  260. package/dist/foundations/structures/slot.js.map +0 -1
  261. package/dist/foundations/utilities/aria.d.ts +0 -16
  262. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  263. package/dist/foundations/utilities/aria.js +0 -17
  264. package/dist/foundations/utilities/aria.js.map +0 -1
  265. package/dist/foundations/utilities/compose-handlers.d.ts +0 -37
  266. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  267. package/dist/foundations/utilities/compose-handlers.js +0 -20
  268. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  269. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  270. package/dist/foundations/utilities/compose-ref.js +0 -18
  271. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  272. package/dist/foundations/utilities/event-types.d.ts +0 -20
  273. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  274. package/dist/foundations/utilities/merge-props.d.ts +0 -5
  275. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  276. package/dist/foundations/utilities/merge-props.js +0 -49
  277. package/dist/foundations/utilities/merge-props.js.map +0 -1
  278. package/dist/foundations/utilities/use-id.d.ts +0 -32
  279. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  280. package/dist/foundations/utilities/use-id.js.map +0 -1
  281. package/dist/fx/fx.d.ts +0 -33
  282. package/dist/fx/fx.d.ts.map +0 -1
  283. package/dist/fx/fx.js +0 -213
  284. package/dist/fx/fx.js.map +0 -1
  285. package/dist/fx/noop.js +0 -9
  286. package/dist/fx/noop.js.map +0 -1
  287. package/dist/fx/timing.d.ts +0 -159
  288. package/dist/fx/timing.d.ts.map +0 -1
  289. package/dist/fx/timing.js +0 -243
  290. package/dist/fx/timing.js.map +0 -1
  291. package/dist/index.js.map +0 -1
  292. package/dist/jsx/index.d.ts +0 -2
  293. package/dist/jsx/index.js +0 -4
  294. package/dist/jsx/types.d.ts.map +0 -1
  295. package/dist/jsx/types.js +0 -2
  296. package/dist/jsx/utils.d.ts +0 -5
  297. package/dist/jsx/utils.d.ts.map +0 -1
  298. package/dist/jsx/utils.js +0 -19
  299. package/dist/jsx/utils.js.map +0 -1
  300. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  301. package/dist/jsx-dev-runtime.js.map +0 -1
  302. package/dist/jsx-runtime.d.ts.map +0 -1
  303. package/dist/jsx-runtime.js.map +0 -1
  304. package/dist/jsx-runtime2.d.ts +0 -3
  305. package/dist/jsx-runtime2.js +0 -4
  306. package/dist/renderer/attributes.js +0 -232
  307. package/dist/renderer/attributes.js.map +0 -1
  308. package/dist/renderer/boundaries.js +0 -266
  309. package/dist/renderer/boundaries.js.map +0 -1
  310. package/dist/renderer/child-shape.js +0 -85
  311. package/dist/renderer/child-shape.js.map +0 -1
  312. package/dist/renderer/children-fastpath.js +0 -149
  313. package/dist/renderer/children-fastpath.js.map +0 -1
  314. package/dist/renderer/children.js +0 -160
  315. package/dist/renderer/children.js.map +0 -1
  316. package/dist/renderer/cleanup.js +0 -210
  317. package/dist/renderer/cleanup.js.map +0 -1
  318. package/dist/renderer/component-host-cleanup.js +0 -68
  319. package/dist/renderer/component-host-cleanup.js.map +0 -1
  320. package/dist/renderer/component-host-instances.js +0 -65
  321. package/dist/renderer/component-host-instances.js.map +0 -1
  322. package/dist/renderer/component-host.js +0 -247
  323. package/dist/renderer/component-host.js.map +0 -1
  324. package/dist/renderer/dom-host.js +0 -13
  325. package/dist/renderer/dom-host.js.map +0 -1
  326. package/dist/renderer/dom-internal.js +0 -186
  327. package/dist/renderer/dom-internal.js.map +0 -1
  328. package/dist/renderer/dom.js +0 -10
  329. package/dist/renderer/element-children.js +0 -279
  330. package/dist/renderer/element-children.js.map +0 -1
  331. package/dist/renderer/env.js +0 -2
  332. package/dist/renderer/error-boundary-dom.js +0 -78
  333. package/dist/renderer/error-boundary-dom.js.map +0 -1
  334. package/dist/renderer/evaluate-dom-range.js +0 -85
  335. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  336. package/dist/renderer/evaluate-reconcile.js +0 -282
  337. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  338. package/dist/renderer/evaluate.js +0 -84
  339. package/dist/renderer/evaluate.js.map +0 -1
  340. package/dist/renderer/fastpath.js +0 -150
  341. package/dist/renderer/fastpath.js.map +0 -1
  342. package/dist/renderer/for-commit-dom-map.js +0 -83
  343. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  344. package/dist/renderer/for-commit-removal.js +0 -36
  345. package/dist/renderer/for-commit-removal.js.map +0 -1
  346. package/dist/renderer/for-commit-reorder.js +0 -89
  347. package/dist/renderer/for-commit-reorder.js.map +0 -1
  348. package/dist/renderer/for-commit.js +0 -314
  349. package/dist/renderer/for-commit.js.map +0 -1
  350. package/dist/renderer/index.js +0 -38
  351. package/dist/renderer/index.js.map +0 -1
  352. package/dist/renderer/keyed-children.js +0 -32
  353. package/dist/renderer/keyed-children.js.map +0 -1
  354. package/dist/renderer/keyed.js +0 -167
  355. package/dist/renderer/keyed.js.map +0 -1
  356. package/dist/renderer/namespaces.js +0 -23
  357. package/dist/renderer/namespaces.js.map +0 -1
  358. package/dist/renderer/prop-bindings.js +0 -280
  359. package/dist/renderer/prop-bindings.js.map +0 -1
  360. package/dist/renderer/reactive-child-dom.js +0 -133
  361. package/dist/renderer/reactive-child-dom.js.map +0 -1
  362. package/dist/renderer/reactive-child-sources.js +0 -184
  363. package/dist/renderer/reactive-child-sources.js.map +0 -1
  364. package/dist/renderer/reactive-children.js +0 -294
  365. package/dist/renderer/reactive-children.js.map +0 -1
  366. package/dist/renderer/reconcile-commit.js +0 -38
  367. package/dist/renderer/reconcile-commit.js.map +0 -1
  368. package/dist/renderer/reconcile-fastpaths.js +0 -107
  369. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  370. package/dist/renderer/reconcile-resolution.js +0 -187
  371. package/dist/renderer/reconcile-resolution.js.map +0 -1
  372. package/dist/renderer/reconcile.js +0 -39
  373. package/dist/renderer/reconcile.js.map +0 -1
  374. package/dist/renderer/retained-element-rollback.js +0 -277
  375. package/dist/renderer/retained-element-rollback.js.map +0 -1
  376. package/dist/renderer/stable-patch.js +0 -81
  377. package/dist/renderer/stable-patch.js.map +0 -1
  378. package/dist/renderer/static-reuse.js +0 -96
  379. package/dist/renderer/static-reuse.js.map +0 -1
  380. package/dist/renderer/types.js +0 -2
  381. package/dist/renderer/utils.js +0 -256
  382. package/dist/renderer/utils.js.map +0 -1
  383. package/dist/router/access.js +0 -36
  384. package/dist/router/access.js.map +0 -1
  385. package/dist/router/activity.d.ts +0 -10
  386. package/dist/router/activity.d.ts.map +0 -1
  387. package/dist/router/activity.js +0 -87
  388. package/dist/router/activity.js.map +0 -1
  389. package/dist/router/authoring.d.ts +0 -22
  390. package/dist/router/authoring.d.ts.map +0 -1
  391. package/dist/router/authoring.js +0 -198
  392. package/dist/router/authoring.js.map +0 -1
  393. package/dist/router/internal-types.d.ts +0 -31
  394. package/dist/router/internal-types.d.ts.map +0 -1
  395. package/dist/router/lazy.d.ts +0 -19
  396. package/dist/router/lazy.d.ts.map +0 -1
  397. package/dist/router/lazy.js +0 -52
  398. package/dist/router/lazy.js.map +0 -1
  399. package/dist/router/manifest.d.ts +0 -10
  400. package/dist/router/manifest.d.ts.map +0 -1
  401. package/dist/router/manifest.js +0 -49
  402. package/dist/router/manifest.js.map +0 -1
  403. package/dist/router/match.js +0 -122
  404. package/dist/router/match.js.map +0 -1
  405. package/dist/router/navigate.d.ts +0 -11
  406. package/dist/router/navigate.d.ts.map +0 -1
  407. package/dist/router/navigate.js +0 -76
  408. package/dist/router/navigate.js.map +0 -1
  409. package/dist/router/navigation-registry.d.ts +0 -32
  410. package/dist/router/navigation-registry.d.ts.map +0 -1
  411. package/dist/router/navigation-registry.js +0 -105
  412. package/dist/router/navigation-registry.js.map +0 -1
  413. package/dist/router/navigation-scroll.d.ts +0 -14
  414. package/dist/router/navigation-scroll.d.ts.map +0 -1
  415. package/dist/router/navigation-scroll.js +0 -93
  416. package/dist/router/navigation-scroll.js.map +0 -1
  417. package/dist/router/navigation-targets.d.ts +0 -31
  418. package/dist/router/navigation-targets.d.ts.map +0 -1
  419. package/dist/router/navigation-targets.js +0 -255
  420. package/dist/router/navigation-targets.js.map +0 -1
  421. package/dist/router/policy.d.ts +0 -28
  422. package/dist/router/policy.d.ts.map +0 -1
  423. package/dist/router/policy.js +0 -132
  424. package/dist/router/policy.js.map +0 -1
  425. package/dist/router/rendering.d.ts +0 -10
  426. package/dist/router/rendering.d.ts.map +0 -1
  427. package/dist/router/rendering.js +0 -46
  428. package/dist/router/rendering.js.map +0 -1
  429. package/dist/router/resolution.d.ts +0 -4
  430. package/dist/router/resolution.d.ts.map +0 -1
  431. package/dist/router/resolution.js +0 -86
  432. package/dist/router/resolution.js.map +0 -1
  433. package/dist/router/route-context.js +0 -79
  434. package/dist/router/route-context.js.map +0 -1
  435. package/dist/router/route-matching.d.ts +0 -20
  436. package/dist/router/route-matching.d.ts.map +0 -1
  437. package/dist/router/route-matching.js +0 -175
  438. package/dist/router/route-matching.js.map +0 -1
  439. package/dist/router/route-query.d.ts +0 -17
  440. package/dist/router/route-query.d.ts.map +0 -1
  441. package/dist/router/route-query.js +0 -47
  442. package/dist/router/route-query.js.map +0 -1
  443. package/dist/router/route.d.ts +0 -8
  444. package/dist/router/route.js +0 -10
  445. package/dist/router/store.d.ts +0 -50
  446. package/dist/router/store.d.ts.map +0 -1
  447. package/dist/router/store.js +0 -171
  448. package/dist/router/store.js.map +0 -1
  449. package/dist/router/testing.js +0 -4
  450. package/dist/runtime/access.d.ts +0 -20
  451. package/dist/runtime/access.d.ts.map +0 -1
  452. package/dist/runtime/access.js +0 -45
  453. package/dist/runtime/access.js.map +0 -1
  454. package/dist/runtime/child-scope.d.ts +0 -22
  455. package/dist/runtime/child-scope.d.ts.map +0 -1
  456. package/dist/runtime/child-scope.js +0 -87
  457. package/dist/runtime/child-scope.js.map +0 -1
  458. package/dist/runtime/component-cleanup.d.ts +0 -16
  459. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  460. package/dist/runtime/component-cleanup.js +0 -70
  461. package/dist/runtime/component-cleanup.js.map +0 -1
  462. package/dist/runtime/component-commit.js +0 -165
  463. package/dist/runtime/component-commit.js.map +0 -1
  464. package/dist/runtime/component-facade.d.ts +0 -5
  465. package/dist/runtime/component-facade.js +0 -4
  466. package/dist/runtime/component-internal.d.ts +0 -100
  467. package/dist/runtime/component-internal.d.ts.map +0 -1
  468. package/dist/runtime/component-internal.js +0 -219
  469. package/dist/runtime/component-internal.js.map +0 -1
  470. package/dist/runtime/component-lifecycle.d.ts +0 -49
  471. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  472. package/dist/runtime/component-lifecycle.js +0 -176
  473. package/dist/runtime/component-lifecycle.js.map +0 -1
  474. package/dist/runtime/component-scope.d.ts +0 -55
  475. package/dist/runtime/component-scope.d.ts.map +0 -1
  476. package/dist/runtime/component-scope.js.map +0 -1
  477. package/dist/runtime/component.d.ts +0 -5
  478. package/dist/runtime/component.js +0 -5
  479. package/dist/runtime/context.d.ts +0 -69
  480. package/dist/runtime/context.d.ts.map +0 -1
  481. package/dist/runtime/context.js +0 -210
  482. package/dist/runtime/context.js.map +0 -1
  483. package/dist/runtime/control.d.ts +0 -43
  484. package/dist/runtime/control.d.ts.map +0 -1
  485. package/dist/runtime/control.js +0 -126
  486. package/dist/runtime/control.js.map +0 -1
  487. package/dist/runtime/derive.d.ts +0 -17
  488. package/dist/runtime/derive.d.ts.map +0 -1
  489. package/dist/runtime/derive.js +0 -142
  490. package/dist/runtime/derive.js.map +0 -1
  491. package/dist/runtime/dev-namespace.d.ts +0 -31
  492. package/dist/runtime/dev-namespace.d.ts.map +0 -1
  493. package/dist/runtime/dev-namespace.js +0 -57
  494. package/dist/runtime/dev-namespace.js.map +0 -1
  495. package/dist/runtime/effect.d.ts +0 -32
  496. package/dist/runtime/effect.d.ts.map +0 -1
  497. package/dist/runtime/effect.js +0 -177
  498. package/dist/runtime/effect.js.map +0 -1
  499. package/dist/runtime/error-boundary.d.ts +0 -5
  500. package/dist/runtime/error-boundary.d.ts.map +0 -1
  501. package/dist/runtime/error-boundary.js +0 -31
  502. package/dist/runtime/error-boundary.js.map +0 -1
  503. package/dist/runtime/events.d.ts +0 -58
  504. package/dist/runtime/events.d.ts.map +0 -1
  505. package/dist/runtime/events.js +0 -204
  506. package/dist/runtime/events.js.map +0 -1
  507. package/dist/runtime/execution-model.d.ts +0 -7
  508. package/dist/runtime/execution-model.d.ts.map +0 -1
  509. package/dist/runtime/execution-model.js +0 -15
  510. package/dist/runtime/execution-model.js.map +0 -1
  511. package/dist/runtime/fastlane.d.ts +0 -34
  512. package/dist/runtime/fastlane.d.ts.map +0 -1
  513. package/dist/runtime/fastlane.js +0 -175
  514. package/dist/runtime/fastlane.js.map +0 -1
  515. package/dist/runtime/for-bench.d.ts +0 -41
  516. package/dist/runtime/for-bench.d.ts.map +0 -1
  517. package/dist/runtime/for-bench.js +0 -171
  518. package/dist/runtime/for-bench.js.map +0 -1
  519. package/dist/runtime/for-internal.d.ts +0 -43
  520. package/dist/runtime/for-internal.d.ts.map +0 -1
  521. package/dist/runtime/for-internal.js +0 -98
  522. package/dist/runtime/for-internal.js.map +0 -1
  523. package/dist/runtime/for-reconcile.d.ts +0 -8
  524. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  525. package/dist/runtime/for-reconcile.js +0 -389
  526. package/dist/runtime/for-reconcile.js.map +0 -1
  527. package/dist/runtime/for-scopes.d.ts +0 -26
  528. package/dist/runtime/for-scopes.d.ts.map +0 -1
  529. package/dist/runtime/for-scopes.js +0 -160
  530. package/dist/runtime/for-scopes.js.map +0 -1
  531. package/dist/runtime/for-signals.d.ts +0 -30
  532. package/dist/runtime/for-signals.d.ts.map +0 -1
  533. package/dist/runtime/for-signals.js +0 -139
  534. package/dist/runtime/for-signals.js.map +0 -1
  535. package/dist/runtime/for-types.d.ts +0 -9
  536. package/dist/runtime/for-types.d.ts.map +0 -1
  537. package/dist/runtime/for.d.ts +0 -4
  538. package/dist/runtime/for.js +0 -5
  539. package/dist/runtime/index.d.ts +0 -24
  540. package/dist/runtime/index.js +0 -31
  541. package/dist/runtime/lifecycle-operations.d.ts +0 -31
  542. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  543. package/dist/runtime/lifecycle-operations.js.map +0 -1
  544. package/dist/runtime/operations.d.ts +0 -3
  545. package/dist/runtime/operations.js +0 -3
  546. package/dist/runtime/perf-metrics.d.ts +0 -26
  547. package/dist/runtime/perf-metrics.d.ts.map +0 -1
  548. package/dist/runtime/perf-metrics.js +0 -70
  549. package/dist/runtime/perf-metrics.js.map +0 -1
  550. package/dist/runtime/portal.d.ts +0 -22
  551. package/dist/runtime/portal.d.ts.map +0 -1
  552. package/dist/runtime/portal.js.map +0 -1
  553. package/dist/runtime/readable.d.ts +0 -29
  554. package/dist/runtime/readable.d.ts.map +0 -1
  555. package/dist/runtime/readable.js +0 -159
  556. package/dist/runtime/readable.js.map +0 -1
  557. package/dist/runtime/resource-cell.js +0 -114
  558. package/dist/runtime/resource-cell.js.map +0 -1
  559. package/dist/runtime/resource-operation.d.ts +0 -13
  560. package/dist/runtime/resource-operation.d.ts.map +0 -1
  561. package/dist/runtime/resource-operation.js +0 -170
  562. package/dist/runtime/resource-operation.js.map +0 -1
  563. package/dist/runtime/runtime.d.ts.map +0 -1
  564. package/dist/runtime/runtime.js +0 -59
  565. package/dist/runtime/runtime.js.map +0 -1
  566. package/dist/runtime/scheduler.d.ts.map +0 -1
  567. package/dist/runtime/scheduler.js.map +0 -1
  568. package/dist/runtime/selector-store.js +0 -24
  569. package/dist/runtime/selector-store.js.map +0 -1
  570. package/dist/runtime/selector.d.ts +0 -11
  571. package/dist/runtime/selector.d.ts.map +0 -1
  572. package/dist/runtime/selector.js.map +0 -1
  573. package/dist/runtime/snapshot-source.d.ts +0 -10
  574. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  575. package/dist/runtime/snapshot-source.js.map +0 -1
  576. package/dist/runtime/state.d.ts +0 -55
  577. package/dist/runtime/state.d.ts.map +0 -1
  578. package/dist/runtime/state.js.map +0 -1
  579. package/dist/ssg/batch-render.js +0 -103
  580. package/dist/ssg/batch-render.js.map +0 -1
  581. package/dist/ssg/create-static-gen.d.ts +0 -64
  582. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  583. package/dist/ssg/create-static-gen.js +0 -199
  584. package/dist/ssg/create-static-gen.js.map +0 -1
  585. package/dist/ssg/generate-metadata.js +0 -94
  586. package/dist/ssg/generate-metadata.js.map +0 -1
  587. package/dist/ssg/generation-plan.js +0 -70
  588. package/dist/ssg/generation-plan.js.map +0 -1
  589. package/dist/ssg/incremental-manifest.js +0 -56
  590. package/dist/ssg/incremental-manifest.js.map +0 -1
  591. package/dist/ssg/resolve-ssg-data.js +0 -105
  592. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  593. package/dist/ssg/route-utils.js +0 -24
  594. package/dist/ssg/route-utils.js.map +0 -1
  595. package/dist/ssg/static-routes.js +0 -102
  596. package/dist/ssg/static-routes.js.map +0 -1
  597. package/dist/ssg/types.d.ts +0 -189
  598. package/dist/ssg/types.d.ts.map +0 -1
  599. package/dist/ssg/write-static-files.js +0 -73
  600. package/dist/ssg/write-static-files.js.map +0 -1
  601. package/dist/ssr/attrs.js +0 -94
  602. package/dist/ssr/attrs.js.map +0 -1
  603. package/dist/ssr/boundaries.js +0 -113
  604. package/dist/ssr/boundaries.js.map +0 -1
  605. package/dist/ssr/component-runtime.js +0 -111
  606. package/dist/ssr/component-runtime.js.map +0 -1
  607. package/dist/ssr/context.d.ts +0 -50
  608. package/dist/ssr/context.d.ts.map +0 -1
  609. package/dist/ssr/context.js +0 -91
  610. package/dist/ssr/context.js.map +0 -1
  611. package/dist/ssr/errors.d.ts +0 -10
  612. package/dist/ssr/errors.d.ts.map +0 -1
  613. package/dist/ssr/errors.js +0 -14
  614. package/dist/ssr/errors.js.map +0 -1
  615. package/dist/ssr/escape.js +0 -193
  616. package/dist/ssr/escape.js.map +0 -1
  617. package/dist/ssr/hydration-data.js +0 -10
  618. package/dist/ssr/hydration-data.js.map +0 -1
  619. package/dist/ssr/hydration-verify.d.ts +0 -12
  620. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  621. package/dist/ssr/hydration-verify.js +0 -144
  622. package/dist/ssr/hydration-verify.js.map +0 -1
  623. package/dist/ssr/index-internal.d.ts +0 -15
  624. package/dist/ssr/index-internal.d.ts.map +0 -1
  625. package/dist/ssr/index-internal.js +0 -19
  626. package/dist/ssr/index-internal.js.map +0 -1
  627. package/dist/ssr/render-keys.js +0 -16
  628. package/dist/ssr/render-keys.js.map +0 -1
  629. package/dist/ssr/render-resolved.d.ts +0 -20
  630. package/dist/ssr/render-resolved.d.ts.map +0 -1
  631. package/dist/ssr/render-resolved.js +0 -35
  632. package/dist/ssr/render-resolved.js.map +0 -1
  633. package/dist/ssr/render-sync.d.ts +0 -21
  634. package/dist/ssr/render-sync.d.ts.map +0 -1
  635. package/dist/ssr/render-sync.js +0 -275
  636. package/dist/ssr/render-sync.js.map +0 -1
  637. package/dist/ssr/route-policy-resolution.js +0 -78
  638. package/dist/ssr/route-policy-resolution.js.map +0 -1
  639. package/dist/ssr/route-render.d.ts +0 -77
  640. package/dist/ssr/route-render.d.ts.map +0 -1
  641. package/dist/ssr/route-render.js +0 -120
  642. package/dist/ssr/route-render.js.map +0 -1
  643. package/dist/ssr/sink.d.ts +0 -26
  644. package/dist/ssr/sink.d.ts.map +0 -1
  645. package/dist/ssr/sink.js +0 -86
  646. package/dist/ssr/sink.js.map +0 -1
  647. package/dist/ssr/types.d.ts +0 -23
  648. package/dist/ssr/types.d.ts.map +0 -1
  649. package/dist/ssr/verify-hydration.js.map +0 -1
  650. package/dist/testing/index.d.ts.map +0 -1
  651. package/dist/testing/index.js.map +0 -1
@@ -1,159 +0,0 @@
1
- import { enqueueRuntimeTask, markRuntimeReactivePropsDirtySource } from "./access.js";
2
- import { getCurrentInstance } from "./component-scope.js";
3
- import "./component.js";
4
- //#region src/runtime/readable.ts
5
- function markReadableUsage(source) {
6
- if (source && typeof source === "function" && ("_hasBeenRead" in source || "_readers" in source)) {
7
- const readable = source;
8
- readable._hasBeenRead = true;
9
- readable._hasEverBeenRead = true;
10
- }
11
- }
12
- let currentDerivedSubscriber = null;
13
- let suppressComponentReadTrackingDepth = 0;
14
- let currentFineGrainedReadSources = null;
15
- function scheduleReadableInstanceUpdate(instance) {
16
- if (instance.hasPendingUpdate) return;
17
- instance.hasPendingUpdate = true;
18
- const task = instance._pendingFlushTask;
19
- if (task) {
20
- enqueueRuntimeTask(task);
21
- return;
22
- }
23
- enqueueRuntimeTask(() => {
24
- instance.hasPendingUpdate = false;
25
- instance.notifyUpdate?.();
26
- });
27
- }
28
- function recordReadableRead(source) {
29
- source._hasEverBeenRead = true;
30
- if (currentFineGrainedReadSources) {
31
- currentFineGrainedReadSources.add(source);
32
- return;
33
- }
34
- if (currentDerivedSubscriber) {
35
- if (!currentDerivedSubscriber._pendingDependencySources) currentDerivedSubscriber._pendingDependencySources = /* @__PURE__ */ new Set();
36
- currentDerivedSubscriber._pendingDependencySources.add(source);
37
- }
38
- if (suppressComponentReadTrackingDepth > 0) return;
39
- const inst = getCurrentInstance();
40
- if (!inst || inst._currentRenderToken === void 0) return;
41
- if (!inst._pendingReadSources) inst._pendingReadSources = /* @__PURE__ */ new Set();
42
- inst._pendingReadSources.add(source);
43
- const sourceVersion = source._version ?? 0;
44
- let pendingVersions = inst._pendingReadSourceVersions;
45
- if (!pendingVersions) {
46
- pendingVersions = /* @__PURE__ */ new Map();
47
- inst._pendingReadSourceVersions = pendingVersions;
48
- }
49
- pendingVersions.set(source, sourceVersion);
50
- }
51
- function withFineGrainedReadTracking(pendingSources, fn) {
52
- const previousPendingSources = currentFineGrainedReadSources;
53
- currentFineGrainedReadSources = pendingSources;
54
- try {
55
- return fn();
56
- } finally {
57
- currentFineGrainedReadSources = previousPendingSources;
58
- }
59
- }
60
- function finalizeReadableSubscriptions(instance) {
61
- const newSet = instance._pendingReadSources;
62
- const token = instance._currentRenderToken;
63
- const pendingVersions = instance._pendingReadSourceVersions;
64
- finalizeReadableSubscriptionsFromSnapshot(instance, token, newSet, pendingVersions);
65
- instance._pendingReadSources = void 0;
66
- instance._currentRenderToken = void 0;
67
- instance._pendingReadSourceVersions = void 0;
68
- }
69
- function finalizeReadableSubscriptionsFromSnapshot(instance, token, newSet, pendingReadSourceVersions = instance._pendingReadSourceVersions) {
70
- if (token === void 0) return;
71
- const oldSet = instance._lastReadSources;
72
- const pendingVersions = pendingReadSourceVersions;
73
- let needsFollowUpUpdate = false;
74
- if (oldSet) {
75
- for (const source of oldSet) if (!newSet?.has(source)) source._readers?.delete(instance);
76
- }
77
- instance.lastRenderToken = token;
78
- if (newSet) for (const source of newSet) {
79
- if (pendingVersions && (!oldSet || oldSet.has(source))) {
80
- const sourceVersion = source._version ?? 0;
81
- const readVersion = pendingVersions.get(source);
82
- if (readVersion !== void 0 && sourceVersion !== readVersion) needsFollowUpUpdate = true;
83
- }
84
- let readers = source._readers;
85
- if (!readers) {
86
- readers = /* @__PURE__ */ new Map();
87
- source._readers = readers;
88
- }
89
- readers.set(instance, instance.lastRenderToken ?? 0);
90
- }
91
- instance._lastReadSources = newSet ?? /* @__PURE__ */ new Set();
92
- if (needsFollowUpUpdate) scheduleReadableInstanceUpdate(instance);
93
- }
94
- function cleanupReadableSubscriptions(instance) {
95
- const sources = instance._lastReadSources;
96
- if (!sources || sources.size === 0) {
97
- instance._pendingReadSources = void 0;
98
- instance._pendingReadSourceVersions = void 0;
99
- return;
100
- }
101
- for (const source of sources) source._readers?.delete(instance);
102
- instance._lastReadSources = /* @__PURE__ */ new Set();
103
- instance._pendingReadSources = void 0;
104
- instance._pendingReadSourceVersions = void 0;
105
- }
106
- function withDerivedReadTracking(subscriber, fn) {
107
- const prevDerivedSubscriber = currentDerivedSubscriber;
108
- currentDerivedSubscriber = subscriber;
109
- suppressComponentReadTrackingDepth += 1;
110
- try {
111
- return fn();
112
- } finally {
113
- suppressComponentReadTrackingDepth -= 1;
114
- currentDerivedSubscriber = prevDerivedSubscriber;
115
- }
116
- }
117
- function syncDerivedDependencySubscriptions(subscriber, prevSources, nextSources) {
118
- for (const source of prevSources) if (!nextSources.has(source)) source._derivedSubscribers?.delete(subscriber);
119
- for (const source of nextSources) {
120
- let subscribers = source._derivedSubscribers;
121
- if (!subscribers) {
122
- subscribers = /* @__PURE__ */ new Set();
123
- source._derivedSubscribers = subscribers;
124
- }
125
- subscribers.add(subscriber);
126
- }
127
- }
128
- function clearDerivedDependencySubscriptions(subscriber, sources) {
129
- for (const source of sources) source._derivedSubscribers?.delete(subscriber);
130
- sources.clear();
131
- }
132
- function markReadableDerivedSubscribersDirty(source) {
133
- const subscribers = source._derivedSubscribers;
134
- if (!subscribers || subscribers.size === 0) return;
135
- for (const subscriber of subscribers) subscriber._markDirty();
136
- }
137
- function markReactivePropsDirtySource(source) {
138
- try {
139
- markRuntimeReactivePropsDirtySource(source);
140
- } catch {}
141
- }
142
- function notifyReadableReaders(source, skipInstance) {
143
- source._version = (source._version ?? 0) + 1;
144
- const readers = source._readers;
145
- let didScheduleUpdate = false;
146
- if (!readers || readers.size === 0) return false;
147
- for (const [instance, token] of readers) {
148
- if (skipInstance && instance === skipInstance) continue;
149
- if (instance.lastRenderToken !== token) continue;
150
- if (instance.hasPendingUpdate) continue;
151
- scheduleReadableInstanceUpdate(instance);
152
- didScheduleUpdate = true;
153
- }
154
- return didScheduleUpdate;
155
- }
156
- //#endregion
157
- export { cleanupReadableSubscriptions, clearDerivedDependencySubscriptions, finalizeReadableSubscriptions, finalizeReadableSubscriptionsFromSnapshot, markReactivePropsDirtySource, markReadableDerivedSubscribersDirty, markReadableUsage, notifyReadableReaders, recordReadableRead, syncDerivedDependencySubscriptions, withDerivedReadTracking, withFineGrainedReadTracking };
158
-
159
- //# sourceMappingURL=readable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readable.js","names":[],"sources":["../../src/runtime/readable.ts"],"sourcesContent":["import {\n enqueueRuntimeTask,\n markRuntimeReactivePropsDirtySource,\n} from './access';\nimport { getCurrentInstance, type ComponentInstance } from './component';\n\nexport interface DerivedSubscriber {\n _markDirty(): void;\n _pendingDependencySources?: Set<ReadableSource<unknown>>;\n}\n\nexport interface ReadableSource<T = unknown> {\n (): T;\n _hasBeenRead?: boolean;\n _hasEverBeenRead?: boolean;\n _readers?: Map<ComponentInstance, number>;\n _derivedSubscribers?: Set<DerivedSubscriber>;\n _version?: number;\n}\n\nexport function markReadableUsage(source: unknown): void {\n if (\n source &&\n typeof source === 'function' &&\n ('_hasBeenRead' in source || '_readers' in source)\n ) {\n const readable = source as ReadableSource<unknown>;\n readable._hasBeenRead = true;\n readable._hasEverBeenRead = true;\n }\n}\n\nlet currentDerivedSubscriber: DerivedSubscriber | null = null;\nlet suppressComponentReadTrackingDepth = 0;\nlet currentFineGrainedReadSources: Set<ReadableSource<unknown>> | null = null;\n\nfunction scheduleReadableInstanceUpdate(instance: ComponentInstance): void {\n if (instance.hasPendingUpdate) {\n return;\n }\n\n instance.hasPendingUpdate = true;\n const task = instance._pendingFlushTask;\n if (task) {\n enqueueRuntimeTask(task);\n return;\n }\n\n enqueueRuntimeTask(() => {\n instance.hasPendingUpdate = false;\n instance.notifyUpdate?.();\n });\n}\n\nexport function recordReadableRead(source: ReadableSource<unknown>): void {\n source._hasEverBeenRead = true;\n\n if (currentFineGrainedReadSources) {\n currentFineGrainedReadSources.add(source);\n return;\n }\n\n if (currentDerivedSubscriber) {\n if (!currentDerivedSubscriber._pendingDependencySources) {\n currentDerivedSubscriber._pendingDependencySources = new Set();\n }\n currentDerivedSubscriber._pendingDependencySources.add(source);\n }\n\n if (suppressComponentReadTrackingDepth > 0) {\n return;\n }\n\n const inst = getCurrentInstance();\n if (!inst || inst._currentRenderToken === undefined) {\n return;\n }\n\n if (!inst._pendingReadSources) {\n inst._pendingReadSources = new Set();\n }\n inst._pendingReadSources.add(source);\n\n const sourceVersion = source._version ?? 0;\n let pendingVersions = inst._pendingReadSourceVersions;\n if (!pendingVersions) {\n pendingVersions = new Map();\n inst._pendingReadSourceVersions = pendingVersions;\n }\n pendingVersions.set(source, sourceVersion);\n}\n\nexport function withFineGrainedReadTracking<T>(\n pendingSources: Set<ReadableSource<unknown>>,\n fn: () => T\n): T {\n const previousPendingSources = currentFineGrainedReadSources;\n currentFineGrainedReadSources = pendingSources;\n\n try {\n return fn();\n } finally {\n currentFineGrainedReadSources = previousPendingSources;\n }\n}\n\nexport function finalizeReadableSubscriptions(\n instance: ComponentInstance\n): void {\n const newSet = instance._pendingReadSources;\n const token = instance._currentRenderToken;\n const pendingVersions = instance._pendingReadSourceVersions;\n\n finalizeReadableSubscriptionsFromSnapshot(\n instance,\n token,\n newSet,\n pendingVersions\n );\n instance._pendingReadSources = undefined;\n instance._currentRenderToken = undefined;\n instance._pendingReadSourceVersions = undefined;\n}\n\nexport function finalizeReadableSubscriptionsFromSnapshot(\n instance: ComponentInstance,\n token: number | undefined,\n newSet: Set<ReadableSource<unknown>> | undefined,\n pendingReadSourceVersions:\n | Map<ReadableSource<unknown>, number>\n | undefined = instance._pendingReadSourceVersions\n): void {\n if (token === undefined) {\n return;\n }\n\n const oldSet = instance._lastReadSources;\n const pendingVersions = pendingReadSourceVersions;\n let needsFollowUpUpdate = false;\n\n if (oldSet) {\n for (const source of oldSet) {\n if (!newSet?.has(source)) {\n source._readers?.delete(instance);\n }\n }\n }\n\n instance.lastRenderToken = token;\n\n if (newSet) {\n for (const source of newSet) {\n // Replay only for sources already owned by this instance, or for its\n // first committed read set. Newly entered branches in mounted components\n // keep their existing scheduler-visible intermediate states.\n if (pendingVersions && (!oldSet || oldSet.has(source))) {\n const sourceVersion = source._version ?? 0;\n const readVersion = pendingVersions.get(source);\n if (readVersion !== undefined && sourceVersion !== readVersion) {\n needsFollowUpUpdate = true;\n }\n }\n\n let readers = source._readers;\n if (!readers) {\n readers = new Map();\n source._readers = readers;\n }\n readers.set(instance, instance.lastRenderToken ?? 0);\n }\n }\n\n instance._lastReadSources = newSet ?? new Set();\n\n if (needsFollowUpUpdate) {\n scheduleReadableInstanceUpdate(instance);\n }\n}\n\nexport function cleanupReadableSubscriptions(\n instance: ComponentInstance\n): void {\n const sources = instance._lastReadSources;\n if (!sources || sources.size === 0) {\n instance._pendingReadSources = undefined;\n instance._pendingReadSourceVersions = undefined;\n return;\n }\n\n for (const source of sources) {\n source._readers?.delete(instance);\n }\n instance._lastReadSources = new Set();\n instance._pendingReadSources = undefined;\n instance._pendingReadSourceVersions = undefined;\n}\n\nexport function withDerivedReadTracking<T>(\n subscriber: DerivedSubscriber,\n fn: () => T\n): T {\n const prevDerivedSubscriber = currentDerivedSubscriber;\n currentDerivedSubscriber = subscriber;\n suppressComponentReadTrackingDepth += 1;\n\n try {\n return fn();\n } finally {\n suppressComponentReadTrackingDepth -= 1;\n currentDerivedSubscriber = prevDerivedSubscriber;\n }\n}\n\nexport function syncDerivedDependencySubscriptions(\n subscriber: DerivedSubscriber,\n prevSources: Set<ReadableSource<unknown>>,\n nextSources: Set<ReadableSource<unknown>>\n): void {\n for (const source of prevSources) {\n if (!nextSources.has(source)) {\n source._derivedSubscribers?.delete(subscriber);\n }\n }\n\n for (const source of nextSources) {\n let subscribers = source._derivedSubscribers;\n if (!subscribers) {\n subscribers = new Set();\n source._derivedSubscribers = subscribers;\n }\n subscribers.add(subscriber);\n }\n}\n\nexport function clearDerivedDependencySubscriptions(\n subscriber: DerivedSubscriber,\n sources: Set<ReadableSource<unknown>>\n): void {\n for (const source of sources) {\n source._derivedSubscribers?.delete(subscriber);\n }\n sources.clear();\n}\n\nexport function markReadableDerivedSubscribersDirty(\n source: ReadableSource<unknown>\n): void {\n const subscribers = source._derivedSubscribers;\n if (!subscribers || subscribers.size === 0) {\n return;\n }\n\n for (const subscriber of subscribers) {\n subscriber._markDirty();\n }\n}\n\nexport function markReactivePropsDirtySource(\n source: ReadableSource<unknown>\n): void {\n try {\n markRuntimeReactivePropsDirtySource(source);\n } catch {\n // Keep readable notifications side-effect safe.\n }\n}\n\nexport function notifyReadableReaders(\n source: ReadableSource<unknown>,\n skipInstance?: ComponentInstance | null\n): boolean {\n source._version = (source._version ?? 0) + 1;\n const readers = source._readers;\n let didScheduleUpdate = false;\n\n if (!readers || readers.size === 0) {\n return false;\n }\n\n for (const [instance, token] of readers) {\n if (skipInstance && instance === skipInstance) {\n continue;\n }\n if (instance.lastRenderToken !== token) {\n continue;\n }\n if (instance.hasPendingUpdate) {\n continue;\n }\n\n scheduleReadableInstanceUpdate(instance);\n didScheduleUpdate = true;\n }\n\n return didScheduleUpdate;\n}\n"],"mappings":";;;;AAoBA,SAAgB,kBAAkB,QAAuB;CACvD,IACE,UACA,OAAO,WAAW,eACjB,kBAAkB,UAAU,cAAc,SAC3C;EACA,MAAM,WAAW;EACjB,SAAS,eAAe;EACxB,SAAS,mBAAmB;CAC9B;AACF;AAEA,IAAI,2BAAqD;AACzD,IAAI,qCAAqC;AACzC,IAAI,gCAAqE;AAEzE,SAAS,+BAA+B,UAAmC;CACzE,IAAI,SAAS,kBACX;CAGF,SAAS,mBAAmB;CAC5B,MAAM,OAAO,SAAS;CACtB,IAAI,MAAM;EACR,mBAAmB,IAAI;EACvB;CACF;CAEA,yBAAyB;EACvB,SAAS,mBAAmB;EAC5B,SAAS,eAAe;CAC1B,CAAC;AACH;AAEA,SAAgB,mBAAmB,QAAuC;CACxE,OAAO,mBAAmB;CAE1B,IAAI,+BAA+B;EACjC,8BAA8B,IAAI,MAAM;EACxC;CACF;CAEA,IAAI,0BAA0B;EAC5B,IAAI,CAAC,yBAAyB,2BAC5B,yBAAyB,4CAA4B,IAAI,IAAI;EAE/D,yBAAyB,0BAA0B,IAAI,MAAM;CAC/D;CAEA,IAAI,qCAAqC,GACvC;CAGF,MAAM,OAAO,mBAAmB;CAChC,IAAI,CAAC,QAAQ,KAAK,wBAAwB,QACxC;CAGF,IAAI,CAAC,KAAK,qBACR,KAAK,sCAAsB,IAAI,IAAI;CAErC,KAAK,oBAAoB,IAAI,MAAM;CAEnC,MAAM,gBAAgB,OAAO,YAAY;CACzC,IAAI,kBAAkB,KAAK;CAC3B,IAAI,CAAC,iBAAiB;EACpB,kCAAkB,IAAI,IAAI;EAC1B,KAAK,6BAA6B;CACpC;CACA,gBAAgB,IAAI,QAAQ,aAAa;AAC3C;AAEA,SAAgB,4BACd,gBACA,IACG;CACH,MAAM,yBAAyB;CAC/B,gCAAgC;CAEhC,IAAI;EACF,OAAO,GAAG;CACZ,UAAU;EACR,gCAAgC;CAClC;AACF;AAEA,SAAgB,8BACd,UACM;CACN,MAAM,SAAS,SAAS;CACxB,MAAM,QAAQ,SAAS;CACvB,MAAM,kBAAkB,SAAS;CAEjC,0CACE,UACA,OACA,QACA,eACF;CACA,SAAS,sBAAsB;CAC/B,SAAS,sBAAsB;CAC/B,SAAS,6BAA6B;AACxC;AAEA,SAAgB,0CACd,UACA,OACA,QACA,4BAEgB,SAAS,4BACnB;CACN,IAAI,UAAU,QACZ;CAGF,MAAM,SAAS,SAAS;CACxB,MAAM,kBAAkB;CACxB,IAAI,sBAAsB;CAE1B,IAAI,QACF;OAAK,MAAM,UAAU,QACnB,IAAI,CAAC,QAAQ,IAAI,MAAM,GACrB,OAAO,UAAU,OAAO,QAAQ;CAEpC;CAGF,SAAS,kBAAkB;CAE3B,IAAI,QACF,KAAK,MAAM,UAAU,QAAQ;EAI3B,IAAI,oBAAoB,CAAC,UAAU,OAAO,IAAI,MAAM,IAAI;GACtD,MAAM,gBAAgB,OAAO,YAAY;GACzC,MAAM,cAAc,gBAAgB,IAAI,MAAM;GAC9C,IAAI,gBAAgB,UAAa,kBAAkB,aACjD,sBAAsB;EAE1B;EAEA,IAAI,UAAU,OAAO;EACrB,IAAI,CAAC,SAAS;GACZ,0BAAU,IAAI,IAAI;GAClB,OAAO,WAAW;EACpB;EACA,QAAQ,IAAI,UAAU,SAAS,mBAAmB,CAAC;CACrD;CAGF,SAAS,mBAAmB,0BAAU,IAAI,IAAI;CAE9C,IAAI,qBACF,+BAA+B,QAAQ;AAE3C;AAEA,SAAgB,6BACd,UACM;CACN,MAAM,UAAU,SAAS;CACzB,IAAI,CAAC,WAAW,QAAQ,SAAS,GAAG;EAClC,SAAS,sBAAsB;EAC/B,SAAS,6BAA6B;EACtC;CACF;CAEA,KAAK,MAAM,UAAU,SACnB,OAAO,UAAU,OAAO,QAAQ;CAElC,SAAS,mCAAmB,IAAI,IAAI;CACpC,SAAS,sBAAsB;CAC/B,SAAS,6BAA6B;AACxC;AAEA,SAAgB,wBACd,YACA,IACG;CACH,MAAM,wBAAwB;CAC9B,2BAA2B;CAC3B,sCAAsC;CAEtC,IAAI;EACF,OAAO,GAAG;CACZ,UAAU;EACR,sCAAsC;EACtC,2BAA2B;CAC7B;AACF;AAEA,SAAgB,mCACd,YACA,aACA,aACM;CACN,KAAK,MAAM,UAAU,aACnB,IAAI,CAAC,YAAY,IAAI,MAAM,GACzB,OAAO,qBAAqB,OAAO,UAAU;CAIjD,KAAK,MAAM,UAAU,aAAa;EAChC,IAAI,cAAc,OAAO;EACzB,IAAI,CAAC,aAAa;GAChB,8BAAc,IAAI,IAAI;GACtB,OAAO,sBAAsB;EAC/B;EACA,YAAY,IAAI,UAAU;CAC5B;AACF;AAEA,SAAgB,oCACd,YACA,SACM;CACN,KAAK,MAAM,UAAU,SACnB,OAAO,qBAAqB,OAAO,UAAU;CAE/C,QAAQ,MAAM;AAChB;AAEA,SAAgB,oCACd,QACM;CACN,MAAM,cAAc,OAAO;CAC3B,IAAI,CAAC,eAAe,YAAY,SAAS,GACvC;CAGF,KAAK,MAAM,cAAc,aACvB,WAAW,WAAW;AAE1B;AAEA,SAAgB,6BACd,QACM;CACN,IAAI;EACF,oCAAoC,MAAM;CAC5C,QAAQ,CAER;AACF;AAEA,SAAgB,sBACd,QACA,cACS;CACT,OAAO,YAAY,OAAO,YAAY,KAAK;CAC3C,MAAM,UAAU,OAAO;CACvB,IAAI,oBAAoB;CAExB,IAAI,CAAC,WAAW,QAAQ,SAAS,GAC/B,OAAO;CAGT,KAAK,MAAM,CAAC,UAAU,UAAU,SAAS;EACvC,IAAI,gBAAgB,aAAa,cAC/B;EAEF,IAAI,SAAS,oBAAoB,OAC/B;EAEF,IAAI,SAAS,kBACX;EAGF,+BAA+B,QAAQ;EACvC,oBAAoB;CACtB;CAEA,OAAO;AACT"}
@@ -1,114 +0,0 @@
1
- import { logger } from "../common/logger.js";
2
- import { withAsyncResourceContext } from "./context.js";
3
- import { isPromiseLike } from "../common/promise.js";
4
- import { brandSnapshotSource } from "./snapshot-source.js";
5
- import { throwSSRDataMissing } from "../common/render-context.js";
6
- //#region src/runtime/resource-cell.ts
7
- /**
8
- * Pure, component-agnostic ResourceCell state machine.
9
- * - Holds value/pending/error/generation/controller
10
- * - Exposes a stable `snapshot` object: { value, pending, error, refresh }
11
- * - Uses `withAsyncResourceContext` to bind the synchronous execution step
12
- * to a captured frame. Continuations after await do not see the frame.
13
- */
14
- var ResourceCell = class {
15
- constructor(fn, deps, resourceFrame) {
16
- this.value = null;
17
- this.pending = true;
18
- this.error = null;
19
- this.generation = 0;
20
- this.controller = null;
21
- this.deps = null;
22
- this.resourceFrame = null;
23
- this.subscribers = /* @__PURE__ */ new Set();
24
- this.disposed = false;
25
- this.fn = fn;
26
- this.deps = deps ? deps.slice() : null;
27
- this.resourceFrame = resourceFrame;
28
- this.snapshot = brandSnapshotSource({
29
- value: null,
30
- pending: true,
31
- error: null,
32
- refresh: () => this.refresh()
33
- });
34
- }
35
- setLoader(fn) {
36
- this.fn = fn;
37
- }
38
- subscribe(cb) {
39
- this.subscribers.add(cb);
40
- return () => this.subscribers.delete(cb);
41
- }
42
- notifySubscribers() {
43
- this.snapshot.value = this.value;
44
- this.snapshot.pending = this.pending;
45
- this.snapshot.error = this.error;
46
- for (const cb of this.subscribers) cb();
47
- }
48
- start(ssr = false, notify = true) {
49
- if (this.disposed) return;
50
- const generation = this.generation;
51
- this.controller?.abort();
52
- const controller = new AbortController();
53
- this.controller = controller;
54
- this.pending = true;
55
- this.error = null;
56
- if (notify) this.notifySubscribers();
57
- let result;
58
- try {
59
- result = withAsyncResourceContext(this.resourceFrame, () => this.fn({ signal: controller.signal }));
60
- } catch (err) {
61
- this.pending = false;
62
- this.error = err;
63
- if (notify) this.notifySubscribers();
64
- return;
65
- }
66
- if (!isPromiseLike(result)) {
67
- this.value = result;
68
- this.pending = false;
69
- this.error = null;
70
- if (notify) this.notifySubscribers();
71
- return;
72
- }
73
- if (ssr) throwSSRDataMissing();
74
- Promise.resolve(result).then((val) => {
75
- if (this.generation !== generation) return;
76
- if (this.controller !== controller) return;
77
- if (controller.signal.aborted) return;
78
- this.value = val;
79
- this.pending = false;
80
- this.error = null;
81
- this.notifySubscribers();
82
- }).catch((err) => {
83
- if (this.generation !== generation) return;
84
- if (this.controller !== controller) return;
85
- if (controller.signal.aborted || err instanceof Error && err.name === "AbortError" || typeof DOMException !== "undefined" && err instanceof DOMException && err.name === "AbortError") return;
86
- this.pending = false;
87
- this.error = err;
88
- try {
89
- if (this.ownerName) logger.error(`[Askr] Async resource error in ${this.ownerName}:`, err);
90
- else logger.error("[Askr] Async resource error:", err);
91
- } catch {}
92
- this.notifySubscribers();
93
- });
94
- }
95
- refresh() {
96
- if (this.disposed) return;
97
- this.generation++;
98
- this.controller?.abort();
99
- this.start();
100
- }
101
- abort() {
102
- this.controller?.abort();
103
- }
104
- dispose() {
105
- if (this.disposed) return;
106
- this.disposed = true;
107
- this.controller?.abort();
108
- this.subscribers.clear();
109
- }
110
- };
111
- //#endregion
112
- export { ResourceCell };
113
-
114
- //# sourceMappingURL=resource-cell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-cell.js","names":[],"sources":["../../src/runtime/resource-cell.ts"],"sourcesContent":["import { withAsyncResourceContext, type ContextFrame } from './context';\nimport { logger } from '../common/logger';\nimport {\n brandSnapshotSource,\n type SnapshotSourceBrand,\n} from './snapshot-source';\nimport { isPromiseLike } from '../common/promise';\nimport { throwSSRDataMissing } from '../common/render-context';\n\n/**\n * Pure, component-agnostic ResourceCell state machine.\n * - Holds value/pending/error/generation/controller\n * - Exposes a stable `snapshot` object: { value, pending, error, refresh }\n * - Uses `withAsyncResourceContext` to bind the synchronous execution step\n * to a captured frame. Continuations after await do not see the frame.\n */\nexport class ResourceCell<U> {\n value: U | null = null;\n pending = true;\n error: Error | null = null;\n generation = 0;\n controller: AbortController | null = null;\n deps: readonly unknown[] | null = null;\n resourceFrame: ContextFrame | null = null;\n\n // Optional debug label set by caller (component name) to improve logs\n ownerName?: string;\n\n private subscribers = new Set<() => void>();\n private disposed = false;\n\n readonly snapshot: {\n value: U | null;\n pending: boolean;\n error: Error | null;\n refresh: () => void;\n } & SnapshotSourceBrand;\n\n private fn: (opts: { signal: AbortSignal }) => PromiseLike<U> | U;\n\n constructor(\n fn: (opts: { signal: AbortSignal }) => PromiseLike<U> | U,\n deps: readonly unknown[] | null,\n resourceFrame: ContextFrame | null\n ) {\n this.fn = fn;\n this.deps = deps ? deps.slice() : null;\n this.resourceFrame = resourceFrame;\n this.snapshot = brandSnapshotSource({\n value: null,\n pending: true,\n error: null,\n refresh: () => this.refresh(),\n });\n }\n\n setLoader(fn: (opts: { signal: AbortSignal }) => PromiseLike<U> | U): void {\n this.fn = fn;\n }\n\n subscribe(cb: () => void): () => void {\n this.subscribers.add(cb);\n return () => this.subscribers.delete(cb);\n }\n\n private notifySubscribers() {\n this.snapshot.value = this.value;\n this.snapshot.pending = this.pending;\n this.snapshot.error = this.error;\n for (const cb of this.subscribers) cb();\n }\n\n start(ssr = false, notify = true) {\n if (this.disposed) {\n return;\n }\n\n const generation = this.generation;\n\n this.controller?.abort();\n const controller = new AbortController();\n this.controller = controller;\n this.pending = true;\n this.error = null;\n if (notify) this.notifySubscribers();\n\n let result: PromiseLike<U> | U;\n try {\n // Execute only the synchronous step inside the frozen resource frame.\n result = withAsyncResourceContext(this.resourceFrame, () =>\n this.fn({ signal: controller.signal })\n );\n } catch (err) {\n this.pending = false;\n this.error = err as Error;\n if (notify) this.notifySubscribers();\n return;\n }\n\n if (!isPromiseLike<U>(result)) {\n this.value = result as U;\n this.pending = false;\n this.error = null;\n if (notify) this.notifySubscribers();\n return;\n }\n\n if (ssr) {\n // During SSR async results are disallowed\n throwSSRDataMissing();\n }\n\n Promise.resolve(result)\n .then((val) => {\n if (this.generation !== generation) return;\n if (this.controller !== controller) return;\n // A loader that does not reject on abort (e.g. a plain Promise) would\n // otherwise commit its value after the fetch was cancelled by a deps\n // change, refresh(), or unmount. Mirror the AbortError guard used in\n // the rejection path so an aborted fetch's resolution stays inert.\n if (controller.signal.aborted) return;\n this.value = val;\n this.pending = false;\n this.error = null;\n this.notifySubscribers();\n })\n .catch((err) => {\n if (this.generation !== generation) return;\n if (this.controller !== controller) return;\n\n const isAbortError =\n controller.signal.aborted ||\n (err instanceof Error && err.name === 'AbortError') ||\n (typeof DOMException !== 'undefined' &&\n err instanceof DOMException &&\n err.name === 'AbortError');\n\n if (isAbortError) {\n return;\n }\n\n this.pending = false;\n this.error = err as Error;\n try {\n if (this.ownerName) {\n logger.error(\n `[Askr] Async resource error in ${this.ownerName}:`,\n err\n );\n } else {\n logger.error('[Askr] Async resource error:', err);\n }\n } catch {\n /* ignore logging errors */\n }\n this.notifySubscribers();\n });\n }\n\n refresh() {\n if (this.disposed) {\n return;\n }\n\n this.generation++;\n this.controller?.abort();\n this.start();\n }\n\n abort() {\n this.controller?.abort();\n }\n\n dispose() {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n this.controller?.abort();\n this.subscribers.clear();\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,IAAa,eAAb,MAA6B;CAwB3B,YACE,IACA,MACA,eACA;eA3BgB;iBACR;eACY;oBACT;oBACwB;cACH;uBACG;qCAKf,IAAI,IAAgB;kBACvB;EAgBjB,KAAK,KAAK;EACV,KAAK,OAAO,OAAO,KAAK,MAAM,IAAI;EAClC,KAAK,gBAAgB;EACrB,KAAK,WAAW,oBAAoB;GAClC,OAAO;GACP,SAAS;GACT,OAAO;GACP,eAAe,KAAK,QAAQ;EAC9B,CAAC;CACH;CAEA,UAAU,IAAiE;EACzE,KAAK,KAAK;CACZ;CAEA,UAAU,IAA4B;EACpC,KAAK,YAAY,IAAI,EAAE;EACvB,aAAa,KAAK,YAAY,OAAO,EAAE;CACzC;CAEA,oBAA4B;EAC1B,KAAK,SAAS,QAAQ,KAAK;EAC3B,KAAK,SAAS,UAAU,KAAK;EAC7B,KAAK,SAAS,QAAQ,KAAK;EAC3B,KAAK,MAAM,MAAM,KAAK,aAAa,GAAG;CACxC;CAEA,MAAM,MAAM,OAAO,SAAS,MAAM;EAChC,IAAI,KAAK,UACP;EAGF,MAAM,aAAa,KAAK;EAExB,KAAK,YAAY,MAAM;EACvB,MAAM,aAAa,IAAI,gBAAgB;EACvC,KAAK,aAAa;EAClB,KAAK,UAAU;EACf,KAAK,QAAQ;EACb,IAAI,QAAQ,KAAK,kBAAkB;EAEnC,IAAI;EACJ,IAAI;GAEF,SAAS,yBAAyB,KAAK,qBACrC,KAAK,GAAG,EAAE,QAAQ,WAAW,OAAO,CAAC,CACvC;EACF,SAAS,KAAK;GACZ,KAAK,UAAU;GACf,KAAK,QAAQ;GACb,IAAI,QAAQ,KAAK,kBAAkB;GACnC;EACF;EAEA,IAAI,CAAC,cAAiB,MAAM,GAAG;GAC7B,KAAK,QAAQ;GACb,KAAK,UAAU;GACf,KAAK,QAAQ;GACb,IAAI,QAAQ,KAAK,kBAAkB;GACnC;EACF;EAEA,IAAI,KAEF,oBAAoB;EAGtB,QAAQ,QAAQ,MAAM,CAAC,CACpB,MAAM,QAAQ;GACb,IAAI,KAAK,eAAe,YAAY;GACpC,IAAI,KAAK,eAAe,YAAY;GAKpC,IAAI,WAAW,OAAO,SAAS;GAC/B,KAAK,QAAQ;GACb,KAAK,UAAU;GACf,KAAK,QAAQ;GACb,KAAK,kBAAkB;EACzB,CAAC,CAAC,CACD,OAAO,QAAQ;GACd,IAAI,KAAK,eAAe,YAAY;GACpC,IAAI,KAAK,eAAe,YAAY;GASpC,IANE,WAAW,OAAO,WACjB,eAAe,SAAS,IAAI,SAAS,gBACrC,OAAO,iBAAiB,eACvB,eAAe,gBACf,IAAI,SAAS,cAGf;GAGF,KAAK,UAAU;GACf,KAAK,QAAQ;GACb,IAAI;IACF,IAAI,KAAK,WACP,OAAO,MACL,kCAAkC,KAAK,UAAU,IACjD,GACF;SAEA,OAAO,MAAM,gCAAgC,GAAG;GAEpD,QAAQ,CAER;GACA,KAAK,kBAAkB;EACzB,CAAC;CACL;CAEA,UAAU;EACR,IAAI,KAAK,UACP;EAGF,KAAK;EACL,KAAK,YAAY,MAAM;EACvB,KAAK,MAAM;CACb;CAEA,QAAQ;EACN,KAAK,YAAY,MAAM;CACzB;CAEA,UAAU;EACR,IAAI,KAAK,UACP;EAGF,KAAK,WAAW;EAChB,KAAK,YAAY,MAAM;EACvB,KAAK,YAAY,MAAM;CACzB;AACF"}
@@ -1,13 +0,0 @@
1
- //#region src/runtime/resource-operation.d.ts
2
- interface ResourceResult<T> {
3
- value: T | null;
4
- pending: boolean;
5
- error: Error | null;
6
- refresh(): void;
7
- }
8
- declare function resource<T, const TDeps extends readonly unknown[]>(fn: (opts: {
9
- signal: AbortSignal;
10
- }) => PromiseLike<T> | T, deps: TDeps): ResourceResult<T>;
11
- //#endregion
12
- export { ResourceResult, resource };
13
- //# sourceMappingURL=resource-operation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-operation.d.ts","names":[],"sources":["../../src/runtime/resource-operation.ts"],"mappings":";UAiBiB,cAAA;EACf,KAAA,EAAO,CAAA;EACP,OAAA;EACA,KAAA,EAAO,KAAK;EACZ,OAAA;AAAA;AAAA,iBAGc,QAAA,4CACd,EAAA,GAAK,IAAA;EAAQ,MAAA,EAAQ,WAAA;AAAA,MAAkB,WAAA,CAAY,CAAA,IAAK,CAAA,EACxD,IAAA,EAAM,KAAA,GACL,cAAA,CAAe,CAAA"}
@@ -1,170 +0,0 @@
1
- import { enqueueRuntimeLane } from "./access.js";
2
- import { getCurrentContextFrame } from "./context.js";
3
- import { getCurrentComponentInstance } from "./component-scope.js";
4
- import "./component.js";
5
- import { brandSnapshotSource } from "./snapshot-source.js";
6
- import { SSRDataMissingError } from "../common/ssr-errors.js";
7
- import { getActiveRenderContext, getCurrentRenderData, getNextRenderKey, throwSSRDataMissing } from "../common/render-context.js";
8
- import { ResourceCell } from "./resource-cell.js";
9
- import { state } from "./state.js";
10
- //#region src/runtime/resource-operation.ts
11
- /**
12
- * Resource primitive — simple, deterministic async primitive
13
- * Usage: resource(fn, deps)
14
- * - fn receives { signal }
15
- * - captures execution context once at creation (synchronous step only)
16
- * - executes at most once per generation; stale async results are ignored
17
- * - refresh() cancels in-flight execution, increments generation and re-runs
18
- * - exposes { value, pending, error, refresh }
19
- * - during SSR, async results are disallowed and will throw synchronously
20
- */
21
- function resource(fn, deps = []) {
22
- const instance = getCurrentComponentInstance();
23
- const inst = instance;
24
- if (!instance) {
25
- const renderData = getCurrentRenderData();
26
- if (renderData) {
27
- const key = getNextRenderKey();
28
- if (!(key in renderData)) throwSSRDataMissing();
29
- const val = renderData[key];
30
- return brandSnapshotSource({
31
- value: val,
32
- pending: false,
33
- error: null,
34
- refresh: () => {}
35
- });
36
- }
37
- if (getActiveRenderContext()) throwSSRDataMissing();
38
- throw new Error("[Askr] resource() must be called during component render inside an app. Do not create resources at module scope or outside render.");
39
- }
40
- const renderData = getCurrentRenderData();
41
- if (renderData) {
42
- const key = getNextRenderKey();
43
- if (!(key in renderData)) throwSSRDataMissing();
44
- const val = renderData[key];
45
- const h = state({
46
- cell: void 0,
47
- snapshot: brandSnapshotSource({
48
- value: val,
49
- pending: false,
50
- error: null,
51
- refresh: () => {}
52
- })
53
- })();
54
- h.snapshot.value = val;
55
- h.snapshot.pending = false;
56
- h.snapshot.error = null;
57
- return h.snapshot;
58
- }
59
- const holder = state({
60
- cell: void 0,
61
- snapshot: brandSnapshotSource({
62
- value: null,
63
- pending: true,
64
- error: null,
65
- refresh: () => {}
66
- })
67
- });
68
- const h = holder();
69
- if (!h.cell) {
70
- const cell = new ResourceCell(fn, deps, getCurrentContextFrame());
71
- cell.ownerName = inst.fn?.name || "<anonymous>";
72
- h.cell = cell;
73
- h.snapshot = cell.snapshot;
74
- const unsubscribe = cell.subscribe(() => {
75
- const cur = holder();
76
- cur.snapshot.value = cell.snapshot.value;
77
- cur.snapshot.pending = cell.snapshot.pending;
78
- cur.snapshot.error = cell.snapshot.error;
79
- holder.set(cur);
80
- try {
81
- inst.notifyUpdate?.();
82
- } catch {}
83
- });
84
- (inst.cleanupFns ??= []).push(() => {
85
- unsubscribe();
86
- cell.dispose();
87
- });
88
- if (inst.ssr) {
89
- cell.start(true, false);
90
- if (!cell.pending) {
91
- const cur = holder();
92
- cur.snapshot.value = cell.value;
93
- cur.snapshot.pending = cell.pending;
94
- cur.snapshot.error = cell.error;
95
- }
96
- } else {
97
- const scheduledGeneration = cell.generation;
98
- enqueueRuntimeLane("post", () => {
99
- if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) return;
100
- try {
101
- cell.start(false, false);
102
- } catch (err) {
103
- const cur = holder();
104
- cur.snapshot.value = cell.value;
105
- cur.snapshot.pending = cell.pending;
106
- cur.snapshot.error = err ?? null;
107
- holder.set(cur);
108
- inst.notifyUpdate?.();
109
- return;
110
- }
111
- if (!cell.pending) {
112
- const cur = holder();
113
- cur.snapshot.value = cell.value;
114
- cur.snapshot.pending = cell.pending;
115
- cur.snapshot.error = cell.error;
116
- holder.set(cur);
117
- inst.notifyUpdate?.();
118
- }
119
- });
120
- }
121
- }
122
- const cell = h.cell;
123
- cell.setLoader(fn);
124
- if (!cell.deps || cell.deps.length !== deps.length || cell.deps.some((d, i) => !Object.is(d, deps[i]))) {
125
- cell.deps = deps.slice();
126
- cell.generation++;
127
- cell.pending = true;
128
- cell.error = null;
129
- h.snapshot.pending = true;
130
- h.snapshot.error = null;
131
- try {
132
- if (inst.ssr) {
133
- cell.start(true, false);
134
- if (!cell.pending) {
135
- const cur = holder();
136
- cur.snapshot.value = cell.value;
137
- cur.snapshot.pending = cell.pending;
138
- cur.snapshot.error = cell.error;
139
- }
140
- } else {
141
- const scheduledGeneration = cell.generation;
142
- enqueueRuntimeLane("post", () => {
143
- if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) return;
144
- cell.start(false, false);
145
- if (!cell.pending) {
146
- const cur = holder();
147
- cur.snapshot.value = cell.value;
148
- cur.snapshot.pending = cell.pending;
149
- cur.snapshot.error = cell.error;
150
- holder.set(cur);
151
- inst.notifyUpdate?.();
152
- }
153
- });
154
- }
155
- } catch (err) {
156
- if (err instanceof SSRDataMissingError) throw err;
157
- cell.error = err;
158
- cell.pending = false;
159
- const cur = holder();
160
- cur.snapshot.value = cell.value;
161
- cur.snapshot.pending = cell.pending;
162
- cur.snapshot.error = cell.error;
163
- }
164
- }
165
- return h.snapshot;
166
- }
167
- //#endregion
168
- export { resource };
169
-
170
- //# sourceMappingURL=resource-operation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-operation.js","names":[],"sources":["../../src/runtime/resource-operation.ts"],"sourcesContent":["import {\n getCurrentComponentInstance,\n type ComponentInstance,\n} from './component';\nimport { getCurrentContextFrame } from './context';\nimport { ResourceCell } from './resource-cell';\nimport { state } from './state';\nimport { enqueueRuntimeLane } from './access';\nimport { brandSnapshotSource } from './snapshot-source';\nimport { SSRDataMissingError } from '../common/ssr-errors';\nimport {\n getActiveRenderContext,\n getCurrentRenderData,\n getNextRenderKey,\n throwSSRDataMissing,\n} from '../common/render-context';\n\nexport interface ResourceResult<T> {\n value: T | null;\n pending: boolean;\n error: Error | null;\n refresh(): void;\n}\n\nexport function resource<T, const TDeps extends readonly unknown[]>(\n fn: (opts: { signal: AbortSignal }) => PromiseLike<T> | T,\n deps: TDeps\n): ResourceResult<T>;\n\n/**\n * Resource primitive — simple, deterministic async primitive\n * Usage: resource(fn, deps)\n * - fn receives { signal }\n * - captures execution context once at creation (synchronous step only)\n * - executes at most once per generation; stale async results are ignored\n * - refresh() cancels in-flight execution, increments generation and re-runs\n * - exposes { value, pending, error, refresh }\n * - during SSR, async results are disallowed and will throw synchronously\n */\nexport function resource<T>(\n fn: (opts: { signal: AbortSignal }) => PromiseLike<T> | T,\n deps: readonly unknown[] = []\n): ResourceResult<T> {\n const instance = getCurrentComponentInstance();\n // Create a non-null alias early so it can be used in nested closures\n // without TypeScript complaining about possible null access.\n const inst = instance as ComponentInstance;\n\n if (!instance) {\n // If we're in a synchronous SSR render that has resolved data, use it.\n const renderData = getCurrentRenderData();\n if (renderData) {\n const key = getNextRenderKey();\n if (!(key in renderData)) {\n throwSSRDataMissing();\n }\n const val = renderData[key] as T;\n return brandSnapshotSource({\n value: val,\n pending: false,\n error: null,\n refresh: () => {},\n }) as ResourceResult<T>;\n }\n\n // If we are in an SSR render pass without supplied data, throw for clarity.\n const ssrCtx = getActiveRenderContext();\n if (ssrCtx) {\n throwSSRDataMissing();\n }\n\n // No active component instance and not in SSR render with data.\n // Autopilot invariant: resources must be created during render within an app.\n throw new Error(\n '[Askr] resource() must be called during component render inside an app. ' +\n 'Do not create resources at module scope or outside render.'\n );\n }\n\n // Internal ResourceCell — pure state machine now moved to its own module\n // to keep component wiring separate and ensure no component access here.\n // (See ./resource-cell.ts)\n\n // If we're in a synchronous SSR render that was supplied resolved data, use it\n const renderData = getCurrentRenderData();\n if (renderData) {\n // Deterministic key generation: the collection step and render step use\n // the same incremental key generation to align resources.\n const key = getNextRenderKey();\n if (!(key in renderData)) {\n throwSSRDataMissing();\n }\n\n // Commit synchronous value from render data and return a stable snapshot\n const val = renderData[key] as T;\n\n const holder = state<{\n cell?: ResourceCell<T>;\n snapshot: ResourceResult<T>;\n }>({\n cell: undefined,\n snapshot: brandSnapshotSource({\n value: val,\n pending: false,\n error: null,\n refresh: () => {},\n }) as ResourceResult<T>,\n });\n\n const h = holder();\n h.snapshot.value = val;\n h.snapshot.pending = false;\n h.snapshot.error = null;\n return h.snapshot;\n }\n\n // Persist a holder so the snapshot identity is stable across renders.\n const holder = state<{ cell?: ResourceCell<T>; snapshot: ResourceResult<T> }>(\n {\n cell: undefined,\n snapshot: brandSnapshotSource({\n value: null,\n pending: true,\n error: null,\n refresh: () => {},\n }) as ResourceResult<T>,\n }\n );\n\n const h = holder();\n\n // Initialize cell on first call\n if (!h.cell) {\n const frame = getCurrentContextFrame();\n const cell = new ResourceCell<T>(fn, deps, frame);\n // Attach debug label (component name) for richer logs\n cell.ownerName = inst.fn?.name || '<anonymous>';\n h.cell = cell;\n h.snapshot = cell.snapshot as ResourceResult<T>;\n\n // Subscribe and schedule component updates when cell changes\n const unsubscribe = cell.subscribe(() => {\n const cur = holder();\n cur.snapshot.value = cell.snapshot.value;\n cur.snapshot.pending = cell.snapshot.pending;\n cur.snapshot.error = cell.snapshot.error;\n holder.set(cur);\n try {\n inst.notifyUpdate?.();\n } catch {\n // ignore\n }\n });\n\n // Cleanup on unmount\n (inst.cleanupFns ??= []).push(() => {\n unsubscribe();\n cell.dispose();\n });\n\n // Render invariant: do NOT start async work during render on the client.\n // SSR remains strict/synchronous and must throw immediately if async is encountered.\n if (inst.ssr) {\n // SSR: must run synchronously so missing data throws during render\n cell.start(true, false);\n if (!cell.pending) {\n const cur = holder();\n cur.snapshot.value = cell.value;\n cur.snapshot.pending = cell.pending;\n cur.snapshot.error = cell.error;\n }\n } else {\n // Client: start after render via scheduler (never inline)\n const scheduledGeneration = cell.generation;\n enqueueRuntimeLane('post', () => {\n if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) {\n return;\n }\n\n try {\n cell.start(false, false);\n } catch (err) {\n // Non-SSR: reflect synchronous errors into snapshot via manual update\n const cur = holder();\n cur.snapshot.value = cell.value;\n cur.snapshot.pending = cell.pending;\n cur.snapshot.error = (err as Error) ?? null;\n holder.set(cur);\n inst.notifyUpdate?.();\n return;\n }\n\n // If the resource completed synchronously, subscribers were not notified.\n // Force a re-render so the component can observe the value.\n if (!cell.pending) {\n const cur = holder();\n cur.snapshot.value = cell.value;\n cur.snapshot.pending = cell.pending;\n cur.snapshot.error = cell.error;\n holder.set(cur);\n inst.notifyUpdate?.();\n }\n });\n }\n }\n\n const cell = h.cell!;\n cell.setLoader(fn);\n\n // Detect dependency changes and refresh immediately\n const depsChanged =\n !cell.deps ||\n cell.deps.length !== deps.length ||\n cell.deps.some((d, i) => !Object.is(d, deps[i]));\n\n if (depsChanged) {\n cell.deps = deps.slice();\n cell.generation++;\n cell.pending = true;\n cell.error = null;\n\n // Synchronously reflect the pending state into the stable snapshot so the\n // render that triggered the deps change can surface a loading indicator.\n // The async start() runs with notify=false and the deps-change branch never\n // re-published the snapshot, so without this a deps-driven refetch jumped\n // straight from the old value to the new value, never exposing pending.\n // Stale-while-revalidate: the previous value is retained until the new\n // fetch resolves.\n h.snapshot.pending = true;\n h.snapshot.error = null;\n try {\n if (inst.ssr) {\n cell.start(true, false);\n if (!cell.pending) {\n const cur = holder();\n cur.snapshot.value = cell.value;\n cur.snapshot.pending = cell.pending;\n cur.snapshot.error = cell.error;\n }\n } else {\n const scheduledGeneration = cell.generation;\n enqueueRuntimeLane('post', () => {\n if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) {\n return;\n }\n\n cell.start(false, false);\n if (!cell.pending) {\n const cur = holder();\n cur.snapshot.value = cell.value;\n cur.snapshot.pending = cell.pending;\n cur.snapshot.error = cell.error;\n holder.set(cur);\n inst.notifyUpdate?.();\n }\n });\n }\n } catch (err) {\n if (err instanceof SSRDataMissingError) throw err;\n cell.error = err as Error;\n cell.pending = false;\n const cur = holder();\n cur.snapshot.value = cell.value;\n cur.snapshot.pending = cell.pending;\n cur.snapshot.error = cell.error;\n // Do not call holder.set() here; this is still render.\n }\n }\n\n // Return the stable snapshot object owned by the cell\n return h.snapshot;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.d.ts","names":[],"sources":["../../src/runtime/runtime.ts"],"mappings":";;;;;UAIiB,2BAAA;EACf,WAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,SAAA;EACA,MAAA;EACA,cAAA;EACA,gBAAA;AAAA;AAAA,UAGe,mBAAA;EACf,QAAA,CACE,IAAA,WACA,MAAA,EAAQ,OAAA,SACR,OAAA,WACA,aAAA,GAAgB,iBAAA;EAElB,qBAAA,CAAsB,IAAA,EAAM,IAAA;EAC5B,mBAAA,CAAoB,IAAA,EAAM,OAAA;EAC1B,wBAAA,CAAyB,MAAA,EAAQ,OAAA;EACjC,mBAAA,CACE,MAAA,EAAQ,OAAA,GACP,GAAA,kBAAqB,OAAA;EACxB,8BAAA,CACE,MAAA,EAAQ,OAAA,EACR,QAAA,aACA,SAAA,EAAW,GAAA,kBAAqB,OAAA,gBAC/B,2BAAA;EACH,4BAAA,CAA6B,MAAA,EAAQ,cAAA;AAAA;AAAA,UAGtB,kBAAA;EACf,SAAA,GAAY,SAAA;EACZ,QAAA,GAAW,mBAAmB;AAAA;AAAA,cA4CnB,WAAA;EAAA,SACF,SAAA,EAAW,SAAA;EAAA,QACZ,YAAA;cAEI,OAAA,GAAS,kBAAA;EAAA,IAKjB,QAAA,IAAY,mBAAA;EAIhB,iBAAA,CAAkB,QAAA,EAAU,mBAAA;AAAA;AAAA,cAKjB,cAAA,EAAc,WAEzB;AAAA,iBAEc,aAAA,CAAc,OAAA,GAAS,kBAAA,GAA0B,WAAW;AAAA,iBAI5D,iBAAA,IAAqB,WAAW;AAAA,iBAIhC,wBAAA,CACd,QAAA,EAAU,mBAAA,EACV,OAAA,GAAS,WAA4B"}
@@ -1,59 +0,0 @@
1
- import { globalScheduler } from "./scheduler.js";
2
- //#region src/runtime/runtime.ts
3
- function createMissingRendererHost() {
4
- const missing = (method) => {
5
- throw new Error(`[Askr] renderer host is not configured; cannot call ${method}().`);
6
- };
7
- return {
8
- evaluate() {
9
- missing("evaluate");
10
- },
11
- cleanupInstancesUnder() {
12
- missing("cleanupInstancesUnder");
13
- },
14
- teardownNodeSubtree() {
15
- missing("teardownNodeSubtree");
16
- },
17
- populateKeyMapForElement() {},
18
- getKeyMapForElement() {},
19
- isKeyedReorderFastPathEligible() {
20
- return {
21
- useFastPath: false,
22
- totalKeyed: 0,
23
- totalChildren: 0,
24
- currentKeyCount: 0,
25
- moveCount: 0,
26
- lisLen: 0,
27
- hasPropChanges: false,
28
- isWholeKeyedList: false
29
- };
30
- },
31
- markReactivePropsDirtySource() {}
32
- };
33
- }
34
- var AskrRuntime = class {
35
- constructor(options = {}) {
36
- this.scheduler = options.scheduler ?? globalScheduler;
37
- this.rendererHost = options.renderer ?? createMissingRendererHost();
38
- }
39
- get renderer() {
40
- return this.rendererHost;
41
- }
42
- configureRenderer(renderer) {
43
- this.rendererHost = renderer;
44
- }
45
- };
46
- const defaultRuntime = new AskrRuntime({ scheduler: globalScheduler });
47
- function createRuntime(options = {}) {
48
- return new AskrRuntime(options);
49
- }
50
- function getDefaultRuntime() {
51
- return defaultRuntime;
52
- }
53
- function configureRuntimeRenderer(renderer, runtime = defaultRuntime) {
54
- runtime.configureRenderer(renderer);
55
- }
56
- //#endregion
57
- export { AskrRuntime, configureRuntimeRenderer, createRuntime, defaultRuntime, getDefaultRuntime };
58
-
59
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","names":[],"sources":["../../src/runtime/runtime.ts"],"sourcesContent":["import { globalScheduler, type Scheduler } from './scheduler';\nimport type { ComponentInstance } from './component';\nimport type { ReadableSource } from './readable';\n\nexport interface RuntimeKeyedReorderDecision {\n useFastPath: boolean;\n totalKeyed: number;\n totalChildren: number;\n currentKeyCount: number;\n moveCount: number;\n lisLen: number;\n hasPropChanges: boolean;\n isWholeKeyedList: boolean;\n}\n\nexport interface RuntimeRendererHost {\n evaluate(\n node: unknown,\n target: Element | null,\n context?: object,\n retainedOwner?: ComponentInstance\n ): void;\n cleanupInstancesUnder(node: Node): void;\n teardownNodeSubtree(root: Element): void;\n populateKeyMapForElement(parent: Element): void;\n getKeyMapForElement(\n parent: Element\n ): Map<string | number, Element> | undefined;\n isKeyedReorderFastPathEligible(\n parent: Element,\n children: unknown[],\n oldKeyMap: Map<string | number, Element> | undefined\n ): RuntimeKeyedReorderDecision;\n markReactivePropsDirtySource(source: ReadableSource<unknown>): void;\n}\n\nexport interface AskrRuntimeOptions {\n scheduler?: Scheduler;\n renderer?: RuntimeRendererHost;\n}\n\nfunction createMissingRendererHost(): RuntimeRendererHost {\n const missing = (method: string): never => {\n throw new Error(\n `[Askr] renderer host is not configured; cannot call ${method}().`\n );\n };\n\n return {\n evaluate() {\n missing('evaluate');\n },\n cleanupInstancesUnder() {\n missing('cleanupInstancesUnder');\n },\n teardownNodeSubtree() {\n missing('teardownNodeSubtree');\n },\n populateKeyMapForElement() {\n // Fast-lane callers treat an empty key map as a normal decline.\n },\n getKeyMapForElement() {\n return undefined;\n },\n isKeyedReorderFastPathEligible() {\n return {\n useFastPath: false,\n totalKeyed: 0,\n totalChildren: 0,\n currentKeyCount: 0,\n moveCount: 0,\n lisLen: 0,\n hasPropChanges: false,\n isWholeKeyedList: false,\n };\n },\n markReactivePropsDirtySource() {\n // Reactive prop tracking is renderer-owned and optional for runtimes.\n },\n };\n}\n\nexport class AskrRuntime {\n readonly scheduler: Scheduler;\n private rendererHost: RuntimeRendererHost;\n\n constructor(options: AskrRuntimeOptions = {}) {\n this.scheduler = options.scheduler ?? globalScheduler;\n this.rendererHost = options.renderer ?? createMissingRendererHost();\n }\n\n get renderer(): RuntimeRendererHost {\n return this.rendererHost;\n }\n\n configureRenderer(renderer: RuntimeRendererHost): void {\n this.rendererHost = renderer;\n }\n}\n\nexport const defaultRuntime = new AskrRuntime({\n scheduler: globalScheduler,\n});\n\nexport function createRuntime(options: AskrRuntimeOptions = {}): AskrRuntime {\n return new AskrRuntime(options);\n}\n\nexport function getDefaultRuntime(): AskrRuntime {\n return defaultRuntime;\n}\n\nexport function configureRuntimeRenderer(\n renderer: RuntimeRendererHost,\n runtime: AskrRuntime = defaultRuntime\n): void {\n runtime.configureRenderer(renderer);\n}\n"],"mappings":";;AAyCA,SAAS,4BAAiD;CACxD,MAAM,WAAW,WAA0B;EACzC,MAAM,IAAI,MACR,uDAAuD,OAAO,IAChE;CACF;CAEA,OAAO;EACL,WAAW;GACT,QAAQ,UAAU;EACpB;EACA,wBAAwB;GACtB,QAAQ,uBAAuB;EACjC;EACA,sBAAsB;GACpB,QAAQ,qBAAqB;EAC/B;EACA,2BAA2B,CAE3B;EACA,sBAAsB,CAEtB;EACA,iCAAiC;GAC/B,OAAO;IACL,aAAa;IACb,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,kBAAkB;GACpB;EACF;EACA,+BAA+B,CAE/B;CACF;AACF;AAEA,IAAa,cAAb,MAAyB;CAIvB,YAAY,UAA8B,CAAC,GAAG;EAC5C,KAAK,YAAY,QAAQ,aAAa;EACtC,KAAK,eAAe,QAAQ,YAAY,0BAA0B;CACpE;CAEA,IAAI,WAAgC;EAClC,OAAO,KAAK;CACd;CAEA,kBAAkB,UAAqC;EACrD,KAAK,eAAe;CACtB;AACF;AAEA,MAAa,iBAAiB,IAAI,YAAY,EAC5C,WAAW,gBACb,CAAC;AAED,SAAgB,cAAc,UAA8B,CAAC,GAAgB;CAC3E,OAAO,IAAI,YAAY,OAAO;AAChC;AAEA,SAAgB,oBAAiC;CAC/C,OAAO;AACT;AAEA,SAAgB,yBACd,UACA,UAAuB,gBACjB;CACN,QAAQ,kBAAkB,QAAQ;AACpC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scheduler.d.ts","names":[],"sources":["../../src/runtime/scheduler.ts"],"mappings":";;;;;;AAkBS;AACT;;;;KADK,IAAA;AAAA,KACO,aAAA;AAAA,KACA,wBAAA;AAAA,cAcC,SAAA;EAAA,QACH,eAAA;EAAA,QAEA,KAAA;EAAA,QAOA,OAAA;EAAA,QACA,SAAA;EAAA,QACA,KAAA;EAAA,QACA,cAAA;EAAA,QAGA,YAAA;EAAA,QAGA,aAAA;EAAA,QAGA,iBAAA;EAAA,QAGA,OAAA;EAAA,QAQA,SAAA;EAER,kBAAA,CAAmB,KAAA,EAAO,wBAAA;EAAA,QAIlB,kBAAA;EAAA,QASA,eAAA;EAAA,QAUA,mBAAA;EAAA,QASA,WAAA;EAAA,QAmBA,iBAAA;EAgCR,OAAA,CAAQ,IAAA,EAAM,IAAA;EAId,aAAA,CAAc,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,IAAA;EAuBzC,KAAA;EA4FA,mBAAA,IAAuB,EAAA,QAAU,CAAA,GAAI,CAAA;EAyCrC,YAAA,CAAa,aAAA,WAAwB,SAAA,YAAmB,OAAA;EAgCxD,QAAA;;;;;;;;;;;;;;;;EAsBA,eAAA;EAIA,aAAA;EAMA,iBAAA,IAAqB,EAAA,QAAU,CAAA,EAAG,SAAA,sBAAwC,CAAA;EAmB1E,YAAA,CAAa,CAAA;EAOb,WAAA;EAIA,WAAA;EAKA,qBAAA;EAAA,QAgCQ,cAAA;AAAA;AAAA,cAmBG,eAAA,EAAe,SAAkB;AAAA,iBAE9B,oBAAA;AAAA,iBAIA,oBAAA,CAAqB,OAAA,EAAS,aAAA,GAAgB,aAAa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scheduler.js","names":[],"sources":["../../src/runtime/scheduler.ts"],"sourcesContent":["/**\n * Serialized update scheduler — safer design (no inline execution, explicit flush)\n *\n * Key ideas:\n * - Never execute a task inline from `enqueue`.\n * - `flush()` is explicit and non-reentrant.\n * - `runWithSyncProgress()` allows enqueues temporarily but does not run tasks\n * inline; it runs `fn` and then does an explicit `flush()`.\n * - `waitForFlush()` is race-free with a monotonic `flushVersion`.\n */\n\nimport { isDevelopmentEnvironment } from '../common/env';\nimport { assertSchedulingPrecondition, invariant } from '../common/invariant';\nimport { logger } from '../common/logger';\nimport { recordSchedulerFlushTaskCount } from './perf-metrics';\n\nconst MAX_FLUSH_DEPTH = 50;\n\ntype Task = () => void;\nexport type SchedulerLane = 'derived' | 'component' | 'reactive' | 'post';\nexport type SchedulerBulkCommitProbe = () => boolean;\n\nconst SCHEDULER_LANES: SchedulerLane[] = [\n 'derived',\n 'component',\n 'reactive',\n 'post',\n];\n\ninterface LaneQueue {\n tasks: Task[];\n head: number;\n}\n\nexport class Scheduler {\n private bulkCommitProbe: SchedulerBulkCommitProbe = () => false;\n\n private lanes: Record<SchedulerLane, LaneQueue> = {\n derived: { tasks: [], head: 0 },\n component: { tasks: [], head: 0 },\n reactive: { tasks: [], head: 0 },\n post: { tasks: [], head: 0 },\n };\n\n private running = false;\n private inHandler = false;\n private depth = 0;\n private executionDepth = 0; // for compat with existing diagnostics\n\n // Monotonic flush version increments at end of each flush\n private flushVersion = 0;\n\n // Best-effort microtask kick scheduling\n private kickScheduled = false;\n\n // Escape hatch flag for runWithSyncProgress\n private allowSyncProgress = false;\n\n // Waiters waiting for flushVersion >= target\n private waiters: Array<{\n target: number;\n resolve: () => void;\n reject: (err: unknown) => void;\n timer?: ReturnType<typeof setTimeout>;\n }> = [];\n\n // Keep a lightweight taskCount for compatibility/diagnostics\n private taskCount = 0;\n\n setBulkCommitProbe(probe: SchedulerBulkCommitProbe): void {\n this.bulkCommitProbe = probe;\n }\n\n private isBulkCommitActive(): boolean {\n try {\n return this.bulkCommitProbe();\n } catch (e) {\n void e;\n return false;\n }\n }\n\n private hasPendingTasks(): boolean {\n for (const lane of SCHEDULER_LANES) {\n const queue = this.lanes[lane];\n if (queue.head < queue.tasks.length) {\n return true;\n }\n }\n return false;\n }\n\n private getPendingTaskCount(): number {\n let total = 0;\n for (const lane of SCHEDULER_LANES) {\n const queue = this.lanes[lane];\n total += queue.tasks.length - queue.head;\n }\n return total;\n }\n\n private compactLane(queue: LaneQueue): void {\n if (queue.head >= queue.tasks.length) {\n queue.tasks.length = 0;\n queue.head = 0;\n return;\n }\n\n if (queue.head <= 0) {\n return;\n }\n\n const remaining = queue.tasks.length - queue.head;\n for (let i = 0; i < remaining; i++) {\n queue.tasks[i] = queue.tasks[queue.head + i];\n }\n queue.tasks.length = remaining;\n queue.head = 0;\n }\n\n private scheduleFlushKick(): void {\n if (\n this.running ||\n this.kickScheduled ||\n this.inHandler ||\n this.allowSyncProgress ||\n this.isBulkCommitActive() ||\n !this.hasPendingTasks()\n ) {\n return;\n }\n\n this.kickScheduled = true;\n queueMicrotask(() => {\n this.kickScheduled = false;\n if (\n this.running ||\n this.isBulkCommitActive() ||\n !this.hasPendingTasks()\n ) {\n return;\n }\n try {\n this.flush();\n } catch (err) {\n setTimeout(() => {\n throw err;\n });\n }\n });\n }\n\n enqueue(task: Task): void {\n this.enqueueInLane('component', task);\n }\n\n enqueueInLane(lane: SchedulerLane, task: Task): void {\n assertSchedulingPrecondition(\n typeof task === 'function',\n 'enqueue() requires a function'\n );\n\n // Strict rule: during bulk commit, only allow enqueues if runWithSyncProgress enabled\n if (this.isBulkCommitActive() && !this.allowSyncProgress) {\n if (isDevelopmentEnvironment()) {\n throw new Error(\n '[Scheduler] enqueue() during bulk commit (not allowed)'\n );\n }\n return;\n }\n\n // Enqueue task and account counts\n this.lanes[lane].tasks.push(task);\n this.taskCount++;\n\n this.scheduleFlushKick();\n }\n\n flush(): void {\n invariant(\n !this.running,\n '[Scheduler] flush() called while already running'\n );\n\n // Dev-only guard: disallow flush during bulk commit unless allowed\n if (isDevelopmentEnvironment()) {\n if (this.isBulkCommitActive() && !this.allowSyncProgress) {\n throw new Error(\n '[Scheduler] flush() started during bulk commit (not allowed)'\n );\n }\n }\n\n this.running = true;\n this.depth = 0;\n let fatal: unknown = null;\n let executedTaskCount = 0;\n const checkFlushDepth = isDevelopmentEnvironment();\n const executionsByTask = checkFlushDepth ? new Map<Task, number>() : null;\n\n try {\n while (fatal === null) {\n let didRunTask = false;\n\n for (const lane of SCHEDULER_LANES) {\n const laneQueue = this.lanes[lane];\n let executedInLane = 0;\n\n while (laneQueue.head < laneQueue.tasks.length) {\n const task = laneQueue.tasks[laneQueue.head++];\n if (executionsByTask) {\n const taskExecutions = (executionsByTask.get(task) ?? 0) + 1;\n executionsByTask.set(task, taskExecutions);\n this.depth = Math.max(this.depth, taskExecutions);\n if (taskExecutions > MAX_FLUSH_DEPTH) {\n throw new Error(\n `[Scheduler] exceeded MAX_FLUSH_DEPTH (${MAX_FLUSH_DEPTH}). Likely infinite update loop.`\n );\n }\n }\n\n try {\n this.executionDepth++;\n task();\n this.executionDepth--;\n executedTaskCount++;\n executedInLane++;\n didRunTask = true;\n } catch (err) {\n // ensure executionDepth stays balanced for the task that threw\n if (this.executionDepth > 0) this.executionDepth--;\n fatal = err;\n break;\n }\n }\n\n if (executedInLane > 0) {\n this.taskCount = Math.max(0, this.taskCount - executedInLane);\n }\n\n if (fatal !== null) {\n break;\n }\n }\n\n if (!didRunTask) {\n break;\n }\n }\n } finally {\n this.running = false;\n this.depth = 0;\n this.executionDepth = 0;\n\n for (const lane of SCHEDULER_LANES) {\n const queue = this.lanes[lane];\n if (queue.head > 0) {\n this.compactLane(queue);\n }\n }\n\n // Advance flush epoch and resolve waiters\n this.flushVersion++;\n this.resolveWaiters();\n recordSchedulerFlushTaskCount(executedTaskCount);\n }\n\n if (fatal) throw fatal;\n }\n\n runWithSyncProgress<T>(fn: () => T): T {\n const prev = this.allowSyncProgress;\n this.allowSyncProgress = true;\n\n // Snapshot flushVersion so we can ensure we always complete an epoch\n const startVersion = this.flushVersion;\n\n try {\n const res = fn();\n\n // Flush deterministically if tasks were enqueued (and we're not already running)\n if (!this.running && this.hasPendingTasks()) {\n this.flush();\n }\n\n if (isDevelopmentEnvironment()) {\n if (!this.running && this.hasPendingTasks()) {\n throw new Error(\n '[Scheduler] tasks remain after runWithSyncProgress flush'\n );\n }\n }\n\n return res;\n } finally {\n // If no flush happened during the protected window, complete an epoch so\n // observers (tests) see progress even when fast-lane did synchronous work\n // without enqueuing tasks.\n try {\n if (this.flushVersion === startVersion) {\n this.flushVersion++;\n this.resolveWaiters();\n }\n } catch (e) {\n void e;\n }\n\n this.allowSyncProgress = prev;\n }\n }\n\n waitForFlush(targetVersion?: number, timeoutMs = 2000): Promise<void> {\n const target =\n typeof targetVersion === 'number' ? targetVersion : this.flushVersion + 1;\n if (this.flushVersion >= target) return Promise.resolve();\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n const ns =\n (\n globalThis as unknown as Record<string, unknown> & {\n __ASKR__?: Record<string, unknown>;\n }\n ).__ASKR__ || {};\n const diag = {\n flushVersion: this.flushVersion,\n queueLen: this.getPendingTaskCount(),\n running: this.running,\n inHandler: this.inHandler,\n bulk: this.isBulkCommitActive(),\n namespace: ns,\n };\n reject(\n new Error(\n `waitForFlush timeout ${timeoutMs}ms: ${JSON.stringify(diag)}`\n )\n );\n }, timeoutMs);\n\n this.waiters.push({ target, resolve, reject, timer });\n });\n }\n\n getState() {\n // Provide the compatibility shape expected by diagnostics/tests\n return {\n queueLength: this.getPendingTaskCount(),\n running: this.running,\n depth: this.depth,\n executionDepth: this.executionDepth,\n taskCount: this.taskCount,\n flushVersion: this.flushVersion,\n laneQueues: {\n derived: this.lanes.derived.tasks.length - this.lanes.derived.head,\n component:\n this.lanes.component.tasks.length - this.lanes.component.head,\n reactive: this.lanes.reactive.tasks.length - this.lanes.reactive.head,\n post: this.lanes.post.tasks.length - this.lanes.post.head,\n },\n // New fields for optional inspection\n inHandler: this.inHandler,\n allowSyncProgress: this.allowSyncProgress,\n };\n }\n\n getFlushVersion(): number {\n return this.flushVersion;\n }\n\n flushIfQueued(): void {\n if (!this.running && this.hasPendingTasks()) {\n this.flush();\n }\n }\n\n runInHandlerScope<T>(fn: () => T, flushMode: 'defer' | 'sync' = 'defer'): T {\n const prevInHandler = this.inHandler;\n this.inHandler = true;\n\n try {\n return fn();\n } finally {\n this.inHandler = prevInHandler;\n\n if (!this.inHandler) {\n if (flushMode === 'sync') {\n this.flushIfQueued();\n } else {\n this.scheduleFlushKick();\n }\n }\n }\n }\n\n setInHandler(v: boolean) {\n this.inHandler = v;\n if (!v) {\n this.scheduleFlushKick();\n }\n }\n\n isInHandler(): boolean {\n return this.inHandler;\n }\n\n isExecuting(): boolean {\n return this.running || this.executionDepth > 0;\n }\n\n // Clear pending synchronous tasks (used by fastlane enter/exit)\n clearPendingSyncTasks(): number {\n const remaining = this.getPendingTaskCount();\n if (remaining <= 0) return 0;\n\n if (this.running) {\n for (const lane of SCHEDULER_LANES) {\n const queue = this.lanes[lane];\n queue.tasks.length = queue.head;\n }\n this.taskCount = Math.max(0, this.taskCount - remaining);\n queueMicrotask(() => {\n try {\n this.flushVersion++;\n this.resolveWaiters();\n } catch (e) {\n void e;\n }\n });\n return remaining;\n }\n\n for (const lane of SCHEDULER_LANES) {\n const queue = this.lanes[lane];\n queue.tasks.length = 0;\n queue.head = 0;\n }\n this.taskCount = Math.max(0, this.taskCount - remaining);\n this.flushVersion++;\n this.resolveWaiters();\n return remaining;\n }\n\n private resolveWaiters() {\n if (this.waiters.length === 0) return;\n const ready: Array<() => void> = [];\n const remaining: typeof this.waiters = [];\n\n for (const w of this.waiters) {\n if (this.flushVersion >= w.target) {\n if (w.timer) clearTimeout(w.timer);\n ready.push(w.resolve);\n } else {\n remaining.push(w);\n }\n }\n\n this.waiters = remaining;\n for (const r of ready) r();\n }\n}\n\nexport const globalScheduler = new Scheduler();\n\nexport function isSchedulerExecuting(): boolean {\n return globalScheduler.isExecuting();\n}\n\nexport function scheduleEventHandler(handler: EventListener): EventListener {\n return (event: Event) => {\n try {\n globalScheduler.runInHandlerScope(() => {\n handler.call(null, event);\n });\n } catch (error) {\n logger.error('[Askr] Event handler error:', error);\n }\n };\n}\n"],"mappings":"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"}