UNPKG

neant

Version:

The simplest React state management library - direct mutations, direct destructuring, automatic fine-grained reactivity

98 lines (95 loc) 2.91 kB
"use client"; "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { createEnhancedStore: () => createEnhancedStore, createStore: () => createStore2 }); module.exports = __toCommonJS(index_exports); // src/store.ts var import_immer = require("immer"); var import_react = require("react"); var create = (createState) => { const api = createStore(createState); const useBoundStore = (selector) => { const slice = (0, import_react.useSyncExternalStore)( api.subscribe, () => selector(api.getState()), () => selector(api.getState()) ); (0, import_react.useDebugValue)(slice); return slice; }; Object.assign(useBoundStore, api); return useBoundStore; }; var createStore = (createState) => { let state; const listeners = /* @__PURE__ */ new Set(); const setState = (updater) => { const nextState = (0, import_immer.produce)(state, updater); const previousState = state; state = nextState; listeners.forEach((listener) => listener(state, previousState)); }; const getState = () => state; const subscribe = (listener) => { listeners.add(listener); return () => listeners.delete(listener); }; const api = { setState, getState, subscribe }; state = createState(setState, getState); return api; }; // src/index.ts function createEnhancedStore(createState) { const store = create(createState); const state = store.getState(); const useModel = Object.keys(state).reduce((total, key) => { Object.defineProperty(total, key, { get() { return store((s) => s[key]); }, enumerable: true }); return total; }, {}); store.use = useModel; return store; } function createStore2(createState) { const store = createEnhancedStore(createState); function useAppStore() { return store.use; } return { useAppStore, subscribe: store.subscribe, getState: store.getState, setState: store.setState }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { createEnhancedStore, createStore }); //# sourceMappingURL=index.js.map