@storve/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/benchmarks/run.ts +102 -0
  3. package/benchmarks/week2.md +9 -0
  4. package/benchmarks/week2.ts +64 -0
  5. package/benchmarks/week4.md +13 -0
  6. package/benchmarks/week4.ts +178 -0
  7. package/benchmarks/week5.md +15 -0
  8. package/benchmarks/week5.ts +184 -0
  9. package/coverage/coverage-summary.json +31 -0
  10. package/dist/adapters/indexedDB.cjs +2 -0
  11. package/dist/adapters/indexedDB.cjs.map +1 -0
  12. package/dist/adapters/indexedDB.mjs +2 -0
  13. package/dist/adapters/indexedDB.mjs.map +1 -0
  14. package/dist/adapters/localStorage.cjs +2 -0
  15. package/dist/adapters/localStorage.cjs.map +1 -0
  16. package/dist/adapters/localStorage.mjs +2 -0
  17. package/dist/adapters/localStorage.mjs.map +1 -0
  18. package/dist/adapters/memory.cjs +2 -0
  19. package/dist/adapters/memory.cjs.map +1 -0
  20. package/dist/adapters/memory.mjs +2 -0
  21. package/dist/adapters/memory.mjs.map +1 -0
  22. package/dist/adapters/sessionStorage.cjs +2 -0
  23. package/dist/adapters/sessionStorage.cjs.map +1 -0
  24. package/dist/adapters/sessionStorage.mjs +2 -0
  25. package/dist/adapters/sessionStorage.mjs.map +1 -0
  26. package/dist/async-entry.d.ts +7 -0
  27. package/dist/async-entry.d.ts.map +1 -0
  28. package/dist/async.cjs +2 -0
  29. package/dist/async.cjs.map +1 -0
  30. package/dist/async.d.ts +52 -0
  31. package/dist/async.d.ts.map +1 -0
  32. package/dist/async.mjs +2 -0
  33. package/dist/async.mjs.map +1 -0
  34. package/dist/batch.d.ts +12 -0
  35. package/dist/batch.d.ts.map +1 -0
  36. package/dist/compose.d.ts +7 -0
  37. package/dist/compose.d.ts.map +1 -0
  38. package/dist/computed-entry.d.ts +7 -0
  39. package/dist/computed-entry.d.ts.map +1 -0
  40. package/dist/computed.cjs +2 -0
  41. package/dist/computed.cjs.map +1 -0
  42. package/dist/computed.d.ts +56 -0
  43. package/dist/computed.d.ts.map +1 -0
  44. package/dist/computed.mjs +2 -0
  45. package/dist/computed.mjs.map +1 -0
  46. package/dist/devtools/history.d.ts +51 -0
  47. package/dist/devtools/history.d.ts.map +1 -0
  48. package/dist/devtools/index.d.ts +5 -0
  49. package/dist/devtools/index.d.ts.map +1 -0
  50. package/dist/devtools/redux-bridge.d.ts +21 -0
  51. package/dist/devtools/redux-bridge.d.ts.map +1 -0
  52. package/dist/devtools/snapshots.d.ts +32 -0
  53. package/dist/devtools/snapshots.d.ts.map +1 -0
  54. package/dist/devtools/withDevtools.d.ts +17 -0
  55. package/dist/devtools/withDevtools.d.ts.map +1 -0
  56. package/dist/devtools.cjs +2 -0
  57. package/dist/devtools.cjs.map +1 -0
  58. package/dist/devtools.mjs +2 -0
  59. package/dist/devtools.mjs.map +1 -0
  60. package/dist/extensions/noop.d.ts +2 -0
  61. package/dist/extensions/noop.d.ts.map +1 -0
  62. package/dist/index.cjs +2 -0
  63. package/dist/index.cjs.js +118 -0
  64. package/dist/index.cjs.js.map +1 -0
  65. package/dist/index.cjs.map +1 -0
  66. package/dist/index.d.ts +5 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.esm.js +116 -0
  69. package/dist/index.esm.js.map +1 -0
  70. package/dist/index.mjs +2 -0
  71. package/dist/index.mjs.map +1 -0
  72. package/dist/persist/adapters/indexedDB.d.ts +12 -0
  73. package/dist/persist/adapters/indexedDB.d.ts.map +1 -0
  74. package/dist/persist/adapters/localStorage.d.ts +11 -0
  75. package/dist/persist/adapters/localStorage.d.ts.map +1 -0
  76. package/dist/persist/adapters/memory.d.ts +11 -0
  77. package/dist/persist/adapters/memory.d.ts.map +1 -0
  78. package/dist/persist/adapters/sessionStorage.d.ts +11 -0
  79. package/dist/persist/adapters/sessionStorage.d.ts.map +1 -0
  80. package/dist/persist/debounce.d.ts +12 -0
  81. package/dist/persist/debounce.d.ts.map +1 -0
  82. package/dist/persist/hydrate.d.ts +15 -0
  83. package/dist/persist/hydrate.d.ts.map +1 -0
  84. package/dist/persist/index.d.ts +34 -0
  85. package/dist/persist/index.d.ts.map +1 -0
  86. package/dist/persist/serialize.d.ts +28 -0
  87. package/dist/persist/serialize.d.ts.map +1 -0
  88. package/dist/persist.cjs +2 -0
  89. package/dist/persist.cjs.map +1 -0
  90. package/dist/persist.mjs +2 -0
  91. package/dist/persist.mjs.map +1 -0
  92. package/dist/proxy.d.ts +2 -0
  93. package/dist/proxy.d.ts.map +1 -0
  94. package/dist/registry-D3X0HSbl.js +26 -0
  95. package/dist/registry-D3X0HSbl.js.map +1 -0
  96. package/dist/registry-RDjbeJdx.js +29 -0
  97. package/dist/registry-RDjbeJdx.js.map +1 -0
  98. package/dist/registry-qtr1UpFU.js +2 -0
  99. package/dist/registry-qtr1UpFU.js.map +1 -0
  100. package/dist/registry-zaKZ1P-s.js +2 -0
  101. package/dist/registry-zaKZ1P-s.js.map +1 -0
  102. package/dist/registry.d.ts +54 -0
  103. package/dist/registry.d.ts.map +1 -0
  104. package/dist/signals/createSignal.d.ts +19 -0
  105. package/dist/signals/createSignal.d.ts.map +1 -0
  106. package/dist/signals/index.d.ts +20 -0
  107. package/dist/signals/index.d.ts.map +1 -0
  108. package/dist/signals/useSignal.d.ts +11 -0
  109. package/dist/signals/useSignal.d.ts.map +1 -0
  110. package/dist/signals.cjs +2 -0
  111. package/dist/signals.cjs.map +1 -0
  112. package/dist/signals.mjs +2 -0
  113. package/dist/signals.mjs.map +1 -0
  114. package/dist/stats.html +4949 -0
  115. package/dist/store.d.ts +12 -0
  116. package/dist/store.d.ts.map +1 -0
  117. package/dist/sync/channel.d.ts +7 -0
  118. package/dist/sync/channel.d.ts.map +1 -0
  119. package/dist/sync/index.d.ts +3 -0
  120. package/dist/sync/index.d.ts.map +1 -0
  121. package/dist/sync/protocol.d.ts +22 -0
  122. package/dist/sync/protocol.d.ts.map +1 -0
  123. package/dist/sync/withSync.d.ts +17 -0
  124. package/dist/sync/withSync.d.ts.map +1 -0
  125. package/dist/sync.cjs +2 -0
  126. package/dist/sync.cjs.map +1 -0
  127. package/dist/sync.mjs +2 -0
  128. package/dist/sync.mjs.map +1 -0
  129. package/dist/types.d.ts +134 -0
  130. package/dist/types.d.ts.map +1 -0
  131. package/package.json +91 -0
  132. package/rollup.config.mjs +44 -0
  133. package/src/async-entry.ts +6 -0
  134. package/src/async.ts +240 -0
  135. package/src/batch.ts +33 -0
  136. package/src/compose.ts +50 -0
  137. package/src/computed-entry.ts +6 -0
  138. package/src/computed.ts +187 -0
  139. package/src/devtools/history.ts +103 -0
  140. package/src/devtools/index.ts +5 -0
  141. package/src/devtools/redux-bridge.ts +70 -0
  142. package/src/devtools/snapshots.ts +54 -0
  143. package/src/devtools/withDevtools.ts +196 -0
  144. package/src/extensions/noop.ts +12 -0
  145. package/src/index.ts +4 -0
  146. package/src/persist/adapters/indexedDB.ts +114 -0
  147. package/src/persist/adapters/localStorage.ts +28 -0
  148. package/src/persist/adapters/memory.ts +26 -0
  149. package/src/persist/adapters/sessionStorage.ts +28 -0
  150. package/src/persist/debounce.ts +28 -0
  151. package/src/persist/hydrate.ts +60 -0
  152. package/src/persist/index.ts +141 -0
  153. package/src/persist/serialize.ts +60 -0
  154. package/src/proxy.ts +87 -0
  155. package/src/registry.ts +67 -0
  156. package/src/signals/createSignal.ts +81 -0
  157. package/src/signals/index.ts +20 -0
  158. package/src/signals/useSignal.ts +18 -0
  159. package/src/store.ts +250 -0
  160. package/src/sync/channel.ts +15 -0
  161. package/src/sync/index.ts +3 -0
  162. package/src/sync/protocol.ts +18 -0
  163. package/src/sync/withSync.ts +147 -0
  164. package/src/types.ts +159 -0
  165. package/tests/async.test.ts +1100 -0
  166. package/tests/batch.test.ts +41 -0
  167. package/tests/compose.test.ts +209 -0
  168. package/tests/computed.test.ts +867 -0
  169. package/tests/devtools.test.ts +1039 -0
  170. package/tests/integration/persist.integration.test.ts +258 -0
  171. package/tests/integration/signals.integration.test.ts +309 -0
  172. package/tests/integration.test.ts +278 -0
  173. package/tests/persist/adapters/indexedDB.adapter.test.ts +185 -0
  174. package/tests/persist/adapters/localStorage.adapter.test.ts +105 -0
  175. package/tests/persist/adapters/memory.adapter.test.ts +112 -0
  176. package/tests/persist/adapters/sessionStorage.adapter.test.ts +128 -0
  177. package/tests/persist/debounce.test.ts +121 -0
  178. package/tests/persist/hydrate.test.ts +120 -0
  179. package/tests/persist/migrate.test.ts +208 -0
  180. package/tests/persist/persist.test.ts +357 -0
  181. package/tests/persist/serialize.test.ts +128 -0
  182. package/tests/proxy.test.ts +473 -0
  183. package/tests/registry.test.ts +67 -0
  184. package/tests/signals/derived.test.ts +244 -0
  185. package/tests/signals/inference.test.ts +108 -0
  186. package/tests/signals/signal.test.ts +348 -0
  187. package/tests/signals/useSignal.test.tsx +275 -0
  188. package/tests/store.test.ts +482 -0
  189. package/tests/stress.test.ts +268 -0
  190. package/tests/sync.test.ts +576 -0
  191. package/tests/types.test.ts +32 -0
  192. package/tests/v0.3.test.ts +813 -0
  193. package/tree-shake-test.js +1 -0
  194. package/tsconfig.json +15 -0
  195. package/vitest.config.ts +22 -0
  196. package/vitest_play.ts +7 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Internal structure for a history entry in the ring buffer.
3
+ */
4
+ export interface HistoryEntry<S> {
5
+ state: S;
6
+ timestamp: number;
7
+ actionName: string;
8
+ }
9
+ /**
10
+ * Ring buffer for time-travel debugging.
11
+ * Fixed capacity ensures no unbounded growth.
12
+ */
13
+ export interface RingBuffer<S> {
14
+ entries: HistoryEntry<S>[];
15
+ cursor: number;
16
+ capacity: number;
17
+ }
18
+ /**
19
+ * Creates an empty ring buffer with the given capacity.
20
+ * @param capacity - Max number of entries (default 50)
21
+ */
22
+ export declare function createRingBuffer<S>(capacity?: number): RingBuffer<S>;
23
+ /**
24
+ * Pushes a new state to the ring buffer.
25
+ * Discards any redo stack (entries after the cursor).
26
+ * Drops oldest entry if capacity is exceeded.
27
+ */
28
+ export declare function push<S>(buffer: RingBuffer<S>, state: S, actionName: string): RingBuffer<S>;
29
+ /**
30
+ * Moves the cursor back one position and returns the state.
31
+ */
32
+ export declare function undo<S>(buffer: RingBuffer<S>): {
33
+ buffer: RingBuffer<S>;
34
+ state: S | null;
35
+ };
36
+ /**
37
+ * Moves the cursor forward one position and returns the state.
38
+ */
39
+ export declare function redo<S>(buffer: RingBuffer<S>): {
40
+ buffer: RingBuffer<S>;
41
+ state: S | null;
42
+ };
43
+ /**
44
+ * Returns true if the ring buffer can perform an undo.
45
+ */
46
+ export declare function canUndo<S>(buffer: RingBuffer<S>): boolean;
47
+ /**
48
+ * Returns true if the ring buffer can perform a redo.
49
+ */
50
+ export declare function canRedo<S>(buffer: RingBuffer<S>): boolean;
51
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/devtools/history.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAE,MAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAMxE;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAwB1F;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,CASzF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,CASzF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,5 @@
1
+ export { withDevtools } from './withDevtools';
2
+ export type { DevtoolsOptions } from './withDevtools';
3
+ export type { HistoryEntry } from './history';
4
+ export type { SnapshotEntry } from './snapshots';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Store } from '../types';
2
+ import { RingBuffer } from './history';
3
+ /** @internal */
4
+ export interface DevtoolsInternals<S> {
5
+ buffer: RingBuffer<S>;
6
+ initialState: S;
7
+ snapshots: Map<string, {
8
+ state: S;
9
+ timestamp: number;
10
+ }>;
11
+ _lastActionName: string | null;
12
+ _applySnapshot: (state: S) => void;
13
+ _isInternalUpdate: boolean;
14
+ }
15
+ /**
16
+ * Connects a devtools-enabled store to the Redux DevTools browser extension.
17
+ */
18
+ export declare function connectReduxDevtools<S extends object>(store: Store<S> & {
19
+ __devtools: DevtoolsInternals<S>;
20
+ }, name: string): () => void;
21
+ //# sourceMappingURL=redux-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redux-bridge.d.ts","sourceRoot":"","sources":["../../src/devtools/redux-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,gBAAgB;AAChB,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACnC,iBAAiB,EAAE,OAAO,CAAC;CAC9B;AAYD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACjD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG;IAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAA;CAAE,EACtD,IAAI,EAAE,MAAM,GACb,MAAM,IAAI,CAwCZ"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Internal structure for a named snapshot entry.
3
+ */
4
+ export interface SnapshotEntry<S> {
5
+ state: S;
6
+ timestamp: number;
7
+ }
8
+ /**
9
+ * A Map of named state checkpoints.
10
+ */
11
+ export type SnapshotMap<S> = Map<string, SnapshotEntry<S>>;
12
+ /**
13
+ * Creates a new empty snapshot map.
14
+ */
15
+ export declare function createSnapshotMap<S>(): SnapshotMap<S>;
16
+ /**
17
+ * Saves a state snapshot under the given name.
18
+ */
19
+ export declare function saveSnapshot<S>(map: SnapshotMap<S>, name: string, state: S): SnapshotMap<S>;
20
+ /**
21
+ * Returns the snapshot entry for the given name, or null if not found.
22
+ */
23
+ export declare function getSnapshot<S>(map: SnapshotMap<S>, name: string): SnapshotEntry<S> | null;
24
+ /**
25
+ * Removes the snapshot with the given name.
26
+ */
27
+ export declare function deleteSnapshot<S>(map: SnapshotMap<S>, name: string): SnapshotMap<S>;
28
+ /**
29
+ * Returns an array of all snapshot names.
30
+ */
31
+ export declare function listSnapshots<S>(map: SnapshotMap<S>): string[];
32
+ //# sourceMappingURL=snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/devtools/snapshots.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAErD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAO3F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAEzF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAInF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAE9D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Configuration options for DevTools.
3
+ */
4
+ export interface DevtoolsOptions {
5
+ /** Label shown in Redux DevTools panel */
6
+ name: string;
7
+ /** Max history entries in ring buffer (default 50) */
8
+ maxHistory?: number;
9
+ /** Whether devtools are enabled (default true) */
10
+ enabled?: boolean;
11
+ }
12
+ /**
13
+ * Wraps a store definition with DevTools capabilities.
14
+ * Must be imported to register the devtools extension.
15
+ */
16
+ export declare function withDevtools<D extends object>(definition: D, options: DevtoolsOptions): D;
17
+ //# sourceMappingURL=withDevtools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withDevtools.d.ts","sourceRoot":"","sources":["../../src/devtools/withDevtools.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAwBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EACzC,UAAU,EAAE,CAAC,EACb,OAAO,EAAE,eAAe,GACzB,CAAC,CAGH"}
@@ -0,0 +1,2 @@
1
+ "use strict";var t=require("./registry-qtr1UpFU.js");function e(t=50){return{entries:[],cursor:-1,capacity:t}}function n(t,e,n){const s={state:e,timestamp:Date.now(),actionName:n};let r=[...t.entries.slice(0,t.cursor+1),s],a=r.length-1;return r.length>t.capacity&&(r=r.slice(r.length-t.capacity),a=r.length-1),{...t,entries:r,cursor:a}}const s=new WeakMap;t.registerExtension({key:"devtools",processDefinition:t=>{const e=s.get(t);return e&&e.enabled,{state:{}}},extendStore:t=>{const{store:r,definition:a}=t,o=s.get(a);if(!o||!1===o.enabled)return{};const i=r.getState(),u={buffer:e(o.maxHistory||50),snapshots:new Map,initialState:i,_isInternalUpdate:!1,_lastActionName:null,_applySnapshot:t=>{u._isInternalUpdate=!0,r.setState(t),u._isInternalUpdate=!1}},c=r;c.__devtools=u;let f=!0;r.subscribe(()=>{if(u._isInternalUpdate)return;const t=r.getState();if(f&&null===u._lastActionName){const e=u.initialState,n=t,s=Object.keys(e);if(s.length===Object.keys(n).length&&s.every(t=>n[t]===e[t]))return void(f=!1)}f=!1;const e=u._lastActionName??"setState";u.buffer=n(u.buffer,t,e),u._lastActionName=null});const l=r.actions;return Object.keys(l).forEach(t=>{const e=l[t],n=(...n)=>(u._lastActionName=t,e(...n));l[t]=n;const s=r;s[t]===e&&(s[t]=n)}),"undefined"!=typeof window&&function(t,e){if("undefined"==typeof window)return()=>{};const n=window.__REDUX_DEVTOOLS_EXTENSION__;if(!n)return()=>{};const s=n.connect({name:`Storve | ${e}`,maxAge:t.__devtools.buffer.capacity});s.init(t.getState());const r=t.subscribe(e=>{t.__devtools._isInternalUpdate||s.send({type:t.__devtools._lastActionName??"setState"},e)}),a=s.subscribe(e=>{"DISPATCH"===e.type&&("JUMP_TO_STATE"===e.payload?.type||"JUMP_TO_ACTION"===e.payload?.type?e.state&&t.__devtools._applySnapshot(JSON.parse(e.state)):"RESET"===e.payload?.type&&t.__devtools._applySnapshot(t.__devtools.initialState))})}(c,o.name),{undo:()=>{const{buffer:t,state:e}=function(t){if(t.cursor>0){const e=t.cursor-1;return{buffer:{...t,cursor:e},state:t.entries[e].state}}return{buffer:t,state:null}}(u.buffer);e&&(u.buffer=t,u._applySnapshot(e))},redo:()=>{const{buffer:t,state:e}=function(t){if(t.cursor<t.entries.length-1){const e=t.cursor+1;return{buffer:{...t,cursor:e},state:t.entries[e].state}}return{buffer:t,state:null}}(u.buffer);e&&(u.buffer=t,u._applySnapshot(e))},get canUndo(){return u.buffer.cursor>0},get canRedo(){return(t=u.buffer).cursor<t.entries.length-1;var t},snapshot:t=>{u.snapshots=function(t,e,n){const s=new Map(t);return s.set(e,{state:n,timestamp:Date.now()}),s}(u.snapshots,t,r.getState()),u._isInternalUpdate=!0,r.setState({}),u._isInternalUpdate=!1},restore:t=>{const e=function(t,e){return t.get(e)||null}(u.snapshots,t);if(!e)throw new Error(`Storve DevTools: Snapshot "${t}" not found.`);u._applySnapshot(e.state),u.buffer=n(u.buffer,e.state,`restore('${t}')`)},deleteSnapshot:t=>{u.snapshots=function(t,e){const n=new Map(t);return n.delete(e),n}(u.snapshots,t),u._isInternalUpdate=!0,r.setState({}),u._isInternalUpdate=!1},clearHistory:()=>{u.buffer=e(u.buffer.capacity),u._isInternalUpdate=!0,r.setState({}),u._isInternalUpdate=!1},get history(){return[...u.buffer.entries]},get snapshots(){return t=u.snapshots,Array.from(t.keys());var t}}}}),exports.withDevtools=function(t,e){return s.set(t,e),t};
2
+ //# sourceMappingURL=devtools.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools.cjs","sources":["../src/devtools/history.ts","../src/devtools/withDevtools.ts","../src/devtools/snapshots.ts","../src/devtools/redux-bridge.ts"],"sourcesContent":[null,null,null,null],"names":["createRingBuffer","capacity","entries","cursor","push","buffer","state","actionName","entry","timestamp","Date","now","newEntries","slice","newCursor","length","DEVTOOLS_OPTIONS","WeakMap","registerExtension","key","processDefinition","definition","options","get","enabled","extendStore","context","store","initialState","getState","internals","maxHistory","snapshots","Map","_isInternalUpdate","_lastActionName","_applySnapshot","setState","devStore","__devtools","_initEchoPending","subscribe","currentState","init","curr","keys","Object","every","k","rawActions","actions","forEach","original","wrapped","args","storeAsRecord","window","name","extension","__REDUX_DEVTOOLS_EXTENSION__","devtools","connect","maxAge","unsubscribeStore","send","type","unsubscribeDevtools","message","payload","JSON","parse","connectReduxDevtools","undo","redo","canUndo","canRedo","snapshot","map","nextMap","set","saveSnapshot","restore","getSnapshot","Error","deleteSnapshot","delete","clearHistory","history","Array","from"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as t}from"./registry-zaKZ1P-s.js";function e(t=50){return{entries:[],cursor:-1,capacity:t}}function n(t,e,n){const s={state:e,timestamp:Date.now(),actionName:n};let r=[...t.entries.slice(0,t.cursor+1),s],a=r.length-1;return r.length>t.capacity&&(r=r.slice(r.length-t.capacity),a=r.length-1),{...t,entries:r,cursor:a}}const s=new WeakMap;function r(t,e){return s.set(t,e),t}t({key:"devtools",processDefinition:t=>{const e=s.get(t);return e&&e.enabled,{state:{}}},extendStore:t=>{const{store:r,definition:a}=t,o=s.get(a);if(!o||!1===o.enabled)return{};const i=r.getState(),u={buffer:e(o.maxHistory||50),snapshots:new Map,initialState:i,_isInternalUpdate:!1,_lastActionName:null,_applySnapshot:t=>{u._isInternalUpdate=!0,r.setState(t),u._isInternalUpdate=!1}},c=r;c.__devtools=u;let f=!0;r.subscribe(()=>{if(u._isInternalUpdate)return;const t=r.getState();if(f&&null===u._lastActionName){const e=u.initialState,n=t,s=Object.keys(e);if(s.length===Object.keys(n).length&&s.every(t=>n[t]===e[t]))return void(f=!1)}f=!1;const e=u._lastActionName??"setState";u.buffer=n(u.buffer,t,e),u._lastActionName=null});const l=r.actions;return Object.keys(l).forEach(t=>{const e=l[t],n=(...n)=>(u._lastActionName=t,e(...n));l[t]=n;const s=r;s[t]===e&&(s[t]=n)}),"undefined"!=typeof window&&function(t,e){if("undefined"==typeof window)return()=>{};const n=window.__REDUX_DEVTOOLS_EXTENSION__;if(!n)return()=>{};const s=n.connect({name:`Storve | ${e}`,maxAge:t.__devtools.buffer.capacity});s.init(t.getState());const r=t.subscribe(e=>{t.__devtools._isInternalUpdate||s.send({type:t.__devtools._lastActionName??"setState"},e)}),a=s.subscribe(e=>{"DISPATCH"===e.type&&("JUMP_TO_STATE"===e.payload?.type||"JUMP_TO_ACTION"===e.payload?.type?e.state&&t.__devtools._applySnapshot(JSON.parse(e.state)):"RESET"===e.payload?.type&&t.__devtools._applySnapshot(t.__devtools.initialState))})}(c,o.name),{undo:()=>{const{buffer:t,state:e}=function(t){if(t.cursor>0){const e=t.cursor-1;return{buffer:{...t,cursor:e},state:t.entries[e].state}}return{buffer:t,state:null}}(u.buffer);e&&(u.buffer=t,u._applySnapshot(e))},redo:()=>{const{buffer:t,state:e}=function(t){if(t.cursor<t.entries.length-1){const e=t.cursor+1;return{buffer:{...t,cursor:e},state:t.entries[e].state}}return{buffer:t,state:null}}(u.buffer);e&&(u.buffer=t,u._applySnapshot(e))},get canUndo(){return u.buffer.cursor>0},get canRedo(){return(t=u.buffer).cursor<t.entries.length-1;var t},snapshot:t=>{u.snapshots=function(t,e,n){const s=new Map(t);return s.set(e,{state:n,timestamp:Date.now()}),s}(u.snapshots,t,r.getState()),u._isInternalUpdate=!0,r.setState({}),u._isInternalUpdate=!1},restore:t=>{const e=function(t,e){return t.get(e)||null}(u.snapshots,t);if(!e)throw new Error(`Storve DevTools: Snapshot "${t}" not found.`);u._applySnapshot(e.state),u.buffer=n(u.buffer,e.state,`restore('${t}')`)},deleteSnapshot:t=>{u.snapshots=function(t,e){const n=new Map(t);return n.delete(e),n}(u.snapshots,t),u._isInternalUpdate=!0,r.setState({}),u._isInternalUpdate=!1},clearHistory:()=>{u.buffer=e(u.buffer.capacity),u._isInternalUpdate=!0,r.setState({}),u._isInternalUpdate=!1},get history(){return[...u.buffer.entries]},get snapshots(){return t=u.snapshots,Array.from(t.keys());var t}}}});export{r as withDevtools};
2
+ //# sourceMappingURL=devtools.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools.mjs","sources":["../src/devtools/history.ts","../src/devtools/withDevtools.ts","../src/devtools/snapshots.ts","../src/devtools/redux-bridge.ts"],"sourcesContent":[null,null,null,null],"names":["createRingBuffer","capacity","entries","cursor","push","buffer","state","actionName","entry","timestamp","Date","now","newEntries","slice","newCursor","length","DEVTOOLS_OPTIONS","WeakMap","withDevtools","definition","options","set","registerExtension","key","processDefinition","get","enabled","extendStore","context","store","initialState","getState","internals","maxHistory","snapshots","Map","_isInternalUpdate","_lastActionName","_applySnapshot","setState","devStore","__devtools","_initEchoPending","subscribe","currentState","init","curr","keys","Object","every","k","rawActions","actions","forEach","original","wrapped","args","storeAsRecord","window","name","extension","__REDUX_DEVTOOLS_EXTENSION__","devtools","connect","maxAge","unsubscribeStore","send","type","unsubscribeDevtools","message","payload","JSON","parse","connectReduxDevtools","undo","redo","canUndo","canRedo","snapshot","map","nextMap","saveSnapshot","restore","getSnapshot","Error","deleteSnapshot","delete","clearHistory","history","Array","from"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=noop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../../src/extensions/noop.ts"],"names":[],"mappings":""}
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("immer"),t=require("./registry-qtr1UpFU.js");const n=new WeakMap,r=new WeakMap;let o=!1;function s(e){if(null===e||"object"!=typeof e)return!1;return Object.getPrototypeOf(e)===Object.prototype||Array.isArray(e)}function c(e,t){if(!s(e))return e;if(n.has(e))return n.get(e);if(r.has(e))return e;const i=new Proxy(e,{get(e,r,c){if(Array.isArray(e)&&"string"==typeof r&&["push","pop","shift","unshift","splice","sort","reverse"].includes(r))return(...n)=>{const s=o;o=!0;const i=Reflect.get(e,r,c),a=Reflect.apply(i,c,n);return o=s,o||t(),a};const i=Reflect.get(e,r,c);return s(i)&&n.has(i)?n.get(i):i},set(e,n,i,a){const f=r.has(i)?r.get(i):i;s(f)&&c(f,t);const l=Reflect.set(e,n,f,a);return o||t(),l},deleteProperty(e,n){const r=Reflect.deleteProperty(e,n);return o||t(),r}});n.set(e,i),r.set(i,e);for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n];s(r)&&c(r,t)}return i}let i=0;const a=new Set;function f(){return i>0}exports.batch=function(e){i++;try{e()}finally{i--,0===i&&a.forEach(e=>e())}},exports.compose=function(e,...t){if(0===t.length)return e;let n=e;for(let e=0;e<t.length;e++)n=t[e](n);return n},exports.createStore=function(n,r={}){const{actions:o={},...s}=n;let i={...s};const l=[],u=new Set,y=[];for(const e of t.getExtensions())if(e.processDefinition){const t=e.processDefinition(i);i={...i,...t.state},t.asyncInits&&l.push(...t.asyncInits),t.readOnlyKeys&&t.readOnlyKeys.forEach(e=>u.add(e)),t.onStateChanged&&y.push(t.onStateChanged)}const p={current:null},d=new Map;for(const{key:e,init:t}of l){const n=t(t=>{p.current?.({[e]:t})});d.set(e,n),i[e]=n.getState()}const h=i,g=new Set;let S=h,w=0,O=!1,b=null,j=new Set,E=null,x=null;const P=()=>{w>0||f()?O=!0:(O=!1,g.forEach(e=>e(S)))},k=e=>{const t=(e,t)=>{S[e]=t};for(const n of y)n({changedKeys:e,getState:()=>S,setComputed:t,store:A})},m=c(h,P),v=t=>{let n;if(n="function"==typeof t?r.immer?e.produce(S,t):{...S,...t(S)}:{...S,...t},n===S)return;const o={...n};u.forEach(e=>delete o[e]);const s=S,c=new Set(Object.keys(o).filter(e=>s[e]!==o[e]));S={...S,...o},w>0||f()?(c.forEach(e=>j.add(e)),O=!0):k(c),E=null,x=null,w++;try{for(const e in S)Object.prototype.hasOwnProperty.call(S,e)&&S[e]!==s[e]&&(m[e]=S[e])}finally{w--}w>0?O=!0:P()};p.current=v;const A={getState:()=>{if(null!==E&&x===S)return E;const e={...S};return E=e,x=S,e},setState:v,subscribe:e=>{var t;return g.add(e),1===g.size&&(t=()=>{O&&(O=!1,k(j),j=new Set,P())},a.add(t),b=()=>{a.delete(t)},O&&(O=!1,k(j),j=new Set,P())),()=>{g.delete(e),0===g.size&&(b?.(),b=null)}},batch:e=>{w++;try{e()}finally{w--,0===w&&O&&(O=!1,k(j),j=new Set,P())}},actions:{},fetch:async e=>{throw new Error(`Storve: no async key "${e}" found in store. Import "storve/async" to use createAsync.`)},refetch:async()=>{},invalidate:()=>{},invalidateAll:()=>{},getAsyncState:()=>{}};for(const e of t.getExtensions())if(e.extendStore){const t=e.extendStore({engines:d,store:A,definition:n});Object.defineProperties(A,Object.getOwnPropertyDescriptors(t))}k(new Set(Object.keys(S)));const R={};return Object.keys(o).forEach(e=>{R[e]=(...t)=>o[e](...t)}),Object.assign(A,R),A.actions=R,A};
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,118 @@
1
+ 'use strict';
2
+
3
+ const proxyMap = new WeakMap();
4
+ const rawMap = new WeakMap();
5
+ let isBatching = false;
6
+ function isPlainObjectOrArray(value) {
7
+ if (value === null || typeof value !== 'object')
8
+ return false;
9
+ const proto = Object.getPrototypeOf(value);
10
+ return proto === Object.prototype || Array.isArray(value);
11
+ }
12
+ function createStateProxy(state, onChange) {
13
+ if (!isPlainObjectOrArray(state)) {
14
+ return state;
15
+ }
16
+ if (proxyMap.has(state)) {
17
+ return proxyMap.get(state);
18
+ }
19
+ if (rawMap.has(state)) {
20
+ return state; // It's already a proxy
21
+ }
22
+ const handler = {
23
+ get(target, prop, receiver) {
24
+ if (Array.isArray(target) && typeof prop === 'string' && ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].includes(prop)) {
25
+ return (...args) => {
26
+ const prevBatching = isBatching;
27
+ isBatching = true;
28
+ const method = Reflect.get(target, prop, receiver);
29
+ const result = Reflect.apply(method, receiver, args);
30
+ isBatching = prevBatching;
31
+ if (!isBatching) {
32
+ onChange();
33
+ }
34
+ return result;
35
+ };
36
+ }
37
+ const value = Reflect.get(target, prop, receiver);
38
+ if (isPlainObjectOrArray(value) && proxyMap.has(value)) {
39
+ return proxyMap.get(value);
40
+ }
41
+ return value;
42
+ },
43
+ set(target, prop, value, receiver) {
44
+ // Unpack if value is a proxy itself
45
+ const rawValue = rawMap.has(value) ? rawMap.get(value) : value;
46
+ // Immediately wrap new nested objects
47
+ if (isPlainObjectOrArray(rawValue)) {
48
+ createStateProxy(rawValue, onChange);
49
+ }
50
+ const result = Reflect.set(target, prop, rawValue, receiver);
51
+ // Trigger listeners on write
52
+ if (!isBatching)
53
+ onChange();
54
+ return result;
55
+ },
56
+ deleteProperty(target, prop) {
57
+ const result = Reflect.deleteProperty(target, prop);
58
+ if (!isBatching)
59
+ onChange();
60
+ return result;
61
+ }
62
+ };
63
+ const proxy = new Proxy(state, handler);
64
+ proxyMap.set(state, proxy);
65
+ rawMap.set(proxy, state);
66
+ // Recursively proxy existing nested objects upfront
67
+ for (const key in state) {
68
+ if (Object.prototype.hasOwnProperty.call(state, key)) {
69
+ const val = state[key];
70
+ if (isPlainObjectOrArray(val)) {
71
+ createStateProxy(val, onChange);
72
+ }
73
+ }
74
+ }
75
+ return proxy;
76
+ }
77
+
78
+ /**
79
+ * Creates a reactive store with auto-tracking features via Proxies.
80
+ * Any mutations to the state via setState or directly to deep objects will notify subscribers.
81
+ *
82
+ * @param definition - The initial state object. Must be an object.
83
+ * @returns A generic store instance with getState, setState, and subscribe methods.
84
+ */
85
+ function createStore(definition) {
86
+ const listeners = new Set();
87
+ const notify = () => {
88
+ const currentState = store.getState();
89
+ listeners.forEach(listener => listener(currentState));
90
+ };
91
+ const proxyState = createStateProxy(definition, notify);
92
+ const store = {
93
+ getState: () => {
94
+ // Return unwrapped raw value representing the current state.
95
+ // Notice that proxyState mutates "definition" directly, so definition is always up to date.
96
+ return definition;
97
+ },
98
+ setState: (updater) => {
99
+ const updates = typeof updater === 'function' ? updater(store.getState()) : updater;
100
+ for (const key in updates) {
101
+ if (Object.prototype.hasOwnProperty.call(updates, key)) {
102
+ // Assign to proxy to trigger proxy 'set' traps which handles notification.
103
+ proxyState[key] = updates[key];
104
+ }
105
+ }
106
+ },
107
+ subscribe: (listener) => {
108
+ listeners.add(listener);
109
+ return () => {
110
+ listeners.delete(listener);
111
+ };
112
+ }
113
+ };
114
+ return store;
115
+ }
116
+
117
+ exports.createStore = createStore;
118
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/proxy.ts","../src/store.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/proxy.ts","../src/batch.ts","../src/compose.ts","../src/store.ts"],"sourcesContent":[null,null,null,null],"names":["proxyMap","WeakMap","rawMap","isBatching","isPlainObjectOrArray","value","Object","getPrototypeOf","prototype","Array","isArray","createStateProxy","state","onChange","has","get","proxy","Proxy","target","prop","receiver","includes","args","prevBatching","method","Reflect","result","apply","set","rawValue","deleteProperty","key","hasOwnProperty","call","val","batchCount","subscribers","Set","fn","forEach","s","store","enhancers","length","currentStore","i","definition","options","actions","rawActions","initialData","workingData","allAsyncInits","readOnlyKeys","onStateChangedCallbacks","ext","getExtensions","processDefinition","asyncInits","push","k","add","onStateChanged","setStateRef","current","engines","Map","init","engine","nodeState","getState","initialState","listeners","currentState","batchDirty","unsubscribeBatch","pendingChangedKeys","lastSnapshot","lastSnapshotState","notify","listener","runOnStateChanged","changedKeys","setComputed","cb","proxyState","setState","updater","nextState","immer","produce","writableNext","prevState","updatedKeys","keys","filter","snapshot","subscribe","size","delete","batch","fetch","async","Error","refetch","invalidate","invalidateAll","getAsyncState","extendStore","methods","defineProperties","getOwnPropertyDescriptors","boundActions","assign"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { createStore } from './store';
2
+ export { batch } from './batch';
3
+ export { compose } from './compose';
4
+ export type { Store, StoreDefinition, Listener, Unsubscribe, StoreOptions, StoreState, StoreActions, AsyncState, AsyncOptions, AsyncStatus, ComputedValue, WritableStoreState, ComputedKeys } from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,116 @@
1
+ const proxyMap = new WeakMap();
2
+ const rawMap = new WeakMap();
3
+ let isBatching = false;
4
+ function isPlainObjectOrArray(value) {
5
+ if (value === null || typeof value !== 'object')
6
+ return false;
7
+ const proto = Object.getPrototypeOf(value);
8
+ return proto === Object.prototype || Array.isArray(value);
9
+ }
10
+ function createStateProxy(state, onChange) {
11
+ if (!isPlainObjectOrArray(state)) {
12
+ return state;
13
+ }
14
+ if (proxyMap.has(state)) {
15
+ return proxyMap.get(state);
16
+ }
17
+ if (rawMap.has(state)) {
18
+ return state; // It's already a proxy
19
+ }
20
+ const handler = {
21
+ get(target, prop, receiver) {
22
+ if (Array.isArray(target) && typeof prop === 'string' && ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].includes(prop)) {
23
+ return (...args) => {
24
+ const prevBatching = isBatching;
25
+ isBatching = true;
26
+ const method = Reflect.get(target, prop, receiver);
27
+ const result = Reflect.apply(method, receiver, args);
28
+ isBatching = prevBatching;
29
+ if (!isBatching) {
30
+ onChange();
31
+ }
32
+ return result;
33
+ };
34
+ }
35
+ const value = Reflect.get(target, prop, receiver);
36
+ if (isPlainObjectOrArray(value) && proxyMap.has(value)) {
37
+ return proxyMap.get(value);
38
+ }
39
+ return value;
40
+ },
41
+ set(target, prop, value, receiver) {
42
+ // Unpack if value is a proxy itself
43
+ const rawValue = rawMap.has(value) ? rawMap.get(value) : value;
44
+ // Immediately wrap new nested objects
45
+ if (isPlainObjectOrArray(rawValue)) {
46
+ createStateProxy(rawValue, onChange);
47
+ }
48
+ const result = Reflect.set(target, prop, rawValue, receiver);
49
+ // Trigger listeners on write
50
+ if (!isBatching)
51
+ onChange();
52
+ return result;
53
+ },
54
+ deleteProperty(target, prop) {
55
+ const result = Reflect.deleteProperty(target, prop);
56
+ if (!isBatching)
57
+ onChange();
58
+ return result;
59
+ }
60
+ };
61
+ const proxy = new Proxy(state, handler);
62
+ proxyMap.set(state, proxy);
63
+ rawMap.set(proxy, state);
64
+ // Recursively proxy existing nested objects upfront
65
+ for (const key in state) {
66
+ if (Object.prototype.hasOwnProperty.call(state, key)) {
67
+ const val = state[key];
68
+ if (isPlainObjectOrArray(val)) {
69
+ createStateProxy(val, onChange);
70
+ }
71
+ }
72
+ }
73
+ return proxy;
74
+ }
75
+
76
+ /**
77
+ * Creates a reactive store with auto-tracking features via Proxies.
78
+ * Any mutations to the state via setState or directly to deep objects will notify subscribers.
79
+ *
80
+ * @param definition - The initial state object. Must be an object.
81
+ * @returns A generic store instance with getState, setState, and subscribe methods.
82
+ */
83
+ function createStore(definition) {
84
+ const listeners = new Set();
85
+ const notify = () => {
86
+ const currentState = store.getState();
87
+ listeners.forEach(listener => listener(currentState));
88
+ };
89
+ const proxyState = createStateProxy(definition, notify);
90
+ const store = {
91
+ getState: () => {
92
+ // Return unwrapped raw value representing the current state.
93
+ // Notice that proxyState mutates "definition" directly, so definition is always up to date.
94
+ return definition;
95
+ },
96
+ setState: (updater) => {
97
+ const updates = typeof updater === 'function' ? updater(store.getState()) : updater;
98
+ for (const key in updates) {
99
+ if (Object.prototype.hasOwnProperty.call(updates, key)) {
100
+ // Assign to proxy to trigger proxy 'set' traps which handles notification.
101
+ proxyState[key] = updates[key];
102
+ }
103
+ }
104
+ },
105
+ subscribe: (listener) => {
106
+ listeners.add(listener);
107
+ return () => {
108
+ listeners.delete(listener);
109
+ };
110
+ }
111
+ };
112
+ return store;
113
+ }
114
+
115
+ export { createStore };
116
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/proxy.ts","../src/store.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import{produce as t}from"immer";import{g as e}from"./registry-zaKZ1P-s.js";const n=new WeakMap,r=new WeakMap;let o=!1;function s(t){if(null===t||"object"!=typeof t)return!1;return Object.getPrototypeOf(t)===Object.prototype||Array.isArray(t)}function c(t,e){if(!s(t))return t;if(n.has(t))return n.get(t);if(r.has(t))return t;const i=new Proxy(t,{get(t,r,c){if(Array.isArray(t)&&"string"==typeof r&&["push","pop","shift","unshift","splice","sort","reverse"].includes(r))return(...n)=>{const s=o;o=!0;const i=Reflect.get(t,r,c),a=Reflect.apply(i,c,n);return o=s,o||e(),a};const i=Reflect.get(t,r,c);return s(i)&&n.has(i)?n.get(i):i},set(t,n,i,a){const f=r.has(i)?r.get(i):i;s(f)&&c(f,e);const l=Reflect.set(t,n,f,a);return o||e(),l},deleteProperty(t,n){const r=Reflect.deleteProperty(t,n);return o||e(),r}});n.set(t,i),r.set(i,t);for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)){const r=t[n];s(r)&&c(r,e)}return i}let i=0;const a=new Set;function f(t){i++;try{t()}finally{i--,0===i&&a.forEach(t=>t())}}function l(){return i>0}function u(n,r={}){const{actions:o={},...s}=n;let i={...s};const f=[],u=new Set,y=[];for(const t of e())if(t.processDefinition){const e=t.processDefinition(i);i={...i,...e.state},e.asyncInits&&f.push(...e.asyncInits),e.readOnlyKeys&&e.readOnlyKeys.forEach(t=>u.add(t)),e.onStateChanged&&y.push(e.onStateChanged)}const p={current:null},d=new Map;for(const{key:t,init:e}of f){const n=e(e=>{p.current?.({[t]:e})});d.set(t,n),i[t]=n.getState()}const h=i,g=new Set;let S=h,w=0,O=!1,b=null,j=new Set,m=null,P=null;const k=()=>{w>0||l()?O=!0:(O=!1,g.forEach(t=>t(S)))},A=t=>{const e=(t,e)=>{S[t]=e};for(const n of y)n({changedKeys:t,getState:()=>S,setComputed:e,store:R})},E=c(h,k),v=e=>{let n;if(n="function"==typeof e?r.immer?t(S,e):{...S,...e(S)}:{...S,...e},n===S)return;const o={...n};u.forEach(t=>delete o[t]);const s=S,c=new Set(Object.keys(o).filter(t=>s[t]!==o[t]));S={...S,...o},w>0||l()?(c.forEach(t=>j.add(t)),O=!0):A(c),m=null,P=null,w++;try{for(const t in S)Object.prototype.hasOwnProperty.call(S,t)&&S[t]!==s[t]&&(E[t]=S[t])}finally{w--}w>0?O=!0:k()};p.current=v;const R={getState:()=>{if(null!==m&&P===S)return m;const t={...S};return m=t,P=S,t},setState:v,subscribe:t=>{var e;return g.add(t),1===g.size&&(e=()=>{O&&(O=!1,A(j),j=new Set,k())},a.add(e),b=()=>{a.delete(e)},O&&(O=!1,A(j),j=new Set,k())),()=>{g.delete(t),0===g.size&&(b?.(),b=null)}},batch:t=>{w++;try{t()}finally{w--,0===w&&O&&(O=!1,A(j),j=new Set,k())}},actions:{},fetch:async t=>{throw new Error(`Storve: no async key "${t}" found in store. Import "storve/async" to use createAsync.`)},refetch:async()=>{},invalidate:()=>{},invalidateAll:()=>{},getAsyncState:()=>{}};for(const t of e())if(t.extendStore){const e=t.extendStore({engines:d,store:R,definition:n});Object.defineProperties(R,Object.getOwnPropertyDescriptors(e))}A(new Set(Object.keys(S)));const x={};return Object.keys(o).forEach(t=>{x[t]=(...e)=>o[t](...e)}),Object.assign(R,x),R.actions=x,R}function y(t,...e){if(0===e.length)return t;let n=t;for(let t=0;t<e.length;t++)n=e[t](n);return n}export{f as batch,y as compose,u as createStore};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/proxy.ts","../src/batch.ts","../src/store.ts","../src/compose.ts"],"sourcesContent":[null,null,null,null],"names":["proxyMap","WeakMap","rawMap","isBatching","isPlainObjectOrArray","value","Object","getPrototypeOf","prototype","Array","isArray","createStateProxy","state","onChange","has","get","proxy","Proxy","target","prop","receiver","includes","args","prevBatching","method","Reflect","result","apply","set","rawValue","deleteProperty","key","hasOwnProperty","call","val","batchCount","subscribers","Set","batch","fn","forEach","s","createStore","definition","options","actions","rawActions","initialData","workingData","allAsyncInits","readOnlyKeys","onStateChangedCallbacks","ext","getExtensions","processDefinition","asyncInits","push","k","add","onStateChanged","setStateRef","current","engines","Map","init","engine","nodeState","getState","initialState","listeners","currentState","batchDirty","unsubscribeBatch","pendingChangedKeys","lastSnapshot","lastSnapshotState","notify","listener","runOnStateChanged","changedKeys","setComputed","cb","store","proxyState","setState","updater","nextState","immer","produce","writableNext","prevState","updatedKeys","keys","filter","snapshot","subscribe","size","delete","fetch","async","Error","refetch","invalidate","invalidateAll","getAsyncState","extendStore","methods","defineProperties","getOwnPropertyDescriptors","boundActions","assign","compose","enhancers","length","currentStore","i"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PersistAdapter } from '../index.js';
2
+ /**
3
+ * Creates an IndexedDB persistence adapter.
4
+ * Lazily opens the database on first interaction and caches the Promise.
5
+ * Safe for Server-Side Rendering (SSR) — if 'indexedDB' is totally unavailable,
6
+ * methods elegantly degrade to returning null / no-op promises.
7
+ *
8
+ * @param {string} [dbName='storve-persist'] - Optional custom database name.
9
+ * @returns {PersistAdapter} The IndexedDB persistence adapter.
10
+ */
11
+ export declare function indexedDBAdapter(dbName?: string): PersistAdapter;
12
+ //# sourceMappingURL=indexedDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDB.d.ts","sourceRoot":"","sources":["../../../src/persist/adapters/indexedDB.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,MAAyB,GAAG,cAAc,CAsGlF"}
@@ -0,0 +1,11 @@
1
+ import type { PersistAdapter } from '../index.js';
2
+ /**
3
+ * Creates a localStorage persistence adapter.
4
+ * Uses window.localStorage to automatically persist state modifications in the browser.
5
+ * Safe for Server-Side Rendering (SSR) — if 'window' is completely undefined,
6
+ * methods gracefully return null or perform no-ops.
7
+ *
8
+ * @returns {PersistAdapter} The localStorage persistence adapter.
9
+ */
10
+ export declare function localStorageAdapter(): PersistAdapter;
11
+ //# sourceMappingURL=localStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.d.ts","sourceRoot":"","sources":["../../../src/persist/adapters/localStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAiBpD"}
@@ -0,0 +1,11 @@
1
+ import type { PersistAdapter } from '../index.js';
2
+ /**
3
+ * Creates an entirely isolated memory-based persistence adapter.
4
+ * This adapter uses a closure-scoped Map to store data, ensuring fully
5
+ * segregated instances without any module-level state.
6
+ * Ideal for testing or Node/SSR environments where no real storage is available.
7
+ *
8
+ * @returns {PersistAdapter} An isolated memory adapter instance.
9
+ */
10
+ export declare function memoryAdapter(): PersistAdapter;
11
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/persist/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAe9C"}
@@ -0,0 +1,11 @@
1
+ import type { PersistAdapter } from '../index.js';
2
+ /**
3
+ * Creates a sessionStorage persistence adapter.
4
+ * Uses window.sessionStorage to persist state for the lifespan of the browser tab.
5
+ * Safe for Server-Side Rendering (SSR) — if 'window' is completely undefined,
6
+ * methods gracefully return null or perform no-ops.
7
+ *
8
+ * @returns {PersistAdapter} The sessionStorage persistence adapter.
9
+ */
10
+ export declare function sessionStorageAdapter(): PersistAdapter;
11
+ //# sourceMappingURL=sessionStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionStorage.d.ts","sourceRoot":"","sources":["../../../src/persist/adapters/sessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,cAAc,CAiBtD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Creates a debounced version of a provided function that delays its execution until after
3
+ * the specified milliseconds have elapsed since the last time it was called.
4
+ * If 'ms' is 0, the function invokes immediately.
5
+ *
6
+ * @template T - The arguments type array.
7
+ * @param {(...args: T) => void} fn - The function to debounce.
8
+ * @param {number} ms - The number of milliseconds to wait.
9
+ * @returns {(...args: T) => void} The new debounced function.
10
+ */
11
+ export declare function createDebounce<T extends unknown[]>(fn: (...args: T) => void, ms: number): (...args: T) => void;
12
+ //# sourceMappingURL=debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../src/persist/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAiB9G"}