@storesjs/stores 0.9.0 → 0.10.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 (133) hide show
  1. package/README.md +55 -29
  2. package/dist/createBaseStore.d.ts +6 -6
  3. package/dist/createDerivedStore.d.ts +9 -17
  4. package/dist/createQueryStore.d.ts +4 -3
  5. package/dist/createVirtualStore.d.ts +1 -2
  6. package/dist/env.native.d.ts +0 -2
  7. package/dist/env.web.d.ts +0 -1
  8. package/dist/hooks/useListen.d.ts +2 -2
  9. package/dist/index.d.ts +1 -16
  10. package/dist/index.shared.d.ts +14 -0
  11. package/dist/index.vanilla.d.ts +2 -0
  12. package/dist/internal/baseStore.d.ts +2 -0
  13. package/dist/{config.d.ts → internal/config.d.ts} +5 -11
  14. package/dist/{utils → internal}/createStoreActions.d.ts +4 -5
  15. package/dist/{derivedStore → internal/derivedStore}/deriveProxy.d.ts +2 -2
  16. package/dist/{derivedStore → internal/derivedStore}/pathFinder.d.ts +1 -2
  17. package/dist/internal/derivedStore.d.ts +2 -0
  18. package/dist/{errors.d.ts → internal/errors.d.ts} +0 -4
  19. package/dist/{logger.d.ts → internal/logger.d.ts} +0 -2
  20. package/dist/internal/middleware/createHydrationGate.d.ts +20 -0
  21. package/dist/internal/queryStore/queryStoreDefaults.d.ts +8 -0
  22. package/dist/internal/queryStore.d.ts +2 -0
  23. package/dist/internal/runtime.d.ts +13 -0
  24. package/dist/internal/signal.d.ts +12 -0
  25. package/dist/internal/storage/storageCreators.d.ts +12 -0
  26. package/dist/{utils → internal}/storeUtils.d.ts +3 -21
  27. package/dist/internal/sync/browserSyncEngine.d.ts +3 -0
  28. package/dist/internal/sync/noopSyncEngine.d.ts +3 -0
  29. package/dist/internal/sync/syncEnhancer.d.ts +26 -0
  30. package/dist/{sync → internal/sync}/syncUtils.d.ts +1 -1
  31. package/dist/internal/utils/persistUtils.d.ts +9 -0
  32. package/dist/internal/virtualStore.d.ts +2 -0
  33. package/dist/native/index.js +1 -1
  34. package/dist/native/index.mjs +1 -1
  35. package/dist/queryStore/queryKey.d.ts +3 -0
  36. package/dist/queryStore/signalTypes.d.ts +4 -3
  37. package/dist/queryStore/types.d.ts +5 -4
  38. package/dist/store/attachStoreHook.react.d.ts +5 -0
  39. package/dist/store/attachStoreHook.vanilla.d.ts +6 -0
  40. package/dist/store/batchStoreNotifications.native.d.ts +3 -0
  41. package/dist/store/batchStoreNotifications.web.d.ts +2 -0
  42. package/dist/store/createStore.d.ts +6 -0
  43. package/dist/store/persist.d.ts +14 -0
  44. package/dist/store/stateUpdate.d.ts +10 -0
  45. package/dist/store/types.d.ts +108 -0
  46. package/dist/types/setState.d.ts +22 -0
  47. package/dist/types/subscribe.d.ts +28 -0
  48. package/dist/types/useStoreCallSignatures.d.ts +2 -0
  49. package/dist/types/useStoreCallSignatures.react.d.ts +6 -0
  50. package/dist/types/useStoreCallSignatures.vanilla.d.ts +2 -0
  51. package/dist/types/utils.d.ts +4 -0
  52. package/dist/types.d.ts +43 -93
  53. package/dist/utils/time.d.ts +0 -7
  54. package/dist/vanilla/createBaseStore.d.ts +35 -0
  55. package/dist/vanilla/createDerivedStore.d.ts +62 -0
  56. package/dist/vanilla/createQueryStore.d.ts +116 -0
  57. package/dist/vanilla/createVirtualStore.d.ts +39 -0
  58. package/dist/vanilla/env.web.d.ts +6 -0
  59. package/dist/vanilla/index.d.ts +1 -0
  60. package/dist/vanilla/index.js +1 -0
  61. package/dist/vanilla/index.mjs +1 -0
  62. package/dist/vanilla/index.shared.d.ts +13 -0
  63. package/dist/vanilla/index.vanilla.d.ts +1 -0
  64. package/dist/vanilla/internal/baseStore.d.ts +1 -0
  65. package/dist/vanilla/internal/config.d.ts +63 -0
  66. package/dist/vanilla/internal/createStoreActions.d.ts +23 -0
  67. package/dist/vanilla/internal/derivedStore/cascadeScheduler.d.ts +30 -0
  68. package/dist/vanilla/internal/derivedStore/deriveProxy.d.ts +14 -0
  69. package/dist/vanilla/internal/derivedStore/pathFinder.d.ts +25 -0
  70. package/dist/vanilla/internal/derivedStore.d.ts +1 -0
  71. package/dist/vanilla/internal/errors.d.ts +9 -0
  72. package/dist/vanilla/internal/logger.d.ts +9 -0
  73. package/dist/{middleware → vanilla/internal/middleware}/createHydrationGate.d.ts +1 -2
  74. package/dist/{queryStore → vanilla/internal/queryStore}/queryStoreDefaults.d.ts +1 -2
  75. package/dist/vanilla/internal/queryStore.d.ts +1 -0
  76. package/dist/vanilla/internal/runtime.d.ts +12 -0
  77. package/dist/vanilla/internal/signal.d.ts +11 -0
  78. package/dist/vanilla/internal/storage/storageCreators.d.ts +11 -0
  79. package/dist/vanilla/internal/storeUtils.d.ts +45 -0
  80. package/dist/vanilla/internal/sync/browserSyncEngine.d.ts +2 -0
  81. package/dist/vanilla/internal/sync/noopSyncEngine.d.ts +2 -0
  82. package/dist/{sync → vanilla/internal/sync}/syncEnhancer.d.ts +2 -3
  83. package/dist/{utils → vanilla/internal/utils}/persistUtils.d.ts +1 -2
  84. package/dist/vanilla/internal/virtualStore.d.ts +1 -0
  85. package/dist/vanilla/queryStore/classes/SubscriptionManager.d.ts +66 -0
  86. package/dist/vanilla/queryStore/queryKey.d.ts +2 -0
  87. package/dist/vanilla/queryStore/signalTypes.d.ts +13 -0
  88. package/dist/vanilla/queryStore/types.d.ts +402 -0
  89. package/dist/vanilla/storage/storageTypes.d.ts +12 -0
  90. package/dist/vanilla/store/attachStoreHook.d.ts +5 -0
  91. package/dist/vanilla/store/attachStoreHook.vanilla.d.ts +5 -0
  92. package/dist/vanilla/store/batchStoreNotifications.web.d.ts +1 -0
  93. package/dist/vanilla/store/createStore.d.ts +5 -0
  94. package/dist/vanilla/store/persist.d.ts +13 -0
  95. package/dist/vanilla/store/stateUpdate.d.ts +9 -0
  96. package/dist/vanilla/store/types.d.ts +107 -0
  97. package/dist/vanilla/storesStorage.web.d.ts +2 -0
  98. package/dist/vanilla/sync/types.d.ts +114 -0
  99. package/dist/vanilla/types/functions.d.ts +23 -0
  100. package/dist/vanilla/types/objects.d.ts +10 -0
  101. package/dist/vanilla/types/setState.d.ts +21 -0
  102. package/dist/vanilla/types/subscribe.d.ts +27 -0
  103. package/dist/vanilla/types/useStoreCallSignatures.d.ts +1 -0
  104. package/dist/vanilla/types/useStoreCallSignatures.vanilla.d.ts +1 -0
  105. package/dist/vanilla/types/utils.d.ts +12 -0
  106. package/dist/vanilla/types.d.ts +285 -0
  107. package/dist/vanilla/utils/core.d.ts +25 -0
  108. package/dist/vanilla/utils/createAsyncMicrotaskScheduler.d.ts +34 -0
  109. package/dist/vanilla/utils/createMicrotaskScheduler.d.ts +27 -0
  110. package/dist/vanilla/utils/debounce.d.ts +21 -0
  111. package/dist/vanilla/utils/equality.d.ts +37 -0
  112. package/dist/vanilla/utils/hydrationCoordinator.d.ts +12 -0
  113. package/dist/vanilla/utils/promiseUtils.d.ts +1 -0
  114. package/dist/vanilla/utils/serialization.d.ts +13 -0
  115. package/dist/vanilla/utils/stringUtils.d.ts +6 -0
  116. package/dist/vanilla/utils/time.d.ts +36 -0
  117. package/dist/web/chrome.js +1 -1
  118. package/dist/web/chrome.mjs +1 -1
  119. package/dist/web/chunk-QJLWBD7M.mjs +1 -0
  120. package/dist/web/chunk-V4LHP7LR.mjs +1 -0
  121. package/dist/web/index.js +1 -1
  122. package/dist/web/index.mjs +1 -1
  123. package/dist/web/internal/runtime.js +1 -0
  124. package/dist/web/internal/runtime.mjs +1 -0
  125. package/package.json +13 -11
  126. package/dist/createStoreWithEqualityFn.d.ts +0 -5
  127. package/dist/hooks/compareHooks.d.ts +0 -50
  128. package/dist/signal.d.ts +0 -11
  129. package/dist/storage/storageCreators.d.ts +0 -22
  130. package/dist/sync/browserSyncEngine.d.ts +0 -3
  131. package/dist/sync/noopSyncEngine.d.ts +0 -3
  132. package/dist/web/chunk-3U5A7HQV.mjs +0 -1
  133. /package/dist/{derivedStore → internal/derivedStore}/cascadeScheduler.d.ts +0 -0
@@ -0,0 +1 @@
1
+ import{isPlainObject as e,isRecordLike as t,hasOwn as n,isPromiseLike as r,reviver as o,replacer as i}from"../chunk-QJLWBD7M.mjs";export{replacer,reviver}from"../chunk-QJLWBD7M.mjs";import{IS_DEV as s,IS_TEST as a,IS_BROWSER as c,nullObject as u,IS_IOS as l,buildNullObject as f,noop as d,identity as y}from"../chunk-V4LHP7LR.mjs";export{identity,nullObject}from"../chunk-V4LHP7LR.mjs";function h(){return"undefined"!=typeof window?window.localStorage:null}var g={debug:(e,t)=>{s&&console.debug(e,t)},error:(e,t)=>{s&&!a&&console.error(e,t)},info:(e,t)=>{s&&console.info(e,t)},warn:(e,t)=>{s&&console.warn(e,t)}};function p(e){g=e}var m=class extends Error{constructor(e,t){super(e),this.name="StoresError",void 0!==t&&Object.defineProperty(this,"cause",{configurable:!0,value:t,writable:!0})}};function b(e){return e instanceof Error?e:new Error(String(e))}var S,v="stores/core/sync-channel",w=`${v}:storage:`,O=class{constructor(e){this.broadcast=e.broadcast,this.origin=e.origin,this.storeKey=e.storeKey,this.teardown=e.teardown}destroy(){this.teardown()}publish(e){const t=u();for(const n of Object.entries(e.values))t[n[0]]=n[1];const n={origin:this.origin,replace:e.replace,sessionId:e.sessionId,storeKey:this.storeKey,timestamp:e.timestamp,values:t};this.broadcast(n)}},j=class{constructor(){this.listeners=new Map,this.origin="undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Math.random().toString(36).slice(2)}:${Date.now().toString(36)}`,this.onChannelMessage=e=>{e.data&&this.dispatch(e.data)},this.onStorageEvent=e=>{if(e.key&&e.newValue&&e.key.startsWith(w))try{const t=JSON.parse(e.newValue);this.dispatch(t)}catch(e){g.error(new m("[sync] Failed to parse storage event payload",e))}},this.channel="undefined"==typeof BroadcastChannel?null:new BroadcastChannel(v),this.storage=I(),this.channel&&this.channel.addEventListener("message",this.onChannelMessage),c&&window.addEventListener("storage",this.onStorageEvent)}get sessionId(){return this.origin}register(e){const t=t=>{if(t.origin===this.origin||t.storeKey!==e.key)return;const r=u();for(const o of e.fields)n(t.values,o)&&(r[o]=t.values[o]);Object.keys(r).length&&e.apply({replace:t.replace,sessionId:t.sessionId,timestamp:t.timestamp,values:r})};let r=this.listeners.get(e.key);return r||(r=new Set,this.listeners.set(e.key,r)),r.add(t),new O({broadcast:e=>this.broadcast(e),origin:this.origin,storeKey:e.key,teardown:()=>this.removeListener(e.key,t)})}broadcast(e){try{this.channel&&this.channel.postMessage(e),this.writeToStorage(e)}catch(e){g.error(new m("[sync] Failed to broadcast update",e))}}dispatch(e){if(!e.storeKey)return;const t=this.listeners.get(e.storeKey);if(t&&t.size)for(const n of t)n(e)}removeListener(e,t){const n=this.listeners.get(e);n&&(n.delete(t),n.size||this.listeners.delete(e))}writeToStorage(e){if(this.storage||(this.storage=I()),!this.storage)return;const t=`${w}${e.storeKey}`;try{this.storage.setItem(t,JSON.stringify(e))}catch(e){g.error(new m("[sync] Failed to write broadcast payload to storage",e))}}};function I(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}var k,F,C,q=class{destroy(){}publish(){}},T=class{constructor(){this.sessionId="noop"}register(e){return new q}},A="stores:",z=!1;function D(e){s&&function(){if(z)throw new Error("[stores]: configureStores() called after first store creation. Call it earlier before creating any stores.")}(),e.logger&&p(e.logger),F??(F=function(e){return e?.queryStoreDefaults?{queryStoreDefaults:e.queryStoreDefaults}:void 0}(e)),C??(C=K(e))}function E(){if(F)return F}function M(){return C??(C=K(void 0))}function $(){z=!0}function K(e){return{storage:e?.storage??(t=e?.storageKeyPrefix??A,{clearAll(){try{const e=h();if(!e)return;const n=[];for(let r=0;r<e.length;r++){const o=e.key(r);o?.startsWith(t)&&n.push(o)}for(const t of n)e.removeItem(t)}catch(e){console.error("Error clearing localStorage:",e)}},contains(e){const n=h();return null!==n?.getItem(`${t}${e}`)},delete(e){try{const n=h();n?.removeItem(`${t}${e}`)}catch(e){console.error("Error deleting from localStorage:",e)}},getAllKeys(){try{const e=h();return e?Array.from(e.keys()):[]}catch(e){return console.error("Error getting keys from localStorage:",e),[]}},get(e){try{const n=h();return n?n.getItem(`${t}${e}`)??void 0:void 0}catch(e){return void console.error("Error reading from localStorage:",e)}},set(e,n){try{const r=h();r?.setItem(`${t}${e}`,n)}catch(e){console.error("Error writing to localStorage:",e)}}}),syncEngine:e?.syncEngine??(c?(S||(S=new j),S):(k||(k=new T),k))};var t}var P,R={Error:"error",Idle:"idle",Loading:"loading",Success:"success"},x={ms:e=>e,seconds:e=>1e3*e,minutes:e=>6e4*e,hours:e=>36e5*e,days:e=>864e5*e,weeks:e=>6048e5*e,infinity:1/0,zero:0};function L(e,t){const n=t?.baseDelay??x.seconds(5),r=t?.maxDelay??x.minutes(5);return Math.min(n*Math.pow(2,e),r)}function N(e){return JSON.stringify(H(e))}function W(e){return JSON.parse(e)}function H(t){return"object"!=typeof t||null===t?t:Object.keys(t).sort().reduce((n,r)=>{const o=t[r];return n[r]=e(o)?H(o):o,n},u())}function U(e,t){return!0===t[1]?e(t[0],!0):e(t[0])}function J(e,n,r){if(!0===r)return V(n)?n(e):n;const o=V(n)?n(e):n;return Object.is(o,e)?e:t(e)&&t(o)?{...e,...o}:o}function V(e){return"function"==typeof e}var B=Object.freeze({QueryStore:Symbol("queryStore"),VirtualStore:Symbol("virtualStore")});function Q(e,t){return Object.assign(e,{[t]:!0})}function _(e,t){ee(e)?e.getState().reset(t?.clearQueryCache):Y(e)&&e.destroy()}function G(e,t){for(const n of Array.isArray(e)?e:Object.values(e))n&&!t?.skipDestroy?.(n)&&_(n,t)}function X(e){const t="function"==typeof(n=e)?n.name:"";var n;return ne(e)?e.persist.getOptions().name??t:t}function Y(e){return"destroy"in e}function Z(e){return"getSnapshot"in e}function ee(e){return B.QueryStore in e}function te(e){return"flushUpdates"in e}function ne(e){return!(!("persist"in e)||!e.persist)&&"string"==typeof e.persist.getOptions().name}function re(e){return B.VirtualStore in e}function oe(e,t){const n=function(e){const t=e.getState(),n=u(),r=n;if(s&&("object"!=typeof t||null===t))throw new Error("[createStoreActions]: State is not an object");if(re(e))for(const n in t)se(t,n)&&(r[n]=ie(e,n));else for(const e in t)se(t,e)&&(r[e]=t[e]);return n}(e);return t?Object.assign(n,t):n}function ie(e,t){return function(...n){const r=e.getState()[t];if("function"==typeof r)return r(...n);throw new Error(`[createVirtualStoreAction]: Method ${String(t)} is not a function`)}}function se(e,t){return"function"==typeof e[t]}function ae(e,t){if("object"!=typeof e||null==e||"object"!=typeof t||null==t)return e===t;if(Object.is(e,t))return!0;const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!(r in t)||!ae(e[r],t[r]))return!1;return!0}function ce(e,t){if("object"!=typeof e||null==e||"object"!=typeof t||null==t)return e===t;if(Object.is(e,t))return!0;const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!Object.is(e[r],t[r]))return!1;return!0}function ue(e,t){const n=Object.prototype.hasOwnProperty;function r(e,t){for(const n of e.keys())if(ue(n,t))return n}let o,i,s;if(e===t)return!0;if(e&&t&&(o=e.constructor)===t.constructor){if(o===Date)return e.getTime()===t.getTime();if(o===RegExp)return e.toString()===t.toString();if(o===Array){if((i=e.length)===t.length)for(;i--&&ue(e[i],t[i]););return-1===i}if(o===Set){if(e.size!==t.size)return!1;for(let n of e){if(s=n,s&&"object"==typeof s&&(s=r(t,s),!s))return!1;if(!t.has(s))return!1}return!0}if(o===Map){if(e.size!==t.size)return!1;for(let n of e){if(s=n[0],s&&"object"==typeof s&&(s=r(t,s),!s))return!1;if(!ue(n[1],t.get(s)))return!1}return!0}if(o===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(o===DataView){if((i=e.byteLength)===t.byteLength)for(;i--&&e.getInt8(i)===t.getInt8(i););return-1===i}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){const n=e,r=t;if((i=n.byteLength)===r.byteLength)for(;i--&&n[i]===r[i];);return-1===i}if(!o||"object"==typeof e){i=0;for(const r in e){if(n.call(e,r)&&++i&&!n.call(t,r))return!1;if(!(r in t)||!ue(e[r],t[r]))return!1}return Object.keys(t).length===i}}return e!=e&&t!=t}function le(e){let t;const n=new Set;function r(...e){const r=J(t,...e);if(Object.is(r,t))return;const o=t;t=r,n.forEach(e=>e(t,o))}function o(){return t}const i={getInitialState:function(){return s},getState:o,setState:r,subscribe:function(...e){return 1===e.length?a(e[0]):function(e,n,r){const o=r?.equalityFn??Object.is;let i=e(t);return r?.fireImmediately&&n(i,i),a(function(t){const r=e(t);if(o(i,r))return;const s=i;i=r,n(r,s)})}(e[0],e[1],e[2])}},s=t=e(r,o,i);return i;function a(e){return n.add(e),()=>{n.delete(e)}}}function fe(e){return{...e,merge:e.merge??de,skipHydration:e.skipHydration??!1}}function de(e,t){return void 0===e?t:{...t,...e}}function ye(){let e,t,n=!1;return{complete:function(){!n&&e&&(n=!0,e(),e=void 0,t=void 0)},isHydrated:function(){return n},fail:function(r){!n&&t&&(n=!0,t(r),t=void 0,e=void 0)},promise:new Promise((n,r)=>{e=n,t=r})}}var he=Math.max,ge=Math.min;function pe(e,t=0,n={}){let r,o,i,s,a,c,u=0,l=!1,f=!1,d=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){const n=r,i=o;return r=o=void 0,u=t,s=n?e.apply(i,n):e.apply(i),s}function h(e){const n=e-(c??0);return void 0===c||n>=t||n<0||f&&void 0!==i&&e-u>=i}function g(){const e=me();if(h(e))return p(e);a=setTimeout(g,function(e){const n=t-(e-(c??0));return f&&void 0!==i?ge(n,i-(e-u)):n}(e))}function p(e){return a=void 0,d&&r?y(e):(r=o=void 0,s)}function m(...e){const n=me(),i=h(n);if(r=e,o=this,c=n,i){if(void 0===a)return function(e){return u=e,a=setTimeout(g,t),l?y(e):s}(c);if(f)return clearTimeout(a),a=setTimeout(g,t),y(c)}return void 0===a&&(a=setTimeout(g,t)),s}return t=be(t)||0,function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)}(n)&&(l=!!n.leading,f="maxWait"in n,i=f?he(be(n.maxWait)||0,t):void 0,d="trailing"in n?!!n.trailing:d),m.cancel=function(){void 0!==a&&clearTimeout(a),u=0,r=c=o=a=void 0},m.flush=function(){return void 0===a?s:p(me())},m}function me(){return"undefined"!=typeof performance&&"function"==typeof performance.now?performance.now():Date.now()}function be(e){if("number"==typeof e)return e;if("symbol"==typeof e||void 0===e)return NaN;if("object"==typeof e&&null!==e){const t="function"==typeof e.valueOf?e.valueOf():e;e="object"==typeof t?t+"":t}return"string"!=typeof e?0===e?e:+e:(e=e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),/^0b[01]+$/i.test(e)?parseInt(e.slice(2),2):/^0o[0-7]+$/i.test(e)?parseInt(e.slice(2),8):/^[-+]0x[0-9a-f]+$/i.test(e)?NaN:+e)}function Se(t){if(!e(t))return t;const n=u(),r=Object.keys(t);for(let e=0;e<r.length;e++){const o=r[e],i=t[o];"function"!=typeof i&&(n[o]=i)}return n}var ve=a?0:c?x.ms(200):x.seconds(l?3:5);function we(e,t,n,r){const o=!(t.deserializer||t.serializer||e.deserializer||e.serializer),i="object"==typeof t.sync&&!0===(t.sync.injectStorageMetadata??t.sync.engine?.injectStorageMetadata),s=t.partialize??Se,a=t.deserializer??e.deserializer??je(o),c=t.serializer??e.serializer??Ie(o);function u(t,n,o){try{if(qe(r))return;const a={state:s(n),version:o},u=Fe(r,i,a),l=c(a);try{e.set(t,l),Ce(r,u)}catch(e){g.error(new m("[createBaseStore]: Failed to persist store data",e))}}catch(e){g.error(new m("[createBaseStore]: Failed to persist store data",e))}}const l=void 0!==n?pe(u,n,{leading:!1,maxWait:n,trailing:!0}):u;return{getItem:t=>{const n=e.get(t);return void 0===n?null:a(n)},setItem:(e,t,n)=>{r?.getIsApplyingRemote()||l(e,t,n)},removeItem:t=>{try{e.delete(t)}catch(e){g.error(new m("[createBaseStore]: Failed to delete persisted store data",e))}}}}function Oe(e,t,n,r){const o=!(t.deserializer||t.serializer||e.deserializer||e.serializer),i="object"==typeof t.sync&&!0===(t.sync.injectStorageMetadata??t.sync.engine?.injectStorageMetadata),s=t.partialize??Se,a=t.deserializer??e.deserializer??je(o),c=t.serializer??e.serializer??Ie(o);async function u(t,n,o){try{if(qe(r))return;const a={state:s(n),version:o},u=Fe(r,i,a),l=c(a);try{await e.set(t,l),Ce(r,u)}catch(e){g.error(new m("[createBaseStore]: Failed to persist store data",e))}}catch(e){g.error(new m("[createBaseStore]: Failed to serialize persisted store data",e))}}const l=void 0!==n?pe(u,n,{leading:!1,maxWait:n,trailing:!0}):function(e){let t,n=null;return function(...r){return t=r,n||(n=new Promise(r=>{queueMicrotask(async()=>{try{await e(...t)}finally{n=null,r()}})})),n}}(u);return{getItem:async t=>{const n=await e.get(t);return void 0===n?null:a(n)},setItem:async(e,t,n)=>{if(!r?.getIsApplyingRemote())return await l(e,t,n)},removeItem:async t=>{try{await e.delete(t)}catch(e){g.error(new m("[createBaseStore]: Failed to delete persisted store data",e))}}}}function je(e){return t=>{if("string"!=typeof t)throw new m("[createBaseStore]: Received non-string serialized state without a custom deserializer. Provide a deserializer on the store or storage adapter.");return function(e,t){try{return JSON.parse(e,t?o:void 0)}catch(e){throw g.error(new m("[createBaseStore]: Failed to deserialize persisted store data",e)),e}}(t,e)}}function Ie(e){return t=>function(e,t){try{return JSON.stringify(e,t?i:void 0)}catch(e){throw g.error(new m("[createBaseStore]: Failed to serialize store data",e)),e}}(t,e)}var ke=Object.freeze({shouldClear:!1});function Fe(e,t,n){if(!t||!e)return ke;const r=e.getFieldTimestampSnapshot();return function(e,t){const n=e.getSessionId(),r=e.getTimestamp();void 0!==n&&void 0!==r&&(t.syncMetadata={origin:n,timestamp:r})}(e,n),n.syncMetadata?r&&Object.keys(r).length>0?(n.syncMetadata.fields=r,{fieldSnapshot:r,shouldClear:!0}):(delete n.syncMetadata.fields,{fieldSnapshot:r,shouldClear:!1}):{fieldSnapshot:r,shouldClear:!1}}function Ce(e,t){e&&t.shouldClear&&t.fieldSnapshot&&Object.keys(t.fieldSnapshot).length&&e.clearFieldTimestamps(t.fieldSnapshot)}function qe(e){return!!e&&!!e.getIsApplyingRemote()}var[Te,Ae]=[0,1];function ze(e,t,n){if(!e)return!0;const r=e[Te],o=e[Ae];return!(t<r)&&(t>r||n>o)}function De(e,t){return Object.prototype.hasOwnProperty.call(t,e)}function Ee(e,t){if(!s)return!0;if(null===e||null===t)return e===t;const n=typeof e;return n===typeof t&&("object"!==n||Object.prototype.toString.call(e)===Object.prototype.toString.call(t))}function Me(e){if(null===e)return"null";const t=typeof e;return"object"===t?Object.prototype.toString.call(e):t}function $e(e,t){if($(),!t)return le(e);const n=t.storageKey,o="string"==typeof n,i=o?t.storage??M().storage:void 0,s=function(e,t){if(!e)return null;const n="object"==typeof e,r=n?e.key??t:!0===e?t:e;if(!r)throw new m("[createBaseStore]: sync requires a key to be specified either directly or via storageKey");return n?{...e,key:r}:{key:r}}(t.sync,n),a=s?function(e,t,n){const o=t.engine??M().syncEngine,i=function(e){let t,n,r,o=!1;return{isAsync:e,clearFieldTimestamps:function(e){if(e&&r){for(const t of Object.entries(e)){const e=t[0],n=t[1];r[e]===n&&delete r[e]}Object.keys(r).length||(r=void 0)}},getFieldTimestampSnapshot:function(){if(r)return{...r}},getIsApplyingRemote:()=>o,getSessionId:()=>t,getTimestamp:()=>n,mergeFieldTimestamps:function(e){if(r)for(const t of Object.entries(e)){const e=t[0],n=t[1],o=r[e];(void 0===o||n>o)&&(r[e]=n)}else r={...e}},onHydrationComplete:void 0,onHydrationFlushEnd:void 0,setIsApplyingRemote:e=>o=e,setSessionId:e=>t=e,setTimestamp:e=>n=e,setWithoutPersist:void 0}}(n);return{stateCreator:(s,a,c)=>{const l=new Map,f=[],d=[];let y=null,h=!1,p=!1,b=0,S=null,v=[],w=Promise.resolve(),O=!n;function j(e,t){if(i?.setSessionId&&i?.setTimestamp&&o.sessionId&&(i.setSessionId(o.sessionId),i.setTimestamp(e),i.mergeFieldTimestamps&&t.length>0)){const n=u();for(const r of t)n[String(r)]=e;i.mergeFieldTimestamps(n)}}function I(e,t){if(h||!S)return t?s(e,t):s(e);const n=function(){const e=Date.now(),t=e>b?e:b+1;return b=t,t}();let i=[],a=u();const c=r=>{const o=J(r,e,t);for(const e of v)Object.is(o[e],r[e])||(i.push(e),a[e]=o[e]);return i.length&&j(n,i),o},f=t?s(c,!0):s(c);function g(){i.length&&function(e){const t=o.sessionId;for(const n of e.keys)l.set(n,[e.timestamp,t]);y&&p?y.publish?.({replace:e.replace,sessionId:t,timestamp:e.timestamp,values:e.values}):d.push(e)}({keys:i,replace:t??!1,values:a,timestamp:n})}return r(f)?f.finally(g):(g(),f)}const k=c.setState;c.setState=I;const F=e(I,a,c);if(v=t.fields??function(e){const t=[];for(const n of Object.entries(e)){if("function"==typeof n[1])continue;const e=n[0];t.push(e)}return t}(F),!v.length)return F;async function C(e){b=Math.max(b,e.timestamp);const n=u(),r=a(),o=e.timestamp;let s;if(e.replace)for(const t of v)De(t,e.values)||ze(l.get(t),o,e.sessionId)&&(s??(s=[])).push(t);for(const i of v){if(!De(i,e.values))continue;if(!S?.has(i))continue;if(!ze(l.get(i),o,e.sessionId))continue;const s=t.merge?.[i];if(s){const t=e.values[i],a=r[i];if(void 0!==t){const c=s(t,a,r,e.values),u=void 0!==a?a:t;if(!Ee(c,u))return void g.error(new m(`[sync] Merge function for field "${String(i)}" returned ${Me(c)} but expected ${Me(u)}`));n[i]=c,l.set(i,[o,e.sessionId])}}else n[i]=e.values[i],l.set(i,[o,e.sessionId])}if(Object.keys(n).length>0||s?.length){h=!0,i&&i.setIsApplyingRemote(!0);try{if(e.replace){const e={...r};let t=!1;if(s?.length){t=!0;for(const t of s)delete e[t],l.delete(t)}for(const r in n){if(!Object.prototype.hasOwnProperty.call(n,r))continue;const o=n[r];void 0!==o&&(Object.is(e[r],o)||(t=!0),e[r]=o)}if(!t)return;await(i.setWithoutPersist??k)(e,!0)}else await(i.setWithoutPersist??k)(n)}finally{h=!1,i&&i.setIsApplyingRemote(!1)}}}function q(e){n?w=w.then(()=>C(e)):C(e)}if(S=new Set(v),y=o.register({apply:e=>{O?q(e):f.push(e)},fields:v,getState:a,key:t.key}),y?.onFirstSubscribe||y?.onLastUnsubscribe){let e=0;const t=c.subscribe;c.subscribe=(...n)=>{e||y.onFirstSubscribe?.(),e+=1;const r=1===n.length?t(n[0]):t(n[0],n[1],n[2]);return()=>{r(),e-=1,e||queueMicrotask(()=>{e||y.onLastUnsubscribe?.()})}}}function T(){p=!0,function(){if(y&&d.length){for(const e of d){const t=o.sessionId;for(const n of e.keys)l.set(n,[e.timestamp,t]);j(e.timestamp,e.keys),y.publish?.({replace:e.replace,sessionId:t,timestamp:e.timestamp,values:e.values})}d.length=0}}()}function A(){O=!0,function(){if(!f.length)return;const e=f.slice();f.length=0;for(const t of e)q(t)}()}return n?(i.onHydrationComplete=T,i.onHydrationFlushEnd=A):y.onHydrated?(y.onHydrated(T),A()):(T(),A()),F},syncContext:i}}(e,s,i?.async??!1):void 0,c=a?.stateCreator??e;if(!o)return le(c);const l=function(e,t,n){const r=t??e.storage??M().storage,o=(e.sync?void 0:e.persistThrottleMs??ve)||void 0,i=e.version??0;return r.async?{async:!0,persistStorage:Oe(r,e,o,n),version:i}:{async:!1,persistStorage:we(r,e,o,n),version:i}}(t,i,a?.syncContext),f=l.async?function(e){let t,n,r,o=!1;return{hydrationPromise:()=>o?t?.promise??n??(n=Promise.resolve()):(t||(t=ye()),t.promise),stateCreator:(n,i,s)=>{let a;return r=()=>{if(a?.length){for(const e of a)U(s.setState,e);a=void 0}},e(function(...e){return o?U(n,e):(t||(t=ye()),a||(a=[]),a.push(e),t.promise)},i,s)},wrapOnRehydrateStorage:(e,n)=>i=>{const s=e?.(i);return(e,i)=>{o=!0,n?.onHydrationComplete?.(),r&&r(),n?.onHydrationFlushEnd?.(),i?t?.fail(b(i)):t?.complete(),s?.(e,i)}}}}(c):void 0,d=f?f.wrapOnRehydrateStorage(t.onRehydrateStorage,a?.syncContext):t.onRehydrateStorage,y=le(function(e,t){return(n,o,i)=>{let s,a,c,u=fe(t),l=!1,f=0;function d(){return u.storage.setItem(u.name,o(),u.version)}const y=i.setState;i.setState=function(...e){return U(y,e),d()};const h=e(function(...e){return U(n,e),d()},o,i);function g(){const e=function(){const e=++f;return l=!1,a?.forEach(e=>e(o()??h)),e}(),t=u.onRehydrateStorage?.(o()??h);try{const n=u.storage.getItem(u.name);return r(n)?n.then(n=>p(e,n,t)).catch(n=>S(e,t,n)):p(e,n,t)}catch(n){S(e,t,n)}}return i.getInitialState=()=>h,Object.assign(i,{persist:{clearStorage:()=>{u.storage.removeItem(u.name)},getOptions:()=>u,hasHydrated:()=>l,onFinishHydration:e=>(c??(c=new Set),c.add(e),()=>{c?.delete(e),0===c?.size&&(c=void 0)}),onHydrate:e=>(a??(a=new Set),a.add(e),()=>{a?.delete(e),0===a?.size&&(a=void 0)}),rehydrate:g,setOptions:e=>{u=fe({...u,...e,storage:e.storage??u.storage})}}}),u.skipHydration||g(),s??h;function p(e,t,n){const o=function(e,t){if(!t)return{migrated:!1,state:void 0};if("number"!=typeof t.version||t.version===e.version)return{migrated:!1,state:t.state};if(!e.migrate)return console.error("State loaded from storage couldn't be migrated since no migrate function was provided"),{migrated:!1,state:void 0};const n=e.migrate(t.state,t.version);return r(n)?n.then(e=>({migrated:!0,state:e})):{migrated:!0,state:n}}(u,t);return r(o)?o.then(t=>m(e,t,n)).catch(t=>S(e,n,t)):m(e,o,n)}function m(e,t,i){const a=function(e,t){if(e!==f)return;const r=u.merge(t.state,o()??h);return s=r,n(r,!0),t.migrated?d():void 0}(e,t);if(r(a))return a.then(()=>b(e,i));b(e,i)}function b(e,t){if(e!==f)return;t?.(s,void 0);const n=o();s=n,l=!0,c?.forEach(e=>e(n))}function S(e,t,n){e===f&&t?.(void 0,n)}}}(f?(e,t,n)=>(a&&(a.syncContext.setWithoutPersist=n.setState),f.stateCreator(e,t,n)):c,{merge:t.merge,migrate:t.migrate,name:n,onRehydrateStorage:d,storage:l.persistStorage,version:l.version}));return f?Object.assign(y,{persist:Object.assign(y.persist,{hydrationPromise:f.hydrationPromise})}):y}function Ke(e,t,n="s"){return 1===t?e:`${e}${n}`}var Pe=!1,Re=!1,xe=new Map,Le=new Map,Ne=new Map,We=null,He=1/0;function Ue(){return Pe}function Je(){return We}function Ve(){Pe||(Pe=!0,Re||(Re=!0,queueMicrotask(()=>{Re=!1,(()=>{for(;Le.size>0;){const e=He,t=Ne.get(e);if(t){Ne.delete(e);for(const e of t)Le.delete(e);We=e;for(const e of t)e();if(We=null,Ne.size>0){He=1/0;for(const e of Ne.keys())e<He&&(He=e)}else He=1/0}else{He=1/0;for(const e of Ne.keys())e<He&&(He=e)}}for(;xe.size>0;){const e=Array.from(xe.values());xe.clear();for(const t of e)t()}})(),Pe=!1,We=null,Le.clear(),Ne.clear(),He=1/0})))}function Be(e,t){Pe&&xe.set(e,t)}var Qe=Symbol("stores.deriveProxy.unwrap");function _e(e,t,n){const r=t.get(e);if(void 0!==r)return r;const o=function(e,t,n,r=[]){return e&&"object"==typeof e?Ge(e,r,t,n,new WeakSet,new WeakMap):(n(t,r,!0),e)}(Z(e)?e.getSnapshot():e.getState(),e,n);return t.set(e,o),o}function Ge(e,t,n,r,o,i){return new Proxy(e,{get(s,a,c){if(a===Qe)return r(n,t,!0),s;if(o.has(s))return Reflect.get(s,a,c);if("__proto__"===a||"symbol"==typeof a)return a===Symbol.iterator&&(r(n,t,!0),o.add(s)),Reflect.get(s,a,c);const u=Reflect.get(s,a,s),l=String(a),f=t.concat(l);if("function"==typeof u)return Object.prototype.hasOwnProperty.call(s,a)?function(...e){return r(n,f,!0,{args:e.length?e:void 0}),Reflect.apply(u,s,e)}:(r(n,t,!0),u.bind(e));const d=!!u&&"object"==typeof u;return r(n,f,!d),d?(i.has(u)||i.set(u,Ge(u,f,n,r,o,i)),i.get(u)):u},getOwnPropertyDescriptor:(e,i)=>(r(n,t,!0),o.add(e),Reflect.getOwnPropertyDescriptor(e,i)),has:(e,o)=>(r(n,t,!0),Reflect.has(e,o)),ownKeys:e=>(r(n,t,!0),o.add(e),Reflect.ownKeys(e))})}function Xe(t,n){if(!t||"object"!=typeof t)return t;const r=function(e){const t=Reflect.get(e,Qe);return t&&"object"==typeof t?t:void 0}(t);return r||(Array.isArray(t)?function(e,t){const n=Ze(e,t);if(n)for(let t=0;t<e.length;t++)Ye(e,String(t),n)}(t,n):e(t)&&function(e,t){const n=Ze(e,t);if(n)for(const t of Reflect.ownKeys(e))Ye(e,t,n)}(t,n),t)}function Ye(e,t,n){const r=Reflect.getOwnPropertyDescriptor(e,t);if(!r||!("value"in r))return;const o=Xe(r.value,n);o!==r.value&&(r.value=o,Reflect.defineProperty(e,t,r))}function Ze(e,t){const n=t??new WeakSet;return n.has(e)?null:(n.add(e),n)}var et=Object.freeze([]);function tt(){const e=new Map;return{buildProxySubscriptions(t,n,r,o){const i=new Set;for(const t of e)ot(t[1],t[0],[],0,i,r);!1!==o?.(i)&&function(e,t,n){for(const n of e){const e=n.invocation?ct(n.path,n.invocation):at(n.path);t(n.store,e,n.path)}n&&function(e){const t=e.size;console.log(`[📡 ${t} ${Ke("Proxy Subscription",t)} 📡]:`,JSON.stringify(Array.from(e).map(e=>{const t="name"in(n=e.store)&&"string"==typeof n.name?n.name:"store";var n;const r=e.path.join(".");if(!e.invocation)return r?`$(${t}).${r}`:`$(${t})`;const o=e.invocation.args?.length??0;return`$(${t}).${r}${o?`(${o}_${Ke("arg",o)})`:"()"}`}),null,2))}(e)}(i,t,n)},reset(){e.clear()},trackPath(t,n,r,o){let i=e.get(t);i||(i=nt(),e.set(t,i)),rt(i,n,0,r,o)}}}function nt(){return u()}function rt(e,t,n,r,o){if(n===t.length)return r&&(e.isLeaf=!0),void(o&&function(e,t){const n=e.invocation;if(!n)return void(e.invocation=t);if(it(n,t))return;const r=e.extraInvocations;if(r){for(let e=0;e<r.length;e++)if(it(r[e],t))return;r.push(t)}else e.extraInvocations=[t]}(e,o));e.children||(e.children=nt());const i=t[n];let s=e.children?.[i];s||(s=nt(),e.children[i]=s),rt(s,t,n+1,r,o)}function ot(e,t,n,r,o,i=2){const s=e.children;if(!s)return void st(e,t,n,o);const a=Object.keys(s),c=a.length;if(0!==c)if(e.isLeaf||r>=i&&c>1){st(e,t,n,o);for(const e of a){const a=s[e];a.invocation&&ot(a,t,[...n,e],r+1,o,i)}}else if(r<i&&c>1&&!e.isLeaf)for(const e of a)ot(s[e],t,[...n,e],r+1,o,i);else{if(1===c){const e=a[0];return void ot(s[e],t,[...n,e],r+1,o,i)}st(e,t,n,o)}else st(e,t,n,o)}function it(e,t){const n=e.args,r=t.args,o=n?.length??0;if(o!==(r?.length??0))return!1;if(!n||!r)return!0;for(let e=0;e<o;e++)if(!Object.is(n[e],r[e]))return!1;return!0}function st(e,t,n,r){const o=e.isLeaf??!1,i=e.invocation;if(!i)return void r.add({store:t,path:n,isLeaf:o});r.add({store:t,path:n,invocation:i,isLeaf:o});const s=e.extraInvocations;if(s)for(let e=0;e<s.length;e++)r.add({store:t,path:n,invocation:s[e],isLeaf:o})}function at(e){return t=>ut(t,e)}function ct(e,t){const n=e.slice(0,-1),r=e[e.length-1];return e=>{const o=ut(e,n),i=o&&"object"==typeof o?Reflect.get(o,r):void 0;return"function"==typeof i?Reflect.apply(i,o,t.args??et):void 0}}function ut(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return n;n=Reflect.get(n,e)}return n}var lt=Symbol(),ft=Object.freeze({equalityFn:Object.is,isDerivedStore:!0});function dt(e,t=Object.is){const{debounceOptions:n,debugMode:r,equalityFn:o,keepAlive:i,lockDependencies:a}="function"==typeof(l=t)?{debounceOptions:void 0,debugMode:!1,equalityFn:l,keepAlive:!1,lockDependencies:!1}:{debounceOptions:l.debounce,debugMode:(s&&l.debugMode)??!1,equalityFn:l.equalityFn??Object.is,keepAlive:l.keepAlive??!1,lockDependencies:l.lockDependencies??!1},c=String(yt+=1),u=new Set;var l;i&&u.add(ht);const f=new Set;let d,h,g=lt,p=!1,m=!0,b=!0,S=0,v=!1,w=null,O=lt;function j(e,t,n){return b&&u.size?t?(f.add(e.subscribe(t,M,n?{equalityFn:n,isDerivedStore:!0}:ft)),t(Z(e)?e.getSnapshot():e.getState())):(d||(d=new WeakMap),h||(h=tt()),_e(e,d,h.trackPath)):(t??y)(Z(e)?e.getSnapshot():e.getState())}function I(e){for(const t of f)t(e);f.clear()}let k=!0;function F(){if(!m&&gt(g))return g;m=!1,b&&I(!0);const t=g,n=gt(t);g=function(t){k=!0;const n=g,i=e(t),s=h?Xe(i):i;return gt(n)&&o(n,s)?(r&&console.log("[🥷 Derive Complete 🥷]: No change detected"),k=!1,n):s}(j);const i=r&&(!n||"verbose"===r&&b);if(i){n?"verbose"===r&&console.log("[🌀 Rebuilding Subscriptions 🌀]: Created…"):console.log("[🌀 Initial Derive Complete 🌀]: Created…");const e=f.size;console.log(`[🎯 ${e} ${Ke("Selector Subscription",e)} 🎯]`)}return h&&b&&(h.buildProxySubscriptions((e,t)=>{f.add(e.subscribe(t,M,ft))},i),d=void 0,h.reset(),a&&(h=void 0)),k&&n&&function(e,t){const n=function(){const e=u.has(ht)?u.size-1:u.size;return S>0&&S<e}(),o=!S||n,i=n||null!==Je()||Ue()&&o;n&&Ve(),r&&console.log(`[📻 Derive Complete 📻]: Notifying ${u.size} ${Ke("watcher",u.size)}`);for(const t of u){if("function"==typeof t||!t.isDerivedWatcher)continue;const n=t.selector(e);if(!t.equalityFn(t.currentSlice,n)){const e=t.currentSlice;t.currentSlice=n,t.listener(n,e)}}i?v||(v=!0,gt(O)||(O=t),Be(c,q)):C(e,t)}(g,t),a&&(b=!1),g}function C(e,t){for(const n of u)if("function"==typeof n)n(e,t);else if(!n.isDerivedWatcher){const t=n.selector(e);if(!n.equalityFn(n.currentSlice,t)){const e=n.currentSlice;n.currentSlice=t,n.listener(t,e)}}}function q(){if(!u.size)return;if(m&&!S&&F(),!gt(g))return;const e=gt(O)?O:g;C(g,e),v=!1,O=lt}const T=n?pe(z,"number"==typeof n?n:n.delay,"number"==typeof n?{leading:!1,maxWait:n,trailing:!0}:n):void 0,A=T??(()=>{p||(p=!0,queueMicrotask(z))});function z(){p=!1,u.size?m&&F():K()}function D(e){e||T&&m?queueMicrotask(()=>{u.size||K()}):K()}function E(){z(),w=null}function M(){if(!m){if(m=!0,!T){if(S){Ve();const e=Je(),t=null===e?0:e+1;if(null!==w&&t<=w)return;return w=t,void function(e,t){if(!Pe)return;const n=t<0?0:0|t,r=Le.get(e);if(void 0===r){Le.set(e,n);let t=Ne.get(n);return t||(t=new Set,Ne.set(n,t)),t.add(e),void(n<He&&(He=n))}if(n>r){const t=Ne.get(r);if(t&&(t.delete(e),0===t.size&&(Ne.delete(r),r===He))){He=1/0;for(const e of Ne.keys())e<He&&(He=e)}Le.set(e,n);let o=Ne.get(n);o||(o=new Set,Ne.set(n,o)),o.add(e),n<He&&(He=n)}}(E,t)}if(Ue())return void(v||(v=!0,gt(g)&&(O=g),Be(c,q)))}w=null,A()}}function $(){return m||!gt(g)?u.size>0?F():e(j):g}function K(e=!0){i&&e||(T?.cancel(),I(),u.clear(),S=0,h=void 0,d=void 0,b=!0,p=!1,m=!0,g=lt,v=!1,O=lt,w=null)}return{destroy:()=>K(!1),flushUpdates:function(){u.size&&(T?T.flush():m&&F())},getSnapshot:function(){if(!gt(g)){u.add(ht);const e=F();return u.delete(ht),e}return p&&z(),g},getState:$,subscribe:function(...e){if(1===e.length){const t=e[0];return u.add(t),1!==u.size||gt(g)||$(),()=>{u.delete(t),u.size||D(!1)}}const[t,n,r]=e,o=r?.equalityFn??Object.is,i=r?.isDerivedStore??!1,s={currentSlice:void 0,equalityFn:o,isDerivedWatcher:i,listener:n,selector:t};return u.add(s),s.currentSlice=t($()),i&&(S+=1),r?.fireImmediately&&n(s.currentSlice,s.currentSlice),()=>{u.delete(s),i&&(S-=1),u.size||D(i)}},getInitialState:()=>{throw new Error("[createDerivedStore]: getInitialState() is not available on derived stores.")},setState:()=>{throw new Error("[createDerivedStore]: setState() is not available on derived stores.")}}}var yt=0;function ht(){}function gt(e){return e!==lt}var pt=class{constructor({disableAutoRefetching:e,initialEnabled:t}){this.count=0,this.enabled=!1,this.lastSubscriptionTime=null,this.fetchThrottleMs=null,this.onSubscribe=null,this.onLastUnsubscribe=null,this.enabled=t,e&&(this.fetchThrottleMs=x.seconds(5))}init({onSubscribe:e,onLastUnsubscribe:t}){this.onSubscribe=e,this.onLastUnsubscribe=t}get(){return{enabled:this.enabled,lastSubscriptionTime:this.lastSubscriptionTime,subscriptionCount:this.count}}setEnabled(e){this.enabled=e}subscribe(){const e=0===this.count,t=null!==this.fetchThrottleMs&&null!==this.lastSubscriptionTime&&!e&&Date.now()-this.lastSubscriptionTime<=this.fetchThrottleMs;return this.onSubscribe?.(this.enabled,e,t),this.count+=1,this.lastSubscriptionTime=Date.now(),e=>{const t=1===this.count;this.count=Math.max(this.count-1,0),t&&(this.onLastUnsubscribe?.(e),this.lastSubscriptionTime=null)}}},mt=new WeakMap,bt=new WeakMap;function St(e,t=vt,n=ue){return function(e,t,n){let r=bt.get(e);r||(r=new Map,bt.set(e,r));let o=r.get(t);o||(o=new Map,r.set(t,o));const i=o.get(n);if(i)return i;const[s,a,c]=Ot(e,t,n),l=new Map,f=e=>{const t={get(t,n){if("value"===n){let t=a();const n=e.split(".");for(const e of n)e&&(t=t[e]);return t}const r="string"==typeof n?n:n.toString(),o=e?`${e}.${r}`:r,i=l.get(o);if(i)return i;const c=f(o);return mt.set(c,s),l.set(o,c),c},set(t,n,r){const o=e.split(".");return""===o[0]&&o.shift(),c(o,r),!0}};return new Proxy(u(),t)},d=f("");return s(()=>{}),mt.set(d,s),o.set(n,d),d}(e,t,n)}var vt=e=>e,wt=(e,t,n)=>{if(!t.length)return n;const[r,...o]=t,i=e[r],s=wt(i,o,n);if(ue(i,s))return e;const a=Array.isArray(e)?e.slice():{...e};return a[r]=s,a},Ot=(e,t,n)=>{const r=new Set,o=Z(e);let i,s=t(o?e.getSnapshot():e.getState());return[a=>(r.size||(i=e.subscribe(t,e=>{s=e,r.forEach(e=>e())},{equalityFn:n,isDerivedStore:o})),r.add(a),()=>{r.delete(a),!r.size&&i&&(i(),i=void 0)}),()=>(r.size||(s=t(e.getState())),s),(n,r)=>{if(t!==vt)throw new Error("Cannot set a value with a selector");e.setState(e=>wt(e,n,r),!0)}]};function jt(e){return mt.get(e)}var It={error:!0,lastFetchedAt:!0,queryCache:!0,queryKey:!0,status:!0,enabled:!1,fetch:!1,getCacheEntry:!1,getData:!1,getStatus:!1,isDataExpired:!1,isStale:!1,reset:!1},kt=Object.freeze({force:!0}),Ft=Object.freeze({once:!0}),Ct=Object.freeze({updateQueryKey:!0});function qt(e,t,r){$();const o="function"==typeof t?t:Kt,i="object"==typeof t?t:r,c=function(e){return"string"==typeof e?.storageKey}(i)?i:void 0,l=P??(P=function(){const e={abortInterruptedFetches:!0,cacheTime:x.days(7),debugMode:!1,disableAutoRefetching:!1,keepPreviousData:!1,maxRetries:5,minStaleTime:!1,paramChangeThrottle:!1,retryDelay:L,staleTime:x.minutes(2),suppressStaleTimeWarning:!1},t=E()?.queryStoreDefaults;return t?{...e,...t}:e}()),d=l.minStaleTime,{fetcher:y,onError:h,onFetched:p,setData:S,transform:v,abortInterruptedFetches:w=l.abortInterruptedFetches,cacheTime:O=l.cacheTime,debugMode:j=l.debugMode,disableAutoRefetching:I=l.disableAutoRefetching,disableCache:k=!1,enabled:F=!0,keepPreviousData:C=l.keepPreviousData,maxRetries:q=l.maxRetries,paramChangeThrottle:T=l.paramChangeThrottle,params:A,retryDelay:z=l.retryDelay,staleTime:D=l.staleTime,suppressStaleTimeWarning:M=l.suppressStaleTimeWarning}=e;let K="function"==typeof D?l.staleTime:D;s&&!1!==d&&!I&&!M&&K<d&&console.warn(`[createQueryStore${c?.storageKey?`: ${c.storageKey}`:""}] ❌ Stale times under ${d/1e3} seconds are not recommended. Provided staleTime: ${K/1e3} seconds`);const W=new Error("[createQueryStore: AbortError] Fetch interrupted"),H="function"==typeof O,U=s&&j,J=e.params?Object.keys(e.params):[];let V=null,_=null,G=null,X=[],Y=!1,Z=!1,ee=null,te=null,ne=null,re=null,oe=null;const ie={enabled:"function"!=typeof F&&F,error:null,lastFetchedAt:null,queryCache:{},queryKey:"",status:R.Idle},se=new pt({disableAutoRefetching:I,initialEnabled:ie.enabled});function ae(){ee&&(te=null,ee.abort(),ee=null)}function ce(t,n,r){const i=r.setState;function s(e){const t="function"==typeof e;if(t||void 0!==e.enabled){let n;const r=i(r=>{const o=t?e(r):e,i=void 0!==o.enabled?o.enabled:r.enabled;return i!==r.enabled&&(n=()=>function(e,t){e!==t&&oe!==t&&(oe=t,se.setEnabled(t),t?queueMicrotask(()=>u.fetch(void 0,Ct)):(ne||w)&&(w&&ae(),ne&&(clearTimeout(ne),ne=null)))}(r.enabled,i)),o});return n?.(),r}return i(e)}function a(e,t){if(I||t?.skipStoreUpdates)return;if(K<=0||K===1/0)return;ne&&(clearTimeout(ne),ne=null);const r=N(e),o=n(),i=(k?re===r&&o.lastFetchedAt:o.queryCache[r]?.lastFetchedAt)||null,s=i?K-(Date.now()-i):K;ne=setTimeout(()=>{const t=se.get();t.enabled&&t.subscriptionCount>0&&u.fetch(e,kt,!0)},s)}r.setState=s,se.init({onSubscribe:(r,o,i)=>{if(_||V||!A&&"function"!=typeof e.enabled&&"function"!=typeof e.staleTime){if(r)if(o){const e=At(V,_),r=N(e),o=n();o.queryKey!==r&&t({queryKey:r}),o.isStale()?u.fetch(e,void 0,!0):a(e,void 0)}else I&&!i&&u.fetch(void 0,void 0,!0)}else Y=!0},onLastUnsubscribe:e=>{ne&&(clearTimeout(ne),ne=null),w&&!e&&ae()}});const u={...o(s,n,r),...ie,async fetch(e,r,o=!1){const i=se.get();if(!r?.force&&!r?.skipStoreUpdates&&!i.enabled)return null;const l=n(),f=l.error,d=l.queryKey,j=l.status===R.Loading,I=Tt(V,_,J,e),F=N(I);if(j&&te?.promise&&te.key===F)return U&&console.log("[🔄 Using Active Fetch 🔄] for params:",JSON.stringify(I)),te.promise;const T=r?.staleTime??K,A=!!r?.skipStoreUpdates,D="boolean"==typeof r?.updateQueryKey?r.updateQueryKey:!!o&&C,E=(o||d===F||D)&&!A;if(w&&E&&ae(),!r?.force){const e=l.lastFetchedAt,n=l.queryCache[F],o=n?.lastFetchedAt,s=n?.errorInfo,c=s&&s.retryCount>=q,u=(k?re===F&&e:o)||null;if(u&&!(Date.now()-u>=T)&&(!s||c||A))return E&&!ne&&i.subscriptionCount>0&&0!==K&&K!==1/0&&a(I,r),D&&t(e=>e.queryKey!==F?{queryKey:F}:e),U&&console.log("[💾 Returning Cached Data 💾] for params:",JSON.stringify(I)),n?.data??null}E&&(ne&&(clearTimeout(ne),ne=null),!f&&j||t({error:null,status:R.Loading}),te={key:F});const M=r?.cacheTime??(H?O(I):O);async function $(){const i=c?.storageKey||F;try{U&&(o||!e||zt(e,J)?console.log("[🔄 Fetching 🔄] for params:",JSON.stringify(I)):console.log("[🔄 Fetching with Partial Params 🔄]\n","- Provided params:",`${JSON.stringify(e)}\n`,"- Filled in params:",`${JSON.stringify(Object.fromEntries(Object.keys(I).filter(t=>!(t in e)).map(e=>[e,I[e]])))}`));const n=await(w&&E?async function(e){const t=new AbortController;ee=t;try{return await new Promise((n,r)=>{t.signal.addEventListener("abort",()=>r(W),Ft),Promise.resolve(y(e,t)).then(n,r)})}finally{ee===t&&(ee=null)}}(I):y(I,null)),c=Date.now();let l;U&&console.log("[✅ Fetch Successful ✅] for params:",JSON.stringify(I));try{l=function(e,t,n){return n?n(e,t):e}(n,I,v)}catch(e){throw Pt(i,"transform",e)}if(A)return U&&console.log("[🥷 Successful Parallel Fetch 🥷] for params:",JSON.stringify(I)),"withCache"===r.skipStoreUpdates&&t(e=>{if(!S)return k?e:{queryCache:{...e.queryCache,[F]:{cacheTime:M,data:l,errorInfo:null,lastFetchedAt:c}}};let t=e;const n=t.queryCache[F];try{S({data:l,params:I,queryKey:F,set:e=>{t="function"==typeof e?{...t,...e(t)}:{...t,...e}}})}catch(e){throw Pt(i,"setData",e)}return!k&&Object.is(n,t.queryCache[F])&&(t={...t,queryCache:{...t.queryCache,[F]:{cacheTime:M,data:null,errorInfo:null,lastFetchedAt:c}}}),t}),l;if((S?s:t)(e=>{let t={...e,error:null,lastFetchedAt:c,queryKey:D?F:e.queryKey,status:R.Success};if(S||k){if(S){U&&console.log("[💾 Setting Data 💾] for params:",JSON.stringify(I));const e=t.queryCache[F];try{S({data:l,params:I,queryKey:F,set:e=>{t="function"==typeof e?{...t,...e(t)}:{...t,...e}}})}catch(e){throw Pt(i,"setData",e)}!k&&Object.is(e,t.queryCache[F])&&(t.queryCache={...t.queryCache,[F]:{cacheTime:M,data:null,errorInfo:null,lastFetchedAt:c}})}}else U&&console.log("[💾 Setting Cache 💾] for params:",JSON.stringify(I),"| Has previous data?:",!!t.queryCache[F]?.data),t.queryCache={...t.queryCache,[F]:{cacheTime:M,data:l,errorInfo:null,lastFetchedAt:c}};return k||O===1/0?t:$t(C,F,t)}),E&&(re=F,a(I,r)),p)try{p({data:l,fetch:u.fetch,params:I,set:s})}catch(e){g.error(Pt(i,"onFetched callback",e))}return l??null}catch(s){if(s===W)return U&&console.log("[❌ Fetch Aborted ❌] for params:",JSON.stringify(I)),null;const a=!o&&!0===r?.throwOnError,c=b(s);if(c instanceof m&&g.error(c),!E){if(a)throw c;return null}const l=k?void 0:n().queryCache[F],f=l?.errorInfo?.retryCount??0,d=f+1;try{h?.(c,f)}catch(e){g.error(Pt(i,"onError callback",e))}if(f<q){if(se.get().subscriptionCount>0){const t="function"==typeof z?z(d,c):z;t!==1/0&&(ne&&clearTimeout(ne),ne=setTimeout(()=>{const t=se.get();t.enabled&&t.subscriptionCount>0&&u.fetch(e,kt,!0)},t))}t(e=>({error:c,queryCache:{...e.queryCache,[F]:{cacheTime:l?.cacheTime??M,data:l?.data??null,lastFetchedAt:l?.lastFetchedAt??null,errorInfo:{error:c,lastFailedAt:Date.now(),retryCount:d}}},queryKey:D?F:e.queryKey,status:R.Error}))}else t(e=>({error:c,queryCache:{...e.queryCache,[F]:{cacheTime:l?.cacheTime??M,data:l?.data??null,lastFetchedAt:l?.lastFetchedAt??null,errorInfo:{error:c,lastFailedAt:Date.now(),retryCount:q}}},queryKey:D?F:e.queryKey,status:R.Error}));if(a)throw c;return null}finally{E&&(te=null)}}return E?(te={key:F,promise:$()}).promise:$()},getCacheEntry(e){if(k)return null;const t=n(),r=e?"string"==typeof e?e:N(Tt(V,_,J,e)):t.queryKey;return t.queryCache[r]??null},getData(e){if(k)return null;const t=n().getCacheEntry(e);return t&&null!==t.data?C?t.data:t.lastFetchedAt&&Date.now()-t.lastFetchedAt>=t.cacheTime?null:t.data:null},getStatus:function(e){const t=n(),r=t.status;switch(e){case"isIdle":return r===R.Idle;case"isLoading":return r===R.Loading;case"isError":case"isInitialLoad":case"isSuccess":case void 0:{const n=t.queryKey,o=t.queryCache[n],i=k?r===R.Error:"number"==typeof o?.errorInfo?.lastFailedAt;if("isError"===e)return i;const s=null!==((k?re===n&&t.lastFetchedAt:o?.lastFetchedAt)||null),a=!s&&!i&&t.enabled;if("isInitialLoad"===e)return a;const c=s&&!i;return"isSuccess"===e?c:{isError:i,isIdle:r===R.Idle,isLoading:r===R.Loading,isInitialLoad:a,isSuccess:c}}}},isDataExpired(e){const t=n(),r=t.queryCache[t.queryKey],o=t.queryKey,i=t.lastFetchedAt,s=(k?re===o&&i:r?.lastFetchedAt)||null;if(!s)return!0;const a=e??r?.cacheTime;return void 0===a||Date.now()-s>=a},isStale(e){const t=n(),r=t.queryKey,o=(k?re===r&&t.lastFetchedAt:t.queryCache[r]?.lastFetchedAt)||null;if(!o)return!0;const i=e??K;return Date.now()-o>=i},reset(e=!1){for(const e of X)e();X=[],V=null,_=null,G=null,ae(),ne&&(clearTimeout(ne),ne=null),te=null,re=null,e&&t(ie)}},l=r.subscribe;return r.subscribe=(...e)=>{const t=Z?()=>{}:se.subscribe(),n=1===e.length?l(e[0]):l(e[0],e[1],e[2]);return e=>{t(e),n()}},u}const le=c?.storageKey?$e(ce,f(c,{partialize:Mt(C,c.partialize)})):i&&!("storageKey"in i)?$e(ce,i):$e(ce),fe=le.getState(),de=fe.error,ye=fe.enabled,he=fe.queryKey,ge=fe.fetch;let me;if(he&&!de&&(re=he),Z=!0,A||"function"==typeof e.enabled){const{directValues:e,enabledAttachVal:t,enabledDirectValue:r,attachVals:o}=function(e,t,r){const o=u(),i=u(),s=u();for(const e in t){if(!n(t,e))continue;const a=t[e];if(Dt(a)){const t=a(St,r);o[e]=t,s[e]=t.value}else Et(a)&&(i[e]=a,s[e]=a)}let a,c=null,l=null;if(Dt(e)){const t=e(St,r);a=t.value,c=t}else a=e,l=e;return{attachVals:o,directValues:i,enabledAttachVal:c,enabledDirectValue:l,resolvedEnabled:a,resolvedParams:s}}(F,A,le);V={enabled:t,params:o},_={enabled:r,params:e}}"function"==typeof e.staleTime&&(G=e.staleTime(St,le),K=G.value);const be=Object.freeze({updateQueryKey:C}),Se=function(){let e,t=!1;return function(...n){e=n,t||(t=!0,queueMicrotask(()=>{t=!1,(e=>{ge(e??At(V,_),be)})(...e)}))}}();function ve(){let e;if(!C){e=At(V,_);const t=N(e);le.setState({queryKey:t})}Se(e)}const we=a||!T?ve:pe(ve,"number"==typeof T?T:T.delay,"number"==typeof T?{leading:!1,maxWait:T,trailing:!0}:T);for(const e in V?.params){const t=V.params[e];if(!t)continue;const n=jt(t);if(U&&console.log("[🌀 Param Subscription 🌀] Subscribed to param:",e),n){let r=t.value;const o=n(()=>{const n=t.value;ue(r,n)||(U&&console.log("[🌀 Param Change 🌀] -",e,"- [Old]:",`${r?.toString()},`,"[New]:",n?.toString()),r=n,we())});X.push(o)}}if(G){const e=jt(G);if(e){const t=G;let n=t.value;U&&console.log("[🌀 StaleTime Subscription 🌀] Initial value:",n);const r=e(()=>{const e=t.value;e!==n&&(U&&console.log("[🌀 StaleTime Change 🌀] - [Old]:",`${n},`,"[New]:",e),n=e,K=e,ge())});X.push(r)}}if(V?.enabled){const e=V.enabled,t=jt(e);if(t){let n=e.value;ye!==n&&((me??(me={})).enabled=n),n&&se.setEnabled(n),U&&console.log("[🌀 Enabled Subscription 🌀] Initial value:",n);const r=t(()=>{const t=e.value;t!==n&&(U&&console.log("[🌀 Enabled Change 🌀] - [Old]:",`${n},`,"[New]:",t),n=t,le.setState({enabled:t}))});X.push(r)}}else ye!==ie.enabled&&((me??(me={})).enabled=ie.enabled);const Oe=N(At(V,_));return Oe!==he&&((me??(me={})).queryKey=Oe),me&&le.setState(me),Z=!1,Y&&queueMicrotask(we),Q(le,B.QueryStore)}function Tt(e,t,n,r){return r?zt(r,n)?r:{...At(e,t),...r}:At(e,t)}function At(e,t){const n=Object.assign(u(),t?.params);for(const t in e?.params){const r=e.params[t];r&&(n[t]=r.value)}return n}function zt(e,t){if(!e)return!1;for(const n of t)if(!(n in e))return!1;return!0}function Dt(e){return"function"==typeof e}function Et(e){return!Dt(e)}function Mt(e,t){return r=>{const o={...r},i=u();for(const e in o)n(o,e)&&e in It&&(It[e]&&(i[e]=o[e]),delete o[e]);return{...t?t(o):Se(o),...$t(e,null,i)}}}function $t(e,t,r){if(!r.queryCache)return r;const o=Date.now(),i=t??(e&&r.queryKey||null),s=u();let a=!1;for(const e in r.queryCache){if(!n(r.queryCache,e))continue;const c=r.queryCache[e];c&&(o-(c.lastFetchedAt??c.errorInfo.lastFailedAt)<c.cacheTime||e===i)?!t&&c.errorInfo&&c.errorInfo.retryCount>0?(s[e]={...c,errorInfo:{...c.errorInfo,retryCount:0}},a=!0):s[e]=c:a=!0}return a?{...r,queryCache:s}:r}function Kt(){return Object.create(null)}function Pt(e,t,n){return new m(`[createQueryStore: ${e}]: ${t} failed`,n)}function Rt(e,t,n){const r="function"==typeof t,o=r?t:void 0,i=r?n:t,s=new Set,a=dt(e,{debugMode:i?.debugMode??!1,equalityFn:function(e,t){const n=Object.is(e,t);return n||(function(e,t){for(const n of s){n.unsubscribe();const r=n.args;if(1===r.length){const o=r[0],i=e.getState(),s=t.getState(),a=t.subscribe(o);n.unsubscribe=a,Object.is(s,i)||o(s,i);continue}const o=r[0],i=r[1];let s=r[2];s?.fireImmediately&&(s={...s,fireImmediately:!1});const a=o(e.getState()),c=o(t.getState()),u=t.subscribe(o,i,s);n.unsubscribe=u,(s?.equalityFn??Object.is)(a,c)||i(c,a)}}(e,t),_(e)),n},keepAlive:!0,lockDependencies:i?.lockDependencies??!0}),c=Object.assign({[B.VirtualStore]:!0,destroy:a.destroy,getInitialState:()=>a.getState().getInitialState(),getState:()=>a.getState().getState(),persist:(u=a.getState,{clearStorage:()=>u().persist?.clearStorage(),getOptions:()=>u().persist?.getOptions()??{},hasHydrated:()=>u().persist?.hasHydrated()??!0,hydrationPromise:()=>u().persist?.hydrationPromise?.()??Promise.resolve(),onFinishHydration:e=>u().persist?.onFinishHydration(e)??d,onHydrate:e=>u().persist?.onHydrate(e)??d,rehydrate:()=>u().persist?.rehydrate(),setOptions:e=>u().persist?.setOptions(e)}),setState:xt(a.getState),subscribe:function(...e){const t={args:e,unsubscribe:1===e.length?a.getState().subscribe(e[0]):a.getState().subscribe(e[0],e[1],e[2])};return s.add(t),()=>{t.unsubscribe(),s.delete(t)}}},o?.(a.getState));var u;return c}function xt(e){return function(...t){return!0===t[1]?e().setState(t[0],!0):e().setState(t[0])}}export{A as DEFAULT_STORAGE_KEY_PREFIX,R as QueryStatuses,B as StoreTags,m as StoresError,J as applyStateUpdate,Q as assignStoreTag,$e as baseStore,D as configureStores,oe as createStoreActions,ae as deepEqual,L as defaultRetryDelay,dt as derivedStore,_ as destroyStore,G as destroyStores,b as ensureError,E as getOptions,N as getQueryKey,M as getStorageConfig,X as getStoreName,Y as hasDestroy,Z as hasGetSnapshot,te as isDerivedStore,ne as isPersistedStore,ee as isQueryStore,re as isVirtualStore,g as logger,$ as markStoreCreated,W as parseQueryKey,qt as queryStore,p as setLogger,ce as shallowEqual,x as time,Rt as virtualStore};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storesjs/stores",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "repository": {
@@ -24,13 +24,19 @@
24
24
  "react-native": "dist/native/index.js",
25
25
  "exports": {
26
26
  ".": {
27
- "types": "./dist/index.d.ts",
27
+ "types": {
28
+ "react-native": "./dist/index.d.ts",
29
+ "vanilla": "./dist/vanilla/index.vanilla.d.ts",
30
+ "default": "./dist/index.d.ts"
31
+ },
28
32
  "import": {
29
33
  "react-native": "./dist/native/index.js",
34
+ "vanilla": "./dist/vanilla/index.mjs",
30
35
  "default": "./dist/web/index.mjs"
31
36
  },
32
37
  "require": {
33
38
  "react-native": "./dist/native/index.js",
39
+ "vanilla": "./dist/vanilla/index.js",
34
40
  "default": "./dist/web/index.js"
35
41
  }
36
42
  },
@@ -40,15 +46,15 @@
40
46
  "require": "./dist/web/chrome.js"
41
47
  }
42
48
  },
43
- "dependencies": {
44
- "zustand": "5.0.10"
45
- },
46
49
  "peerDependencies": {
47
50
  "react": ">=18.0.0",
48
51
  "react-native": ">=0.69.0",
49
52
  "react-native-mmkv": ">=2.0.0"
50
53
  },
51
54
  "peerDependenciesMeta": {
55
+ "react": {
56
+ "optional": true
57
+ },
52
58
  "react-native": {
53
59
  "optional": true
54
60
  },
@@ -58,17 +64,14 @@
58
64
  },
59
65
  "devDependencies": {
60
66
  "@types/chrome": "^0.0.276",
61
- "@types/jest": "^29.5.14",
62
67
  "@types/node": "^22.19.5",
63
68
  "@types/react": "^19.1.1",
64
69
  "@types/react-dom": "^19.1.1",
65
70
  "esbuild": "^0.25.10",
66
71
  "happy-dom": "^20.9.0",
67
- "jest": "^29.7.0",
68
72
  "madge": "^8.0.0",
69
73
  "react-dom": "^19.1.1",
70
74
  "terser": "^5.44.0",
71
- "ts-jest": "^29.3.4",
72
75
  "tsup": "^8.5.0",
73
76
  "tsx": "^4.20.6",
74
77
  "vitest": "^2.0.0"
@@ -78,7 +81,7 @@
78
81
  "build": "tsx --tsconfig scripts/tsconfig.json scripts/build.ts",
79
82
  "build:dev": "pnpm run build:types && NODE_ENV=development pnpm run build:web && NODE_ENV=development pnpm run build:native",
80
83
  "build:native": "pnpm run -s prebuild:native && BUILD_TARGET=native tsup --config tsup.config.ts --out-dir dist/native && pnpm run -s postbuild:native",
81
- "build:types": "tsc -p tsconfig.build.json --emitDeclarationOnly",
84
+ "build:types": "tsc -b tsconfig.build.json --emitDeclarationOnly --force",
82
85
  "build:web": "pnpm run -s prebuild:web && tsup --config tsup.config.ts --out-dir dist/web && pnpm run -s postbuild:web",
83
86
  "generate:exports": "tsx --tsconfig scripts/tsconfig.json scripts/generate-exports.ts",
84
87
  "lint": "pnpm -w run lint",
@@ -90,8 +93,7 @@
90
93
  "postbuild:web": "rm -f src/storesStorage.ts src/env.ts",
91
94
  "prebuild:native": "cp src/storesStorage.native.ts src/storesStorage.ts && cp src/env.native.ts src/env.ts",
92
95
  "prebuild:web": "cp src/storesStorage.web.ts src/storesStorage.ts && cp src/env.web.ts src/env.ts",
93
- "test": "tsx --tsconfig scripts/tsconfig.json scripts/test.ts",
94
- "test:all": "pnpm run test && pnpm run test:chrome",
96
+ "test": "vitest run",
95
97
  "test:chrome": "vitest run src/plugins/chrome",
96
98
  "test:plugins": "vitest run src/plugins",
97
99
  "test:treeshake": "tsx --tsconfig scripts/tsconfig.json scripts/treeshake.ts"
@@ -1,5 +0,0 @@
1
- import { type Mutate, type StateCreator as ZustandStateCreator, type StoreApi } from 'zustand/vanilla';
2
- import type { EqualityFn, StoreMutators, StoreMutatorsWithSelector, UseBoundStoreWithEqualityFn } from './types';
3
- export declare function createStoreWithEqualityFn<State, Mutators extends StoreMutators = []>(initializer: ZustandStateCreator<State, [], StoreMutatorsWithSelector<Mutators>>, defaultEqualityFn?: EqualityFn): UseBoundStoreWithEqualityFn<Mutate<StoreApi<State>, StoreMutatorsWithSelector<Mutators>>, State>;
4
- export declare function createStoreWithEqualityFn<State>(): <Mutators extends StoreMutators = []>(initializer: ZustandStateCreator<State, [], StoreMutatorsWithSelector<Mutators>>, defaultEqualityFn?: EqualityFn) => UseBoundStoreWithEqualityFn<Mutate<StoreApi<State>, StoreMutatorsWithSelector<Mutators>>, State>;
5
- //# sourceMappingURL=createStoreWithEqualityFn.d.ts.map
@@ -1,50 +0,0 @@
1
- import { DependencyList, EffectCallback } from 'react';
2
- type EqualityFn = <T>(a: T, b: T) => boolean;
3
- /**
4
- * A version of React's `useMemo` that uses deep comparison (or a custom comparator) for its dependencies.
5
- *
6
- * @param factory - Function that computes the memoized value.
7
- * @param deps - Dependency list to compare.
8
- * @param equalityFn - Custom function to compare dependencies. Defaults to deep equality.
9
- * @returns The memoized value.
10
- */
11
- export declare function useDeepMemo<T>(factory: () => T, deps: DependencyList, equalityFn?: EqualityFn): T;
12
- /**
13
- * A version of React's `useEffect` that uses deep comparison (or a custom comparator) for its dependencies.
14
- *
15
- * @param effect - The effect callback.
16
- * @param deps - Dependency list to compare.
17
- * @param equalityFn - Custom function to compare dependencies. Defaults to deep equality.
18
- */
19
- export declare function useDeepEffect(effect: EffectCallback, deps: DependencyList, equalityFn?: EqualityFn): void;
20
- /**
21
- * A version of React's `useCallback` that uses deep comparison (or a custom comparator) for its dependencies.
22
- *
23
- * @param callback - The callback function to memoize.
24
- * @param deps - Dependency list to compare.
25
- * @param equalityFn - Custom function to compare dependencies. Defaults to deep equality.
26
- * @returns A memoized callback.
27
- */
28
- export declare function useDeepCallback<T extends (...args: Parameters<T>) => ReturnType<T>>(callback: T, deps: DependencyList, equalityFn?: EqualityFn): T;
29
- /**
30
- * A version of React's `useLayoutEffect` that uses deep comparison (or a custom comparator) for its dependencies.
31
- *
32
- * @param effect - The effect callback.
33
- * @param deps - Dependency list to compare.
34
- * @param equalityFn - Custom function to compare dependencies. Defaults to deep equality.
35
- */
36
- export declare function useDeepLayoutEffect(effect: EffectCallback, deps: DependencyList, equalityFn?: EqualityFn): void;
37
- /**
38
- * A JS-side equivalent of Reanimated's `useAnimatedReaction` hook.
39
- *
40
- * Runs a "prepare" function to compute a value, and then runs a "react" function
41
- * whenever the prepared value changes, providing both the current and previous prepared values.
42
- *
43
- * @param prepare - Function that computes the value to watch.
44
- * @param react - Function that reacts to changes in the prepared value, receiving (current, previous).
45
- * @param dependencies - Dependency array. Required for correct operation in React.
46
- * @param equalityFn - Custom function to compare dependencies. Defaults to `Object.is`.
47
- */
48
- export declare function useCompareEffect<PreparedResult>(prepare: () => PreparedResult, react: (current: PreparedResult, previous: PreparedResult | null) => void, dependencies: DependencyList, equalityFn?: EqualityFn): void;
49
- export {};
50
- //# sourceMappingURL=compareHooks.d.ts.map
package/dist/signal.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import { AttachValue } from './queryStore/signalTypes';
2
- import { BaseStore, UnsubscribeFn } from './types';
3
- export declare const attachValueSubscriptionMap: WeakMap<AttachValue<unknown>, Subscribe>;
4
- export type Subscribe = (callback: () => void) => UnsubscribeFn;
5
- export type GetValue = () => unknown;
6
- export type SetValue = (path: unknown[], value: unknown) => void;
7
- export declare function $<T>(store: BaseStore<T>): AttachValue<T>;
8
- export declare function $<T, S>(store: BaseStore<T>, selector: (state: T) => S, equalityFn?: (a: S, b: S) => boolean): AttachValue<S>;
9
- export declare const createSignal: <T, S>(store: BaseStore<T>, selector: (state: T) => S, equalityFn: (a: S, b: S) => boolean) => [Subscribe, GetValue, SetValue];
10
- export declare function getAttachValueSubscribeFn<AttachVal extends AttachValue<unknown>>(attachVal: AttachVal): Subscribe | undefined;
11
- //# sourceMappingURL=signal.d.ts.map
@@ -1,22 +0,0 @@
1
- import { PersistStorage } from 'zustand/middleware';
2
- import { StorageValue } from './storageTypes';
3
- import { SyncContext } from '../sync/syncEnhancer';
4
- import { AsyncStorageInterface, BaseStoreOptions, EnforceStorageKey, SyncStorageInterface } from '../types';
5
- type SyncPersistStorage<S> = {
6
- getItem: (name: string) => StorageValue<S> | null;
7
- removeItem: (name: string) => void;
8
- setItem: (name: string, value: StorageValue<S>) => void;
9
- };
10
- /**
11
- * Creates a persist storage object for the base store.
12
- */
13
- export declare function createPersistStorage<S, PersistedState extends Partial<S>, PersistReturn>(options: EnforceStorageKey<BaseStoreOptions<S, PersistedState, PersistReturn>>, storage: AsyncStorageInterface | SyncStorageInterface | undefined, syncContext: SyncContext | undefined): {
14
- persistStorage: SyncPersistStorage<PersistedState> | PersistStorage<PersistedState, Promise<void>>;
15
- version: number;
16
- };
17
- /**
18
- * Creates an asynchronous persist storage adapter for Zustand.
19
- */
20
- export declare function createAsyncPersistStorage<S, PersistedState extends Partial<S>, PersistReturn>(storage: AsyncStorageInterface, options: EnforceStorageKey<BaseStoreOptions<S, PersistedState, PersistReturn>>, persistThrottleMs: number | undefined, syncContext?: SyncContext): PersistStorage<PersistedState, Promise<void>>;
21
- export {};
22
- //# sourceMappingURL=storageCreators.d.ts.map
@@ -1,3 +0,0 @@
1
- import { SyncEngine } from './types';
2
- export declare function createBrowserSyncEngine(): SyncEngine;
3
- //# sourceMappingURL=browserSyncEngine.d.ts.map
@@ -1,3 +0,0 @@
1
- import { SyncEngine } from './types';
2
- export declare function createNoopSyncEngine(): SyncEngine;
3
- //# sourceMappingURL=noopSyncEngine.d.ts.map
@@ -1 +0,0 @@
1
- var e=class extends Error{constructor(e,t){super(e),this.name="StoresError",void 0!==t&&Object.defineProperty(this,"cause",{configurable:!0,value:t,writable:!0})}};function t(e){return e instanceof Error?e:new Error(String(e))}var r="undefined"!=typeof window&&"undefined"!=typeof document,n=!1,o="development"===process.env.NODE_ENV,s="test"===process.env.NODE_ENV,i=e=>e(),a=Object.freeze(Object.create(null));function c(e){return e}function l(){return Object.create(a)}function u(e,t){return void 0===t?Object.assign(l(),e):Object.assign(l(),e,t)}function f(){}function d(){return"undefined"!=typeof window?window.localStorage:null}var y={debug:(e,t)=>{o&&console.debug(e,t)},error:(e,t)=>{o&&!s&&console.error(e,t)},info:(e,t)=>{o&&console.info(e,t)},warn:(e,t)=>{o&&console.warn(e,t)}},h=Object.prototype.hasOwnProperty;function g(e,t){return h.call(e,t)}function p(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var w="stores/core/sync-channel",v=`${w}:storage:`;function m(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}var b,S,E,O,j=class{constructor(e){this.broadcast=e.broadcast,this.origin=e.origin,this.storeKey=e.storeKey,this.teardown=e.teardown}destroy(){this.teardown()}publish(e){const t=l();for(const r of Object.entries(e.values))t[r[0]]=r[1];const r={origin:this.origin,replace:e.replace,sessionId:e.sessionId,storeKey:this.storeKey,timestamp:e.timestamp,values:t};this.broadcast(r)}},I=class{constructor(){this.listeners=new Map,this.origin="undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Math.random().toString(36).slice(2)}:${Date.now().toString(36)}`,this.onChannelMessage=e=>{e.data&&this.dispatch(e.data)},this.onStorageEvent=t=>{if(t.key&&t.newValue&&t.key.startsWith(v))try{const e=JSON.parse(t.newValue);this.dispatch(e)}catch(t){y.error(new e("[sync] Failed to parse storage event payload",t))}},this.channel="undefined"==typeof BroadcastChannel?null:new BroadcastChannel(w),this.storage=m(),this.channel&&this.channel.addEventListener("message",this.onChannelMessage),r&&window.addEventListener("storage",this.onStorageEvent)}get sessionId(){return this.origin}register(e){const t=t=>{if(t.origin===this.origin||t.storeKey!==e.key)return;const r=l();for(const n of e.fields)g(t.values,n)&&(r[n]=t.values[n]);Object.keys(r).length&&e.apply({replace:t.replace,sessionId:t.sessionId,timestamp:t.timestamp,values:r})};let r=this.listeners.get(e.key);return r||(r=new Set,this.listeners.set(e.key,r)),r.add(t),new j({broadcast:e=>this.broadcast(e),origin:this.origin,storeKey:e.key,teardown:()=>this.removeListener(e.key,t)})}broadcast(t){try{this.channel&&this.channel.postMessage(t),this.writeToStorage(t)}catch(t){y.error(new e("[sync] Failed to broadcast update",t))}}dispatch(e){if(!e.storeKey)return;const t=this.listeners.get(e.storeKey);if(t&&t.size)for(const r of t)r(e)}removeListener(e,t){const r=this.listeners.get(e);r&&(r.delete(t),r.size||this.listeners.delete(e))}writeToStorage(t){if(this.storage||(this.storage=m()),!this.storage)return;const r=`${v}${t.storeKey}`;try{this.storage.setItem(r,JSON.stringify(t))}catch(t){y.error(new e("[sync] Failed to write broadcast payload to storage",t))}}},_=class{destroy(){}publish(){}},$=class{constructor(){this.sessionId="noop"}register(e){return new _}},k="stores:",K=!1;function M(e){var t;o&&function(){if(K)throw new Error("[stores]: configureStores() called after first store creation. Call it earlier before creating any stores.")}(),e.logger&&(t=e.logger,y=t),E??(E=function(e){return e?.queryStoreDefaults?{queryStoreDefaults:e.queryStoreDefaults}:void 0}(e)),O??(O=C(e))}function D(){if(E)return E}function N(){return O??(O=C(void 0))}function A(){K=!0}function C(e){return{storage:e?.storage??(t=e?.storageKeyPrefix??k,{clearAll(){try{const e=d();if(!e)return;const r=[];for(let n=0;n<e.length;n++){const o=e.key(n);o?.startsWith(t)&&r.push(o)}for(const t of r)e.removeItem(t)}catch(e){console.error("Error clearing localStorage:",e)}},contains(e){const r=d();return null!==r?.getItem(`${t}${e}`)},delete(e){try{const r=d();r?.removeItem(`${t}${e}`)}catch(e){console.error("Error deleting from localStorage:",e)}},getAllKeys(){try{const e=d();return e?Array.from(e.keys()):[]}catch(e){return console.error("Error getting keys from localStorage:",e),[]}},get(e){try{const r=d();return r?r.getItem(`${t}${e}`)??void 0:void 0}catch(e){return void console.error("Error reading from localStorage:",e)}},set(e,r){try{const n=d();n?.setItem(`${t}${e}`,r)}catch(e){console.error("Error writing to localStorage:",e)}}}),syncEngine:e?.syncEngine??(r?(b||(b=new I),b):(S||(S=new $),S))};var t}function L(e,t){return t instanceof Map?{__type:"Map",entries:Array.from(t.entries())}:t instanceof Set?{__type:"Set",values:Array.from(t)}:t}function P(e,t){return function(e){return"object"==typeof e&&null!==e&&"__type"in e&&"Map"===e.__type}(t)?new Map(t.entries):function(e){return"object"==typeof e&&null!==e&&"__type"in e&&"Set"===e.__type}(t)?new Set(t.values):t}function U(e){return!!e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then}export{k as DEFAULT_STORAGE_KEY_PREFIX,r as IS_BROWSER,o as IS_DEV,n as IS_IOS,s as IS_TEST,e as StoresError,u as buildNullObject,M as configureStores,t as ensureError,D as getOptions,N as getStorageConfig,g as hasOwn,c as identity,p as isPlainObject,U as isPromiseLike,y as logger,A as markStoreCreated,f as noop,l as nullObject,L as replacer,P as reviver,i as unstable_batchedUpdates};