sibujs 1.0.0-beta.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 (302) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1630 -0
  3. package/dist/browser.cjs +815 -0
  4. package/dist/browser.d.cts +174 -0
  5. package/dist/browser.d.ts +174 -0
  6. package/dist/browser.js +458 -0
  7. package/dist/build.cjs +4970 -0
  8. package/dist/build.d.cts +630 -0
  9. package/dist/build.d.ts +630 -0
  10. package/dist/build.js +2478 -0
  11. package/dist/cdn.global.js +115 -0
  12. package/dist/chunk-27QC4FPL.js +67 -0
  13. package/dist/chunk-2ABBWCGC.js +65 -0
  14. package/dist/chunk-2MUNQYZ7.js +26 -0
  15. package/dist/chunk-2PSPKNUI.js +1711 -0
  16. package/dist/chunk-35CDLDX5.js +1758 -0
  17. package/dist/chunk-36MU4CFV.js +41 -0
  18. package/dist/chunk-3FIQOFI6.js +182 -0
  19. package/dist/chunk-3GHNC2BN.js +28 -0
  20. package/dist/chunk-3HLWWEPU.js +909 -0
  21. package/dist/chunk-3IVI3J54.js +252 -0
  22. package/dist/chunk-3KZ72WNW.js +944 -0
  23. package/dist/chunk-4AU64SQV.js +182 -0
  24. package/dist/chunk-4MOK7HAR.js +84 -0
  25. package/dist/chunk-4QK6FBDH.js +1429 -0
  26. package/dist/chunk-566Z7HXB.js +737 -0
  27. package/dist/chunk-5CRBB7XP.js +358 -0
  28. package/dist/chunk-5G67D3IZ.js +168 -0
  29. package/dist/chunk-5NCPAWBE.js +99 -0
  30. package/dist/chunk-5O2RKXR3.js +1444 -0
  31. package/dist/chunk-6BTBDO6A.js +633 -0
  32. package/dist/chunk-6IWEHW57.js +43 -0
  33. package/dist/chunk-6JGMNCD6.js +282 -0
  34. package/dist/chunk-6QRLJNXR.js +1425 -0
  35. package/dist/chunk-7HM5UE5T.js +270 -0
  36. package/dist/chunk-7JOLTGUH.js +58 -0
  37. package/dist/chunk-7MCWJCQK.js +909 -0
  38. package/dist/chunk-7RIIFP3E.js +1758 -0
  39. package/dist/chunk-7UASYN3G.js +254 -0
  40. package/dist/chunk-7W2WYHDI.js +741 -0
  41. package/dist/chunk-7Y35RDSJ.js +872 -0
  42. package/dist/chunk-A65GFJBL.js +65 -0
  43. package/dist/chunk-AD6ZIEDK.js +67 -0
  44. package/dist/chunk-AK5Y72F3.js +1426 -0
  45. package/dist/chunk-APOMMWH4.js +282 -0
  46. package/dist/chunk-ARZVTWIQ.js +1750 -0
  47. package/dist/chunk-AWWBM2BI.js +664 -0
  48. package/dist/chunk-AX5VEQTY.js +58 -0
  49. package/dist/chunk-AYTXVOW3.js +1708 -0
  50. package/dist/chunk-BG4A246G.js +1746 -0
  51. package/dist/chunk-BNFJJA2L.js +1425 -0
  52. package/dist/chunk-BPKPBVU5.js +59 -0
  53. package/dist/chunk-BPKPPSXC.js +282 -0
  54. package/dist/chunk-BPWKKK7F.js +1711 -0
  55. package/dist/chunk-CCKX6YTC.js +1735 -0
  56. package/dist/chunk-CIF5Z3MP.js +58 -0
  57. package/dist/chunk-CSXYU7IO.js +457 -0
  58. package/dist/chunk-D6JD4FDC.js +26 -0
  59. package/dist/chunk-E7NGA7X2.js +59 -0
  60. package/dist/chunk-EEPPJKAE.js +443 -0
  61. package/dist/chunk-EJMYGAGQ.js +717 -0
  62. package/dist/chunk-EL6Z5MDY.js +55 -0
  63. package/dist/chunk-EP7VRLEB.js +41 -0
  64. package/dist/chunk-ETMEC6FH.js +99 -0
  65. package/dist/chunk-EZ2WHYVL.js +65 -0
  66. package/dist/chunk-EZRVMSZK.js +67 -0
  67. package/dist/chunk-F2TRGINX.js +254 -0
  68. package/dist/chunk-F5JCIH3Q.js +642 -0
  69. package/dist/chunk-FGK3JKMN.js +909 -0
  70. package/dist/chunk-FQWPKSTD.js +1437 -0
  71. package/dist/chunk-FWHVLMCI.js +26 -0
  72. package/dist/chunk-GBEYQRO2.js +303 -0
  73. package/dist/chunk-GBLES3NK.js +248 -0
  74. package/dist/chunk-GQVGUQW6.js +1436 -0
  75. package/dist/chunk-HCV2T76T.js +457 -0
  76. package/dist/chunk-HS7ZKVPR.js +182 -0
  77. package/dist/chunk-HXDVV7HZ.js +909 -0
  78. package/dist/chunk-IB23VMO3.js +1746 -0
  79. package/dist/chunk-IEMZ7RTT.js +99 -0
  80. package/dist/chunk-IPGRSN42.js +1750 -0
  81. package/dist/chunk-IVMOK2QN.js +1750 -0
  82. package/dist/chunk-JCLGQO7T.js +443 -0
  83. package/dist/chunk-JDXL7KDB.js +1436 -0
  84. package/dist/chunk-JIIFW636.js +270 -0
  85. package/dist/chunk-JWGEEH7H.js +944 -0
  86. package/dist/chunk-K2BESAG7.js +1688 -0
  87. package/dist/chunk-K2U5YGF4.js +877 -0
  88. package/dist/chunk-K45FQ4Y4.js +175 -0
  89. package/dist/chunk-K7BPE427.js +1432 -0
  90. package/dist/chunk-KL3266RS.js +26 -0
  91. package/dist/chunk-KNN4P7DZ.js +84 -0
  92. package/dist/chunk-KP2DZH5Q.js +254 -0
  93. package/dist/chunk-KZHAJSQR.js +1636 -0
  94. package/dist/chunk-LBKGHMQV.js +1750 -0
  95. package/dist/chunk-LBTEPL7A.js +1731 -0
  96. package/dist/chunk-LEBBPTDB.js +1444 -0
  97. package/dist/chunk-LLH63WVQ.js +98 -0
  98. package/dist/chunk-LWVR2C4G.js +1711 -0
  99. package/dist/chunk-M3MDTVV2.js +896 -0
  100. package/dist/chunk-M5GNLDEO.js +303 -0
  101. package/dist/chunk-MFHVGKET.js +267 -0
  102. package/dist/chunk-MGWSG3PM.js +358 -0
  103. package/dist/chunk-MJNB47HB.js +19 -0
  104. package/dist/chunk-MLKGABMK.js +9 -0
  105. package/dist/chunk-MQWTY3JY.js +944 -0
  106. package/dist/chunk-MZZOQHNI.js +642 -0
  107. package/dist/chunk-NIHWGZS4.js +1426 -0
  108. package/dist/chunk-NSVVHQK5.js +41 -0
  109. package/dist/chunk-NVI2WE7D.js +443 -0
  110. package/dist/chunk-O7QBO3PH.js +58 -0
  111. package/dist/chunk-OAUPQBO2.js +270 -0
  112. package/dist/chunk-OB2LMD7C.js +297 -0
  113. package/dist/chunk-OHEYBWQU.js +58 -0
  114. package/dist/chunk-OI6OXUHJ.js +443 -0
  115. package/dist/chunk-OX2VMRMV.js +633 -0
  116. package/dist/chunk-P4FYE5TX.js +866 -0
  117. package/dist/chunk-P5KFWM4H.js +98 -0
  118. package/dist/chunk-PUMLE7RJ.js +1711 -0
  119. package/dist/chunk-Q4MFANBF.js +282 -0
  120. package/dist/chunk-QLEKZMMU.js +282 -0
  121. package/dist/chunk-RGGNGVO3.js +98 -0
  122. package/dist/chunk-RKJDRVV6.js +443 -0
  123. package/dist/chunk-S5BHU353.js +43 -0
  124. package/dist/chunk-SHQUSFH7.js +1426 -0
  125. package/dist/chunk-SMB4DBMD.js +182 -0
  126. package/dist/chunk-SNYHQP3D.js +743 -0
  127. package/dist/chunk-T24L3TBF.js +1717 -0
  128. package/dist/chunk-TAQNSOKT.js +692 -0
  129. package/dist/chunk-TDNY4SUA.js +41 -0
  130. package/dist/chunk-TNNF56IQ.js +1750 -0
  131. package/dist/chunk-TR7E6LYX.js +457 -0
  132. package/dist/chunk-URWUFH45.js +98 -0
  133. package/dist/chunk-UUSIH3XH.js +1429 -0
  134. package/dist/chunk-UYFNXLKR.js +1436 -0
  135. package/dist/chunk-V6F7KUWD.js +270 -0
  136. package/dist/chunk-VCZLXRMR.js +254 -0
  137. package/dist/chunk-VDHXSSBT.js +1426 -0
  138. package/dist/chunk-VM4QMKVK.js +254 -0
  139. package/dist/chunk-VWGYKYL2.js +737 -0
  140. package/dist/chunk-VX2OFBJN.js +1426 -0
  141. package/dist/chunk-VXVIE6DG.js +84 -0
  142. package/dist/chunk-W4OH7HG4.js +40 -0
  143. package/dist/chunk-WBVJX4GZ.js +98 -0
  144. package/dist/chunk-WDU2ZV4I.js +1426 -0
  145. package/dist/chunk-X6VUCICU.js +457 -0
  146. package/dist/chunk-XAY7FM7Y.js +618 -0
  147. package/dist/chunk-XJZ5Z2CM.js +642 -0
  148. package/dist/chunk-XKVFQTJJ.js +254 -0
  149. package/dist/chunk-XRLFASCY.js +22 -0
  150. package/dist/chunk-XYU6TZOW.js +182 -0
  151. package/dist/chunk-Y745CBVB.js +944 -0
  152. package/dist/chunk-YLBJSXYY.js +944 -0
  153. package/dist/chunk-YQJIKVPZ.js +1429 -0
  154. package/dist/chunk-YRM2VCZF.js +457 -0
  155. package/dist/chunk-YS33KBVJ.js +944 -0
  156. package/dist/chunk-Z27DZPDG.js +41 -0
  157. package/dist/chunk-ZXQ5NAEN.js +32 -0
  158. package/dist/contracts-B552GopR.d.cts +245 -0
  159. package/dist/contracts-B552GopR.d.ts +245 -0
  160. package/dist/contracts-Bg1ECISC.d.cts +245 -0
  161. package/dist/contracts-Bg1ECISC.d.ts +245 -0
  162. package/dist/contracts-CMriKJ6P.d.cts +245 -0
  163. package/dist/contracts-CMriKJ6P.d.ts +245 -0
  164. package/dist/contracts-DOrhwbke.d.cts +245 -0
  165. package/dist/contracts-DOrhwbke.d.ts +245 -0
  166. package/dist/data.cjs +1373 -0
  167. package/dist/data.d.cts +434 -0
  168. package/dist/data.d.ts +434 -0
  169. package/dist/data.js +945 -0
  170. package/dist/devtools.cjs +1357 -0
  171. package/dist/devtools.d.cts +473 -0
  172. package/dist/devtools.d.ts +473 -0
  173. package/dist/devtools.js +1084 -0
  174. package/dist/ecosystem.cjs +1046 -0
  175. package/dist/ecosystem.d.cts +247 -0
  176. package/dist/ecosystem.d.ts +247 -0
  177. package/dist/ecosystem.js +369 -0
  178. package/dist/extras.cjs +8457 -0
  179. package/dist/extras.d.cts +2356 -0
  180. package/dist/extras.d.ts +2356 -0
  181. package/dist/extras.js +5152 -0
  182. package/dist/index.cjs +2648 -0
  183. package/dist/index.d.cts +869 -0
  184. package/dist/index.d.ts +869 -0
  185. package/dist/index.js +386 -0
  186. package/dist/motion.cjs +604 -0
  187. package/dist/motion.d.cts +146 -0
  188. package/dist/motion.d.ts +146 -0
  189. package/dist/motion.js +346 -0
  190. package/dist/patterns.cjs +815 -0
  191. package/dist/patterns.d.cts +163 -0
  192. package/dist/patterns.d.ts +163 -0
  193. package/dist/patterns.js +296 -0
  194. package/dist/performance.cjs +927 -0
  195. package/dist/performance.d.cts +416 -0
  196. package/dist/performance.d.ts +416 -0
  197. package/dist/performance.js +654 -0
  198. package/dist/plugins.cjs +2487 -0
  199. package/dist/plugins.d.cts +393 -0
  200. package/dist/plugins.d.ts +393 -0
  201. package/dist/plugins.js +1504 -0
  202. package/dist/signal-BnWpq6WB.d.cts +5 -0
  203. package/dist/signal-BnWpq6WB.d.ts +5 -0
  204. package/dist/src/components/ErrorBoundary.d.ts +15 -0
  205. package/dist/src/components/ErrorBoundary.js +119 -0
  206. package/dist/src/core/catch.d.ts +11 -0
  207. package/dist/src/core/catch.js +28 -0
  208. package/dist/src/core/each.d.ts +13 -0
  209. package/dist/src/core/each.js +68 -0
  210. package/dist/src/core/for.d.ts +12 -0
  211. package/dist/src/core/for.js +67 -0
  212. package/dist/src/core/html.d.ts +137 -0
  213. package/dist/src/core/html.js +155 -0
  214. package/dist/src/core/htmlIf.d.ts +11 -0
  215. package/dist/src/core/htmlIf.js +18 -0
  216. package/dist/src/core/lazy.d.ts +7 -0
  217. package/dist/src/core/lazy.js +16 -0
  218. package/dist/src/core/mount.d.ts +7 -0
  219. package/dist/src/core/mount.js +12 -0
  220. package/dist/src/core/slots.d.ts +3 -0
  221. package/dist/src/core/slots.js +3 -0
  222. package/dist/src/core/suspense.d.ts +10 -0
  223. package/dist/src/core/suspense.js +33 -0
  224. package/dist/src/core/tagFactory.d.ts +13 -0
  225. package/dist/src/core/tagFactory.js +86 -0
  226. package/dist/src/core/test.d.ts +11 -0
  227. package/dist/src/core/test.js +28 -0
  228. package/dist/src/core/types.d.ts +2 -0
  229. package/dist/src/core/types.js +1 -0
  230. package/dist/src/core/useComputed.d.ts +6 -0
  231. package/dist/src/core/useComputed.js +30 -0
  232. package/dist/src/core/useEffect.d.ts +6 -0
  233. package/dist/src/core/useEffect.js +23 -0
  234. package/dist/src/core/useState.d.ts +10 -0
  235. package/dist/src/core/useState.js +34 -0
  236. package/dist/src/core/useStore.d.ts +19 -0
  237. package/dist/src/core/useStore.js +53 -0
  238. package/dist/src/core/useWatch.d.ts +8 -0
  239. package/dist/src/core/useWatch.js +23 -0
  240. package/dist/src/plugins/i18n.d.ts +6 -0
  241. package/dist/src/plugins/i18n.js +16 -0
  242. package/dist/src/plugins/router.d.ts +188 -0
  243. package/dist/src/plugins/router.js +1178 -0
  244. package/dist/src/reactivity/bindAttribute.d.ts +5 -0
  245. package/dist/src/reactivity/bindAttribute.js +31 -0
  246. package/dist/src/reactivity/bindChildNode.d.ts +10 -0
  247. package/dist/src/reactivity/bindChildNode.js +46 -0
  248. package/dist/src/reactivity/bindTextNode.d.ts +10 -0
  249. package/dist/src/reactivity/bindTextNode.js +27 -0
  250. package/dist/src/reactivity/signal.d.ts +3 -0
  251. package/dist/src/reactivity/signal.js +1 -0
  252. package/dist/src/reactivity/track.d.ts +18 -0
  253. package/dist/src/reactivity/track.js +73 -0
  254. package/dist/src/reactivity/useComputed.d.ts +6 -0
  255. package/dist/src/reactivity/useComputed.js +30 -0
  256. package/dist/src/reactivity/useEffect.d.ts +6 -0
  257. package/dist/src/reactivity/useEffect.js +23 -0
  258. package/dist/src/reactivity/useState.d.ts +10 -0
  259. package/dist/src/reactivity/useState.js +34 -0
  260. package/dist/src/reactivity/useStore.d.ts +19 -0
  261. package/dist/src/reactivity/useStore.js +53 -0
  262. package/dist/src/reactivity/useWatch.d.ts +8 -0
  263. package/dist/src/reactivity/useWatch.js +23 -0
  264. package/dist/src/utils/sanitize.d.ts +1 -0
  265. package/dist/src/utils/sanitize.js +8 -0
  266. package/dist/ssr-27FOM46T.js +35 -0
  267. package/dist/ssr-GFUTTSJD.js +22 -0
  268. package/dist/ssr-K7DCR6BZ.js +35 -0
  269. package/dist/ssr-O6LFMRFP.js +35 -0
  270. package/dist/ssr-QZEVGMMK.js +35 -0
  271. package/dist/ssr-SGVBCAGC.js +35 -0
  272. package/dist/ssr-UB2IXCYX.js +35 -0
  273. package/dist/ssr-XBZQNV4O.js +22 -0
  274. package/dist/ssr-Y76FSXDU.js +35 -0
  275. package/dist/ssr-YQJ4AYBD.js +35 -0
  276. package/dist/ssr.cjs +1757 -0
  277. package/dist/ssr.d.cts +478 -0
  278. package/dist/ssr.d.ts +478 -0
  279. package/dist/ssr.js +743 -0
  280. package/dist/tagFactory-CZPO4RXF.d.cts +34 -0
  281. package/dist/tagFactory-CZPO4RXF.d.ts +34 -0
  282. package/dist/tagFactory-CgImPVMY.d.cts +22 -0
  283. package/dist/tagFactory-CgImPVMY.d.ts +22 -0
  284. package/dist/tagFactory-Cw1iv5if.d.cts +22 -0
  285. package/dist/tagFactory-Cw1iv5if.d.ts +22 -0
  286. package/dist/tagFactory-DeAXq9ef.d.cts +30 -0
  287. package/dist/tagFactory-DeAXq9ef.d.ts +30 -0
  288. package/dist/tagFactory-SkY0a7L1.d.cts +22 -0
  289. package/dist/tagFactory-SkY0a7L1.d.ts +22 -0
  290. package/dist/testing.cjs +1919 -0
  291. package/dist/testing.d.cts +491 -0
  292. package/dist/testing.d.ts +491 -0
  293. package/dist/testing.js +1862 -0
  294. package/dist/ui.cjs +1497 -0
  295. package/dist/ui.d.cts +264 -0
  296. package/dist/ui.d.ts +264 -0
  297. package/dist/ui.js +900 -0
  298. package/dist/widgets.cjs +919 -0
  299. package/dist/widgets.d.cts +165 -0
  300. package/dist/widgets.d.ts +165 -0
  301. package/dist/widgets.js +545 -0
  302. package/package.json +134 -0
package/dist/data.cjs ADDED
@@ -0,0 +1,1373 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // data.ts
21
+ var data_exports = {};
22
+ __export(data_exports, {
23
+ calculateDelay: () => calculateDelay,
24
+ clearQueryCache: () => clearQueryCache,
25
+ debounce: () => debounce,
26
+ executeLoader: () => executeLoader,
27
+ getQueryData: () => getQueryData,
28
+ infiniteQuery: () => infiniteQuery,
29
+ invalidateQueries: () => invalidateQueries,
30
+ loaderData: () => loaderData,
31
+ mutation: () => mutation,
32
+ offlineStore: () => offlineStore,
33
+ preloadRoute: () => preloadRoute,
34
+ previous: () => previous,
35
+ query: () => query,
36
+ resource: () => resource,
37
+ setQueryData: () => setQueryData,
38
+ socket: () => socket,
39
+ stream: () => stream,
40
+ syncAdapter: () => syncAdapter,
41
+ throttle: () => throttle,
42
+ withRetry: () => withRetry
43
+ });
44
+ module.exports = __toCommonJS(data_exports);
45
+
46
+ // src/reactivity/track.ts
47
+ var subscriberStack = [];
48
+ var currentSubscriber = null;
49
+ var signalSubscribers = /* @__PURE__ */ new WeakMap();
50
+ var SUBS = "__s";
51
+ var notifyDepth = 0;
52
+ var pendingQueue = [];
53
+ var pendingSet = /* @__PURE__ */ new Set();
54
+ var suspendDepth = 0;
55
+ var trackingSuspended = false;
56
+ function track(effectFn, subscriber) {
57
+ if (!subscriber) subscriber = effectFn;
58
+ cleanup(subscriber);
59
+ subscriberStack.push(subscriber);
60
+ currentSubscriber = subscriber;
61
+ effectFn();
62
+ subscriberStack.pop();
63
+ currentSubscriber = subscriberStack[subscriberStack.length - 1] || null;
64
+ return () => cleanup(subscriber);
65
+ }
66
+ function suspendTracking() {
67
+ if (suspendDepth === 0) {
68
+ subscriberStack.push(null);
69
+ currentSubscriber = null;
70
+ trackingSuspended = true;
71
+ }
72
+ suspendDepth++;
73
+ }
74
+ function resumeTracking() {
75
+ suspendDepth--;
76
+ if (suspendDepth === 0) {
77
+ subscriberStack.pop();
78
+ currentSubscriber = subscriberStack[subscriberStack.length - 1] || null;
79
+ trackingSuspended = false;
80
+ }
81
+ }
82
+ function recordDependency(signal2) {
83
+ if (!currentSubscriber) return;
84
+ let deps = currentSubscriber._deps;
85
+ if (!deps) {
86
+ deps = /* @__PURE__ */ new Set();
87
+ currentSubscriber._deps = deps;
88
+ }
89
+ if (!deps.has(signal2)) {
90
+ deps.add(signal2);
91
+ let subs = signal2[SUBS];
92
+ if (!subs) {
93
+ subs = /* @__PURE__ */ new Set();
94
+ signalSubscribers.set(signal2, subs);
95
+ signal2[SUBS] = subs;
96
+ }
97
+ subs.add(currentSubscriber);
98
+ if (subs.size === 1) {
99
+ signal2.__f = currentSubscriber;
100
+ } else if (signal2.__f !== void 0) {
101
+ signal2.__f = void 0;
102
+ }
103
+ }
104
+ }
105
+ function queueSignalNotification(signal2) {
106
+ const subs = signal2[SUBS];
107
+ if (!subs) return;
108
+ for (const sub of subs) {
109
+ if (sub._c) {
110
+ propagateDirty(sub);
111
+ } else if (!pendingSet.has(sub)) {
112
+ pendingSet.add(sub);
113
+ pendingQueue.push(sub);
114
+ }
115
+ }
116
+ }
117
+ function drainNotificationQueue() {
118
+ if (notifyDepth > 0) return;
119
+ notifyDepth++;
120
+ try {
121
+ let i = 0;
122
+ while (i < pendingQueue.length) {
123
+ pendingQueue[i]();
124
+ i++;
125
+ }
126
+ } finally {
127
+ pendingQueue.length = 0;
128
+ pendingSet.clear();
129
+ notifyDepth--;
130
+ }
131
+ }
132
+ function propagateDirty(sub) {
133
+ sub();
134
+ let sig = sub._sig;
135
+ let suspended = false;
136
+ if (sig && sig._g) {
137
+ const sDeps = sub._deps;
138
+ if (sDeps && sDeps.size === 1) {
139
+ suspendTracking();
140
+ suspended = true;
141
+ const s = sig;
142
+ s._d = false;
143
+ s._v = s._g();
144
+ }
145
+ }
146
+ while (sig) {
147
+ const first = sig.__f;
148
+ if (first) {
149
+ if (first._c) {
150
+ const nSig = first._sig;
151
+ nSig._d = true;
152
+ if (suspended && nSig._g) {
153
+ const fDeps = first._deps;
154
+ if (fDeps && fDeps.size === 1) {
155
+ nSig._d = false;
156
+ nSig._v = nSig._g();
157
+ }
158
+ }
159
+ sig = nSig;
160
+ continue;
161
+ }
162
+ if (!pendingSet.has(first)) {
163
+ pendingSet.add(first);
164
+ pendingQueue.push(first);
165
+ }
166
+ break;
167
+ }
168
+ const subs = sig[SUBS];
169
+ if (!subs) break;
170
+ let nextSig;
171
+ for (const s of subs) {
172
+ if (s._c) {
173
+ s();
174
+ const nSig = s._sig;
175
+ if (nSig && !nextSig) {
176
+ nextSig = nSig;
177
+ } else if (nSig) {
178
+ propagateDirty(s);
179
+ }
180
+ } else if (!pendingSet.has(s)) {
181
+ pendingSet.add(s);
182
+ pendingQueue.push(s);
183
+ }
184
+ }
185
+ sig = nextSig;
186
+ }
187
+ if (suspended) resumeTracking();
188
+ }
189
+ function notifySubscribers(signal2) {
190
+ const first = signal2.__f;
191
+ if (first) {
192
+ if (notifyDepth > 0) {
193
+ if (first._c) {
194
+ propagateDirty(first);
195
+ } else if (!pendingSet.has(first)) {
196
+ pendingSet.add(first);
197
+ pendingQueue.push(first);
198
+ }
199
+ return;
200
+ }
201
+ notifyDepth++;
202
+ try {
203
+ if (first._c) {
204
+ propagateDirty(first);
205
+ } else {
206
+ first();
207
+ }
208
+ let i = 0;
209
+ while (i < pendingQueue.length) {
210
+ pendingQueue[i]();
211
+ i++;
212
+ }
213
+ } finally {
214
+ pendingQueue.length = 0;
215
+ pendingSet.clear();
216
+ notifyDepth--;
217
+ }
218
+ return;
219
+ }
220
+ const subs = signal2[SUBS];
221
+ if (!subs || subs.size === 0) return;
222
+ if (notifyDepth > 0) {
223
+ for (const sub of subs) {
224
+ if (sub._c) {
225
+ propagateDirty(sub);
226
+ } else if (!pendingSet.has(sub)) {
227
+ pendingSet.add(sub);
228
+ pendingQueue.push(sub);
229
+ }
230
+ }
231
+ return;
232
+ }
233
+ notifyDepth++;
234
+ try {
235
+ let directCount = 0;
236
+ for (const sub of subs) {
237
+ pendingQueue[directCount++] = sub;
238
+ }
239
+ for (let i2 = 0; i2 < directCount; i2++) {
240
+ if (pendingQueue[i2]._c) {
241
+ propagateDirty(pendingQueue[i2]);
242
+ }
243
+ }
244
+ for (let i2 = 0; i2 < directCount; i2++) {
245
+ if (!pendingQueue[i2]._c) {
246
+ if (!pendingSet.has(pendingQueue[i2])) {
247
+ pendingQueue[i2]();
248
+ }
249
+ }
250
+ }
251
+ let i = directCount;
252
+ while (i < pendingQueue.length) {
253
+ pendingQueue[i]();
254
+ i++;
255
+ }
256
+ } finally {
257
+ pendingQueue.length = 0;
258
+ pendingSet.clear();
259
+ notifyDepth--;
260
+ }
261
+ }
262
+ function cleanup(subscriber) {
263
+ const deps = subscriber._deps;
264
+ if (!deps || deps.size === 0) return;
265
+ for (const signal2 of deps) {
266
+ const subs = signal2[SUBS];
267
+ if (subs) {
268
+ subs.delete(subscriber);
269
+ if (signal2.__f === subscriber) {
270
+ signal2.__f = void 0;
271
+ }
272
+ }
273
+ }
274
+ deps.clear();
275
+ }
276
+
277
+ // src/core/dev.ts
278
+ function isDev() {
279
+ return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : true;
280
+ }
281
+ function devAssert(condition, message) {
282
+ if (isDev() && !condition) {
283
+ throw new Error(`[Sibu] ${message}`);
284
+ }
285
+ }
286
+
287
+ // src/core/signals/derived.ts
288
+ function derived(getter, options) {
289
+ devAssert(typeof getter === "function", "derived: argument must be a getter function.");
290
+ const debugName = options?.name;
291
+ const cs = {};
292
+ cs._d = false;
293
+ cs._g = getter;
294
+ const markDirty = () => {
295
+ if (cs._d) return;
296
+ cs._d = true;
297
+ };
298
+ markDirty._c = 1;
299
+ markDirty._sig = cs;
300
+ track(() => {
301
+ cs._d = false;
302
+ cs._v = getter();
303
+ }, markDirty);
304
+ const hook = globalThis.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
305
+ function computedGetter() {
306
+ if (trackingSuspended) {
307
+ if (cs._d) {
308
+ cs._d = false;
309
+ cs._v = getter();
310
+ }
311
+ return cs._v;
312
+ }
313
+ recordDependency(cs);
314
+ if (cs._d) {
315
+ const oldValue = cs._v;
316
+ cs._d = false;
317
+ suspendTracking();
318
+ try {
319
+ cs._v = getter();
320
+ } finally {
321
+ resumeTracking();
322
+ }
323
+ if (hook && oldValue !== cs._v) {
324
+ hook.emit("computed:update", { signal: cs, oldValue, newValue: cs._v });
325
+ }
326
+ }
327
+ return cs._v;
328
+ }
329
+ if (debugName) {
330
+ computedGetter.__name = debugName;
331
+ cs.__name = debugName;
332
+ }
333
+ computedGetter.__signal = cs;
334
+ if (hook) hook.emit("computed:create", { signal: cs, name: debugName, getter: computedGetter });
335
+ return computedGetter;
336
+ }
337
+
338
+ // src/core/ssr-context.ts
339
+ var ssrMode = false;
340
+ function isSSR() {
341
+ return ssrMode;
342
+ }
343
+
344
+ // src/core/signals/effect.ts
345
+ function effect(effectFn) {
346
+ devAssert(typeof effectFn === "function", "effect: argument must be a function.");
347
+ if (isSSR()) return () => {
348
+ };
349
+ let runCount = 0;
350
+ let cleanupHandle = () => {
351
+ };
352
+ const hook = globalThis.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
353
+ const subscriber = () => {
354
+ cleanupHandle();
355
+ runCount++;
356
+ if (hook) hook.emit("effect:run", { effectFn, runCount });
357
+ cleanupHandle = track(effectFn, subscriber);
358
+ };
359
+ cleanupHandle = track(effectFn, subscriber);
360
+ runCount = 1;
361
+ if (hook) hook.emit("effect:create", { effectFn });
362
+ return () => {
363
+ if (hook) hook.emit("effect:destroy", { effectFn });
364
+ cleanupHandle();
365
+ };
366
+ }
367
+
368
+ // src/reactivity/batch.ts
369
+ var batchDepth = 0;
370
+ var pendingSignals = /* @__PURE__ */ new Set();
371
+ function batch(fn) {
372
+ batchDepth++;
373
+ try {
374
+ fn();
375
+ } finally {
376
+ batchDepth--;
377
+ if (batchDepth === 0) {
378
+ flushBatch();
379
+ }
380
+ }
381
+ }
382
+ function enqueueBatchedSignal(signal2) {
383
+ if (batchDepth === 0) return false;
384
+ pendingSignals.add(signal2);
385
+ return true;
386
+ }
387
+ function flushBatch() {
388
+ const signals = Array.from(pendingSignals);
389
+ pendingSignals.clear();
390
+ for (const signal2 of signals) {
391
+ queueSignalNotification(signal2);
392
+ }
393
+ drainNotificationQueue();
394
+ }
395
+
396
+ // src/core/signals/signal.ts
397
+ function signal(initial, options) {
398
+ const state = { value: initial };
399
+ const debugName = options?.name;
400
+ if (debugName) {
401
+ state.__name = debugName;
402
+ }
403
+ function get() {
404
+ recordDependency(state);
405
+ return state.value;
406
+ }
407
+ get.__signal = state;
408
+ if (debugName) get.__name = debugName;
409
+ function set(next) {
410
+ const newValue = typeof next === "function" ? next(state.value) : next;
411
+ if (Object.is(newValue, state.value)) return;
412
+ const oldValue = state.value;
413
+ state.value = newValue;
414
+ const hook2 = globalThis.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
415
+ if (hook2) hook2.emit("signal:update", { signal: state, name: debugName, oldValue, newValue });
416
+ if (!enqueueBatchedSignal(state)) {
417
+ notifySubscribers(state);
418
+ }
419
+ }
420
+ const hook = globalThis.__SIBU_DEVTOOLS_GLOBAL_HOOK__;
421
+ if (hook) hook.emit("signal:create", { signal: state, name: debugName, getter: get, initial });
422
+ return [get, set];
423
+ }
424
+
425
+ // src/data/retry.ts
426
+ function calculateDelay(attempt, strategy, baseDelay, maxDelay, jitter) {
427
+ let delay;
428
+ switch (strategy) {
429
+ case "exponential":
430
+ delay = baseDelay * 2 ** attempt;
431
+ break;
432
+ case "linear":
433
+ delay = baseDelay * (attempt + 1);
434
+ break;
435
+ case "fixed":
436
+ delay = baseDelay;
437
+ break;
438
+ }
439
+ delay = Math.min(delay, maxDelay);
440
+ if (jitter > 0) {
441
+ const jitterRange = delay * jitter;
442
+ delay += (Math.random() * 2 - 1) * jitterRange;
443
+ }
444
+ return Math.max(0, delay);
445
+ }
446
+ async function withRetry(fn, options, onRetry, signal2) {
447
+ const maxRetries = options?.maxRetries ?? 3;
448
+ const strategy = options?.strategy ?? "exponential";
449
+ const baseDelay = options?.baseDelay ?? 1e3;
450
+ const maxDelay = options?.maxDelay ?? 3e4;
451
+ const jitter = options?.jitter ?? 0.1;
452
+ const shouldRetry = options?.shouldRetry ?? (() => true);
453
+ let lastError;
454
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
455
+ if (signal2?.aborted) throw new DOMException("Aborted", "AbortError");
456
+ try {
457
+ return await fn();
458
+ } catch (error) {
459
+ lastError = error;
460
+ if (attempt >= maxRetries || !shouldRetry(error, attempt)) throw error;
461
+ const delay = calculateDelay(attempt, strategy, baseDelay, maxDelay, jitter);
462
+ onRetry?.(error, attempt, delay);
463
+ await new Promise((resolve, reject) => {
464
+ const timer = setTimeout(resolve, delay);
465
+ if (signal2) {
466
+ const onAbort = () => {
467
+ clearTimeout(timer);
468
+ reject(new DOMException("Aborted", "AbortError"));
469
+ };
470
+ signal2.addEventListener("abort", onAbort, { once: true });
471
+ }
472
+ });
473
+ }
474
+ }
475
+ throw lastError;
476
+ }
477
+
478
+ // src/data/query.ts
479
+ var queryCache = /* @__PURE__ */ new Map();
480
+ function getOrCreateEntry(key, initialData) {
481
+ let entry = queryCache.get(key);
482
+ if (!entry) {
483
+ entry = {
484
+ data: initialData,
485
+ error: void 0,
486
+ dataUpdatedAt: initialData !== void 0 ? Date.now() : 0,
487
+ subscribers: 0,
488
+ gcTimer: null,
489
+ promise: null,
490
+ listeners: /* @__PURE__ */ new Set(),
491
+ refetchers: /* @__PURE__ */ new Set()
492
+ };
493
+ queryCache.set(key, entry);
494
+ }
495
+ return entry;
496
+ }
497
+ function query(key, fetcher, options = {}) {
498
+ const {
499
+ staleTime = 0,
500
+ cacheTime = 3e5,
501
+ enabled = true,
502
+ retry: retryOptions,
503
+ initialData,
504
+ refetchInterval,
505
+ refetchOnWindowFocus = false,
506
+ refetchOnReconnect = false,
507
+ onSuccess,
508
+ onError,
509
+ onSettled
510
+ } = options;
511
+ const resolveKey = typeof key === "function" ? key : () => key;
512
+ const [data, setData] = signal(initialData);
513
+ const [isFetching, setIsFetching] = signal(false);
514
+ const [error, setError] = signal(void 0);
515
+ let abortController = null;
516
+ let disposed = false;
517
+ let currentKey = null;
518
+ let intervalTimer = null;
519
+ const loading = derived(() => isFetching() && data() === void 0);
520
+ const isStale = derived(() => {
521
+ data();
522
+ if (!currentKey) return true;
523
+ const entry = queryCache.get(currentKey);
524
+ if (!entry || entry.dataUpdatedAt === 0) return true;
525
+ return Date.now() - entry.dataUpdatedAt >= staleTime;
526
+ });
527
+ async function doFetch() {
528
+ if (disposed || !currentKey || !enabled) return;
529
+ const key2 = currentKey;
530
+ const entry = queryCache.get(key2);
531
+ if (!entry) return;
532
+ if (entry.promise) {
533
+ setIsFetching(true);
534
+ return;
535
+ }
536
+ abortController?.abort();
537
+ abortController = new AbortController();
538
+ const signal2 = abortController.signal;
539
+ setIsFetching(true);
540
+ const promise = withRetry(() => fetcher({ signal: signal2, key: key2 }), retryOptions, void 0, signal2);
541
+ entry.promise = promise;
542
+ try {
543
+ const result = await promise;
544
+ entry.promise = null;
545
+ if (disposed || currentKey !== key2) return;
546
+ entry.data = result;
547
+ entry.dataUpdatedAt = Date.now();
548
+ entry.error = void 0;
549
+ batch(() => {
550
+ setData(result);
551
+ setIsFetching(false);
552
+ setError(void 0);
553
+ });
554
+ for (const listener of entry.listeners) listener();
555
+ onSuccess?.(result);
556
+ } catch (err) {
557
+ entry.promise = null;
558
+ if (disposed || currentKey !== key2) return;
559
+ if (err instanceof DOMException && err.name === "AbortError") return;
560
+ const errorObj = err instanceof Error ? err : new Error(String(err));
561
+ entry.error = errorObj;
562
+ batch(() => {
563
+ setError(errorObj);
564
+ setIsFetching(false);
565
+ });
566
+ for (const listener of entry.listeners) listener();
567
+ onError?.(errorObj);
568
+ } finally {
569
+ if (!disposed && currentKey === key2) onSettled?.();
570
+ }
571
+ }
572
+ function onCacheUpdate() {
573
+ if (disposed || !currentKey) return;
574
+ const entry = queryCache.get(currentKey);
575
+ if (!entry) return;
576
+ batch(() => {
577
+ if (entry.data !== void 0) setData(entry.data);
578
+ setError(entry.error);
579
+ if (!entry.promise) setIsFetching(false);
580
+ });
581
+ }
582
+ const effectCleanup = effect(() => {
583
+ const key2 = resolveKey();
584
+ if (currentKey !== null && currentKey !== key2) {
585
+ const oldEntry = queryCache.get(currentKey);
586
+ if (oldEntry) {
587
+ oldEntry.listeners.delete(onCacheUpdate);
588
+ oldEntry.refetchers.delete(doFetch);
589
+ oldEntry.subscribers--;
590
+ if (oldEntry.subscribers <= 0 && cacheTime >= 0) {
591
+ const oldKey = currentKey;
592
+ oldEntry.gcTimer = setTimeout(() => queryCache.delete(oldKey), cacheTime);
593
+ }
594
+ }
595
+ }
596
+ currentKey = key2;
597
+ const entry = getOrCreateEntry(key2, initialData);
598
+ entry.subscribers++;
599
+ if (entry.gcTimer !== null) {
600
+ clearTimeout(entry.gcTimer);
601
+ entry.gcTimer = null;
602
+ }
603
+ entry.listeners.add(onCacheUpdate);
604
+ entry.refetchers.add(doFetch);
605
+ if (entry.data !== void 0) {
606
+ batch(() => {
607
+ setData(entry.data);
608
+ setError(entry.error);
609
+ });
610
+ }
611
+ const isDataStale = entry.dataUpdatedAt === 0 || Date.now() - entry.dataUpdatedAt >= staleTime;
612
+ if (enabled && (entry.data === void 0 || isDataStale)) {
613
+ doFetch();
614
+ }
615
+ });
616
+ if (refetchInterval && refetchInterval > 0) {
617
+ intervalTimer = setInterval(() => {
618
+ if (!disposed && currentKey && enabled) doFetch();
619
+ }, refetchInterval);
620
+ }
621
+ let focusHandler = null;
622
+ let onlineHandler = null;
623
+ if (typeof globalThis !== "undefined" && typeof globalThis.addEventListener === "function") {
624
+ if (refetchOnWindowFocus) {
625
+ focusHandler = () => {
626
+ if (!disposed && currentKey && enabled) doFetch();
627
+ };
628
+ globalThis.addEventListener("focus", focusHandler);
629
+ }
630
+ if (refetchOnReconnect) {
631
+ onlineHandler = () => {
632
+ if (!disposed && currentKey && enabled) doFetch();
633
+ };
634
+ globalThis.addEventListener("online", onlineHandler);
635
+ }
636
+ }
637
+ function dispose() {
638
+ disposed = true;
639
+ abortController?.abort();
640
+ effectCleanup();
641
+ if (intervalTimer) clearInterval(intervalTimer);
642
+ if (currentKey) {
643
+ const entry = queryCache.get(currentKey);
644
+ if (entry) {
645
+ entry.listeners.delete(onCacheUpdate);
646
+ entry.refetchers.delete(doFetch);
647
+ entry.subscribers--;
648
+ if (entry.subscribers <= 0 && cacheTime >= 0) {
649
+ const key2 = currentKey;
650
+ entry.gcTimer = setTimeout(() => queryCache.delete(key2), cacheTime);
651
+ }
652
+ }
653
+ }
654
+ if (focusHandler) globalThis.removeEventListener("focus", focusHandler);
655
+ if (onlineHandler) globalThis.removeEventListener("online", onlineHandler);
656
+ }
657
+ return {
658
+ data,
659
+ loading,
660
+ fetching: isFetching,
661
+ error,
662
+ isStale,
663
+ refetch: doFetch,
664
+ dispose
665
+ };
666
+ }
667
+ function invalidateQueries(keyOrPredicate) {
668
+ const predicate = typeof keyOrPredicate === "function" ? keyOrPredicate : (k) => k === keyOrPredicate;
669
+ for (const [key, entry] of queryCache.entries()) {
670
+ if (predicate(key)) {
671
+ entry.dataUpdatedAt = 0;
672
+ for (const refetcher of entry.refetchers) refetcher();
673
+ }
674
+ }
675
+ }
676
+ function getQueryData(key) {
677
+ return queryCache.get(key)?.data;
678
+ }
679
+ function setQueryData(key, data) {
680
+ const entry = queryCache.get(key);
681
+ if (!entry) return;
682
+ const newData = typeof data === "function" ? data(entry.data) : data;
683
+ entry.data = newData;
684
+ entry.dataUpdatedAt = Date.now();
685
+ for (const listener of entry.listeners) listener();
686
+ }
687
+ function clearQueryCache() {
688
+ for (const entry of queryCache.values()) {
689
+ if (entry.gcTimer) clearTimeout(entry.gcTimer);
690
+ }
691
+ queryCache.clear();
692
+ }
693
+
694
+ // src/data/mutation.ts
695
+ function mutation(mutationFn, options = {}) {
696
+ const [data, setData] = signal(void 0);
697
+ const [loading, setLoading] = signal(false);
698
+ const [error, setError] = signal(void 0);
699
+ const [status, setStatus] = signal("idle");
700
+ const isSuccess = derived(() => status() === "success");
701
+ const isIdle = derived(() => status() === "idle");
702
+ async function execute(variables) {
703
+ let context2;
704
+ batch(() => {
705
+ setLoading(true);
706
+ setError(void 0);
707
+ setStatus("loading");
708
+ });
709
+ try {
710
+ if (options.onMutate) {
711
+ context2 = await options.onMutate(variables);
712
+ }
713
+ const result = await withRetry(() => mutationFn(variables), options.retry);
714
+ batch(() => {
715
+ setData(result);
716
+ setLoading(false);
717
+ setStatus("success");
718
+ });
719
+ options.onSuccess?.(result, variables, context2);
720
+ options.onSettled?.(result, void 0, variables, context2);
721
+ return result;
722
+ } catch (err) {
723
+ const errorObj = err instanceof Error ? err : new Error(String(err));
724
+ batch(() => {
725
+ setError(errorObj);
726
+ setLoading(false);
727
+ setStatus("error");
728
+ });
729
+ options.onError?.(errorObj, variables, context2);
730
+ options.onSettled?.(void 0, errorObj, variables, context2);
731
+ throw errorObj;
732
+ }
733
+ }
734
+ function reset() {
735
+ batch(() => {
736
+ setData(void 0);
737
+ setError(void 0);
738
+ setLoading(false);
739
+ setStatus("idle");
740
+ });
741
+ }
742
+ return {
743
+ data,
744
+ loading,
745
+ error,
746
+ isSuccess,
747
+ isIdle,
748
+ mutate: (variables) => {
749
+ execute(variables).catch(() => {
750
+ });
751
+ },
752
+ mutateAsync: execute,
753
+ reset
754
+ };
755
+ }
756
+
757
+ // src/data/infiniteQuery.ts
758
+ function infiniteQuery(key, fetcher, options) {
759
+ const {
760
+ getNextPageParam,
761
+ getPreviousPageParam,
762
+ initialPageParam = 0,
763
+ enabled = true,
764
+ retry: retryOptions,
765
+ onSuccess,
766
+ onError
767
+ } = options;
768
+ const resolveKey = typeof key === "function" ? key : () => key;
769
+ const [pages, setPages] = signal([]);
770
+ const [isFetching, setIsFetching] = signal(false);
771
+ const [isFetchingNext, setIsFetchingNext] = signal(false);
772
+ const [isFetchingPrev, setIsFetchingPrev] = signal(false);
773
+ const [error, setError] = signal(void 0);
774
+ const [nextPageParam, setNextPageParam] = signal(initialPageParam);
775
+ const [prevPageParam, setPrevPageParam] = signal(void 0);
776
+ const data = derived(() => {
777
+ const p = pages();
778
+ return p.length > 0 ? p : void 0;
779
+ });
780
+ const loading = derived(() => isFetching() && pages().length === 0);
781
+ const hasNextPage = derived(() => nextPageParam() !== void 0);
782
+ const hasPreviousPage = derived(() => prevPageParam() !== void 0);
783
+ let abortController = null;
784
+ let disposed = false;
785
+ async function fetchPage(pageParam, direction) {
786
+ if (disposed) return;
787
+ abortController?.abort();
788
+ abortController = new AbortController();
789
+ const signal2 = abortController.signal;
790
+ batch(() => {
791
+ setIsFetching(true);
792
+ if (direction === "next") setIsFetchingNext(true);
793
+ if (direction === "prev") setIsFetchingPrev(true);
794
+ setError(void 0);
795
+ });
796
+ try {
797
+ const page = await withRetry(() => fetcher({ signal: signal2, pageParam }), retryOptions, void 0, signal2);
798
+ if (disposed) return;
799
+ const currentPages = pages();
800
+ let newPages;
801
+ if (direction === "prev") {
802
+ newPages = [page, ...currentPages];
803
+ } else {
804
+ newPages = [...currentPages, page];
805
+ }
806
+ const nextParam = getNextPageParam(page, newPages);
807
+ const prevParam = getPreviousPageParam?.(newPages[0], newPages);
808
+ batch(() => {
809
+ setPages(newPages);
810
+ setNextPageParam(nextParam);
811
+ setPrevPageParam(prevParam);
812
+ setIsFetching(false);
813
+ setIsFetchingNext(false);
814
+ setIsFetchingPrev(false);
815
+ });
816
+ onSuccess?.(newPages);
817
+ } catch (err) {
818
+ if (disposed) return;
819
+ if (err instanceof DOMException && err.name === "AbortError") return;
820
+ const errorObj = err instanceof Error ? err : new Error(String(err));
821
+ batch(() => {
822
+ setError(errorObj);
823
+ setIsFetching(false);
824
+ setIsFetchingNext(false);
825
+ setIsFetchingPrev(false);
826
+ });
827
+ onError?.(errorObj);
828
+ }
829
+ }
830
+ const effectCleanup = effect(() => {
831
+ resolveKey();
832
+ if (enabled) {
833
+ setPages([]);
834
+ setNextPageParam(initialPageParam);
835
+ setPrevPageParam(void 0);
836
+ fetchPage(initialPageParam, "initial");
837
+ }
838
+ });
839
+ function fetchNextPage() {
840
+ const param = nextPageParam();
841
+ if (param === void 0) return Promise.resolve();
842
+ return fetchPage(param, "next");
843
+ }
844
+ function fetchPreviousPage() {
845
+ const param = prevPageParam();
846
+ if (param === void 0) return Promise.resolve();
847
+ return fetchPage(param, "prev");
848
+ }
849
+ async function refetch() {
850
+ batch(() => {
851
+ setPages([]);
852
+ setNextPageParam(initialPageParam);
853
+ setPrevPageParam(void 0);
854
+ });
855
+ await fetchPage(initialPageParam, "initial");
856
+ }
857
+ function dispose() {
858
+ disposed = true;
859
+ abortController?.abort();
860
+ effectCleanup();
861
+ }
862
+ return {
863
+ data,
864
+ pages,
865
+ loading,
866
+ fetching: isFetching,
867
+ fetchingNextPage: isFetchingNext,
868
+ fetchingPreviousPage: isFetchingPrev,
869
+ error,
870
+ hasNextPage,
871
+ hasPreviousPage,
872
+ fetchNextPage,
873
+ fetchPreviousPage,
874
+ refetch,
875
+ dispose
876
+ };
877
+ }
878
+
879
+ // src/data/previous.ts
880
+ function previous(getter) {
881
+ const [previous2, setPrevious] = signal(void 0);
882
+ let current = getter();
883
+ effect(() => {
884
+ const next = getter();
885
+ if (!Object.is(next, current)) {
886
+ setPrevious(current);
887
+ current = next;
888
+ }
889
+ });
890
+ return previous2;
891
+ }
892
+
893
+ // src/data/debounce.ts
894
+ function debounce(getter, delay) {
895
+ const [debounced, setDebounced] = signal(getter());
896
+ let timer = null;
897
+ effect(() => {
898
+ const value = getter();
899
+ if (timer !== null) clearTimeout(timer);
900
+ timer = setTimeout(() => {
901
+ setDebounced(value);
902
+ timer = null;
903
+ }, delay);
904
+ });
905
+ return debounced;
906
+ }
907
+
908
+ // src/data/throttle.ts
909
+ function throttle(getter, interval) {
910
+ const [throttled, setThrottled] = signal(getter());
911
+ let cooldown = false;
912
+ let pending = null;
913
+ let lastEmitted = getter();
914
+ effect(() => {
915
+ const value = getter();
916
+ if (!cooldown) {
917
+ if (!Object.is(value, lastEmitted)) {
918
+ setThrottled(value);
919
+ lastEmitted = value;
920
+ cooldown = true;
921
+ pending = null;
922
+ setTimeout(() => {
923
+ cooldown = false;
924
+ if (pending !== null) {
925
+ const trailingValue = pending.value;
926
+ pending = null;
927
+ setThrottled(trailingValue);
928
+ lastEmitted = trailingValue;
929
+ }
930
+ }, interval);
931
+ }
932
+ } else {
933
+ pending = { value };
934
+ }
935
+ });
936
+ return throttled;
937
+ }
938
+
939
+ // src/data/resource.ts
940
+ function resource(sourceOrFetcher, fetcherOrOptions, maybeOptions) {
941
+ let source = null;
942
+ let fetcher;
943
+ let options;
944
+ if (typeof fetcherOrOptions === "function") {
945
+ source = sourceOrFetcher;
946
+ fetcher = fetcherOrOptions;
947
+ options = maybeOptions ?? {};
948
+ } else {
949
+ const rawFetcher = sourceOrFetcher;
950
+ fetcher = (_source, info) => rawFetcher(info);
951
+ options = fetcherOrOptions ?? {};
952
+ }
953
+ const [data, setData] = signal(options.initialValue);
954
+ const [loading, setLoading] = signal(false);
955
+ const [error, setError] = signal(void 0);
956
+ let currentData = options.initialValue;
957
+ let abortController = null;
958
+ let disposed = false;
959
+ let effectCleanup = null;
960
+ let fetchVersion = 0;
961
+ async function doFetch(sourceValue) {
962
+ if (disposed) return;
963
+ abortController?.abort();
964
+ abortController = new AbortController();
965
+ const version = ++fetchVersion;
966
+ const signal2 = abortController.signal;
967
+ const prev = currentData;
968
+ batch(() => {
969
+ setLoading(true);
970
+ setError(void 0);
971
+ });
972
+ options.onStart?.();
973
+ try {
974
+ const result = await withRetry(() => fetcher(sourceValue, { signal: signal2, prev }), options.retry, void 0, signal2);
975
+ if (version !== fetchVersion || disposed) return;
976
+ currentData = result;
977
+ batch(() => {
978
+ setData(result);
979
+ setLoading(false);
980
+ });
981
+ options.onSuccess?.(result);
982
+ } catch (err) {
983
+ if (version !== fetchVersion || disposed) return;
984
+ if (err instanceof DOMException && err.name === "AbortError") return;
985
+ const errorObj = err instanceof Error ? err : new Error(String(err));
986
+ batch(() => {
987
+ setError(errorObj);
988
+ setLoading(false);
989
+ });
990
+ options.onError?.(errorObj);
991
+ } finally {
992
+ if (version === fetchVersion) {
993
+ options.onSettled?.();
994
+ }
995
+ }
996
+ }
997
+ if (source) {
998
+ effectCleanup = effect(() => {
999
+ const sourceValue = source();
1000
+ doFetch(sourceValue);
1001
+ });
1002
+ } else if (options.immediate !== false) {
1003
+ doFetch(void 0);
1004
+ }
1005
+ return {
1006
+ data,
1007
+ loading,
1008
+ error,
1009
+ refetch: () => doFetch(source ? source() : void 0),
1010
+ mutate: (value) => {
1011
+ const newValue = typeof value === "function" ? value(currentData) : value;
1012
+ currentData = newValue;
1013
+ setData(newValue);
1014
+ },
1015
+ abort: () => abortController?.abort(),
1016
+ dispose: () => {
1017
+ disposed = true;
1018
+ abortController?.abort();
1019
+ effectCleanup?.();
1020
+ }
1021
+ };
1022
+ }
1023
+
1024
+ // src/data/offlineStore.ts
1025
+ function openDB(name, version, keyPath) {
1026
+ return new Promise((resolve, reject) => {
1027
+ const request = indexedDB.open(name, version);
1028
+ request.onerror = () => reject(request.error);
1029
+ request.onsuccess = () => resolve(request.result);
1030
+ request.onupgradeneeded = () => {
1031
+ const db = request.result;
1032
+ if (!db.objectStoreNames.contains("items")) {
1033
+ db.createObjectStore("items", { keyPath });
1034
+ }
1035
+ if (!db.objectStoreNames.contains("_changes")) {
1036
+ const changeStore = db.createObjectStore("_changes", { autoIncrement: true });
1037
+ changeStore.createIndex("timestamp", "timestamp");
1038
+ }
1039
+ if (!db.objectStoreNames.contains("_meta")) {
1040
+ db.createObjectStore("_meta");
1041
+ }
1042
+ };
1043
+ });
1044
+ }
1045
+ function idbGetAll(db, store) {
1046
+ return new Promise((resolve, reject) => {
1047
+ const tx = db.transaction(store, "readonly");
1048
+ const req = tx.objectStore(store).getAll();
1049
+ req.onsuccess = () => resolve(req.result);
1050
+ req.onerror = () => reject(req.error);
1051
+ });
1052
+ }
1053
+ function idbGet(db, store, key) {
1054
+ return new Promise((resolve, reject) => {
1055
+ const tx = db.transaction(store, "readonly");
1056
+ const req = tx.objectStore(store).get(key);
1057
+ req.onsuccess = () => resolve(req.result);
1058
+ req.onerror = () => reject(req.error);
1059
+ });
1060
+ }
1061
+ function idbPut(db, store, item) {
1062
+ return new Promise((resolve, reject) => {
1063
+ const tx = db.transaction(store, "readwrite");
1064
+ tx.objectStore(store).put(item);
1065
+ tx.oncomplete = () => resolve();
1066
+ tx.onerror = () => reject(tx.error);
1067
+ });
1068
+ }
1069
+ function idbDelete(db, store, key) {
1070
+ return new Promise((resolve, reject) => {
1071
+ const tx = db.transaction(store, "readwrite");
1072
+ tx.objectStore(store).delete(key);
1073
+ tx.oncomplete = () => resolve();
1074
+ tx.onerror = () => reject(tx.error);
1075
+ });
1076
+ }
1077
+ function idbClear(db, store) {
1078
+ return new Promise((resolve, reject) => {
1079
+ const tx = db.transaction(store, "readwrite");
1080
+ tx.objectStore(store).clear();
1081
+ tx.oncomplete = () => resolve();
1082
+ tx.onerror = () => reject(tx.error);
1083
+ });
1084
+ }
1085
+ async function offlineStore(options) {
1086
+ const { name, version = 1, keyPath = "id", autoSync = true } = options;
1087
+ const db = await openDB(name, version, keyPath);
1088
+ const initialData = await idbGetAll(db, "items");
1089
+ const initialChanges = await idbGetAll(db, "_changes");
1090
+ const savedLastSync = await idbGet(db, "_meta", "lastSynced");
1091
+ const [data, setData] = signal(initialData);
1092
+ const [isSyncing, setIsSyncing] = signal(false);
1093
+ const [lastSynced, setLastSynced] = signal(savedLastSync ?? null);
1094
+ const [pendingCount, setPendingCount] = signal(initialChanges.length);
1095
+ let adapter = options.adapter;
1096
+ async function refreshData() {
1097
+ const items = await idbGetAll(db, "items");
1098
+ setData(items);
1099
+ const changes = await idbGetAll(db, "_changes");
1100
+ setPendingCount(changes.length);
1101
+ }
1102
+ async function put(item) {
1103
+ await idbPut(db, "items", item);
1104
+ await idbPut(db, "_changes", { type: "put", item, timestamp: Date.now() });
1105
+ await refreshData();
1106
+ }
1107
+ async function remove(key) {
1108
+ const existing = await idbGet(db, "items", key);
1109
+ if (existing) {
1110
+ await idbDelete(db, "items", key);
1111
+ await idbPut(db, "_changes", { type: "delete", item: existing, timestamp: Date.now() });
1112
+ await refreshData();
1113
+ }
1114
+ }
1115
+ async function get(key) {
1116
+ return idbGet(db, "items", key);
1117
+ }
1118
+ function query2(filter) {
1119
+ return data().filter(filter);
1120
+ }
1121
+ async function sync() {
1122
+ if (!adapter || isSyncing()) return;
1123
+ setIsSyncing(true);
1124
+ try {
1125
+ const changes = await idbGetAll(db, "_changes");
1126
+ if (changes.length > 0) {
1127
+ const result = await adapter.push(changes);
1128
+ if (result.ok) {
1129
+ await idbClear(db, "_changes");
1130
+ }
1131
+ }
1132
+ const remoteItems = await adapter.pull(lastSynced());
1133
+ for (const item of remoteItems) {
1134
+ await idbPut(db, "items", item);
1135
+ }
1136
+ const now = Date.now();
1137
+ await idbPut(db, "_meta", now);
1138
+ setLastSynced(now);
1139
+ await refreshData();
1140
+ } catch {
1141
+ } finally {
1142
+ setIsSyncing(false);
1143
+ }
1144
+ }
1145
+ function attach(newAdapter) {
1146
+ adapter = newAdapter;
1147
+ }
1148
+ function close() {
1149
+ db.close();
1150
+ }
1151
+ if (autoSync && typeof window !== "undefined") {
1152
+ window.addEventListener("online", () => {
1153
+ sync();
1154
+ });
1155
+ }
1156
+ return {
1157
+ data,
1158
+ get,
1159
+ put,
1160
+ remove,
1161
+ query: query2,
1162
+ isSyncing,
1163
+ lastSynced,
1164
+ sync,
1165
+ attach,
1166
+ pendingCount,
1167
+ close
1168
+ };
1169
+ }
1170
+ function syncAdapter(config) {
1171
+ return config;
1172
+ }
1173
+
1174
+ // src/core/rendering/context.ts
1175
+ function context(defaultValue) {
1176
+ const [getValue, setValue] = signal(defaultValue);
1177
+ return {
1178
+ provide(value) {
1179
+ setValue(value);
1180
+ },
1181
+ use() {
1182
+ return getValue;
1183
+ },
1184
+ get() {
1185
+ return getValue();
1186
+ },
1187
+ set(value) {
1188
+ setValue(value);
1189
+ }
1190
+ };
1191
+ }
1192
+
1193
+ // src/data/routeLoader.ts
1194
+ var LoaderContext = context(null);
1195
+ function executeLoader(loader, context2, options) {
1196
+ const res = resource(({ signal: signal2 }) => loader(context2, { signal: signal2 }), options);
1197
+ LoaderContext.provide(res);
1198
+ return res;
1199
+ }
1200
+ function loaderData() {
1201
+ const resource2 = LoaderContext.get();
1202
+ if (!resource2) {
1203
+ throw new Error("loaderData must be used inside a route with a loader");
1204
+ }
1205
+ return {
1206
+ data: resource2.data,
1207
+ loading: resource2.loading,
1208
+ error: resource2.error
1209
+ };
1210
+ }
1211
+ async function preloadRoute(route, context2) {
1212
+ if (!route.loader) return void 0;
1213
+ const controller = new AbortController();
1214
+ return route.loader(context2, { signal: controller.signal });
1215
+ }
1216
+
1217
+ // src/ui/socket.ts
1218
+ function socket(url, options) {
1219
+ const autoReconnect = options?.autoReconnect ?? false;
1220
+ const reconnectDelay = options?.reconnectDelay ?? 1e3;
1221
+ const maxReconnects = options?.maxReconnects ?? Infinity;
1222
+ const heartbeat = options?.heartbeat;
1223
+ const protocols = options?.protocols;
1224
+ const [data, setData] = signal(null);
1225
+ const [status, setStatus] = signal("closed");
1226
+ let ws = null;
1227
+ let reconnectCount = 0;
1228
+ let reconnectTimer = null;
1229
+ let heartbeatTimer = null;
1230
+ let disposed = false;
1231
+ function getUrl() {
1232
+ return typeof url === "function" ? url() : url;
1233
+ }
1234
+ function connect() {
1235
+ if (disposed) return;
1236
+ setStatus("connecting");
1237
+ ws = new WebSocket(getUrl(), protocols);
1238
+ ws.onopen = () => {
1239
+ setStatus("open");
1240
+ reconnectCount = 0;
1241
+ startHeartbeat();
1242
+ };
1243
+ ws.onmessage = (event) => {
1244
+ setData(event.data);
1245
+ };
1246
+ ws.onclose = () => {
1247
+ setStatus("closed");
1248
+ stopHeartbeat();
1249
+ if (autoReconnect && !disposed && reconnectCount < maxReconnects) {
1250
+ reconnectCount++;
1251
+ reconnectTimer = setTimeout(() => {
1252
+ connect();
1253
+ }, reconnectDelay);
1254
+ }
1255
+ };
1256
+ ws.onerror = () => {
1257
+ };
1258
+ }
1259
+ function startHeartbeat() {
1260
+ if (!heartbeat) return;
1261
+ stopHeartbeat();
1262
+ heartbeatTimer = setInterval(() => {
1263
+ if (ws && ws.readyState === WebSocket.OPEN) {
1264
+ ws.send(heartbeat.message);
1265
+ }
1266
+ }, heartbeat.interval);
1267
+ }
1268
+ function stopHeartbeat() {
1269
+ if (heartbeatTimer !== null) {
1270
+ clearInterval(heartbeatTimer);
1271
+ heartbeatTimer = null;
1272
+ }
1273
+ }
1274
+ function send(msg) {
1275
+ if (ws && ws.readyState === WebSocket.OPEN) {
1276
+ ws.send(msg);
1277
+ }
1278
+ }
1279
+ function close() {
1280
+ if (reconnectTimer !== null) {
1281
+ clearTimeout(reconnectTimer);
1282
+ reconnectTimer = null;
1283
+ }
1284
+ stopHeartbeat();
1285
+ if (ws) {
1286
+ setStatus("closing");
1287
+ ws.close();
1288
+ }
1289
+ }
1290
+ function dispose() {
1291
+ disposed = true;
1292
+ close();
1293
+ }
1294
+ connect();
1295
+ return { data, status, send, close, dispose };
1296
+ }
1297
+
1298
+ // src/ui/stream.ts
1299
+ function stream(url, options) {
1300
+ const autoReconnect = options?.autoReconnect ?? false;
1301
+ const [data, setData] = signal(null);
1302
+ const [event, setEvent] = signal(null);
1303
+ const [status, setStatus] = signal("connecting");
1304
+ let source = null;
1305
+ let disposed = false;
1306
+ let reconnectTimer = null;
1307
+ function connect() {
1308
+ if (disposed) return;
1309
+ setStatus("connecting");
1310
+ source = new EventSource(url, {
1311
+ withCredentials: options?.withCredentials ?? false
1312
+ });
1313
+ source.onopen = () => {
1314
+ setStatus("open");
1315
+ };
1316
+ source.onmessage = (evt) => {
1317
+ setData(evt.data);
1318
+ setEvent(evt.type);
1319
+ };
1320
+ source.onerror = () => {
1321
+ if (source && source.readyState === EventSource.CLOSED) {
1322
+ setStatus("closed");
1323
+ source = null;
1324
+ if (autoReconnect && !disposed) {
1325
+ reconnectTimer = setTimeout(() => {
1326
+ reconnectTimer = null;
1327
+ connect();
1328
+ }, 1e3);
1329
+ }
1330
+ }
1331
+ };
1332
+ }
1333
+ function close() {
1334
+ if (reconnectTimer !== null) {
1335
+ clearTimeout(reconnectTimer);
1336
+ reconnectTimer = null;
1337
+ }
1338
+ if (source) {
1339
+ source.close();
1340
+ setStatus("closed");
1341
+ source = null;
1342
+ }
1343
+ }
1344
+ function dispose() {
1345
+ disposed = true;
1346
+ close();
1347
+ }
1348
+ connect();
1349
+ return { data, event, status, close, dispose };
1350
+ }
1351
+ // Annotate the CommonJS export names for ESM import in node:
1352
+ 0 && (module.exports = {
1353
+ calculateDelay,
1354
+ clearQueryCache,
1355
+ debounce,
1356
+ executeLoader,
1357
+ getQueryData,
1358
+ infiniteQuery,
1359
+ invalidateQueries,
1360
+ loaderData,
1361
+ mutation,
1362
+ offlineStore,
1363
+ preloadRoute,
1364
+ previous,
1365
+ query,
1366
+ resource,
1367
+ setQueryData,
1368
+ socket,
1369
+ stream,
1370
+ syncAdapter,
1371
+ throttle,
1372
+ withRetry
1373
+ });