@vizejs/composable 0.426.3 → 0.427.0

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 (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,578 @@
1
+ import { computed, readonly, shallowRef, toValue, watch } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
+
4
+ import { retryAsync } from "./retry-async.ts";
5
+ import type { RetryAsyncOptions } from "./retry-async.ts";
6
+ import { tryOnScopeDispose } from "./scope.ts";
7
+ import type { TimeoutScheduler } from "./timeout-scheduler.ts";
8
+
9
+ /** Minimal `fetch` implementation accepted by {@link useFetch}. */
10
+ export type FetchImplementation = (input: string, init: RequestInit) => Promise<Response>;
11
+
12
+ /** Built-in body readers selectable with `responseType`. */
13
+ export type FetchResponseType = "json" | "text" | "blob" | "arrayBuffer" | "formData";
14
+
15
+ /** Data type produced by each built-in {@link FetchResponseType}. */
16
+ export interface FetchResponseTypeMap {
17
+ /** Parsed JSON; narrow it with `validate`. */
18
+ readonly json: unknown;
19
+ /** Response text. */
20
+ readonly text: string;
21
+ /** Binary body as a `Blob`. */
22
+ readonly blob: Blob;
23
+ /** Binary body as an `ArrayBuffer`. */
24
+ readonly arrayBuffer: ArrayBuffer;
25
+ /** Multipart or URL-encoded form body. */
26
+ readonly formData: FormData;
27
+ }
28
+
29
+ /** Lifecycle status of a {@link useFetch} resource. */
30
+ export type FetchStatus = "idle" | "pending" | "success" | "error" | "aborted";
31
+
32
+ /** Discriminated failure reported by {@link useFetch}. */
33
+ export type FetchFailure =
34
+ | {
35
+ /** The server answered with a non-2xx status. */
36
+ readonly kind: "http";
37
+ /** HTTP status code. */
38
+ readonly status: number;
39
+ /** The complete response, body unread. */
40
+ readonly response: Response;
41
+ }
42
+ | {
43
+ /** The request could not be performed (DNS, CORS, offline, ...). */
44
+ readonly kind: "network";
45
+ /** Exact value thrown by the fetch implementation. */
46
+ readonly cause: unknown;
47
+ }
48
+ | {
49
+ /** The body could not be decoded. */
50
+ readonly kind: "parse";
51
+ /** Exact value thrown by the body reader or `parse`. */
52
+ readonly cause: unknown;
53
+ }
54
+ | {
55
+ /** The decoded body was rejected by `validate`. */
56
+ readonly kind: "invalid";
57
+ /** Rejected decoded body. */
58
+ readonly data: unknown;
59
+ }
60
+ | {
61
+ /** The request was aborted by `abort()`, a newer execution, or the scope. */
62
+ readonly kind: "aborted";
63
+ /** Abort reason. */
64
+ readonly reason: unknown;
65
+ }
66
+ | {
67
+ /** The request exceeded `timeoutMs`. */
68
+ readonly kind: "timeout";
69
+ /** Configured timeout in milliseconds. */
70
+ readonly timeoutMs: number;
71
+ };
72
+
73
+ /** Explicit outcome of one {@link FetchControls.execute} call. */
74
+ export type FetchResult<Data> =
75
+ | {
76
+ /** The request succeeded. */
77
+ readonly status: "success";
78
+ /** Decoded, validated data. */
79
+ readonly data: Data;
80
+ /** Response the data was read from. */
81
+ readonly response: Response;
82
+ }
83
+ | {
84
+ /** The request failed; see {@link FetchFailure}. */
85
+ readonly status: "error";
86
+ /** Failure details. */
87
+ readonly error: FetchFailure;
88
+ }
89
+ | {
90
+ /** A newer execution replaced this one before it settled. */
91
+ readonly status: "superseded";
92
+ };
93
+
94
+ /** Request description passed through the `beforeRequest` interceptor. */
95
+ export interface FetchRequest {
96
+ /** Resolved request URL. */
97
+ readonly url: string;
98
+ /** Request options (headers, method, body, ...). */
99
+ readonly init: RequestInit;
100
+ }
101
+
102
+ /** Context supplied to the `beforeRequest` interceptor. */
103
+ export interface FetchBeforeRequestContext extends FetchRequest {
104
+ /** Signal aborted when the execution is aborted, superseded, or times out. */
105
+ readonly signal: AbortSignal;
106
+ }
107
+
108
+ /** Context supplied to the `afterResponse` interceptor. */
109
+ export interface FetchAfterResponseContext<Data> {
110
+ /** Request that produced the response. */
111
+ readonly request: FetchRequest;
112
+ /** Successful response. */
113
+ readonly response: Response;
114
+ /** Decoded, validated data. */
115
+ readonly data: Data;
116
+ }
117
+
118
+ /** Retry policy accepted by {@link UseFetchOptions.retry}. */
119
+ export type FetchRetryOptions = Omit<RetryAsyncOptions, "signal" | "scheduler">;
120
+
121
+ /** Options for {@link useFetch}. */
122
+ export interface UseFetchOptions<Data> {
123
+ /**
124
+ * Reactive request options. Changes trigger a refetch when `refetch` is on.
125
+ *
126
+ * @default {}
127
+ */
128
+ readonly init?: MaybeRefOrGetter<RequestInit | undefined>;
129
+
130
+ /**
131
+ * Fetch implementation. Passing one explicitly also enables automatic
132
+ * execution on the server.
133
+ *
134
+ * @default window.fetch when a browser window exists
135
+ */
136
+ readonly fetch?: FetchImplementation;
137
+
138
+ /**
139
+ * Built-in body reader. Ignored when `parse` is supplied.
140
+ *
141
+ * @default "json"
142
+ */
143
+ readonly responseType?: FetchResponseType;
144
+
145
+ /**
146
+ * Custom body decoder. Throwing produces a `"parse"` failure.
147
+ *
148
+ * @default the `responseType` reader
149
+ */
150
+ readonly parse?: (response: Response) => Promise<Data>;
151
+
152
+ /**
153
+ * Type guard applied to the decoded body. Rejection produces an
154
+ * `"invalid"` failure. Without it, JSON is trusted to match `Data`.
155
+ *
156
+ * @default accepts every decoded body
157
+ */
158
+ readonly validate?: (data: unknown) => data is Data;
159
+
160
+ /**
161
+ * Execute as soon as a URL is available. Automatic execution only happens
162
+ * in a browser or when `fetch` is supplied explicitly.
163
+ *
164
+ * @default true
165
+ */
166
+ readonly immediate?: boolean;
167
+
168
+ /**
169
+ * Re-execute when the reactive URL or `init` changes.
170
+ *
171
+ * @default true
172
+ */
173
+ readonly refetch?: boolean;
174
+
175
+ /**
176
+ * Data exposed before the first success and after `reset`-like failures.
177
+ *
178
+ * @default undefined
179
+ */
180
+ readonly initialData?: Data;
181
+
182
+ /**
183
+ * Abort the request after this many milliseconds (`"timeout"` failure).
184
+ *
185
+ * @default undefined (no timeout)
186
+ */
187
+ readonly timeoutMs?: number;
188
+
189
+ /**
190
+ * Retry count or full retry policy (see `retryAsync`). By default only
191
+ * network failures and HTTP 408, 429, and 5xx responses are retried.
192
+ *
193
+ * @default 0
194
+ */
195
+ readonly retry?: number | FetchRetryOptions;
196
+
197
+ /**
198
+ * Timer host for timeouts and retry backoff.
199
+ *
200
+ * @default globalThis timer functions
201
+ */
202
+ readonly scheduler?: TimeoutScheduler;
203
+
204
+ /**
205
+ * Inspect or rewrite the request before it is sent. Return a replacement
206
+ * request, nothing to keep it, or `false` to abort the execution.
207
+ *
208
+ * @default undefined
209
+ */
210
+ readonly beforeRequest?: (
211
+ context: FetchBeforeRequestContext,
212
+ ) => FetchRequest | false | void | Promise<FetchRequest | false | void>;
213
+
214
+ /**
215
+ * Observe or transform successful data before it is committed.
216
+ *
217
+ * @default undefined
218
+ */
219
+ readonly afterResponse?: (
220
+ context: FetchAfterResponseContext<Data>,
221
+ ) => Data | void | Promise<Data | void>;
222
+
223
+ /**
224
+ * Observe failures of the newest execution.
225
+ *
226
+ * @default undefined
227
+ */
228
+ readonly onError?: (failure: FetchFailure) => void;
229
+ }
230
+
231
+ /** Reactive state and controls returned by {@link useFetch}. */
232
+ export interface FetchControls<Data> {
233
+ /** Data of the newest successful execution, or `initialData`. */
234
+ readonly data: Readonly<ShallowRef<Data | undefined>>;
235
+ /** Failure of the newest settled execution. */
236
+ readonly error: Readonly<ShallowRef<FetchFailure | undefined>>;
237
+ /** Lifecycle status driven by the newest execution. */
238
+ readonly status: Readonly<Ref<FetchStatus>>;
239
+ /** Response of the newest execution that reached the server. */
240
+ readonly response: Readonly<ShallowRef<Response | undefined>>;
241
+ /** HTTP status of `response`. */
242
+ readonly statusCode: ComputedRef<number | undefined>;
243
+ /** Whether an execution is pending. */
244
+ readonly pending: ComputedRef<boolean>;
245
+ /**
246
+ * Run the request now, superseding any pending one. Never rejects. Await it
247
+ * in `onServerPrefetch` to fetch during server rendering.
248
+ */
249
+ readonly execute: () => Promise<FetchResult<Data>>;
250
+ /**
251
+ * Abort the pending execution.
252
+ *
253
+ * @returns Whether an execution was aborted.
254
+ */
255
+ readonly abort: (reason?: unknown) => boolean;
256
+ }
257
+
258
+ interface Execution {
259
+ readonly controller: AbortController;
260
+ superseded: boolean;
261
+ }
262
+
263
+ class RetryableFailure {
264
+ readonly failure: FetchFailure;
265
+ constructor(failure: FetchFailure) {
266
+ this.failure = failure;
267
+ }
268
+ }
269
+
270
+ const TIMEOUT_REASON = "VIZE_COMPOSE_FETCH_TIMEOUT";
271
+
272
+ function browserFetch(): FetchImplementation | undefined {
273
+ if (typeof window === "undefined" || typeof window.fetch !== "function") return undefined;
274
+ const fetchImplementation = window.fetch.bind(window);
275
+ return (input, init) => fetchImplementation(input, init);
276
+ }
277
+
278
+ function isRetryableStatus(status: number): boolean {
279
+ return status === 408 || status === 429 || status >= 500;
280
+ }
281
+
282
+ function readBody(response: Response, responseType: FetchResponseType): Promise<unknown> {
283
+ switch (responseType) {
284
+ case "text":
285
+ return response.text();
286
+ case "blob":
287
+ return response.blob();
288
+ case "arrayBuffer":
289
+ return response.arrayBuffer();
290
+ case "formData":
291
+ return response.formData();
292
+ default:
293
+ return response.json();
294
+ }
295
+ }
296
+
297
+ function assertTimeout(timeoutMs: number | undefined): void {
298
+ if (timeoutMs === undefined) return;
299
+ if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
300
+ throw new RangeError(
301
+ `[VIZE_COMPOSE_FETCH_INVALID_TIMEOUT] timeoutMs must be a finite non-negative number; received ${String(timeoutMs)}`,
302
+ );
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Fetch typed data with a custom `parse` decoder.
308
+ *
309
+ * @typeParam Data Value produced by `parse`.
310
+ * @param url Reactive URL; `null`/`undefined` keeps the resource idle.
311
+ * @param options Options including the decoder.
312
+ * @returns Reactive state and controls.
313
+ */
314
+ export function useFetch<Data>(
315
+ url: MaybeRefOrGetter<string | URL | null | undefined>,
316
+ options: UseFetchOptions<Data> & { readonly parse: (response: Response) => Promise<Data> },
317
+ ): FetchControls<Data>;
318
+ /**
319
+ * Fetch a non-JSON body whose type follows `responseType`.
320
+ *
321
+ * @param url Reactive URL; `null`/`undefined` keeps the resource idle.
322
+ * @param options Options including the body reader.
323
+ * @returns Reactive state and controls.
324
+ */
325
+ export function useFetch<const Kind extends Exclude<FetchResponseType, "json">>(
326
+ url: MaybeRefOrGetter<string | URL | null | undefined>,
327
+ options: UseFetchOptions<FetchResponseTypeMap[Kind]> & { readonly responseType: Kind },
328
+ ): FetchControls<FetchResponseTypeMap[Kind]>;
329
+ /**
330
+ * Fetch JSON. Supply `validate` to narrow `unknown` to a checked type.
331
+ *
332
+ * @param url Reactive URL; `null`/`undefined` keeps the resource idle.
333
+ * @param options Options.
334
+ * @returns Reactive state and controls.
335
+ */
336
+ export function useFetch<Data = unknown>(
337
+ url: MaybeRefOrGetter<string | URL | null | undefined>,
338
+ options?: UseFetchOptions<Data> & { readonly responseType?: "json" },
339
+ ): FetchControls<Data>;
340
+ /**
341
+ * Reactive, abortable, retrying `fetch` with typed decoding and interceptors.
342
+ *
343
+ * Latest wins: starting an execution aborts the pending one, which then
344
+ * settles as `"superseded"` without touching state. The pending request is
345
+ * aborted when the owning reactive scope stops; outside a scope the caller
346
+ * owns `abort()`. Automatic execution (initial and on reactive URL/`init`
347
+ * changes) only happens in a browser or with an explicit `fetch`, so server
348
+ * rendering performs no I/O unless you `await execute()` in
349
+ * `onServerPrefetch`; state then holds `initialData` and status `"idle"`.
350
+ *
351
+ * @example
352
+ * ```ts
353
+ * const id = ref(1);
354
+ * const { data, error } = useFetch(() => `/api/users/${id.value}`, {
355
+ * validate: isUser,
356
+ * retry: 2,
357
+ * timeoutMs: 5_000,
358
+ * });
359
+ * ```
360
+ *
361
+ * @param url Reactive URL; `null`/`undefined` keeps the resource idle.
362
+ * @param options Decoding, retry, timeout, and interceptor options.
363
+ * @default options {}
364
+ * @throws {RangeError} `[VIZE_COMPOSE_FETCH_INVALID_TIMEOUT]` for an invalid timeout.
365
+ * @returns Reactive state and controls.
366
+ */
367
+ export function useFetch<Data>(
368
+ url: MaybeRefOrGetter<string | URL | null | undefined>,
369
+ options: UseFetchOptions<Data> = {},
370
+ ): FetchControls<Data> {
371
+ assertTimeout(options.timeoutMs);
372
+ const data = shallowRef<Data | undefined>(options.initialData);
373
+ const error = shallowRef<FetchFailure | undefined>(undefined);
374
+ const status = shallowRef<FetchStatus>("idle");
375
+ const response = shallowRef<Response | undefined>(undefined);
376
+ const statusCode = computed(() => response.value?.status);
377
+ const pending = computed(() => status.value === "pending");
378
+ const scheduler: TimeoutScheduler = options.scheduler ?? {
379
+ setTimeout: (callback, delayMs) => {
380
+ const handle = globalThis.setTimeout(callback, delayMs);
381
+ return () => globalThis.clearTimeout(handle);
382
+ },
383
+ clearTimeout: (cancel) => {
384
+ if (typeof cancel === "function") cancel();
385
+ },
386
+ };
387
+ let active: Execution | undefined;
388
+
389
+ const resolveFetch = (): FetchImplementation | undefined => options.fetch ?? browserFetch();
390
+
391
+ const decode = async (result: Response): Promise<unknown> =>
392
+ options.parse ? options.parse(result) : readBody(result, options.responseType ?? "json");
393
+
394
+ const accepts = (candidate: unknown): candidate is Data =>
395
+ // Without `validate`, the caller's `Data` argument is a declared trust
396
+ // boundary for the decoded body (exactly like `Response.json()`).
397
+ options.validate ? options.validate(candidate) : true;
398
+
399
+ const fail = (failure: FetchFailure, record: Execution): FetchResult<Data> => {
400
+ if (active !== record) return { status: "superseded" };
401
+ active = undefined;
402
+ error.value = failure;
403
+ status.value = failure.kind === "aborted" ? "aborted" : "error";
404
+ options.onError?.(failure);
405
+ return { status: "error", error: failure };
406
+ };
407
+
408
+ const abortFailure = (signal: AbortSignal, timeoutMs: number | undefined): FetchFailure =>
409
+ signal.reason === TIMEOUT_REASON && timeoutMs !== undefined
410
+ ? { kind: "timeout", timeoutMs }
411
+ : { kind: "aborted", reason: signal.reason };
412
+
413
+ const execute = async (): Promise<FetchResult<Data>> => {
414
+ if (active !== undefined) {
415
+ active.superseded = true;
416
+ active.controller.abort(new DOMException("A newer fetch started.", "AbortError"));
417
+ }
418
+ const record: Execution = { controller: new AbortController(), superseded: false };
419
+ active = record;
420
+ const { signal } = record.controller;
421
+ error.value = undefined;
422
+ status.value = "pending";
423
+
424
+ const target = toValue(url);
425
+ const fetchImplementation = resolveFetch();
426
+ if (target === null || target === undefined || fetchImplementation === undefined) {
427
+ return fail(
428
+ {
429
+ kind: "network",
430
+ cause: new TypeError(
431
+ target === null || target === undefined
432
+ ? "[VIZE_COMPOSE_FETCH_NO_URL] no request URL is available"
433
+ : "[VIZE_COMPOSE_FETCH_UNSUPPORTED] no fetch implementation is available",
434
+ ),
435
+ },
436
+ record,
437
+ );
438
+ }
439
+
440
+ const timeoutMs = options.timeoutMs;
441
+ const timer =
442
+ timeoutMs === undefined
443
+ ? undefined
444
+ : scheduler.setTimeout(() => record.controller.abort(TIMEOUT_REASON), timeoutMs);
445
+
446
+ try {
447
+ let request: FetchRequest = { url: String(target), init: { ...toValue(options.init) } };
448
+ if (options.beforeRequest) {
449
+ const replaced = await options.beforeRequest({ ...request, signal });
450
+ if (replaced === false) {
451
+ record.controller.abort(
452
+ new DOMException("beforeRequest cancelled the request.", "AbortError"),
453
+ );
454
+ } else if (replaced) {
455
+ request = replaced;
456
+ }
457
+ }
458
+ if (signal.aborted) {
459
+ return record.superseded
460
+ ? { status: "superseded" }
461
+ : fail(abortFailure(signal, timeoutMs), record);
462
+ }
463
+
464
+ const retry = options.retry ?? 0;
465
+ const retryOptions: FetchRetryOptions =
466
+ typeof retry === "number" ? { maximumRetries: retry, initialDelayMs: 0 } : retry;
467
+ const userShouldRetry = retryOptions.shouldRetry;
468
+ const attemptOutcome = await retryAsync(
469
+ async () => {
470
+ let result: Response;
471
+ try {
472
+ result = await fetchImplementation(request.url, { ...request.init, signal });
473
+ } catch (cause) {
474
+ throw new RetryableFailure({ kind: "network", cause });
475
+ }
476
+ if (!result.ok && isRetryableStatus(result.status)) {
477
+ throw new RetryableFailure({ kind: "http", status: result.status, response: result });
478
+ }
479
+ return result;
480
+ },
481
+ {
482
+ ...retryOptions,
483
+ signal,
484
+ scheduler,
485
+ shouldRetry: (context) =>
486
+ userShouldRetry ? userShouldRetry(context) : context.error instanceof RetryableFailure,
487
+ },
488
+ ).then(
489
+ (result) => ({ ok: true, result }) as const,
490
+ (cause: unknown) => ({ ok: false, cause }) as const,
491
+ );
492
+
493
+ if (!attemptOutcome.ok) {
494
+ if (signal.aborted) {
495
+ return record.superseded
496
+ ? { status: "superseded" }
497
+ : fail(abortFailure(signal, timeoutMs), record);
498
+ }
499
+ const { cause } = attemptOutcome;
500
+ if (active === record && cause instanceof RetryableFailure) {
501
+ if (cause.failure.kind === "http") response.value = cause.failure.response;
502
+ return fail(cause.failure, record);
503
+ }
504
+ return fail({ kind: "network", cause }, record);
505
+ }
506
+
507
+ const result = attemptOutcome.result;
508
+ if (active === record) response.value = result;
509
+ if (!result.ok)
510
+ return fail({ kind: "http", status: result.status, response: result }, record);
511
+
512
+ let decoded: unknown;
513
+ try {
514
+ decoded = await decode(result);
515
+ } catch (cause) {
516
+ if (signal.aborted) {
517
+ return record.superseded
518
+ ? { status: "superseded" }
519
+ : fail(abortFailure(signal, timeoutMs), record);
520
+ }
521
+ return fail({ kind: "parse", cause }, record);
522
+ }
523
+ if (!accepts(decoded)) return fail({ kind: "invalid", data: decoded }, record);
524
+ let value: Data = decoded;
525
+ if (options.afterResponse) {
526
+ const transformed = await options.afterResponse({ request, response: result, data: value });
527
+ if (transformed !== undefined) value = transformed;
528
+ }
529
+ if (active !== record) return { status: "superseded" };
530
+ active = undefined;
531
+ data.value = value;
532
+ status.value = "success";
533
+ return { status: "success", data: value, response: result };
534
+ } catch (cause) {
535
+ // Interceptor failures surface as network-level failures.
536
+ return fail({ kind: "network", cause }, record);
537
+ } finally {
538
+ if (timer !== undefined) scheduler.clearTimeout(timer);
539
+ }
540
+ };
541
+
542
+ const abort = (reason: unknown = new DOMException("The request was aborted.", "AbortError")) => {
543
+ if (active === undefined) return false;
544
+ active.controller.abort(reason);
545
+ return true;
546
+ };
547
+
548
+ const automatic = options.fetch !== undefined || typeof window !== "undefined";
549
+ if (automatic) {
550
+ let initial = true;
551
+ const stop = watch(
552
+ [() => toValue(url), () => toValue(options.init)],
553
+ ([target]) => {
554
+ const first = initial;
555
+ initial = false;
556
+ if (target === null || target === undefined) return;
557
+ if (first ? (options.immediate ?? true) : (options.refetch ?? true)) void execute();
558
+ },
559
+ { immediate: true, deep: true },
560
+ );
561
+ tryOnScopeDispose(stop);
562
+ }
563
+
564
+ tryOnScopeDispose(() => {
565
+ abort(new DOMException("The reactive scope was disposed.", "AbortError"));
566
+ });
567
+
568
+ return {
569
+ data,
570
+ error,
571
+ status: readonly(status),
572
+ response,
573
+ statusCode,
574
+ pending,
575
+ execute,
576
+ abort,
577
+ };
578
+ }