@bquery/bquery 1.6.0 → 1.8.1

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 (402) hide show
  1. package/README.md +192 -18
  2. package/dist/a11y/announce.d.ts +43 -0
  3. package/dist/a11y/announce.d.ts.map +1 -0
  4. package/dist/a11y/audit.d.ts +42 -0
  5. package/dist/a11y/audit.d.ts.map +1 -0
  6. package/dist/a11y/index.d.ts +53 -0
  7. package/dist/a11y/index.d.ts.map +1 -0
  8. package/dist/a11y/media-preferences.d.ts +77 -0
  9. package/dist/a11y/media-preferences.d.ts.map +1 -0
  10. package/dist/a11y/roving-tab-index.d.ts +38 -0
  11. package/dist/a11y/roving-tab-index.d.ts.map +1 -0
  12. package/dist/a11y/skip-link.d.ts +37 -0
  13. package/dist/a11y/skip-link.d.ts.map +1 -0
  14. package/dist/a11y/trap-focus.d.ts +49 -0
  15. package/dist/a11y/trap-focus.d.ts.map +1 -0
  16. package/dist/a11y/types.d.ts +152 -0
  17. package/dist/a11y/types.d.ts.map +1 -0
  18. package/dist/a11y-DVBCy09c.js +421 -0
  19. package/dist/a11y-DVBCy09c.js.map +1 -0
  20. package/dist/a11y.es.mjs +14 -0
  21. package/dist/component/component.d.ts.map +1 -1
  22. package/dist/component/html.d.ts.map +1 -1
  23. package/dist/component/index.d.ts +2 -1
  24. package/dist/component/index.d.ts.map +1 -1
  25. package/dist/component/library.d.ts.map +1 -1
  26. package/dist/component/scope.d.ts +138 -0
  27. package/dist/component/scope.d.ts.map +1 -0
  28. package/dist/component/types.d.ts +53 -1
  29. package/dist/component/types.d.ts.map +1 -1
  30. package/dist/component-L3-JfOFz.js +684 -0
  31. package/dist/component-L3-JfOFz.js.map +1 -0
  32. package/dist/component.es.mjs +9 -6
  33. package/dist/{config-DRmZZno3.js → config-DhT9auRm.js} +4 -4
  34. package/dist/{config-DRmZZno3.js.map → config-DhT9auRm.js.map} +1 -1
  35. package/dist/constraints-D5RHQLmP.js +100 -0
  36. package/dist/constraints-D5RHQLmP.js.map +1 -0
  37. package/dist/core/collection.d.ts +134 -0
  38. package/dist/core/collection.d.ts.map +1 -1
  39. package/dist/core/element.d.ts +120 -0
  40. package/dist/core/element.d.ts.map +1 -1
  41. package/dist/core/env.d.ts +18 -0
  42. package/dist/core/env.d.ts.map +1 -0
  43. package/dist/core/index.d.ts +1 -0
  44. package/dist/core/index.d.ts.map +1 -1
  45. package/dist/core/shared.d.ts +14 -0
  46. package/dist/core/shared.d.ts.map +1 -1
  47. package/dist/core/utils/index.d.ts +52 -41
  48. package/dist/core/utils/index.d.ts.map +1 -1
  49. package/dist/core-DdtZHzsS.js +168 -0
  50. package/dist/core-DdtZHzsS.js.map +1 -0
  51. package/dist/{core-CCEabVHl.js → core-EMYSLzaT.js} +293 -194
  52. package/dist/core-EMYSLzaT.js.map +1 -0
  53. package/dist/core.es.mjs +48 -46
  54. package/dist/custom-directives-Dr4C5lVV.js +9 -0
  55. package/dist/custom-directives-Dr4C5lVV.js.map +1 -0
  56. package/dist/devtools/devtools.d.ts +212 -0
  57. package/dist/devtools/devtools.d.ts.map +1 -0
  58. package/dist/devtools/index.d.ts +20 -0
  59. package/dist/devtools/index.d.ts.map +1 -0
  60. package/dist/devtools/types.d.ts +69 -0
  61. package/dist/devtools/types.d.ts.map +1 -0
  62. package/dist/devtools-BhB2iDPT.js +122 -0
  63. package/dist/devtools-BhB2iDPT.js.map +1 -0
  64. package/dist/devtools.es.mjs +19 -0
  65. package/dist/dnd/draggable.d.ts +51 -0
  66. package/dist/dnd/draggable.d.ts.map +1 -0
  67. package/dist/dnd/droppable.d.ts +38 -0
  68. package/dist/dnd/droppable.d.ts.map +1 -0
  69. package/dist/dnd/index.d.ts +47 -0
  70. package/dist/dnd/index.d.ts.map +1 -0
  71. package/dist/dnd/sortable.d.ts +43 -0
  72. package/dist/dnd/sortable.d.ts.map +1 -0
  73. package/dist/dnd/types.d.ts +250 -0
  74. package/dist/dnd/types.d.ts.map +1 -0
  75. package/dist/dnd-NwZBYh4l.js +244 -0
  76. package/dist/dnd-NwZBYh4l.js.map +1 -0
  77. package/dist/dnd.es.mjs +6 -0
  78. package/dist/env-CTdvLaH2.js +19 -0
  79. package/dist/env-CTdvLaH2.js.map +1 -0
  80. package/dist/forms/create-form.d.ts +49 -0
  81. package/dist/forms/create-form.d.ts.map +1 -0
  82. package/dist/forms/index.d.ts +40 -0
  83. package/dist/forms/index.d.ts.map +1 -0
  84. package/dist/forms/types.d.ts +185 -0
  85. package/dist/forms/types.d.ts.map +1 -0
  86. package/dist/forms/use-field.d.ts +34 -0
  87. package/dist/forms/use-field.d.ts.map +1 -0
  88. package/dist/forms/validators.d.ts +204 -0
  89. package/dist/forms/validators.d.ts.map +1 -0
  90. package/dist/forms-UcRHsYxC.js +227 -0
  91. package/dist/forms-UcRHsYxC.js.map +1 -0
  92. package/dist/forms.es.mjs +16 -0
  93. package/dist/full.d.ts +30 -11
  94. package/dist/full.d.ts.map +1 -1
  95. package/dist/full.es.mjs +209 -93
  96. package/dist/full.iife.js +47 -31
  97. package/dist/full.iife.js.map +1 -1
  98. package/dist/full.umd.js +47 -31
  99. package/dist/full.umd.js.map +1 -1
  100. package/dist/function-Cybd57JV.js +33 -0
  101. package/dist/function-Cybd57JV.js.map +1 -0
  102. package/dist/i18n/formatting.d.ts +40 -0
  103. package/dist/i18n/formatting.d.ts.map +1 -0
  104. package/dist/i18n/i18n.d.ts +48 -0
  105. package/dist/i18n/i18n.d.ts.map +1 -0
  106. package/dist/i18n/index.d.ts +57 -0
  107. package/dist/i18n/index.d.ts.map +1 -0
  108. package/dist/i18n/translate.d.ts +83 -0
  109. package/dist/i18n/translate.d.ts.map +1 -0
  110. package/dist/i18n/types.d.ts +156 -0
  111. package/dist/i18n/types.d.ts.map +1 -0
  112. package/dist/i18n-kuF6Ekj6.js +89 -0
  113. package/dist/i18n-kuF6Ekj6.js.map +1 -0
  114. package/dist/i18n.es.mjs +6 -0
  115. package/dist/index.d.ts +11 -0
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.es.mjs +257 -143
  118. package/dist/media/battery.d.ts +35 -0
  119. package/dist/media/battery.d.ts.map +1 -0
  120. package/dist/media/breakpoints.d.ts +51 -0
  121. package/dist/media/breakpoints.d.ts.map +1 -0
  122. package/dist/media/clipboard.d.ts +30 -0
  123. package/dist/media/clipboard.d.ts.map +1 -0
  124. package/dist/media/device-sensors.d.ts +54 -0
  125. package/dist/media/device-sensors.d.ts.map +1 -0
  126. package/dist/media/geolocation.d.ts +38 -0
  127. package/dist/media/geolocation.d.ts.map +1 -0
  128. package/dist/media/index.d.ts +42 -0
  129. package/dist/media/index.d.ts.map +1 -0
  130. package/dist/media/media-query.d.ts +36 -0
  131. package/dist/media/media-query.d.ts.map +1 -0
  132. package/dist/media/network.d.ts +35 -0
  133. package/dist/media/network.d.ts.map +1 -0
  134. package/dist/media/types.d.ts +173 -0
  135. package/dist/media/types.d.ts.map +1 -0
  136. package/dist/media/viewport.d.ts +32 -0
  137. package/dist/media/viewport.d.ts.map +1 -0
  138. package/dist/media-i-fB5WxI.js +340 -0
  139. package/dist/media-i-fB5WxI.js.map +1 -0
  140. package/dist/media.es.mjs +12 -0
  141. package/dist/motion/index.d.ts +7 -3
  142. package/dist/motion/index.d.ts.map +1 -1
  143. package/dist/motion/morph.d.ts +27 -0
  144. package/dist/motion/morph.d.ts.map +1 -0
  145. package/dist/motion/parallax.d.ts +30 -0
  146. package/dist/motion/parallax.d.ts.map +1 -0
  147. package/dist/motion/reduced-motion.d.ts +36 -3
  148. package/dist/motion/reduced-motion.d.ts.map +1 -1
  149. package/dist/motion/types.d.ts +58 -0
  150. package/dist/motion/types.d.ts.map +1 -1
  151. package/dist/motion/typewriter.d.ts +31 -0
  152. package/dist/motion/typewriter.d.ts.map +1 -0
  153. package/dist/motion-BJsAuULb.js +530 -0
  154. package/dist/motion-BJsAuULb.js.map +1 -0
  155. package/dist/motion.es.mjs +27 -23
  156. package/dist/{view-C70lA3vf.js → mount-B4Y8bk8Z.js} +166 -160
  157. package/dist/mount-B4Y8bk8Z.js.map +1 -0
  158. package/dist/{object-qGpWr6-J.js → object-BCk-1c8T.js} +5 -4
  159. package/dist/{object-qGpWr6-J.js.map → object-BCk-1c8T.js.map} +1 -1
  160. package/dist/{platform-Dr9b6fsq.js → platform-Dw2gE3zI.js} +21 -22
  161. package/dist/{platform-Dr9b6fsq.js.map → platform-Dw2gE3zI.js.map} +1 -1
  162. package/dist/platform.es.mjs +2 -2
  163. package/dist/plugin/index.d.ts +22 -0
  164. package/dist/plugin/index.d.ts.map +1 -0
  165. package/dist/plugin/registry.d.ts +108 -0
  166. package/dist/plugin/registry.d.ts.map +1 -0
  167. package/dist/plugin/types.d.ts +110 -0
  168. package/dist/plugin/types.d.ts.map +1 -0
  169. package/dist/plugin-C2WuC8SF.js +66 -0
  170. package/dist/plugin-C2WuC8SF.js.map +1 -0
  171. package/dist/plugin.es.mjs +9 -0
  172. package/dist/reactive/async-data.d.ts +28 -3
  173. package/dist/reactive/async-data.d.ts.map +1 -1
  174. package/dist/reactive/computed.d.ts +10 -0
  175. package/dist/reactive/computed.d.ts.map +1 -1
  176. package/dist/reactive/effect.d.ts +3 -0
  177. package/dist/reactive/effect.d.ts.map +1 -1
  178. package/dist/reactive/http.d.ts +194 -0
  179. package/dist/reactive/http.d.ts.map +1 -0
  180. package/dist/reactive/index.d.ts +2 -2
  181. package/dist/reactive/index.d.ts.map +1 -1
  182. package/dist/reactive/pagination.d.ts +126 -0
  183. package/dist/reactive/pagination.d.ts.map +1 -0
  184. package/dist/reactive/polling.d.ts +55 -0
  185. package/dist/reactive/polling.d.ts.map +1 -0
  186. package/dist/reactive/readonly.d.ts +20 -1
  187. package/dist/reactive/readonly.d.ts.map +1 -1
  188. package/dist/reactive/rest.d.ts +293 -0
  189. package/dist/reactive/rest.d.ts.map +1 -0
  190. package/dist/reactive/scope.d.ts +140 -0
  191. package/dist/reactive/scope.d.ts.map +1 -0
  192. package/dist/reactive/signal.d.ts +16 -2
  193. package/dist/reactive/signal.d.ts.map +1 -1
  194. package/dist/reactive/to-value.d.ts +57 -0
  195. package/dist/reactive/to-value.d.ts.map +1 -0
  196. package/dist/reactive/websocket.d.ts +285 -0
  197. package/dist/reactive/websocket.d.ts.map +1 -0
  198. package/dist/reactive-DwkhUJfP.js +1148 -0
  199. package/dist/reactive-DwkhUJfP.js.map +1 -0
  200. package/dist/reactive.es.mjs +38 -20
  201. package/dist/registry-B08iilIh.js +26 -0
  202. package/dist/registry-B08iilIh.js.map +1 -0
  203. package/dist/router/bq-link.d.ts +112 -0
  204. package/dist/router/bq-link.d.ts.map +1 -0
  205. package/dist/router/constraints.d.ts +9 -0
  206. package/dist/router/constraints.d.ts.map +1 -0
  207. package/dist/router/index.d.ts +15 -7
  208. package/dist/router/index.d.ts.map +1 -1
  209. package/dist/router/match.d.ts +0 -1
  210. package/dist/router/match.d.ts.map +1 -1
  211. package/dist/router/path-pattern.d.ts +14 -0
  212. package/dist/router/path-pattern.d.ts.map +1 -0
  213. package/dist/router/query.d.ts.map +1 -1
  214. package/dist/router/router.d.ts +3 -1
  215. package/dist/router/router.d.ts.map +1 -1
  216. package/dist/router/state.d.ts +25 -2
  217. package/dist/router/state.d.ts.map +1 -1
  218. package/dist/router/types.d.ts +48 -4
  219. package/dist/router/types.d.ts.map +1 -1
  220. package/dist/router/use-route.d.ts +50 -0
  221. package/dist/router/use-route.d.ts.map +1 -0
  222. package/dist/router/utils.d.ts +3 -0
  223. package/dist/router/utils.d.ts.map +1 -1
  224. package/dist/router-CQikC9Ed.js +492 -0
  225. package/dist/router-CQikC9Ed.js.map +1 -0
  226. package/dist/router.es.mjs +14 -10
  227. package/dist/{sanitize-Bs2dkMby.js → sanitize-B1V4JswB.js} +2 -1
  228. package/dist/{sanitize-Bs2dkMby.js.map → sanitize-B1V4JswB.js.map} +1 -1
  229. package/dist/security/index.d.ts +2 -2
  230. package/dist/security/index.d.ts.map +1 -1
  231. package/dist/security.es.mjs +1 -1
  232. package/dist/ssr/hydrate.d.ts +65 -0
  233. package/dist/ssr/hydrate.d.ts.map +1 -0
  234. package/dist/ssr/index.d.ts +59 -0
  235. package/dist/ssr/index.d.ts.map +1 -0
  236. package/dist/ssr/render.d.ts +62 -0
  237. package/dist/ssr/render.d.ts.map +1 -0
  238. package/dist/ssr/serialize.d.ts +118 -0
  239. package/dist/ssr/serialize.d.ts.map +1 -0
  240. package/dist/ssr/types.d.ts +70 -0
  241. package/dist/ssr/types.d.ts.map +1 -0
  242. package/dist/ssr-_dAcGdzu.js +248 -0
  243. package/dist/ssr-_dAcGdzu.js.map +1 -0
  244. package/dist/ssr.es.mjs +9 -0
  245. package/dist/store/create-store.d.ts.map +1 -1
  246. package/dist/store/index.d.ts +1 -1
  247. package/dist/store/index.d.ts.map +1 -1
  248. package/dist/store/persisted.d.ts +38 -4
  249. package/dist/store/persisted.d.ts.map +1 -1
  250. package/dist/store/types.d.ts +138 -1
  251. package/dist/store/types.d.ts.map +1 -1
  252. package/dist/store/utils.d.ts +2 -2
  253. package/dist/store/utils.d.ts.map +1 -1
  254. package/dist/store-Cb3gPRve.js +338 -0
  255. package/dist/store-Cb3gPRve.js.map +1 -0
  256. package/dist/store.es.mjs +11 -10
  257. package/dist/storybook/index.d.ts.map +1 -1
  258. package/dist/storybook.es.mjs +1 -1
  259. package/dist/storybook.es.mjs.map +1 -1
  260. package/dist/testing/index.d.ts +23 -0
  261. package/dist/testing/index.d.ts.map +1 -0
  262. package/dist/testing/testing.d.ts +156 -0
  263. package/dist/testing/testing.d.ts.map +1 -0
  264. package/dist/testing/types.d.ts +134 -0
  265. package/dist/testing/types.d.ts.map +1 -0
  266. package/dist/testing-C5Sjfsna.js +224 -0
  267. package/dist/testing-C5Sjfsna.js.map +1 -0
  268. package/dist/testing.es.mjs +9 -0
  269. package/dist/type-guards-BMX2c0LP.js +44 -0
  270. package/dist/type-guards-BMX2c0LP.js.map +1 -0
  271. package/dist/untrack-D0fnO5k2.js +36 -0
  272. package/dist/untrack-D0fnO5k2.js.map +1 -0
  273. package/dist/view/custom-directives.d.ts +20 -0
  274. package/dist/view/custom-directives.d.ts.map +1 -0
  275. package/dist/view/evaluate.d.ts.map +1 -1
  276. package/dist/view/process.d.ts.map +1 -1
  277. package/dist/view.es.mjs +9 -9
  278. package/package.json +47 -11
  279. package/src/a11y/announce.ts +131 -0
  280. package/src/a11y/audit.ts +314 -0
  281. package/src/a11y/index.ts +68 -0
  282. package/src/a11y/media-preferences.ts +255 -0
  283. package/src/a11y/roving-tab-index.ts +164 -0
  284. package/src/a11y/skip-link.ts +255 -0
  285. package/src/a11y/trap-focus.ts +184 -0
  286. package/src/a11y/types.ts +183 -0
  287. package/src/component/component.ts +599 -524
  288. package/src/component/html.ts +153 -153
  289. package/src/component/index.ts +52 -50
  290. package/src/component/library.ts +540 -518
  291. package/src/component/scope.ts +212 -0
  292. package/src/component/types.ts +310 -256
  293. package/src/core/collection.ts +249 -1
  294. package/src/core/element.ts +252 -11
  295. package/src/core/env.ts +60 -0
  296. package/src/core/index.ts +1 -0
  297. package/src/core/shared.ts +64 -0
  298. package/src/core/utils/index.ts +66 -1
  299. package/src/devtools/devtools.ts +410 -0
  300. package/src/devtools/index.ts +48 -0
  301. package/src/devtools/types.ts +104 -0
  302. package/src/dnd/draggable.ts +296 -0
  303. package/src/dnd/droppable.ts +228 -0
  304. package/src/dnd/index.ts +62 -0
  305. package/src/dnd/sortable.ts +307 -0
  306. package/src/dnd/types.ts +293 -0
  307. package/src/forms/create-form.ts +320 -0
  308. package/src/forms/index.ts +70 -0
  309. package/src/forms/types.ts +203 -0
  310. package/src/forms/use-field.ts +231 -0
  311. package/src/forms/validators.ts +294 -0
  312. package/src/full.ts +554 -229
  313. package/src/i18n/formatting.ts +67 -0
  314. package/src/i18n/i18n.ts +200 -0
  315. package/src/i18n/index.ts +67 -0
  316. package/src/i18n/translate.ts +182 -0
  317. package/src/i18n/types.ts +171 -0
  318. package/src/index.ts +72 -0
  319. package/src/media/battery.ts +116 -0
  320. package/src/media/breakpoints.ts +129 -0
  321. package/src/media/clipboard.ts +80 -0
  322. package/src/media/device-sensors.ts +158 -0
  323. package/src/media/geolocation.ts +119 -0
  324. package/src/media/index.ts +76 -0
  325. package/src/media/media-query.ts +92 -0
  326. package/src/media/network.ts +115 -0
  327. package/src/media/types.ts +177 -0
  328. package/src/media/viewport.ts +84 -0
  329. package/src/motion/index.ts +11 -2
  330. package/src/motion/morph.ts +151 -0
  331. package/src/motion/parallax.ts +120 -0
  332. package/src/motion/reduced-motion.ts +52 -3
  333. package/src/motion/types.ts +63 -0
  334. package/src/motion/typewriter.ts +164 -0
  335. package/src/plugin/index.ts +37 -0
  336. package/src/plugin/registry.ts +284 -0
  337. package/src/plugin/types.ts +137 -0
  338. package/src/reactive/async-data.ts +250 -29
  339. package/src/reactive/computed.ts +53 -1
  340. package/src/reactive/effect.ts +29 -6
  341. package/src/reactive/http.ts +790 -0
  342. package/src/reactive/index.ts +60 -0
  343. package/src/reactive/pagination.ts +317 -0
  344. package/src/reactive/polling.ts +179 -0
  345. package/src/reactive/readonly.ts +52 -8
  346. package/src/reactive/rest.ts +859 -0
  347. package/src/reactive/scope.ts +276 -0
  348. package/src/reactive/signal.ts +61 -1
  349. package/src/reactive/to-value.ts +71 -0
  350. package/src/reactive/websocket.ts +849 -0
  351. package/src/router/bq-link.ts +279 -0
  352. package/src/router/constraints.ts +204 -0
  353. package/src/router/index.ts +15 -7
  354. package/src/router/match.ts +255 -49
  355. package/src/router/path-pattern.ts +52 -0
  356. package/src/router/query.ts +3 -0
  357. package/src/router/router.ts +258 -48
  358. package/src/router/state.ts +51 -3
  359. package/src/router/types.ts +50 -4
  360. package/src/router/use-route.ts +68 -0
  361. package/src/router/utils.ts +44 -3
  362. package/src/security/index.ts +12 -17
  363. package/src/security/sanitize.ts +70 -70
  364. package/src/security/trusted-html.ts +71 -71
  365. package/src/ssr/hydrate.ts +84 -0
  366. package/src/ssr/index.ts +70 -0
  367. package/src/ssr/render.ts +508 -0
  368. package/src/ssr/serialize.ts +296 -0
  369. package/src/ssr/types.ts +81 -0
  370. package/src/store/create-store.ts +146 -8
  371. package/src/store/define-store.ts +49 -49
  372. package/src/store/index.ts +5 -0
  373. package/src/store/mapping.ts +74 -74
  374. package/src/store/persisted.ts +245 -62
  375. package/src/store/types.ts +247 -92
  376. package/src/store/utils.ts +4 -10
  377. package/src/store/watch.ts +53 -53
  378. package/src/storybook/index.ts +480 -479
  379. package/src/testing/index.ts +42 -0
  380. package/src/testing/testing.ts +593 -0
  381. package/src/testing/types.ts +170 -0
  382. package/src/view/custom-directives.ts +28 -0
  383. package/src/view/evaluate.ts +2 -0
  384. package/src/view/process.ts +19 -3
  385. package/dist/component-BEQgt5hl.js +0 -600
  386. package/dist/component-BEQgt5hl.js.map +0 -1
  387. package/dist/core-BGQJVw0-.js +0 -35
  388. package/dist/core-BGQJVw0-.js.map +0 -1
  389. package/dist/core-CCEabVHl.js.map +0 -1
  390. package/dist/effect-AFRW_Plg.js +0 -84
  391. package/dist/effect-AFRW_Plg.js.map +0 -1
  392. package/dist/motion-D9TcHxOF.js +0 -415
  393. package/dist/motion-D9TcHxOF.js.map +0 -1
  394. package/dist/reactive-DSkct0dO.js +0 -254
  395. package/dist/reactive-DSkct0dO.js.map +0 -1
  396. package/dist/router-CbDhl8rS.js +0 -188
  397. package/dist/router-CbDhl8rS.js.map +0 -1
  398. package/dist/store-BwDvI45q.js +0 -263
  399. package/dist/store-BwDvI45q.js.map +0 -1
  400. package/dist/untrack-B0rVscTc.js +0 -7
  401. package/dist/untrack-B0rVscTc.js.map +0 -1
  402. package/dist/view-C70lA3vf.js.map +0 -1
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Global plugin registry for bQuery.
3
+ *
4
+ * Provides `use()` to register plugins and query helpers consumed by
5
+ * other modules (e.g. the view module reads custom directives from here).
6
+ *
7
+ * @module bquery/plugin
8
+ */
9
+ import type { BQueryPlugin, CustomDirective, CustomDirectiveHandler } from './types';
10
+ /**
11
+ * Register a bQuery plugin.
12
+ *
13
+ * Plugins are installed at most once (identified by `plugin.name`).
14
+ * Duplicate calls with the same name are silently ignored.
15
+ *
16
+ * @param plugin - The plugin object implementing `{ name, install }`.
17
+ * @param options - Optional configuration forwarded to `plugin.install()`.
18
+ * @throws If `plugin` is not a valid plugin object.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { use } from '@bquery/bquery/plugin';
23
+ *
24
+ * use({
25
+ * name: 'highlight',
26
+ * install(ctx) {
27
+ * ctx.directive('highlight', (el, expr) => {
28
+ * (el as HTMLElement).style.background = String(expr);
29
+ * });
30
+ * },
31
+ * });
32
+ * ```
33
+ */
34
+ export declare const use: <TOptions = unknown>(plugin: BQueryPlugin<TOptions>, options?: TOptions) => void;
35
+ /**
36
+ * Check whether a plugin with the given name has been installed.
37
+ *
38
+ * @param name - The plugin name to check.
39
+ * @returns `true` if the plugin was previously installed via `use()`.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { isInstalled } from '@bquery/bquery/plugin';
44
+ *
45
+ * if (!isInstalled('my-plugin')) {
46
+ * use(myPlugin);
47
+ * }
48
+ * ```
49
+ */
50
+ export declare const isInstalled: (name: string) => boolean;
51
+ /**
52
+ * Return a read-only snapshot of all installed plugin names.
53
+ *
54
+ * @returns Array of plugin name strings.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * import { getInstalledPlugins } from '@bquery/bquery/plugin';
59
+ * console.log(getInstalledPlugins()); // ['my-plugin', 'other-plugin']
60
+ * ```
61
+ */
62
+ export declare const getInstalledPlugins: () => readonly string[];
63
+ /**
64
+ * Retrieve the handler for a custom directive registered by a plugin.
65
+ *
66
+ * This is used internally by the view module's `processElement` to
67
+ * resolve directives that aren't built-in.
68
+ *
69
+ * @param name - Directive name **without** prefix (e.g. `'tooltip'`).
70
+ * @returns The handler, or `undefined` if none is registered.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * import { getCustomDirective } from '@bquery/bquery/plugin';
75
+ * const handler = getCustomDirective('tooltip');
76
+ * ```
77
+ */
78
+ export declare const getCustomDirective: (name: string) => CustomDirectiveHandler | undefined;
79
+ /**
80
+ * Return a read-only snapshot of all registered custom directives.
81
+ *
82
+ * @returns Array of `{ name, handler }` descriptors.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * import { getCustomDirectives } from '@bquery/bquery/plugin';
87
+ * for (const { name, handler } of getCustomDirectives()) {
88
+ * console.log(`Directive: bq-${name}`);
89
+ * }
90
+ * ```
91
+ */
92
+ export declare const getCustomDirectives: () => readonly CustomDirective[];
93
+ /**
94
+ * Reset all plugin registrations.
95
+ *
96
+ * Clears all installed plugins and custom directives.
97
+ *
98
+ * This utility is primarily intended for tests and other isolated environments
99
+ * that need to reinitialize plugin state between runs.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * import { resetPlugins } from '@bquery/bquery/plugin';
104
+ * afterEach(() => resetPlugins());
105
+ * ```
106
+ */
107
+ export declare const resetPlugins: () => void;
108
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugin/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,sBAAsB,EAEvB,MAAM,SAAS,CAAC;AAsHjB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,GAAG,GAAI,QAAQ,GAAG,OAAO,EACpC,QAAQ,YAAY,CAAC,QAAQ,CAAC,EAC9B,UAAU,QAAQ,KACjB,IAuCF,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,OAAqC,CAAC;AAEjF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,QAAO,SAAS,MAAM,EAA2B,CAAC;AAElF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,sBAAsB,GAAG,SAC/C,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,QAAO,SAAS,eAAe,EACgB,CAAC;AAEhF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,QAAO,IAI/B,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Public types for the bQuery plugin system.
3
+ *
4
+ * Plugins extend bQuery by registering custom directives and Web Components
5
+ * through a single unified interface.
6
+ *
7
+ * @module bquery/plugin
8
+ */
9
+ import type { CleanupFn } from '../reactive/index';
10
+ import type { BindingContext } from '../view/types';
11
+ /**
12
+ * A custom directive handler that is invoked when the view module encounters
13
+ * a `bq-{name}` attribute during mount processing.
14
+ *
15
+ * @param el - The DOM element carrying the directive attribute
16
+ * @param expression - The raw attribute value (expression string)
17
+ * @param context - The current binding context (data / signals)
18
+ * @param cleanups - Array where the handler should push any cleanup functions
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const tooltipDirective: CustomDirectiveHandler = (el, expression, ctx, cleanups) => {
23
+ * const tip = document.createElement('span');
24
+ * tip.textContent = String(expression);
25
+ * el.appendChild(tip);
26
+ * cleanups.push(() => tip.remove());
27
+ * };
28
+ * ```
29
+ */
30
+ export type CustomDirectiveHandler = (el: Element, expression: string, context: BindingContext, cleanups: CleanupFn[]) => void;
31
+ /**
32
+ * Descriptor for a custom directive registered by a plugin.
33
+ */
34
+ export interface CustomDirective {
35
+ /** The directive name (without prefix). e.g. `'tooltip'` → `bq-tooltip` */
36
+ readonly name: string;
37
+ /** The handler function called when the directive is encountered. */
38
+ readonly handler: CustomDirectiveHandler;
39
+ }
40
+ /**
41
+ * Context object provided to a plugin's `install` function.
42
+ *
43
+ * Plugins use these helpers to register their contributions into bQuery's
44
+ * global registries without directly importing internal modules.
45
+ */
46
+ export interface PluginInstallContext {
47
+ /**
48
+ * Register a custom view directive that will be recognized during
49
+ * `mount()` processing.
50
+ *
51
+ * @param name - Directive name **without** the `bq-` prefix (e.g. `'tooltip'`)
52
+ * @param handler - The handler called for each element with the directive
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * ctx.directive('focus', (el) => {
57
+ * (el as HTMLElement).focus();
58
+ * });
59
+ * ```
60
+ */
61
+ directive(name: string, handler: CustomDirectiveHandler): void;
62
+ /**
63
+ * Register a Web Component via the native `customElements.define()` API.
64
+ *
65
+ * @param tagName - Custom element tag (e.g. `'my-counter'`)
66
+ * @param constructor - The `HTMLElement` subclass
67
+ * @param options - Optional `ElementDefinitionOptions` (e.g. `{ extends: 'div' }`)
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * ctx.component('my-counter', MyCounterElement);
72
+ * ```
73
+ */
74
+ component(tagName: string, constructor: CustomElementConstructor, options?: ElementDefinitionOptions): void;
75
+ }
76
+ /**
77
+ * A bQuery plugin.
78
+ *
79
+ * Plugins are plain objects with a `name` and an `install` function.
80
+ * Call `use(plugin)` to activate a plugin before creating routers, stores,
81
+ * or mounting views.
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * import { use } from '@bquery/bquery/plugin';
86
+ *
87
+ * const myPlugin: BQueryPlugin = {
88
+ * name: 'my-plugin',
89
+ * install(ctx, options) {
90
+ * ctx.directive('highlight', (el, expr) => {
91
+ * (el as HTMLElement).style.background = String(expr);
92
+ * });
93
+ * },
94
+ * };
95
+ *
96
+ * use(myPlugin, { color: 'yellow' });
97
+ * ```
98
+ */
99
+ export interface BQueryPlugin<TOptions = unknown> {
100
+ /** Unique human-readable name for the plugin. */
101
+ readonly name: string;
102
+ /**
103
+ * Called once when the plugin is registered via `use()`.
104
+ *
105
+ * @param context - Helpers for registering directives, components, etc.
106
+ * @param options - User-provided options forwarded from `use(plugin, options)`.
107
+ */
108
+ install(context: PluginInstallContext, options?: TOptions): void;
109
+ }
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugin/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,EAAE,EAAE,OAAO,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,SAAS,EAAE,KAClB,IAAI,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;CAC1C;AAMD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAE/D;;;;;;;;;;;OAWG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,wBAAwB,EACrC,OAAO,CAAC,EAAE,wBAAwB,GACjC,IAAI,CAAC;CACT;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,OAAO;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAClE"}
@@ -0,0 +1,66 @@
1
+ import { n as l } from "./custom-directives-Dr4C5lVV.js";
2
+ var s = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Map(), c = () => {
3
+ l((t) => n.get(t));
4
+ };
5
+ c();
6
+ var u = (t) => {
7
+ n.clear();
8
+ for (const [e, r] of t) n.set(e, r);
9
+ }, f = (t) => ({
10
+ directive(e, r) {
11
+ if (typeof e != "string" || e.length === 0) throw new Error("bQuery plugin directive: name must be a non-empty string");
12
+ if (e.startsWith("bq-")) {
13
+ const i = e.slice(3);
14
+ throw new Error(`bQuery plugin directive: name "${e}" must be provided without the "bq-" prefix` + (i ? ` (use "${i}")` : ""));
15
+ }
16
+ if (typeof r != "function") throw new Error(`bQuery plugin directive: handler for "${e}" must be a function`);
17
+ if (n.has(e)) throw new Error(`bQuery plugin directive: a directive named "${e}" is already registered`);
18
+ n.set(e, r);
19
+ },
20
+ component(e, r, i) {
21
+ if (typeof e != "string" || e.length === 0) throw new Error("bQuery plugin component: tagName must be a non-empty string");
22
+ if (!e.includes("-")) throw new Error(`bQuery plugin component: tagName "${e}" must be a valid custom element name containing a hyphen`);
23
+ if (typeof r != "function") throw new Error(`bQuery plugin component: constructor for "${e}" must be a function`);
24
+ if (typeof customElements > "u") {
25
+ typeof console < "u" && typeof console.warn == "function" && console.warn(`[bQuery] plugin component "${e}" was not registered because customElements is not available in this environment.`);
26
+ return;
27
+ }
28
+ !customElements.get(e) && !t.some((a) => a.tagName === e) && t.push({
29
+ tagName: e,
30
+ constructor: r,
31
+ options: i
32
+ });
33
+ }
34
+ }), p = (t, e) => {
35
+ if (c(), !t || typeof t != "object") throw new Error("bQuery plugin: use() expects a plugin object with { name, install }");
36
+ if (typeof t.name != "string" || t.name.length === 0) throw new Error('bQuery plugin: plugin must have a non-empty "name" property');
37
+ if (typeof t.install != "function") throw new Error(`bQuery plugin: plugin "${t.name}" must have an "install" function`);
38
+ if (s.has(t.name)) return;
39
+ const r = [], i = f(r), a = new Map(n);
40
+ try {
41
+ t.install(i, e);
42
+ } catch (o) {
43
+ throw u(a), o;
44
+ }
45
+ try {
46
+ for (const o of r) customElements.get(o.tagName) || customElements.define(o.tagName, o.constructor, o.options);
47
+ } catch (o) {
48
+ throw u(a), o;
49
+ }
50
+ s.add(t.name);
51
+ }, h = (t) => s.has(t), v = () => [...s], w = (t) => n.get(t), y = () => [...n.entries()].map(([t, e]) => ({
52
+ name: t,
53
+ handler: e
54
+ })), d = () => {
55
+ s.clear(), n.clear(), c();
56
+ };
57
+ export {
58
+ d as a,
59
+ h as i,
60
+ y as n,
61
+ p as o,
62
+ v as r,
63
+ w as t
64
+ };
65
+
66
+ //# sourceMappingURL=plugin-C2WuC8SF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-C2WuC8SF.js","names":[],"sources":["../src/plugin/registry.ts"],"sourcesContent":["/**\n * Global plugin registry for bQuery.\n *\n * Provides `use()` to register plugins and query helpers consumed by\n * other modules (e.g. the view module reads custom directives from here).\n *\n * @module bquery/plugin\n */\n\nimport { registerCustomDirectiveResolver } from '../view/custom-directives';\nimport type {\n BQueryPlugin,\n CustomDirective,\n CustomDirectiveHandler,\n PluginInstallContext,\n} from './types';\n\n// ---------------------------------------------------------------------------\n// Internal registries\n// ---------------------------------------------------------------------------\n\n/** Set of installed plugin names — prevents double-install. */\nconst installedPlugins = new Set<string>();\n\n/** Custom directives contributed by plugins. */\nconst customDirectives = new Map<string, CustomDirectiveHandler>();\n\ntype PendingComponentRegistration = {\n tagName: string;\n constructor: CustomElementConstructor;\n options?: ElementDefinitionOptions;\n};\n\n/**\n * Ensure the view pipeline resolves plugin directives against the current registry.\n *\n * This is intentionally idempotent so tests or internal modules can temporarily\n * clear the resolver without leaving plugin/view integration in a broken state.\n *\n * @internal\n */\nconst attachCustomDirectiveResolver = (): void => {\n registerCustomDirectiveResolver((name) => customDirectives.get(name));\n};\n\nattachCustomDirectiveResolver();\n\n/**\n * Restore the directive registry to a previously captured snapshot.\n *\n * Used to roll back partial plugin installation when `install()` or staged\n * `customElements.define()` calls fail after directives were already registered.\n *\n * @internal\n */\nconst restoreDirectiveSnapshot = (\n directivesSnapshot: ReadonlyMap<string, CustomDirectiveHandler>\n): void => {\n customDirectives.clear();\n for (const [name, handler] of directivesSnapshot) {\n customDirectives.set(name, handler);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Install context factory\n// ---------------------------------------------------------------------------\n\n/**\n * Build the `PluginInstallContext` handed to each plugin's `install()`.\n * @internal\n */\nconst createInstallContext = (\n pendingComponents: PendingComponentRegistration[]\n): PluginInstallContext => ({\n directive(name: string, handler: CustomDirectiveHandler): void {\n if (typeof name !== 'string' || name.length === 0) {\n throw new Error('bQuery plugin directive: name must be a non-empty string');\n }\n if (name.startsWith('bq-')) {\n const suggestedName = name.slice(3);\n throw new Error(\n `bQuery plugin directive: name \"${name}\" must be provided without the \"bq-\" prefix` +\n (suggestedName ? ` (use \"${suggestedName}\")` : '')\n );\n }\n if (typeof handler !== 'function') {\n throw new Error(`bQuery plugin directive: handler for \"${name}\" must be a function`);\n }\n if (customDirectives.has(name)) {\n throw new Error(`bQuery plugin directive: a directive named \"${name}\" is already registered`);\n }\n customDirectives.set(name, handler);\n },\n\n component(\n tagName: string,\n constructor: CustomElementConstructor,\n options?: ElementDefinitionOptions\n ): void {\n if (typeof tagName !== 'string' || tagName.length === 0) {\n throw new Error('bQuery plugin component: tagName must be a non-empty string');\n }\n if (!tagName.includes('-')) {\n throw new Error(\n `bQuery plugin component: tagName \"${tagName}\" must be a valid custom element name containing a hyphen`\n );\n }\n if (typeof constructor !== 'function') {\n throw new Error(`bQuery plugin component: constructor for \"${tagName}\" must be a function`);\n }\n if (typeof customElements === 'undefined') {\n if (typeof console !== 'undefined' && typeof console.warn === 'function') {\n console.warn(\n `[bQuery] plugin component \"${tagName}\" was not registered because customElements is not available in this environment.`\n );\n }\n return;\n }\n // Idempotent — skip if already defined or already staged during this install\n if (\n !customElements.get(tagName) &&\n !pendingComponents.some((entry) => entry.tagName === tagName)\n ) {\n pendingComponents.push({ tagName, constructor, options });\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Register a bQuery plugin.\n *\n * Plugins are installed at most once (identified by `plugin.name`).\n * Duplicate calls with the same name are silently ignored.\n *\n * @param plugin - The plugin object implementing `{ name, install }`.\n * @param options - Optional configuration forwarded to `plugin.install()`.\n * @throws If `plugin` is not a valid plugin object.\n *\n * @example\n * ```ts\n * import { use } from '@bquery/bquery/plugin';\n *\n * use({\n * name: 'highlight',\n * install(ctx) {\n * ctx.directive('highlight', (el, expr) => {\n * (el as HTMLElement).style.background = String(expr);\n * });\n * },\n * });\n * ```\n */\nexport const use = <TOptions = unknown>(\n plugin: BQueryPlugin<TOptions>,\n options?: TOptions\n): void => {\n attachCustomDirectiveResolver();\n\n if (!plugin || typeof plugin !== 'object') {\n throw new Error('bQuery plugin: use() expects a plugin object with { name, install }');\n }\n if (typeof plugin.name !== 'string' || plugin.name.length === 0) {\n throw new Error('bQuery plugin: plugin must have a non-empty \"name\" property');\n }\n if (typeof plugin.install !== 'function') {\n throw new Error(`bQuery plugin: plugin \"${plugin.name}\" must have an \"install\" function`);\n }\n\n // Deduplicate\n if (installedPlugins.has(plugin.name)) return;\n\n const pendingComponents: PendingComponentRegistration[] = [];\n const ctx = createInstallContext(pendingComponents);\n const directivesSnapshot = new Map(customDirectives);\n\n try {\n plugin.install(ctx, options);\n } catch (error) {\n restoreDirectiveSnapshot(directivesSnapshot);\n throw error;\n }\n\n try {\n for (const entry of pendingComponents) {\n if (!customElements.get(entry.tagName)) {\n customElements.define(entry.tagName, entry.constructor, entry.options);\n }\n }\n } catch (error) {\n restoreDirectiveSnapshot(directivesSnapshot);\n throw error;\n }\n\n installedPlugins.add(plugin.name);\n};\n\n/**\n * Check whether a plugin with the given name has been installed.\n *\n * @param name - The plugin name to check.\n * @returns `true` if the plugin was previously installed via `use()`.\n *\n * @example\n * ```ts\n * import { isInstalled } from '@bquery/bquery/plugin';\n *\n * if (!isInstalled('my-plugin')) {\n * use(myPlugin);\n * }\n * ```\n */\nexport const isInstalled = (name: string): boolean => installedPlugins.has(name);\n\n/**\n * Return a read-only snapshot of all installed plugin names.\n *\n * @returns Array of plugin name strings.\n *\n * @example\n * ```ts\n * import { getInstalledPlugins } from '@bquery/bquery/plugin';\n * console.log(getInstalledPlugins()); // ['my-plugin', 'other-plugin']\n * ```\n */\nexport const getInstalledPlugins = (): readonly string[] => [...installedPlugins];\n\n/**\n * Retrieve the handler for a custom directive registered by a plugin.\n *\n * This is used internally by the view module's `processElement` to\n * resolve directives that aren't built-in.\n *\n * @param name - Directive name **without** prefix (e.g. `'tooltip'`).\n * @returns The handler, or `undefined` if none is registered.\n *\n * @example\n * ```ts\n * import { getCustomDirective } from '@bquery/bquery/plugin';\n * const handler = getCustomDirective('tooltip');\n * ```\n */\nexport const getCustomDirective = (name: string): CustomDirectiveHandler | undefined =>\n customDirectives.get(name);\n\n/**\n * Return a read-only snapshot of all registered custom directives.\n *\n * @returns Array of `{ name, handler }` descriptors.\n *\n * @example\n * ```ts\n * import { getCustomDirectives } from '@bquery/bquery/plugin';\n * for (const { name, handler } of getCustomDirectives()) {\n * console.log(`Directive: bq-${name}`);\n * }\n * ```\n */\nexport const getCustomDirectives = (): readonly CustomDirective[] =>\n [...customDirectives.entries()].map(([name, handler]) => ({ name, handler }));\n\n/**\n * Reset all plugin registrations.\n *\n * Clears all installed plugins and custom directives.\n *\n * This utility is primarily intended for tests and other isolated environments\n * that need to reinitialize plugin state between runs.\n *\n * @example\n * ```ts\n * import { resetPlugins } from '@bquery/bquery/plugin';\n * afterEach(() => resetPlugins());\n * ```\n */\nexport const resetPlugins = (): void => {\n installedPlugins.clear();\n customDirectives.clear();\n attachCustomDirectiveResolver();\n};\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { a as e, i as t, n as a, o as i, r, t as l } from "./plugin-C2WuC8SF.js";
2
+ export {
3
+ l as getCustomDirective,
4
+ a as getCustomDirectives,
5
+ r as getInstalledPlugins,
6
+ t as isInstalled,
7
+ e as resetPlugins,
8
+ i as use
9
+ };
@@ -43,13 +43,24 @@ export interface AsyncDataState<TData> {
43
43
  execute: () => Promise<TData | undefined>;
44
44
  /** Alias for execute(). */
45
45
  refresh: () => Promise<TData | undefined>;
46
+ /** Abort the current in-flight request (useFetch only; no-op for useAsyncData). */
47
+ abort: () => void;
46
48
  /** Clear data, error, and status back to the initial state. */
47
49
  clear: () => void;
48
50
  /** Dispose reactive watchers and prevent future executions. */
49
51
  dispose: () => void;
50
52
  }
53
+ /** Configuration for automatic request retries in useFetch(). */
54
+ export interface UseFetchRetryConfig {
55
+ /** Maximum number of retry attempts (default: 3). */
56
+ count: number;
57
+ /** Delay in ms between retries, or a function receiving the attempt index. */
58
+ delay?: number | ((attempt: number) => number);
59
+ /** Predicate deciding whether to retry. Defaults to network / 5xx errors. */
60
+ retryOn?: (error: Error, attempt: number) => boolean;
61
+ }
51
62
  /** Options for useFetch(). */
52
- export interface UseFetchOptions<TResponse = unknown, TData = TResponse> extends UseAsyncDataOptions<TResponse, TData>, Omit<RequestInit, 'body' | 'headers'> {
63
+ export interface UseFetchOptions<TResponse = unknown, TData = TResponse> extends UseAsyncDataOptions<TResponse, TData>, Omit<RequestInit, 'body' | 'headers' | 'signal'> {
53
64
  /** Base URL prepended to relative URLs. */
54
65
  baseUrl?: string;
55
66
  /** Query parameters appended to the request URL. */
@@ -62,6 +73,14 @@ export interface UseFetchOptions<TResponse = unknown, TData = TResponse> extends
62
73
  parseAs?: BqueryFetchParseAs;
63
74
  /** Custom fetch implementation for testing or adapters. */
64
75
  fetcher?: typeof fetch;
76
+ /** Request timeout in milliseconds. 0 means no timeout. */
77
+ timeout?: number;
78
+ /** External AbortSignal for request cancellation. */
79
+ signal?: AbortSignal;
80
+ /** Retry configuration. Pass a number for simple retry count, or a config object. */
81
+ retry?: number | UseFetchRetryConfig;
82
+ /** Custom status validation. Returns `true` for acceptable statuses. */
83
+ validateStatus?: (status: number) => boolean;
65
84
  }
66
85
  /** Input accepted by useFetch(). */
67
86
  export type FetchInput = string | URL | Request | (() => string | URL | Request);
@@ -83,15 +102,21 @@ export declare const useAsyncData: <TResult, TData = TResult>(handler: () => Pro
83
102
  /**
84
103
  * Reactive fetch composable using the browser Fetch API.
85
104
  *
105
+ * Supports timeout, abort, retry, and custom status validation in addition
106
+ * to the core useFetch features (query params, JSON body, baseUrl, watch).
107
+ *
86
108
  * @template TResponse - Raw parsed response type
87
109
  * @template TData - Stored response type after optional transformation
88
110
  * @param input - Request URL, Request object, or lazy input factory
89
111
  * @param options - Request and reactive state options
90
- * @returns Reactive fetch state with execute(), refresh(), and clear()
112
+ * @returns Reactive fetch state with execute(), refresh(), abort(), clear(), and dispose()
91
113
  *
92
114
  * @example
93
115
  * ```ts
94
- * const users = useFetch<{ id: number; name: string }[]>('/api/users');
116
+ * const users = useFetch<{ id: number; name: string }[]>('/api/users', {
117
+ * timeout: 5000,
118
+ * retry: 3,
119
+ * });
95
120
  * ```
96
121
  */
97
122
  export declare const useFetch: <TResponse = unknown, TData = TResponse>(input: FetchInput, options?: UseFetchOptions<TResponse, TData>) => AsyncDataState<TData>;
@@ -1 +1 @@
1
- {"version":3,"file":"async-data.d.ts","sourceRoot":"","sources":["../../src/reactive/async-data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async-data.d.ts","sourceRoot":"","sources":["../../src/reactive/async-data.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAGxC,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvE,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpE,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO;IAC3D,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,yEAAyE;IACzE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,sDAAsD;IACtD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;IACtC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAChC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC5B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAChC,4DAA4D;IAC5D,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,IAAI,OAAO,CAAA;KAAE,CAAC;IACtD,+FAA+F;IAC/F,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC1C,2BAA2B;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC1C,mFAAmF;IACnF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,iEAAiE;AACjE,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CACtD;AAED,8BAA8B;AAC9B,MAAM,WAAW,eAAe,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,SAAS,CACrE,SAAQ,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC/F,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uBAAuB;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7D,sDAAsD;IACtD,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACrC,wEAAwE;IACxE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C;AAED,oCAAoC;AACpC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,CAAC,MAAM,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAmKjF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,EAAE,KAAK,GAAG,OAAO,EACnD,SAAS,MAAM,OAAO,CAAC,OAAO,CAAC,EAC/B,UAAS,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAM,KAChD,cAAc,CAAC,KAAK,CA6FtB,CAAC;AAyEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,SAAS,EAC7D,OAAO,UAAU,EACjB,UAAS,eAAe,CAAC,SAAS,EAAE,KAAK,CAAM,KAC9C,cAAc,CAAC,KAAK,CAkMtB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iHAAiH;AACjH,wBAAgB,cAAc,CAAC,gBAAgB,GAAG,OAAO,EACvD,QAAQ,CAAC,EAAE,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GAC7D,CAAC,SAAS,GAAG,gBAAgB,EAAE,KAAK,GAAG,SAAS,EACjD,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,KACxC,cAAc,CAAC,KAAK,CAAC,CAAC;AAE3B,mHAAmH;AACnH,wBAAgB,cAAc,CAAC,gBAAgB,GAAG,OAAO,EAAE,YAAY,GAAG,gBAAgB,EACxF,QAAQ,EAAE,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,GACxD,CAAC,SAAS,GAAG,gBAAgB,EAAE,KAAK,GAAG,YAAY,EACpD,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,KACxC,cAAc,CAAC,KAAK,CAAC,CAAC"}
@@ -13,7 +13,9 @@ import { type ReactiveSource } from './internals';
13
13
  export declare class Computed<T> implements ReactiveSource {
14
14
  private readonly compute;
15
15
  private cachedValue;
16
+ private hasCachedValue;
16
17
  private dirty;
18
+ private disposed;
17
19
  private subscribers;
18
20
  private readonly markDirty;
19
21
  /**
@@ -38,10 +40,18 @@ export declare class Computed<T> implements ReactiveSource {
38
40
  * @internal
39
41
  */
40
42
  unsubscribe(observer: () => void): void;
43
+ /**
44
+ * Disposes the computed value by unsubscribing its internal observer
45
+ * from all upstream dependencies and clearing subscribers.
46
+ */
47
+ dispose(): void;
41
48
  }
42
49
  /**
43
50
  * Creates a new computed value.
44
51
  *
52
+ * If created inside an {@link effectScope}, the computed value is automatically
53
+ * collected and will be disposed when the scope stops.
54
+ *
45
55
  * @template T - The type of the computed value
46
56
  * @param fn - Function that computes the value from reactive sources
47
57
  * @returns A new Computed instance
@@ -1 +1 @@
1
- {"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/reactive/computed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,CAAE,YAAW,cAAc;IAiBpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBpC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAOxB;IAEF;;;OAGG;gBAC0B,OAAO,EAAE,MAAM,CAAC;IAE7C;;;OAGG;IACH,IAAI,KAAK,IAAI,CAAC,CAab;IAED;;;;;OAKG;IACH,IAAI,IAAI,CAAC;IAUT;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAGxC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,IAAI,MAAM,CAAC,KAAG,QAAQ,CAAC,CAAC,CAAqB,CAAC"}
1
+ {"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/reactive/computed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAGrB;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,CAAE,YAAW,cAAc;IAsBpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IArBpC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAUxB;IAEF;;;OAGG;gBAC0B,OAAO,EAAE,MAAM,CAAC;IAE7C;;;OAGG;IACH,IAAI,KAAK,IAAI,CAAC,CAsBb;IAED;;;;;OAKG;IACH,IAAI,IAAI,CAAC;IAmBT;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC;;;OAGG;IACH,OAAO,IAAI,IAAI;CAShB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,IAAI,MAAM,CAAC,KAAG,QAAQ,CAAC,CAAC,CAUnD,CAAC"}
@@ -8,6 +8,9 @@ import { CleanupFn } from './internals';
8
8
  * The effect runs immediately upon creation and then re-runs whenever
9
9
  * any signal or computed value read inside it changes.
10
10
  *
11
+ * If created inside an {@link effectScope}, the effect is automatically
12
+ * collected and will be disposed when the scope stops.
13
+ *
11
14
  * @param fn - The effect function to run
12
15
  * @returns A cleanup function to stop the effect
13
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/reactive/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAsC,MAAM,aAAa,CAAC;AAE5E;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,IAAI,GAAG,SAAS,KAAG,SAsCnD,CAAC"}
1
+ {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/reactive/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAsC,MAAM,aAAa,CAAC;AAG5E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,IAAI,GAAG,SAAS,KAAG,SAyDnD,CAAC"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Imperative HTTP client with Axios-like API, interceptors, retry, timeout,
3
+ * cancellation, and progress tracking — built on the native Fetch API.
4
+ *
5
+ * @module bquery/reactive
6
+ */
7
+ import { type BqueryFetchParseAs } from '../platform/config';
8
+ /** Configuration for automatic request retries. */
9
+ export interface RetryConfig {
10
+ /** Maximum number of retry attempts (default: 3). */
11
+ count: number;
12
+ /** Delay in ms between retries, or a function receiving the attempt index. */
13
+ delay?: number | ((attempt: number) => number);
14
+ /** Predicate deciding whether to retry a given error. Defaults to network / 5xx errors. */
15
+ retryOn?: (error: HttpError, attempt: number) => boolean;
16
+ /** Called before each retry attempt with the error and 1-indexed attempt number. */
17
+ onRetry?: (error: HttpError, attempt: number) => void;
18
+ }
19
+ /** Progress information emitted during upload or download. */
20
+ export interface HttpProgressEvent {
21
+ /** Bytes transferred so far. */
22
+ loaded: number;
23
+ /** Total bytes if known, otherwise 0. */
24
+ total: number;
25
+ /** Percentage between 0 and 100, or `undefined` when total is unknown. */
26
+ percent: number | undefined;
27
+ }
28
+ /** Full request configuration accepted by the HTTP client. */
29
+ export interface HttpRequestConfig extends Omit<RequestInit, 'body' | 'headers' | 'signal'> {
30
+ /** Request URL (resolved against `baseUrl`). */
31
+ url?: string;
32
+ /** Base URL prepended to relative request URLs. */
33
+ baseUrl?: string;
34
+ /** Request headers. */
35
+ headers?: HeadersInit;
36
+ /** Query parameters appended to the URL. */
37
+ query?: Record<string, unknown>;
38
+ /** Request body — plain objects/arrays are JSON-serialised automatically. */
39
+ body?: BodyInit | Record<string, unknown> | unknown[] | null;
40
+ /** Request timeout in milliseconds. 0 means no timeout (default). */
41
+ timeout?: number;
42
+ /** Response parsing strategy. */
43
+ parseAs?: BqueryFetchParseAs;
44
+ /** Custom status validation. Returns `true` for acceptable statuses. Default: `status >= 200 && status < 300`. */
45
+ validateStatus?: (status: number) => boolean;
46
+ /** Custom fetch implementation for testing or adapters. */
47
+ fetcher?: typeof fetch;
48
+ /** External `AbortSignal` for request cancellation. */
49
+ signal?: AbortSignal;
50
+ /** Retry configuration. Pass a number for simple retry count, or a `RetryConfig` object. */
51
+ retry?: number | RetryConfig;
52
+ /** Called repeatedly as response body chunks arrive. */
53
+ onDownloadProgress?: (event: HttpProgressEvent) => void;
54
+ }
55
+ /** Structured HTTP response returned by every client method. */
56
+ export interface HttpResponse<T = unknown> {
57
+ /** Parsed response data. */
58
+ data: T;
59
+ /** HTTP status code. */
60
+ status: number;
61
+ /** HTTP status text. */
62
+ statusText: string;
63
+ /** Response headers. */
64
+ headers: Headers;
65
+ /** Resolved request configuration used for this call. */
66
+ config: HttpRequestConfig;
67
+ }
68
+ /** Error subclass thrown on failed HTTP requests with rich metadata. */
69
+ export declare class HttpError extends Error {
70
+ /** HTTP response (available when the server replied). */
71
+ response?: HttpResponse;
72
+ /** Resolved request configuration. */
73
+ config: HttpRequestConfig;
74
+ /** Original error code string (e.g. `'TIMEOUT'`, `'ABORT'`, `'NETWORK'`). */
75
+ code: string;
76
+ constructor(message: string, config: HttpRequestConfig, code: string, response?: HttpResponse);
77
+ }
78
+ /** Single interceptor handler pair. */
79
+ export interface Interceptor<T> {
80
+ fulfilled?: (value: T) => T | Promise<T>;
81
+ rejected?: (error: unknown) => unknown;
82
+ }
83
+ /** Manager for adding and removing interceptors. */
84
+ export interface InterceptorManager<T> {
85
+ /** Register an interceptor. Returns a numeric id for later removal via `eject()`. */
86
+ use(fulfilled?: (value: T) => T | Promise<T>, rejected?: (error: unknown) => unknown): number;
87
+ /** Remove a previously registered interceptor by id. */
88
+ eject(id: number): void;
89
+ /** Remove all interceptors. */
90
+ clear(): void;
91
+ }
92
+ /** Imperative HTTP client with interceptors and convenience method shortcuts. */
93
+ export interface HttpClient {
94
+ /** Send a request using the provided configuration. */
95
+ request<T = unknown>(config: HttpRequestConfig): Promise<HttpResponse<T>>;
96
+ /** Send a GET request. */
97
+ get<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
98
+ /** Send a POST request. */
99
+ post<T = unknown>(url: string, body?: HttpRequestConfig['body'], config?: HttpRequestConfig): Promise<HttpResponse<T>>;
100
+ /** Send a PUT request. */
101
+ put<T = unknown>(url: string, body?: HttpRequestConfig['body'], config?: HttpRequestConfig): Promise<HttpResponse<T>>;
102
+ /** Send a PATCH request. */
103
+ patch<T = unknown>(url: string, body?: HttpRequestConfig['body'], config?: HttpRequestConfig): Promise<HttpResponse<T>>;
104
+ /** Send a DELETE request. */
105
+ delete<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
106
+ /** Send a HEAD request. */
107
+ head<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
108
+ /** Send an OPTIONS request. */
109
+ options<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
110
+ /** Request and response interceptors. */
111
+ interceptors: {
112
+ request: InterceptorManager<HttpRequestConfig>;
113
+ response: InterceptorManager<HttpResponse>;
114
+ };
115
+ /** The merged default configuration used by this client. */
116
+ defaults: HttpRequestConfig;
117
+ }
118
+ /**
119
+ * Create a preconfigured HTTP client instance with interceptors.
120
+ *
121
+ * @param defaults - Default request configuration merged into every request
122
+ * @returns An `HttpClient` with `.get()`, `.post()`, `.put()`, `.patch()`, `.delete()`, `.head()`, `.options()`
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * import { createHttp } from '@bquery/bquery/reactive';
127
+ *
128
+ * const api = createHttp({
129
+ * baseUrl: 'https://api.example.com',
130
+ * headers: { authorization: 'Bearer token' },
131
+ * timeout: 10_000,
132
+ * });
133
+ *
134
+ * api.interceptors.request.use((config) => {
135
+ * config.headers = { ...Object.fromEntries(new Headers(config.headers)), 'x-req-id': crypto.randomUUID() };
136
+ * return config;
137
+ * });
138
+ *
139
+ * const { data } = await api.get<User[]>('/users');
140
+ * ```
141
+ */
142
+ export declare function createHttp(defaults?: HttpRequestConfig): HttpClient;
143
+ /**
144
+ * Default HTTP client instance using global bQuery fetch config.
145
+ *
146
+ * @example
147
+ * ```ts
148
+ * import { http } from '@bquery/bquery/reactive';
149
+ *
150
+ * const { data } = await http.get<User[]>('/api/users');
151
+ * const { data: created } = await http.post('/api/users', { name: 'Ada' });
152
+ * ```
153
+ */
154
+ export declare const http: HttpClient;
155
+ /** Options for `createRequestQueue()`. */
156
+ export interface RequestQueueOptions {
157
+ /** Maximum number of concurrent in-flight requests (default: 6). */
158
+ concurrency?: number;
159
+ }
160
+ /** Return value of `createRequestQueue()`. */
161
+ export interface RequestQueue {
162
+ /** Enqueue a request. Returns a promise that resolves when the request completes. */
163
+ add: <T = unknown>(execute: () => Promise<HttpResponse<T>>) => Promise<HttpResponse<T>>;
164
+ /** Number of requests currently being processed. */
165
+ readonly pending: number;
166
+ /** Number of requests waiting in the queue. */
167
+ readonly size: number;
168
+ /** Remove all pending (not yet started) requests from the queue. Their promises will reject. */
169
+ clear: () => void;
170
+ }
171
+ /**
172
+ * Create a request queue with a concurrency limit.
173
+ *
174
+ * Useful for rate-limiting parallel HTTP requests (e.g. browser connection limits,
175
+ * API throttling) while maintaining a simple promise-based interface.
176
+ *
177
+ * @param options - Queue configuration
178
+ * @returns A `RequestQueue` with `.add()`, `.clear()`, `.pending`, and `.size`
179
+ *
180
+ * @example
181
+ * ```ts
182
+ * import { createRequestQueue, createHttp } from '@bquery/bquery/reactive';
183
+ *
184
+ * const api = createHttp({ baseUrl: 'https://api.example.com' });
185
+ * const queue = createRequestQueue({ concurrency: 3 });
186
+ *
187
+ * // These will run at most 3 at a time
188
+ * const results = await Promise.all(
189
+ * ids.map(id => queue.add(() => api.get(`/items/${id}`)))
190
+ * );
191
+ * ```
192
+ */
193
+ export declare function createRequestQueue(options?: RequestQueueOptions): RequestQueue;
194
+ //# sourceMappingURL=http.d.ts.map