@askrjs/askr 0.0.48 → 0.0.49

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 (394) hide show
  1. package/dist/benchmark.js +6 -6
  2. package/dist/benchmark.js.map +1 -1
  3. package/dist/boot/hydration.js +140 -0
  4. package/dist/boot/hydration.js.map +1 -0
  5. package/dist/boot/index.d.ts +3 -56
  6. package/dist/boot/index.d.ts.map +1 -1
  7. package/dist/boot/index.js +62 -410
  8. package/dist/boot/index.js.map +1 -1
  9. package/dist/boot/root-lifecycle.d.ts +15 -0
  10. package/dist/boot/root-lifecycle.d.ts.map +1 -0
  11. package/dist/boot/root-lifecycle.js +205 -0
  12. package/dist/boot/root-lifecycle.js.map +1 -0
  13. package/dist/boot/route-startup.js +45 -0
  14. package/dist/boot/route-startup.js.map +1 -0
  15. package/dist/boot/types.d.ts +62 -0
  16. package/dist/boot/types.d.ts.map +1 -0
  17. package/dist/common/component.d.ts +3 -1
  18. package/dist/common/component.d.ts.map +1 -1
  19. package/dist/common/jsx.d.ts +1 -1
  20. package/dist/common/jsx.d.ts.map +1 -1
  21. package/dist/common/jsx.js.map +1 -1
  22. package/dist/common/props.d.ts +1 -1
  23. package/dist/common/render-context.js +55 -0
  24. package/dist/common/render-context.js.map +1 -0
  25. package/dist/common/router.d.ts +5 -1
  26. package/dist/common/router.d.ts.map +1 -1
  27. package/dist/common/ssr.d.ts +1 -1
  28. package/dist/common/ssr.js.map +1 -1
  29. package/dist/common/vnode.d.ts +5 -4
  30. package/dist/common/vnode.d.ts.map +1 -1
  31. package/dist/common/vnode.js.map +1 -1
  32. package/dist/components/error-boundary.d.ts +1 -1
  33. package/dist/components/error-boundary.js +2 -1
  34. package/dist/components/error-boundary.js.map +1 -1
  35. package/dist/components/link.js.map +1 -1
  36. package/dist/control/for.js +2 -1
  37. package/dist/control/for.js.map +1 -1
  38. package/dist/data/data-runtime.d.ts +28 -0
  39. package/dist/data/data-runtime.d.ts.map +1 -0
  40. package/dist/data/data-runtime.js +114 -0
  41. package/dist/data/data-runtime.js.map +1 -0
  42. package/dist/data/index.d.ts +6 -142
  43. package/dist/data/index.js +5 -539
  44. package/dist/data/invalidation.d.ts +9 -0
  45. package/dist/data/invalidation.d.ts.map +1 -0
  46. package/dist/data/invalidation.js +27 -0
  47. package/dist/data/invalidation.js.map +1 -0
  48. package/dist/data/mutation-cell.d.ts +28 -0
  49. package/dist/data/mutation-cell.d.ts.map +1 -0
  50. package/dist/data/mutation-cell.js +132 -0
  51. package/dist/data/mutation-cell.js.map +1 -0
  52. package/dist/data/query-cell.d.ts +46 -0
  53. package/dist/data/query-cell.d.ts.map +1 -0
  54. package/dist/data/query-cell.js +290 -0
  55. package/dist/data/query-cell.js.map +1 -0
  56. package/dist/data/query-key.js +42 -0
  57. package/dist/data/query-key.js.map +1 -0
  58. package/dist/data/shared.js +20 -0
  59. package/dist/data/shared.js.map +1 -0
  60. package/dist/data/types.d.ts +161 -0
  61. package/dist/data/types.d.ts.map +1 -0
  62. package/dist/foundations/icon/icon.d.ts.map +1 -1
  63. package/dist/foundations/icon/icon.js.map +1 -1
  64. package/dist/foundations/structures/portal.d.ts +1 -1
  65. package/dist/foundations/structures/portal.d.ts.map +1 -1
  66. package/dist/foundations/structures/portal.js +2 -1
  67. package/dist/foundations/structures/portal.js.map +1 -1
  68. package/dist/fx/fx.d.ts +1 -1
  69. package/dist/fx/fx.js +5 -4
  70. package/dist/fx/fx.js.map +1 -1
  71. package/dist/fx/timing.d.ts.map +1 -1
  72. package/dist/fx/timing.js +10 -6
  73. package/dist/fx/timing.js.map +1 -1
  74. package/dist/index.d.ts +3 -2
  75. package/dist/index.js +4 -2
  76. package/dist/index.js.map +1 -1
  77. package/dist/jsx/index.d.ts +2 -1
  78. package/dist/jsx/index.js +3 -2
  79. package/dist/jsx/types.d.ts +2 -0
  80. package/dist/jsx/types.js +2 -1
  81. package/dist/jsx-runtime2.d.ts +2 -1
  82. package/dist/jsx-runtime2.js +3 -2
  83. package/dist/renderer/attributes.js +231 -0
  84. package/dist/renderer/attributes.js.map +1 -0
  85. package/dist/renderer/boundaries.js +266 -0
  86. package/dist/renderer/boundaries.js.map +1 -0
  87. package/dist/renderer/child-shape.js +85 -0
  88. package/dist/renderer/child-shape.js.map +1 -0
  89. package/dist/renderer/children.js +3 -2
  90. package/dist/renderer/children.js.map +1 -1
  91. package/dist/renderer/cleanup.js +2 -1
  92. package/dist/renderer/cleanup.js.map +1 -1
  93. package/dist/renderer/component-host-cleanup.js +68 -0
  94. package/dist/renderer/component-host-cleanup.js.map +1 -0
  95. package/dist/renderer/component-host-instances.js +65 -0
  96. package/dist/renderer/component-host-instances.js.map +1 -0
  97. package/dist/renderer/component-host.js +247 -0
  98. package/dist/renderer/component-host.js.map +1 -0
  99. package/dist/renderer/dom-host.js +13 -0
  100. package/dist/renderer/dom-host.js.map +1 -0
  101. package/dist/renderer/dom-internal.js +185 -0
  102. package/dist/renderer/dom-internal.js.map +1 -0
  103. package/dist/renderer/dom.js +9 -2356
  104. package/dist/renderer/element-children.js +279 -0
  105. package/dist/renderer/element-children.js.map +1 -0
  106. package/dist/renderer/env.js +2 -1
  107. package/dist/renderer/error-boundary-dom.js +29 -0
  108. package/dist/renderer/error-boundary-dom.js.map +1 -0
  109. package/dist/renderer/evaluate-dom-range.js +85 -0
  110. package/dist/renderer/evaluate-dom-range.js.map +1 -0
  111. package/dist/renderer/evaluate-reconcile.js +281 -0
  112. package/dist/renderer/evaluate-reconcile.js.map +1 -0
  113. package/dist/renderer/evaluate.js +13 -399
  114. package/dist/renderer/evaluate.js.map +1 -1
  115. package/dist/renderer/fastpath.js +6 -5
  116. package/dist/renderer/fastpath.js.map +1 -1
  117. package/dist/renderer/for-commit-dom-map.js +83 -0
  118. package/dist/renderer/for-commit-dom-map.js.map +1 -0
  119. package/dist/renderer/for-commit-removal.js +36 -0
  120. package/dist/renderer/for-commit-removal.js.map +1 -0
  121. package/dist/renderer/for-commit-reorder.js +89 -0
  122. package/dist/renderer/for-commit-reorder.js.map +1 -0
  123. package/dist/renderer/for-commit.js +6 -188
  124. package/dist/renderer/for-commit.js.map +1 -1
  125. package/dist/renderer/index.js +28 -16
  126. package/dist/renderer/index.js.map +1 -1
  127. package/dist/renderer/keyed-children.js +32 -0
  128. package/dist/renderer/keyed-children.js.map +1 -0
  129. package/dist/renderer/keyed.js +2 -15
  130. package/dist/renderer/keyed.js.map +1 -1
  131. package/dist/renderer/namespaces.js +23 -0
  132. package/dist/renderer/namespaces.js.map +1 -0
  133. package/dist/renderer/prop-bindings.js +280 -0
  134. package/dist/renderer/prop-bindings.js.map +1 -0
  135. package/dist/renderer/reactive-child-dom.js +133 -0
  136. package/dist/renderer/reactive-child-dom.js.map +1 -0
  137. package/dist/renderer/reactive-child-sources.js +184 -0
  138. package/dist/renderer/reactive-child-sources.js.map +1 -0
  139. package/dist/renderer/reactive-children.js +294 -0
  140. package/dist/renderer/reactive-children.js.map +1 -0
  141. package/dist/renderer/reconcile-commit.js +38 -0
  142. package/dist/renderer/reconcile-commit.js.map +1 -0
  143. package/dist/renderer/reconcile-fastpaths.js +106 -0
  144. package/dist/renderer/reconcile-fastpaths.js.map +1 -0
  145. package/dist/renderer/reconcile-resolution.js +187 -0
  146. package/dist/renderer/reconcile-resolution.js.map +1 -0
  147. package/dist/renderer/reconcile.js +9 -371
  148. package/dist/renderer/reconcile.js.map +1 -1
  149. package/dist/renderer/retained-element-rollback.js +276 -0
  150. package/dist/renderer/retained-element-rollback.js.map +1 -0
  151. package/dist/renderer/stable-patch.js +82 -0
  152. package/dist/renderer/stable-patch.js.map +1 -0
  153. package/dist/renderer/static-reuse.js +96 -0
  154. package/dist/renderer/static-reuse.js.map +1 -0
  155. package/dist/renderer/types.js +2 -1
  156. package/dist/renderer/utils.js +4 -4
  157. package/dist/renderer/utils.js.map +1 -1
  158. package/dist/resources/index.d.ts +3 -2
  159. package/dist/resources/index.js +5 -2
  160. package/dist/router/access.js +36 -0
  161. package/dist/router/access.js.map +1 -0
  162. package/dist/router/activity.d.ts +10 -0
  163. package/dist/router/activity.d.ts.map +1 -0
  164. package/dist/router/activity.js +89 -0
  165. package/dist/router/activity.js.map +1 -0
  166. package/dist/router/authoring.d.ts +22 -0
  167. package/dist/router/authoring.d.ts.map +1 -0
  168. package/dist/router/authoring.js +198 -0
  169. package/dist/router/authoring.js.map +1 -0
  170. package/dist/router/index.d.ts +12 -4
  171. package/dist/router/index.js +10 -3
  172. package/dist/router/internal-types.d.ts +31 -0
  173. package/dist/router/internal-types.d.ts.map +1 -0
  174. package/dist/router/lazy.d.ts +19 -0
  175. package/dist/router/lazy.d.ts.map +1 -0
  176. package/dist/router/lazy.js +52 -0
  177. package/dist/router/lazy.js.map +1 -0
  178. package/dist/router/manifest.d.ts +10 -0
  179. package/dist/router/manifest.d.ts.map +1 -0
  180. package/dist/router/manifest.js +49 -0
  181. package/dist/router/manifest.js.map +1 -0
  182. package/dist/router/navigate.d.ts +4 -51
  183. package/dist/router/navigate.d.ts.map +1 -1
  184. package/dist/router/navigate.js +16 -459
  185. package/dist/router/navigate.js.map +1 -1
  186. package/dist/router/navigation-registry.d.ts +32 -0
  187. package/dist/router/navigation-registry.d.ts.map +1 -0
  188. package/dist/router/navigation-registry.js +105 -0
  189. package/dist/router/navigation-registry.js.map +1 -0
  190. package/dist/router/navigation-scroll.d.ts +14 -0
  191. package/dist/router/navigation-scroll.d.ts.map +1 -0
  192. package/dist/router/navigation-scroll.js +93 -0
  193. package/dist/router/navigation-scroll.js.map +1 -0
  194. package/dist/router/navigation-targets.d.ts +31 -0
  195. package/dist/router/navigation-targets.d.ts.map +1 -0
  196. package/dist/router/navigation-targets.js +253 -0
  197. package/dist/router/navigation-targets.js.map +1 -0
  198. package/dist/router/policy.d.ts +7 -1
  199. package/dist/router/policy.d.ts.map +1 -1
  200. package/dist/router/policy.js +27 -9
  201. package/dist/router/policy.js.map +1 -1
  202. package/dist/router/rendering.d.ts +10 -0
  203. package/dist/router/rendering.d.ts.map +1 -0
  204. package/dist/router/rendering.js +45 -0
  205. package/dist/router/rendering.js.map +1 -0
  206. package/dist/router/resolution.d.ts +17 -0
  207. package/dist/router/resolution.d.ts.map +1 -0
  208. package/dist/router/resolution.js +253 -0
  209. package/dist/router/resolution.js.map +1 -0
  210. package/dist/router/route-query.d.ts +17 -0
  211. package/dist/router/route-query.d.ts.map +1 -0
  212. package/dist/router/route-query.js +47 -0
  213. package/dist/router/route-query.js.map +1 -0
  214. package/dist/router/route.d.ts +8 -149
  215. package/dist/router/route.js +8 -854
  216. package/dist/router/store.d.ts +50 -0
  217. package/dist/router/store.d.ts.map +1 -0
  218. package/dist/router/store.js +171 -0
  219. package/dist/router/store.js.map +1 -0
  220. package/dist/runtime/access.js +45 -0
  221. package/dist/runtime/access.js.map +1 -0
  222. package/dist/runtime/child-scope.d.ts +1 -1
  223. package/dist/runtime/child-scope.js +4 -1
  224. package/dist/runtime/child-scope.js.map +1 -1
  225. package/dist/runtime/component-cleanup.d.ts +16 -0
  226. package/dist/runtime/component-cleanup.d.ts.map +1 -0
  227. package/dist/runtime/component-cleanup.js +70 -0
  228. package/dist/runtime/component-cleanup.js.map +1 -0
  229. package/dist/runtime/component-commit.js +165 -0
  230. package/dist/runtime/component-commit.js.map +1 -0
  231. package/dist/runtime/component-contracts.js +5 -0
  232. package/dist/runtime/component-facade.d.ts +5 -0
  233. package/dist/runtime/component-facade.js +4 -0
  234. package/dist/runtime/component-internal.d.ts +100 -0
  235. package/dist/runtime/component-internal.d.ts.map +1 -0
  236. package/dist/runtime/component-internal.js +219 -0
  237. package/dist/runtime/component-internal.js.map +1 -0
  238. package/dist/runtime/component-lifecycle.d.ts +49 -0
  239. package/dist/runtime/component-lifecycle.d.ts.map +1 -0
  240. package/dist/runtime/component-lifecycle.js +176 -0
  241. package/dist/runtime/component-lifecycle.js.map +1 -0
  242. package/dist/runtime/component-scope.d.ts +55 -0
  243. package/dist/runtime/component-scope.d.ts.map +1 -0
  244. package/dist/runtime/component-scope.js +154 -0
  245. package/dist/runtime/component-scope.js.map +1 -0
  246. package/dist/runtime/component.d.ts +4 -152
  247. package/dist/runtime/component.js +4 -692
  248. package/dist/runtime/context.d.ts +1 -1
  249. package/dist/runtime/context.js +6 -4
  250. package/dist/runtime/context.js.map +1 -1
  251. package/dist/runtime/control.d.ts +3 -3
  252. package/dist/runtime/control.js +2 -1
  253. package/dist/runtime/control.js.map +1 -1
  254. package/dist/runtime/derive.d.ts.map +1 -1
  255. package/dist/runtime/derive.js +6 -5
  256. package/dist/runtime/derive.js.map +1 -1
  257. package/dist/runtime/effect.d.ts +1 -1
  258. package/dist/runtime/effect.d.ts.map +1 -1
  259. package/dist/runtime/effect.js +2 -2
  260. package/dist/runtime/effect.js.map +1 -1
  261. package/dist/runtime/events.js +3 -3
  262. package/dist/runtime/events.js.map +1 -1
  263. package/dist/runtime/fastlane.js +13 -27
  264. package/dist/runtime/fastlane.js.map +1 -1
  265. package/dist/runtime/for-bench.d.ts +1 -1
  266. package/dist/runtime/for-bench.js +1 -4
  267. package/dist/runtime/for-bench.js.map +1 -1
  268. package/dist/runtime/for-internal.d.ts +43 -0
  269. package/dist/runtime/for-internal.d.ts.map +1 -0
  270. package/dist/runtime/for-internal.js +98 -0
  271. package/dist/runtime/for-internal.js.map +1 -0
  272. package/dist/runtime/for-reconcile.d.ts +8 -0
  273. package/dist/runtime/for-reconcile.d.ts.map +1 -0
  274. package/dist/runtime/for-reconcile.js +389 -0
  275. package/dist/runtime/for-reconcile.js.map +1 -0
  276. package/dist/runtime/for-scopes.d.ts +26 -0
  277. package/dist/runtime/for-scopes.d.ts.map +1 -0
  278. package/dist/runtime/for-scopes.js +160 -0
  279. package/dist/runtime/for-scopes.js.map +1 -0
  280. package/dist/runtime/for-signals.d.ts +30 -0
  281. package/dist/runtime/for-signals.d.ts.map +1 -0
  282. package/dist/runtime/for-signals.js +139 -0
  283. package/dist/runtime/for-signals.js.map +1 -0
  284. package/dist/runtime/for.d.ts +4 -66
  285. package/dist/runtime/for.js +5 -773
  286. package/dist/runtime/lifecycle-operations.d.ts +31 -0
  287. package/dist/runtime/lifecycle-operations.d.ts.map +1 -0
  288. package/dist/runtime/lifecycle-operations.js +195 -0
  289. package/dist/runtime/lifecycle-operations.js.map +1 -0
  290. package/dist/runtime/operations.d.ts +3 -40
  291. package/dist/runtime/operations.js +2 -357
  292. package/dist/runtime/readable.d.ts +2 -3
  293. package/dist/runtime/readable.d.ts.map +1 -1
  294. package/dist/runtime/readable.js +6 -5
  295. package/dist/runtime/readable.js.map +1 -1
  296. package/dist/runtime/resource-cell.js +2 -2
  297. package/dist/runtime/resource-cell.js.map +1 -1
  298. package/dist/runtime/resource-operation.d.ts +13 -0
  299. package/dist/runtime/resource-operation.d.ts.map +1 -0
  300. package/dist/runtime/resource-operation.js +170 -0
  301. package/dist/runtime/resource-operation.js.map +1 -0
  302. package/dist/runtime/runtime.d.ts +42 -0
  303. package/dist/runtime/runtime.d.ts.map +1 -0
  304. package/dist/runtime/runtime.js +59 -0
  305. package/dist/runtime/runtime.js.map +1 -0
  306. package/dist/runtime/scheduler.d.ts +5 -1
  307. package/dist/runtime/scheduler.d.ts.map +1 -1
  308. package/dist/runtime/scheduler.js +17 -17
  309. package/dist/runtime/scheduler.js.map +1 -1
  310. package/dist/runtime/selector.js +4 -3
  311. package/dist/runtime/selector.js.map +1 -1
  312. package/dist/runtime/snapshot-source.d.ts +1 -1
  313. package/dist/runtime/snapshot-source.js +1 -1
  314. package/dist/runtime/state.js +2 -1
  315. package/dist/runtime/state.js.map +1 -1
  316. package/dist/ssg/batch-render.js +2 -1
  317. package/dist/ssg/batch-render.js.map +1 -1
  318. package/dist/ssg/create-static-gen.d.ts +9 -3
  319. package/dist/ssg/create-static-gen.d.ts.map +1 -1
  320. package/dist/ssg/create-static-gen.js +12 -99
  321. package/dist/ssg/create-static-gen.js.map +1 -1
  322. package/dist/ssg/generation-plan.js +70 -0
  323. package/dist/ssg/generation-plan.js.map +1 -0
  324. package/dist/ssg/incremental-manifest.js +1 -1
  325. package/dist/ssg/static-routes.js +101 -0
  326. package/dist/ssg/static-routes.js.map +1 -0
  327. package/dist/ssg/types.d.ts +15 -7
  328. package/dist/ssg/types.d.ts.map +1 -1
  329. package/dist/ssr/boundaries.js +113 -0
  330. package/dist/ssr/boundaries.js.map +1 -0
  331. package/dist/ssr/component-runtime.js +111 -0
  332. package/dist/ssr/component-runtime.js.map +1 -0
  333. package/dist/ssr/context.d.ts +3 -1
  334. package/dist/ssr/context.d.ts.map +1 -1
  335. package/dist/ssr/context.js +9 -2
  336. package/dist/ssr/context.js.map +1 -1
  337. package/dist/ssr/errors.d.ts +2 -0
  338. package/dist/ssr/errors.js +11 -1
  339. package/dist/ssr/errors.js.map +1 -1
  340. package/dist/ssr/escape.js +3 -3
  341. package/dist/ssr/escape.js.map +1 -1
  342. package/dist/ssr/hydration-data.js +10 -0
  343. package/dist/ssr/hydration-data.js.map +1 -0
  344. package/dist/ssr/hydration-verify.d.ts +12 -0
  345. package/dist/ssr/hydration-verify.d.ts.map +1 -0
  346. package/dist/ssr/hydration-verify.js +144 -0
  347. package/dist/ssr/hydration-verify.js.map +1 -0
  348. package/dist/ssr/index-internal.d.ts +15 -0
  349. package/dist/ssr/index-internal.d.ts.map +1 -0
  350. package/dist/ssr/index-internal.js +19 -0
  351. package/dist/ssr/index-internal.js.map +1 -0
  352. package/dist/ssr/index.d.ts +5 -57
  353. package/dist/ssr/index.js +3 -738
  354. package/dist/ssr/render-keys.js +9 -32
  355. package/dist/ssr/render-keys.js.map +1 -1
  356. package/dist/ssr/render-resolved.d.ts +1 -1
  357. package/dist/ssr/render-resolved.d.ts.map +1 -1
  358. package/dist/ssr/render-resolved.js +4 -2
  359. package/dist/ssr/render-resolved.js.map +1 -1
  360. package/dist/ssr/render-sync.d.ts +21 -0
  361. package/dist/ssr/render-sync.d.ts.map +1 -0
  362. package/dist/ssr/render-sync.js +275 -0
  363. package/dist/ssr/render-sync.js.map +1 -0
  364. package/dist/ssr/route-policy-resolution.js +77 -0
  365. package/dist/ssr/route-policy-resolution.js.map +1 -0
  366. package/dist/ssr/route-render.d.ts +77 -0
  367. package/dist/ssr/route-render.d.ts.map +1 -0
  368. package/dist/ssr/route-render.js +119 -0
  369. package/dist/ssr/route-render.js.map +1 -0
  370. package/dist/ssr/sink.d.ts +26 -0
  371. package/dist/ssr/sink.d.ts.map +1 -0
  372. package/dist/ssr/types.d.ts +1 -0
  373. package/dist/ssr/types.d.ts.map +1 -1
  374. package/dist/ssr/verify-hydration.js.map +1 -1
  375. package/dist/testing/index.d.ts +1 -2
  376. package/dist/testing/index.d.ts.map +1 -1
  377. package/dist/testing/index.js +2 -1
  378. package/dist/testing/index.js.map +1 -1
  379. package/package.json +4 -3
  380. package/dist/data/index.d.ts.map +0 -1
  381. package/dist/data/index.js.map +0 -1
  382. package/dist/renderer/dom.js.map +0 -1
  383. package/dist/router/route.d.ts.map +0 -1
  384. package/dist/router/route.js.map +0 -1
  385. package/dist/runtime/component.d.ts.map +0 -1
  386. package/dist/runtime/component.js.map +0 -1
  387. package/dist/runtime/for.d.ts.map +0 -1
  388. package/dist/runtime/for.js.map +0 -1
  389. package/dist/runtime/operations.d.ts.map +0 -1
  390. package/dist/runtime/operations.js.map +0 -1
  391. package/dist/runtime/ssr-bridge.js +0 -24
  392. package/dist/runtime/ssr-bridge.js.map +0 -1
  393. package/dist/ssr/index.d.ts.map +0 -1
  394. package/dist/ssr/index.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ //#region src/runtime/lifecycle-operations.d.ts
2
+ type ActivityPredicate = () => boolean;
3
+ interface TimerOptions {
4
+ when?: ActivityPredicate | readonly ActivityPredicate[];
5
+ }
6
+ declare function routeActive(pathOrPaths: string | readonly string[]): ActivityPredicate;
7
+ declare function documentVisible(): ActivityPredicate;
8
+ declare function windowFocused(): ActivityPredicate;
9
+ type ListenerOptions = boolean | AddEventListenerOptions | undefined;
10
+ declare function on(target: EventTarget, event: string, handler: EventListener, options?: ListenerOptions): void;
11
+ declare function timer(intervalMs: number, fn: () => void, options?: TimerOptions): void;
12
+ declare function stream<T>(_source: unknown, _options?: Record<string, unknown>): {
13
+ value: T | null;
14
+ pending: boolean;
15
+ error: Error | null;
16
+ };
17
+ declare function task(fn: () => void | (() => void) | PromiseLike<void | (() => void)>): void;
18
+ /**
19
+ * Capture the result of a synchronous expression at call time and return a
20
+ * thunk that returns the captured value later. This is a low-level helper for
21
+ * cases where async continuations need to observe a snapshot of values at the
22
+ * moment scheduling occurred.
23
+ *
24
+ * Usage (public API):
25
+ * const snapshot = capture(() => someState());
26
+ * Promise.resolve().then(() => { use(snapshot()); });
27
+ */
28
+ declare function capture<T>(fn: () => T): () => T;
29
+ //#endregion
30
+ export { ActivityPredicate, TimerOptions, capture, documentVisible, on, routeActive, stream, task, timer, windowFocused };
31
+ //# sourceMappingURL=lifecycle-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-operations.d.ts","names":[],"sources":["../../src/runtime/lifecycle-operations.ts"],"mappings":";KAQY,iBAAA;AAAA,UAEK,YAAA;EACf,IAAA,GAAO,iBAAA,YAA6B,iBAAiB;AAAA;AAAA,iBAsDvC,WAAA,CACd,WAAA,+BACC,iBAAiB;AAAA,iBAIJ,eAAA,IAAmB,iBAAiB;AAAA,iBAKpC,aAAA,IAAiB,iBAAiB;AAAA,KAO7C,eAAA,aAA4B,uBAAuB;AAAA,iBAuGxC,EAAA,CACd,MAAA,EAAQ,WAAA,EACR,KAAA,UACA,OAAA,EAAS,aAAA,EACT,OAAA,GAAU,eAAA;AAAA,iBA8FI,KAAA,CACd,UAAA,UACA,EAAA,cACA,OAAA,GAAU,YAAY;AAAA,iBA8BR,MAAA,IACd,OAAA,WACA,QAAA,GAAW,MAAA;EACR,KAAA,EAAO,CAAA;EAAU,OAAA;EAAkB,KAAA,EAAO,KAAA;AAAA;AAAA,iBAK/B,IAAA,CACd,EAAgE,8BAAhC,WAAW;;;;AAnQzB;AAIpB;;;;AAAoD;AAKpD;iBAqSgB,OAAA,IAAW,EAAA,QAAU,CAAA,SAAU,CAAC"}
@@ -0,0 +1,195 @@
1
+ import { claimHookIndex, getCurrentComponentInstance } from "./component-scope.js";
2
+ import { registerCommitOperation } from "./component-internal.js";
3
+ import "./component.js";
4
+ import { isRouteActivityActive } from "../common/route-activity.js";
5
+ //#region src/runtime/lifecycle-operations.ts
6
+ function normalizePredicates(predicates) {
7
+ if (!predicates) return [];
8
+ return typeof predicates === "function" ? [predicates] : predicates;
9
+ }
10
+ function allPredicatesPass(predicates) {
11
+ for (const predicate of predicates) if (!predicate()) return false;
12
+ return true;
13
+ }
14
+ function getLifecycleSlot(instance, index, kind, create) {
15
+ const existing = instance.lifecycleSlots[index];
16
+ if (existing) {
17
+ const slot = existing;
18
+ if (slot.kind !== kind) throw new Error(`${kind}() lifecycle order violation: slot ${index} already belongs to ${slot.kind}(). Keep lifecycle primitives in a stable top-level order.`);
19
+ return existing;
20
+ }
21
+ const slot = create();
22
+ instance.lifecycleSlots[index] = slot;
23
+ return slot;
24
+ }
25
+ function routeActive(pathOrPaths) {
26
+ return () => isRouteActivityActive(pathOrPaths);
27
+ }
28
+ function documentVisible() {
29
+ return () => typeof document === "undefined" || document.visibilityState !== "hidden";
30
+ }
31
+ function windowFocused() {
32
+ return () => typeof document === "undefined" || typeof document.hasFocus !== "function" || document.hasFocus();
33
+ }
34
+ function normalizeListenerOptions(options) {
35
+ if (options === void 0 || typeof options === "boolean") return options;
36
+ return {
37
+ ...options.capture !== void 0 ? { capture: options.capture } : {},
38
+ ...options.once !== void 0 ? { once: options.once } : {},
39
+ ...options.passive !== void 0 ? { passive: options.passive } : {},
40
+ ...options.signal !== void 0 ? { signal: options.signal } : {}
41
+ };
42
+ }
43
+ function listenerOptionsEqual(a, b) {
44
+ if (a === b) return true;
45
+ if (typeof a === "boolean" || typeof b === "boolean") return a === b;
46
+ if (!a || !b) return a === b;
47
+ return a.capture === b.capture && a.once === b.once && a.passive === b.passive && a.signal === b.signal;
48
+ }
49
+ function detachListenerSlot(slot) {
50
+ if (!slot.attached || !slot.target) return;
51
+ slot.target.removeEventListener(slot.event, slot.listener, slot.options);
52
+ slot.attached = false;
53
+ }
54
+ function commitListenerSlot(instance, slot) {
55
+ slot.handler = slot.pendingHandler;
56
+ if (!slot.attached || slot.target !== slot.pendingTarget || slot.event !== slot.pendingEvent || !listenerOptionsEqual(slot.options, slot.pendingOptions)) {
57
+ detachListenerSlot(slot);
58
+ slot.target = slot.pendingTarget;
59
+ slot.event = slot.pendingEvent;
60
+ slot.options = slot.pendingOptions;
61
+ slot.target.addEventListener(slot.event, slot.listener, slot.options);
62
+ slot.attached = true;
63
+ }
64
+ if (!slot.cleanupRegistered) {
65
+ slot.cleanupRegistered = true;
66
+ instance.cleanupFns.push(() => {
67
+ detachListenerSlot(slot);
68
+ slot.cleanupRegistered = false;
69
+ });
70
+ }
71
+ }
72
+ function on(target, event, handler, options) {
73
+ const instance = getCurrentComponentInstance();
74
+ if (!instance) return;
75
+ const index = claimHookIndex(instance, "on");
76
+ const normalizedOptions = normalizeListenerOptions(options);
77
+ const slot = getLifecycleSlot(instance, index, "listener", () => {
78
+ const createdSlot = {
79
+ kind: "listener",
80
+ target: null,
81
+ event,
82
+ handler,
83
+ listener: ((evt) => {
84
+ createdSlot.handler.call(createdSlot.target, evt);
85
+ }),
86
+ options: void 0,
87
+ pendingTarget: target,
88
+ pendingEvent: event,
89
+ pendingHandler: handler,
90
+ pendingOptions: normalizedOptions,
91
+ attached: false,
92
+ cleanupRegistered: false
93
+ };
94
+ return createdSlot;
95
+ });
96
+ slot.pendingTarget = target;
97
+ slot.pendingEvent = event;
98
+ slot.pendingHandler = handler;
99
+ slot.pendingOptions = normalizedOptions;
100
+ registerCommitOperation(() => {
101
+ commitListenerSlot(instance, slot);
102
+ });
103
+ }
104
+ function stopTimerSlot(slot) {
105
+ if (slot.id === null) return;
106
+ clearInterval(slot.id);
107
+ slot.id = null;
108
+ }
109
+ function startTimerSlot(slot) {
110
+ slot.id = setInterval(() => {
111
+ if (allPredicatesPass(slot.predicates)) slot.callback();
112
+ }, slot.intervalMs ?? slot.pendingIntervalMs);
113
+ }
114
+ function commitTimerSlot(instance, slot) {
115
+ const intervalChanged = slot.intervalMs !== slot.pendingIntervalMs;
116
+ slot.callback = slot.pendingCallback;
117
+ slot.predicates = slot.pendingPredicates;
118
+ if (slot.id === null || intervalChanged) {
119
+ stopTimerSlot(slot);
120
+ slot.intervalMs = slot.pendingIntervalMs;
121
+ startTimerSlot(slot);
122
+ }
123
+ if (!slot.cleanupRegistered) {
124
+ slot.cleanupRegistered = true;
125
+ instance.cleanupFns.push(() => {
126
+ stopTimerSlot(slot);
127
+ slot.cleanupRegistered = false;
128
+ });
129
+ }
130
+ }
131
+ function timer(intervalMs, fn, options) {
132
+ const instance = getCurrentComponentInstance();
133
+ if (!instance) return;
134
+ const index = claimHookIndex(instance, "timer");
135
+ const predicates = normalizePredicates(options?.when);
136
+ const slot = getLifecycleSlot(instance, index, "timer", () => ({
137
+ kind: "timer",
138
+ id: null,
139
+ intervalMs: null,
140
+ pendingIntervalMs: intervalMs,
141
+ callback: fn,
142
+ predicates,
143
+ pendingCallback: fn,
144
+ pendingPredicates: predicates,
145
+ cleanupRegistered: false
146
+ }));
147
+ slot.pendingIntervalMs = intervalMs;
148
+ slot.pendingCallback = fn;
149
+ slot.pendingPredicates = predicates;
150
+ registerCommitOperation(() => {
151
+ commitTimerSlot(instance, slot);
152
+ });
153
+ }
154
+ function stream(_source, _options) {
155
+ return {
156
+ value: null,
157
+ pending: true,
158
+ error: null
159
+ };
160
+ }
161
+ function task(fn) {
162
+ const instance = getCurrentComponentInstance();
163
+ if (!instance) return;
164
+ const slot = getLifecycleSlot(instance, claimHookIndex(instance, "task"), "task", () => ({
165
+ kind: "task",
166
+ started: false,
167
+ task: fn
168
+ }));
169
+ if (!slot.started) {
170
+ slot.task = fn;
171
+ registerCommitOperation(async () => {
172
+ if (slot.started) return;
173
+ slot.started = true;
174
+ return await slot.task();
175
+ });
176
+ }
177
+ }
178
+ /**
179
+ * Capture the result of a synchronous expression at call time and return a
180
+ * thunk that returns the captured value later. This is a low-level helper for
181
+ * cases where async continuations need to observe a snapshot of values at the
182
+ * moment scheduling occurred.
183
+ *
184
+ * Usage (public API):
185
+ * const snapshot = capture(() => someState());
186
+ * Promise.resolve().then(() => { use(snapshot()); });
187
+ */
188
+ function capture(fn) {
189
+ const value = fn();
190
+ return () => value;
191
+ }
192
+ //#endregion
193
+ export { capture, documentVisible, on, routeActive, stream, task, timer, windowFocused };
194
+
195
+ //# sourceMappingURL=lifecycle-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-operations.js","names":[],"sources":["../../src/runtime/lifecycle-operations.ts"],"sourcesContent":["import {\n claimHookIndex,\n getCurrentComponentInstance,\n registerCommitOperation,\n type ComponentInstance,\n} from './component';\nimport { isRouteActivityActive } from '../common/route-activity';\n\nexport type ActivityPredicate = () => boolean;\n\nexport interface TimerOptions {\n when?: ActivityPredicate | readonly ActivityPredicate[];\n}\n\nfunction normalizePredicates(\n predicates: TimerOptions['when']\n): readonly ActivityPredicate[] {\n if (!predicates) {\n return [];\n }\n\n return typeof predicates === 'function' ? [predicates] : predicates;\n}\n\nfunction allPredicatesPass(predicates: readonly ActivityPredicate[]): boolean {\n for (const predicate of predicates) {\n if (!predicate()) {\n return false;\n }\n }\n\n return true;\n}\n\ntype LifecycleSlotKind = 'timer' | 'listener' | 'task';\n\ntype LifecycleSlot = {\n kind: LifecycleSlotKind;\n};\n\nfunction getLifecycleSlot<TSlot extends LifecycleSlot>(\n instance: ComponentInstance,\n index: number,\n kind: TSlot['kind'],\n create: () => TSlot\n): TSlot {\n const existing = instance.lifecycleSlots[index];\n\n if (existing) {\n const slot = existing as LifecycleSlot;\n if (slot.kind !== kind) {\n throw new Error(\n `${kind}() lifecycle order violation: slot ${index} already belongs to ${slot.kind}(). ` +\n 'Keep lifecycle primitives in a stable top-level order.'\n );\n }\n\n return existing as TSlot;\n }\n\n const slot = create();\n instance.lifecycleSlots[index] = slot;\n return slot;\n}\n\nexport function routeActive(\n pathOrPaths: string | readonly string[]\n): ActivityPredicate {\n return () => isRouteActivityActive(pathOrPaths);\n}\n\nexport function documentVisible(): ActivityPredicate {\n return () =>\n typeof document === 'undefined' || document.visibilityState !== 'hidden';\n}\n\nexport function windowFocused(): ActivityPredicate {\n return () =>\n typeof document === 'undefined' ||\n typeof document.hasFocus !== 'function' ||\n document.hasFocus();\n}\n\ntype ListenerOptions = boolean | AddEventListenerOptions | undefined;\n\ntype NormalizedListenerOptions =\n | boolean\n | {\n capture?: boolean;\n once?: boolean;\n passive?: boolean;\n signal?: AbortSignal;\n }\n | undefined;\n\ninterface ListenerSlot extends LifecycleSlot {\n kind: 'listener';\n target: EventTarget | null;\n event: string;\n handler: EventListener;\n listener: EventListener;\n options: NormalizedListenerOptions;\n pendingTarget: EventTarget;\n pendingEvent: string;\n pendingHandler: EventListener;\n pendingOptions: NormalizedListenerOptions;\n attached: boolean;\n cleanupRegistered: boolean;\n}\n\nfunction normalizeListenerOptions(\n options: ListenerOptions\n): NormalizedListenerOptions {\n if (options === undefined || typeof options === 'boolean') {\n return options;\n }\n\n return {\n ...(options.capture !== undefined ? { capture: options.capture } : {}),\n ...(options.once !== undefined ? { once: options.once } : {}),\n ...(options.passive !== undefined ? { passive: options.passive } : {}),\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n };\n}\n\nfunction listenerOptionsEqual(\n a: NormalizedListenerOptions,\n b: NormalizedListenerOptions\n): boolean {\n if (a === b) {\n return true;\n }\n if (typeof a === 'boolean' || typeof b === 'boolean') {\n return a === b;\n }\n if (!a || !b) {\n return a === b;\n }\n\n return (\n a.capture === b.capture &&\n a.once === b.once &&\n a.passive === b.passive &&\n a.signal === b.signal\n );\n}\n\nfunction detachListenerSlot(slot: ListenerSlot): void {\n if (!slot.attached || !slot.target) {\n return;\n }\n\n slot.target.removeEventListener(slot.event, slot.listener, slot.options);\n slot.attached = false;\n}\n\nfunction commitListenerSlot(\n instance: ComponentInstance,\n slot: ListenerSlot\n): void {\n slot.handler = slot.pendingHandler;\n\n const shouldReattach =\n !slot.attached ||\n slot.target !== slot.pendingTarget ||\n slot.event !== slot.pendingEvent ||\n !listenerOptionsEqual(slot.options, slot.pendingOptions);\n\n if (shouldReattach) {\n detachListenerSlot(slot);\n slot.target = slot.pendingTarget;\n slot.event = slot.pendingEvent;\n slot.options = slot.pendingOptions;\n slot.target.addEventListener(slot.event, slot.listener, slot.options);\n slot.attached = true;\n }\n\n if (!slot.cleanupRegistered) {\n slot.cleanupRegistered = true;\n instance.cleanupFns.push(() => {\n detachListenerSlot(slot);\n slot.cleanupRegistered = false;\n });\n }\n}\n\nexport function on(\n target: EventTarget,\n event: string,\n handler: EventListener,\n options?: ListenerOptions\n): void {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return;\n }\n\n const index = claimHookIndex(instance, 'on');\n const normalizedOptions = normalizeListenerOptions(options);\n const slot = getLifecycleSlot<ListenerSlot>(\n instance,\n index,\n 'listener',\n () => {\n const createdSlot = {\n kind: 'listener' as const,\n target: null,\n event,\n handler,\n listener: ((evt: Event) => {\n createdSlot.handler.call(createdSlot.target, evt);\n }) as EventListener,\n options: undefined,\n pendingTarget: target,\n pendingEvent: event,\n pendingHandler: handler,\n pendingOptions: normalizedOptions,\n attached: false,\n cleanupRegistered: false,\n };\n return createdSlot;\n }\n );\n\n slot.pendingTarget = target;\n slot.pendingEvent = event;\n slot.pendingHandler = handler;\n slot.pendingOptions = normalizedOptions;\n\n registerCommitOperation(() => {\n commitListenerSlot(instance, slot);\n });\n}\n\ninterface TimerSlot extends LifecycleSlot {\n kind: 'timer';\n id: ReturnType<typeof setInterval> | null;\n intervalMs: number | null;\n pendingIntervalMs: number;\n callback: () => void;\n predicates: readonly ActivityPredicate[];\n pendingCallback: () => void;\n pendingPredicates: readonly ActivityPredicate[];\n cleanupRegistered: boolean;\n}\n\nfunction stopTimerSlot(slot: TimerSlot): void {\n if (slot.id === null) {\n return;\n }\n\n clearInterval(slot.id);\n slot.id = null;\n}\n\nfunction startTimerSlot(slot: TimerSlot): void {\n slot.id = setInterval(() => {\n if (allPredicatesPass(slot.predicates)) {\n slot.callback();\n }\n }, slot.intervalMs ?? slot.pendingIntervalMs);\n}\n\nfunction commitTimerSlot(instance: ComponentInstance, slot: TimerSlot): void {\n const intervalChanged = slot.intervalMs !== slot.pendingIntervalMs;\n\n slot.callback = slot.pendingCallback;\n slot.predicates = slot.pendingPredicates;\n\n if (slot.id === null || intervalChanged) {\n stopTimerSlot(slot);\n slot.intervalMs = slot.pendingIntervalMs;\n startTimerSlot(slot);\n }\n\n if (!slot.cleanupRegistered) {\n slot.cleanupRegistered = true;\n instance.cleanupFns.push(() => {\n stopTimerSlot(slot);\n slot.cleanupRegistered = false;\n });\n }\n}\n\nexport function timer(\n intervalMs: number,\n fn: () => void,\n options?: TimerOptions\n): void {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return;\n }\n\n const index = claimHookIndex(instance, 'timer');\n const predicates = normalizePredicates(options?.when);\n const slot = getLifecycleSlot<TimerSlot>(instance, index, 'timer', () => ({\n kind: 'timer',\n id: null,\n intervalMs: null,\n pendingIntervalMs: intervalMs,\n callback: fn,\n predicates,\n pendingCallback: fn,\n pendingPredicates: predicates,\n cleanupRegistered: false,\n }));\n\n slot.pendingIntervalMs = intervalMs;\n slot.pendingCallback = fn;\n slot.pendingPredicates = predicates;\n\n registerCommitOperation(() => {\n commitTimerSlot(instance, slot);\n });\n}\n\nexport function stream<T>(\n _source: unknown,\n _options?: Record<string, unknown>\n): { value: T | null; pending: boolean; error: Error | null } {\n // Stub implementation: no-op.\n return { value: null, pending: true, error: null };\n}\n\nexport function task(\n fn: () => void | (() => void) | PromiseLike<void | (() => void)>\n): void {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return;\n }\n\n const index = claimHookIndex(instance, 'task');\n const slot = getLifecycleSlot<\n LifecycleSlot & {\n kind: 'task';\n started: boolean;\n task: typeof fn;\n }\n >(instance, index, 'task', () => ({\n kind: 'task',\n started: false,\n task: fn,\n }));\n\n if (!slot.started) {\n slot.task = fn;\n registerCommitOperation(async () => {\n if (slot.started) {\n return;\n }\n\n slot.started = true;\n return await slot.task();\n });\n }\n}\n\n/**\n * Capture the result of a synchronous expression at call time and return a\n * thunk that returns the captured value later. This is a low-level helper for\n * cases where async continuations need to observe a snapshot of values at the\n * moment scheduling occurred.\n *\n * Usage (public API):\n * const snapshot = capture(() => someState());\n * Promise.resolve().then(() => { use(snapshot()); });\n */\nexport function capture<T>(fn: () => T): () => T {\n const value = fn();\n return () => value;\n}\n"],"mappings":"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"}
@@ -1,40 +1,3 @@
1
- //#region src/runtime/operations.d.ts
2
- interface ResourceResult<T> {
3
- value: T | null;
4
- pending: boolean;
5
- error: Error | null;
6
- refresh(): void;
7
- }
8
- type ActivityPredicate = () => boolean;
9
- interface TimerOptions {
10
- when?: ActivityPredicate | readonly ActivityPredicate[];
11
- }
12
- declare function routeActive(pathOrPaths: string | readonly string[]): ActivityPredicate;
13
- declare function documentVisible(): ActivityPredicate;
14
- declare function windowFocused(): ActivityPredicate;
15
- declare function resource<T, const TDeps extends readonly unknown[]>(fn: (opts: {
16
- signal: AbortSignal;
17
- }) => PromiseLike<T> | T, deps: TDeps): ResourceResult<T>;
18
- type ListenerOptions = boolean | AddEventListenerOptions | undefined;
19
- declare function on(target: EventTarget, event: string, handler: EventListener, options?: ListenerOptions): void;
20
- declare function timer(intervalMs: number, fn: () => void, options?: TimerOptions): void;
21
- declare function stream<T>(_source: unknown, _options?: Record<string, unknown>): {
22
- value: T | null;
23
- pending: boolean;
24
- error: Error | null;
25
- };
26
- declare function task(fn: () => void | (() => void) | PromiseLike<void | (() => void)>): void;
27
- /**
28
- * Capture the result of a synchronous expression at call time and return a
29
- * thunk that returns the captured value later. This is a low-level helper for
30
- * cases where async continuations need to observe a snapshot of values at the
31
- * moment scheduling occurred.
32
- *
33
- * Usage (public API):
34
- * const snapshot = capture(() => someState());
35
- * Promise.resolve().then(() => { use(snapshot()); });
36
- */
37
- declare function capture<T>(fn: () => T): () => T;
38
- //#endregion
39
- export { ActivityPredicate, ResourceResult, TimerOptions, capture, documentVisible, on, resource, routeActive, stream, task, timer, windowFocused };
40
- //# sourceMappingURL=operations.d.ts.map
1
+ import { ResourceResult, resource } from "./resource-operation.js";
2
+ import { ActivityPredicate, TimerOptions, capture, documentVisible, on, routeActive, stream, task, timer, windowFocused } from "./lifecycle-operations.js";
3
+ export { type ActivityPredicate, type ResourceResult, type TimerOptions, capture, documentVisible, on, resource, routeActive, stream, task, timer, windowFocused };
@@ -1,358 +1,3 @@
1
- import { globalScheduler } from "./scheduler.js";
2
- import { getCurrentContextFrame } from "./context.js";
3
- import { claimHookIndex, getCurrentComponentInstance, registerCommitOperation } from "./component.js";
4
- import { state } from "./state.js";
5
- import { brandSnapshotSource } from "./snapshot-source.js";
6
- import { SSRDataMissingError } from "../common/ssr-errors.js";
7
- import { isRouteActivityActive } from "../common/route-activity.js";
8
- import { getSSRBridge } from "./ssr-bridge.js";
9
- import { ResourceCell } from "./resource-cell.js";
10
- //#region src/runtime/operations.ts
11
- function normalizePredicates(predicates) {
12
- if (!predicates) return [];
13
- return typeof predicates === "function" ? [predicates] : predicates;
14
- }
15
- function allPredicatesPass(predicates) {
16
- for (const predicate of predicates) if (!predicate()) return false;
17
- return true;
18
- }
19
- function getLifecycleSlot(instance, index, kind, create) {
20
- const existing = instance.lifecycleSlots[index];
21
- if (existing) {
22
- const slot = existing;
23
- if (slot.kind !== kind) throw new Error(`${kind}() lifecycle order violation: slot ${index} already belongs to ${slot.kind}(). Keep lifecycle primitives in a stable top-level order.`);
24
- return existing;
25
- }
26
- const slot = create();
27
- instance.lifecycleSlots[index] = slot;
28
- return slot;
29
- }
30
- function routeActive(pathOrPaths) {
31
- return () => isRouteActivityActive(pathOrPaths);
32
- }
33
- function documentVisible() {
34
- return () => typeof document === "undefined" || document.visibilityState !== "hidden";
35
- }
36
- function windowFocused() {
37
- return () => typeof document === "undefined" || typeof document.hasFocus !== "function" || document.hasFocus();
38
- }
39
- /**
40
- * Resource primitive — simple, deterministic async primitive
41
- * Usage: resource(fn, deps)
42
- * - fn receives { signal }
43
- * - captures execution context once at creation (synchronous step only)
44
- * - executes at most once per generation; stale async results are ignored
45
- * - refresh() cancels in-flight execution, increments generation and re-runs
46
- * - exposes { value, pending, error, refresh }
47
- * - during SSR, async results are disallowed and will throw synchronously
48
- */
49
- function resource(fn, deps = []) {
50
- const instance = getCurrentComponentInstance();
51
- const inst = instance;
52
- if (!instance) {
53
- const ssr = getSSRBridge();
54
- const renderData = ssr.getCurrentRenderData();
55
- if (renderData) {
56
- const key = ssr.getNextKey();
57
- if (!(key in renderData)) ssr.throwSSRDataMissing();
58
- const val = renderData[key];
59
- return brandSnapshotSource({
60
- value: val,
61
- pending: false,
62
- error: null,
63
- refresh: () => {}
64
- });
65
- }
66
- if (ssr.getCurrentSSRContext()) ssr.throwSSRDataMissing();
67
- throw new Error("[Askr] resource() must be called during component render inside an app. Do not create resources at module scope or outside render.");
68
- }
69
- const ssr = getSSRBridge();
70
- const renderData = ssr.getCurrentRenderData();
71
- if (renderData) {
72
- const key = ssr.getNextKey();
73
- if (!(key in renderData)) ssr.throwSSRDataMissing();
74
- const val = renderData[key];
75
- const h = state({
76
- cell: void 0,
77
- snapshot: brandSnapshotSource({
78
- value: val,
79
- pending: false,
80
- error: null,
81
- refresh: () => {}
82
- })
83
- })();
84
- h.snapshot.value = val;
85
- h.snapshot.pending = false;
86
- h.snapshot.error = null;
87
- return h.snapshot;
88
- }
89
- const holder = state({
90
- cell: void 0,
91
- snapshot: brandSnapshotSource({
92
- value: null,
93
- pending: true,
94
- error: null,
95
- refresh: () => {}
96
- })
97
- });
98
- const h = holder();
99
- if (!h.cell) {
100
- const cell = new ResourceCell(fn, deps, getCurrentContextFrame());
101
- cell.ownerName = inst.fn?.name || "<anonymous>";
102
- h.cell = cell;
103
- h.snapshot = cell.snapshot;
104
- const unsubscribe = cell.subscribe(() => {
105
- const cur = holder();
106
- cur.snapshot.value = cell.snapshot.value;
107
- cur.snapshot.pending = cell.snapshot.pending;
108
- cur.snapshot.error = cell.snapshot.error;
109
- holder.set(cur);
110
- try {
111
- inst.notifyUpdate?.();
112
- } catch {}
113
- });
114
- (inst.cleanupFns ??= []).push(() => {
115
- unsubscribe();
116
- cell.dispose();
117
- });
118
- if (inst.ssr) {
119
- cell.start(true, false);
120
- if (!cell.pending) {
121
- const cur = holder();
122
- cur.snapshot.value = cell.value;
123
- cur.snapshot.pending = cell.pending;
124
- cur.snapshot.error = cell.error;
125
- }
126
- } else {
127
- const scheduledGeneration = cell.generation;
128
- globalScheduler.enqueueInLane("post", () => {
129
- if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) return;
130
- try {
131
- cell.start(false, false);
132
- } catch (err) {
133
- const cur = holder();
134
- cur.snapshot.value = cell.value;
135
- cur.snapshot.pending = cell.pending;
136
- cur.snapshot.error = err ?? null;
137
- holder.set(cur);
138
- inst.notifyUpdate?.();
139
- return;
140
- }
141
- if (!cell.pending) {
142
- const cur = holder();
143
- cur.snapshot.value = cell.value;
144
- cur.snapshot.pending = cell.pending;
145
- cur.snapshot.error = cell.error;
146
- holder.set(cur);
147
- inst.notifyUpdate?.();
148
- }
149
- });
150
- }
151
- }
152
- const cell = h.cell;
153
- cell.setLoader(fn);
154
- if (!cell.deps || cell.deps.length !== deps.length || cell.deps.some((d, i) => !Object.is(d, deps[i]))) {
155
- cell.deps = deps.slice();
156
- cell.generation++;
157
- cell.pending = true;
158
- cell.error = null;
159
- h.snapshot.pending = true;
160
- h.snapshot.error = null;
161
- try {
162
- if (inst.ssr) {
163
- cell.start(true, false);
164
- if (!cell.pending) {
165
- const cur = holder();
166
- cur.snapshot.value = cell.value;
167
- cur.snapshot.pending = cell.pending;
168
- cur.snapshot.error = cell.error;
169
- }
170
- } else {
171
- const scheduledGeneration = cell.generation;
172
- globalScheduler.enqueueInLane("post", () => {
173
- if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) return;
174
- cell.start(false, false);
175
- if (!cell.pending) {
176
- const cur = holder();
177
- cur.snapshot.value = cell.value;
178
- cur.snapshot.pending = cell.pending;
179
- cur.snapshot.error = cell.error;
180
- holder.set(cur);
181
- inst.notifyUpdate?.();
182
- }
183
- });
184
- }
185
- } catch (err) {
186
- if (err instanceof SSRDataMissingError) throw err;
187
- cell.error = err;
188
- cell.pending = false;
189
- const cur = holder();
190
- cur.snapshot.value = cell.value;
191
- cur.snapshot.pending = cell.pending;
192
- cur.snapshot.error = cell.error;
193
- }
194
- }
195
- return h.snapshot;
196
- }
197
- function normalizeListenerOptions(options) {
198
- if (options === void 0 || typeof options === "boolean") return options;
199
- return {
200
- ...options.capture !== void 0 ? { capture: options.capture } : {},
201
- ...options.once !== void 0 ? { once: options.once } : {},
202
- ...options.passive !== void 0 ? { passive: options.passive } : {},
203
- ...options.signal !== void 0 ? { signal: options.signal } : {}
204
- };
205
- }
206
- function listenerOptionsEqual(a, b) {
207
- if (a === b) return true;
208
- if (typeof a === "boolean" || typeof b === "boolean") return a === b;
209
- if (!a || !b) return a === b;
210
- return a.capture === b.capture && a.once === b.once && a.passive === b.passive && a.signal === b.signal;
211
- }
212
- function detachListenerSlot(slot) {
213
- if (!slot.attached || !slot.target) return;
214
- slot.target.removeEventListener(slot.event, slot.listener, slot.options);
215
- slot.attached = false;
216
- }
217
- function commitListenerSlot(instance, slot) {
218
- slot.handler = slot.pendingHandler;
219
- if (!slot.attached || slot.target !== slot.pendingTarget || slot.event !== slot.pendingEvent || !listenerOptionsEqual(slot.options, slot.pendingOptions)) {
220
- detachListenerSlot(slot);
221
- slot.target = slot.pendingTarget;
222
- slot.event = slot.pendingEvent;
223
- slot.options = slot.pendingOptions;
224
- slot.target.addEventListener(slot.event, slot.listener, slot.options);
225
- slot.attached = true;
226
- }
227
- if (!slot.cleanupRegistered) {
228
- slot.cleanupRegistered = true;
229
- instance.cleanupFns.push(() => {
230
- detachListenerSlot(slot);
231
- slot.cleanupRegistered = false;
232
- });
233
- }
234
- }
235
- function on(target, event, handler, options) {
236
- const instance = getCurrentComponentInstance();
237
- if (!instance) return;
238
- const index = claimHookIndex(instance, "on");
239
- const normalizedOptions = normalizeListenerOptions(options);
240
- const slot = getLifecycleSlot(instance, index, "listener", () => {
241
- const createdSlot = {
242
- kind: "listener",
243
- target: null,
244
- event,
245
- handler,
246
- listener: ((evt) => {
247
- createdSlot.handler.call(createdSlot.target, evt);
248
- }),
249
- options: void 0,
250
- pendingTarget: target,
251
- pendingEvent: event,
252
- pendingHandler: handler,
253
- pendingOptions: normalizedOptions,
254
- attached: false,
255
- cleanupRegistered: false
256
- };
257
- return createdSlot;
258
- });
259
- slot.pendingTarget = target;
260
- slot.pendingEvent = event;
261
- slot.pendingHandler = handler;
262
- slot.pendingOptions = normalizedOptions;
263
- registerCommitOperation(() => {
264
- commitListenerSlot(instance, slot);
265
- });
266
- }
267
- function stopTimerSlot(slot) {
268
- if (slot.id === null) return;
269
- clearInterval(slot.id);
270
- slot.id = null;
271
- }
272
- function startTimerSlot(slot) {
273
- slot.id = setInterval(() => {
274
- if (allPredicatesPass(slot.predicates)) slot.callback();
275
- }, slot.intervalMs ?? slot.pendingIntervalMs);
276
- }
277
- function commitTimerSlot(instance, slot) {
278
- const intervalChanged = slot.intervalMs !== slot.pendingIntervalMs;
279
- slot.callback = slot.pendingCallback;
280
- slot.predicates = slot.pendingPredicates;
281
- if (slot.id === null || intervalChanged) {
282
- stopTimerSlot(slot);
283
- slot.intervalMs = slot.pendingIntervalMs;
284
- startTimerSlot(slot);
285
- }
286
- if (!slot.cleanupRegistered) {
287
- slot.cleanupRegistered = true;
288
- instance.cleanupFns.push(() => {
289
- stopTimerSlot(slot);
290
- slot.cleanupRegistered = false;
291
- });
292
- }
293
- }
294
- function timer(intervalMs, fn, options) {
295
- const instance = getCurrentComponentInstance();
296
- if (!instance) return;
297
- const index = claimHookIndex(instance, "timer");
298
- const predicates = normalizePredicates(options?.when);
299
- const slot = getLifecycleSlot(instance, index, "timer", () => ({
300
- kind: "timer",
301
- id: null,
302
- intervalMs: null,
303
- pendingIntervalMs: intervalMs,
304
- callback: fn,
305
- predicates,
306
- pendingCallback: fn,
307
- pendingPredicates: predicates,
308
- cleanupRegistered: false
309
- }));
310
- slot.pendingIntervalMs = intervalMs;
311
- slot.pendingCallback = fn;
312
- slot.pendingPredicates = predicates;
313
- registerCommitOperation(() => {
314
- commitTimerSlot(instance, slot);
315
- });
316
- }
317
- function stream(_source, _options) {
318
- return {
319
- value: null,
320
- pending: true,
321
- error: null
322
- };
323
- }
324
- function task(fn) {
325
- const instance = getCurrentComponentInstance();
326
- if (!instance) return;
327
- const slot = getLifecycleSlot(instance, claimHookIndex(instance, "task"), "task", () => ({
328
- kind: "task",
329
- started: false,
330
- task: fn
331
- }));
332
- if (!slot.started) {
333
- slot.task = fn;
334
- registerCommitOperation(async () => {
335
- if (slot.started) return;
336
- slot.started = true;
337
- return await slot.task();
338
- });
339
- }
340
- }
341
- /**
342
- * Capture the result of a synchronous expression at call time and return a
343
- * thunk that returns the captured value later. This is a low-level helper for
344
- * cases where async continuations need to observe a snapshot of values at the
345
- * moment scheduling occurred.
346
- *
347
- * Usage (public API):
348
- * const snapshot = capture(() => someState());
349
- * Promise.resolve().then(() => { use(snapshot()); });
350
- */
351
- function capture(fn) {
352
- const value = fn();
353
- return () => value;
354
- }
355
- //#endregion
1
+ import { resource } from "./resource-operation.js";
2
+ import { capture, documentVisible, on, routeActive, stream, task, timer, windowFocused } from "./lifecycle-operations.js";
356
3
  export { capture, documentVisible, on, resource, routeActive, stream, task, timer, windowFocused };
357
-
358
- //# sourceMappingURL=operations.js.map
@@ -1,5 +1,4 @@
1
- import { ComponentInstance } from "./component.js";
2
-
1
+ import { ComponentInstance } from "./component-internal.js";
3
2
  //#region src/runtime/readable.d.ts
4
3
  interface DerivedSubscriber {
5
4
  _markDirty(): void;
@@ -26,5 +25,5 @@ declare function markReadableDerivedSubscribersDirty(source: ReadableSource<unkn
26
25
  declare function markReactivePropsDirtySource(source: ReadableSource<unknown>): void;
27
26
  declare function notifyReadableReaders(source: ReadableSource<unknown>, skipInstance?: ComponentInstance | null): boolean;
28
27
  //#endregion
29
- export { ReadableSource };
28
+ export { DerivedSubscriber, ReadableSource };
30
29
  //# sourceMappingURL=readable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readable.d.ts","names":[],"sources":["../../src/runtime/readable.ts"],"mappings":";;;UAGiB,iBAAA;EACf,UAAA;EACA,yBAAA,GAA4B,GAAG,CAAC,cAAA;AAAA;AAAA,UAGjB,cAAA;EAAA,IACX,CAAA;EACJ,YAAA;EACA,gBAAA;EACA,QAAA,GAAW,GAAA,CAAI,iBAAA;EACf,mBAAA,GAAsB,GAAA,CAAI,iBAAA;EAC1B,QAAA;AAAA;AAAA,iBAGc,iBAAA,CAAkB,MAAe;AAAA,iBAsCjC,kBAAA,CAAmB,MAA+B,EAAvB,cAAc;AAAA,iBAsCzC,2BAAA,IACd,cAAA,EAAgB,GAAA,CAAI,cAAA,YACpB,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAWa,6BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBAiBb,yCAAA,CACd,QAAA,EAAU,iBAAA,EACV,KAAA,sBACA,MAAA,EAAQ,GAAA,CAAI,cAAA,wBACZ,yBAAA,GACI,GAAA,CAAI,cAAA;AAAA,iBAkDM,4BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBAiBb,uBAAA,IACd,UAAA,EAAY,iBAAA,EACZ,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAaa,kCAAA,CACd,UAAA,EAAY,iBAAA,EACZ,WAAA,EAAa,GAAA,CAAI,cAAA,YACjB,WAAA,EAAa,GAAA,CAAI,cAAA;AAAA,iBAkBH,mCAAA,CACd,UAAA,EAAY,iBAAA,EACZ,OAAA,EAAS,GAAA,CAAI,cAAA;AAAA,iBAQC,mCAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBAYR,4BAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBAaR,qBAAA,CACd,MAAA,EAAQ,cAAA,WACR,YAAA,GAAe,iBAAiB"}
1
+ {"version":3,"file":"readable.d.ts","names":[],"sources":["../../src/runtime/readable.ts"],"mappings":";;UAMiB,iBAAA;EACf,UAAA;EACA,yBAAA,GAA4B,GAAG,CAAC,cAAA;AAAA;AAAA,UAGjB,cAAA;EAAA,IACX,CAAA;EACJ,YAAA;EACA,gBAAA;EACA,QAAA,GAAW,GAAA,CAAI,iBAAA;EACf,mBAAA,GAAsB,GAAA,CAAI,iBAAA;EAC1B,QAAA;AAAA;AAAA,iBAGc,iBAAA,CAAkB,MAAe;AAAA,iBAkCjC,kBAAA,CAAmB,MAA+B,EAAvB,cAAc;AAAA,iBAsCzC,2BAAA,IACd,cAAA,EAAgB,GAAA,CAAI,cAAA,YACpB,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAWa,6BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBAiBb,yCAAA,CACd,QAAA,EAAU,iBAAA,EACV,KAAA,sBACA,MAAA,EAAQ,GAAA,CAAI,cAAA,wBACZ,yBAAA,GACI,GAAA,CAAI,cAAA;AAAA,iBAkDM,4BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBAiBb,uBAAA,IACd,UAAA,EAAY,iBAAA,EACZ,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAaa,kCAAA,CACd,UAAA,EAAY,iBAAA,EACZ,WAAA,EAAa,GAAA,CAAI,cAAA,YACjB,WAAA,EAAa,GAAA,CAAI,cAAA;AAAA,iBAkBH,mCAAA,CACd,UAAA,EAAY,iBAAA,EACZ,OAAA,EAAS,GAAA,CAAI,cAAA;AAAA,iBAQC,mCAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBAYR,4BAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBASR,qBAAA,CACd,MAAA,EAAQ,cAAA,WACR,YAAA,GAAe,iBAAiB"}