neant
Version:
The simplest React state management library - direct mutations, direct destructuring, automatic fine-grained reactivity
98 lines (95 loc) • 2.91 kB
JavaScript
"use client";
;
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