@storesjs/stores 0.9.0 → 0.11.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 (139) hide show
  1. package/README.md +55 -29
  2. package/dist/createBaseStore.d.ts +8 -8
  3. package/dist/createDerivedStore.d.ts +9 -17
  4. package/dist/createQueryStore.d.ts +11 -16
  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/queryParams.d.ts +18 -0
  22. package/dist/internal/queryStore/queryStoreDefaults.d.ts +8 -0
  23. package/dist/internal/queryStore.d.ts +2 -0
  24. package/dist/internal/runtime.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/types/internalSubscribeTypes.d.ts +16 -0
  32. package/dist/internal/utils/persistUtils.d.ts +9 -0
  33. package/dist/internal/virtualStore.d.ts +2 -0
  34. package/dist/native/index.js +1 -1
  35. package/dist/native/index.mjs +1 -1
  36. package/dist/queryStore/classes/SubscriptionManager.d.ts +3 -31
  37. package/dist/queryStore/queryKey.d.ts +10 -0
  38. package/dist/queryStore/queryParam.d.ts +37 -0
  39. package/dist/queryStore/types.d.ts +12 -53
  40. package/dist/store/attachStoreHook.react.d.ts +5 -0
  41. package/dist/store/attachStoreHook.vanilla.d.ts +6 -0
  42. package/dist/store/batchStoreNotifications.native.d.ts +3 -0
  43. package/dist/store/batchStoreNotifications.web.d.ts +2 -0
  44. package/dist/store/cascadeScheduler.d.ts +38 -0
  45. package/dist/store/createStore.d.ts +6 -0
  46. package/dist/store/persist.d.ts +14 -0
  47. package/dist/store/stateUpdate.d.ts +10 -0
  48. package/dist/store/types.d.ts +108 -0
  49. package/dist/types/setState.d.ts +22 -0
  50. package/dist/types/subscribe.d.ts +27 -0
  51. package/dist/types/useStoreCallSignatures.d.ts +2 -0
  52. package/dist/types/useStoreCallSignatures.react.d.ts +6 -0
  53. package/dist/types/useStoreCallSignatures.vanilla.d.ts +2 -0
  54. package/dist/types/utils.d.ts +4 -0
  55. package/dist/types.d.ts +46 -94
  56. package/dist/utils/createMicrotaskScheduler.d.ts +2 -1
  57. package/dist/utils/time.d.ts +0 -7
  58. package/dist/vanilla/createBaseStore.d.ts +35 -0
  59. package/dist/vanilla/createDerivedStore.d.ts +62 -0
  60. package/dist/vanilla/createQueryStore.d.ts +110 -0
  61. package/dist/vanilla/createVirtualStore.d.ts +39 -0
  62. package/dist/vanilla/env.web.d.ts +6 -0
  63. package/dist/vanilla/index.d.ts +1 -0
  64. package/dist/vanilla/index.js +1 -0
  65. package/dist/vanilla/index.mjs +1 -0
  66. package/dist/vanilla/index.shared.d.ts +13 -0
  67. package/dist/vanilla/index.vanilla.d.ts +1 -0
  68. package/dist/vanilla/internal/baseStore.d.ts +1 -0
  69. package/dist/vanilla/internal/config.d.ts +63 -0
  70. package/dist/vanilla/internal/createStoreActions.d.ts +23 -0
  71. package/dist/vanilla/internal/derivedStore/deriveProxy.d.ts +14 -0
  72. package/dist/vanilla/internal/derivedStore/pathFinder.d.ts +25 -0
  73. package/dist/vanilla/internal/derivedStore.d.ts +1 -0
  74. package/dist/vanilla/internal/errors.d.ts +9 -0
  75. package/dist/vanilla/internal/logger.d.ts +9 -0
  76. package/dist/{middleware → vanilla/internal/middleware}/createHydrationGate.d.ts +1 -2
  77. package/dist/vanilla/internal/queryStore/queryParams.d.ts +17 -0
  78. package/dist/{queryStore → vanilla/internal/queryStore}/queryStoreDefaults.d.ts +1 -2
  79. package/dist/vanilla/internal/queryStore.d.ts +1 -0
  80. package/dist/vanilla/internal/runtime.d.ts +11 -0
  81. package/dist/vanilla/internal/storage/storageCreators.d.ts +11 -0
  82. package/dist/vanilla/internal/storeUtils.d.ts +45 -0
  83. package/dist/vanilla/internal/sync/browserSyncEngine.d.ts +2 -0
  84. package/dist/vanilla/internal/sync/noopSyncEngine.d.ts +2 -0
  85. package/dist/{sync → vanilla/internal/sync}/syncEnhancer.d.ts +2 -3
  86. package/dist/vanilla/internal/types/internalSubscribeTypes.d.ts +15 -0
  87. package/dist/{utils → vanilla/internal/utils}/persistUtils.d.ts +1 -2
  88. package/dist/vanilla/internal/virtualStore.d.ts +1 -0
  89. package/dist/vanilla/queryStore/classes/SubscriptionManager.d.ts +38 -0
  90. package/dist/vanilla/queryStore/queryKey.d.ts +9 -0
  91. package/dist/vanilla/queryStore/queryParam.d.ts +36 -0
  92. package/dist/vanilla/queryStore/types.d.ts +360 -0
  93. package/dist/vanilla/storage/storageTypes.d.ts +12 -0
  94. package/dist/vanilla/store/attachStoreHook.d.ts +5 -0
  95. package/dist/vanilla/store/attachStoreHook.vanilla.d.ts +5 -0
  96. package/dist/vanilla/store/batchStoreNotifications.web.d.ts +1 -0
  97. package/dist/{derivedStore → vanilla/store}/cascadeScheduler.d.ts +12 -6
  98. package/dist/vanilla/store/createStore.d.ts +5 -0
  99. package/dist/vanilla/store/persist.d.ts +13 -0
  100. package/dist/vanilla/store/stateUpdate.d.ts +9 -0
  101. package/dist/vanilla/store/types.d.ts +107 -0
  102. package/dist/vanilla/storesStorage.web.d.ts +2 -0
  103. package/dist/vanilla/sync/types.d.ts +114 -0
  104. package/dist/vanilla/types/functions.d.ts +23 -0
  105. package/dist/vanilla/types/objects.d.ts +10 -0
  106. package/dist/vanilla/types/setState.d.ts +21 -0
  107. package/dist/vanilla/types/subscribe.d.ts +26 -0
  108. package/dist/vanilla/types/useStoreCallSignatures.d.ts +1 -0
  109. package/dist/vanilla/types/useStoreCallSignatures.vanilla.d.ts +1 -0
  110. package/dist/vanilla/types/utils.d.ts +12 -0
  111. package/dist/vanilla/types.d.ts +287 -0
  112. package/dist/vanilla/utils/core.d.ts +25 -0
  113. package/dist/vanilla/utils/createAsyncMicrotaskScheduler.d.ts +34 -0
  114. package/dist/vanilla/utils/createMicrotaskScheduler.d.ts +28 -0
  115. package/dist/vanilla/utils/debounce.d.ts +21 -0
  116. package/dist/vanilla/utils/equality.d.ts +37 -0
  117. package/dist/vanilla/utils/hydrationCoordinator.d.ts +12 -0
  118. package/dist/vanilla/utils/promiseUtils.d.ts +1 -0
  119. package/dist/vanilla/utils/serialization.d.ts +13 -0
  120. package/dist/vanilla/utils/stringUtils.d.ts +6 -0
  121. package/dist/vanilla/utils/time.d.ts +36 -0
  122. package/dist/web/chrome.js +1 -1
  123. package/dist/web/chrome.mjs +1 -1
  124. package/dist/web/chunk-FENSEQ3V.mjs +1 -0
  125. package/dist/web/chunk-FPYZVFBM.mjs +1 -0
  126. package/dist/web/chunk-PLDNKWGX.mjs +1 -0
  127. package/dist/web/index.js +1 -1
  128. package/dist/web/index.mjs +1 -1
  129. package/dist/web/internal/runtime.js +1 -0
  130. package/dist/web/internal/runtime.mjs +1 -0
  131. package/package.json +13 -11
  132. package/dist/createStoreWithEqualityFn.d.ts +0 -5
  133. package/dist/hooks/compareHooks.d.ts +0 -50
  134. package/dist/queryStore/signalTypes.d.ts +0 -13
  135. package/dist/signal.d.ts +0 -11
  136. package/dist/storage/storageCreators.d.ts +0 -22
  137. package/dist/sync/browserSyncEngine.d.ts +0 -3
  138. package/dist/sync/noopSyncEngine.d.ts +0 -3
  139. package/dist/web/chunk-3U5A7HQV.mjs +0 -1
@@ -0,0 +1 @@
1
+ import{getQueryKey as e,isQueryParamConfig as t}from"../chunk-PLDNKWGX.mjs";import{isPromiseLike as n,reviver as r,replacer as o}from"../chunk-FENSEQ3V.mjs";export{replacer,reviver}from"../chunk-FENSEQ3V.mjs";import{IS_DEV as i,IS_TEST as s,IS_BROWSER as c,isRecordLike as a,nullObject as u,IS_IOS as l,buildNullObject as f,hasOwn as d,noop as y,isPlainObject as h,identity as p}from"../chunk-FPYZVFBM.mjs";export{identity,nullObject}from"../chunk-FPYZVFBM.mjs";function g(){return"undefined"!=typeof window?window.localStorage:null}var b={debug:(e,t)=>{i&&console.debug(e,t)},error:(e,t)=>{i&&!s&&console.error(e,t)},info:(e,t)=>{i&&console.info(e,t)},warn:(e,t)=>{i&&console.warn(e,t)}};function m(e){b=e}var S=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 v(e){return e instanceof Error?e:new Error(String(e))}var w,O="stores/core/sync-channel",j=`${O}:storage:`,F=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)}},k=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(j))try{const t=JSON.parse(e.newValue);this.dispatch(t)}catch(e){b.error(new S("[sync] Failed to parse storage event payload",e))}},this.channel="undefined"==typeof BroadcastChannel?null:new BroadcastChannel(O),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 n=u();for(const r of e.fields)d(t.values,r)&&(n[r]=t.values[r]);Object.keys(n).length&&e.apply({replace:t.replace,sessionId:t.sessionId,timestamp:t.timestamp,values:n})};let n=this.listeners.get(e.key);return n||(n=new Set,this.listeners.set(e.key,n)),n.add(t),new F({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){b.error(new S("[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=`${j}${e.storeKey}`;try{this.storage.setItem(t,JSON.stringify(e))}catch(e){b.error(new S("[sync] Failed to write broadcast payload to storage",e))}}};function I(){try{return"undefined"!=typeof window?window.localStorage:null}catch{return null}}var C,q,T,z=class{destroy(){}publish(){}},A=class{constructor(){this.sessionId="noop"}register(e){return new z}},K="stores:",P=!1;function E(e){i&&function(){if(P)throw new Error("[stores]: configureStores() called after first store creation. Call it earlier before creating any stores.")}(),e.logger&&m(e.logger),q??(q=function(e){return e?.queryStoreDefaults?{queryStoreDefaults:e.queryStoreDefaults}:void 0}(e)),T??(T=x(e))}function D(){if(q)return q}function M(){return T??(T=x(void 0))}function $(){P=!0}function x(e){return{storage:e?.storage??(t=e?.storageKeyPrefix??K,{clearAll(){try{const e=g();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=g();return null!==n?.getItem(`${t}${e}`)},delete(e){try{const n=g();n?.removeItem(`${t}${e}`)}catch(e){console.error("Error deleting from localStorage:",e)}},getAllKeys(){try{const e=g();return e?Array.from(e.keys()):[]}catch(e){return console.error("Error getting keys from localStorage:",e),[]}},get(e){try{const n=g();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=g();r?.setItem(`${t}${e}`,n)}catch(e){console.error("Error writing to localStorage:",e)}}}),syncEngine:e?.syncEngine??(c?(w||(w=new k),w):(C||(C=new A),C))};var t}var R,L={Error:"error",Idle:"idle",Loading:"loading",Success:"success"},N={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 H(e,t){const n=t?.baseDelay??N.seconds(5),r=t?.maxDelay??N.minutes(5);return Math.min(n*Math.pow(2,e),r)}function W(e,t){return!0===t[1]?e(t[0],!0):e(t[0])}function U(e,t,n){if(!0===n)return V(t)?t(e):t;const r=V(t)?t(e):t;return Object.is(r,e)?e:a(e)&&a(r)?{...e,...r}:r}function V(e){return"function"==typeof e}var B=Object.freeze({QueryStore:Symbol("queryStore"),VirtualStore:Symbol("virtualStore")});function J(e,t){return Object.assign(e,{[t]:!0})}function Q(e,t){X(e)?e.getState().reset(t?.clearQueryCache):Z(e)&&e.destroy()}function _(e,t){for(const n of Array.isArray(e)?e:Object.values(e))n&&!t?.skipDestroy?.(n)&&Q(n,t)}function Y(e){const t="function"==typeof(n=e)?n.name:"";var n;return te(e)?e.persist.getOptions().name??t:t}function Z(e){return"destroy"in e}function G(e){return"getSnapshot"in e}function X(e){return B.QueryStore in e}function ee(e){return"flushUpdates"in e}function te(e){return!(!("persist"in e)||!e.persist)&&"string"==typeof e.persist.getOptions().name}function ne(e){return B.VirtualStore in e}function re(e,t){const n=function(e){const t=e.getState(),n=u(),r=n;if(i&&("object"!=typeof t||null===t))throw new Error("[createStoreActions]: State is not an object");if(ne(e))for(const n in t)ie(t,n)&&(r[n]=oe(e,n));else for(const e in t)ie(t,e)&&(r[e]=t[e]);return n}(e);return t?Object.assign(n,t):n}function oe(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 ie(e,t){return"function"==typeof e[t]}function se(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)||!se(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 ae(e,t){const n=Object.prototype.hasOwnProperty;function r(e,t){for(const n of e.keys())if(ae(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--&&ae(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(!ae(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)||!ae(e[r],t[r]))return!1}return Object.keys(t).length===i}}return e!=e&&t!=t}function ue(e){return e()}var le=!1,fe=!1,de=!1,ye=new Set,he=new Map,pe=new Map,ge=null,be=1/0;function me(){return le}function Se(){return ge}function ve(){le||(le=!0,de||(de=!0,queueMicrotask(()=>{de=!1,we()})))}function we(){if(le)if(fe)je();else{fe=!0;try{ue(je)}finally{Ie()}}}function Oe(e){le&&ye.add(e)}function je(){for(;he.size>0||ye.size>0;)Fe(),ke()}function Fe(){for(;he.size>0;){const e=be,t=pe.get(e);if(t){pe.delete(e);for(const e of t)he.delete(e);ge=e;for(const e of t)e();ge=null,be=1/0;for(const e of pe.keys())e<be&&(be=e)}else{be=1/0;for(const e of pe.keys())e<be&&(be=e)}}}function ke(){for(const e of ye)ye.delete(e),e()}function Ie(){le=!1,fe=!1,ge=null,ye.clear(),he.clear(),pe.clear(),be=1/0}function Ce(e){let t;const n=new Set;let r;function o(...e){const o=U(t,...e);if(Object.is(o,t))return;const i=t;if(t=o,r)for(const e of r)e(t,i);n.size&&we();for(const e of n)e(t,i)}function i(){return t}const s={getInitialState:function(){return c},getState:i,setState:o,subscribe:function(...e){return 1===e.length?a(e[0]):function(e,n,o){const i=o?.equalityFn??Object.is,s=o?.isCascadeParticipant??!1;let c=e(t);function u(t){const r=e(t);if(i(c,r))return;const o=c;c=r,s&&ve(),n(r,o)}return o?.fireImmediately&&n(c,c),s?function(e){return(r??(r=new Set)).add(e),()=>{r?.delete(e),0===r?.size&&(r=void 0)}}(u):a(u)}(e[0],e[1],e[2])}},c=t=e(o,i,s);return s;function a(e){return n.add(e),()=>{n.delete(e)}}}function qe(e){return{...e,merge:e.merge??Te,skipHydration:e.skipHydration??!1}}function Te(e,t){return void 0===e?t:{...t,...e}}function ze(){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 Ae=Math.max,Ke=Math.min;function Pe(e,t=0,n={}){let r,o,i,s,c,a,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-(a??0);return void 0===a||n>=t||n<0||f&&void 0!==i&&e-u>=i}function p(){const e=Ee();if(h(e))return g(e);c=setTimeout(p,function(e){const n=t-(e-(a??0));return f&&void 0!==i?Ke(n,i-(e-u)):n}(e))}function g(e){return c=void 0,d&&r?y(e):(r=o=void 0,s)}function b(...e){const n=Ee(),i=h(n);if(r=e,o=this,a=n,i){if(void 0===c)return function(e){return u=e,c=setTimeout(p,t),l?y(e):s}(a);if(f)return clearTimeout(c),c=setTimeout(p,t),y(a)}return void 0===c&&(c=setTimeout(p,t)),s}return t=De(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?Ae(De(n.maxWait)||0,t):void 0,d="trailing"in n?!!n.trailing:d),b.cancel=function(){void 0!==c&&clearTimeout(c),u=0,r=a=o=c=void 0},b.flush=function(){return void 0===c?s:g(Ee())},b}function Ee(){return"undefined"!=typeof performance&&"function"==typeof performance.now?performance.now():Date.now()}function De(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 Me(e){if(!h(e))return e;const t=u(),n=Object.keys(e);for(let r=0;r<n.length;r++){const o=n[r],i=e[o];"function"!=typeof i&&(t[o]=i)}return t}var $e=s?0:c?N.ms(200):N.seconds(l?3:5);function xe(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??Me,c=t.deserializer??e.deserializer??Le(o),a=t.serializer??e.serializer??Ne(o);function u(t,n,o){try{if(Ve(r))return;const c={state:s(n),version:o},u=We(r,i,c),l=a(c);try{e.set(t,l),Ue(r,u)}catch(e){b.error(new S("[createBaseStore]: Failed to persist store data",e))}}catch(e){b.error(new S("[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:c(n)},setItem:(e,t,n)=>{r?.getIsApplyingRemote()||l(e,t,n)},removeItem:t=>{try{e.delete(t)}catch(e){b.error(new S("[createBaseStore]: Failed to delete persisted store data",e))}}}}function Re(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??Me,c=t.deserializer??e.deserializer??Le(o),a=t.serializer??e.serializer??Ne(o);async function u(t,n,o){try{if(Ve(r))return;const c={state:s(n),version:o},u=We(r,i,c),l=a(c);try{await e.set(t,l),Ue(r,u)}catch(e){b.error(new S("[createBaseStore]: Failed to persist store data",e))}}catch(e){b.error(new S("[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:c(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){b.error(new S("[createBaseStore]: Failed to delete persisted store data",e))}}}}function Le(e){return t=>{if("string"!=typeof t)throw new S("[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?r:void 0)}catch(e){throw b.error(new S("[createBaseStore]: Failed to deserialize persisted store data",e)),e}}(t,e)}}function Ne(e){return t=>function(e,t){try{return JSON.stringify(e,t?o:void 0)}catch(e){throw b.error(new S("[createBaseStore]: Failed to serialize store data",e)),e}}(t,e)}var He=Object.freeze({shouldClear:!1});function We(e,t,n){if(!t||!e)return He;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 Ue(e,t){e&&t.shouldClear&&t.fieldSnapshot&&Object.keys(t.fieldSnapshot).length&&e.clearFieldTimestamps(t.fieldSnapshot)}function Ve(e){return!!e&&!!e.getIsApplyingRemote()}var[Be,Je]=[0,1];function Qe(e,t,n){if(!e)return!0;const r=e[Be],o=e[Je];return!(t<r)&&(t>r||n>o)}function _e(e,t){return Object.prototype.hasOwnProperty.call(t,e)}function Ye(e,t){if(!i)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 Ze(e){if(null===e)return"null";const t=typeof e;return"object"===t?Object.prototype.toString.call(e):t}function Ge(e,t){if($(),!t)return Ce(e);const r=t.storageKey,o="string"==typeof r,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 S("[createBaseStore]: sync requires a key to be specified either directly or via storageKey");return n?{...e,key:r}:{key:r}}(t.sync,r),c=s?function(e,t,r){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}}(r);return{stateCreator:(s,c,a)=>{const l=new Map,f=[],d=[];let y=null,h=!1,p=!1,g=0,m=null,v=[],w=Promise.resolve(),O=!r;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 F(e,t){if(h||!m)return t?s(e,t):s(e);const r=function(){const e=Date.now(),t=e>g?e:g+1;return g=t,t}();let i=[],c=u();const a=n=>{const o=U(n,e,t);for(const e of v)Object.is(o[e],n[e])||(i.push(e),c[e]=o[e]);return i.length&&j(r,i),o},f=t?s(a,!0):s(a);function b(){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:c,timestamp:r})}return n(f)?f.finally(b):(b(),f)}const k=a.setState;a.setState=F;const I=e(F,c,a);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}(I),!v.length)return I;async function C(e){g=Math.max(g,e.timestamp);const n=u(),r=c(),o=e.timestamp;let s;if(e.replace)for(const t of v)_e(t,e.values)||Qe(l.get(t),o,e.sessionId)&&(s??(s=[])).push(t);for(const i of v){if(!_e(i,e.values))continue;if(!m?.has(i))continue;if(!Qe(l.get(i),o,e.sessionId))continue;const s=t.merge?.[i];if(s){const t=e.values[i],c=r[i];if(void 0!==t){const a=s(t,c,r,e.values),u=void 0!==c?c:t;if(!Ye(a,u))return void b.error(new S(`[sync] Merge function for field "${String(i)}" returned ${Ze(a)} but expected ${Ze(u)}`));n[i]=a,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){r?w=w.then(()=>C(e)):C(e)}if(m=new Set(v),y=o.register({apply:e=>{O?q(e):f.push(e)},fields:v,getState:c,key:t.key}),y?.onFirstSubscribe||y?.onLastUnsubscribe){let e=0;const t=a.subscribe;a.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 z(){O=!0,function(){if(!f.length)return;const e=f.slice();f.length=0;for(const t of e)q(t)}()}return r?(i.onHydrationComplete=T,i.onHydrationFlushEnd=z):y.onHydrated?(y.onHydrated(T),z()):(T(),z()),I},syncContext:i}}(e,s,i?.async??!1):void 0,a=c?.stateCreator??e;if(!o)return Ce(a);const l=function(e,t,n){const r=t??e.storage??M().storage,o=(e.sync?void 0:e.persistThrottleMs??$e)||void 0,i=e.version??0;return r.async?{async:!0,persistStorage:Re(r,e,o,n),version:i}:{async:!1,persistStorage:xe(r,e,o,n),version:i}}(t,i,c?.syncContext),f=l.async?function(e){let t,n,r,o=!1;return{hydrationPromise:()=>o?t?.promise??n??(n=Promise.resolve()):(t||(t=ze()),t.promise),stateCreator:(n,i,s)=>{let c;return r=()=>{if(c?.length){for(const e of c)W(s.setState,e);c=void 0}},e(function(...e){return o?W(n,e):(t||(t=ze()),c||(c=[]),c.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(v(i)):t?.complete(),s?.(e,i)}}}}(a):void 0,d=f?f.wrapOnRehydrateStorage(t.onRehydrateStorage,c?.syncContext):t.onRehydrateStorage,y=Ce(function(e,t){return(r,o,i)=>{let s,c,a,u=qe(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 W(y,e),d()};const h=e(function(...e){return W(r,e),d()},o,i);function p(){const e=function(){const e=++f;return l=!1,c?.forEach(e=>e(o()??h)),e}(),t=u.onRehydrateStorage?.(o()??h);try{const r=u.storage.getItem(u.name);return n(r)?r.then(n=>g(e,n,t)).catch(n=>S(e,t,n)):g(e,r,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=>(a??(a=new Set),a.add(e),()=>{a?.delete(e),0===a?.size&&(a=void 0)}),onHydrate:e=>(c??(c=new Set),c.add(e),()=>{c?.delete(e),0===c?.size&&(c=void 0)}),rehydrate:p,setOptions:e=>{u=qe({...u,...e,storage:e.storage??u.storage})}}}),u.skipHydration||p(),s??h;function g(e,t,r){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 r=e.migrate(t.state,t.version);return n(r)?r.then(e=>({migrated:!0,state:e})):{migrated:!0,state:r}}(u,t);return n(o)?o.then(t=>b(e,t,r)).catch(t=>S(e,r,t)):b(e,o,r)}function b(e,t,i){const c=function(e,t){if(e!==f)return;const n=u.merge(t.state,o()??h);return s=n,r(n,!0),t.migrated?d():void 0}(e,t);if(n(c))return c.then(()=>m(e,i));m(e,i)}function m(e,t){if(e!==f)return;t?.(s,void 0);const n=o();s=n,l=!0,a?.forEach(e=>e(n))}function S(e,t,n){e===f&&t?.(void 0,n)}}}(f?(e,t,n)=>(c&&(c.syncContext.setWithoutPersist=n.setState),f.stateCreator(e,t,n)):a,{merge:t.merge,migrate:t.migrate,name:r,onRehydrateStorage:d,storage:l.persistStorage,version:l.version}));return f?Object.assign(y,{persist:Object.assign(y.persist,{hydrationPromise:f.hydrationPromise})}):y}function Xe(e,t,n="s"){return 1===t?e:`${e}${n}`}var et=Symbol("stores.deriveProxy.unwrap");function tt(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?nt(e,r,t,n,new WeakSet,new WeakMap):(n(t,r,!0),e)}(G(e)?e.getSnapshot():e.getState(),e,n);return t.set(e,o),o}function nt(e,t,n,r,o,i){return new Proxy(e,{get(s,c,a){if(c===et)return r(n,t,!0),s;if(o.has(s))return Reflect.get(s,c,a);if("__proto__"===c||"symbol"==typeof c)return c===Symbol.iterator&&(r(n,t,!0),o.add(s)),Reflect.get(s,c,a);const u=Reflect.get(s,c,s),l=String(c),f=t.concat(l);if("function"==typeof u)return Object.prototype.hasOwnProperty.call(s,c)?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,nt(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 rt(e,t){if(!e||"object"!=typeof e)return e;const n=function(e){const t=Reflect.get(e,et);return t&&"object"==typeof t?t:void 0}(e);return n||(Array.isArray(e)?function(e,t){const n=it(e,t);if(n)for(let t=0;t<e.length;t++)ot(e,String(t),n)}(e,t):h(e)&&function(e,t){const n=it(e,t);if(n)for(const t of Reflect.ownKeys(e))ot(e,t,n)}(e,t),e)}function ot(e,t,n){const r=Reflect.getOwnPropertyDescriptor(e,t);if(!r||!("value"in r))return;const o=rt(r.value,n);o!==r.value&&(r.value=o,Reflect.defineProperty(e,t,r))}function it(e,t){const n=t??new WeakSet;return n.has(e)?null:(n.add(e),n)}var st=Object.freeze([]);function ct(){const e=new Map;return{buildProxySubscriptions(t,n,r,o){const i=new Set;for(const t of e)lt(t[1],t[0],[],0,i,r);!1!==o?.(i)&&function(e,t,n){for(const n of e){const e=n.invocation?ht(n.path,n.invocation):yt(n.path);t(n.store,e,n.path)}n&&function(e){const t=e.size;console.log(`[📡 ${t} ${Xe("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}_${Xe("arg",o)})`:"()"}`}),null,2))}(e)}(i,t,n)},reset(){e.clear()},trackPath(t,n,r,o){let i=e.get(t);i||(i=at(),e.set(t,i)),ut(i,n,0,r,o)}}}function at(){return u()}function ut(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(ft(n,t))return;const r=e.extraInvocations;if(r){for(let e=0;e<r.length;e++)if(ft(r[e],t))return;r.push(t)}else e.extraInvocations=[t]}(e,o));e.children||(e.children=at());const i=t[n];let s=e.children?.[i];s||(s=at(),e.children[i]=s),ut(s,t,n+1,r,o)}function lt(e,t,n,r,o,i=2){const s=e.children;if(!s)return void dt(e,t,n,o);const c=Object.keys(s),a=c.length;if(0!==a)if(e.isLeaf||r>=i&&a>1){dt(e,t,n,o);for(const e of c){const c=s[e];c.invocation&&lt(c,t,[...n,e],r+1,o,i)}}else if(r<i&&a>1&&!e.isLeaf)for(const e of c)lt(s[e],t,[...n,e],r+1,o,i);else{if(1===a){const e=c[0];return void lt(s[e],t,[...n,e],r+1,o,i)}dt(e,t,n,o)}else dt(e,t,n,o)}function ft(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 dt(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 yt(e){return t=>pt(t,e)}function ht(e,t){const n=e.slice(0,-1),r=e[e.length-1];return e=>{const o=pt(e,n),i=o&&"object"==typeof o?Reflect.get(o,r):void 0;return"function"==typeof i?Reflect.apply(i,o,t.args??st):void 0}}function pt(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 gt=Symbol(),bt=Object.freeze({equalityFn:Object.is,isCascadeParticipant:!0});function mt(e,t=Object.is){const{debounceOptions:n,debugMode:r,equalityFn:o,keepAlive:s,lockDependencies:c}="function"==typeof(u=t)?{debounceOptions:void 0,debugMode:!1,equalityFn:u,keepAlive:!1,lockDependencies:!1}:{debounceOptions:u.debounce,debugMode:(i&&u.debugMode)??!1,equalityFn:u.equalityFn??Object.is,keepAlive:u.keepAlive??!1,lockDependencies:u.lockDependencies??!1},a=new Set;var u;s&&a.add(St);const l=new Set;let f,d,y=gt,h=!1,g=!1,b=!0,m=!0,S=0,v=!1,w=null,O=gt;function j(e,t,n){if(!m||!a.size)return(t??p)(e.getState());if(!t)return f||(f=new WeakMap),d||(d=ct()),tt(e,f,d.trackPath);const r=n?{equalityFn:n,isCascadeParticipant:!0}:bt;return l.add(e.subscribe(t,E,r)),t(G(e)?e.getSnapshot():e.getState())}function F(e){for(const t of l)t(e);l.clear()}let k=!0;function I(){if(!b&&vt(y))return y;b=!1,m&&F(!0);const t=y,n=vt(t);g=!0;try{y=function(t){k=!0;const n=y,i=e(t),s=d?rt(i):i;return vt(n)&&o(n,s)?(r&&console.log("[🥷 Derive Complete 🥷]: No change detected"),k=!1,n):s}(j)}finally{g=!1}const i=r&&(!n||"verbose"===r&&m);if(i){n?"verbose"===r&&console.log("[🌀 Rebuilding Subscriptions 🌀]: Created…"):console.log("[🌀 Initial Derive Complete 🌀]: Created…");const e=l.size;console.log(`[🎯 ${e} ${Xe("Selector Subscription",e)} 🎯]`)}return d&&m&&(d.buildProxySubscriptions((e,t)=>{l.add(e.subscribe(t,E,bt))},i),f=void 0,d.reset(),c&&(d=void 0)),k&&n&&function(e,t){const n=function(){const e=a.has(St)?a.size-1:a.size;return S>0&&S<e}(),o=(!S||n)&&(n||null!==Se()||me());n&&ve(),r&&console.log(`[📻 Derive Complete 📻]: Notifying ${a.size} ${Xe("watcher",a.size)}`);for(const t of a){if("function"==typeof t||!t.isCascadeParticipant)continue;const n=t.selector(e);if(!t.equalityFn(t.currentSlice,n)){const e=t.currentSlice;t.currentSlice=n,t.listener(n,e)}}if(o)return vt(O)||(O=t),void(v||(v=!0,Oe(q)));C(e,t)}(y,t),c&&(m=!1),y}function C(e,t){for(const n of a)if("function"==typeof n)n(e,t);else if(!n.isCascadeParticipant){const t=n.selector(e);if(!n.equalityFn(n.currentSlice,t)){const e=n.currentSlice;n.currentSlice=t,n.listener(t,e)}}}function q(){a.size&&b&&!S&&I();const e=O;v=!1,O=gt,a.size&&vt(y)&&vt(e)&&C(y,e)}const T=n?Pe(A,"number"==typeof n?n:n.delay,"number"==typeof n?{leading:!1,maxWait:n,trailing:!0}:n):void 0,z=T??(()=>{h||(h=!0,queueMicrotask(A))});function A(){h=!1,a.size?b&&I():$()}function K(e){e||T&&b?queueMicrotask(()=>{a.size||$()}):$()}function P(){A(),w=null}function E(){if(!g&&!b){if(b=!0,!T){if(S){ve();const e=Se(),t=null===e?0:e+1;if(null!==w&&t<=w)return;return w=t,void function(e,t){if(!le)return;const n=t<0?0:0|t,r=he.get(e);if(void 0===r){he.set(e,n);let t=pe.get(n);return t||(t=new Set,pe.set(n,t)),t.add(e),void(n<be&&(be=n))}if(n>r){const t=pe.get(r);if(t&&(t.delete(e),0===t.size&&(pe.delete(r),r===be))){be=1/0;for(const e of pe.keys())e<be&&(be=e)}he.set(e,n);let o=pe.get(n);o||(o=new Set,pe.set(n,o)),o.add(e),n<be&&(be=n)}}(P,t)}if(me())return void(v||(v=!0,Oe(q)))}w=null,z()}}function D(e){a.add(St);try{return e()}finally{a.delete(St)}}function M(){return me()&&function(){if(le)if(fe)null===ge&&Fe();else{fe=!0;try{Fe()}catch(e){throw Ie(),e}finally{fe=!1,ge=null}}}(),b||!vt(y)?a.size>0?I():e(j):y}function $(e=!0){s&&e||(T?.cancel(),F(),a.clear(),S=0,d=void 0,f=void 0,m=!0,h=!1,g=!1,b=!0,y=gt,v=!1,O=gt,w=null)}return{destroy:()=>$(!1),flushUpdates:function(){a.size&&(T?T.flush():b&&I())},getSnapshot:function(){return vt(y)?(h&&A(),y):a.size?I():D(I)},getState:M,subscribe:function(...e){if(1===e.length){const t=e[0];return a.add(t),vt(y)||M(),()=>{a.delete(t),a.size||K(!1)}}const[t,n,r]=e,o=r?.equalityFn??Object.is,i=r?.isCascadeParticipant??!1,s=function(e){return e(a.size?M():D(M))}(t),c={currentSlice:s,equalityFn:o,isCascadeParticipant:i,listener:n,selector:t};return a.add(c),i&&(S+=1),r?.fireImmediately&&n(s,s),()=>{a.delete(c),i&&(S-=1),a.size||K(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.")}}}function St(){}function vt(e){return e!==gt}var wt=class{constructor(e){this.count=0,this.lastSubscriptionTime=null,this.fetchThrottleMs=null,this.onSubscribe=null,this.onLastUnsubscribe=null,e&&(this.fetchThrottleMs=N.seconds(5))}init({onSubscribe:e,onLastUnsubscribe:t}){this.onSubscribe=e,this.onLastUnsubscribe=t}hasSubscribers(){return this.count>0}subscribe(){const e=0===this.count,t=null!==this.fetchThrottleMs,n=t&&null!==this.lastSubscriptionTime&&!e&&Date.now()-this.lastSubscriptionTime<=this.fetchThrottleMs;return this.count+=1,this.onSubscribe?.(e,n),t&&(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)}}},Ot=Object.freeze({equalityFn:Object.is,isCascadeParticipant:!0});function jt(t,n,r){const o=u();let i=null,s=!1;if(t)for(const e in t){if(!d(t,e))continue;const r=Ft(o,t[e],e,n);r&&((i??(i=u()))[e]=r,void 0!==r.key&&(s=!0))}return{buildKey:(t=o)=>e(s?function(e,t){const n=u();for(const r in t){if(!d(t,r))continue;const o=e?.[r];if(!1===o?.key)continue;const i=t[r];n[r]=o?.key?o.key(i):i}return n}(i,t):t),complete:e=>e?function(e,t){for(const n of t)if(!(n in e))return!1;return!0}(e,r)?e:{...o,...e}:Ct(o),get:()=>Ct(o),subscribe:e=>function(e,t,n){if(!e)return y;let r;for(const o in e){const i=e[o]?.tracked;i&&(r??(r=[])).push(i.subscribe(e=>{const r=t[o];ae(r,e)||(t[o]=e,n(o,r,e))}))}return r?e=>{for(const t of r)t(e)}:y}(i,o,e)}}function Ft(e,n,r,o){return t(n)?It(e,n.value,r,o,n.key):It(e,n,r,o)}function kt(e,t){const n=[];let r,o;function i(e,t=p){return t(qt(e))}const s=e(function(e,t,i){return t?(n.push(n=>e.subscribe(t,n,function(e){return e?{equalityFn:e,isCascadeParticipant:!0}:Ot}(i))),t(qt(e))):(r??(r=ct()),o??(o=new WeakMap),tt(e,o,r.trackPath))},t),c=r?rt(s):s;return r&&(r.buildProxySubscriptions((e,t)=>{n.push(n=>e.subscribe(t,n,Ot))},!1),r.reset()),o=void 0,{initialValue:c,subscribe(r){const o=()=>r(e(i,t)),s=n.map(e=>e(o));return e=>{for(const t of s)t(e)}}}}function It(e,t,n,r,o){if(function(e){return"function"==typeof e}(t)){const i=kt(t,r);return e[n]=i.initialValue,void 0===o?{tracked:i}:{key:o,tracked:i}}return e[n]=t,void 0===o?null:{key:o}}function Ct(e){const t=u();for(const n in e)d(e,n)&&(t[n]=e[n]);return t}function qt(e){return G(e)?e.getSnapshot():e.getState()}var Tt={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},zt=Object.freeze({force:!0}),At=Object.freeze({once:!0}),Kt=new Set,Pt=!1;function Et(e){Kt.add(e),Pt||(Pt=!0,queueMicrotask(()=>{Pt=!1,ue(Dt)}))}function Dt(){for(const e of Kt)Kt.delete(e),e()}function Mt(e,t,n){$();const r="function"==typeof t?t:Rt,o="object"==typeof t?t:n,c=function(e){return"string"==typeof e?.storageKey}(o)?o:void 0,a=R??(R=function(){const e={abortInterruptedFetches:!0,cacheTime:N.days(7),debugMode:!1,disableAutoRefetching:!1,keepPreviousData:!1,maxRetries:5,minStaleTime:!1,paramChangeThrottle:!1,retryDelay:H,staleTime:N.minutes(2),suppressStaleTimeWarning:!1},t=D()?.queryStoreDefaults;return t?{...e,...t}:e}()),u=a.minStaleTime,{fetcher:l,onError:d,onFetched:y,setData:h,transform:p,abortInterruptedFetches:g=a.abortInterruptedFetches,cacheTime:m=a.cacheTime,debugMode:w=a.debugMode,disableAutoRefetching:O=a.disableAutoRefetching,disableCache:j=!1,enabled:F=!0,keepPreviousData:k=a.keepPreviousData,maxRetries:I=a.maxRetries,paramChangeThrottle:C=a.paramChangeThrottle,params:q,retryDelay:T=a.retryDelay,staleTime:z=a.staleTime,suppressStaleTimeWarning:A=a.suppressStaleTimeWarning}=e;let K="function"==typeof z?a.staleTime:z;i&&!1!==u&&!O&&!A&&K<u&&console.warn(`[createQueryStore${c?.storageKey?`: ${c.storageKey}`:""}] ❌ Stale times under ${u/1e3} seconds are not recommended. Provided staleTime: ${K/1e3} seconds`);const P=new Error("[createQueryStore: AbortError] Fetch interrupted"),E="function"==typeof m,M=i&&w,x=e.params?Object.keys(e.params):[];let W,U=!1,V=[],Q=null,_=null,Y=null,Z=null,G=null,X=null,ee=null;const te={enabled:"function"!=typeof F&&F,error:null,lastFetchedAt:null,queryCache:{},queryKey:"",status:L.Idle},ne=new wt(O);function re(){Y&&(Z=null,Y.abort(),Y=null)}function oe(){G&&(clearTimeout(G),G=null)}function ie(e,t,n){const o=n.setState;function i(e){const t="function"==typeof e;if(t||void 0!==e.enabled){let n;const r=o(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&&ee!==t&&(ee=t,t&&ne.hasSubscribers()?queueMicrotask(()=>a.fetch(void 0,void 0,!0)):(G||g)&&(g&&re(),oe()))}(r.enabled,i)),o});return n?.(),r}return o(e)}function s(e){if(O||K<=0||K===1/0)return;if(!ne.hasSubscribers())return;oe();const n=t();if(!n.enabled)return;const r=W.buildKey(e),o=(j?X===r&&n.lastFetchedAt:n.queryCache[r]?.lastFetchedAt)||null,i=o?K-(Date.now()-o):K;G=setTimeout(()=>{t().enabled&&a.fetch(e,zt,!0)},i)}n.setState=i,ne.init({onSubscribe:(n,r)=>{const o=t();if(o.enabled)if(n){const t=W.get(),n=W.buildKey(t);o.queryKey!==n&&e({queryKey:n}),o.isStale()?a.fetch(t,void 0,!0):s(t)}else O&&!r&&a.fetch(void 0,void 0,!0)},onLastUnsubscribe:e=>{oe(),g&&!e&&re()}});const a={...r(i,t,n),...te,async fetch(n,r,o=!1){const u=!!r?.skipStoreUpdates,f=t();if(!u){if(!f.enabled&&!r?.force)return null;if(o&&!ne.hasSubscribers())return null}const w=f.error,O=f.queryKey,F=f.status===L.Loading,C=W.complete(n),q=W.buildKey(C);if(F&&Z?.promise&&Z.key===q)return M&&console.log("[🔄 Using Active Fetch 🔄] for params:",JSON.stringify(C)),Z.promise;const z=r?.staleTime??K,A="boolean"==typeof r?.updateQueryKey?r.updateQueryKey:!!o&&k,D=(o||O===q||A)&&!u,$=null!==Z;if(g&&D&&re(),!r?.force){const t=f.lastFetchedAt,n=f.queryCache[q],r=n?.lastFetchedAt,o=n?.errorInfo,i=o&&o.retryCount>=I,c=(j?X===q&&t:r)||null;if(c&&!(Date.now()-c>=z)&&(!o||i||u))return D&&!G&&0!==K&&K!==1/0&&s(C),A&&e(e=>e.queryKey!==q?{queryKey:q}:e),M&&console.log("[💾 Returning Cached Data 💾] for params:",JSON.stringify(C)),n?.data??null}const R=D?{key:q}:null,N=r?.cacheTime??(E?m(C):m);async function H(){const f=c?.storageKey||q;try{M&&(!o&&n&&x.some(e=>!(e in n))?console.log("[🔄 Fetching with Partial Params 🔄]\n","- Provided params:",`${JSON.stringify(n)}\n`,"- Filled in params:",`${JSON.stringify(Object.fromEntries(Object.keys(C).filter(e=>!(e in n)).map(e=>[e,C[e]])))}`):console.log("[🔄 Fetching 🔄] for params:",JSON.stringify(C)));const t=await(g&&D?async function(e){const t=new AbortController;Y=t;try{return await new Promise((n,r)=>{t.signal.addEventListener("abort",()=>r(P),At),Promise.resolve(l(e,t)).then(n,r)})}finally{Y===t&&(Y=null)}}(C):l(C,null)),c=Date.now();let d;M&&console.log("[✅ Fetch Successful ✅] for params:",JSON.stringify(C));try{d=function(e,t,n){return n?n(e,t):e}(t,C,p)}catch(e){throw Lt(f,"transform",e)}if(u)return M&&console.log("[🥷 Successful Parallel Fetch 🥷] for params:",JSON.stringify(C)),"withCache"===r.skipStoreUpdates&&e(e=>{if(!h)return j?e:{queryCache:{...e.queryCache,[q]:{cacheTime:N,data:d,errorInfo:null,lastFetchedAt:c}}};let t=e;const n=t.queryCache[q];try{h({data:d,params:C,queryKey:q,set:e=>{t="function"==typeof e?{...t,...e(t)}:{...t,...e}}})}catch(e){throw Lt(f,"setData",e)}return!j&&Object.is(n,t.queryCache[q])&&(t={...t,queryCache:{...t.queryCache,[q]:{cacheTime:N,data:null,errorInfo:null,lastFetchedAt:c}}}),t}),d;if((h?i:e)(e=>{let t={...e,error:null,lastFetchedAt:c,queryKey:A?q:e.queryKey,status:L.Success};if(h||j){if(h){M&&console.log("[💾 Setting Data 💾] for params:",JSON.stringify(C));const e=t.queryCache[q];try{h({data:d,params:C,queryKey:q,set:e=>{t="function"==typeof e?{...t,...e(t)}:{...t,...e}}})}catch(e){throw Lt(f,"setData",e)}!j&&Object.is(e,t.queryCache[q])&&(t.queryCache={...t.queryCache,[q]:{cacheTime:N,data:null,errorInfo:null,lastFetchedAt:c}})}}else M&&console.log("[💾 Setting Cache 💾] for params:",JSON.stringify(C),"| Has previous data?:",!!t.queryCache[q]?.data),t.queryCache={...t.queryCache,[q]:{cacheTime:N,data:d,errorInfo:null,lastFetchedAt:c}};return j||m===1/0?t:xt(k,q,t)}),D&&(X=q,s(C)),y)try{y({data:d,fetch:a.fetch,params:C,set:i})}catch(e){b.error(Lt(f,"onFetched callback",e))}return d??null}catch(n){if(n===P)return M&&console.log("[❌ Fetch Aborted ❌] for params:",JSON.stringify(C)),null;const i=!o&&!0===r?.throwOnError,s=v(n);if(s instanceof S&&b.error(s),!D){if(i)throw s;return null}const c=j?void 0:t().queryCache[q],u=c?.errorInfo?.retryCount??0,l=u+1;try{d?.(s,u)}catch(e){b.error(Lt(f,"onError callback",e))}if(u<I){if(t().enabled&&ne.hasSubscribers()){const e="function"==typeof T?T(l,s):T;e!==1/0&&(oe(),G=setTimeout(()=>{t().enabled&&a.fetch(C,zt,!0)},e))}e(e=>({error:s,queryCache:{...e.queryCache,[q]:{cacheTime:c?.cacheTime??N,data:c?.data??null,lastFetchedAt:c?.lastFetchedAt??null,errorInfo:{error:s,lastFailedAt:Date.now(),retryCount:l}}},queryKey:A?q:e.queryKey,status:L.Error}))}else e(e=>({error:s,queryCache:{...e.queryCache,[q]:{cacheTime:c?.cacheTime??N,data:c?.data??null,lastFetchedAt:c?.lastFetchedAt??null,errorInfo:{error:s,lastFailedAt:Date.now(),retryCount:I}}},queryKey:A?q:e.queryKey,status:L.Error}));if(i)throw s;return null}finally{Z===R&&(Z=null)}}return R&&(oe(),A&&!$&&null===f.lastFetchedAt&&O!==q?e({error:null,queryKey:q,status:L.Loading}):!w&&F||e({error:null,status:L.Loading}),Z=R),R?(R.promise=H(),R.promise):H()},getCacheEntry(e){if(j)return null;const n=t(),r=e?"string"==typeof e?e:W.buildKey(W.complete(e)):n.queryKey;return n.queryCache[r]??null},getData(e){if(j)return null;const n=t().getCacheEntry(e);return n&&null!==n.data?k?n.data:n.lastFetchedAt&&Date.now()-n.lastFetchedAt>=n.cacheTime?null:n.data:null},getStatus:function(e){const n=t(),r=n.status;switch(e){case"isIdle":return r===L.Idle;case"isLoading":return r===L.Loading;case"isError":case"isInitialLoad":case"isSuccess":case void 0:{const t=n.queryKey,o=n.queryCache[t],i=j?r===L.Error:"number"==typeof o?.errorInfo?.lastFailedAt;if("isError"===e)return i;const s=null!==((j?X===t&&n.lastFetchedAt:o?.lastFetchedAt)||null),c=!s&&!i&&n.enabled;if("isInitialLoad"===e)return c;const a=s&&!i;return"isSuccess"===e?a:{isError:i,isIdle:r===L.Idle,isLoading:r===L.Loading,isInitialLoad:c,isSuccess:a}}}},isDataExpired(e){const n=t(),r=n.queryCache[n.queryKey],o=n.queryKey,i=n.lastFetchedAt,s=(j?X===o&&i:r?.lastFetchedAt)||null;if(!s)return!0;const c=e??r?.cacheTime;return void 0===c||Date.now()-s>=c},isStale(e){const n=t(),r=n.queryKey,o=(j?X===r&&n.lastFetchedAt:n.queryCache[r]?.lastFetchedAt)||null;if(!o)return!0;const i=e??K;return Date.now()-o>=i},reset(t=!1){for(const e of V)e();V=[],W=jt(void 0,se,x),Q=null,_=null,re(),oe(),Z=null,X=null,t&&e(te)}},u=n.subscribe;return n.subscribe=(...e)=>{const t=U?void 0:ne.subscribe(),n=1===e.length?u(e[0]):u(e[0],e[1],e[2]);return e=>{t?.(e),n()}},a}const se=c?.storageKey?Ge(ie,f(c,{partialize:$t(k,c.partialize)})):o&&!("storageKey"in o)?Ge(ie,o):Ge(ie),ce=se.getState(),ae=ce.error,ue=ce.enabled,le=ce.queryKey,fe=ce.fetch;le&&!ae&&(X=le),U=!0,W=jt(q,se,x),"function"==typeof F&&(Q=kt(F,se)),"function"==typeof e.staleTime&&(_=kt(e.staleTime,se),K=_.initialValue);const de=function(e,t=queueMicrotask){let n,r=!1;function o(){r=!1,e(...n)}return function(...e){n=e,r||(r=!0,t(o))}}(e=>{fe(e,void 0,!0)},Et);function ye(){if(k)de(void 0);else{const e=W.get();se.setState({queryKey:W.buildKey(e)}),de(e)}}const he=s||!C?void 0:Pe(ye,"number"==typeof C?C:C.delay,"number"==typeof C?{leading:!1,maxWait:C,trailing:!0}:C);if(V.push(W.subscribe((e,t,n)=>{M&&console.log("[🌀 Param Change 🌀] -",e,"- [Old]:",`${t?.toString()},`,"[New]:",n?.toString()),function(){if(oe(),he){const e=se.getState();return void(k&&Z?.key===e.queryKey&&null===e.lastFetchedAt?ye():he())}ye()}()})),_){let e=_.initialValue;M&&console.log("[🌀 StaleTime Subscription 🌀] Initial value:",e),V.push(_.subscribe(t=>{t!==e&&(M&&console.log("[🌀 StaleTime Change 🌀] - [Old]:",`${e},`,"[New]:",t),e=t,K=t,oe(),fe(void 0,void 0,!0))}))}let pe;if(Q){let e=Q.initialValue;ue!==e&&((pe??(pe={})).enabled=e),M&&console.log("[🌀 Enabled Subscription 🌀] Initial value:",e),V.push(Q.subscribe(t=>{t!==e&&(M&&console.log("[🌀 Enabled Change 🌀] - [Old]:",`${e},`,"[New]:",t),e=t,se.setState({enabled:t}))}))}else ue!==te.enabled&&((pe??(pe={})).enabled=te.enabled);const ge=W.buildKey();return ge!==le&&((pe??(pe={})).queryKey=ge),pe&&se.setState(pe),U=!1,J(se,B.QueryStore)}function $t(e,t){return n=>{const r={...n},o=u();for(const e in r)d(r,e)&&e in Tt&&(Tt[e]&&(o[e]=r[e]),delete r[e]);return{...t?t(r):Me(r),...xt(e,null,o)}}}function xt(e,t,n){if(!n.queryCache)return n;const r=Date.now(),o=t??(e&&n.queryKey||null),i=u();let s=!1;for(const e in n.queryCache){if(!d(n.queryCache,e))continue;const c=n.queryCache[e];c&&(r-(c.lastFetchedAt??c.errorInfo.lastFailedAt)<c.cacheTime||e===o)?!t&&c.errorInfo&&c.errorInfo.retryCount>0?(i[e]={...c,errorInfo:{...c.errorInfo,retryCount:0}},s=!0):i[e]=c:s=!0}return s?{...n,queryCache:i}:n}function Rt(){return Object.create(null)}function Lt(e,t,n){return new S(`[createQueryStore: ${e}]: ${t} failed`,n)}function Nt(e,t,n){const r="function"==typeof t,o=r?t:void 0,i=r?n:t,s=new Set;let c;function a(e,t,n,r){u(e,t,n,r)&&ve()}function u(e,t,n,r){e.unsubscribe();const o=e.args;if(1===o.length){const i=o[0],s=t.subscribe(i);e.unsubscribe=s;const c=!Object.is(r,n);return c&&i(r,n),c}const i=o[0],s=o[1];let c=o[2];c?.fireImmediately&&(c={...c,fireImmediately:!1});const a=i(n),u=i(r),l=t.subscribe(i,s,c);return e.unsubscribe=l,!(c?.equalityFn??Object.is)(a,u)&&(s(u,a),!0)}function l(e,t){!function(e,t){const n=e.getState(),r=t.getState();if(c)for(const e of c)a(e,t,n,r);s.size&&we();for(const e of s)u(e,t,n,r)}(t,e),Q(t)}const f=mt(e,{debugMode:i?.debugMode??!1,lockDependencies:i?.lockDependencies??!0});let d;function h(){return d??(d=f.subscribe(l)),f.getState()}const p=Object.assign({[B.VirtualStore]:!0,destroy:()=>{d?.(),d=void 0,f.destroy()},getInitialState:()=>h().getInitialState(),getState:()=>h().getState(),persist:(g=h,{clearStorage:()=>g().persist?.clearStorage(),getOptions:()=>g().persist?.getOptions()??{},hasHydrated:()=>g().persist?.hasHydrated()??!0,hydrationPromise:()=>g().persist?.hydrationPromise?.()??Promise.resolve(),onFinishHydration:e=>g().persist?.onFinishHydration(e)??y,onHydrate:e=>g().persist?.onHydrate(e)??y,rehydrate:()=>g().persist?.rehydrate(),setOptions:e=>g().persist?.setOptions(e)}),setState:Ht(h),subscribe:function(...e){const t=h(),n={args:e,unsubscribe:1===e.length?t.subscribe(e[0]):t.subscribe(e[0],e[1],e[2])},r=e[2]?.isCascadeParticipant??!1;return r?(c??(c=new Set)).add(n):s.add(n),()=>{n.unsubscribe(),r?c?.delete(n)&&0===c.size&&(c=void 0):s.delete(n)}}},o?.(h));var g;return p}function Ht(e){return function(...t){return!0===t[1]?e().setState(t[0],!0):e().setState(t[0])}}export{K as DEFAULT_STORAGE_KEY_PREFIX,L as QueryStatuses,B as StoreTags,S as StoresError,U as applyStateUpdate,J as assignStoreTag,Ge as baseStore,E as configureStores,re as createStoreActions,se as deepEqual,H as defaultRetryDelay,mt as derivedStore,Q as destroyStore,_ as destroyStores,v as ensureError,D as getOptions,M as getStorageConfig,Y as getStoreName,Z as hasDestroy,G as hasGetSnapshot,ee as isDerivedStore,te as isPersistedStore,X as isQueryStore,ne as isVirtualStore,b as logger,$ as markStoreCreated,Mt as queryStore,m as setLogger,ce as shallowEqual,N as time,Nt 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.11.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
@@ -1,13 +0,0 @@
1
- import { BaseStore } from '../types';
2
- type NestedAttachValue<T> = T extends object ? {
3
- readonly [K in keyof T]: AttachValue<T[K]>;
4
- } : Record<string, never>;
5
- export type AttachValue<T> = {
6
- readonly value: T;
7
- } & NestedAttachValue<T>;
8
- export type SignalFunction = {
9
- <T>(store: BaseStore<T>): AttachValue<T>;
10
- <T, S>(store: BaseStore<T>, selector: (state: T) => S, equalityFn?: (a: S, b: S) => boolean): AttachValue<S>;
11
- };
12
- export {};
13
- //# sourceMappingURL=signalTypes.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};