@askrjs/askr 0.0.27 → 0.0.29

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 (442) hide show
  1. package/README.md +55 -147
  2. package/dist/_virtual/_rolldown/runtime.js +7 -0
  3. package/dist/bench/components/benchmark-row.d.ts +20 -0
  4. package/dist/bench/components/benchmark-row.d.ts.map +1 -0
  5. package/dist/bench/components/benchmark-row.js +42 -0
  6. package/dist/bench/components/benchmark-row.js.map +1 -0
  7. package/dist/bench/components/benchmark-table.js +25 -0
  8. package/dist/bench/components/benchmark-table.js.map +1 -0
  9. package/dist/benchmark.d.ts +22 -0
  10. package/dist/benchmark.d.ts.map +1 -0
  11. package/dist/benchmark.js +64 -1
  12. package/dist/benchmark.js.map +1 -0
  13. package/dist/bin/askr-ssg.d.ts +28 -0
  14. package/dist/bin/askr-ssg.d.ts.map +1 -0
  15. package/dist/bin/askr-ssg.js +171 -0
  16. package/dist/bin/askr-ssg.js.map +1 -0
  17. package/dist/boot/index.d.ts +64 -42
  18. package/dist/boot/index.d.ts.map +1 -1
  19. package/dist/boot/index.js +416 -2
  20. package/dist/boot/index.js.map +1 -0
  21. package/dist/common/component.d.ts +14 -13
  22. package/dist/common/component.d.ts.map +1 -1
  23. package/dist/common/control.d.ts +13 -0
  24. package/dist/common/control.d.ts.map +1 -0
  25. package/dist/common/control.js +14 -0
  26. package/dist/common/control.js.map +1 -0
  27. package/dist/common/env.js +47 -0
  28. package/dist/common/env.js.map +1 -0
  29. package/dist/common/jsx.d.ts +17 -15
  30. package/dist/common/jsx.d.ts.map +1 -1
  31. package/dist/common/jsx.js +8 -1
  32. package/dist/common/jsx.js.map +1 -0
  33. package/dist/common/props.d.ts +14 -11
  34. package/dist/common/props.d.ts.map +1 -1
  35. package/dist/common/router.d.ts +190 -32
  36. package/dist/common/router.d.ts.map +1 -1
  37. package/dist/common/ssr-errors.d.ts +6 -3
  38. package/dist/common/ssr-errors.d.ts.map +1 -1
  39. package/dist/common/ssr-errors.js +16 -1
  40. package/dist/common/ssr-errors.js.map +1 -0
  41. package/dist/common/ssr.d.ts +12 -9
  42. package/dist/common/ssr.d.ts.map +1 -1
  43. package/dist/common/vnode.d.ts +17 -15
  44. package/dist/common/vnode.d.ts.map +1 -1
  45. package/dist/common/vnode.js +10 -1
  46. package/dist/common/vnode.js.map +1 -0
  47. package/dist/components/link.d.ts +37 -25
  48. package/dist/components/link.d.ts.map +1 -1
  49. package/dist/components/link.js +64 -1
  50. package/dist/components/link.js.map +1 -0
  51. package/dist/control/case.d.ts +17 -0
  52. package/dist/control/case.d.ts.map +1 -0
  53. package/dist/control/case.js +69 -0
  54. package/dist/control/case.js.map +1 -0
  55. package/dist/control/for.d.ts +23 -0
  56. package/dist/control/for.d.ts.map +1 -0
  57. package/dist/control/for.js +62 -0
  58. package/dist/control/for.js.map +1 -0
  59. package/dist/control/index.d.ts +4 -0
  60. package/dist/control/index.js +4 -0
  61. package/dist/control/shared.js +20 -0
  62. package/dist/control/shared.js.map +1 -0
  63. package/dist/control/show.d.ts +14 -0
  64. package/dist/control/show.d.ts.map +1 -0
  65. package/dist/control/show.js +33 -0
  66. package/dist/control/show.js.map +1 -0
  67. package/dist/dev/invariant.js +29 -2
  68. package/dist/dev/invariant.js.map +1 -0
  69. package/dist/dev/logger.js +37 -1
  70. package/dist/dev/logger.js.map +1 -0
  71. package/dist/foundations/icon/icon.d.ts +53 -0
  72. package/dist/foundations/icon/icon.d.ts.map +1 -0
  73. package/dist/foundations/icon/icon.js +88 -0
  74. package/dist/foundations/icon/icon.js.map +1 -0
  75. package/dist/foundations/icon/icon.types.d.ts +21 -0
  76. package/dist/foundations/icon/icon.types.d.ts.map +1 -0
  77. package/dist/foundations/index.d.ts +10 -3
  78. package/dist/foundations/index.js +9 -1
  79. package/dist/foundations/interactions/interaction-policy.js +93 -1
  80. package/dist/foundations/interactions/interaction-policy.js.map +1 -0
  81. package/dist/foundations/interactions/pressable.js +51 -1
  82. package/dist/foundations/interactions/pressable.js.map +1 -0
  83. package/dist/foundations/structures/collection.d.ts +25 -40
  84. package/dist/foundations/structures/collection.d.ts.map +1 -1
  85. package/dist/foundations/structures/collection.js +51 -1
  86. package/dist/foundations/structures/collection.js.map +1 -0
  87. package/dist/foundations/structures/layer.d.ts +47 -68
  88. package/dist/foundations/structures/layer.d.ts.map +1 -1
  89. package/dist/foundations/structures/layer.js +81 -1
  90. package/dist/foundations/structures/layer.js.map +1 -0
  91. package/dist/foundations/structures/layout.d.ts +6 -3
  92. package/dist/foundations/structures/layout.d.ts.map +1 -1
  93. package/dist/foundations/structures/layout.js +13 -1
  94. package/dist/foundations/structures/layout.js.map +1 -0
  95. package/dist/foundations/structures/portal.d.ts +17 -10
  96. package/dist/foundations/structures/portal.d.ts.map +1 -1
  97. package/dist/foundations/structures/portal.js +105 -1
  98. package/dist/foundations/structures/portal.js.map +1 -0
  99. package/dist/foundations/structures/presence.d.ts +11 -5
  100. package/dist/foundations/structures/presence.d.ts.map +1 -1
  101. package/dist/foundations/structures/presence.js +39 -1
  102. package/dist/foundations/structures/presence.js.map +1 -0
  103. package/dist/foundations/structures/slot.d.ts +11 -8
  104. package/dist/foundations/structures/slot.d.ts.map +1 -1
  105. package/dist/foundations/structures/slot.js +41 -1
  106. package/dist/foundations/structures/slot.js.map +1 -0
  107. package/dist/foundations/structures.d.ts +7 -14
  108. package/dist/foundations/structures.js +6 -1
  109. package/dist/foundations/utilities/aria.js +11 -1
  110. package/dist/foundations/utilities/aria.js.map +1 -0
  111. package/dist/foundations/utilities/compose-handlers.js +20 -1
  112. package/dist/foundations/utilities/compose-handlers.js.map +1 -0
  113. package/dist/foundations/utilities/compose-ref.d.ts +7 -4
  114. package/dist/foundations/utilities/compose-ref.d.ts.map +1 -1
  115. package/dist/foundations/utilities/compose-ref.js +18 -1
  116. package/dist/foundations/utilities/compose-ref.js.map +1 -0
  117. package/dist/foundations/utilities/merge-props.js +49 -1
  118. package/dist/foundations/utilities/merge-props.js.map +1 -0
  119. package/dist/fx/fx.d.ts +24 -21
  120. package/dist/fx/fx.d.ts.map +1 -1
  121. package/dist/fx/fx.js +212 -1
  122. package/dist/fx/fx.js.map +1 -0
  123. package/dist/fx/index.d.ts +4 -7
  124. package/dist/fx/index.js +4 -1
  125. package/dist/fx/noop.js +9 -1
  126. package/dist/fx/noop.js.map +1 -0
  127. package/dist/fx/timing.d.ts +24 -21
  128. package/dist/fx/timing.d.ts.map +1 -1
  129. package/dist/fx/timing.js +236 -1
  130. package/dist/fx/timing.js.map +1 -0
  131. package/dist/index.d.ts +21 -20
  132. package/dist/index.js +34 -1
  133. package/dist/index.js.map +1 -0
  134. package/dist/jsx/index.d.ts +1 -4
  135. package/dist/jsx/index.js +3 -1
  136. package/dist/jsx/types.d.ts +18 -25
  137. package/dist/jsx/types.d.ts.map +1 -1
  138. package/dist/jsx/types.js +1 -1
  139. package/dist/jsx/utils.d.ts +4 -3
  140. package/dist/jsx/utils.d.ts.map +1 -1
  141. package/dist/jsx/utils.js +19 -1
  142. package/dist/jsx/utils.js.map +1 -0
  143. package/dist/jsx-dev-runtime.d.ts +8 -0
  144. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  145. package/dist/jsx-dev-runtime.js +32 -1
  146. package/dist/jsx-dev-runtime.js.map +1 -0
  147. package/dist/jsx-runtime.d.ts +12 -0
  148. package/dist/jsx-runtime.d.ts.map +1 -0
  149. package/dist/jsx-runtime.js +45 -1
  150. package/dist/jsx-runtime.js.map +1 -0
  151. package/dist/jsx-runtime2.d.ts +2 -0
  152. package/dist/jsx-runtime2.js +3 -0
  153. package/dist/renderer/children.js +293 -0
  154. package/dist/renderer/children.js.map +1 -0
  155. package/dist/renderer/cleanup.js +150 -1
  156. package/dist/renderer/cleanup.js.map +1 -0
  157. package/dist/renderer/dom.js +2439 -1
  158. package/dist/renderer/dom.js.map +1 -0
  159. package/dist/renderer/env.js +1 -0
  160. package/dist/renderer/evaluate.js +450 -1
  161. package/dist/renderer/evaluate.js.map +1 -0
  162. package/dist/renderer/fastpath.js +145 -1
  163. package/dist/renderer/fastpath.js.map +1 -0
  164. package/dist/renderer/index.js +24 -1
  165. package/dist/renderer/index.js.map +1 -0
  166. package/dist/renderer/keyed.js +119 -1
  167. package/dist/renderer/keyed.js.map +1 -0
  168. package/dist/renderer/reconcile.js +359 -1
  169. package/dist/renderer/reconcile.js.map +1 -0
  170. package/dist/renderer/types.js +1 -1
  171. package/dist/renderer/utils.js +220 -1
  172. package/dist/renderer/utils.js.map +1 -0
  173. package/dist/resources/index.d.ts +3 -9
  174. package/dist/resources/index.js +3 -1
  175. package/dist/router/index.d.ts +6 -10
  176. package/dist/router/index.js +5 -1
  177. package/dist/router/match.js +83 -1
  178. package/dist/router/match.js.map +1 -0
  179. package/dist/router/navigate.d.ts +20 -8
  180. package/dist/router/navigate.d.ts.map +1 -1
  181. package/dist/router/navigate.js +288 -1
  182. package/dist/router/navigate.js.map +1 -0
  183. package/dist/router/policy.d.ts +22 -0
  184. package/dist/router/policy.d.ts.map +1 -0
  185. package/dist/router/policy.js +116 -0
  186. package/dist/router/policy.js.map +1 -0
  187. package/dist/router/route-context.js +79 -0
  188. package/dist/router/route-context.js.map +1 -0
  189. package/dist/router/route.d.ts +101 -33
  190. package/dist/router/route.d.ts.map +1 -1
  191. package/dist/router/route.js +599 -1
  192. package/dist/router/route.js.map +1 -0
  193. package/dist/runtime/child-scope.d.ts +21 -0
  194. package/dist/runtime/child-scope.d.ts.map +1 -0
  195. package/dist/runtime/child-scope.js +77 -0
  196. package/dist/runtime/child-scope.js.map +1 -0
  197. package/dist/runtime/component.d.ts +67 -53
  198. package/dist/runtime/component.d.ts.map +1 -1
  199. package/dist/runtime/component.js +462 -1
  200. package/dist/runtime/component.js.map +1 -0
  201. package/dist/runtime/context.d.ts +28 -42
  202. package/dist/runtime/context.d.ts.map +1 -1
  203. package/dist/runtime/context.js +205 -1
  204. package/dist/runtime/context.js.map +1 -0
  205. package/dist/runtime/control.d.ts +43 -0
  206. package/dist/runtime/control.d.ts.map +1 -0
  207. package/dist/runtime/control.js +125 -0
  208. package/dist/runtime/control.js.map +1 -0
  209. package/dist/runtime/derive.d.ts +15 -6
  210. package/dist/runtime/derive.d.ts.map +1 -1
  211. package/dist/runtime/derive.js +134 -1
  212. package/dist/runtime/derive.js.map +1 -0
  213. package/dist/runtime/dev-namespace.js +57 -1
  214. package/dist/runtime/dev-namespace.js.map +1 -0
  215. package/dist/runtime/effect.d.ts +32 -0
  216. package/dist/runtime/effect.d.ts.map +1 -0
  217. package/dist/runtime/effect.js +146 -0
  218. package/dist/runtime/effect.js.map +1 -0
  219. package/dist/runtime/events.js +162 -1
  220. package/dist/runtime/events.js.map +1 -0
  221. package/dist/runtime/execution-model.js +15 -1
  222. package/dist/runtime/execution-model.js.map +1 -0
  223. package/dist/runtime/fastlane.js +204 -1
  224. package/dist/runtime/fastlane.js.map +1 -0
  225. package/dist/runtime/for-bench.d.ts +41 -0
  226. package/dist/runtime/for-bench.d.ts.map +1 -0
  227. package/dist/runtime/for-bench.js +173 -0
  228. package/dist/runtime/for-bench.js.map +1 -0
  229. package/dist/runtime/for.d.ts +62 -49
  230. package/dist/runtime/for.d.ts.map +1 -1
  231. package/dist/runtime/for.js +668 -1
  232. package/dist/runtime/for.js.map +1 -0
  233. package/dist/runtime/operations.d.ts +18 -15
  234. package/dist/runtime/operations.d.ts.map +1 -1
  235. package/dist/runtime/operations.js +209 -1
  236. package/dist/runtime/operations.js.map +1 -0
  237. package/dist/runtime/perf-metrics.js +64 -0
  238. package/dist/runtime/perf-metrics.js.map +1 -0
  239. package/dist/runtime/readable.d.ts +27 -0
  240. package/dist/runtime/readable.d.ts.map +1 -0
  241. package/dist/runtime/readable.js +118 -0
  242. package/dist/runtime/readable.js.map +1 -0
  243. package/dist/runtime/resource-cell.js +102 -1
  244. package/dist/runtime/resource-cell.js.map +1 -0
  245. package/dist/runtime/scheduler.d.ts +51 -35
  246. package/dist/runtime/scheduler.d.ts.map +1 -1
  247. package/dist/runtime/scheduler.js +328 -1
  248. package/dist/runtime/scheduler.js.map +1 -0
  249. package/dist/runtime/selector.d.ts +11 -0
  250. package/dist/runtime/selector.d.ts.map +1 -0
  251. package/dist/runtime/selector.js +188 -0
  252. package/dist/runtime/selector.js.map +1 -0
  253. package/dist/runtime/ssr-bridge.js +24 -1
  254. package/dist/runtime/ssr-bridge.js.map +1 -0
  255. package/dist/runtime/state.d.ts +11 -21
  256. package/dist/runtime/state.d.ts.map +1 -1
  257. package/dist/runtime/state.js +99 -1
  258. package/dist/runtime/state.js.map +1 -0
  259. package/dist/ssg/batch-render.d.ts +16 -0
  260. package/dist/ssg/batch-render.d.ts.map +1 -0
  261. package/dist/ssg/batch-render.js +84 -0
  262. package/dist/ssg/batch-render.js.map +1 -0
  263. package/dist/ssg/create-static-gen.d.ts +50 -0
  264. package/dist/ssg/create-static-gen.d.ts.map +1 -0
  265. package/dist/ssg/create-static-gen.js +282 -0
  266. package/dist/ssg/create-static-gen.js.map +1 -0
  267. package/dist/ssg/generate-metadata.d.ts +24 -0
  268. package/dist/ssg/generate-metadata.d.ts.map +1 -0
  269. package/dist/ssg/generate-metadata.js +94 -0
  270. package/dist/ssg/generate-metadata.js.map +1 -0
  271. package/dist/ssg/incremental-manifest.js +56 -0
  272. package/dist/ssg/incremental-manifest.js.map +1 -0
  273. package/dist/ssg/index.d.ts +8 -0
  274. package/dist/ssg/index.js +7 -0
  275. package/dist/ssg/resolve-ssg-data.d.ts +23 -0
  276. package/dist/ssg/resolve-ssg-data.d.ts.map +1 -0
  277. package/dist/ssg/resolve-ssg-data.js +46 -0
  278. package/dist/ssg/resolve-ssg-data.js.map +1 -0
  279. package/dist/ssg/route-utils.d.ts +16 -0
  280. package/dist/ssg/route-utils.d.ts.map +1 -0
  281. package/dist/ssg/route-utils.js +24 -0
  282. package/dist/ssg/route-utils.js.map +1 -0
  283. package/dist/ssg/types.d.ts +177 -0
  284. package/dist/ssg/types.d.ts.map +1 -0
  285. package/dist/ssg/write-static-files.d.ts +15 -0
  286. package/dist/ssg/write-static-files.d.ts.map +1 -0
  287. package/dist/ssg/write-static-files.js +73 -0
  288. package/dist/ssg/write-static-files.js.map +1 -0
  289. package/dist/ssr/attrs.js +93 -1
  290. package/dist/ssr/attrs.js.map +1 -0
  291. package/dist/ssr/context.d.ts +31 -32
  292. package/dist/ssr/context.d.ts.map +1 -1
  293. package/dist/ssr/context.js +63 -1
  294. package/dist/ssr/context.js.map +1 -0
  295. package/dist/ssr/errors.d.ts +6 -4
  296. package/dist/ssr/errors.d.ts.map +1 -1
  297. package/dist/ssr/errors.js +4 -1
  298. package/dist/ssr/errors.js.map +1 -0
  299. package/dist/ssr/escape.js +153 -1
  300. package/dist/ssr/escape.js.map +1 -0
  301. package/dist/ssr/index.d.ts +75 -46
  302. package/dist/ssr/index.d.ts.map +1 -1
  303. package/dist/ssr/index.js +543 -1
  304. package/dist/ssr/index.js.map +1 -0
  305. package/dist/ssr/render-keys.d.ts +27 -29
  306. package/dist/ssr/render-keys.d.ts.map +1 -1
  307. package/dist/ssr/render-keys.js +39 -1
  308. package/dist/ssr/render-keys.js.map +1 -0
  309. package/dist/ssr/sink.js +86 -1
  310. package/dist/ssr/sink.js.map +1 -0
  311. package/dist/ssr/stream-render.js +76 -1
  312. package/dist/ssr/stream-render.js.map +1 -0
  313. package/dist/ssr/types.d.ts +14 -13
  314. package/dist/ssr/types.d.ts.map +1 -1
  315. package/package.json +53 -48
  316. package/dist/_virtual/___vite-browser-external.js +0 -1
  317. package/dist/_virtual/__vite-browser-external.js +0 -1
  318. package/dist/_virtual/_commonjsHelpers.js +0 -1
  319. package/dist/_virtual/main.js +0 -1
  320. package/dist/_virtual/preload-helper.js +0 -1
  321. package/dist/bench/benchmark-entry.d.ts +0 -14
  322. package/dist/bench/benchmark-entry.d.ts.map +0 -1
  323. package/dist/common/errors.d.ts +0 -53
  324. package/dist/common/errors.d.ts.map +0 -1
  325. package/dist/common/index.d.ts +0 -14
  326. package/dist/common/index.d.ts.map +0 -1
  327. package/dist/dev/invariant.d.ts +0 -83
  328. package/dist/dev/invariant.d.ts.map +0 -1
  329. package/dist/dev/logger.d.ts +0 -13
  330. package/dist/dev/logger.d.ts.map +0 -1
  331. package/dist/dev/vite-plugin-askr.d.ts +0 -18
  332. package/dist/dev/vite-plugin-askr.d.ts.map +0 -1
  333. package/dist/dev/warnings.d.ts +0 -5
  334. package/dist/dev/warnings.d.ts.map +0 -1
  335. package/dist/for/for.d.ts +0 -16
  336. package/dist/for/for.d.ts.map +0 -1
  337. package/dist/for/for.js +0 -1
  338. package/dist/for/index.d.ts +0 -2
  339. package/dist/for/index.d.ts.map +0 -1
  340. package/dist/for/index.js +0 -1
  341. package/dist/foundations/core.d.ts +0 -23
  342. package/dist/foundations/core.d.ts.map +0 -1
  343. package/dist/foundations/core.js +0 -1
  344. package/dist/foundations/index.d.ts.map +0 -1
  345. package/dist/foundations/interactions/dismissable.d.ts +0 -58
  346. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  347. package/dist/foundations/interactions/dismissable.js +0 -1
  348. package/dist/foundations/interactions/focusable.d.ts +0 -16
  349. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  350. package/dist/foundations/interactions/focusable.js +0 -1
  351. package/dist/foundations/interactions/hoverable.d.ts +0 -19
  352. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  353. package/dist/foundations/interactions/hoverable.js +0 -1
  354. package/dist/foundations/interactions/index.d.ts +0 -5
  355. package/dist/foundations/interactions/index.d.ts.map +0 -1
  356. package/dist/foundations/interactions/interaction-policy.d.ts +0 -96
  357. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  358. package/dist/foundations/interactions/pressable.d.ts +0 -54
  359. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  360. package/dist/foundations/interactions/roving-focus.d.ts +0 -117
  361. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  362. package/dist/foundations/interactions/roving-focus.js +0 -1
  363. package/dist/foundations/state/controllable.d.ts +0 -53
  364. package/dist/foundations/state/controllable.d.ts.map +0 -1
  365. package/dist/foundations/state/controllable.js +0 -1
  366. package/dist/foundations/state/index.d.ts +0 -2
  367. package/dist/foundations/state/index.d.ts.map +0 -1
  368. package/dist/foundations/structures/index.d.ts +0 -5
  369. package/dist/foundations/structures/index.d.ts.map +0 -1
  370. package/dist/foundations/structures.d.ts.map +0 -1
  371. package/dist/foundations/utilities/aria.d.ts +0 -13
  372. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  373. package/dist/foundations/utilities/compose-handlers.d.ts +0 -34
  374. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  375. package/dist/foundations/utilities/event-types.d.ts +0 -17
  376. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  377. package/dist/foundations/utilities/index.d.ts +0 -7
  378. package/dist/foundations/utilities/index.d.ts.map +0 -1
  379. package/dist/foundations/utilities/merge-props.d.ts +0 -2
  380. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  381. package/dist/foundations/utilities/use-id.d.ts +0 -29
  382. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  383. package/dist/foundations/utilities/use-id.js +0 -1
  384. package/dist/fx/index.d.ts.map +0 -1
  385. package/dist/fx/noop.d.ts +0 -12
  386. package/dist/fx/noop.d.ts.map +0 -1
  387. package/dist/index.d.ts.map +0 -1
  388. package/dist/jsx/index.d.ts.map +0 -1
  389. package/dist/jsx/jsx-dev-runtime.d.ts +0 -4
  390. package/dist/jsx/jsx-dev-runtime.d.ts.map +0 -1
  391. package/dist/jsx/jsx-runtime.d.ts +0 -10
  392. package/dist/jsx/jsx-runtime.d.ts.map +0 -1
  393. package/dist/node_modules/esbuild/lib/main.js +0 -65
  394. package/dist/renderer/cleanup.d.ts +0 -25
  395. package/dist/renderer/cleanup.d.ts.map +0 -1
  396. package/dist/renderer/dom.d.ts +0 -62
  397. package/dist/renderer/dom.d.ts.map +0 -1
  398. package/dist/renderer/evaluate.d.ts +0 -4
  399. package/dist/renderer/evaluate.d.ts.map +0 -1
  400. package/dist/renderer/fastpath.d.ts +0 -7
  401. package/dist/renderer/fastpath.d.ts.map +0 -1
  402. package/dist/renderer/index.d.ts +0 -6
  403. package/dist/renderer/index.d.ts.map +0 -1
  404. package/dist/renderer/keyed.d.ts +0 -23
  405. package/dist/renderer/keyed.d.ts.map +0 -1
  406. package/dist/renderer/reconcile.d.ts +0 -88
  407. package/dist/renderer/reconcile.d.ts.map +0 -1
  408. package/dist/renderer/types.d.ts +0 -3
  409. package/dist/renderer/types.d.ts.map +0 -1
  410. package/dist/renderer/utils.d.ts +0 -63
  411. package/dist/renderer/utils.d.ts.map +0 -1
  412. package/dist/resources/index.d.ts.map +0 -1
  413. package/dist/router/index.d.ts.map +0 -1
  414. package/dist/router/match.d.ts +0 -22
  415. package/dist/router/match.d.ts.map +0 -1
  416. package/dist/runtime/dev-namespace.d.ts +0 -31
  417. package/dist/runtime/dev-namespace.d.ts.map +0 -1
  418. package/dist/runtime/events.d.ts +0 -52
  419. package/dist/runtime/events.d.ts.map +0 -1
  420. package/dist/runtime/execution-model.d.ts +0 -4
  421. package/dist/runtime/execution-model.d.ts.map +0 -1
  422. package/dist/runtime/fastlane.d.ts +0 -27
  423. package/dist/runtime/fastlane.d.ts.map +0 -1
  424. package/dist/runtime/hydration.d.ts +0 -25
  425. package/dist/runtime/hydration.d.ts.map +0 -1
  426. package/dist/runtime/resource-cell.d.ts +0 -35
  427. package/dist/runtime/resource-cell.d.ts.map +0 -1
  428. package/dist/runtime/snapshot.d.ts +0 -25
  429. package/dist/runtime/snapshot.d.ts.map +0 -1
  430. package/dist/runtime/ssr-bridge.d.ts +0 -10
  431. package/dist/runtime/ssr-bridge.d.ts.map +0 -1
  432. package/dist/ssr/attrs.d.ts +0 -26
  433. package/dist/ssr/attrs.d.ts.map +0 -1
  434. package/dist/ssr/create-ssr.d.ts +0 -19
  435. package/dist/ssr/create-ssr.d.ts.map +0 -1
  436. package/dist/ssr/escape.d.ts +0 -38
  437. package/dist/ssr/escape.d.ts.map +0 -1
  438. package/dist/ssr/sink.d.ts +0 -23
  439. package/dist/ssr/sink.d.ts.map +0 -1
  440. package/dist/ssr/stream-render.d.ts +0 -7
  441. package/dist/ssr/stream-render.d.ts.map +0 -1
  442. package/dist/vite/index.js +0 -3
@@ -0,0 +1,118 @@
1
+ import { globalScheduler } from "./scheduler.js";
2
+ import { getCurrentInstance } from "./component.js";
3
+ //#region src/runtime/readable.ts
4
+ function markReadableUsage(source) {
5
+ if (source && typeof source === "function" && ("_hasBeenRead" in source || "_readers" in source)) source._hasBeenRead = true;
6
+ }
7
+ let currentDerivedSubscriber = null;
8
+ let suppressComponentReadTrackingDepth = 0;
9
+ let currentFineGrainedReadSources = null;
10
+ function recordReadableRead(source) {
11
+ if (currentFineGrainedReadSources) {
12
+ currentFineGrainedReadSources.add(source);
13
+ return;
14
+ }
15
+ if (currentDerivedSubscriber) {
16
+ if (!currentDerivedSubscriber._pendingDependencySources) currentDerivedSubscriber._pendingDependencySources = /* @__PURE__ */ new Set();
17
+ currentDerivedSubscriber._pendingDependencySources.add(source);
18
+ }
19
+ if (suppressComponentReadTrackingDepth > 0) return;
20
+ const inst = getCurrentInstance();
21
+ if (!inst || inst._currentRenderToken === void 0) return;
22
+ if (!inst._pendingReadSources) inst._pendingReadSources = /* @__PURE__ */ new Set();
23
+ inst._pendingReadSources.add(source);
24
+ }
25
+ function withFineGrainedReadTracking(pendingSources, fn) {
26
+ const previousPendingSources = currentFineGrainedReadSources;
27
+ currentFineGrainedReadSources = pendingSources;
28
+ try {
29
+ return fn();
30
+ } finally {
31
+ currentFineGrainedReadSources = previousPendingSources;
32
+ }
33
+ }
34
+ function finalizeReadableSubscriptions(instance) {
35
+ const newSet = instance._pendingReadSources;
36
+ const oldSet = instance._lastReadSources;
37
+ const token = instance._currentRenderToken;
38
+ if (token === void 0) return;
39
+ if (oldSet) {
40
+ for (const source of oldSet) if (!newSet?.has(source)) source._readers?.delete(instance);
41
+ }
42
+ instance.lastRenderToken = token;
43
+ if (newSet) for (const source of newSet) {
44
+ let readers = source._readers;
45
+ if (!readers) {
46
+ readers = /* @__PURE__ */ new Map();
47
+ source._readers = readers;
48
+ }
49
+ readers.set(instance, instance.lastRenderToken ?? 0);
50
+ }
51
+ instance._lastReadSources = newSet ?? /* @__PURE__ */ new Set();
52
+ instance._pendingReadSources = void 0;
53
+ instance._currentRenderToken = void 0;
54
+ }
55
+ function cleanupReadableSubscriptions(instance) {
56
+ const sources = instance._lastReadSources;
57
+ if (!sources || sources.size === 0) return;
58
+ for (const source of sources) source._readers?.delete(instance);
59
+ instance._lastReadSources = /* @__PURE__ */ new Set();
60
+ }
61
+ function withDerivedReadTracking(subscriber, fn) {
62
+ const prevDerivedSubscriber = currentDerivedSubscriber;
63
+ currentDerivedSubscriber = subscriber;
64
+ suppressComponentReadTrackingDepth += 1;
65
+ try {
66
+ return fn();
67
+ } finally {
68
+ suppressComponentReadTrackingDepth -= 1;
69
+ currentDerivedSubscriber = prevDerivedSubscriber;
70
+ }
71
+ }
72
+ function syncDerivedDependencySubscriptions(subscriber, prevSources, nextSources) {
73
+ for (const source of prevSources) if (!nextSources.has(source)) source._derivedSubscribers?.delete(subscriber);
74
+ for (const source of nextSources) {
75
+ let subscribers = source._derivedSubscribers;
76
+ if (!subscribers) {
77
+ subscribers = /* @__PURE__ */ new Set();
78
+ source._derivedSubscribers = subscribers;
79
+ }
80
+ subscribers.add(subscriber);
81
+ }
82
+ }
83
+ function clearDerivedDependencySubscriptions(subscriber, sources) {
84
+ for (const source of sources) source._derivedSubscribers?.delete(subscriber);
85
+ sources.clear();
86
+ }
87
+ function markReadableDerivedSubscribersDirty(source) {
88
+ const subscribers = source._derivedSubscribers;
89
+ if (!subscribers || subscribers.size === 0) return;
90
+ for (const subscriber of subscribers) subscriber._markDirty();
91
+ }
92
+ function markReactivePropsDirtySource(source) {
93
+ try {
94
+ globalThis.__ASKR_RENDERER?.markReactivePropsDirtySource?.(source);
95
+ } catch {}
96
+ }
97
+ function notifyReadableReaders(source) {
98
+ const readers = source._readers;
99
+ let didScheduleUpdate = false;
100
+ if (!readers || readers.size === 0) return false;
101
+ for (const [instance, token] of readers) {
102
+ if (instance.lastRenderToken !== token) continue;
103
+ if (instance.hasPendingUpdate) continue;
104
+ instance.hasPendingUpdate = true;
105
+ const task = instance._pendingFlushTask;
106
+ if (task) globalScheduler.enqueue(task);
107
+ else globalScheduler.enqueue(() => {
108
+ instance.hasPendingUpdate = false;
109
+ instance.notifyUpdate?.();
110
+ });
111
+ didScheduleUpdate = true;
112
+ }
113
+ return didScheduleUpdate;
114
+ }
115
+ //#endregion
116
+ export { cleanupReadableSubscriptions, clearDerivedDependencySubscriptions, finalizeReadableSubscriptions, markReactivePropsDirtySource, markReadableDerivedSubscribersDirty, markReadableUsage, notifyReadableReaders, recordReadableRead, syncDerivedDependencySubscriptions, withDerivedReadTracking, withFineGrainedReadTracking };
117
+
118
+ //# sourceMappingURL=readable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readable.js","names":[],"sources":["../../src/runtime/readable.ts"],"sourcesContent":["import { globalScheduler } from './scheduler';\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 _readers?: Map<ComponentInstance, number>;\n _derivedSubscribers?: Set<DerivedSubscriber>;\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 (source as ReadableSource<unknown>)._hasBeenRead = true;\n }\n}\n\ntype RendererBridge = {\n markReactivePropsDirtySource?: (source: ReadableSource<unknown>) => void;\n};\n\nlet currentDerivedSubscriber: DerivedSubscriber | null = null;\nlet suppressComponentReadTrackingDepth = 0;\nlet currentFineGrainedReadSources: Set<ReadableSource<unknown>> | null = null;\n\nexport function recordReadableRead(source: ReadableSource<unknown>): void {\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\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 oldSet = instance._lastReadSources;\n const token = instance._currentRenderToken;\n\n if (token === undefined) {\n return;\n }\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 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 instance._pendingReadSources = undefined;\n instance._currentRenderToken = undefined;\n}\n\nexport function cleanupReadableSubscriptions(\n instance: ComponentInstance\n): void {\n const sources = instance._lastReadSources;\n if (!sources || sources.size === 0) {\n return;\n }\n\n for (const source of sources) {\n source._readers?.delete(instance);\n }\n instance._lastReadSources = new Set();\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 (\n globalThis as {\n __ASKR_RENDERER?: RendererBridge;\n }\n ).__ASKR_RENDERER?.markReactivePropsDirtySource?.(source);\n } catch {\n // Keep readable notifications side-effect safe.\n }\n}\n\nexport function notifyReadableReaders(\n source: ReadableSource<unknown>\n): boolean {\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 (instance.lastRenderToken !== token) {\n continue;\n }\n if (instance.hasPendingUpdate) {\n continue;\n }\n\n instance.hasPendingUpdate = true;\n const task = instance._pendingFlushTask;\n if (task) {\n globalScheduler.enqueue(task);\n } else {\n globalScheduler.enqueue(() => {\n instance.hasPendingUpdate = false;\n instance.notifyUpdate?.();\n });\n }\n didScheduleUpdate = true;\n }\n\n return didScheduleUpdate;\n}\n"],"mappings":"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"}
@@ -1 +1,102 @@
1
- import{withAsyncResourceContext as h}from"./context.js";import{logger as o}from"../dev/logger.js";import{getSSRBridge as l}from"./ssr-bridge.js";class b{constructor(r,e,t){this.value=null,this.pending=!0,this.error=null,this.generation=0,this.controller=null,this.deps=null,this.resourceFrame=null,this.subscribers=new Set,this.fn=r,this.deps=e?e.slice():null,this.resourceFrame=t,this.snapshot={value:null,pending:!0,error:null,refresh:()=>this.refresh()}}subscribe(r){return this.subscribers.add(r),()=>this.subscribers.delete(r)}notifySubscribers(){this.snapshot.value=this.value,this.snapshot.pending=this.pending,this.snapshot.error=this.error;for(const r of this.subscribers)r()}start(r=!1,e=!0){const t=this.generation;this.controller?.abort();const i=new AbortController;this.controller=i,this.pending=!0,this.error=null,e&&this.notifySubscribers();let n;try{n=h(this.resourceFrame,()=>this.fn({signal:i.signal}))}catch(s){this.pending=!1,this.error=s,e&&this.notifySubscribers();return}if(!(n instanceof Promise)){this.value=n,this.pending=!1,this.error=null,e&&this.notifySubscribers();return}r&&l().throwSSRDataMissing(),n.then(s=>{this.generation===t&&this.controller===i&&(this.value=s,this.pending=!1,this.error=null,this.notifySubscribers())}).catch(s=>{if(this.generation===t&&this.controller===i){this.pending=!1,this.error=s;try{this.ownerName?o.error(`[Askr] Async resource error in ${this.ownerName}:`,s):o.error("[Askr] Async resource error:",s)}catch{}this.notifySubscribers()}})}refresh(){this.generation++,this.controller?.abort(),this.start()}abort(){this.controller?.abort()}}export{b as ResourceCell};
1
+ import { logger } from "../dev/logger.js";
2
+ import { withAsyncResourceContext } from "./context.js";
3
+ import { getSSRBridge } from "./ssr-bridge.js";
4
+ //#region src/runtime/resource-cell.ts
5
+ /**
6
+ * Pure, component-agnostic ResourceCell state machine.
7
+ * - Holds value/pending/error/generation/controller
8
+ * - Exposes a stable `snapshot` object: { value, pending, error, refresh }
9
+ * - Uses `withAsyncResourceContext` to bind the synchronous execution step
10
+ * to a captured frame. Continuations after await do not see the frame.
11
+ */
12
+ var ResourceCell = class {
13
+ constructor(fn, deps, resourceFrame) {
14
+ this.value = null;
15
+ this.pending = true;
16
+ this.error = null;
17
+ this.generation = 0;
18
+ this.controller = null;
19
+ this.deps = null;
20
+ this.resourceFrame = null;
21
+ this.subscribers = /* @__PURE__ */ new Set();
22
+ this.fn = fn;
23
+ this.deps = deps ? deps.slice() : null;
24
+ this.resourceFrame = resourceFrame;
25
+ this.snapshot = {
26
+ value: null,
27
+ pending: true,
28
+ error: null,
29
+ refresh: () => this.refresh()
30
+ };
31
+ }
32
+ setLoader(fn) {
33
+ this.fn = fn;
34
+ }
35
+ subscribe(cb) {
36
+ this.subscribers.add(cb);
37
+ return () => this.subscribers.delete(cb);
38
+ }
39
+ notifySubscribers() {
40
+ this.snapshot.value = this.value;
41
+ this.snapshot.pending = this.pending;
42
+ this.snapshot.error = this.error;
43
+ for (const cb of this.subscribers) cb();
44
+ }
45
+ start(ssr = false, notify = true) {
46
+ const generation = this.generation;
47
+ this.controller?.abort();
48
+ const controller = new AbortController();
49
+ this.controller = controller;
50
+ this.pending = true;
51
+ this.error = null;
52
+ if (notify) this.notifySubscribers();
53
+ let result;
54
+ try {
55
+ result = withAsyncResourceContext(this.resourceFrame, () => this.fn({ signal: controller.signal }));
56
+ } catch (err) {
57
+ this.pending = false;
58
+ this.error = err;
59
+ if (notify) this.notifySubscribers();
60
+ return;
61
+ }
62
+ if (!(result instanceof Promise)) {
63
+ this.value = result;
64
+ this.pending = false;
65
+ this.error = null;
66
+ if (notify) this.notifySubscribers();
67
+ return;
68
+ }
69
+ if (ssr) getSSRBridge().throwSSRDataMissing();
70
+ result.then((val) => {
71
+ if (this.generation !== generation) return;
72
+ if (this.controller !== controller) return;
73
+ this.value = val;
74
+ this.pending = false;
75
+ this.error = null;
76
+ this.notifySubscribers();
77
+ }).catch((err) => {
78
+ if (this.generation !== generation) return;
79
+ if (this.controller !== controller) return;
80
+ if (controller.signal.aborted || err instanceof Error && err.name === "AbortError" || typeof DOMException !== "undefined" && err instanceof DOMException && err.name === "AbortError") return;
81
+ this.pending = false;
82
+ this.error = err;
83
+ try {
84
+ if (this.ownerName) logger.error(`[Askr] Async resource error in ${this.ownerName}:`, err);
85
+ else logger.error("[Askr] Async resource error:", err);
86
+ } catch {}
87
+ this.notifySubscribers();
88
+ });
89
+ }
90
+ refresh() {
91
+ this.generation++;
92
+ this.controller?.abort();
93
+ this.start();
94
+ }
95
+ abort() {
96
+ this.controller?.abort();
97
+ }
98
+ };
99
+ //#endregion
100
+ export { ResourceCell };
101
+
102
+ //# sourceMappingURL=resource-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-cell.js","names":[],"sources":["../../src/runtime/resource-cell.ts"],"sourcesContent":["import { withAsyncResourceContext, type ContextFrame } from './context';\nimport { logger } from '../dev/logger';\nimport { getSSRBridge } from './ssr-bridge';\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: 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\n readonly snapshot: {\n value: U | null;\n pending: boolean;\n error: Error | null;\n refresh: () => void;\n };\n\n private fn: (opts: { signal: AbortSignal }) => Promise<U> | U;\n\n constructor(\n fn: (opts: { signal: AbortSignal }) => Promise<U> | U,\n deps: 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 = {\n value: null,\n pending: true,\n error: null,\n refresh: () => this.refresh(),\n };\n }\n\n setLoader(fn: (opts: { signal: AbortSignal }) => Promise<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 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: Promise<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 (!(result instanceof Promise)) {\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 getSSRBridge().throwSSRDataMissing();\n }\n\n (result as Promise<U>)\n .then((val) => {\n if (this.generation !== generation) return;\n if (this.controller !== controller) 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 this.generation++;\n this.controller?.abort();\n this.start();\n }\n\n abort() {\n this.controller?.abort();\n }\n}\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,eAAb,MAA6B;CAuB3B,YACE,IACA,MACA,eACA;eA1BgB;iBACR;eACY;oBACT;oBACwB;cACZ;uBACY;qCAKf,IAAI,KAAiB;AAgBzC,OAAK,KAAK;AACV,OAAK,OAAO,OAAO,KAAK,OAAO,GAAG;AAClC,OAAK,gBAAgB;AACrB,OAAK,WAAW;GACd,OAAO;GACP,SAAS;GACT,OAAO;GACP,eAAe,KAAK,SAAS;GAC9B;;CAGH,UAAU,IAA6D;AACrE,OAAK,KAAK;;CAGZ,UAAU,IAA4B;AACpC,OAAK,YAAY,IAAI,GAAG;AACxB,eAAa,KAAK,YAAY,OAAO,GAAG;;CAG1C,oBAA4B;AAC1B,OAAK,SAAS,QAAQ,KAAK;AAC3B,OAAK,SAAS,UAAU,KAAK;AAC7B,OAAK,SAAS,QAAQ,KAAK;AAC3B,OAAK,MAAM,MAAM,KAAK,YAAa,KAAI;;CAGzC,MAAM,MAAM,OAAO,SAAS,MAAM;EAChC,MAAM,aAAa,KAAK;AAExB,OAAK,YAAY,OAAO;EACxB,MAAM,aAAa,IAAI,iBAAiB;AACxC,OAAK,aAAa;AAClB,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,MAAI,OAAQ,MAAK,mBAAmB;EAEpC,IAAI;AACJ,MAAI;AAEF,YAAS,yBAAyB,KAAK,qBACrC,KAAK,GAAG,EAAE,QAAQ,WAAW,QAAQ,CAAC,CACvC;WACM,KAAK;AACZ,QAAK,UAAU;AACf,QAAK,QAAQ;AACb,OAAI,OAAQ,MAAK,mBAAmB;AACpC;;AAGF,MAAI,EAAE,kBAAkB,UAAU;AAChC,QAAK,QAAQ;AACb,QAAK,UAAU;AACf,QAAK,QAAQ;AACb,OAAI,OAAQ,MAAK,mBAAmB;AACpC;;AAGF,MAAI,IAEF,eAAc,CAAC,qBAAqB;AAGrC,SACE,MAAM,QAAQ;AACb,OAAI,KAAK,eAAe,WAAY;AACpC,OAAI,KAAK,eAAe,WAAY;AACpC,QAAK,QAAQ;AACb,QAAK,UAAU;AACf,QAAK,QAAQ;AACb,QAAK,mBAAmB;IACxB,CACD,OAAO,QAAQ;AACd,OAAI,KAAK,eAAe,WAAY;AACpC,OAAI,KAAK,eAAe,WAAY;AASpC,OANE,WAAW,OAAO,WACjB,eAAe,SAAS,IAAI,SAAS,gBACrC,OAAO,iBAAiB,eACvB,eAAe,gBACf,IAAI,SAAS,aAGf;AAGF,QAAK,UAAU;AACf,QAAK,QAAQ;AACb,OAAI;AACF,QAAI,KAAK,UACP,QAAO,MACL,kCAAkC,KAAK,UAAU,IACjD,IACD;QAED,QAAO,MAAM,gCAAgC,IAAI;WAE7C;AAGR,QAAK,mBAAmB;IACxB;;CAGN,UAAU;AACR,OAAK;AACL,OAAK,YAAY,OAAO;AACxB,OAAK,OAAO;;CAGd,QAAQ;AACN,OAAK,YAAY,OAAO"}
@@ -1,3 +1,4 @@
1
+ //#region src/runtime/scheduler.d.ts
1
2
  /**
2
3
  * Serialized update scheduler — safer design (no inline execution, explicit flush)
3
4
  *
@@ -9,41 +10,56 @@
9
10
  * - `waitForFlush()` is race-free with a monotonic `flushVersion`.
10
11
  */
11
12
  type Task = () => void;
12
- export declare class Scheduler {
13
- private q;
14
- private head;
15
- private running;
16
- private inHandler;
17
- private depth;
18
- private executionDepth;
19
- private flushVersion;
20
- private kickScheduled;
21
- private allowSyncProgress;
22
- private waiters;
23
- private taskCount;
24
- enqueue(task: Task): void;
25
- flush(): void;
26
- private finalizeFlush;
27
- runWithSyncProgress<T>(fn: () => T): T;
28
- waitForFlush(targetVersion?: number, timeoutMs?: number): Promise<void>;
29
- getState(): {
30
- queueLength: number;
31
- running: boolean;
32
- depth: number;
33
- executionDepth: number;
34
- taskCount: number;
35
- flushVersion: number;
36
- inHandler: boolean;
37
- allowSyncProgress: boolean;
13
+ type SchedulerLane = 'derived' | 'component' | 'reactive' | 'post';
14
+ declare class Scheduler {
15
+ private lanes;
16
+ private running;
17
+ private inHandler;
18
+ private depth;
19
+ private executionDepth;
20
+ private flushVersion;
21
+ private kickScheduled;
22
+ private allowSyncProgress;
23
+ private waiters;
24
+ private taskCount;
25
+ private hasPendingTasks;
26
+ private getPendingTaskCount;
27
+ private compactLane;
28
+ private scheduleFlushKick;
29
+ enqueue(task: Task): void;
30
+ enqueueInLane(lane: SchedulerLane, task: Task): void;
31
+ flush(): void;
32
+ private finalizeFlush;
33
+ runWithSyncProgress<T>(fn: () => T): T;
34
+ waitForFlush(targetVersion?: number, timeoutMs?: number): Promise<void>;
35
+ getState(): {
36
+ queueLength: number;
37
+ running: boolean;
38
+ depth: number;
39
+ executionDepth: number;
40
+ taskCount: number;
41
+ flushVersion: number;
42
+ laneQueues: {
43
+ derived: number;
44
+ component: number;
45
+ reactive: number;
46
+ post: number;
38
47
  };
39
- setInHandler(v: boolean): void;
40
- isInHandler(): boolean;
41
- isExecuting(): boolean;
42
- clearPendingSyncTasks(): number;
43
- private resolveWaiters;
48
+ inHandler: boolean;
49
+ allowSyncProgress: boolean;
50
+ };
51
+ getFlushVersion(): number;
52
+ flushIfQueued(): void;
53
+ runInHandlerScope<T>(fn: () => T, flushMode?: 'defer' | 'sync'): T;
54
+ setInHandler(v: boolean): void;
55
+ isInHandler(): boolean;
56
+ isExecuting(): boolean;
57
+ clearPendingSyncTasks(): number;
58
+ private resolveWaiters;
44
59
  }
45
- export declare const globalScheduler: Scheduler;
46
- export declare function isSchedulerExecuting(): boolean;
47
- export declare function scheduleEventHandler(handler: EventListener): EventListener;
48
- export {};
60
+ declare const globalScheduler: Scheduler;
61
+ declare function isSchedulerExecuting(): boolean;
62
+ declare function scheduleEventHandler(handler: EventListener): EventListener;
63
+ //#endregion
64
+ export { SchedulerLane, scheduleEventHandler };
49
65
  //# sourceMappingURL=scheduler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/runtime/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;AAkBvB,qBAAa,SAAS;IACpB,OAAO,CAAC,CAAC,CAAc;IACvB,OAAO,CAAC,IAAI,CAAK;IAEjB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,aAAa,CAAS;IAG9B,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,OAAO,CAKP;IAGR,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IA4CzB,KAAK,IAAI,IAAI;IAyEb,OAAO,CAAC,aAAa;IAIrB,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAmEtC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCrE,QAAQ;;;;;;;;;;IAeR,YAAY,CAAC,CAAC,EAAE,OAAO;IAIvB,WAAW,IAAI,OAAO;IAItB,WAAW,IAAI,OAAO;IAKtB,qBAAqB,IAAI,MAAM;IA0B/B,OAAO,CAAC,cAAc;CAiBvB;AAED,eAAO,MAAM,eAAe,WAAkB,CAAC;AAE/C,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CA0B1E"}
1
+ {"version":3,"file":"scheduler.d.ts","names":[],"sources":["../../src/runtime/scheduler.ts"],"mappings":";;;;;;;AAmBA;;;;KADK,IAAA;AAAA,KACO,aAAA;AAAA,cA8BC,SAAA;EAAA,QACH,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;EAAA,QAEA,eAAA;EAAA,QAUA,mBAAA;EAAA,QASA,WAAA;EAAA,QAmBA,iBAAA;EA2BR,OAAA,CAAQ,IAAA,EAAM,IAAA;EAId,aAAA,CAAc,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,IAAA;EAuBzC,KAAA,CAAA;EAAA,QAoFQ,aAAA;EAIR,mBAAA,GAAA,CAAuB,EAAA,QAAU,CAAA,GAAI,CAAA;EAmErC,YAAA,CAAa,aAAA,WAAwB,SAAA,YAAmB,OAAA;EAgCxD,QAAA,CAAA;;;;;;;;;;;;;;;;EAsBA,eAAA,CAAA;EAIA,aAAA,CAAA;EAMA,iBAAA,GAAA,CAAqB,EAAA,QAAU,CAAA,EAAG,SAAA,sBAAwC,CAAA;EAmB1E,YAAA,CAAa,CAAA;EAOb,WAAA,CAAA;EAIA,WAAA,CAAA;EAKA,qBAAA,CAAA;EAAA,QAgCQ,cAAA;AAAA;AAAA,cAmBG,eAAA,EAAe,SAAA;AAAA,iBAEZ,oBAAA,CAAA;AAAA,iBAIA,oBAAA,CAAqB,OAAA,EAAS,aAAA,GAAgB,aAAA"}