cross-state 0.53.3 → 0.54.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 (236) hide show
  1. package/dist/chunk-CUT6urMc.cjs +30 -0
  2. package/dist/diff-BQ8bB3Wk.d.cts +22 -0
  3. package/dist/diff-gZezL04N.d.ts +22 -0
  4. package/dist/extendedJson-BZkQBXEv.js +29 -0
  5. package/dist/extendedJson-BZkQBXEv.js.map +1 -0
  6. package/dist/extendedJson-Dn2F7Edo.cjs +53 -0
  7. package/dist/extendedJson-Dn2F7Edo.cjs.map +1 -0
  8. package/dist/hash-BV06P7va.js +19 -0
  9. package/dist/hash-BV06P7va.js.map +1 -0
  10. package/dist/hash-CJPl7SRj.cjs +30 -0
  11. package/dist/hash-CJPl7SRj.cjs.map +1 -0
  12. package/dist/index.cjs +49 -0
  13. package/dist/index.cjs.map +1 -0
  14. package/dist/index.d.cts +59 -0
  15. package/dist/index.d.ts +59 -0
  16. package/dist/index.js +20 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/mutative/index.cjs +3 -0
  19. package/dist/mutative/index.d.cts +3 -0
  20. package/dist/mutative/index.d.ts +3 -0
  21. package/dist/mutative/index.js +3 -0
  22. package/dist/mutative/register.cjs +10 -0
  23. package/dist/mutative/register.cjs.map +1 -0
  24. package/dist/mutative/register.d.cts +11 -0
  25. package/dist/mutative/register.d.ts +9 -0
  26. package/dist/mutative/register.js +10 -0
  27. package/dist/mutative/register.js.map +1 -0
  28. package/dist/mutativeMethods-6QzygG3W.d.cts +13 -0
  29. package/dist/mutativeMethods-Br3xN2Iq.d.ts +13 -0
  30. package/dist/mutativeMethods-CZKeRIDL.js +27 -0
  31. package/dist/mutativeMethods-CZKeRIDL.js.map +1 -0
  32. package/dist/mutativeMethods-CgXk_bMt.cjs +33 -0
  33. package/dist/mutativeMethods-CgXk_bMt.cjs.map +1 -0
  34. package/dist/patchMethods-C3L7Kh8T.d.cts +48 -0
  35. package/dist/patchMethods-D5YJwcpn.cjs +264 -0
  36. package/dist/patchMethods-D5YJwcpn.cjs.map +1 -0
  37. package/dist/patchMethods-DRPfkhAe.js +241 -0
  38. package/dist/patchMethods-DRPfkhAe.js.map +1 -0
  39. package/dist/patchMethods-Dxad6HF6.d.ts +48 -0
  40. package/dist/patches/index.cjs +5 -0
  41. package/dist/patches/index.d.cts +4 -0
  42. package/dist/patches/index.d.ts +4 -0
  43. package/dist/patches/index.js +5 -0
  44. package/dist/patches/register.cjs +11 -0
  45. package/dist/patches/register.cjs.map +1 -0
  46. package/dist/patches/register.d.cts +12 -0
  47. package/dist/patches/register.d.ts +10 -0
  48. package/dist/patches/register.js +11 -0
  49. package/dist/patches/register.js.map +1 -0
  50. package/dist/persist/register.cjs +13 -0
  51. package/dist/persist/register.cjs.map +1 -0
  52. package/dist/persist/register.d.cts +15 -0
  53. package/dist/persist/register.d.ts +13 -0
  54. package/dist/persist/register.js +13 -0
  55. package/dist/persist/register.js.map +1 -0
  56. package/dist/persist-BluRVcW6.js +258 -0
  57. package/dist/persist-BluRVcW6.js.map +1 -0
  58. package/dist/persist-CPjpg6D0.d.ts +61 -0
  59. package/dist/persist-CztClydq.cjs +263 -0
  60. package/dist/persist-CztClydq.cjs.map +1 -0
  61. package/dist/persist-D7MAsyyW.d.cts +61 -0
  62. package/dist/propAccess-ByqBjC19.cjs +173 -0
  63. package/dist/propAccess-ByqBjC19.cjs.map +1 -0
  64. package/dist/propAccess-DGchzVfy.js +113 -0
  65. package/dist/propAccess-DGchzVfy.js.map +1 -0
  66. package/dist/react/index.cjs +622 -0
  67. package/dist/react/index.cjs.map +1 -0
  68. package/dist/react/index.d.cts +306 -0
  69. package/dist/react/index.d.ts +306 -0
  70. package/dist/react/index.js +602 -0
  71. package/dist/react/index.js.map +1 -0
  72. package/dist/react/register.cjs +16 -0
  73. package/dist/react/register.cjs.map +1 -0
  74. package/dist/react/register.d.cts +16 -0
  75. package/dist/react/register.d.ts +14 -0
  76. package/dist/react/register.js +16 -0
  77. package/dist/react/register.js.map +1 -0
  78. package/dist/scope-DI1OFHcr.d.ts +167 -0
  79. package/dist/scope-DO5vpLPV.d.cts +167 -0
  80. package/dist/scope-DU5dFP1T.js +322 -0
  81. package/dist/scope-DU5dFP1T.js.map +1 -0
  82. package/dist/scope-DvqvkIHB.cjs +369 -0
  83. package/dist/scope-DvqvkIHB.cjs.map +1 -0
  84. package/dist/store-BEsiS8y7.d.cts +242 -0
  85. package/dist/store-BWMWEUpu.cjs +819 -0
  86. package/dist/store-BWMWEUpu.cjs.map +1 -0
  87. package/dist/store-DKaeE840.d.ts +242 -0
  88. package/dist/store-Dr8gM3lq.js +730 -0
  89. package/dist/store-Dr8gM3lq.js.map +1 -0
  90. package/dist/storeMethods-AIJSwxHz.js +315 -0
  91. package/dist/storeMethods-AIJSwxHz.js.map +1 -0
  92. package/dist/storeMethods-BQwU2Uia.d.cts +107 -0
  93. package/dist/storeMethods-C4luym7C.d.ts +107 -0
  94. package/dist/storeMethods-DVVsmUg1.cjs +375 -0
  95. package/dist/storeMethods-DVVsmUg1.cjs.map +1 -0
  96. package/package.json +92 -135
  97. package/dist/cjs/hash.cjs +0 -30
  98. package/dist/cjs/hash.cjs.map +0 -1
  99. package/dist/cjs/index.cjs +0 -56
  100. package/dist/cjs/index.cjs.map +0 -1
  101. package/dist/cjs/index2.cjs +0 -300
  102. package/dist/cjs/index2.cjs.map +0 -1
  103. package/dist/cjs/mutative/index.cjs +0 -10
  104. package/dist/cjs/mutative/index.cjs.map +0 -1
  105. package/dist/cjs/mutative/register.cjs +0 -8
  106. package/dist/cjs/mutative/register.cjs.map +0 -1
  107. package/dist/cjs/mutativeMethods.cjs +0 -29
  108. package/dist/cjs/mutativeMethods.cjs.map +0 -1
  109. package/dist/cjs/patches/index.cjs +0 -10
  110. package/dist/cjs/patches/index.cjs.map +0 -1
  111. package/dist/cjs/patches/register.cjs +0 -8
  112. package/dist/cjs/patches/register.cjs.map +0 -1
  113. package/dist/cjs/persist/register.cjs +0 -11
  114. package/dist/cjs/persist/register.cjs.map +0 -1
  115. package/dist/cjs/persist.cjs +0 -302
  116. package/dist/cjs/persist.cjs.map +0 -1
  117. package/dist/cjs/propAccess.cjs +0 -162
  118. package/dist/cjs/propAccess.cjs.map +0 -1
  119. package/dist/cjs/react/index.cjs +0 -628
  120. package/dist/cjs/react/index.cjs.map +0 -1
  121. package/dist/cjs/react/register.cjs +0 -13
  122. package/dist/cjs/react/register.cjs.map +0 -1
  123. package/dist/cjs/scope.cjs +0 -400
  124. package/dist/cjs/scope.cjs.map +0 -1
  125. package/dist/cjs/store.cjs +0 -829
  126. package/dist/cjs/store.cjs.map +0 -1
  127. package/dist/cjs/storeMethods.cjs +0 -856
  128. package/dist/cjs/storeMethods.cjs.map +0 -1
  129. package/dist/cjs/urlStore.cjs +0 -120
  130. package/dist/cjs/urlStore.cjs.map +0 -1
  131. package/dist/es/hash.mjs +0 -27
  132. package/dist/es/hash.mjs.map +0 -1
  133. package/dist/es/index.mjs +0 -20
  134. package/dist/es/index.mjs.map +0 -1
  135. package/dist/es/index2.mjs +0 -291
  136. package/dist/es/index2.mjs.map +0 -1
  137. package/dist/es/mutative/index.mjs +0 -2
  138. package/dist/es/mutative/index.mjs.map +0 -1
  139. package/dist/es/mutative/register.mjs +0 -6
  140. package/dist/es/mutative/register.mjs.map +0 -1
  141. package/dist/es/mutativeMethods.mjs +0 -27
  142. package/dist/es/mutativeMethods.mjs.map +0 -1
  143. package/dist/es/patches/index.mjs +0 -2
  144. package/dist/es/patches/index.mjs.map +0 -1
  145. package/dist/es/patches/register.mjs +0 -6
  146. package/dist/es/patches/register.mjs.map +0 -1
  147. package/dist/es/persist/register.mjs +0 -9
  148. package/dist/es/persist/register.mjs.map +0 -1
  149. package/dist/es/persist.mjs +0 -300
  150. package/dist/es/persist.mjs.map +0 -1
  151. package/dist/es/propAccess.mjs +0 -151
  152. package/dist/es/propAccess.mjs.map +0 -1
  153. package/dist/es/react/index.mjs +0 -611
  154. package/dist/es/react/index.mjs.map +0 -1
  155. package/dist/es/react/register.mjs +0 -11
  156. package/dist/es/react/register.mjs.map +0 -1
  157. package/dist/es/scope.mjs +0 -391
  158. package/dist/es/scope.mjs.map +0 -1
  159. package/dist/es/store.mjs +0 -812
  160. package/dist/es/store.mjs.map +0 -1
  161. package/dist/es/storeMethods.mjs +0 -845
  162. package/dist/es/storeMethods.mjs.map +0 -1
  163. package/dist/es/urlStore.mjs +0 -116
  164. package/dist/es/urlStore.mjs.map +0 -1
  165. package/dist/types/core/cache.d.ts +0 -119
  166. package/dist/types/core/commonTypes.d.ts +0 -76
  167. package/dist/types/core/index.d.ts +0 -6
  168. package/dist/types/core/resourceGroup.d.ts +0 -16
  169. package/dist/types/core/scope.d.ts +0 -5
  170. package/dist/types/core/store.d.ts +0 -86
  171. package/dist/types/core/urlStore.d.ts +0 -21
  172. package/dist/types/index.d.ts +0 -14
  173. package/dist/types/lib/applyPatches.d.ts +0 -2
  174. package/dist/types/lib/autobind.d.ts +0 -1
  175. package/dist/types/lib/cacheState.d.ts +0 -20
  176. package/dist/types/lib/calcDuration.d.ts +0 -2
  177. package/dist/types/lib/calculatedValue.d.ts +0 -9
  178. package/dist/types/lib/castArray.d.ts +0 -1
  179. package/dist/types/lib/clone.d.ts +0 -1
  180. package/dist/types/lib/constrain.d.ts +0 -1
  181. package/dist/types/lib/debounce.d.ts +0 -12
  182. package/dist/types/lib/deferred.d.ts +0 -5
  183. package/dist/types/lib/diff.d.ts +0 -17
  184. package/dist/types/lib/disposable.d.ts +0 -3
  185. package/dist/types/lib/equals.d.ts +0 -3
  186. package/dist/types/lib/extendedJson.d.ts +0 -5
  187. package/dist/types/lib/forwardError.d.ts +0 -1
  188. package/dist/types/lib/hash.d.ts +0 -5
  189. package/dist/types/lib/helpers.d.ts +0 -2
  190. package/dist/types/lib/instanceCache.d.ts +0 -18
  191. package/dist/types/lib/isPromise.d.ts +0 -1
  192. package/dist/types/lib/makeSelector.d.ts +0 -2
  193. package/dist/types/lib/maybePromise.d.ts +0 -1
  194. package/dist/types/lib/path.d.ts +0 -41
  195. package/dist/types/lib/promiseChain.d.ts +0 -5
  196. package/dist/types/lib/promiseWithCancel.d.ts +0 -8
  197. package/dist/types/lib/promiseWithState.d.ts +0 -9
  198. package/dist/types/lib/propAccess.d.ts +0 -7
  199. package/dist/types/lib/queue.d.ts +0 -11
  200. package/dist/types/lib/standardMethods.d.ts +0 -20
  201. package/dist/types/lib/throttle.d.ts +0 -2
  202. package/dist/types/lib/trackingProxy.d.ts +0 -2
  203. package/dist/types/lib/trie.d.ts +0 -11
  204. package/dist/types/lib/typeHelpers.d.ts +0 -12
  205. package/dist/types/lib/unwrapPromise.d.ts +0 -1
  206. package/dist/types/lib/updateHelpers.d.ts +0 -1
  207. package/dist/types/lib/wildcardMatch.d.ts +0 -3
  208. package/dist/types/mutative/index.d.ts +0 -1
  209. package/dist/types/mutative/mutativeMethods.d.ts +0 -11
  210. package/dist/types/mutative/register.d.ts +0 -7
  211. package/dist/types/patches/index.d.ts +0 -1
  212. package/dist/types/patches/patchMethods.d.ts +0 -44
  213. package/dist/types/patches/register.d.ts +0 -7
  214. package/dist/types/persist/index.d.ts +0 -3
  215. package/dist/types/persist/persist.d.ts +0 -40
  216. package/dist/types/persist/persistPathHelpers.d.ts +0 -6
  217. package/dist/types/persist/persistStorage.d.ts +0 -17
  218. package/dist/types/persist/register.d.ts +0 -9
  219. package/dist/types/react/cacheMethods.d.ts +0 -5
  220. package/dist/types/react/form/customInput.d.ts +0 -6
  221. package/dist/types/react/form/form.d.ts +0 -98
  222. package/dist/types/react/form/formField.d.ts +0 -68
  223. package/dist/types/react/form/formForEach.d.ts +0 -19
  224. package/dist/types/react/form/index.d.ts +0 -3
  225. package/dist/types/react/form/useFormAutosave.d.ts +0 -9
  226. package/dist/types/react/index.d.ts +0 -11
  227. package/dist/types/react/loadingBoundary.d.ts +0 -21
  228. package/dist/types/react/register.d.ts +0 -15
  229. package/dist/types/react/scope.d.ts +0 -24
  230. package/dist/types/react/scopeMethods.d.ts +0 -20
  231. package/dist/types/react/storeMethods.d.ts +0 -15
  232. package/dist/types/react/useCache.d.ts +0 -34
  233. package/dist/types/react/useDecoupledState.d.ts +0 -7
  234. package/dist/types/react/useProp.d.ts +0 -8
  235. package/dist/types/react/useStore.d.ts +0 -16
  236. package/dist/types/react/useUrlParamScope.d.ts +0 -4
@@ -0,0 +1,4 @@
1
+ import "../store-DKaeE840.js";
2
+ import "../diff-gZezL04N.js";
3
+ import { SubscribePatchOptions, SyncMessage, patchMethods } from "../patchMethods-Dxad6HF6.js";
4
+ export { type SubscribePatchOptions, type SyncMessage, patchMethods };
@@ -0,0 +1,5 @@
1
+ import "../propAccess-DGchzVfy.js";
2
+ import { patchMethods } from "../patchMethods-DRPfkhAe.js";
3
+ import "../extendedJson-BZkQBXEv.js";
4
+
5
+ export { patchMethods };
@@ -0,0 +1,11 @@
1
+ const require_store = require('../store-BWMWEUpu.cjs');
2
+ require('../propAccess-ByqBjC19.cjs');
3
+ const require_patchMethods = require('../patchMethods-D5YJwcpn.cjs');
4
+ require('../extendedJson-Dn2F7Edo.cjs');
5
+
6
+ //#region src/patches/register.ts
7
+ Object.assign(require_store.Store.prototype, require_patchMethods.patchMethods);
8
+ require_store.autobind(require_store.Store);
9
+
10
+ //#endregion
11
+ //# sourceMappingURL=register.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.cjs","names":["Store","patchMethods","autobind"],"sources":["../../src/patches/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { autobind } from '@lib/autobind';\nimport { patchMethods } from './patchMethods';\n\ntype PatchMethods = typeof patchMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends PatchMethods {}\n}\n\nObject.assign(Store.prototype, patchMethods);\nautobind(Store);\n"],"mappings":";;;;;;AAWA,OAAO,OAAOA,oBAAM,WAAWC;AAC/BC,uBAASF"}
@@ -0,0 +1,12 @@
1
+ import "../store-BEsiS8y7.cjs";
2
+ import "../diff-BQ8bB3Wk.cjs";
3
+ import { patchMethods } from "../patchMethods-C3L7Kh8T.cjs";
4
+
5
+ //#region src/patches/register.d.ts
6
+ type PatchMethods = typeof patchMethods;
7
+ declare module "@core" {
8
+ interface Store<T> extends PatchMethods {}
9
+ }
10
+ //#endregion
11
+ export {};
12
+ //# sourceMappingURL=register.d.cts.map
@@ -0,0 +1,10 @@
1
+ import "../store-DKaeE840.js";
2
+ import "../diff-gZezL04N.js";
3
+ import { patchMethods } from "../patchMethods-Dxad6HF6.js";
4
+
5
+ //#region src/patches/register.d.ts
6
+ type PatchMethods = typeof patchMethods;
7
+ declare module "@core" {
8
+ interface Store<T> extends PatchMethods {}
9
+ }
10
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { Store, autobind } from "../store-Dr8gM3lq.js";
2
+ import "../propAccess-DGchzVfy.js";
3
+ import { patchMethods } from "../patchMethods-DRPfkhAe.js";
4
+ import "../extendedJson-BZkQBXEv.js";
5
+
6
+ //#region src/patches/register.ts
7
+ Object.assign(Store.prototype, patchMethods);
8
+ autobind(Store);
9
+
10
+ //#endregion
11
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","names":[],"sources":["../../src/patches/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { autobind } from '@lib/autobind';\nimport { patchMethods } from './patchMethods';\n\ntype PatchMethods = typeof patchMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends PatchMethods {}\n}\n\nObject.assign(Store.prototype, patchMethods);\nautobind(Store);\n"],"mappings":";;;;;;AAWA,OAAO,OAAO,MAAM,WAAW;AAC/B,SAAS"}
@@ -0,0 +1,13 @@
1
+ const require_store = require('../store-BWMWEUpu.cjs');
2
+ require('../propAccess-ByqBjC19.cjs');
3
+ require('../patchMethods-D5YJwcpn.cjs');
4
+ require('../extendedJson-Dn2F7Edo.cjs');
5
+ const require_persist = require('../persist-CztClydq.cjs');
6
+
7
+ //#region src/persist/register.ts
8
+ require_store.Store.addHook((store) => {
9
+ if (store.options.persist) store.persistance = require_persist.persist(store, store.options.persist);
10
+ });
11
+
12
+ //#endregion
13
+ //# sourceMappingURL=register.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.cjs","names":["Store","persist"],"sources":["../../src/persist/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { persist, type Persist, type PersistOptions } from '@persist/persist';\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface StoreOptions<T> {\n persist?: PersistOptions<T>;\n }\n\n interface Store<T> {\n persistance?: Persist<T>;\n }\n}\n\nStore.addHook((store) => {\n if (store.options.persist) {\n store.persistance = persist(store, store.options.persist);\n }\n});\n"],"mappings":";;;;;;;AAcAA,oBAAM,SAAS,UAAU;AACvB,KAAI,MAAM,QAAQ,QAChB,OAAM,cAAcC,wBAAQ,OAAO,MAAM,QAAQ"}
@@ -0,0 +1,15 @@
1
+ import "../store-BEsiS8y7.cjs";
2
+ import { Persist, PersistOptions } from "../persist-D7MAsyyW.cjs";
3
+
4
+ //#region src/persist/register.d.ts
5
+ declare module "@core" {
6
+ interface StoreOptions<T> {
7
+ persist?: PersistOptions<T>;
8
+ }
9
+ interface Store<T> {
10
+ persistance?: Persist<T>;
11
+ }
12
+ }
13
+ //#endregion
14
+ export {};
15
+ //# sourceMappingURL=register.d.cts.map
@@ -0,0 +1,13 @@
1
+ import "../store-DKaeE840.js";
2
+ import { Persist, PersistOptions } from "../persist-CPjpg6D0.js";
3
+
4
+ //#region src/persist/register.d.ts
5
+ declare module "@core" {
6
+ interface StoreOptions<T> {
7
+ persist?: PersistOptions<T>;
8
+ }
9
+ interface Store<T> {
10
+ persistance?: Persist<T>;
11
+ }
12
+ }
13
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1,13 @@
1
+ import { Store } from "../store-Dr8gM3lq.js";
2
+ import "../propAccess-DGchzVfy.js";
3
+ import "../patchMethods-DRPfkhAe.js";
4
+ import "../extendedJson-BZkQBXEv.js";
5
+ import { persist } from "../persist-BluRVcW6.js";
6
+
7
+ //#region src/persist/register.ts
8
+ Store.addHook((store) => {
9
+ if (store.options.persist) store.persistance = persist(store, store.options.persist);
10
+ });
11
+
12
+ //#endregion
13
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","names":[],"sources":["../../src/persist/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { persist, type Persist, type PersistOptions } from '@persist/persist';\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface StoreOptions<T> {\n persist?: PersistOptions<T>;\n }\n\n interface Store<T> {\n persistance?: Persist<T>;\n }\n}\n\nStore.addHook((store) => {\n if (store.options.persist) {\n store.persistance = persist(store, store.options.persist);\n }\n});\n"],"mappings":";;;;;;;AAcA,MAAM,SAAS,UAAU;AACvB,KAAI,MAAM,QAAQ,QAChB,OAAM,cAAc,QAAQ,OAAO,MAAM,QAAQ"}
@@ -0,0 +1,258 @@
1
+ import { calcDuration, isPromise, queue } from "./store-Dr8gM3lq.js";
2
+ import { castArrayPath, get, remove, set, shallowEqual } from "./propAccess-DGchzVfy.js";
3
+ import { subscribePatches } from "./patchMethods-DRPfkhAe.js";
4
+ import { fromExtendedJsonString, toExtendedJsonString } from "./extendedJson-BZkQBXEv.js";
5
+
6
+ //#region src/lib/promiseChain.ts
7
+ function promiseChain(value) {
8
+ if (value instanceof Function) value = value();
9
+ return {
10
+ value,
11
+ next(fn) {
12
+ const next = isPromise(value) ? value.then((value$1) => fn(value$1)) : fn(value);
13
+ return promiseChain(next);
14
+ }
15
+ };
16
+ }
17
+
18
+ //#endregion
19
+ //#region src/persist/persistPathHelpers.ts
20
+ const isAncestor = (ancestor, path) => {
21
+ return ancestor.length <= path.length && ancestor.every((v, i) => v === "*" || path[i] === "*" || v === path[i]);
22
+ };
23
+ const split = (value, path) => {
24
+ const [first, ...rest] = path;
25
+ if (first === void 0) return [{
26
+ path: [],
27
+ value
28
+ }];
29
+ let entries;
30
+ if (value instanceof Map) entries = value;
31
+ else if (value instanceof Set) entries = new Map([...value].map((v, i) => [i, v]));
32
+ else if (Array.isArray(value)) entries = new Map(value.map((v, i) => [i, v]));
33
+ else if (typeof value === "object" && value !== null) entries = new Map(Object.entries(value));
34
+ else return [{
35
+ path: [],
36
+ value
37
+ }];
38
+ if (first === "*") return [...entries].flatMap(([k, v]) => split(v, rest).map(({ path: path$1, value: value$1 }) => ({
39
+ path: [k, ...path$1],
40
+ value: value$1
41
+ })));
42
+ const subValue = entries.get(first);
43
+ if (subValue === void 0) return [{
44
+ path: [],
45
+ value
46
+ }];
47
+ return split(subValue, rest).map(({ path: path$1, value: value$1 }) => ({
48
+ path: [first, ...path$1],
49
+ value: value$1
50
+ }));
51
+ };
52
+
53
+ //#endregion
54
+ //#region src/persist/persistStorage.ts
55
+ function normalizeStorage(storage) {
56
+ return {
57
+ getItem: storage.getItem.bind(storage),
58
+ setItem: storage.setItem.bind(storage),
59
+ removeItem: storage.removeItem.bind(storage),
60
+ listItems() {
61
+ if ("listItems" in storage) return storage.listItems();
62
+ return promiseChain(() => {
63
+ if ("keys" in storage) return storage.keys();
64
+ else return promiseChain(storage.length instanceof Function ? storage.length() : storage.length).next((length) => {
65
+ const keys = Array.from({ length }, (_, index) => storage.key(index));
66
+ return keys.some(isPromise) ? Promise.all(keys) : keys;
67
+ }).next((keys) => {
68
+ return keys.filter((key) => typeof key === "string");
69
+ }).value;
70
+ }).next((keys) => {
71
+ const results = keys.map((key) => promiseChain(storage.getItem(key)).next((value) => [key, value]).value);
72
+ return results.some(isPromise) ? Promise.all(results) : results;
73
+ }).next((results) => {
74
+ return new Map(results.filter(([, value]) => value !== null));
75
+ }).value;
76
+ }
77
+ };
78
+ }
79
+
80
+ //#endregion
81
+ //#region src/persist/persist.ts
82
+ var Persist = class {
83
+ static {
84
+ Symbol.dispose;
85
+ }
86
+ constructor(store, options) {
87
+ this.store = store;
88
+ this.options = options;
89
+ this.queue = queue();
90
+ this.handles = /* @__PURE__ */ new Set();
91
+ this.stopped = false;
92
+ this.updateInProgress = /* @__PURE__ */ new Map();
93
+ this.storage = normalizeStorage(options.storage);
94
+ this.channel = new BroadcastChannel(`cross-state-persist_${options.id}`);
95
+ this.prefix = `${options.id}:`;
96
+ if (Symbol.dispose) this[Symbol.dispose] = () => this.stop();
97
+ this.paths = (options.paths ?? []).map((p) => {
98
+ if (isPlainPath(p)) return {
99
+ path: castArrayPath(p),
100
+ throttle: options.throttle && calcDuration(options.throttle)
101
+ };
102
+ const _p = p;
103
+ return {
104
+ path: castArrayPath(_p.path),
105
+ throttle: (_p.throttle && calcDuration(_p.throttle)) ?? (options.throttle && calcDuration(options.throttle))
106
+ };
107
+ }).sort((a, b) => b.path.length - a.path.length);
108
+ if (this.paths.length === 0) this.paths.push({
109
+ path: ["*"],
110
+ throttle: options.throttle && calcDuration(options.throttle)
111
+ });
112
+ this.initialized = new Promise((resolve) => {
113
+ this.resolveInitialized = resolve;
114
+ });
115
+ this.watchStore();
116
+ this.watchStorage();
117
+ }
118
+ watchStore() {
119
+ const throttle = Math.min(...this.paths.map((p) => p.throttle ?? 0)) || void 0;
120
+ const cancel = subscribePatches.apply(this.store, [(patches, reversePatches) => {
121
+ let i = 0;
122
+ for (const patch of patches) {
123
+ const reversePatch = reversePatches[i++];
124
+ const stringPath = JSON.stringify(patch.path);
125
+ if (this.updateInProgress.has(stringPath) && this.updateInProgress.get(stringPath) === (patch.op === "remove" ? void 0 : patch.value)) continue;
126
+ const matchingPaths = this.paths.filter((p) => isAncestor(p.path, patch.path) || isAncestor(patch.path, p.path));
127
+ for (const { path } of matchingPaths) if (path.length <= patch.path.length) {
128
+ const pathToSave = patch.path.slice(0, path.length);
129
+ this.queue(() => this.save(pathToSave), pathToSave);
130
+ } else if (patch.op === "remove") {
131
+ const subValues = split(reversePatch?.op === "add" ? reversePatch.value : {}, path.slice(patch.path.length));
132
+ for (const { path: path$1 } of subValues) this.queue(() => this.save([...patch.path, ...path$1]), [...patch.path, ...path$1]);
133
+ } else {
134
+ const updatedValues = split(patch.value, path.slice(patch.path.length));
135
+ const removedValues = split(reversePatch?.op !== "remove" ? reversePatch?.value ?? {} : {}, path.slice(patch.path.length)).filter((v) => !updatedValues.some((u) => shallowEqual(u.path, v.path)));
136
+ for (const { path: path$1 } of updatedValues) this.queue(() => this.save([...patch.path, ...path$1]), [...patch.path, ...path$1]);
137
+ for (const { path: path$1 } of removedValues) this.queue(() => this.save([...patch.path, ...path$1]), [...patch.path, ...path$1]);
138
+ }
139
+ }
140
+ }, {
141
+ runNow: this.options.persistInitialState ?? false,
142
+ passive: true,
143
+ throttle
144
+ }]);
145
+ this.handles.add(cancel);
146
+ }
147
+ async watchStorage() {
148
+ if (!this.options.persistInitialState) {
149
+ let items = this.storage.listItems();
150
+ if (isPromise(items)) items = await items;
151
+ if (this.stopped) return;
152
+ const toLoad = new Map([...items.entries()].sort((a, b) => b[1].length - a[1].length).map(([key, value]) => [this.parseKey(key), value]).filter(([key]) => key));
153
+ this.queue(() => this.load(toLoad));
154
+ }
155
+ this.queue(() => this.resolveInitialized?.());
156
+ const listener = (event) => {
157
+ this.queue(() => this.load([{
158
+ type: "data",
159
+ path: event.data
160
+ }]));
161
+ };
162
+ this.channel.addEventListener("message", listener);
163
+ this.handles.add(() => this.channel.removeEventListener("message", listener));
164
+ }
165
+ buildKey({ type, path }) {
166
+ return `${this.prefix}${type === "internal" ? path : JSON.stringify(path)}`;
167
+ }
168
+ parseKey(key) {
169
+ if (!key.startsWith(this.prefix)) return;
170
+ key = key.slice(this.prefix.length);
171
+ if (!key.startsWith("[")) return {
172
+ type: "internal",
173
+ path: key
174
+ };
175
+ return {
176
+ type: "data",
177
+ path: JSON.parse(key)
178
+ };
179
+ }
180
+ load(items) {
181
+ return promiseChain(() => {
182
+ if (Array.isArray(items)) return promiseChain(() => {
183
+ const entries = items.map((key) => promiseChain(() => {
184
+ return this.storage.getItem(this.buildKey(key));
185
+ }).next((value) => [key, value]).value);
186
+ return entries.some(isPromise) ? Promise.all(entries) : entries;
187
+ }).next((entries) => {
188
+ return entries.filter((entry) => entry !== null);
189
+ }).value;
190
+ else return [...items.entries()];
191
+ }).next((entries) => {
192
+ if (this.stopped) return;
193
+ const toWrite = entries.filter(([key, value]) => {
194
+ if (key.type !== "data" || !value) return;
195
+ if (!this.paths.find((p) => p.path.length === 1 && p.path[0] === "*" && key.path.length === 0 || p.path.length === key.path.length && isAncestor(p.path, key.path))) return null;
196
+ const inSaveQueue = this.queue.getRefs().find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));
197
+ return !inSaveQueue;
198
+ }).map(([key, value]) => {
199
+ try {
200
+ return {
201
+ path: key.path,
202
+ value: !value || value === "undefined" ? void 0 : fromExtendedJsonString(value)
203
+ };
204
+ } catch {
205
+ return void 0;
206
+ }
207
+ }).filter(Boolean);
208
+ if (toWrite.length > 0) {
209
+ for (const { path, value } of toWrite) this.updateInProgress.set(JSON.stringify(path), value);
210
+ this.store.set((state) => {
211
+ for (const { path, value } of toWrite) if (value === void 0) state = remove(state, path);
212
+ else state = set(state, path, value);
213
+ return state;
214
+ });
215
+ this.updateInProgress.clear();
216
+ }
217
+ const versionEntry = entries.find(([key]) => key.type === "internal" && key.path === "version");
218
+ if (versionEntry) this.store.version = versionEntry[1];
219
+ }).value;
220
+ }
221
+ save(path) {
222
+ const key = this.buildKey({
223
+ type: "data",
224
+ path
225
+ });
226
+ const value = get(this.store.get(), path);
227
+ return promiseChain(value).next((value$1) => {
228
+ if (value$1 === void 0) return this.storage.removeItem(key);
229
+ else return this.storage.setItem(key, toExtendedJsonString(value$1));
230
+ }).next(() => {
231
+ this.channel.postMessage(path);
232
+ if (this.store.version) return this.storage.setItem(this.buildKey({
233
+ type: "internal",
234
+ path: "version"
235
+ }), this.store.version);
236
+ else return this.storage.removeItem(this.buildKey({
237
+ type: "internal",
238
+ path: "version"
239
+ }));
240
+ }).value;
241
+ }
242
+ async stop() {
243
+ this.stopped = true;
244
+ for (const handle of this.handles) handle();
245
+ await this.queue.whenDone();
246
+ this.channel.close();
247
+ }
248
+ };
249
+ function persist(store, options) {
250
+ return new Persist(store, options);
251
+ }
252
+ function isPlainPath(p) {
253
+ return typeof p === "string" || Array.isArray(p);
254
+ }
255
+
256
+ //#endregion
257
+ export { persist };
258
+ //# sourceMappingURL=persist-BluRVcW6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist-BluRVcW6.js","names":["value","entries: Map<KeyType, unknown>","path","store: Store<T>","options: PersistOptions<T>","path","value"],"sources":["../src/lib/promiseChain.ts","../src/persist/persistPathHelpers.ts","../src/persist/persistStorage.ts","../src/persist/persist.ts"],"sourcesContent":["import isPromise from '@lib/isPromise';\n\nexport interface Chain<T> {\n value: T;\n next<S>(fn: (value: Awaited<T>) => S): T extends Promise<any> ? Chain<Promise<S>> : Chain<S>;\n}\n\nexport default function promiseChain<T>(value: T | (() => T)): Chain<T> {\n if (value instanceof Function) {\n value = value();\n }\n\n return {\n value,\n next(fn) {\n const next = isPromise(value)\n ? value.then((value) => fn(value as Awaited<T>))\n : fn(value as Awaited<T>);\n\n return promiseChain(next) as any;\n },\n };\n}\n","import type { KeyType } from '@lib/path';\n\nexport const isAncestor = (ancestor: KeyType[], path: KeyType[]): boolean => {\n return (\n ancestor.length <= path.length &&\n ancestor.every((v, i) => v === '*' || path[i] === '*' || v === path[i])\n );\n};\n\nexport const split = (value: any, path: KeyType[]): { path: KeyType[]; value: unknown }[] => {\n const [first, ...rest] = path;\n if (first === undefined) return [{ path: [], value }];\n\n let entries: Map<KeyType, unknown>;\n if (value instanceof Map) {\n entries = value;\n } else if (value instanceof Set) {\n entries = new Map([...value].map((v, i) => [i, v]));\n } else if (Array.isArray(value)) {\n entries = new Map(value.map((v, i) => [i, v]));\n } else if (typeof value === 'object' && value !== null) {\n entries = new Map(Object.entries(value));\n } else {\n return [{ path: [], value }];\n }\n\n if (first === '*') {\n return [...entries].flatMap(([k, v]) =>\n split(v, rest).map(({ path, value }) => ({ path: [k, ...path], value })),\n );\n }\n\n const subValue = entries.get(first);\n if (subValue === undefined) return [{ path: [], value }];\n\n return split(subValue, rest).map(({ path, value }) => ({ path: [first, ...path], value }));\n};\n","import isPromise from '@lib/isPromise';\nimport promiseChain from '@lib/promiseChain';\n\nexport interface PersistStorageBase {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<unknown>;\n removeItem: (key: string) => void | Promise<unknown>;\n}\n\nexport interface PersistStorageWithKeys extends PersistStorageBase {\n keys: () => string[] | Promise<string[]>;\n}\n\nexport interface PersistStorageWithLength extends PersistStorageBase {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n}\n\nexport interface PersistStorageWithListItems extends PersistStorageBase {\n listItems: () => Map<string, string> | Promise<Map<string, string>>;\n}\n\nexport type PersistStorage =\n | PersistStorageWithKeys\n | PersistStorageWithLength\n | PersistStorageWithListItems;\n\nexport function normalizeStorage(storage: PersistStorage): PersistStorageWithListItems {\n return {\n getItem: storage.getItem.bind(storage),\n setItem: storage.setItem.bind(storage),\n removeItem: storage.removeItem.bind(storage),\n\n listItems() {\n if ('listItems' in storage) {\n return storage.listItems();\n }\n\n return promiseChain(() => {\n if ('keys' in storage) {\n return storage.keys();\n } else {\n return promiseChain(\n storage.length instanceof Function ? storage.length() : storage.length,\n )\n .next((length) => {\n const keys = Array.from({ length }, (_, index) => storage.key(index));\n return keys.some(isPromise) ? Promise.all(keys) : (keys as (string | null)[]);\n })\n .next((keys) => {\n return keys.filter((key): key is string => typeof key === 'string');\n }).value;\n }\n })\n .next((keys) => {\n const results = keys.map(\n (key) =>\n promiseChain(storage.getItem(key)).next((value) => [key, value] as const).value,\n );\n\n return results.some(isPromise)\n ? Promise.all(results)\n : (results as [string, string | null][]);\n })\n .next((results) => {\n return new Map(results.filter(([, value]) => value !== null) as [string, string][]);\n }).value;\n },\n };\n}\n","import { type Cancel, type Duration, type Store } from '@core';\nimport { calcDuration } from '@lib/calcDuration';\nimport { shallowEqual } from '@lib/equals';\nimport { fromExtendedJsonString, toExtendedJsonString } from '@lib/extendedJson';\nimport isPromise from '@lib/isPromise';\nimport type { KeyType, WildcardPath } from '@lib/path';\nimport promiseChain from '@lib/promiseChain';\nimport { castArrayPath, get, remove, set } from '@lib/propAccess';\nimport { queue } from '@lib/queue';\nimport { subscribePatches } from '@patches/patchMethods';\nimport { isAncestor, split } from '@persist/persistPathHelpers';\nimport {\n normalizeStorage,\n type PersistStorage,\n type PersistStorageWithListItems,\n} from './persistStorage';\n\ntype PathOption<T> =\n | WildcardPath<T>\n | {\n path: WildcardPath<T>;\n // throttle?: Duration;\n };\n\ntype Key = { type: 'internal'; path: string } | { type: 'data'; path: KeyType[] };\n\nexport interface PersistOptions<T> {\n id: string;\n storage: PersistStorage;\n paths?: PathOption<T>[];\n throttle?: Duration;\n persistInitialState?: boolean;\n}\n\nexport class Persist<T> {\n readonly storage: PersistStorageWithListItems;\n readonly [Symbol.dispose]!: Cancel;\n\n readonly paths: {\n path: KeyType[];\n throttle?: number;\n }[];\n\n readonly initialized: Promise<void>;\n\n private resolveInitialized?: () => void;\n\n private channel: BroadcastChannel;\n\n private queue = queue();\n\n private handles = new Set<Cancel>();\n\n private stopped = false;\n\n private updateInProgress = new Map<string, unknown>();\n\n private prefix;\n\n constructor(\n public readonly store: Store<T>,\n public readonly options: PersistOptions<T>,\n ) {\n this.storage = normalizeStorage(options.storage);\n this.channel = new BroadcastChannel(`cross-state-persist_${options.id}`);\n this.prefix = `${options.id}:`;\n\n if (Symbol.dispose) {\n this[Symbol.dispose] = () => this.stop();\n }\n\n this.paths = (options.paths ?? [])\n .map<{\n path: KeyType[];\n throttle?: number;\n }>((p) => {\n if (isPlainPath(p)) {\n return {\n path: castArrayPath(p),\n throttle: options.throttle && calcDuration(options.throttle),\n };\n }\n\n const _p = p as { path: KeyType[]; throttle?: Duration };\n\n return {\n path: castArrayPath(_p.path),\n throttle:\n (_p.throttle && calcDuration(_p.throttle)) ??\n (options.throttle && calcDuration(options.throttle)),\n };\n })\n .sort((a, b) => b.path.length - a.path.length);\n\n if (this.paths.length === 0) {\n this.paths.push({\n path: ['*'],\n throttle: options.throttle && calcDuration(options.throttle),\n });\n }\n\n this.initialized = new Promise((resolve) => {\n this.resolveInitialized = resolve;\n });\n\n this.watchStore();\n this.watchStorage();\n }\n\n private watchStore() {\n const throttle = Math.min(...this.paths.map((p) => p.throttle ?? 0)) || undefined;\n\n const cancel = subscribePatches.apply(this.store as Store<unknown>, [\n (patches, reversePatches) => {\n let i = 0;\n for (const patch of patches) {\n const reversePatch = reversePatches[i++];\n\n const stringPath = JSON.stringify(patch.path);\n if (\n this.updateInProgress.has(stringPath) &&\n this.updateInProgress.get(stringPath) ===\n (patch.op === 'remove' ? undefined : patch.value)\n ) {\n continue;\n }\n\n const matchingPaths = this.paths.filter(\n (p) => isAncestor(p.path, patch.path) || isAncestor(patch.path, p.path),\n );\n\n for (const { path } of matchingPaths) {\n if (path.length <= patch.path.length) {\n const pathToSave = patch.path.slice(0, path.length);\n this.queue(() => this.save(pathToSave), pathToSave);\n } else if (patch.op === 'remove') {\n const subValues = split(\n reversePatch?.op === 'add' ? reversePatch.value : {},\n path.slice(patch.path.length),\n );\n\n for (const { path } of subValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n } else {\n const updatedValues = split(patch.value, path.slice(patch.path.length));\n const removedValues = split(\n reversePatch?.op !== 'remove' ? (reversePatch?.value ?? {}) : {},\n path.slice(patch.path.length),\n ).filter((v) => !updatedValues.some((u) => shallowEqual(u.path, v.path)));\n\n for (const { path } of updatedValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n for (const { path } of removedValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n }\n }\n }\n },\n { runNow: this.options.persistInitialState ?? false, passive: true, throttle },\n ]);\n\n this.handles.add(cancel);\n }\n\n private async watchStorage() {\n if (!this.options.persistInitialState) {\n let items = this.storage.listItems();\n if (isPromise(items)) {\n items = await items;\n }\n\n if (this.stopped) {\n return;\n }\n\n const toLoad = new Map(\n [...items.entries()]\n .sort((a, b) => b[1].length - a[1].length)\n .map(([key, value]) => [this.parseKey(key), value])\n .filter(([key]) => key) as [Key, string][],\n );\n\n this.queue(() => this.load(toLoad));\n }\n\n this.queue(() => this.resolveInitialized?.());\n\n const listener = (event: MessageEvent) => {\n this.queue(() => this.load([{ type: 'data', path: event.data }]));\n };\n\n this.channel.addEventListener('message', listener);\n this.handles.add(() => this.channel.removeEventListener('message', listener));\n }\n\n private buildKey({ type, path }: Key) {\n return `${this.prefix}${type === 'internal' ? path : JSON.stringify(path)}`;\n }\n\n private parseKey(key: string): Key | undefined {\n if (!key.startsWith(this.prefix)) {\n return;\n }\n\n key = key.slice(this.prefix.length);\n\n if (!key.startsWith('[')) {\n return { type: 'internal', path: key };\n }\n\n return { type: 'data', path: JSON.parse(key) as KeyType[] };\n }\n\n private load(items: Key[] | Map<Key, string>): void | Promise<void> {\n return promiseChain(() => {\n if (Array.isArray(items)) {\n return promiseChain(() => {\n const entries = items.map(\n (key) =>\n promiseChain(() => {\n return this.storage.getItem(this.buildKey(key));\n }).next((value) => [key, value] as const).value,\n );\n\n return entries.some(isPromise)\n ? Promise.all(entries)\n : (entries as [Key, string | null][]);\n }).next((entries) => {\n return entries.filter((entry) => entry !== null) as [Key, string][];\n }).value;\n } else {\n return [...items.entries()];\n }\n }).next((entries) => {\n if (this.stopped) {\n return;\n }\n\n const toWrite = entries\n .filter(([key, value]) => {\n if (key.type !== 'data' || !value) {\n return;\n }\n\n if (\n !this.paths.find(\n (p) =>\n (p.path.length === 1 && p.path[0] === '*' && key.path.length === 0) ||\n (p.path.length === key.path.length && isAncestor(p.path, key.path)),\n )\n ) {\n return null;\n }\n\n const inSaveQueue = this.queue\n .getRefs()\n .find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));\n return !inSaveQueue;\n })\n .map(([key, value]) => {\n try {\n return {\n path: key.path,\n value: !value || value === 'undefined' ? undefined : fromExtendedJsonString(value),\n };\n } catch {\n return undefined;\n }\n })\n .filter(Boolean) as { path: KeyType[]; value: unknown }[];\n\n if (toWrite.length > 0) {\n for (const { path, value } of toWrite) {\n this.updateInProgress.set(JSON.stringify(path), value);\n }\n\n this.store.set((state) => {\n for (const { path, value } of toWrite) {\n if (value === undefined) {\n state = remove(state, path as any);\n } else {\n state = set(state, path as any, value);\n }\n }\n\n return state;\n });\n\n this.updateInProgress.clear();\n }\n\n const versionEntry = entries.find(\n ([key]) => key.type === 'internal' && key.path === 'version',\n );\n if (versionEntry) {\n this.store.version = versionEntry[1];\n }\n }).value;\n }\n\n private save(path: KeyType[]): void | Promise<unknown> {\n const key = this.buildKey({ type: 'data', path });\n const value = get(this.store.get() as any, path);\n\n return promiseChain(value)\n .next((value) => {\n if (value === undefined) {\n return this.storage.removeItem(key);\n } else {\n return this.storage.setItem(key, toExtendedJsonString(value));\n }\n })\n .next(() => {\n this.channel.postMessage(path);\n\n if (this.store.version) {\n return this.storage.setItem(\n this.buildKey({ type: 'internal', path: 'version' }),\n this.store.version,\n );\n } else {\n return this.storage.removeItem(this.buildKey({ type: 'internal', path: 'version' }));\n }\n }).value;\n }\n\n async stop(): Promise<void> {\n this.stopped = true;\n\n for (const handle of this.handles) {\n handle();\n }\n\n await this.queue.whenDone();\n this.channel.close();\n }\n}\n\nexport function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T> {\n return new Persist<T>(store, options);\n}\n\nfunction isPlainPath<T>(p: PathOption<T>): p is WildcardPath<T> & (KeyType[] | string) {\n return typeof p === 'string' || Array.isArray(p);\n}\n"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Cancel, Duration, KeyType, Store, WildcardPath } from "./store-DKaeE840.js";
2
+
3
+ //#region src/persist/persistStorage.d.ts
4
+ interface PersistStorageBase {
5
+ getItem: (key: string) => string | null | Promise<string | null>;
6
+ setItem: (key: string, value: string) => void | Promise<unknown>;
7
+ removeItem: (key: string) => void | Promise<unknown>;
8
+ }
9
+ interface PersistStorageWithKeys extends PersistStorageBase {
10
+ keys: () => string[] | Promise<string[]>;
11
+ }
12
+ interface PersistStorageWithLength extends PersistStorageBase {
13
+ length: number | (() => number | Promise<number>);
14
+ key: (keyIndex: number) => string | null | Promise<string | null>;
15
+ }
16
+ interface PersistStorageWithListItems extends PersistStorageBase {
17
+ listItems: () => Map<string, string> | Promise<Map<string, string>>;
18
+ }
19
+ type PersistStorage = PersistStorageWithKeys | PersistStorageWithLength | PersistStorageWithListItems;
20
+ //#endregion
21
+ //#region src/persist/persist.d.ts
22
+ type PathOption<T> = WildcardPath<T> | {
23
+ path: WildcardPath<T>;
24
+ };
25
+ interface PersistOptions<T> {
26
+ id: string;
27
+ storage: PersistStorage;
28
+ paths?: PathOption<T>[];
29
+ throttle?: Duration;
30
+ persistInitialState?: boolean;
31
+ }
32
+ declare class Persist<T> {
33
+ readonly store: Store<T>;
34
+ readonly options: PersistOptions<T>;
35
+ readonly storage: PersistStorageWithListItems;
36
+ readonly [Symbol.dispose]: Cancel;
37
+ readonly paths: {
38
+ path: KeyType[];
39
+ throttle?: number;
40
+ }[];
41
+ readonly initialized: Promise<void>;
42
+ private resolveInitialized?;
43
+ private channel;
44
+ private queue;
45
+ private handles;
46
+ private stopped;
47
+ private updateInProgress;
48
+ private prefix;
49
+ constructor(store: Store<T>, options: PersistOptions<T>);
50
+ private watchStore;
51
+ private watchStorage;
52
+ private buildKey;
53
+ private parseKey;
54
+ private load;
55
+ private save;
56
+ stop(): Promise<void>;
57
+ }
58
+ declare function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T>;
59
+ //#endregion
60
+ export { Persist, PersistOptions, PersistStorage, PersistStorageBase, PersistStorageWithKeys, PersistStorageWithLength, PersistStorageWithListItems, persist };
61
+ //# sourceMappingURL=persist-CPjpg6D0.d.ts.map