@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
package/README.md CHANGED
@@ -1,187 +1,95 @@
1
1
  # Askr
2
2
 
3
- Deterministic UI runtime with runtime enforcement.
3
+ Askr is an actor-backed UI runtime for TypeScript applications.
4
+ It provides explicit reactivity, routed application startup, server-side rendering,
5
+ and static-site generation entrypoints.
4
6
 
5
7
  ## Quick Start
6
8
 
7
- ```typescript
9
+ ```ts
8
10
  import { createIsland, state } from '@askrjs/askr';
9
11
 
10
12
  function Counter() {
11
13
  const [count, setCount] = state(0);
12
- return <button onClick={() => setCount(count() + 1)}>{count()}</button>;
13
- }
14
-
15
- createIsland({ root: document.body, component: Counter });
16
- ```
17
-
18
- ---
19
-
20
- ## Core Features
21
-
22
- ### Runtime Enforcement
23
-
24
- Askr validates component structure as it runs, catching mistakes with clear error messages.
25
-
26
- ```typescript
27
- // This error is caught immediately:
28
- if (condition) {
29
- const [x, setX] = state(0); // ❌ Hook order violation
30
- }
31
-
32
- // Error shows the fix:
33
- const [x, setX] = state(0);
34
- if (condition) {
35
- setX(newValue); // ✅ Correct
36
- }
37
- ```
38
14
 
39
- ### Deterministic Execution
40
-
41
- Events serialize through a scheduler. State updates are atomic. Renders follow strict ordering.
42
-
43
- ```typescript
44
- // Event 1 completes (handler + state + DOM)
45
- // Then Event 2 starts
46
- // No race conditions
47
- ```
48
-
49
- Proven with 133 tests covering:
50
-
51
- - Event ordering (12 tests)
52
- - State atomicity (12 tests)
53
- - Transaction semantics (30 tests)
54
-
55
- ### Automatic Cleanup
56
-
57
- Every component gets an AbortSignal for automatic cancellation.
58
-
59
- ```typescript
60
- import { resource, getSignal } from '@askrjs/askr/resources';
61
-
62
- function Data({ id }) {
63
- const data = resource(async () => {
64
- const res = await fetch(`/api/${id}`, { signal: getSignal() });
65
- return res.json();
66
- }, [id]);
67
-
68
- if (!data) return <div>Loading...</div>;
69
- return <div>{data.name}</div>;
15
+ return <button onClick={() => setCount((value) => value + 1)}>{count()}</button>;
70
16
  }
71
- // Async work is cancelled automatically on unmount/navigation
72
- ```
73
-
74
- ### Explicit Reactivity
75
17
 
76
- Getters and setters are functions. Call the getter to read and the setter to update — this makes reactivity explicit in your code.
77
-
78
- ```typescript
79
- const [count, setCount] = state(0);
80
- console.log(count()); // getter: read
81
- setCount(1); // setter: write
18
+ createIsland({ root: document.body, component: Counter });
82
19
  ```
83
20
 
84
- Clear data flow. No hidden subscriptions.
85
-
86
- ---
21
+ ## What It Provides
87
22
 
88
- ## API
23
+ ### Runtime
89
24
 
90
- ### State
25
+ `@askrjs/askr` exports the core runtime primitives: `state()`, `derive()`,
26
+ `selector()`, `resource()`, routing helpers, JSX control-flow helpers, and SSR/SSG
27
+ entrypoints.
91
28
 
92
- ```typescript
93
- const [value, setValue] = state(initialValue);
29
+ ### Explicit reactivity
94
30
 
95
- // Read
96
- value();
97
-
98
- // Write
99
- setValue(newValue);
100
-
101
- // Update
102
- setValue((prev) => prev + 1);
103
- ```
31
+ State is read through getter functions and updated through setter functions.
104
32
 
105
- ### Derived State
106
-
107
- ```typescript
33
+ ```ts
108
34
  const [count, setCount] = state(0);
109
- const doubled = derive(() => count() * 2);
110
-
111
- console.log(doubled()); // Automatically updates
35
+ console.log(count());
36
+ setCount(1);
112
37
  ```
113
38
 
114
- ### Lists
115
-
116
- ```typescript
117
- const [items, setItems] = state([...]);
39
+ ### Routing and app startup
118
40
 
119
- For(
120
- items,
121
- (item) => item.id,
122
- (item) => <Item {...item} />
123
- )
124
- ```
41
+ Startup belongs in `@askrjs/askr/boot`. Routing helpers live in
42
+ `@askrjs/askr/router`.
125
43
 
126
- ### Apps
44
+ ```ts
45
+ import { createIsland, createSPA } from '@askrjs/askr/boot';
46
+ import { getRoutes, route } from '@askrjs/askr/router';
127
47
 
128
- ```typescript
129
- // Single component
130
- createIsland({
131
- root: document.body,
132
- component: MyComponent,
133
- });
48
+ route('/', () => <Home />);
49
+ route('/about', () => <About />);
134
50
 
135
- // Routed app
136
51
  createSPA({
137
52
  root: document.body,
138
- component: Layout,
139
- routes: [
140
- { path: '/', component: Home },
141
- { path: '/about', component: About },
142
- ],
53
+ routes: getRoutes(),
143
54
  });
144
55
  ```
145
56
 
146
- ---
57
+ ### Async resources
147
58
 
148
- ## Documentation
149
-
150
- - [Getting Started](docs/getting-started.md)
151
- - [State Management](docs/state.md)
152
- - [Runtime Enforcement](docs/enforcement.md)
153
- - [Deterministic Execution](docs/determinism.md)
154
- - [API Reference](docs/api.md)
155
-
156
- ---
157
-
158
- ## Guarantees
159
-
160
- Askr provides provable guarantees, tested with 133 tests:
161
-
162
- - Hook order enforcement (12 tests)
163
- - Event serialization (12 tests)
164
- - Atomic transactions (30 tests)
165
- - Keyed reconciliation (12 tests)
166
- - Memory safety (8 tests)
59
+ `resource()` manages async work with cancellation support.
167
60
 
168
- [See test suite →](tests/README.md)
61
+ ```ts
62
+ import { resource } from '@askrjs/askr/resources';
169
63
 
170
- ---
171
-
172
- ## Migration
173
-
174
- ### Coming from React
64
+ function Data({ id }: { id: string }) {
65
+ const data = resource(async ({ signal }) => {
66
+ const response = await fetch(`/api/${id}`, { signal });
67
+ return response.json();
68
+ }, [id]);
175
69
 
176
- | React | Askr |
177
- | ------------------------------- | ---------------------------- |
178
- | `const [x, setX] = useState(0)` | `const [x, setX] = state(0)` |
179
- | `x` | `x()` |
180
- | `setX(1)` | `setX(1)` |
70
+ if (data.pending) return <div>Loading...</div>;
71
+ if (data.error) return <div>Failed to load</div>;
72
+ return <div>{data.value.name}</div>;
73
+ }
74
+ ```
181
75
 
182
- The main difference: values are functions that you call to read.
76
+ ## Documentation
183
77
 
184
- ---
78
+ - [Documentation Index](docs/index.md)
79
+ - [Installation](docs/getting-started/installation.md)
80
+ - [Quick Start](docs/getting-started/quick-start.md)
81
+ - [State Guide](docs/guides/state.md)
82
+ - [Router Guide](docs/guides/router.md)
83
+ - [Resources Guide](docs/guides/resources.md)
84
+ - [SSG Guide](docs/guides/ssg.md)
85
+ - [Runtime Enforcement](docs/concepts/runtime-enforcement.md)
86
+ - [Determinism](docs/concepts/determinism.md)
87
+ - [API Reference](docs/reference/api.md)
88
+
89
+ ## Release Notes
90
+
91
+ The published package is versioned with the repository `package.json`.
92
+ Release workflows validate the version tag before publishing.
185
93
 
186
94
  ## Install
187
95
 
@@ -0,0 +1,7 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
3
+ if (typeof require !== "undefined") return require.apply(this, arguments);
4
+ throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
5
+ });
6
+ //#endregion
7
+ export { __require };
@@ -0,0 +1,20 @@
1
+ //#region src/bench/components/benchmark-row.d.ts
2
+ interface BenchmarkRowData {
3
+ id: number;
4
+ label: string;
5
+ }
6
+ interface BenchmarkRowProps {
7
+ item: BenchmarkRowData;
8
+ isSelected: (id: number) => boolean;
9
+ onSelect: (id: number) => void;
10
+ onRemove: (id: number) => void;
11
+ }
12
+ declare function BenchmarkRow({
13
+ item,
14
+ isSelected,
15
+ onSelect,
16
+ onRemove
17
+ }: BenchmarkRowProps): JSX.Element;
18
+ //#endregion
19
+ export { BenchmarkRowData };
20
+ //# sourceMappingURL=benchmark-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-row.d.ts","names":[],"sources":["../../../src/bench/components/benchmark-row.tsx"],"mappings":";UAAiB,gBAAA;EACf,EAAA;EACA,KAAA;AAAA;AAAA,UAGQ,iBAAA;EACR,IAAA,EAAM,gBAAA;EACN,UAAA,GAAa,EAAA;EACb,QAAA,GAAW,EAAA;EACX,QAAA,GAAW,EAAA;AAAA;AAAA,iBAGG,YAAA,CAAA;EACd,IAAA;EACA,UAAA;EACA,QAAA;EACA;AAAA,GACC,iBAAA,GAAiB,GAAA,CAAA,OAAA"}
@@ -0,0 +1,42 @@
1
+ import { jsx, jsxs } from "../../jsx-runtime.js";
2
+ import "../../jsx-runtime2.js";
3
+ //#region src/bench/components/benchmark-row.tsx
4
+ function BenchmarkRow({ item, isSelected, onSelect, onRemove }) {
5
+ return /* @__PURE__ */ jsxs("tr", {
6
+ class: () => isSelected(item.id) ? "danger" : "",
7
+ children: [
8
+ /* @__PURE__ */ jsx("td", {
9
+ class: "col-md-1",
10
+ children: () => item.id
11
+ }, "id"),
12
+ /* @__PURE__ */ jsx("td", {
13
+ class: "col-md-4",
14
+ children: /* @__PURE__ */ jsx("a", {
15
+ onClick: (event) => {
16
+ event.preventDefault();
17
+ onSelect(item.id);
18
+ },
19
+ children: () => item.label
20
+ })
21
+ }, "label"),
22
+ /* @__PURE__ */ jsx("td", {
23
+ class: "col-md-1",
24
+ children: /* @__PURE__ */ jsx("a", {
25
+ onClick: (event) => {
26
+ event.preventDefault();
27
+ onRemove(item.id);
28
+ },
29
+ children: /* @__PURE__ */ jsx("span", {
30
+ class: "glyphicon glyphicon-remove",
31
+ "aria-hidden": "true"
32
+ })
33
+ })
34
+ }, "remove"),
35
+ /* @__PURE__ */ jsx("td", { class: "col-md-6" }, "spacer")
36
+ ]
37
+ });
38
+ }
39
+ //#endregion
40
+ export { BenchmarkRow };
41
+
42
+ //# sourceMappingURL=benchmark-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-row.js","names":[],"sources":["../../../src/bench/components/benchmark-row.tsx"],"sourcesContent":["export interface BenchmarkRowData {\n id: number;\n label: string;\n}\n\ninterface BenchmarkRowProps {\n item: BenchmarkRowData;\n isSelected: (id: number) => boolean;\n onSelect: (id: number) => void;\n onRemove: (id: number) => void;\n}\n\nexport function BenchmarkRow({\n item,\n isSelected,\n onSelect,\n onRemove,\n}: BenchmarkRowProps) {\n return (\n <tr class={() => (isSelected(item.id) ? 'danger' : '')}>\n <td key=\"id\" class=\"col-md-1\">\n {() => item.id}\n </td>\n <td key=\"label\" class=\"col-md-4\">\n <a\n onClick={(event: MouseEvent) => {\n event.preventDefault();\n onSelect(item.id);\n }}\n >\n {() => item.label}\n </a>\n </td>\n <td key=\"remove\" class=\"col-md-1\">\n <a\n onClick={(event: MouseEvent) => {\n event.preventDefault();\n onRemove(item.id);\n }}\n >\n <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\" />\n </a>\n </td>\n <td key=\"spacer\" class=\"col-md-6\" />\n </tr>\n );\n}\n"],"mappings":";;;AAYA,SAAgB,aAAa,EAC3B,MACA,YACA,UACA,YACoB;AACpB,QACE,qBAAC,MAAD;EAAI,aAAc,WAAW,KAAK,GAAG,GAAG,WAAW;YAAnD;GACE,oBAAC,MAAD;IAAa,OAAM;oBACV,KAAK;IACT,EAFG,KAEH;GACL,oBAAC,MAAD;IAAgB,OAAM;cACpB,oBAAC,KAAD;KACE,UAAU,UAAsB;AAC9B,YAAM,gBAAgB;AACtB,eAAS,KAAK,GAAG;;qBAGZ,KAAK;KACV,CAAA;IACD,EATG,QASH;GACL,oBAAC,MAAD;IAAiB,OAAM;cACrB,oBAAC,KAAD;KACE,UAAU,UAAsB;AAC9B,YAAM,gBAAgB;AACtB,eAAS,KAAK,GAAG;;eAGnB,oBAAC,QAAD;MAAM,OAAM;MAA6B,eAAY;MAAS,CAAA;KAC5D,CAAA;IACD,EATG,SASH;GACL,oBAAC,MAAD,EAAiB,OAAM,YAAa,EAA5B,SAA4B;GACjC"}
@@ -0,0 +1,25 @@
1
+ import { jsx } from "../../jsx-runtime.js";
2
+ import "../../jsx-runtime2.js";
3
+ import { For } from "../../control/for.js";
4
+ import "../../index.js";
5
+ import { BenchmarkRow } from "./benchmark-row.js";
6
+ //#region src/bench/components/benchmark-table.tsx
7
+ function BenchmarkTable({ rows, isSelected, onSelect, onRemove }) {
8
+ return /* @__PURE__ */ jsx("table", {
9
+ class: "table table-hover table-striped test-data",
10
+ children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsx(For, {
11
+ each: () => rows(),
12
+ by: (item) => item.id,
13
+ children: (item) => /* @__PURE__ */ jsx(BenchmarkRow, {
14
+ item,
15
+ isSelected,
16
+ onSelect,
17
+ onRemove
18
+ })
19
+ }) })
20
+ });
21
+ }
22
+ //#endregion
23
+ export { BenchmarkTable };
24
+
25
+ //# sourceMappingURL=benchmark-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-table.js","names":[],"sources":["../../../src/bench/components/benchmark-table.tsx"],"sourcesContent":["import { For, type State } from '../../index';\nimport { BenchmarkRow, type BenchmarkRowData } from './benchmark-row';\n\ninterface BenchmarkTableProps {\n rows: State<BenchmarkRowData[]>;\n isSelected: (id: number) => boolean;\n onSelect: (id: number) => void;\n onRemove: (id: number) => void;\n}\n\nexport function BenchmarkTable({\n rows,\n isSelected,\n onSelect,\n onRemove,\n}: BenchmarkTableProps) {\n return (\n <table class=\"table table-hover table-striped test-data\">\n <tbody>\n {\n <For each={() => rows()} by={(item) => item.id}>\n {(item) => (\n <BenchmarkRow\n item={item}\n isSelected={isSelected}\n onSelect={onSelect}\n onRemove={onRemove}\n />\n )}\n </For>\n }\n </tbody>\n </table>\n );\n}\n"],"mappings":";;;;;;AAUA,SAAgB,eAAe,EAC7B,MACA,YACA,UACA,YACsB;AACtB,QACE,oBAAC,SAAD;EAAO,OAAM;YACX,oBAAC,SAAD,EAAA,UAEI,oBAAC,KAAD;GAAK,YAAY,MAAM;GAAE,KAAK,SAAS,KAAK;cACxC,SACA,oBAAC,cAAD;IACQ;IACM;IACF;IACA;IACV,CAAA;GAEA,CAAA,EAEF,CAAA;EACF,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { BenchmarkRowData } from "./bench/components/benchmark-row.js";
2
+
3
+ //#region src/bench/benchmark-entry.d.ts
4
+ type RowData = BenchmarkRowData;
5
+ interface BenchmarkMetadata {
6
+ packageName: string;
7
+ packageVersion: string;
8
+ buildLabel: string;
9
+ }
10
+ declare const benchmarkMetadata: BenchmarkMetadata;
11
+ declare function getBenchmarkMetadata(): BenchmarkMetadata;
12
+ declare function mountBenchmark(root: Element, initialRows?: RowData[]): {
13
+ setRows(rows: RowData[]): void;
14
+ setSelected(id: number | null): void;
15
+ cleanup(): void;
16
+ };
17
+ declare const _default: {
18
+ mountBenchmark: typeof mountBenchmark;
19
+ };
20
+ //#endregion
21
+ export { BenchmarkMetadata, benchmarkMetadata, _default as default, getBenchmarkMetadata, mountBenchmark };
22
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","names":[],"sources":["../src/bench/benchmark-entry.tsx"],"mappings":";;;KAWK,OAAA,GAAU,gBAAA;AAAA,UAEE,iBAAA;EACf,WAAA;EACA,cAAA;EACA,UAAA;AAAA;AAAA,cAYW,iBAAA,EAAmB,iBAAA;AAAA,iBAOhB,oBAAA,CAAA,GAAwB,iBAAA;AAAA,iBAIxB,cAAA,CAAe,IAAA,EAAM,OAAA,EAAS,WAAA,GAAc,OAAA;gBAmC1C,OAAA;;;;cAcjB,QAAA"}
package/dist/benchmark.js CHANGED
@@ -1 +1,64 @@
1
- import"./index.js";import"./for/index.js";import{globalScheduler as n}from"./runtime/scheduler.js";import{state as s}from"./runtime/state.js";import{For as a}from"./for/for.js";import{createIsland as i}from"./boot/index.js";function h(c,o){const l=Array.isArray(o)?o:[];let t,p;return i({root:c,component:()=>{t=s([]),p=s(null);const r=e=>p.set(e);return{type:"div",props:{},children:[{type:"table",props:{},children:[{type:"tbody",props:{},children:[a(()=>t(),e=>e.id,e=>({type:"tr",props:{class:()=>p()===e.id?"danger":""},children:[{type:"td",props:{},children:[String(e.id)]},{type:"td",props:{},children:[{type:"a",props:{onClick:d=>{d.preventDefault(),r(e.id)}},children:[e.label]}]}]}))]}]}]}}}),l.length>0&&t&&t.set(l),{setRows(r){t.set(r),n.flush()},setSelected(r){p.set(r),n.flush()},cleanup(){}}}const A={mountBenchmark:h};export{A as default,h as mountBenchmark};
1
+ import { globalScheduler } from "./runtime/scheduler.js";
2
+ import { jsx } from "./jsx-runtime.js";
3
+ import { installRendererBridge } from "./renderer/index.js";
4
+ import { state } from "./runtime/state.js";
5
+ import { selector } from "./runtime/selector.js";
6
+ import { createIsland } from "./boot/index.js";
7
+ import "./jsx-runtime2.js";
8
+ import { BenchmarkTable } from "./bench/components/benchmark-table.js";
9
+ //#region src/bench/benchmark-entry.tsx
10
+ installRendererBridge();
11
+ const benchmarkMetadata = {
12
+ packageName: "@askrjs/askr",
13
+ packageVersion: "0.0.29",
14
+ buildLabel: "0.0.29-local"
15
+ };
16
+ function getBenchmarkMetadata() {
17
+ return { ...benchmarkMetadata };
18
+ }
19
+ function mountBenchmark(root, initialRows) {
20
+ const initialRowsTyped = Array.isArray(initialRows) ? initialRows : [];
21
+ let dataState;
22
+ let selectedState;
23
+ const App = () => {
24
+ dataState = state(initialRowsTyped);
25
+ selectedState = state(null);
26
+ dataState._hasBeenRead = true;
27
+ const isSelected = selector(selectedState);
28
+ const select = (id) => selectedState.set(id);
29
+ const remove = (id) => {
30
+ dataState.set((rows) => rows.filter((item) => item.id !== id));
31
+ selectedState.set((selected) => selected === id ? null : selected);
32
+ };
33
+ return /* @__PURE__ */ jsx("div", {
34
+ class: "container",
35
+ children: /* @__PURE__ */ jsx(BenchmarkTable, {
36
+ rows: dataState,
37
+ isSelected,
38
+ onSelect: select,
39
+ onRemove: remove
40
+ })
41
+ });
42
+ };
43
+ createIsland({
44
+ root,
45
+ component: App
46
+ });
47
+ globalScheduler.flush();
48
+ return {
49
+ setRows(rows) {
50
+ dataState.set(rows);
51
+ globalScheduler.flush();
52
+ },
53
+ setSelected(id) {
54
+ selectedState.set(id);
55
+ globalScheduler.flush();
56
+ },
57
+ cleanup() {}
58
+ };
59
+ }
60
+ var benchmark_entry_default = { mountBenchmark };
61
+ //#endregion
62
+ export { benchmarkMetadata, benchmark_entry_default as default, getBenchmarkMetadata, mountBenchmark };
63
+
64
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","names":[],"sources":["../src/bench/benchmark-entry.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createIsland } from '../boot';\nimport { installRendererBridge } from '../renderer';\nimport { selector } from '../runtime/selector';\nimport { state, State } from '../runtime/state';\nimport { globalScheduler } from '../runtime/scheduler';\nimport { BenchmarkTable } from './components/benchmark-table';\nimport type { BenchmarkRowData } from './components/benchmark-row';\n\ninstallRendererBridge();\n\ntype RowData = BenchmarkRowData;\n\nexport interface BenchmarkMetadata {\n packageName: string;\n packageVersion: string;\n buildLabel: string;\n}\n\nconst packageName =\n process.env.ASKR_PACKAGE_NAME ||\n process.env.npm_package_name ||\n '@askrjs/askr';\nconst packageVersion =\n process.env.ASKR_PACKAGE_VERSION ||\n process.env.npm_package_version ||\n '0.0.0';\n\nexport const benchmarkMetadata: BenchmarkMetadata = {\n packageName,\n packageVersion,\n buildLabel:\n process.env.ASKR_BENCHMARK_BUILD_LABEL || `${packageVersion}-local`,\n};\n\nexport function getBenchmarkMetadata(): BenchmarkMetadata {\n return { ...benchmarkMetadata };\n}\n\nexport function mountBenchmark(root: Element, initialRows?: RowData[]) {\n const initialRowsTyped: RowData[] = Array.isArray(initialRows)\n ? initialRows\n : [];\n let dataState!: State<RowData[]>;\n let selectedState!: State<number | null>;\n\n const App = () => {\n dataState = state<RowData[]>(initialRowsTyped);\n selectedState = state<number | null>(null);\n dataState._hasBeenRead = true;\n const isSelected = selector(selectedState);\n\n const select = (id: number) => selectedState.set(id);\n const remove = (id: number) => {\n dataState.set((rows) => rows.filter((item) => item.id !== id));\n selectedState.set((selected) => (selected === id ? null : selected));\n };\n\n return (\n <div class=\"container\">\n <BenchmarkTable\n rows={dataState}\n isSelected={isSelected}\n onSelect={select}\n onRemove={remove}\n />\n </div>\n );\n };\n\n createIsland({ root, component: App as any });\n globalScheduler.flush();\n\n return {\n setRows(rows: RowData[]) {\n dataState.set(rows);\n // Ensure work is flushed so external harnesses (like JFB) that check the DOM\n // immediately after calling `setRows` observe the committed DOM.\n globalScheduler.flush();\n },\n setSelected(id: number | null) {\n selectedState.set(id);\n globalScheduler.flush();\n },\n cleanup() {\n // nothing to do; outer test may clean the container\n },\n };\n}\n\nexport default { mountBenchmark };\n"],"mappings":";;;;;;;;;AASA,uBAAuB;AAmBvB,MAAa,oBAAuC;CAClD;CACA;CACA,YAAA;CAED;AAED,SAAgB,uBAA0C;AACxD,QAAO,EAAE,GAAG,mBAAmB;;AAGjC,SAAgB,eAAe,MAAe,aAAyB;CACrE,MAAM,mBAA8B,MAAM,QAAQ,YAAY,GAC1D,cACA,EAAE;CACN,IAAI;CACJ,IAAI;CAEJ,MAAM,YAAY;AAChB,cAAY,MAAiB,iBAAiB;AAC9C,kBAAgB,MAAqB,KAAK;AAC1C,YAAU,eAAe;EACzB,MAAM,aAAa,SAAS,cAAc;EAE1C,MAAM,UAAU,OAAe,cAAc,IAAI,GAAG;EACpD,MAAM,UAAU,OAAe;AAC7B,aAAU,KAAK,SAAS,KAAK,QAAQ,SAAS,KAAK,OAAO,GAAG,CAAC;AAC9D,iBAAc,KAAK,aAAc,aAAa,KAAK,OAAO,SAAU;;AAGtE,SACE,oBAAC,OAAD;GAAK,OAAM;aACT,oBAAC,gBAAD;IACE,MAAM;IACM;IACZ,UAAU;IACV,UAAU;IACV,CAAA;GACE,CAAA;;AAIV,cAAa;EAAE;EAAM,WAAW;EAAY,CAAC;AAC7C,iBAAgB,OAAO;AAEvB,QAAO;EACL,QAAQ,MAAiB;AACvB,aAAU,IAAI,KAAK;AAGnB,mBAAgB,OAAO;;EAEzB,YAAY,IAAmB;AAC7B,iBAAc,IAAI,GAAG;AACrB,mBAAgB,OAAO;;EAEzB,UAAU;EAGX;;AAGH,IAAA,0BAAe,EAAE,gBAAgB"}
@@ -0,0 +1,28 @@
1
+ import { createStaticGen } from "../ssg/create-static-gen.js";
2
+ //#region src/bin/askr-ssg.d.ts
3
+ interface ParsedCliArgs {
4
+ configPath: string;
5
+ outputDir: string;
6
+ workers: number | 'auto';
7
+ incremental: boolean;
8
+ changedKeys: string[];
9
+ changedRoutes: string[];
10
+ forceFull: boolean;
11
+ help: boolean;
12
+ }
13
+ interface CliIo {
14
+ log: (...args: unknown[]) => void;
15
+ error: (...args: unknown[]) => void;
16
+ }
17
+ interface CliDeps {
18
+ cwd: () => string;
19
+ now: () => number;
20
+ existsSync: (path: string) => boolean;
21
+ importConfig: (path: string) => Promise<Record<string, unknown>>;
22
+ createStaticGen: typeof createStaticGen;
23
+ }
24
+ declare function parseCliArgs(args: string[]): ParsedCliArgs;
25
+ declare function runCli(args: string[], deps?: Partial<CliDeps>, io?: CliIo): Promise<number>;
26
+ //#endregion
27
+ export { ParsedCliArgs, parseCliArgs, runCli };
28
+ //# sourceMappingURL=askr-ssg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askr-ssg.d.ts","names":[],"sources":["../../src/bin/askr-ssg.ts"],"mappings":";;UAuBiB,aAAA;EACf,UAAA;EACA,SAAA;EACA,OAAA;EACA,WAAA;EACA,WAAA;EACA,aAAA;EACA,SAAA;EACA,IAAA;AAAA;AAAA,UAGQ,KAAA;EACR,GAAA,MAAS,IAAA;EACT,KAAA,MAAW,IAAA;AAAA;AAAA,UAGH,OAAA;EACR,GAAA;EACA,GAAA;EACA,UAAA,GAAa,IAAA;EACb,YAAA,GAAe,IAAA,aAAiB,OAAA,CAAQ,MAAA;EACxC,eAAA,SAAwB,eAAA;AAAA;AAAA,iBA2CV,YAAA,CAAa,IAAA,aAAiB,aAAA;AAAA,iBAqExB,MAAA,CACpB,IAAA,YACA,IAAA,GAAM,OAAA,CAAQ,OAAA,GACd,EAAA,GAAI,KAAA,GACH,OAAA"}
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env node
2
+ import { createStaticGen } from "../ssg/create-static-gen.js";
3
+ import "../ssg/index.js";
4
+ import * as pathModule from "path";
5
+ import * as fsModule from "fs";
6
+ //#region src/bin/askr-ssg.ts
7
+ /**
8
+ * askr-ssg CLI
9
+ *
10
+ * Usage: askr-ssg --config path/to/config.ts --output dist/static
11
+ */
12
+ const { resolve } = pathModule;
13
+ const { existsSync } = fsModule;
14
+ function toFileUrl(filePath) {
15
+ const normalized = resolve(filePath).replace(/\\/g, "/");
16
+ return `file://${normalized.startsWith("/") ? "" : "/"}${encodeURI(normalized)}`;
17
+ }
18
+ const defaultCliDeps = {
19
+ cwd: () => process.cwd(),
20
+ now: () => performance.now(),
21
+ existsSync,
22
+ importConfig: async (path) => await import(toFileUrl(path)),
23
+ createStaticGen
24
+ };
25
+ const helpText = `
26
+ askr-ssg - Static Site Generation for Askr
27
+
28
+ Usage:
29
+ askr-ssg --config <path> --output <dir> [--incremental]
30
+
31
+ Options:
32
+ --config <path> Path to SSG config file (TypeScript module)
33
+ --output <dir> Output directory for generated HTML
34
+ --workers <n|auto> Preferred render worker count for SSG throughput
35
+ --incremental Use incremental generation if a manifest exists
36
+ --changed-key <key> Mark an invalidation key as changed (repeatable)
37
+ --changed-route <path> Mark a concrete route path as changed (repeatable)
38
+ --force-full Force a full rebuild even with incremental flags
39
+ --help Show this help message
40
+
41
+ Example:
42
+ askr-ssg --config ./ssg.config.ts --output ./dist/static --incremental --changed-key blog/post-123
43
+
44
+ TypeScript config execution:
45
+ Use tsx to run the CLI with TS config loading:
46
+ tsx node_modules/@askrjs/askr/dist/bin/askr-ssg.js --config ./ssg.config.ts --output ./dist/static
47
+ `;
48
+ function parseCliArgs(args) {
49
+ const parsed = {
50
+ configPath: "",
51
+ outputDir: "",
52
+ workers: 1,
53
+ incremental: false,
54
+ changedKeys: [],
55
+ changedRoutes: [],
56
+ forceFull: false,
57
+ help: false
58
+ };
59
+ for (let i = 0; i < args.length; i++) if (args[i] === "--config" && i + 1 < args.length) {
60
+ parsed.configPath = args[i + 1];
61
+ i++;
62
+ } else if (args[i] === "--output" && i + 1 < args.length) {
63
+ parsed.outputDir = args[i + 1];
64
+ i++;
65
+ } else if (args[i] === "--workers" && i + 1 < args.length) {
66
+ parsed.workers = args[i + 1] === "auto" ? "auto" : Number(args[i + 1]);
67
+ i++;
68
+ } else if (args[i] === "--changed-key" && i + 1 < args.length) {
69
+ parsed.changedKeys.push(args[i + 1]);
70
+ i++;
71
+ } else if (args[i] === "--changed-route" && i + 1 < args.length) {
72
+ parsed.changedRoutes.push(args[i + 1]);
73
+ i++;
74
+ } else if (args[i] === "--incremental") parsed.incremental = true;
75
+ else if (args[i] === "--force-full") parsed.forceFull = true;
76
+ else if (args[i] === "--help" || args[i] === "-h") parsed.help = true;
77
+ return parsed;
78
+ }
79
+ function toGenerateOptions(args) {
80
+ return {
81
+ mode: args.incremental ? "incremental" : "full",
82
+ changedKeys: args.changedKeys,
83
+ changedRoutes: args.changedRoutes,
84
+ forceFull: args.forceFull
85
+ };
86
+ }
87
+ function printSummary(io, outputDir, durationSeconds, result) {
88
+ io.log("");
89
+ io.log(`Generation complete in ${durationSeconds}s`);
90
+ io.log(` Mode: ${result.mode}`);
91
+ io.log(` Generated: ${result.successful}/${result.totalRoutes} routes`);
92
+ io.log(` Failed: ${result.failed} routes`);
93
+ io.log(` Rebuilt: ${result.rebuilt} routes`);
94
+ io.log(` Skipped: ${result.skipped} routes`);
95
+ io.log(` Removed: ${result.removed} routes`);
96
+ io.log(` CacheHit: ${result.cacheHits} routes`);
97
+ io.log(` Output: ${outputDir}`);
98
+ io.log(` Metadata: ${outputDir}/metadata.json`);
99
+ io.log("");
100
+ }
101
+ async function runCli(args, deps = {}, io = console) {
102
+ const parsed = parseCliArgs(args);
103
+ if (parsed.help) {
104
+ io.log(helpText);
105
+ return 0;
106
+ }
107
+ if (!parsed.configPath) {
108
+ io.error("Error: --config argument is required");
109
+ return 1;
110
+ }
111
+ if (!parsed.configPath.endsWith(".ts")) {
112
+ io.error("Error: --config must point to a TypeScript file (.ts)");
113
+ return 1;
114
+ }
115
+ if (!parsed.outputDir) {
116
+ io.error("Error: --output argument is required");
117
+ return 1;
118
+ }
119
+ const resolvedDeps = {
120
+ ...defaultCliDeps,
121
+ ...deps
122
+ };
123
+ const resolvedConfigPath = resolve(resolvedDeps.cwd(), parsed.configPath);
124
+ const resolvedOutputDir = resolve(resolvedDeps.cwd(), parsed.outputDir);
125
+ if (!resolvedDeps.existsSync(resolvedConfigPath)) {
126
+ io.error(`Error: Config file not found: ${resolvedConfigPath}`);
127
+ return 1;
128
+ }
129
+ try {
130
+ io.log(`Loading config: ${resolvedConfigPath}`);
131
+ const configModule = await resolvedDeps.importConfig(resolvedConfigPath);
132
+ const config = configModule.default || configModule;
133
+ if (!Array.isArray(config.routes)) {
134
+ io.error("Error: Config must export routes array");
135
+ return 1;
136
+ }
137
+ io.log(`Generating ${config.routes.length} routes...`);
138
+ const ssg = resolvedDeps.createStaticGen({
139
+ routes: config.routes,
140
+ outputDir: resolvedOutputDir,
141
+ seed: config.seed,
142
+ dataOverrides: config.dataOverrides,
143
+ concurrency: config.concurrency,
144
+ parallelism: parsed.workers
145
+ });
146
+ const startTime = resolvedDeps.now();
147
+ const result = await ssg.generate(toGenerateOptions(parsed));
148
+ printSummary(io, resolvedOutputDir, ((resolvedDeps.now() - startTime) / 1e3).toFixed(2), result);
149
+ if (result.failed > 0) {
150
+ io.log("Errors encountered:");
151
+ for (const route of result.routes) if (route.status === "error") io.log(` ${route.path}: ${route.error}`);
152
+ io.log("");
153
+ return 1;
154
+ }
155
+ return 0;
156
+ } catch (error) {
157
+ io.error("Generation failed:");
158
+ io.error(error instanceof Error ? error.message : String(error));
159
+ if (error instanceof Error && error.stack) io.error(error.stack);
160
+ return 1;
161
+ }
162
+ }
163
+ async function main() {
164
+ const exitCode = await runCli(process.argv.slice(2));
165
+ process.exit(exitCode);
166
+ }
167
+ if (process.argv[1] && import.meta.url === toFileUrl(process.argv[1])) main();
168
+ //#endregion
169
+ export { parseCliArgs, runCli };
170
+
171
+ //# sourceMappingURL=askr-ssg.js.map