zustand-lite 1.0.0 → 1.0.2
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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var $=Object.create;var p=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var H=(e,
|
|
1
|
+
"use strict";var $=Object.create;var p=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},F=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of T(t))!k.call(e,n)&&n!==r&&p(e,n,{get:()=>t[n],enumerable:!(o=J(t,n))||o.enumerable});return e};var Q=(e,t,r)=>(r=e!=null?$(V(e)):{},F(t||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),X=e=>F(p({},"__esModule",{value:!0}),e);var ee={};H(ee,{createStore:()=>z,definePlugin:()=>B,setGlobalConfig:()=>C,withReset:()=>_});module.exports=X(ee);function B(e){return e}var y=require("zustand/middleware"),q=require("zustand/vanilla");var h=require("zustand/shallow");var O=require("zustand/shallow");var L=Q(require("error-stack-parser"),1);function u(){let e=L.default.parse(new Error),t=e.findIndex(r=>r.functionName?.includes("_zustandLiteInferName_"));return t-1>=0?e[t-1].functionName:null}function c(e,t){return(r,o,n)=>{let i=e.getState(),s=typeof r=="function"?r(i):r;(0,O.shallow)(i,s)||e.setState(s,o,t?{type:u()??n??"setState",payload:s}:void 0)}}function d(e,t,r){let o=c(e,r);return t.forEach(n=>{o[n]=i=>{(0,h.shallow)(e.getState()[n],i)||e.setState(s=>({...s,[n]:i}),!1,r?{type:u()??n,payload:{[n]:i}}:void 0)}}),o}var b=e=>e,g=(e,t)=>t.reduce((r,o)=>(o in e&&(r[o]=e[o]),r),{});var j=require("zustand/shallow"),R=require("zustand/traditional");function A(e,t,r,o){typeof e=="object"&&e!==null&&Object.keys(e).forEach(n=>{let i=[...r,n];Object.defineProperty(t,n,{value:(s=j.shallow)=>(0,R.useStoreWithEqualityFn)(o,a=>Y(a,i),s),writable:!0,configurable:!0,enumerable:!0}),A(e[n],t[n],i,o)})}function Y(e,t){let r=e;for(let o of t)if(r=r[o],!r)return r;return r}var w=require("zustand/shallow"),N=require("zustand/traditional");function m(e){return(t=b,r=w.shallow)=>(0,N.useStoreWithEqualityFn)(e,Array.isArray(t)?o=>g(o,t):t??b,r)}function l(e,t){let r=m(e);return A(g(e.getState(),t),r,[],e),r}function U(e,t,r,o){let n=typeof e=="function"?e(t):e;return t.set({...n,...r.getState()}),t.use=Object.assign(t.use,l(r,Object.keys(n))),t.set=Object.assign(t.set,d(r,Object.keys(n),o)),t}var E=require("zustand/shallow"),G=require("zustand/traditional");function x(e){return()=>e.getState()}function Z(e){return typeof e=="object"&&e!==null&&"eq"in e&&typeof e.eq=="function"}function P(e,t,r){let o=e({get:t.get}),n={};return Object.keys(o).forEach(i=>{n[i]=(...s)=>{let a=s[s.length-1];if(Z(a)){let S=s.slice(0,-1);return(0,G.useStoreWithEqualityFn)(r,()=>o[i](...S),a.eq)}return(0,G.useStoreWithEqualityFn)(r,()=>o[i](...s),E.shallow)}}),t.use=Object.assign(m(r),t.use,n),t.get=Object.assign(x(r),t.get,o),t}function W(e,t,r,o){let n=c(r,o),i=Object.entries(e(t)).reduce((s,[a,S])=>(s[a]=function(...K){return S(...K)},s),{});return t.set=Object.assign(n,t.set,i),t}function M(e,t){return{getInitialState:e.getInitialState,getState:e.getState,persist:v(e,t),setState:e.setState,subscribe:e.subscribe}}function v(e,t){if("persist"in e){let r=e.persist;return r.read=()=>{try{return JSON.parse(localStorage?.getItem(t)??"")?.state}catch{return}},r}}function D(e){return x(e)}function I(e,t,r,o){return{api:r.api,set:r.set,use:e?(()=>{let n=Object.keys(r.use).reduce((i,s)=>t[s]&&e.includes(s)?i:{...i,[s]:r.use[s]},{});return Object.assign(m(o),n)})():r.use,get:e?Object.assign(()=>Object.entries(r.get()).reduce((i,[s,a])=>t[s]&&e.includes(s)?i:{...i,[s]:a},{}),r.get):r.get}}var f={appName:"zustand-lite",logging:!1};function C(e){f={...f,...e}}function z(e,t){let{name:r="zustand-lite",middlewares:o={}}=t??{},n=()=>e,i=`${f.appName.replace(/\s/,"-")}.${r}}`,s=f.logging||!!o.devtools;s&&(n=(0,y.devtools)(n,{name:f.appName,store:r,...typeof o.devtools=="object"?o.devtools:{}})),o.persist&&(n=(0,y.persist)(n,{name:i,...typeof o.persist=="object"?o.persist:{}}));let a=(0,q.createStore)(n);return{api:M(a,i),get:D(a),use:l(a,Object.keys(e)),set:d(a,Object.keys(e),s),composePlugin(S){return S(this)},extendGetters(S){return P(S,this,a)},extendSetters(S){return W(S,this,a,s)},extendByState(S){return U(S,this,a,s)},restrictState(S=[]){return I(S,e,this,a)}}}var _=e=>e.extendSetters(({api:t,set:r})=>({reset:()=>{r(t.getInitialState?.()??{},!0)}}));0&&(module.exports={createStore,definePlugin,setGlobalConfig,withReset});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/definePlugin.ts","../src/lib/createStore.ts","../src/lib/generateSetFn.ts","../src/lib/generateSetFnBase.ts","../src/lib/generateSetterName.ts","../src/utils/utils.ts","../src/lib/generateUseFnStep.ts","../src/lib/generateUseFnBase.ts","../src/lib/generateUseFn.ts","../src/lib/extendByState.ts","../src/lib/extendGetters.ts","../src/lib/generateGetFnBase.ts","../src/lib/extendSetters.ts","../src/lib/generateApiFn.ts","../src/lib/generateGetFn.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["export { definePlugin } from './lib/definePlugin'\nexport { createStore, setGlobalConfig } from './lib/createStore'\nexport { withReset } from './plugins/reset'\nexport type { UseGetterOptions } from './types'\n","import { State, StoreApi } from '../types'\n\n/**\n * Identity helper that provides a typed `store` param and preserves the plugin's return type.\n */\nexport function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F) {\n\treturn fn as unknown as <S extends State, G, A, MW>(\n\t\tstore: StoreApi<S, G, A, MW>\n\t) => ReturnType<F>\n}\n","/**\n * Entire no-boilerplate functionality inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors.\n * It has few utilities described here: https://www.npmjs.com/package/zustand-lite\n * for:\n * 1) Generating getters for flat state (1-level deep selectors).\n * 2) Generating setters for flat state (1-level deep setters).\n * 3) Automatic devtools messaging.\n * 4) Annotating functions with proper TS types to avoid some bloating and TS frenzy.\n * 5) Extending getters and setters\n * 6) Extending state and restricting state\n * 7) Reuse plugins\n *\n * Idea is to support small store without complicated data reducing (it can be done as well,\n * but may indicate something is not right with the use case itself).\n **/\nimport { devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tGetRecord,\n\tGlobalConfig,\n\tMWConfiguration,\n\tSetRecord,\n\tState,\n\tStoreApi,\n\tStorePersist,\n} from '../types'\n\nimport { extendByState } from './extendByState'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { generateApiFn } from './generateApiFn'\nimport { generateGetFn } from './generateGetFn'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\nimport { restrictState } from './restrictState'\n\nlet config: GlobalConfig = { appName: 'zustand-lite', logging: false }\n\nexport function setGlobalConfig(newConfig: Partial<GlobalConfig>) {\n\tconfig = { ...config, ...newConfig }\n}\n\nexport function createStore<S extends State, ExtraMW extends MWConfiguration = {}>(\n\tinitialState: S,\n\toptions?: { name?: string; middlewares?: ExtraMW }\n): StoreApi<\n\tS,\n\tGetRecord<S>,\n\tSetRecord<S>,\n\tExtraMW extends { persist: any } ? StorePersist<S> : {}\n> {\n\tconst { name = 'zustand-lite', middlewares = {} as ExtraMW } = options ?? {}\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => initialState\n\n\tconst persistId = `${config.appName.replace(/\\s/, '-')}.${name}}`\n\tconst shouldLog = config.logging || !!middlewares.devtools\n\n\tif (shouldLog) {\n\t\tinitializer = devtools(initializer, {\n\t\t\tname: config.appName,\n\t\t\tstore: name,\n\t\t\t...(typeof middlewares.devtools === 'object' ? middlewares.devtools : {}),\n\t\t})\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(initializer, {\n\t\t\tname: persistId,\n\t\t\t...(typeof middlewares.persist === 'object' ? middlewares.persist : {}),\n\t\t})\n\t}\n\n\t// Create a vanilla zustand store to wrap.\n\tconst storeLib: any = createVanillaStore(initializer)\n\n\t// Create zustand-lite wrapper.\n\treturn {\n\t\tapi: generateApiFn(storeLib, persistId),\n\t\tget: generateGetFn(storeLib),\n\t\tuse: generateUseFn(storeLib, Object.keys(initialState)),\n\t\tset: generateSetFn(storeLib, Object.keys(initialState), shouldLog),\n\t\tcomposePlugin(plugin) {\n\t\t\treturn plugin(this)\n\t\t},\n\t\textendGetters(builder) {\n\t\t\treturn extendGetters(builder, this, storeLib)\n\t\t},\n\t\textendSetters(builder) {\n\t\t\treturn extendSetters(builder, this, storeLib, shouldLog)\n\t\t},\n\t\textendByState(builder) {\n\t\t\treturn extendByState(builder, this, storeLib, shouldLog)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, initialState, this, storeLib)\n\t\t},\n\t} as any\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setters like store.set.foo(value)\n *\n * @param lib Zustand api interface\n * @param key Keys to generate setters for\n * @param log If devtools were activated for this store\n */\nexport function generateSetFn<S extends State>(lib: StoreLib<S>, key: string[], log: boolean) {\n\tconst setters: any = generateSetFnBase(lib, log)\n\n\tkey.forEach((key) => {\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (shallow(lib.getState()[key], value)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlib.setState(\n\t\t\t\t(state) => ({ ...state, [key]: value }),\n\t\t\t\tfalse,\n\t\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\t\tlog ? { type: generateSetterName() ?? key, payload: { [key]: value } } : undefined\n\t\t\t)\n\t\t}\n\t})\n\n\treturn setters as SetRecord<S>\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setState function for store like store.set({ value })\n *\n * @param lib Zustand api interface\n * @param log If devtools were activated for this store\n */\nexport function generateSetFnBase<S extends State>(lib: StoreLib<S>, log: boolean) {\n\treturn (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tconst current = lib.getState()\n\t\tconst payload = typeof updater === 'function' ? updater(current) : updater\n\n\t\tif (shallow(current, payload)) {\n\t\t\treturn\n\t\t}\n\n\t\tlib.setState(\n\t\t\tpayload,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\tlog ? { type: generateSetterName() ?? name ?? 'setState', payload } : undefined\n\t\t)\n\t}\n}\n","import ErrorStackParser from 'error-stack-parser'\n\n/**\n * Hacky, but working (and possibly only one there is) method of fetching proper caller\n * name of the extended function.\n */\nexport function generateSetterName() {\n\t// Proper setter name should hide at 2nd position in the normalized stack.\n\tconst stack = ErrorStackParser.parse(new Error())\n\tconst index = stack.findIndex((entry) => entry.functionName?.includes('_zustandLiteInferName_'))\n\treturn index - 1 >= 0 ? stack[index - 1].functionName : null\n}\n","export const identity = (arg: any) => arg\nexport const pick = (obj: Record<string, any>, keys: string[]) =>\n\tkeys.reduce<Record<string, any>>((acc, k) => (k in obj ? ((acc[k] = obj[k]), acc) : acc), {})\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\n/**\n * Generates automatic getters like store.use.foo() (recursive steps for each level).\n * Getters are created as side effects.\n *\n * @param state State at nth level\n * @param getters Getters at nth level\n * @param path Property access path at nth level like ['foo', 'bar']\n * @param lib Zustand api interface\n */\nexport function generateUseFnStep(state: any, getters: any, path: string[], lib: any) {\n\tif (typeof state === 'object' && state !== null) {\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst newPath = [...path, key]\n\t\t\tObject.defineProperty(getters, key, {\n\t\t\t\tvalue: (equalityFn = shallow) => {\n\t\t\t\t\treturn useStoreWithEqualityFn(\n\t\t\t\t\t\tlib,\n\t\t\t\t\t\t(state) => getFromPath(state, newPath),\n\t\t\t\t\t\tequalityFn\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t})\n\n\t\t\tgenerateUseFnStep(state[key], getters[key], newPath, lib)\n\t\t})\n\t}\n}\n\nfunction getFromPath(state: any, path: string[]) {\n\tlet data = state\n\n\tfor (const key of path) {\n\t\tdata = data[key]\n\t\tif (!data) {\n\t\t\treturn data\n\t\t}\n\t}\n\n\treturn data\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\nimport { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { identity, pick } from '../utils/utils'\n\n/**\n * Generates automatic getters like store.use.foo()\n *\n * @param lib Zustand api interface\n */\nexport function generateUseFnBase<S extends State, U>(lib: StoreLib<S>) {\n\treturn (selector = identity, equality = shallow) => {\n\t\treturn useStoreWithEqualityFn(\n\t\t\tlib,\n\t\t\tArray.isArray(selector) ? (s) => pick(s, selector) : (selector ?? identity),\n\t\t\tequality\n\t\t)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { pick } from '../utils/utils'\nimport { generateUseFnStep } from './generateUseFnStep'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Generates automatic store hook subscribe function store.use()\n *\n * @param lib Zustand api interface\n * @param key State keys to use\n */\nexport function generateUseFn<S extends State>(lib: StoreLib<S>, key: string[]) {\n\tconst getters = generateUseFnBase(lib)\n\tgenerateUseFnStep(pick(lib.getState(), key), getters, [], lib)\n\treturn getters\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { ByStateBuilder, State, StoreApi } from '../types'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Extends the store by adding new state fields, either by:\n * - passing an object patch: `{ b: 'x' }`\n * - or using a builder: `({ get }) => ({ c: get().b + 'y' })`\n *\n * @param builder Object patch or function producing new state fields.\n * @param api The extended store API before widening.\n * @param lib The underlying Zustand vanilla store.\n * @param log Enables logging for generated setters.\n *\n * @returns The same API instance, but with widened state (via overloads).\n */\nexport function extendByState<\n\tNewData extends State,\n\tOldData extends State,\n\tGetters,\n\tSetters,\n\tBuilder extends ByStateBuilder<NewData, OldData, Getters>,\n>(\n\tbuilder: Builder | NewData,\n\tapi: StoreApi<OldData, Getters, Setters>,\n\tlib: StoreLib<OldData>,\n\tlog: boolean\n) {\n\t// Calculate new state to be added to the store.\n\tconst newState: NewData = typeof builder === 'function' ? builder(api) : builder\n\n\t// Merge the new keys into the zustand state in such a way that the old keys are preserved.\n\tlib.setState({ ...newState, ...lib.getState() })\n\n\t// Generate basic getters and setters from the newly added record.\n\tapi.use = { ...api.use, ...generateUseFn(lib, Object.keys(newState)) }\n\tapi.set = { ...api.set, ...generateSetFn(lib, Object.keys(newState), log) }\n\n\t// Return the same object, but with widened state type (handled by overloads).\n\treturn api\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GettersBuilder, State, StoreApi, UseGetterOptions } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Type guard to check if a value is an equality options object.\n * Detects plain objects with an `eq` property that is a function.\n */\nfunction isEqualityOptions<R>(value: unknown): value is UseGetterOptions<R> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'eq' in value &&\n\t\ttypeof (value as any).eq === 'function'\n\t)\n}\n\n/**\n * Adds derived getters to the store.\n *\n * @param builder Function returning new getter methods.\n * @param api Current store API to extend.\n * @param lib Underlying Zustand store.\n */\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst methods: any = builder({ get: api.get })\n\tconst getters: any = {}\n\n\tObject.keys(methods).forEach((key) => {\n\t\tgetters[key] = (...args: any[]) => {\n\t\t\t// Check if the last argument is an equality options object\n\t\t\tconst lastArg = args[args.length - 1]\n\t\t\tif (isEqualityOptions(lastArg)) {\n\t\t\t\tconst actualArgs = args.slice(0, -1)\n\t\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...actualArgs), lastArg.eq)\n\t\t\t}\n\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\n\t\t}\n\t})\n\n\tapi.use = Object.assign(generateUseFnBase(lib), api.use, getters)\n\tapi.get = Object.assign(generateGetFnBase(lib), api.get, methods)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Generates getState function for store.get()\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFnBase<S extends State>(lib: StoreLib<S>) {\n\treturn () => lib.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { SettersBuilder, State, StoreApi } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\n\n/**\n * Adds custom setter methods to the store.\n *\n * @param builder Function returning new setter methods.\n * @param api Store API to extend.\n * @param lib Underlying Zustand store.\n * @param log Enables optional debug logging.\n */\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>, log: boolean) {\n\tconst setters = generateSetFnBase(lib, log)\n\tconst baseSet = Object.entries(builder(api)).reduce(\n\t\t(acc, [name, func]) => {\n\t\t\tacc[name] = function _zustandLiteInferName_(...args: any[]) {\n\t\t\t\treturn func(...args)\n\t\t\t}\n\n\t\t\treturn acc\n\t\t},\n\t\t{} as Record<string, any>\n\t)\n\n\tapi.set = Object.assign(setters, api.set, baseSet)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Required to wrap original Zustand interface without getState and setState, which are handled\n * by get and set (we should allow only one way of doing certain things).\n *\n * @param lib Zustand api interface\n * @param key Zustand persist local storage key\n */\nexport function generateApiFn<S extends State>(lib: StoreLib<S>, key: string) {\n\treturn {\n\t\tgetInitialState: lib.getInitialState,\n\t\tgetState: lib.getState,\n\t\tpersist: augmentPersist(lib, key),\n\t\tsetState: lib.setState,\n\t\tsubscribe: lib.subscribe,\n\t}\n}\n\nfunction augmentPersist<S extends State>(lib: StoreLib<S>, key: string) {\n\tif ('persist' in lib) {\n\t\tconst augmented: any = lib.persist\n\t\taugmented.read = () => {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(localStorage?.getItem(key) ?? '')?.state\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t}\n\n\t\treturn augmented\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\n\n/**\n * Generates getters for store.get. In the past getters were generated as functions, but I\n * came to the conclusion that it's better and simpler to return the whole state.\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFn<S extends State>(lib: StoreLib<S>) {\n\treturn generateGetFnBase(lib)\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GetRecord, SetRecord, State, StoreApi, UseRecord } from '../types'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Function that restrict access to the store and store api.\n *\n * @param privateState Property names to be made private like ['foo', 'bar']\n * @param mergedState Final state of the store\n * @param api Returned store API\n * @param lib Zustand api interface\n */\nexport function restrictState<\n\tS extends State,\n\tKey extends keyof S,\n\tGetters extends GetRecord<any>,\n\tSetters extends SetRecord<any>,\n>(privateState: Key[], mergedState: S, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\treturn {\n\t\tapi: api.api,\n\t\tset: api.set,\n\t\tuse: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getters = Object.keys(api.use).reduce(\n\t\t\t\t\t\t(acc, key) =>\n\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t: { ...acc, [key]: (api.use as UseRecord<any>)[key] },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(generateUseFnBase(lib), getters)\n\t\t\t\t})()\n\t\t\t: api.use,\n\t\tget: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getFn = () =>\n\t\t\t\t\t\tObject.entries(api.get()).reduce(\n\t\t\t\t\t\t\t(acc, [key, val]) =>\n\t\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t\t: { ...acc, [key]: val },\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(getFn, api.get)\n\t\t\t\t})()\n\t\t\t: api.get,\n\t}\n}\n","import { definePlugin } from '../lib/definePlugin'\n\n/**\n * Basic plugin example, that extends store with custom setter.\n */\nexport const withReset = definePlugin((store) =>\n\tstore.extendSetters(({ api, set }) => ({\n\t\treset: () => {\n\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t},\n\t}))\n)\n"],"mappings":"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","names":["index_exports","__export","createStore","definePlugin","setGlobalConfig","withReset","__toCommonJS","definePlugin","fn","import_middleware","import_vanilla","import_shallow","import_shallow","import_error_stack_parser","generateSetterName","stack","ErrorStackParser","index","entry","generateSetFnBase","lib","log","updater","replace","name","current","payload","generateSetterName","generateSetFn","lib","key","log","setters","generateSetFnBase","value","state","generateSetterName","identity","arg","pick","obj","keys","acc","k","import_shallow","import_traditional","generateUseFnStep","state","getters","path","lib","key","newPath","equalityFn","getFromPath","data","import_shallow","import_traditional","generateUseFnBase","lib","selector","identity","equality","s","pick","generateUseFn","lib","key","getters","generateUseFnBase","generateUseFnStep","pick","extendByState","builder","api","lib","log","newState","generateUseFn","generateSetFn","import_shallow","import_traditional","generateGetFnBase","lib","isEqualityOptions","value","extendGetters","builder","api","lib","methods","getters","key","args","lastArg","actualArgs","generateUseFnBase","generateGetFnBase","extendSetters","builder","api","lib","log","setters","generateSetFnBase","baseSet","acc","name","func","args","generateApiFn","lib","key","augmentPersist","augmented","generateGetFn","lib","generateGetFnBase","restrictState","privateState","mergedState","api","lib","getters","acc","key","generateUseFnBase","val","config","setGlobalConfig","newConfig","createStore","initialState","options","name","middlewares","initializer","persistId","shouldLog","storeLib","createVanillaStore","generateApiFn","generateGetFn","generateUseFn","generateSetFn","plugin","builder","extendGetters","extendSetters","extendByState","publicState","restrictState","withReset","store","api","set"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/definePlugin.ts","../src/lib/createStore.ts","../src/lib/generateSetFn.ts","../src/lib/generateSetFnBase.ts","../src/lib/generateSetterName.ts","../src/utils/utils.ts","../src/lib/generateUseFnStep.ts","../src/lib/generateUseFnBase.ts","../src/lib/generateUseFn.ts","../src/lib/extendByState.ts","../src/lib/extendGetters.ts","../src/lib/generateGetFnBase.ts","../src/lib/extendSetters.ts","../src/lib/generateApiFn.ts","../src/lib/generateGetFn.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["export { definePlugin } from './lib/definePlugin'\nexport { createStore, setGlobalConfig } from './lib/createStore'\nexport { withReset } from './plugins/reset'\nexport type { UseGetterOptions } from './types'\n","import { State, StoreApi } from '../types'\n\n/**\n * Identity helper that provides a typed `store` param and preserves the plugin's return type.\n * The middleware type (MW) from the input store is preserved in the output.\n */\nexport function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F) {\n\treturn fn as unknown as <S extends State, G, A, MW>(\n\t\tstore: StoreApi<S, G, A, MW>\n\t) => ReturnType<F> extends StoreApi<infer S2, infer G2, infer A2, any>\n\t\t? StoreApi<S2, G2, A2, MW>\n\t\t: never\n}\n","/**\n * Entire no-boilerplate functionality inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors.\n * It has few utilities described here: https://www.npmjs.com/package/zustand-lite\n * for:\n * 1) Generating getters for flat state (1-level deep selectors).\n * 2) Generating setters for flat state (1-level deep setters).\n * 3) Automatic devtools messaging.\n * 4) Annotating functions with proper TS types to avoid some bloating and TS frenzy.\n * 5) Extending getters and setters\n * 6) Extending state and restricting state\n * 7) Reuse plugins\n *\n * Idea is to support small store without complicated data reducing (it can be done as well,\n * but may indicate something is not right with the use case itself).\n **/\nimport { devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tGetRecord,\n\tGlobalConfig,\n\tMWConfiguration,\n\tSetRecord,\n\tState,\n\tStoreApi,\n\tStorePersist,\n} from '../types'\n\nimport { extendByState } from './extendByState'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { generateApiFn } from './generateApiFn'\nimport { generateGetFn } from './generateGetFn'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\nimport { restrictState } from './restrictState'\n\nlet config: GlobalConfig = { appName: 'zustand-lite', logging: false }\n\nexport function setGlobalConfig(newConfig: Partial<GlobalConfig>) {\n\tconfig = { ...config, ...newConfig }\n}\n\nexport function createStore<S extends State, ExtraMW extends MWConfiguration = {}>(\n\tinitialState: S,\n\toptions?: { name?: string; middlewares?: ExtraMW }\n): StoreApi<\n\tS,\n\tGetRecord<S>,\n\tSetRecord<S>,\n\tExtraMW extends { persist: any } ? StorePersist<S> : {}\n> {\n\tconst { name = 'zustand-lite', middlewares = {} as ExtraMW } = options ?? {}\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => initialState\n\n\tconst persistId = `${config.appName.replace(/\\s/, '-')}.${name}}`\n\tconst shouldLog = config.logging || !!middlewares.devtools\n\n\tif (shouldLog) {\n\t\tinitializer = devtools(initializer, {\n\t\t\tname: config.appName,\n\t\t\tstore: name,\n\t\t\t...(typeof middlewares.devtools === 'object' ? middlewares.devtools : {}),\n\t\t})\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(initializer, {\n\t\t\tname: persistId,\n\t\t\t...(typeof middlewares.persist === 'object' ? middlewares.persist : {}),\n\t\t})\n\t}\n\n\t// Create a vanilla zustand store to wrap.\n\tconst storeLib: any = createVanillaStore(initializer)\n\n\t// Create zustand-lite wrapper.\n\treturn {\n\t\tapi: generateApiFn(storeLib, persistId),\n\t\tget: generateGetFn(storeLib),\n\t\tuse: generateUseFn(storeLib, Object.keys(initialState)),\n\t\tset: generateSetFn(storeLib, Object.keys(initialState), shouldLog),\n\t\tcomposePlugin(plugin) {\n\t\t\treturn plugin(this)\n\t\t},\n\t\textendGetters(builder) {\n\t\t\treturn extendGetters(builder, this, storeLib)\n\t\t},\n\t\textendSetters(builder) {\n\t\t\treturn extendSetters(builder, this, storeLib, shouldLog)\n\t\t},\n\t\textendByState(builder) {\n\t\t\treturn extendByState(builder, this, storeLib, shouldLog)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, initialState, this, storeLib)\n\t\t},\n\t} as any\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setters like store.set.foo(value)\n *\n * @param lib Zustand api interface\n * @param key Keys to generate setters for\n * @param log If devtools were activated for this store\n */\nexport function generateSetFn<S extends State>(lib: StoreLib<S>, key: string[], log: boolean) {\n\tconst setters: any = generateSetFnBase(lib, log)\n\n\tkey.forEach((key) => {\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (shallow(lib.getState()[key], value)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlib.setState(\n\t\t\t\t(state) => ({ ...state, [key]: value }),\n\t\t\t\tfalse,\n\t\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\t\tlog ? { type: generateSetterName() ?? key, payload: { [key]: value } } : undefined\n\t\t\t)\n\t\t}\n\t})\n\n\treturn setters as SetRecord<S>\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setState function for store like store.set({ value })\n *\n * @param lib Zustand api interface\n * @param log If devtools were activated for this store\n */\nexport function generateSetFnBase<S extends State>(lib: StoreLib<S>, log: boolean) {\n\treturn (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tconst current = lib.getState()\n\t\tconst payload = typeof updater === 'function' ? updater(current) : updater\n\n\t\tif (shallow(current, payload)) {\n\t\t\treturn\n\t\t}\n\n\t\tlib.setState(\n\t\t\tpayload,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\tlog ? { type: generateSetterName() ?? name ?? 'setState', payload } : undefined\n\t\t)\n\t}\n}\n","import ErrorStackParser from 'error-stack-parser'\n\n/**\n * Hacky, but working (and possibly only one there is) method of fetching proper caller\n * name of the extended function.\n */\nexport function generateSetterName() {\n\t// Proper setter name should hide at 2nd position in the normalized stack.\n\tconst stack = ErrorStackParser.parse(new Error())\n\tconst index = stack.findIndex((entry) => entry.functionName?.includes('_zustandLiteInferName_'))\n\treturn index - 1 >= 0 ? stack[index - 1].functionName : null\n}\n","export const identity = (arg: any) => arg\nexport const pick = (obj: Record<string, any>, keys: string[]) =>\n\tkeys.reduce<Record<string, any>>((acc, k) => (k in obj ? ((acc[k] = obj[k]), acc) : acc), {})\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\n/**\n * Generates automatic getters like store.use.foo() (recursive steps for each level).\n * Getters are created as side effects.\n *\n * @param state State at nth level\n * @param getters Getters at nth level\n * @param path Property access path at nth level like ['foo', 'bar']\n * @param lib Zustand api interface\n */\nexport function generateUseFnStep(state: any, getters: any, path: string[], lib: any) {\n\tif (typeof state === 'object' && state !== null) {\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst newPath = [...path, key]\n\t\t\tObject.defineProperty(getters, key, {\n\t\t\t\tvalue: (equalityFn = shallow) => {\n\t\t\t\t\treturn useStoreWithEqualityFn(\n\t\t\t\t\t\tlib,\n\t\t\t\t\t\t(state) => getFromPath(state, newPath),\n\t\t\t\t\t\tequalityFn\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t})\n\n\t\t\tgenerateUseFnStep(state[key], getters[key], newPath, lib)\n\t\t})\n\t}\n}\n\nfunction getFromPath(state: any, path: string[]) {\n\tlet data = state\n\n\tfor (const key of path) {\n\t\tdata = data[key]\n\t\tif (!data) {\n\t\t\treturn data\n\t\t}\n\t}\n\n\treturn data\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\nimport { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { identity, pick } from '../utils/utils'\n\n/**\n * Generates automatic getters like store.use.foo()\n *\n * @param lib Zustand api interface\n */\nexport function generateUseFnBase<S extends State, U>(lib: StoreLib<S>) {\n\treturn (selector = identity, equality = shallow) => {\n\t\treturn useStoreWithEqualityFn(\n\t\t\tlib,\n\t\t\tArray.isArray(selector) ? (s) => pick(s, selector) : (selector ?? identity),\n\t\t\tequality\n\t\t)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { pick } from '../utils/utils'\nimport { generateUseFnStep } from './generateUseFnStep'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Generates automatic store hook subscribe function store.use()\n *\n * @param lib Zustand api interface\n * @param key State keys to use\n */\nexport function generateUseFn<S extends State>(lib: StoreLib<S>, key: string[]) {\n\tconst getters = generateUseFnBase(lib)\n\tgenerateUseFnStep(pick(lib.getState(), key), getters, [], lib)\n\treturn getters\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { ByStateBuilder, State, StoreApi } from '../types'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Extends the store by adding new state fields, either by:\n * - passing an object patch: `{ b: 'x' }`\n * - or using a builder: `({ get }) => ({ c: get().b + 'y' })`\n *\n * @param builder Object patch or function producing new state fields.\n * @param api The extended store API before widening.\n * @param lib The underlying Zustand vanilla store.\n * @param log Enables logging for generated setters.\n *\n * @returns The same API instance, but with widened state (via overloads).\n */\nexport function extendByState<\n\tNewData extends State,\n\tOldData extends State,\n\tGetters,\n\tSetters,\n\tBuilder extends ByStateBuilder<NewData, OldData, Getters>,\n>(\n\tbuilder: Builder | NewData,\n\tapi: StoreApi<OldData, Getters, Setters>,\n\tlib: StoreLib<OldData>,\n\tlog: boolean\n) {\n\t// Calculate new state to be added to the store.\n\tconst newState: NewData = typeof builder === 'function' ? builder(api) : builder\n\n\t// Merge the new keys into the zustand state, in such way that the old keys are preserved.\n\tapi.set({ ...newState, ...lib.getState() })\n\n\t// @ts-ignore\n\tapi.use = Object.assign(api.use, generateUseFn(lib, Object.keys(newState)))\n\tapi.set = Object.assign(api.set, generateSetFn(lib, Object.keys(newState), log))\n\n\t// Return the same object, but with widened state type (handled by overloads).\n\treturn api\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GettersBuilder, State, StoreApi, UseGetterOptions } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Type guard to check if a value is an equality options object.\n * Detects plain objects with an `eq` property that is a function.\n */\nfunction isEqualityOptions<R>(value: unknown): value is UseGetterOptions<R> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'eq' in value &&\n\t\ttypeof (value as any).eq === 'function'\n\t)\n}\n\n/**\n * Adds derived getters to the store.\n *\n * @param builder Function returning new getter methods.\n * @param api Current store API to extend.\n * @param lib Underlying Zustand store.\n */\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst methods: any = builder({ get: api.get })\n\tconst getters: any = {}\n\n\tObject.keys(methods).forEach((key) => {\n\t\tgetters[key] = (...args: any[]) => {\n\t\t\t// Check if the last argument is an equality options object\n\t\t\tconst lastArg = args[args.length - 1]\n\t\t\tif (isEqualityOptions(lastArg)) {\n\t\t\t\tconst actualArgs = args.slice(0, -1)\n\t\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...actualArgs), lastArg.eq)\n\t\t\t}\n\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\n\t\t}\n\t})\n\n\tapi.use = Object.assign(generateUseFnBase(lib), api.use, getters)\n\tapi.get = Object.assign(generateGetFnBase(lib), api.get, methods)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Generates getState function for store.get()\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFnBase<S extends State>(lib: StoreLib<S>) {\n\treturn () => lib.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { SettersBuilder, State, StoreApi } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\n\n/**\n * Adds custom setter methods to the store.\n *\n * @param builder Function returning new setter methods.\n * @param api Store API to extend.\n * @param lib Underlying Zustand store.\n * @param log Enables optional debug logging.\n */\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>, log: boolean) {\n\tconst setters = generateSetFnBase(lib, log)\n\tconst baseSet = Object.entries(builder(api)).reduce(\n\t\t(acc, [name, func]) => {\n\t\t\tacc[name] = function _zustandLiteInferName_(...args: any[]) {\n\t\t\t\treturn func(...args)\n\t\t\t}\n\n\t\t\treturn acc\n\t\t},\n\t\t{} as Record<string, any>\n\t)\n\n\tapi.set = Object.assign(setters, api.set, baseSet)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Required to wrap original Zustand interface without getState and setState, which are handled\n * by get and set (we should allow only one way of doing certain things).\n *\n * @param lib Zustand api interface\n * @param key Zustand persist local storage key\n */\nexport function generateApiFn<S extends State>(lib: StoreLib<S>, key: string) {\n\treturn {\n\t\tgetInitialState: lib.getInitialState,\n\t\tgetState: lib.getState,\n\t\tpersist: augmentPersist(lib, key),\n\t\tsetState: lib.setState,\n\t\tsubscribe: lib.subscribe,\n\t}\n}\n\nfunction augmentPersist<S extends State>(lib: StoreLib<S>, key: string) {\n\tif ('persist' in lib) {\n\t\tconst augmented: any = lib.persist\n\t\taugmented.read = () => {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(localStorage?.getItem(key) ?? '')?.state\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t}\n\n\t\treturn augmented\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\n\n/**\n * Generates getters for store.get. In the past getters were generated as functions, but I\n * came to the conclusion that it's better and simpler to return the whole state.\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFn<S extends State>(lib: StoreLib<S>) {\n\treturn generateGetFnBase(lib)\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GetRecord, SetRecord, State, StoreApi, UseRecord } from '../types'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Function that restrict access to the store and store api.\n *\n * @param privateState Property names to be made private like ['foo', 'bar']\n * @param mergedState Final state of the store\n * @param api Returned store API\n * @param lib Zustand api interface\n */\nexport function restrictState<\n\tS extends State,\n\tKey extends keyof S,\n\tGetters extends GetRecord<any>,\n\tSetters extends SetRecord<any>,\n>(privateState: Key[], mergedState: S, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\treturn {\n\t\tapi: api.api,\n\t\tset: api.set,\n\t\tuse: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getters = Object.keys(api.use).reduce(\n\t\t\t\t\t\t(acc, key) =>\n\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t: { ...acc, [key]: (api.use as UseRecord<any>)[key] },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(generateUseFnBase(lib), getters)\n\t\t\t\t})()\n\t\t\t: api.use,\n\t\tget: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getFn = () =>\n\t\t\t\t\t\tObject.entries(api.get()).reduce(\n\t\t\t\t\t\t\t(acc, [key, val]) =>\n\t\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t\t: { ...acc, [key]: val },\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(getFn, api.get)\n\t\t\t\t})()\n\t\t\t: api.get,\n\t}\n}\n","import { definePlugin } from '../lib/definePlugin'\n\n/**\n * Basic plugin example, that extends store with custom setter.\n */\nexport const withReset = definePlugin((store) =>\n\tstore.extendSetters(({ api, set }) => ({\n\t\treset: () => {\n\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t},\n\t}))\n)\n"],"mappings":"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","names":["index_exports","__export","createStore","definePlugin","setGlobalConfig","withReset","__toCommonJS","definePlugin","fn","import_middleware","import_vanilla","import_shallow","import_shallow","import_error_stack_parser","generateSetterName","stack","ErrorStackParser","index","entry","generateSetFnBase","lib","log","updater","replace","name","current","payload","generateSetterName","generateSetFn","lib","key","log","setters","generateSetFnBase","value","state","generateSetterName","identity","arg","pick","obj","keys","acc","k","import_shallow","import_traditional","generateUseFnStep","state","getters","path","lib","key","newPath","equalityFn","getFromPath","data","import_shallow","import_traditional","generateUseFnBase","lib","selector","identity","equality","s","pick","generateUseFn","lib","key","getters","generateUseFnBase","generateUseFnStep","pick","extendByState","builder","api","lib","log","newState","generateUseFn","generateSetFn","import_shallow","import_traditional","generateGetFnBase","lib","isEqualityOptions","value","extendGetters","builder","api","lib","methods","getters","key","args","lastArg","actualArgs","generateUseFnBase","generateGetFnBase","extendSetters","builder","api","lib","log","setters","generateSetFnBase","baseSet","acc","name","func","args","generateApiFn","lib","key","augmentPersist","augmented","generateGetFn","lib","generateGetFnBase","restrictState","privateState","mergedState","api","lib","getters","acc","key","generateUseFnBase","val","config","setGlobalConfig","newConfig","createStore","initialState","options","name","middlewares","initializer","persistId","shouldLog","storeLib","createVanillaStore","generateApiFn","generateGetFn","generateUseFn","generateSetFn","plugin","builder","extendGetters","extendSetters","extendByState","publicState","restrictState","withReset","store","api","set"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -110,8 +110,9 @@ type GlobalConfig = {
|
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* Identity helper that provides a typed `store` param and preserves the plugin's return type.
|
|
113
|
+
* The middleware type (MW) from the input store is preserved in the output.
|
|
113
114
|
*/
|
|
114
|
-
declare function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F): <S extends State, G, A, MW>(store: StoreApi<S, G, A, MW>) => ReturnType<F
|
|
115
|
+
declare function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F): <S extends State, G, A, MW>(store: StoreApi<S, G, A, MW>) => ReturnType<F> extends StoreApi<infer S2, infer G2, infer A2, any> ? StoreApi<S2, G2, A2, MW> : never;
|
|
115
116
|
|
|
116
117
|
declare function setGlobalConfig(newConfig: Partial<GlobalConfig>): void;
|
|
117
118
|
declare function createStore<S extends State, ExtraMW extends MWConfiguration = {}>(initialState: S, options?: {
|
|
@@ -126,6 +127,6 @@ declare function createStore<S extends State, ExtraMW extends MWConfiguration =
|
|
|
126
127
|
*/
|
|
127
128
|
declare const withReset: <S extends State, G, A, MW>(store: StoreApi<S, G, A, MW>) => StoreApi<{}, {}, {
|
|
128
129
|
reset: () => void;
|
|
129
|
-
},
|
|
130
|
+
}, MW>;
|
|
130
131
|
|
|
131
132
|
export { type UseGetterOptions, createStore, definePlugin, setGlobalConfig, withReset };
|
package/dist/index.d.ts
CHANGED
|
@@ -110,8 +110,9 @@ type GlobalConfig = {
|
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* Identity helper that provides a typed `store` param and preserves the plugin's return type.
|
|
113
|
+
* The middleware type (MW) from the input store is preserved in the output.
|
|
113
114
|
*/
|
|
114
|
-
declare function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F): <S extends State, G, A, MW>(store: StoreApi<S, G, A, MW>) => ReturnType<F
|
|
115
|
+
declare function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F): <S extends State, G, A, MW>(store: StoreApi<S, G, A, MW>) => ReturnType<F> extends StoreApi<infer S2, infer G2, infer A2, any> ? StoreApi<S2, G2, A2, MW> : never;
|
|
115
116
|
|
|
116
117
|
declare function setGlobalConfig(newConfig: Partial<GlobalConfig>): void;
|
|
117
118
|
declare function createStore<S extends State, ExtraMW extends MWConfiguration = {}>(initialState: S, options?: {
|
|
@@ -126,6 +127,6 @@ declare function createStore<S extends State, ExtraMW extends MWConfiguration =
|
|
|
126
127
|
*/
|
|
127
128
|
declare const withReset: <S extends State, G, A, MW>(store: StoreApi<S, G, A, MW>) => StoreApi<{}, {}, {
|
|
128
129
|
reset: () => void;
|
|
129
|
-
},
|
|
130
|
+
}, MW>;
|
|
130
131
|
|
|
131
132
|
export { type UseGetterOptions, createStore, definePlugin, setGlobalConfig, withReset };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
function j(e){return e}import{devtools as C,persist as z}from"zustand/middleware";import{createStore as _}from"zustand/vanilla";import{shallow as N}from"zustand/shallow";import{shallow as w}from"zustand/shallow";import R from"error-stack-parser";function p(){let e=R.parse(new Error),r=e.findIndex(t=>t.functionName?.includes("_zustandLiteInferName_"));return r-1>=0?e[r-1].functionName:null}function u(e,r){return(t,o,n)=>{let i=e.getState(),s=typeof t=="function"?t(i):t;w(i,s)||e.setState(s,o,r?{type:p()??n??"setState",payload:s}:void 0)}}function c(e,r,t){let o=u(e,t);return r.forEach(n=>{o[n]=i=>{N(e.getState()[n],i)||e.setState(s=>({...s,[n]:i}),!1,t?{type:p()??n,payload:{[n]:i}}:void 0)}}),o}var x=e=>e,d=(e,r)=>r.reduce((t,o)=>(o in e&&(t[o]=e[o]),t),{});import{shallow as U}from"zustand/shallow";import{useStoreWithEqualityFn as E}from"zustand/traditional";function y(e,r,t,o){typeof e=="object"&&e!==null&&Object.keys(e).forEach(n=>{let i=[...t,n];Object.defineProperty(r,n,{value:(s=U)=>E(o,a=>P(a,i),s),writable:!0,configurable:!0,enumerable:!0}),y(e[n],r[n],i,o)})}function P(e,r){let t=e;for(let o of r)if(t=t[o],!t)return t;return t}import{shallow as W}from"zustand/shallow";import{useStoreWithEqualityFn as M}from"zustand/traditional";function m(e){return(r=x,t=W)=>M(e,Array.isArray(r)?o=>d(o,r):r??x,t)}function g(e,r){let t=m(e);return y(d(e.getState(),r),t,[],e),t}function b(e,r,t,o){let n=typeof e=="function"?e(r):e;return r.set({...n,...t.getState()}),r.use=Object.assign(r.use,g(t,Object.keys(n))),r.set=Object.assign(r.set,c(t,Object.keys(n),o)),r}import{shallow as D}from"zustand/shallow";import{useStoreWithEqualityFn as A}from"zustand/traditional";function l(e){return()=>e.getState()}function I(e){return typeof e=="object"&&e!==null&&"eq"in e&&typeof e.eq=="function"}function G(e,r,t){let o=e({get:r.get}),n={};return Object.keys(o).forEach(i=>{n[i]=(...s)=>{let a=s[s.length-1];if(I(a)){let S=s.slice(0,-1);return A(t,()=>o[i](...S),a.eq)}return A(t,()=>o[i](...s),D)}}),r.use=Object.assign(m(t),r.use,n),r.get=Object.assign(l(t),r.get,o),r}function F(e,r,t,o){let n=u(t,o),i=Object.entries(e(r)).reduce((s,[a,S])=>(s[a]=function(...h){return S(...h)},s),{});return r.set=Object.assign(n,r.set,i),r}function B(e,r){return{getInitialState:e.getInitialState,getState:e.getState,persist:q(e,r),setState:e.setState,subscribe:e.subscribe}}function q(e,r){if("persist"in e){let t=e.persist;return t.read=()=>{try{return JSON.parse(localStorage?.getItem(r)??"")?.state}catch{return}},t}}function L(e){return l(e)}function O(e,r,t,o){return{api:t.api,set:t.set,use:e?(()=>{let n=Object.keys(t.use).reduce((i,s)=>r[s]&&e.includes(s)?i:{...i,[s]:t.use[s]},{});return Object.assign(m(o),n)})():t.use,get:e?Object.assign(()=>Object.entries(t.get()).reduce((i,[s,a])=>r[s]&&e.includes(s)?i:{...i,[s]:a},{}),t.get):t.get}}var f={appName:"zustand-lite",logging:!1};function K(e){f={...f,...e}}function $(e,r){let{name:t="zustand-lite",middlewares:o={}}=r??{},n=()=>e,i=`${f.appName.replace(/\s/,"-")}.${t}}`,s=f.logging||!!o.devtools;s&&(n=C(n,{name:f.appName,store:t,...typeof o.devtools=="object"?o.devtools:{}})),o.persist&&(n=z(n,{name:i,...typeof o.persist=="object"?o.persist:{}}));let a=_(n);return{api:B(a,i),get:L(a),use:g(a,Object.keys(e)),set:c(a,Object.keys(e),s),composePlugin(S){return S(this)},extendGetters(S){return G(S,this,a)},extendSetters(S){return F(S,this,a,s)},extendByState(S){return b(S,this,a,s)},restrictState(S=[]){return O(S,e,this,a)}}}var J=e=>e.extendSetters(({api:r,set:t})=>({reset:()=>{t(r.getInitialState?.()??{},!0)}}));export{$ as createStore,j as definePlugin,K as setGlobalConfig,J as withReset};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/definePlugin.ts","../src/lib/createStore.ts","../src/lib/generateSetFn.ts","../src/lib/generateSetFnBase.ts","../src/lib/generateSetterName.ts","../src/utils/utils.ts","../src/lib/generateUseFnStep.ts","../src/lib/generateUseFnBase.ts","../src/lib/generateUseFn.ts","../src/lib/extendByState.ts","../src/lib/extendGetters.ts","../src/lib/generateGetFnBase.ts","../src/lib/extendSetters.ts","../src/lib/generateApiFn.ts","../src/lib/generateGetFn.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["import { State, StoreApi } from '../types'\n\n/**\n * Identity helper that provides a typed `store` param and preserves the plugin's return type.\n */\nexport function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F) {\n\treturn fn as unknown as <S extends State, G, A, MW>(\n\t\tstore: StoreApi<S, G, A, MW>\n\t) => ReturnType<F>\n}\n","/**\n * Entire no-boilerplate functionality inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors.\n * It has few utilities described here: https://www.npmjs.com/package/zustand-lite\n * for:\n * 1) Generating getters for flat state (1-level deep selectors).\n * 2) Generating setters for flat state (1-level deep setters).\n * 3) Automatic devtools messaging.\n * 4) Annotating functions with proper TS types to avoid some bloating and TS frenzy.\n * 5) Extending getters and setters\n * 6) Extending state and restricting state\n * 7) Reuse plugins\n *\n * Idea is to support small store without complicated data reducing (it can be done as well,\n * but may indicate something is not right with the use case itself).\n **/\nimport { devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tGetRecord,\n\tGlobalConfig,\n\tMWConfiguration,\n\tSetRecord,\n\tState,\n\tStoreApi,\n\tStorePersist,\n} from '../types'\n\nimport { extendByState } from './extendByState'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { generateApiFn } from './generateApiFn'\nimport { generateGetFn } from './generateGetFn'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\nimport { restrictState } from './restrictState'\n\nlet config: GlobalConfig = { appName: 'zustand-lite', logging: false }\n\nexport function setGlobalConfig(newConfig: Partial<GlobalConfig>) {\n\tconfig = { ...config, ...newConfig }\n}\n\nexport function createStore<S extends State, ExtraMW extends MWConfiguration = {}>(\n\tinitialState: S,\n\toptions?: { name?: string; middlewares?: ExtraMW }\n): StoreApi<\n\tS,\n\tGetRecord<S>,\n\tSetRecord<S>,\n\tExtraMW extends { persist: any } ? StorePersist<S> : {}\n> {\n\tconst { name = 'zustand-lite', middlewares = {} as ExtraMW } = options ?? {}\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => initialState\n\n\tconst persistId = `${config.appName.replace(/\\s/, '-')}.${name}}`\n\tconst shouldLog = config.logging || !!middlewares.devtools\n\n\tif (shouldLog) {\n\t\tinitializer = devtools(initializer, {\n\t\t\tname: config.appName,\n\t\t\tstore: name,\n\t\t\t...(typeof middlewares.devtools === 'object' ? middlewares.devtools : {}),\n\t\t})\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(initializer, {\n\t\t\tname: persistId,\n\t\t\t...(typeof middlewares.persist === 'object' ? middlewares.persist : {}),\n\t\t})\n\t}\n\n\t// Create a vanilla zustand store to wrap.\n\tconst storeLib: any = createVanillaStore(initializer)\n\n\t// Create zustand-lite wrapper.\n\treturn {\n\t\tapi: generateApiFn(storeLib, persistId),\n\t\tget: generateGetFn(storeLib),\n\t\tuse: generateUseFn(storeLib, Object.keys(initialState)),\n\t\tset: generateSetFn(storeLib, Object.keys(initialState), shouldLog),\n\t\tcomposePlugin(plugin) {\n\t\t\treturn plugin(this)\n\t\t},\n\t\textendGetters(builder) {\n\t\t\treturn extendGetters(builder, this, storeLib)\n\t\t},\n\t\textendSetters(builder) {\n\t\t\treturn extendSetters(builder, this, storeLib, shouldLog)\n\t\t},\n\t\textendByState(builder) {\n\t\t\treturn extendByState(builder, this, storeLib, shouldLog)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, initialState, this, storeLib)\n\t\t},\n\t} as any\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setters like store.set.foo(value)\n *\n * @param lib Zustand api interface\n * @param key Keys to generate setters for\n * @param log If devtools were activated for this store\n */\nexport function generateSetFn<S extends State>(lib: StoreLib<S>, key: string[], log: boolean) {\n\tconst setters: any = generateSetFnBase(lib, log)\n\n\tkey.forEach((key) => {\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (shallow(lib.getState()[key], value)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlib.setState(\n\t\t\t\t(state) => ({ ...state, [key]: value }),\n\t\t\t\tfalse,\n\t\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\t\tlog ? { type: generateSetterName() ?? key, payload: { [key]: value } } : undefined\n\t\t\t)\n\t\t}\n\t})\n\n\treturn setters as SetRecord<S>\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setState function for store like store.set({ value })\n *\n * @param lib Zustand api interface\n * @param log If devtools were activated for this store\n */\nexport function generateSetFnBase<S extends State>(lib: StoreLib<S>, log: boolean) {\n\treturn (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tconst current = lib.getState()\n\t\tconst payload = typeof updater === 'function' ? updater(current) : updater\n\n\t\tif (shallow(current, payload)) {\n\t\t\treturn\n\t\t}\n\n\t\tlib.setState(\n\t\t\tpayload,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\tlog ? { type: generateSetterName() ?? name ?? 'setState', payload } : undefined\n\t\t)\n\t}\n}\n","import ErrorStackParser from 'error-stack-parser'\n\n/**\n * Hacky, but working (and possibly only one there is) method of fetching proper caller\n * name of the extended function.\n */\nexport function generateSetterName() {\n\t// Proper setter name should hide at 2nd position in the normalized stack.\n\tconst stack = ErrorStackParser.parse(new Error())\n\tconst index = stack.findIndex((entry) => entry.functionName?.includes('_zustandLiteInferName_'))\n\treturn index - 1 >= 0 ? stack[index - 1].functionName : null\n}\n","export const identity = (arg: any) => arg\nexport const pick = (obj: Record<string, any>, keys: string[]) =>\n\tkeys.reduce<Record<string, any>>((acc, k) => (k in obj ? ((acc[k] = obj[k]), acc) : acc), {})\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\n/**\n * Generates automatic getters like store.use.foo() (recursive steps for each level).\n * Getters are created as side effects.\n *\n * @param state State at nth level\n * @param getters Getters at nth level\n * @param path Property access path at nth level like ['foo', 'bar']\n * @param lib Zustand api interface\n */\nexport function generateUseFnStep(state: any, getters: any, path: string[], lib: any) {\n\tif (typeof state === 'object' && state !== null) {\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst newPath = [...path, key]\n\t\t\tObject.defineProperty(getters, key, {\n\t\t\t\tvalue: (equalityFn = shallow) => {\n\t\t\t\t\treturn useStoreWithEqualityFn(\n\t\t\t\t\t\tlib,\n\t\t\t\t\t\t(state) => getFromPath(state, newPath),\n\t\t\t\t\t\tequalityFn\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t})\n\n\t\t\tgenerateUseFnStep(state[key], getters[key], newPath, lib)\n\t\t})\n\t}\n}\n\nfunction getFromPath(state: any, path: string[]) {\n\tlet data = state\n\n\tfor (const key of path) {\n\t\tdata = data[key]\n\t\tif (!data) {\n\t\t\treturn data\n\t\t}\n\t}\n\n\treturn data\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\nimport { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { identity, pick } from '../utils/utils'\n\n/**\n * Generates automatic getters like store.use.foo()\n *\n * @param lib Zustand api interface\n */\nexport function generateUseFnBase<S extends State, U>(lib: StoreLib<S>) {\n\treturn (selector = identity, equality = shallow) => {\n\t\treturn useStoreWithEqualityFn(\n\t\t\tlib,\n\t\t\tArray.isArray(selector) ? (s) => pick(s, selector) : (selector ?? identity),\n\t\t\tequality\n\t\t)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { pick } from '../utils/utils'\nimport { generateUseFnStep } from './generateUseFnStep'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Generates automatic store hook subscribe function store.use()\n *\n * @param lib Zustand api interface\n * @param key State keys to use\n */\nexport function generateUseFn<S extends State>(lib: StoreLib<S>, key: string[]) {\n\tconst getters = generateUseFnBase(lib)\n\tgenerateUseFnStep(pick(lib.getState(), key), getters, [], lib)\n\treturn getters\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { ByStateBuilder, State, StoreApi } from '../types'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Extends the store by adding new state fields, either by:\n * - passing an object patch: `{ b: 'x' }`\n * - or using a builder: `({ get }) => ({ c: get().b + 'y' })`\n *\n * @param builder Object patch or function producing new state fields.\n * @param api The extended store API before widening.\n * @param lib The underlying Zustand vanilla store.\n * @param log Enables logging for generated setters.\n *\n * @returns The same API instance, but with widened state (via overloads).\n */\nexport function extendByState<\n\tNewData extends State,\n\tOldData extends State,\n\tGetters,\n\tSetters,\n\tBuilder extends ByStateBuilder<NewData, OldData, Getters>,\n>(\n\tbuilder: Builder | NewData,\n\tapi: StoreApi<OldData, Getters, Setters>,\n\tlib: StoreLib<OldData>,\n\tlog: boolean\n) {\n\t// Calculate new state to be added to the store.\n\tconst newState: NewData = typeof builder === 'function' ? builder(api) : builder\n\n\t// Merge the new keys into the zustand state in such a way that the old keys are preserved.\n\tlib.setState({ ...newState, ...lib.getState() })\n\n\t// Generate basic getters and setters from the newly added record.\n\tapi.use = { ...api.use, ...generateUseFn(lib, Object.keys(newState)) }\n\tapi.set = { ...api.set, ...generateSetFn(lib, Object.keys(newState), log) }\n\n\t// Return the same object, but with widened state type (handled by overloads).\n\treturn api\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GettersBuilder, State, StoreApi, UseGetterOptions } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Type guard to check if a value is an equality options object.\n * Detects plain objects with an `eq` property that is a function.\n */\nfunction isEqualityOptions<R>(value: unknown): value is UseGetterOptions<R> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'eq' in value &&\n\t\ttypeof (value as any).eq === 'function'\n\t)\n}\n\n/**\n * Adds derived getters to the store.\n *\n * @param builder Function returning new getter methods.\n * @param api Current store API to extend.\n * @param lib Underlying Zustand store.\n */\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst methods: any = builder({ get: api.get })\n\tconst getters: any = {}\n\n\tObject.keys(methods).forEach((key) => {\n\t\tgetters[key] = (...args: any[]) => {\n\t\t\t// Check if the last argument is an equality options object\n\t\t\tconst lastArg = args[args.length - 1]\n\t\t\tif (isEqualityOptions(lastArg)) {\n\t\t\t\tconst actualArgs = args.slice(0, -1)\n\t\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...actualArgs), lastArg.eq)\n\t\t\t}\n\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\n\t\t}\n\t})\n\n\tapi.use = Object.assign(generateUseFnBase(lib), api.use, getters)\n\tapi.get = Object.assign(generateGetFnBase(lib), api.get, methods)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Generates getState function for store.get()\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFnBase<S extends State>(lib: StoreLib<S>) {\n\treturn () => lib.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { SettersBuilder, State, StoreApi } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\n\n/**\n * Adds custom setter methods to the store.\n *\n * @param builder Function returning new setter methods.\n * @param api Store API to extend.\n * @param lib Underlying Zustand store.\n * @param log Enables optional debug logging.\n */\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>, log: boolean) {\n\tconst setters = generateSetFnBase(lib, log)\n\tconst baseSet = Object.entries(builder(api)).reduce(\n\t\t(acc, [name, func]) => {\n\t\t\tacc[name] = function _zustandLiteInferName_(...args: any[]) {\n\t\t\t\treturn func(...args)\n\t\t\t}\n\n\t\t\treturn acc\n\t\t},\n\t\t{} as Record<string, any>\n\t)\n\n\tapi.set = Object.assign(setters, api.set, baseSet)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Required to wrap original Zustand interface without getState and setState, which are handled\n * by get and set (we should allow only one way of doing certain things).\n *\n * @param lib Zustand api interface\n * @param key Zustand persist local storage key\n */\nexport function generateApiFn<S extends State>(lib: StoreLib<S>, key: string) {\n\treturn {\n\t\tgetInitialState: lib.getInitialState,\n\t\tgetState: lib.getState,\n\t\tpersist: augmentPersist(lib, key),\n\t\tsetState: lib.setState,\n\t\tsubscribe: lib.subscribe,\n\t}\n}\n\nfunction augmentPersist<S extends State>(lib: StoreLib<S>, key: string) {\n\tif ('persist' in lib) {\n\t\tconst augmented: any = lib.persist\n\t\taugmented.read = () => {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(localStorage?.getItem(key) ?? '')?.state\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t}\n\n\t\treturn augmented\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\n\n/**\n * Generates getters for store.get. In the past getters were generated as functions, but I\n * came to the conclusion that it's better and simpler to return the whole state.\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFn<S extends State>(lib: StoreLib<S>) {\n\treturn generateGetFnBase(lib)\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GetRecord, SetRecord, State, StoreApi, UseRecord } from '../types'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Function that restrict access to the store and store api.\n *\n * @param privateState Property names to be made private like ['foo', 'bar']\n * @param mergedState Final state of the store\n * @param api Returned store API\n * @param lib Zustand api interface\n */\nexport function restrictState<\n\tS extends State,\n\tKey extends keyof S,\n\tGetters extends GetRecord<any>,\n\tSetters extends SetRecord<any>,\n>(privateState: Key[], mergedState: S, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\treturn {\n\t\tapi: api.api,\n\t\tset: api.set,\n\t\tuse: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getters = Object.keys(api.use).reduce(\n\t\t\t\t\t\t(acc, key) =>\n\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t: { ...acc, [key]: (api.use as UseRecord<any>)[key] },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(generateUseFnBase(lib), getters)\n\t\t\t\t})()\n\t\t\t: api.use,\n\t\tget: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getFn = () =>\n\t\t\t\t\t\tObject.entries(api.get()).reduce(\n\t\t\t\t\t\t\t(acc, [key, val]) =>\n\t\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t\t: { ...acc, [key]: val },\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(getFn, api.get)\n\t\t\t\t})()\n\t\t\t: api.get,\n\t}\n}\n","import { definePlugin } from '../lib/definePlugin'\n\n/**\n * Basic plugin example, that extends store with custom setter.\n */\nexport const withReset = definePlugin((store) =>\n\tstore.extendSetters(({ api, set }) => ({\n\t\treset: () => {\n\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t},\n\t}))\n)\n"],"mappings":"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","names":["definePlugin","fn","devtools","persist","createVanillaStore","shallow","shallow","ErrorStackParser","generateSetterName","stack","index","entry","generateSetFnBase","lib","log","updater","replace","name","current","payload","shallow","generateSetterName","generateSetFn","lib","key","log","setters","generateSetFnBase","value","shallow","state","generateSetterName","identity","arg","pick","obj","keys","acc","k","shallow","useStoreWithEqualityFn","generateUseFnStep","state","getters","path","lib","key","newPath","equalityFn","getFromPath","data","shallow","useStoreWithEqualityFn","generateUseFnBase","lib","selector","identity","equality","shallow","useStoreWithEqualityFn","s","pick","generateUseFn","lib","key","getters","generateUseFnBase","generateUseFnStep","pick","extendByState","builder","api","lib","log","newState","generateUseFn","generateSetFn","shallow","useStoreWithEqualityFn","generateGetFnBase","lib","isEqualityOptions","value","extendGetters","builder","api","lib","methods","getters","key","args","lastArg","actualArgs","useStoreWithEqualityFn","shallow","generateUseFnBase","generateGetFnBase","extendSetters","builder","api","lib","log","setters","generateSetFnBase","baseSet","acc","name","func","args","generateApiFn","lib","key","augmentPersist","augmented","generateGetFn","lib","generateGetFnBase","restrictState","privateState","mergedState","api","lib","getters","acc","key","generateUseFnBase","val","config","setGlobalConfig","newConfig","createStore","initialState","options","name","middlewares","initializer","persistId","shouldLog","devtools","persist","storeLib","createVanillaStore","generateApiFn","generateGetFn","generateUseFn","generateSetFn","plugin","builder","extendGetters","extendSetters","extendByState","publicState","restrictState","withReset","store","api","set"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/definePlugin.ts","../src/lib/createStore.ts","../src/lib/generateSetFn.ts","../src/lib/generateSetFnBase.ts","../src/lib/generateSetterName.ts","../src/utils/utils.ts","../src/lib/generateUseFnStep.ts","../src/lib/generateUseFnBase.ts","../src/lib/generateUseFn.ts","../src/lib/extendByState.ts","../src/lib/extendGetters.ts","../src/lib/generateGetFnBase.ts","../src/lib/extendSetters.ts","../src/lib/generateApiFn.ts","../src/lib/generateGetFn.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["import { State, StoreApi } from '../types'\n\n/**\n * Identity helper that provides a typed `store` param and preserves the plugin's return type.\n * The middleware type (MW) from the input store is preserved in the output.\n */\nexport function definePlugin<F extends (store: StoreApi) => StoreApi>(fn: F) {\n\treturn fn as unknown as <S extends State, G, A, MW>(\n\t\tstore: StoreApi<S, G, A, MW>\n\t) => ReturnType<F> extends StoreApi<infer S2, infer G2, infer A2, any>\n\t\t? StoreApi<S2, G2, A2, MW>\n\t\t: never\n}\n","/**\n * Entire no-boilerplate functionality inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors.\n * It has few utilities described here: https://www.npmjs.com/package/zustand-lite\n * for:\n * 1) Generating getters for flat state (1-level deep selectors).\n * 2) Generating setters for flat state (1-level deep setters).\n * 3) Automatic devtools messaging.\n * 4) Annotating functions with proper TS types to avoid some bloating and TS frenzy.\n * 5) Extending getters and setters\n * 6) Extending state and restricting state\n * 7) Reuse plugins\n *\n * Idea is to support small store without complicated data reducing (it can be done as well,\n * but may indicate something is not right with the use case itself).\n **/\nimport { devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tGetRecord,\n\tGlobalConfig,\n\tMWConfiguration,\n\tSetRecord,\n\tState,\n\tStoreApi,\n\tStorePersist,\n} from '../types'\n\nimport { extendByState } from './extendByState'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { generateApiFn } from './generateApiFn'\nimport { generateGetFn } from './generateGetFn'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\nimport { restrictState } from './restrictState'\n\nlet config: GlobalConfig = { appName: 'zustand-lite', logging: false }\n\nexport function setGlobalConfig(newConfig: Partial<GlobalConfig>) {\n\tconfig = { ...config, ...newConfig }\n}\n\nexport function createStore<S extends State, ExtraMW extends MWConfiguration = {}>(\n\tinitialState: S,\n\toptions?: { name?: string; middlewares?: ExtraMW }\n): StoreApi<\n\tS,\n\tGetRecord<S>,\n\tSetRecord<S>,\n\tExtraMW extends { persist: any } ? StorePersist<S> : {}\n> {\n\tconst { name = 'zustand-lite', middlewares = {} as ExtraMW } = options ?? {}\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => initialState\n\n\tconst persistId = `${config.appName.replace(/\\s/, '-')}.${name}}`\n\tconst shouldLog = config.logging || !!middlewares.devtools\n\n\tif (shouldLog) {\n\t\tinitializer = devtools(initializer, {\n\t\t\tname: config.appName,\n\t\t\tstore: name,\n\t\t\t...(typeof middlewares.devtools === 'object' ? middlewares.devtools : {}),\n\t\t})\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(initializer, {\n\t\t\tname: persistId,\n\t\t\t...(typeof middlewares.persist === 'object' ? middlewares.persist : {}),\n\t\t})\n\t}\n\n\t// Create a vanilla zustand store to wrap.\n\tconst storeLib: any = createVanillaStore(initializer)\n\n\t// Create zustand-lite wrapper.\n\treturn {\n\t\tapi: generateApiFn(storeLib, persistId),\n\t\tget: generateGetFn(storeLib),\n\t\tuse: generateUseFn(storeLib, Object.keys(initialState)),\n\t\tset: generateSetFn(storeLib, Object.keys(initialState), shouldLog),\n\t\tcomposePlugin(plugin) {\n\t\t\treturn plugin(this)\n\t\t},\n\t\textendGetters(builder) {\n\t\t\treturn extendGetters(builder, this, storeLib)\n\t\t},\n\t\textendSetters(builder) {\n\t\t\treturn extendSetters(builder, this, storeLib, shouldLog)\n\t\t},\n\t\textendByState(builder) {\n\t\t\treturn extendByState(builder, this, storeLib, shouldLog)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, initialState, this, storeLib)\n\t\t},\n\t} as any\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setters like store.set.foo(value)\n *\n * @param lib Zustand api interface\n * @param key Keys to generate setters for\n * @param log If devtools were activated for this store\n */\nexport function generateSetFn<S extends State>(lib: StoreLib<S>, key: string[], log: boolean) {\n\tconst setters: any = generateSetFnBase(lib, log)\n\n\tkey.forEach((key) => {\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (shallow(lib.getState()[key], value)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlib.setState(\n\t\t\t\t(state) => ({ ...state, [key]: value }),\n\t\t\t\tfalse,\n\t\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\t\tlog ? { type: generateSetterName() ?? key, payload: { [key]: value } } : undefined\n\t\t\t)\n\t\t}\n\t})\n\n\treturn setters as SetRecord<S>\n}\n","import { shallow } from 'zustand/shallow'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateSetterName } from './generateSetterName'\n\n/**\n * Generates automatic setState function for store like store.set({ value })\n *\n * @param lib Zustand api interface\n * @param log If devtools were activated for this store\n */\nexport function generateSetFnBase<S extends State>(lib: StoreLib<S>, log: boolean) {\n\treturn (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tconst current = lib.getState()\n\t\tconst payload = typeof updater === 'function' ? updater(current) : updater\n\n\t\tif (shallow(current, payload)) {\n\t\t\treturn\n\t\t}\n\n\t\tlib.setState(\n\t\t\tpayload,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if logging is disabled.\n\t\t\tlog ? { type: generateSetterName() ?? name ?? 'setState', payload } : undefined\n\t\t)\n\t}\n}\n","import ErrorStackParser from 'error-stack-parser'\n\n/**\n * Hacky, but working (and possibly only one there is) method of fetching proper caller\n * name of the extended function.\n */\nexport function generateSetterName() {\n\t// Proper setter name should hide at 2nd position in the normalized stack.\n\tconst stack = ErrorStackParser.parse(new Error())\n\tconst index = stack.findIndex((entry) => entry.functionName?.includes('_zustandLiteInferName_'))\n\treturn index - 1 >= 0 ? stack[index - 1].functionName : null\n}\n","export const identity = (arg: any) => arg\nexport const pick = (obj: Record<string, any>, keys: string[]) =>\n\tkeys.reduce<Record<string, any>>((acc, k) => (k in obj ? ((acc[k] = obj[k]), acc) : acc), {})\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\n/**\n * Generates automatic getters like store.use.foo() (recursive steps for each level).\n * Getters are created as side effects.\n *\n * @param state State at nth level\n * @param getters Getters at nth level\n * @param path Property access path at nth level like ['foo', 'bar']\n * @param lib Zustand api interface\n */\nexport function generateUseFnStep(state: any, getters: any, path: string[], lib: any) {\n\tif (typeof state === 'object' && state !== null) {\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst newPath = [...path, key]\n\t\t\tObject.defineProperty(getters, key, {\n\t\t\t\tvalue: (equalityFn = shallow) => {\n\t\t\t\t\treturn useStoreWithEqualityFn(\n\t\t\t\t\t\tlib,\n\t\t\t\t\t\t(state) => getFromPath(state, newPath),\n\t\t\t\t\t\tequalityFn\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t})\n\n\t\t\tgenerateUseFnStep(state[key], getters[key], newPath, lib)\n\t\t})\n\t}\n}\n\nfunction getFromPath(state: any, path: string[]) {\n\tlet data = state\n\n\tfor (const key of path) {\n\t\tdata = data[key]\n\t\tif (!data) {\n\t\t\treturn data\n\t\t}\n\t}\n\n\treturn data\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\nimport { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { identity, pick } from '../utils/utils'\n\n/**\n * Generates automatic getters like store.use.foo()\n *\n * @param lib Zustand api interface\n */\nexport function generateUseFnBase<S extends State, U>(lib: StoreLib<S>) {\n\treturn (selector = identity, equality = shallow) => {\n\t\treturn useStoreWithEqualityFn(\n\t\t\tlib,\n\t\t\tArray.isArray(selector) ? (s) => pick(s, selector) : (selector ?? identity),\n\t\t\tequality\n\t\t)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { pick } from '../utils/utils'\nimport { generateUseFnStep } from './generateUseFnStep'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Generates automatic store hook subscribe function store.use()\n *\n * @param lib Zustand api interface\n * @param key State keys to use\n */\nexport function generateUseFn<S extends State>(lib: StoreLib<S>, key: string[]) {\n\tconst getters = generateUseFnBase(lib)\n\tgenerateUseFnStep(pick(lib.getState(), key), getters, [], lib)\n\treturn getters\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { ByStateBuilder, State, StoreApi } from '../types'\nimport { generateSetFn } from './generateSetFn'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Extends the store by adding new state fields, either by:\n * - passing an object patch: `{ b: 'x' }`\n * - or using a builder: `({ get }) => ({ c: get().b + 'y' })`\n *\n * @param builder Object patch or function producing new state fields.\n * @param api The extended store API before widening.\n * @param lib The underlying Zustand vanilla store.\n * @param log Enables logging for generated setters.\n *\n * @returns The same API instance, but with widened state (via overloads).\n */\nexport function extendByState<\n\tNewData extends State,\n\tOldData extends State,\n\tGetters,\n\tSetters,\n\tBuilder extends ByStateBuilder<NewData, OldData, Getters>,\n>(\n\tbuilder: Builder | NewData,\n\tapi: StoreApi<OldData, Getters, Setters>,\n\tlib: StoreLib<OldData>,\n\tlog: boolean\n) {\n\t// Calculate new state to be added to the store.\n\tconst newState: NewData = typeof builder === 'function' ? builder(api) : builder\n\n\t// Merge the new keys into the zustand state, in such way that the old keys are preserved.\n\tapi.set({ ...newState, ...lib.getState() })\n\n\t// @ts-ignore\n\tapi.use = Object.assign(api.use, generateUseFn(lib, Object.keys(newState)))\n\tapi.set = Object.assign(api.set, generateSetFn(lib, Object.keys(newState), log))\n\n\t// Return the same object, but with widened state type (handled by overloads).\n\treturn api\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GettersBuilder, State, StoreApi, UseGetterOptions } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Type guard to check if a value is an equality options object.\n * Detects plain objects with an `eq` property that is a function.\n */\nfunction isEqualityOptions<R>(value: unknown): value is UseGetterOptions<R> {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'eq' in value &&\n\t\ttypeof (value as any).eq === 'function'\n\t)\n}\n\n/**\n * Adds derived getters to the store.\n *\n * @param builder Function returning new getter methods.\n * @param api Current store API to extend.\n * @param lib Underlying Zustand store.\n */\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst methods: any = builder({ get: api.get })\n\tconst getters: any = {}\n\n\tObject.keys(methods).forEach((key) => {\n\t\tgetters[key] = (...args: any[]) => {\n\t\t\t// Check if the last argument is an equality options object\n\t\t\tconst lastArg = args[args.length - 1]\n\t\t\tif (isEqualityOptions(lastArg)) {\n\t\t\t\tconst actualArgs = args.slice(0, -1)\n\t\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...actualArgs), lastArg.eq)\n\t\t\t}\n\t\t\treturn useStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\n\t\t}\n\t})\n\n\tapi.use = Object.assign(generateUseFnBase(lib), api.use, getters)\n\tapi.get = Object.assign(generateGetFnBase(lib), api.get, methods)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Generates getState function for store.get()\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFnBase<S extends State>(lib: StoreLib<S>) {\n\treturn () => lib.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { SettersBuilder, State, StoreApi } from '../types'\nimport { generateSetFnBase } from './generateSetFnBase'\n\n/**\n * Adds custom setter methods to the store.\n *\n * @param builder Function returning new setter methods.\n * @param api Store API to extend.\n * @param lib Underlying Zustand store.\n * @param log Enables optional debug logging.\n */\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State,\n\tGetters,\n\tSetters,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>, log: boolean) {\n\tconst setters = generateSetFnBase(lib, log)\n\tconst baseSet = Object.entries(builder(api)).reduce(\n\t\t(acc, [name, func]) => {\n\t\t\tacc[name] = function _zustandLiteInferName_(...args: any[]) {\n\t\t\t\treturn func(...args)\n\t\t\t}\n\n\t\t\treturn acc\n\t\t},\n\t\t{} as Record<string, any>\n\t)\n\n\tapi.set = Object.assign(setters, api.set, baseSet)\n\treturn api\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Required to wrap original Zustand interface without getState and setState, which are handled\n * by get and set (we should allow only one way of doing certain things).\n *\n * @param lib Zustand api interface\n * @param key Zustand persist local storage key\n */\nexport function generateApiFn<S extends State>(lib: StoreLib<S>, key: string) {\n\treturn {\n\t\tgetInitialState: lib.getInitialState,\n\t\tgetState: lib.getState,\n\t\tpersist: augmentPersist(lib, key),\n\t\tsetState: lib.setState,\n\t\tsubscribe: lib.subscribe,\n\t}\n}\n\nfunction augmentPersist<S extends State>(lib: StoreLib<S>, key: string) {\n\tif ('persist' in lib) {\n\t\tconst augmented: any = lib.persist\n\t\taugmented.read = () => {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(localStorage?.getItem(key) ?? '')?.state\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t}\n\n\t\treturn augmented\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\n\n/**\n * Generates getters for store.get. In the past getters were generated as functions, but I\n * came to the conclusion that it's better and simpler to return the whole state.\n *\n * @param lib Zustand api interface\n */\nexport function generateGetFn<S extends State>(lib: StoreLib<S>) {\n\treturn generateGetFnBase(lib)\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GetRecord, SetRecord, State, StoreApi, UseRecord } from '../types'\nimport { generateUseFnBase } from './generateUseFnBase'\n\n/**\n * Function that restrict access to the store and store api.\n *\n * @param privateState Property names to be made private like ['foo', 'bar']\n * @param mergedState Final state of the store\n * @param api Returned store API\n * @param lib Zustand api interface\n */\nexport function restrictState<\n\tS extends State,\n\tKey extends keyof S,\n\tGetters extends GetRecord<any>,\n\tSetters extends SetRecord<any>,\n>(privateState: Key[], mergedState: S, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\treturn {\n\t\tapi: api.api,\n\t\tset: api.set,\n\t\tuse: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getters = Object.keys(api.use).reduce(\n\t\t\t\t\t\t(acc, key) =>\n\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t: { ...acc, [key]: (api.use as UseRecord<any>)[key] },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(generateUseFnBase(lib), getters)\n\t\t\t\t})()\n\t\t\t: api.use,\n\t\tget: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getFn = () =>\n\t\t\t\t\t\tObject.entries(api.get()).reduce(\n\t\t\t\t\t\t\t(acc, [key, val]) =>\n\t\t\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t\t\t: { ...acc, [key]: val },\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(getFn, api.get)\n\t\t\t\t})()\n\t\t\t: api.get,\n\t}\n}\n","import { definePlugin } from '../lib/definePlugin'\n\n/**\n * Basic plugin example, that extends store with custom setter.\n */\nexport const withReset = definePlugin((store) =>\n\tstore.extendSetters(({ api, set }) => ({\n\t\treset: () => {\n\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t},\n\t}))\n)\n"],"mappings":"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","names":["definePlugin","fn","devtools","persist","createVanillaStore","shallow","shallow","ErrorStackParser","generateSetterName","stack","index","entry","generateSetFnBase","lib","log","updater","replace","name","current","payload","shallow","generateSetterName","generateSetFn","lib","key","log","setters","generateSetFnBase","value","shallow","state","generateSetterName","identity","arg","pick","obj","keys","acc","k","shallow","useStoreWithEqualityFn","generateUseFnStep","state","getters","path","lib","key","newPath","equalityFn","getFromPath","data","shallow","useStoreWithEqualityFn","generateUseFnBase","lib","selector","identity","equality","shallow","useStoreWithEqualityFn","s","pick","generateUseFn","lib","key","getters","generateUseFnBase","generateUseFnStep","pick","extendByState","builder","api","lib","log","newState","generateUseFn","generateSetFn","shallow","useStoreWithEqualityFn","generateGetFnBase","lib","isEqualityOptions","value","extendGetters","builder","api","lib","methods","getters","key","args","lastArg","actualArgs","useStoreWithEqualityFn","shallow","generateUseFnBase","generateGetFnBase","extendSetters","builder","api","lib","log","setters","generateSetFnBase","baseSet","acc","name","func","args","generateApiFn","lib","key","augmentPersist","augmented","generateGetFn","lib","generateGetFnBase","restrictState","privateState","mergedState","api","lib","getters","acc","key","generateUseFnBase","val","config","setGlobalConfig","newConfig","createStore","initialState","options","name","middlewares","initializer","persistId","shouldLog","devtools","persist","storeLib","createVanillaStore","generateApiFn","generateGetFn","generateUseFn","generateSetFn","plugin","builder","extendGetters","extendSetters","extendByState","publicState","restrictState","withReset","store","api","set"]}
|
package/package.json
CHANGED