const createStoreImpl = (createState, configs) => { let timeout; let state; const listeners = /* @__PURE__ */ new Set(); const setState = (partial, replace) => { const nextState = typeof partial === "function" ? partial(state) : partial; if (!Object.is(nextState, state)) { const previousState = state; state = (replace != null ? replace : typeof nextState !== "object" || nextState === null) ? nextState : Object.assign({}, state, nextState); listeners.forEach((listener) => listener(state, previousState)); } }; const getState = () => state; const getInitialState = () => initialState; const resetBasedOnCachTime = () => { if (!(configs == null ? void 0 : configs.cacheTime)) return; if (timeout) clearTimeout(timeout); timeout = setTimeout(() => { state = createState(setState, getState, api); }, configs == null ? void 0 : configs.cacheTime); }; const subscribe = (listener) => { listeners.add(listener); if (timeout) clearTimeout(timeout); return () => { const responseDelete = listeners.delete(listener); if (!listeners.size) { resetBasedOnCachTime(); } return responseDelete; }; }; const destroy = () => { if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production") { console.warn( "[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected." ); } listeners.clear(); }; const api = { setState, getState, getInitialState, subscribe, destroy }; const initialState = state = createState(setState, getState, api); return api; }; const createStore = createStoreImpl; var vanilla = (createState) => { if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production") { console.warn( "[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'." ); } return createStore(createState); }; export { createStore, vanilla as default };