zustand-lite 0.3.2 โ†’ 0.3.4

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/README.md CHANGED
@@ -344,8 +344,6 @@ const store = createStore({}, { plugins: [reset] })
344
344
 
345
345
  **Any plugin state, getters and setters will be available for usage inside your own store.**
346
346
 
347
- ---
348
-
349
347
  ## ๐Ÿงช Middlewares Integration
350
348
 
351
349
  You can enable the most useful middlewares:
@@ -375,20 +373,16 @@ You can enable the most useful middlewares:
375
373
  - Ability to specify equality function for extended getters. It's possible now, but requires to
376
374
  import hook from 'zustand' package, which is suboptimal **(available from version 3.0.0 with use() function or deep auto-generated selectors. Still no possible for cutom getters)**.
377
375
 
378
- ---
379
376
 
380
377
  ## ๐Ÿงฑ Built With
381
378
 
382
379
  - [Zustand](https://github.com/pmndrs/zustand)
383
380
  - Inspired by [zustand-x](https://github.com/udecode/zustand-x)
384
381
 
385
- ---
386
-
387
382
  ## ๐Ÿ“˜ License
388
383
 
389
384
  MIT โ€” free to use, extend, and improve.
390
385
 
391
- ---
392
386
 
393
387
  ## ๐Ÿค Contributing
394
388
 
@@ -400,5 +394,3 @@ zustand-lite/plugin-*
400
394
  ```
401
395
 
402
396
  or adding them to the main repository under the plugins directory.
403
-
404
- ---
package/dist/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var l=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var L=(e,t)=>{for(var o in t)l(e,o,{get:t[o],enumerable:!0})},q=(e,t,o,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of R(t))!U.call(e,r)&&r!==o&&l(e,r,{get:()=>t[r],enumerable:!(s=w(t,r))||s.enumerable});return e};var v=e=>q(l({},"__esModule",{value:!0}),e);var I={};L(I,{createStore:()=>E,reset:()=>j});module.exports=v(I);var a=require("zustand/middleware"),D=require("zustand/vanilla");function p(e){return{getInitialState:e.getInitialState,subscribe:e.subscribe}}function f(e){return()=>e.getState()}function F(){return new Error()?.stack?.split(`
2
- `)[3].trim().split(" ")[1].split("Object.")[1]??"setState"}function c(e,t){let o=(s,r,n)=>{e.setState(s,r,t?{type:n??F(),payload:s}:void 0)};return Object.keys(e.getState()).forEach(s=>{o[s]=r=>{e.getState()[s]!==r&&e.setState(n=>({...n,[s]:r}),!1,t?{type:s,payload:{[s]:r}}:void 0)}}),o}var A=require("zustand/shallow"),y=require("zustand/traditional");var g=require("zustand/shallow"),x=require("zustand/traditional");function m(e,t,o,s){typeof e=="object"&&e!==null&&Object.keys(e).forEach(r=>{let n=[...o,r];Object.defineProperty(t,r,{value:(S=g.shallow)=>(0,x.useStoreWithEqualityFn)(s,u=>z(u,n),S),writable:!0,configurable:!0,enumerable:!0}),m(e[r],t[r],n,s)})}function z(e,t){let o=e;for(let s of t)if(o=o[s],!o)return o;return o}function G(e){let t=(o,s=A.shallow)=>(0,y.useStoreWithEqualityFn)(e,o,s);return m(e.getState(),t,[],e),t}var b=require("zustand/shallow"),P=require("zustand/traditional");function B(e,t,o){let s=e(t);return Object.keys(s).forEach(r=>{t.use[r]=(...n)=>(0,P.useStoreWithEqualityFn)(o,()=>s[r](...n),b.shallow)}),t.get=Object.assign(t.get,s),t}function O(e,t){return t.set=Object.assign(t.set,e(t)),t}function h(e,t,o){return{api:o.api,set:o.set,use:e?Object.keys(o.use).reduce((s,r)=>t[r]&&e.includes(r)?s:{...s,[r]:o.use[r]},{}):o.use,get:e?()=>Object.entries(o.get()).reduce((s,[r,n])=>t[r]&&e.includes(r)?s:{...s,[r]:n},{}):o.get}}function E(e,t){let{name:o="zustand-lite",plugins:s=[],middlewares:r={}}=t??{},n=e;s.forEach(i=>{i.creates&&(n={...n,...i.creates()})});let S=()=>n;r.devtools&&(S=(0,a.devtools)(S,r.devtools===!0?{name:"zustand-lite",store:o}:r.devtools)),r.persist&&(S=(0,a.persist)(S,r.persist===!0?{name:o}:r.persist));let u=(0,D.createStore)(S),d={api:p(u),get:f(u),set:c(u,!!r.devtools),use:G(u),extendGetters(i){return B(i,this,u)},extendSetters(i){return O(i,this)},restrictState(i=[]){return h(i,n,this)}};return s.forEach(i=>{i.extends&&(d=i.extends(d))}),d}var j={extends:e=>e.extendSetters(({api:t,set:o})=>({reset:()=>{o(t.getInitialState?.()??{},!0)}}))};0&&(module.exports={createStore,reset});
1
+ "use strict";var d=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var r in t)d(e,r,{get:t[r],enumerable:!0})},I=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of q(t))!v.call(e,o)&&o!==r&&d(e,o,{get:()=>t[o],enumerable:!(n=R(t,o))||n.enumerable});return e};var W=e=>I(d({},"__esModule",{value:!0}),e);var N={};z(N,{createStore:()=>U,reset:()=>w});module.exports=W(N);var f=require("zustand/middleware"),E=require("zustand/vanilla");function x(e){return{getInitialState:e.getInitialState,subscribe:e.subscribe}}function p(e){return()=>e.getState()}function b(e){return p(e)}function C(){return new Error()?.stack?.split(`
2
+ `)[3].trim().split(" ")[1].split("setter.")[1]??"setState"}function m(e,t){return(r,n,o)=>{e.setState(r,n,t?{type:o??C(),payload:r}:void 0)}}function A(e,t){let r=m(e,t);return Object.keys(e.getState()).forEach(n=>{r[n]=o=>{e.getState()[n]!==o&&e.setState(i=>({...i,[n]:o}),!1,t?{type:n,payload:{[n]:o}}:void 0)}}),r}var y=require("zustand/shallow"),G=require("zustand/traditional");function l(e,t,r,n){typeof e=="object"&&e!==null&&Object.keys(e).forEach(o=>{let i=[...r,o];Object.defineProperty(t,o,{value:(s=y.shallow)=>(0,G.useStoreWithEqualityFn)(n,S=>K(S,i),s),writable:!0,configurable:!0,enumerable:!0}),l(e[o],t[o],i,n)})}function K(e,t){let r=e;for(let n of t)if(r=r[n],!r)return r;return r}var L=require("zustand/shallow"),h=require("zustand/traditional");function u(e){return(t,r=L.shallow)=>(0,h.useStoreWithEqualityFn)(e,t,r)}function P(e){let t=u(e);return l(e.getState(),t,[],e),t}var B=require("zustand/shallow"),F=require("zustand/traditional");function O(e,t,r){let n=e(t),o={};return Object.keys(n).forEach(i=>{o[i]=(...s)=>(0,F.useStoreWithEqualityFn)(r,()=>n[i](...s),B.shallow)}),t.use=Object.assign(u(r),t.use,o),t.get=Object.assign(p(r),t.get,n),t}function j(e,t,r,n){let o=m(r,n);return t.set=Object.assign(o,t.set,e(t)),t}function D(e,t,r,n){return{api:r.api,set:r.set,use:e?(()=>{let o=Object.keys(r.use).reduce((i,s)=>t[s]&&e.includes(s)?i:{...i,[s]:r.use[s]},{});return Object.assign(u(n),o)})():r.use,get:e?Object.assign(()=>Object.entries(r.get()).reduce((i,[s,S])=>t[s]&&e.includes(s)?i:{...i,[s]:S},{}),r.get):r.get}}function U(e,t){let{name:r="zustand-lite",plugins:n=[],middlewares:o={}}=t??{},i=e;n.forEach(a=>{a.creates&&(i={...i,...a.creates()})});let s=()=>i;o.devtools&&(s=(0,f.devtools)(s,o.devtools===!0?{name:"zustand-lite",store:r}:o.devtools)),o.persist&&(s=(0,f.persist)(s,o.persist===!0?{name:r}:o.persist));let S=(0,E.createStore)(s),g={api:x(S),get:b(S),use:P(S),set:A(S,!!o.devtools),extendGetters(a){return O(a,this,S)},extendSetters(a){return j(a,this,S,!!o.devtools)},restrictState(a=[]){return D(a,i,this,S)}},c=g;return n.forEach(a=>{a.extends&&(c=a.extends(g))}),c}var w={extends:e=>e.extendSetters(({api:t,set:r})=>({reset:()=>{r(t.getInitialState?.()??{},!0)}}))};0&&(module.exports={createStore,reset});
3
3
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/createStore.ts","../src/lib/generateApi.ts","../src/lib/generateGet.ts","../src/lib/generateSet.ts","../src/lib/generateUse.ts","../src/lib/generateUseStep.ts","../src/lib/extendGetters.ts","../src/lib/extendSetters.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["export type { StoreApiPlugin } from './types'\nexport { createStore } from './lib/createStore'\nexport { reset } from './plugins/reset'\n","/**\n * Entire zustand-lite no-boilerplate functionality is inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors and 3th party\n * zustand-x repository: https://github.com/udecode/zustand-x.\n **/\nimport { DevtoolsOptions, PersistOptions, devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tAugmentedApiData,\n\tAugmentedGetters,\n\tAugmentedSetters,\n\tGettersBuilder,\n\tSettersBuilder,\n\tState,\n\tStoreApi,\n\tStoreApiPluginList,\n} from '../types'\nimport { generateApi } from './generateApi'\nimport { generateGet } from './generateGet'\nimport { generateSet } from './generateSet'\nimport { generateUse } from './generateUse'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { restrictState } from './restrictState'\n\nexport function createStore<S extends State, Plugins extends StoreApiPluginList = []>(\n\tinitialState: S,\n\toptions?: {\n\t\tname?: string\n\t\tplugins?: [...Plugins]\n\t\tmiddlewares?: { devtools?: true | DevtoolsOptions; persist?: true | PersistOptions<any> }\n\t}\n): Plugins extends []\n\t? StoreApi<S>\n\t: StoreApi<AugmentedApiData<S, Plugins>, AugmentedGetters<Plugins>, AugmentedSetters<Plugins>> {\n\tconst { name = 'zustand-lite', plugins = [], middlewares = {} } = options ?? {}\n\n\t// Merge state from plugins to be available for future use.\n\tlet mergedState: any = initialState\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.creates) {\n\t\t\tmergedState = { ...mergedState, ...plugin.creates() }\n\t\t}\n\t})\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => mergedState\n\n\tif (middlewares.devtools) {\n\t\tinitializer = devtools(\n\t\t\tinitializer,\n\t\t\tmiddlewares.devtools === true\n\t\t\t\t? { name: 'zustand-lite', store: name }\n\t\t\t\t: middlewares.devtools\n\t\t)\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(\n\t\t\tinitializer,\n\t\t\tmiddlewares.persist === true ? { name } : middlewares.persist\n\t\t)\n\t}\n\n\t// Create a vanilla zustand store to wrap.\n\tconst storeApi: any = createVanillaStore(initializer)\n\n\t// Create zustand-lite wrapper.\n\tlet store: any = {\n\t\tapi: generateApi(storeApi),\n\t\tget: generateGet(storeApi),\n\t\tset: generateSet(storeApi, !!middlewares.devtools),\n\t\tuse: generateUse(storeApi),\n\t\textendGetters<Builder extends GettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendGetters(builder, this, storeApi)\n\t\t},\n\t\textendSetters<Builder extends SettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendSetters(builder, this)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, mergedState, this)\n\t\t},\n\t}\n\n\t// Extend store getters and setters with plugins.\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.extends) {\n\t\t\tstore = plugin.extends(store)\n\t\t}\n\t})\n\n\treturn store\n}\n","import { StoreApi } 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.\n * @param api Zustand api interface\n */\nexport function generateApi<S extends State>(api: StoreApi<S>) {\n\treturn { getInitialState: api.getInitialState, subscribe: api.subscribe }\n}\n","import { StoreApi } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\nexport function generateGet<S extends State>(api: StoreApi<S>) {\n\treturn () => api.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\n\nfunction setterName() {\n\treturn new Error()?.stack?.split('\\n')[3].trim().split(' ')[1].split('Object.')[1] ?? 'setState'\n}\n\n/**\n * Generates automatic setters like store.set.foo(value)\n * @param lib Zustand api interface\n * @param hasDevtools If devtools were activated for this store\n */\nexport function generateSet<S extends State>(lib: StoreLib<S>, hasDevtools: boolean): SetRecord<S> {\n\tconst setters = (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tlib.setState(\n\t\t\tupdater,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if devtools are disabled.\n\t\t\thasDevtools ? { type: name ?? setterName(), payload: updater } : undefined\n\t\t)\n\t}\n\n\tObject.keys(lib.getState()).forEach((key) => {\n\t\t// @ts-ignore\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (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 devtools are disabled.\n\t\t\t\thasDevtools ? { type: 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 { useStoreWithEqualityFn } from 'zustand/traditional'\n\nimport { StoreApi } from 'zustand'\n\nimport { State, EqualityChecker } from '../types'\nimport { generateUseStep } from './generateUseStep'\n\n/**\n * Generates automatic getters like store.use.foo()\n * @param api Zustand api interface\n */\nexport function generateUse<S extends State, U>(api: StoreApi<S>) {\n\tconst getters = (selector: (state: S) => U, equality: EqualityChecker<U> = shallow) => {\n\t\treturn useStoreWithEqualityFn(api, selector, equality)\n\t}\n\n\tgenerateUseStep(api.getState(), getters, [], api)\n\treturn getters\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\nexport function generateUseStep(\n\tstate: any,\n\tgetters: any,\n\tpath: string[],\n\tapi: any,\n) {\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\tapi,\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\tgenerateUseStep(state[key], getters[key], newPath, api)\n\t\t})\n\t}\n}\n\nfunction getFromPath(state: any, path: string[]) {\n\tlet data = state\n\n\tfor (let 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'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { Default, GettersBuilder, State, StoreApi } from '../types'\n\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst newGetters = builder(api)\n\n\tObject.keys(newGetters).forEach((key) => {\n\t\t// @ts-ignore\n\t\tapi.use[key] = (...args: any[]) =>\n\t\t\tuseStoreWithEqualityFn(\n\t\t\t\tlib,\n\t\t\t\t() => {\n\t\t\t\t\treturn newGetters[key](...args)\n\t\t\t\t},\n\t\t\t\tshallow\n\t\t\t)\n\t})\n\n\tapi.get = Object.assign(api.get, newGetters)\n\treturn api\n}\n","import { Default, SettersBuilder, State, StoreApi } from '../types'\n\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>) {\n\tapi.set = Object.assign(api.set, builder(api))\n\treturn api\n}\n","import { GetRecord, SetRecord, State, StoreApi } from '../types'\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, thisApi: StoreApi<S, Getters, Setters>) {\n\treturn {\n\t\tapi: thisApi.api,\n\t\tset: thisApi.set,\n\t\tuse: privateState\n\t\t\t? Object.keys(thisApi.use).reduce(\n\t\t\t\t\t(acc, key) =>\n\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t: { ...acc, [key]: thisApi.use[key] },\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t: thisApi.use,\n\t\tget: privateState\n\t\t\t? () =>\n\t\t\t\t\tObject.entries(thisApi.get()).reduce(\n\t\t\t\t\t\t(acc, [key, val]) =>\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]: val },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\t\t\t: thisApi.get,\n\t}\n}\n","import { StoreApiPlugin } from '../types'\n\ntype PluginResetSetters = { reset: () => void }\n\nexport const reset: StoreApiPlugin<{}, {}, PluginResetSetters> = {\n\textends: (store) => {\n\t\treturn store.extendSetters(({ api, set }) => ({\n\t\t\treset: () => {\n\t\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t\t},\n\t\t}))\n\t},\n}\n"],"mappings":"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","names":["index_exports","__export","createStore","reset","__toCommonJS","import_middleware","import_vanilla","generateApi","api","generateGet","api","setterName","generateSet","lib","hasDevtools","setters","updater","replace","name","key","value","state","import_shallow","import_traditional","import_shallow","import_traditional","generateUseStep","state","getters","path","api","key","newPath","equalityFn","getFromPath","data","generateUse","api","getters","selector","equality","generateUseStep","import_shallow","import_traditional","extendGetters","builder","api","lib","newGetters","key","args","extendSetters","builder","api","restrictState","privateState","mergedState","thisApi","acc","key","val","createStore","initialState","options","name","plugins","middlewares","mergedState","plugin","initializer","storeApi","createVanillaStore","store","generateApi","generateGet","generateSet","generateUse","builder","extendGetters","extendSetters","publicState","restrictState","reset","store","api","set"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/createStore.ts","../src/lib/generateApi.ts","../src/lib/generateGetFn.ts","../src/lib/generateGet.ts","../src/lib/generateSetFn.ts","../src/lib/generateSet.ts","../src/lib/generateUseStep.ts","../src/lib/generateUseFn.ts","../src/lib/generateUse.ts","../src/lib/extendGetters.ts","../src/lib/extendSetters.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["export type { StoreApiPlugin } from './types'\nexport { createStore } from './lib/createStore'\nexport { reset } from './plugins/reset'\n","/**\n * Entire zustand-lite no-boilerplate functionality is inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors and 3th party\n * zustand-x repository: https://github.com/udecode/zustand-x.\n **/\nimport { DevtoolsOptions, PersistOptions, devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tAugmentedApiData,\n\tAugmentedGetters,\n\tAugmentedSetters,\n\tGettersBuilder,\n\tSettersBuilder,\n\tState,\n\tStoreApi,\n\tStoreApiPluginList,\n} from '../types'\nimport { generateApi } from './generateApi'\nimport { generateGet } from './generateGet'\nimport { generateSet } from './generateSet'\nimport { generateUse } from './generateUse'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { restrictState } from './restrictState'\n\nexport function createStore<S extends State, Plugins extends StoreApiPluginList = []>(\n\tinitialState: S,\n\toptions?: {\n\t\tname?: string\n\t\tplugins?: [...Plugins]\n\t\tmiddlewares?: { devtools?: true | DevtoolsOptions; persist?: true | PersistOptions<any> }\n\t}\n): Plugins extends []\n\t? StoreApi<S>\n\t: StoreApi<AugmentedApiData<S, Plugins>, AugmentedGetters<Plugins>, AugmentedSetters<Plugins>> {\n\tconst { name = 'zustand-lite', plugins = [], middlewares = {} } = options ?? {}\n\n\t// Merge state from plugins to be available for future use.\n\tlet mergedState: any = initialState\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.creates) {\n\t\t\tmergedState = { ...mergedState, ...plugin.creates() }\n\t\t}\n\t})\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => mergedState\n\n\tif (middlewares.devtools) {\n\t\tinitializer = devtools(\n\t\t\tinitializer,\n\t\t\tmiddlewares.devtools === true\n\t\t\t\t? { name: 'zustand-lite', store: name }\n\t\t\t\t: middlewares.devtools\n\t\t)\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(\n\t\t\tinitializer,\n\t\t\tmiddlewares.persist === true ? { name } : 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\tconst storeApi: any = {\n\t\tapi: generateApi(storeLib),\n\t\tget: generateGet(storeLib),\n\t\tuse: generateUse(storeLib),\n\t\tset: generateSet(storeLib, !!middlewares.devtools),\n\t\textendGetters<Builder extends GettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendGetters(builder, this, storeLib)\n\t\t},\n\t\textendSetters<Builder extends SettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendSetters(builder, this, storeLib, !!middlewares.devtools)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, mergedState, this, storeLib)\n\t\t},\n\t}\n\n\t// Extend store getters and setters with plugins.\n\tlet result = storeApi\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.extends) {\n\t\t\tresult = plugin.extends(storeApi)\n\t\t}\n\t})\n\n\treturn result\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 * @param lib Zustand api interface\n */\nexport function generateApi<S extends State>(lib: StoreLib<S>) {\n\treturn { getInitialState: lib.getInitialState, subscribe: lib.subscribe }\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Generates getState function for store.get()\n * @param lib Zustand api interface\n */\nexport function generateGetFn<S extends State>(lib: StoreLib<S>) {\n\treturn () => lib.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateGetFn } from './generateGetFn'\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 * @param lib Zustand api interface\n */\nexport function generateGet<S extends State>(lib: StoreLib<S>) {\n\treturn generateGetFn(lib)\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n// A bit hacky way, but the working method, of obtaining caller function name at any level.\nfunction getSetterName() {\n\treturn new Error()?.stack?.split('\\n')[3].trim().split(' ')[1].split('setter.')[1] ?? 'setState'\n}\n\n/**\n * Generates automatic setState function for store like store.set({ value })\n * @param lib Zustand api interface\n * @param hasDevtools If devtools were activated for this store\n */\nexport function generateSetFn<S extends State>(lib: StoreLib<S>, hasDevtools: boolean) {\n\treturn (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tlib.setState(\n\t\t\tupdater,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if devtools are disabled.\n\t\t\thasDevtools ? { type: name ?? getSetterName(), payload: updater } : undefined\n\t\t)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\nimport { generateSetFn } from './generateSetFn'\n\n/**\n * Generates automatic setters like store.set.foo(value)\n * @param lib Zustand api interface\n * @param hasDevtools If devtools were activated for this store\n */\nexport function generateSet<S extends State>(lib: StoreLib<S>, hasDevtools: boolean) {\n\tconst setters: any = generateSetFn(lib, hasDevtools)\n\n\tObject.keys(lib.getState()).forEach((key) => {\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (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 devtools are disabled.\n\t\t\t\thasDevtools ? { type: 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 { 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 * @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 generateUseStep(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\tgenerateUseStep(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, EqualityChecker } from '../types'\n\n/**\n * Generates automatic getters like store.use.foo()\n * @param lib Zustand api interface\n */\nexport function generateUseFn<S extends State, U>(lib: StoreLib<S>) {\n\treturn (selector: (state: S) => U, equality: EqualityChecker<U> = shallow) => {\n\t\treturn useStoreWithEqualityFn(lib, selector, equality)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { generateUseStep } from './generateUseStep'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Generates automatic store hook subscribe function store.use()\n * @param lib Zustand api interface\n */\nexport function generateUse<S extends State>(lib: StoreLib<S>) {\n\tconst getters = generateUseFn(lib)\n\tgenerateUseStep(lib.getState(), getters, [], lib)\n\treturn getters\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { Default, GettersBuilder, State, StoreApi } from '../types'\nimport { generateGetFn } from './generateGetFn'\nimport { generateUseFn } from './generateUseFn'\n\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, store: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst methods: any = builder(store)\n\tconst getters: any = {}\n\n\tObject.keys(methods).forEach((key) => {\n\t\tgetters[key] = (...args: any[]) =>\n\t\t\tuseStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\n\t})\n\n\tstore.use = Object.assign(generateUseFn(lib), store.use, getters)\n\tstore.get = Object.assign(generateGetFn(lib), store.get, methods)\n\treturn store\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { Default, SettersBuilder, State, StoreApi } from '../types'\nimport { generateSetFn } from './generateSetFn'\n\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, store: StoreApi<S, Getters, Setters>, lib: StoreLib<S>, hasDevtools: boolean) {\n\tconst setters = generateSetFn(lib, hasDevtools)\n\tstore.set = Object.assign(setters, store.set, builder(store))\n\treturn store\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GetRecord, SetRecord, State, StoreApi } from '../types'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Function that restrict access to the store and store api.\n * @param privateState Property names to be made private like ['foo', 'bar']\n * @param mergedState Final state of the store\n * @param store 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, store: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\treturn {\n\t\tapi: store.api,\n\t\tset: store.set,\n\t\tuse: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getters = Object.keys(store.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]: store.use[key] },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(generateUseFn(lib), getters)\n\t\t\t\t})()\n\t\t\t: store.use,\n\t\tget: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getFn = () =>\n\t\t\t\t\t\tObject.entries(store.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, store.get)\n\t\t\t\t})()\n\t\t\t: store.get,\n\t}\n}\n","import { StoreApiPlugin } from '../types'\n\ntype PluginResetSetters = { reset: () => void }\n\n/**\n * Basic plugin example, that extends store with custom setter.\n */\nexport const reset: StoreApiPlugin<{}, {}, PluginResetSetters> = {\n\textends: (store) => {\n\t\treturn store.extendSetters(({ api, set }) => ({\n\t\t\treset: () => {\n\t\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t\t},\n\t\t}))\n\t},\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,EAAA,UAAAC,IAAA,eAAAC,EAAAJ,GCKA,IAAAK,EAAmE,8BACnEC,EAAkD,2BCG3C,SAASC,EAA6BC,EAAkB,CAC9D,MAAO,CAAE,gBAAiBA,EAAI,gBAAiB,UAAWA,EAAI,SAAU,CACzE,CCHO,SAASC,EAA+BC,EAAkB,CAChE,MAAO,IAAMA,EAAI,SAAS,CAC3B,CCAO,SAASC,EAA6BC,EAAkB,CAC9D,OAAOC,EAAcD,CAAG,CACzB,CCPA,SAASE,GAAgB,CACxB,OAAO,IAAI,MAAM,GAAG,OAAO,MAAM;AAAA,CAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,GAAK,UACvF,CAOO,SAASC,EAA+BC,EAAkBC,EAAsB,CACtF,MAAO,CAACC,EAAgCC,EAAmBC,IAAkB,CAC5EJ,EAAI,SACHE,EACAC,EAEAF,EAAc,CAAE,KAAMG,GAAQN,EAAc,EAAG,QAASI,CAAQ,EAAI,MACrE,CACD,CACD,CCbO,SAASG,EAA6BC,EAAkBC,EAAsB,CACpF,IAAMC,EAAeC,EAAcH,EAAKC,CAAW,EAEnD,cAAO,KAAKD,EAAI,SAAS,CAAC,EAAE,QAASI,GAAQ,CAC5CF,EAAQE,CAAG,EAAKC,GAAe,CAC1BL,EAAI,SAAS,EAAEI,CAAG,IAAMC,GAI5BL,EAAI,SACFM,IAAW,CAAE,GAAGA,EAAO,CAACF,CAAG,EAAGC,CAAM,GACrC,GAEAJ,EAAc,CAAE,KAAMG,EAAK,QAAS,CAAE,CAACA,CAAG,EAAGC,CAAM,CAAE,EAAI,MAC1D,CACD,CACD,CAAC,EAEMH,CACR,CC7BA,IAAAK,EAAwB,2BACxBC,EAAuC,+BAUhC,SAASC,EAAgBC,EAAYC,EAAcC,EAAgBC,EAAU,CAC/E,OAAOH,GAAU,UAAYA,IAAU,MAC1C,OAAO,KAAKA,CAAK,EAAE,QAASI,GAAQ,CACnC,IAAMC,EAAU,CAAC,GAAGH,EAAME,CAAG,EAC7B,OAAO,eAAeH,EAASG,EAAK,CACnC,MAAO,CAACE,EAAa,eACb,0BACNH,EACCH,GAAUO,EAAYP,EAAOK,CAAO,EACrCC,CACD,EAED,SAAU,GACV,aAAc,GACd,WAAY,EACb,CAAC,EAEDP,EAAgBC,EAAMI,CAAG,EAAGH,EAAQG,CAAG,EAAGC,EAASF,CAAG,CACvD,CAAC,CAEH,CAEA,SAASI,EAAYP,EAAYE,EAAgB,CAChD,IAAIM,EAAOR,EAEX,QAAWI,KAAOF,EAEjB,GADAM,EAAOA,EAAKJ,CAAG,EACX,CAACI,EACJ,OAAOA,EAIT,OAAOA,CACR,CC5CA,IAAAC,EAAwB,2BACxBC,EAAuC,+BAUhC,SAASC,EAAkCC,EAAkB,CACnE,MAAO,CAACC,EAA2BC,EAA+B,eAC1D,0BAAuBF,EAAKC,EAAUC,CAAQ,CAEvD,CCLO,SAASC,EAA6BC,EAAkB,CAC9D,IAAMC,EAAUC,EAAcF,CAAG,EACjC,OAAAG,EAAgBH,EAAI,SAAS,EAAGC,EAAS,CAAC,EAAGD,CAAG,EACzCC,CACR,CCdA,IAAAG,EAAwB,2BACxBC,EAAuC,+BAOhC,SAASC,EAKdC,EAAkBC,EAAsCC,EAAkB,CAC3E,IAAMC,EAAeH,EAAQC,CAAK,EAC5BG,EAAe,CAAC,EAEtB,cAAO,KAAKD,CAAO,EAAE,QAASE,GAAQ,CACrCD,EAAQC,CAAG,EAAI,IAAIC,OAClB,0BAAuBJ,EAAK,IAAMC,EAAQE,CAAG,EAAE,GAAGC,CAAI,EAAG,SAAO,CAClE,CAAC,EAEDL,EAAM,IAAM,OAAO,OAAOM,EAAcL,CAAG,EAAGD,EAAM,IAAKG,CAAO,EAChEH,EAAM,IAAM,OAAO,OAAOO,EAAcN,CAAG,EAAGD,EAAM,IAAKE,CAAO,EACzDF,CACR,CCrBO,SAASQ,EAKdC,EAAkBC,EAAsCC,EAAkBC,EAAsB,CACjG,IAAMC,EAAUC,EAAcH,EAAKC,CAAW,EAC9C,OAAAF,EAAM,IAAM,OAAO,OAAOG,EAASH,EAAM,IAAKD,EAAQC,CAAK,CAAC,EACrDA,CACR,CCDO,SAASK,EAKdC,EAAqBC,EAAgBC,EAAsCC,EAAkB,CAC9F,MAAO,CACN,IAAKD,EAAM,IACX,IAAKA,EAAM,IACX,IAAKF,GACD,IAAM,CACP,IAAMI,EAAU,OAAO,KAAKF,EAAM,GAAG,EAAE,OACtC,CAACG,EAAKC,IACLL,EAAYK,CAAG,GAAMN,EAA0B,SAASM,CAAG,EACxDD,EACA,CAAE,GAAGA,EAAK,CAACC,CAAG,EAAGJ,EAAM,IAAII,CAAG,CAAE,EACpC,CAAC,CACF,EAEA,OAAO,OAAO,OAAOC,EAAcJ,CAAG,EAAGC,CAAO,CACjD,GAAG,EACFF,EAAM,IACT,IAAKF,EAWK,OAAO,OATA,IACb,OAAO,QAAQE,EAAM,IAAI,CAAC,EAAE,OAC3B,CAACG,EAAK,CAACC,EAAKE,CAAG,IACdP,EAAYK,CAAG,GAAMN,EAA0B,SAASM,CAAG,EACxDD,EACA,CAAE,GAAGA,EAAK,CAACC,CAAG,EAAGE,CAAI,EACzB,CAAC,CACF,EAE2BN,EAAM,GAAG,EAErCA,EAAM,GACV,CACD,CXvBO,SAASO,EACfC,EACAC,EAO+F,CAC/F,GAAM,CAAE,KAAAC,EAAO,eAAgB,QAAAC,EAAU,CAAC,EAAG,YAAAC,EAAc,CAAC,CAAE,EAAIH,GAAW,CAAC,EAG1EI,EAAmBL,EACvBG,EAAQ,QAASG,GAAW,CACvBA,EAAO,UACVD,EAAc,CAAE,GAAGA,EAAa,GAAGC,EAAO,QAAQ,CAAE,EAEtD,CAAC,EAGD,IAAIC,EAAmB,IAAMF,EAEzBD,EAAY,WACfG,KAAc,YACbA,EACAH,EAAY,WAAa,GACtB,CAAE,KAAM,eAAgB,MAAOF,CAAK,EACpCE,EAAY,QAChB,GAGGA,EAAY,UACfG,KAAc,WACbA,EACAH,EAAY,UAAY,GAAO,CAAE,KAAAF,CAAK,EAAIE,EAAY,OACvD,GAID,IAAMI,KAAgB,EAAAC,aAAmBF,CAAW,EAG9CG,EAAgB,CACrB,IAAKC,EAAYH,CAAQ,EACzB,IAAKI,EAAYJ,CAAQ,EACzB,IAAKK,EAAYL,CAAQ,EACzB,IAAKM,EAAYN,EAAU,CAAC,CAACJ,EAAY,QAAQ,EACjD,cAAkEW,EAAkB,CACnF,OAAOC,EAAcD,EAAS,KAAMP,CAAQ,CAC7C,EACA,cAAkEO,EAAkB,CACnF,OAAOE,EAAcF,EAAS,KAAMP,EAAU,CAAC,CAACJ,EAAY,QAAQ,CACrE,EACA,cAAcc,EAAc,CAAC,EAAG,CAC/B,OAAOC,EAAcD,EAAab,EAAa,KAAMG,CAAQ,CAC9D,CACD,EAGIY,EAASV,EACb,OAAAP,EAAQ,QAASG,GAAW,CACvBA,EAAO,UACVc,EAASd,EAAO,QAAQI,CAAQ,EAElC,CAAC,EAEMU,CACR,CYvFO,IAAMC,EAAoD,CAChE,QAAUC,GACFA,EAAM,cAAc,CAAC,CAAE,IAAAC,EAAK,IAAAC,CAAI,KAAO,CAC7C,MAAO,IAAM,CACZA,EAAID,EAAI,kBAAkB,GAAK,CAAC,EAAG,EAAI,CACxC,CACD,EAAE,CAEJ","names":["index_exports","__export","createStore","reset","__toCommonJS","import_middleware","import_vanilla","generateApi","lib","generateGetFn","lib","generateGet","lib","generateGetFn","getSetterName","generateSetFn","lib","hasDevtools","updater","replace","name","generateSet","lib","hasDevtools","setters","generateSetFn","key","value","state","import_shallow","import_traditional","generateUseStep","state","getters","path","lib","key","newPath","equalityFn","getFromPath","data","import_shallow","import_traditional","generateUseFn","lib","selector","equality","generateUse","lib","getters","generateUseFn","generateUseStep","import_shallow","import_traditional","extendGetters","builder","store","lib","methods","getters","key","args","generateUseFn","generateGetFn","extendSetters","builder","store","lib","hasDevtools","setters","generateSetFn","restrictState","privateState","mergedState","store","lib","getters","acc","key","generateUseFn","val","createStore","initialState","options","name","plugins","middlewares","mergedState","plugin","initializer","storeLib","createVanillaStore","storeApi","generateApi","generateGet","generateUse","generateSet","builder","extendGetters","extendSetters","publicState","restrictState","result","reset","store","api","set"]}
package/dist/index.d.cts CHANGED
@@ -74,6 +74,9 @@ declare function createStore<S extends State, Plugins extends StoreApiPluginList
74
74
  type PluginResetSetters = {
75
75
  reset: () => void;
76
76
  };
77
+ /**
78
+ * Basic plugin example, that extends store with custom setter.
79
+ */
77
80
  declare const reset: StoreApiPlugin<{}, {}, PluginResetSetters>;
78
81
 
79
82
  export { type StoreApiPlugin, createStore, reset };
package/dist/index.d.ts CHANGED
@@ -74,6 +74,9 @@ declare function createStore<S extends State, Plugins extends StoreApiPluginList
74
74
  type PluginResetSetters = {
75
75
  reset: () => void;
76
76
  };
77
+ /**
78
+ * Basic plugin example, that extends store with custom setter.
79
+ */
77
80
  declare const reset: StoreApiPlugin<{}, {}, PluginResetSetters>;
78
81
 
79
82
  export { type StoreApiPlugin, createStore, reset };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import{devtools as D,persist as E}from"zustand/middleware";import{createStore as j}from"zustand/vanilla";function l(e){return{getInitialState:e.getInitialState,subscribe:e.subscribe}}function m(e){return()=>e.getState()}function A(){return new Error()?.stack?.split(`
2
- `)[3].trim().split(" ")[1].split("Object.")[1]??"setState"}function p(e,r){let s=(o,t,n)=>{e.setState(o,t,r?{type:n??A(),payload:o}:void 0)};return Object.keys(e.getState()).forEach(o=>{s[o]=t=>{e.getState()[o]!==t&&e.setState(n=>({...n,[o]:t}),!1,r?{type:o,payload:{[o]:t}}:void 0)}}),s}import{shallow as P}from"zustand/shallow";import{useStoreWithEqualityFn as B}from"zustand/traditional";import{shallow as y}from"zustand/shallow";import{useStoreWithEqualityFn as G}from"zustand/traditional";function d(e,r,s,o){typeof e=="object"&&e!==null&&Object.keys(e).forEach(t=>{let n=[...s,t];Object.defineProperty(r,t,{value:(S=y)=>G(o,u=>b(u,n),S),writable:!0,configurable:!0,enumerable:!0}),d(e[t],r[t],n,o)})}function b(e,r){let s=e;for(let o of r)if(s=s[o],!s)return s;return s}function f(e){let r=(s,o=P)=>B(e,s,o);return d(e.getState(),r,[],e),r}import{shallow as O}from"zustand/shallow";import{useStoreWithEqualityFn as h}from"zustand/traditional";function c(e,r,s){let o=e(r);return Object.keys(o).forEach(t=>{r.use[t]=(...n)=>h(s,()=>o[t](...n),O)}),r.get=Object.assign(r.get,o),r}function g(e,r){return r.set=Object.assign(r.set,e(r)),r}function x(e,r,s){return{api:s.api,set:s.set,use:e?Object.keys(s.use).reduce((o,t)=>r[t]&&e.includes(t)?o:{...o,[t]:s.use[t]},{}):s.use,get:e?()=>Object.entries(s.get()).reduce((o,[t,n])=>r[t]&&e.includes(t)?o:{...o,[t]:n},{}):s.get}}function w(e,r){let{name:s="zustand-lite",plugins:o=[],middlewares:t={}}=r??{},n=e;o.forEach(i=>{i.creates&&(n={...n,...i.creates()})});let S=()=>n;t.devtools&&(S=D(S,t.devtools===!0?{name:"zustand-lite",store:s}:t.devtools)),t.persist&&(S=E(S,t.persist===!0?{name:s}:t.persist));let u=j(S),a={api:l(u),get:m(u),set:p(u,!!t.devtools),use:f(u),extendGetters(i){return c(i,this,u)},extendSetters(i){return g(i,this)},restrictState(i=[]){return x(i,n,this)}};return o.forEach(i=>{i.extends&&(a=i.extends(a))}),a}var R={extends:e=>e.extendSetters(({api:r,set:s})=>({reset:()=>{s(r.getInitialState?.()??{},!0)}}))};export{w as createStore,R as reset};
1
+ import{devtools as E,persist as U}from"zustand/middleware";import{createStore as w}from"zustand/vanilla";function g(e){return{getInitialState:e.getInitialState,subscribe:e.subscribe}}function p(e){return()=>e.getState()}function c(e){return p(e)}function L(){return new Error()?.stack?.split(`
2
+ `)[3].trim().split(" ")[1].split("setter.")[1]??"setState"}function m(e,r){return(t,n,o)=>{e.setState(t,n,r?{type:o??L(),payload:t}:void 0)}}function x(e,r){let t=m(e,r);return Object.keys(e.getState()).forEach(n=>{t[n]=o=>{e.getState()[n]!==o&&e.setState(i=>({...i,[n]:o}),!1,r?{type:n,payload:{[n]:o}}:void 0)}}),t}import{shallow as h}from"zustand/shallow";import{useStoreWithEqualityFn as P}from"zustand/traditional";function f(e,r,t,n){typeof e=="object"&&e!==null&&Object.keys(e).forEach(o=>{let i=[...t,o];Object.defineProperty(r,o,{value:(s=h)=>P(n,S=>B(S,i),s),writable:!0,configurable:!0,enumerable:!0}),f(e[o],r[o],i,n)})}function B(e,r){let t=e;for(let n of r)if(t=t[n],!t)return t;return t}import{shallow as F}from"zustand/shallow";import{useStoreWithEqualityFn as O}from"zustand/traditional";function u(e){return(r,t=F)=>O(e,r,t)}function b(e){let r=u(e);return f(e.getState(),r,[],e),r}import{shallow as j}from"zustand/shallow";import{useStoreWithEqualityFn as D}from"zustand/traditional";function A(e,r,t){let n=e(r),o={};return Object.keys(n).forEach(i=>{o[i]=(...s)=>D(t,()=>n[i](...s),j)}),r.use=Object.assign(u(t),r.use,o),r.get=Object.assign(p(t),r.get,n),r}function y(e,r,t,n){let o=m(t,n);return r.set=Object.assign(o,r.set,e(r)),r}function G(e,r,t,n){return{api:t.api,set:t.set,use:e?(()=>{let o=Object.keys(t.use).reduce((i,s)=>r[s]&&e.includes(s)?i:{...i,[s]:t.use[s]},{});return Object.assign(u(n),o)})():t.use,get:e?Object.assign(()=>Object.entries(t.get()).reduce((i,[s,S])=>r[s]&&e.includes(s)?i:{...i,[s]:S},{}),t.get):t.get}}function R(e,r){let{name:t="zustand-lite",plugins:n=[],middlewares:o={}}=r??{},i=e;n.forEach(a=>{a.creates&&(i={...i,...a.creates()})});let s=()=>i;o.devtools&&(s=E(s,o.devtools===!0?{name:"zustand-lite",store:t}:o.devtools)),o.persist&&(s=U(s,o.persist===!0?{name:t}:o.persist));let S=w(s),d={api:g(S),get:c(S),use:b(S),set:x(S,!!o.devtools),extendGetters(a){return A(a,this,S)},extendSetters(a){return y(a,this,S,!!o.devtools)},restrictState(a=[]){return G(a,i,this,S)}},l=d;return n.forEach(a=>{a.extends&&(l=a.extends(d))}),l}var q={extends:e=>e.extendSetters(({api:r,set:t})=>({reset:()=>{t(r.getInitialState?.()??{},!0)}}))};export{R as createStore,q as reset};
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/createStore.ts","../src/lib/generateApi.ts","../src/lib/generateGet.ts","../src/lib/generateSet.ts","../src/lib/generateUse.ts","../src/lib/generateUseStep.ts","../src/lib/extendGetters.ts","../src/lib/extendSetters.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["/**\n * Entire zustand-lite no-boilerplate functionality is inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors and 3th party\n * zustand-x repository: https://github.com/udecode/zustand-x.\n **/\nimport { DevtoolsOptions, PersistOptions, devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tAugmentedApiData,\n\tAugmentedGetters,\n\tAugmentedSetters,\n\tGettersBuilder,\n\tSettersBuilder,\n\tState,\n\tStoreApi,\n\tStoreApiPluginList,\n} from '../types'\nimport { generateApi } from './generateApi'\nimport { generateGet } from './generateGet'\nimport { generateSet } from './generateSet'\nimport { generateUse } from './generateUse'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { restrictState } from './restrictState'\n\nexport function createStore<S extends State, Plugins extends StoreApiPluginList = []>(\n\tinitialState: S,\n\toptions?: {\n\t\tname?: string\n\t\tplugins?: [...Plugins]\n\t\tmiddlewares?: { devtools?: true | DevtoolsOptions; persist?: true | PersistOptions<any> }\n\t}\n): Plugins extends []\n\t? StoreApi<S>\n\t: StoreApi<AugmentedApiData<S, Plugins>, AugmentedGetters<Plugins>, AugmentedSetters<Plugins>> {\n\tconst { name = 'zustand-lite', plugins = [], middlewares = {} } = options ?? {}\n\n\t// Merge state from plugins to be available for future use.\n\tlet mergedState: any = initialState\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.creates) {\n\t\t\tmergedState = { ...mergedState, ...plugin.creates() }\n\t\t}\n\t})\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => mergedState\n\n\tif (middlewares.devtools) {\n\t\tinitializer = devtools(\n\t\t\tinitializer,\n\t\t\tmiddlewares.devtools === true\n\t\t\t\t? { name: 'zustand-lite', store: name }\n\t\t\t\t: middlewares.devtools\n\t\t)\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(\n\t\t\tinitializer,\n\t\t\tmiddlewares.persist === true ? { name } : middlewares.persist\n\t\t)\n\t}\n\n\t// Create a vanilla zustand store to wrap.\n\tconst storeApi: any = createVanillaStore(initializer)\n\n\t// Create zustand-lite wrapper.\n\tlet store: any = {\n\t\tapi: generateApi(storeApi),\n\t\tget: generateGet(storeApi),\n\t\tset: generateSet(storeApi, !!middlewares.devtools),\n\t\tuse: generateUse(storeApi),\n\t\textendGetters<Builder extends GettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendGetters(builder, this, storeApi)\n\t\t},\n\t\textendSetters<Builder extends SettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendSetters(builder, this)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, mergedState, this)\n\t\t},\n\t}\n\n\t// Extend store getters and setters with plugins.\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.extends) {\n\t\t\tstore = plugin.extends(store)\n\t\t}\n\t})\n\n\treturn store\n}\n","import { StoreApi } 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.\n * @param api Zustand api interface\n */\nexport function generateApi<S extends State>(api: StoreApi<S>) {\n\treturn { getInitialState: api.getInitialState, subscribe: api.subscribe }\n}\n","import { StoreApi } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\nexport function generateGet<S extends State>(api: StoreApi<S>) {\n\treturn () => api.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\n\nfunction setterName() {\n\treturn new Error()?.stack?.split('\\n')[3].trim().split(' ')[1].split('Object.')[1] ?? 'setState'\n}\n\n/**\n * Generates automatic setters like store.set.foo(value)\n * @param lib Zustand api interface\n * @param hasDevtools If devtools were activated for this store\n */\nexport function generateSet<S extends State>(lib: StoreLib<S>, hasDevtools: boolean): SetRecord<S> {\n\tconst setters = (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tlib.setState(\n\t\t\tupdater,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if devtools are disabled.\n\t\t\thasDevtools ? { type: name ?? setterName(), payload: updater } : undefined\n\t\t)\n\t}\n\n\tObject.keys(lib.getState()).forEach((key) => {\n\t\t// @ts-ignore\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (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 devtools are disabled.\n\t\t\t\thasDevtools ? { type: 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 { useStoreWithEqualityFn } from 'zustand/traditional'\n\nimport { StoreApi } from 'zustand'\n\nimport { State, EqualityChecker } from '../types'\nimport { generateUseStep } from './generateUseStep'\n\n/**\n * Generates automatic getters like store.use.foo()\n * @param api Zustand api interface\n */\nexport function generateUse<S extends State, U>(api: StoreApi<S>) {\n\tconst getters = (selector: (state: S) => U, equality: EqualityChecker<U> = shallow) => {\n\t\treturn useStoreWithEqualityFn(api, selector, equality)\n\t}\n\n\tgenerateUseStep(api.getState(), getters, [], api)\n\treturn getters\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\n\nexport function generateUseStep(\n\tstate: any,\n\tgetters: any,\n\tpath: string[],\n\tapi: any,\n) {\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\tapi,\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\tgenerateUseStep(state[key], getters[key], newPath, api)\n\t\t})\n\t}\n}\n\nfunction getFromPath(state: any, path: string[]) {\n\tlet data = state\n\n\tfor (let 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'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { Default, GettersBuilder, State, StoreApi } from '../types'\n\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst newGetters = builder(api)\n\n\tObject.keys(newGetters).forEach((key) => {\n\t\t// @ts-ignore\n\t\tapi.use[key] = (...args: any[]) =>\n\t\t\tuseStoreWithEqualityFn(\n\t\t\t\tlib,\n\t\t\t\t() => {\n\t\t\t\t\treturn newGetters[key](...args)\n\t\t\t\t},\n\t\t\t\tshallow\n\t\t\t)\n\t})\n\n\tapi.get = Object.assign(api.get, newGetters)\n\treturn api\n}\n","import { Default, SettersBuilder, State, StoreApi } from '../types'\n\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, api: StoreApi<S, Getters, Setters>) {\n\tapi.set = Object.assign(api.set, builder(api))\n\treturn api\n}\n","import { GetRecord, SetRecord, State, StoreApi } from '../types'\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, thisApi: StoreApi<S, Getters, Setters>) {\n\treturn {\n\t\tapi: thisApi.api,\n\t\tset: thisApi.set,\n\t\tuse: privateState\n\t\t\t? Object.keys(thisApi.use).reduce(\n\t\t\t\t\t(acc, key) =>\n\t\t\t\t\t\tmergedState[key] && (privateState as string[]).includes(key)\n\t\t\t\t\t\t\t? acc\n\t\t\t\t\t\t\t: { ...acc, [key]: thisApi.use[key] },\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t: thisApi.use,\n\t\tget: privateState\n\t\t\t? () =>\n\t\t\t\t\tObject.entries(thisApi.get()).reduce(\n\t\t\t\t\t\t(acc, [key, val]) =>\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]: val },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\t\t\t: thisApi.get,\n\t}\n}\n","import { StoreApiPlugin } from '../types'\n\ntype PluginResetSetters = { reset: () => void }\n\nexport const reset: StoreApiPlugin<{}, {}, PluginResetSetters> = {\n\textends: (store) => {\n\t\treturn store.extendSetters(({ api, set }) => ({\n\t\t\treset: () => {\n\t\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t\t},\n\t\t}))\n\t},\n}\n"],"mappings":"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","names":["devtools","persist","createVanillaStore","generateApi","api","generateGet","api","setterName","generateSet","lib","hasDevtools","setters","updater","replace","name","key","value","state","shallow","useStoreWithEqualityFn","shallow","useStoreWithEqualityFn","generateUseStep","state","getters","path","api","key","newPath","equalityFn","getFromPath","data","generateUse","api","getters","selector","equality","shallow","useStoreWithEqualityFn","generateUseStep","shallow","useStoreWithEqualityFn","extendGetters","builder","api","lib","newGetters","key","args","extendSetters","builder","api","restrictState","privateState","mergedState","thisApi","acc","key","val","createStore","initialState","options","name","plugins","middlewares","mergedState","plugin","initializer","devtools","persist","storeApi","createVanillaStore","store","generateApi","generateGet","generateSet","generateUse","builder","extendGetters","extendSetters","publicState","restrictState","reset","store","api","set"]}
1
+ {"version":3,"sources":["../src/lib/createStore.ts","../src/lib/generateApi.ts","../src/lib/generateGetFn.ts","../src/lib/generateGet.ts","../src/lib/generateSetFn.ts","../src/lib/generateSet.ts","../src/lib/generateUseStep.ts","../src/lib/generateUseFn.ts","../src/lib/generateUse.ts","../src/lib/extendGetters.ts","../src/lib/extendSetters.ts","../src/lib/restrictState.ts","../src/plugins/reset.ts"],"sourcesContent":["/**\n * Entire zustand-lite no-boilerplate functionality is inspired by this recipe:\n * https://docs.pmnd.rs/zustand/guides/auto-generating-selectors and 3th party\n * zustand-x repository: https://github.com/udecode/zustand-x.\n **/\nimport { DevtoolsOptions, PersistOptions, devtools, persist } from 'zustand/middleware'\nimport { createStore as createVanillaStore } from 'zustand/vanilla'\n\nimport {\n\tAugmentedApiData,\n\tAugmentedGetters,\n\tAugmentedSetters,\n\tGettersBuilder,\n\tSettersBuilder,\n\tState,\n\tStoreApi,\n\tStoreApiPluginList,\n} from '../types'\nimport { generateApi } from './generateApi'\nimport { generateGet } from './generateGet'\nimport { generateSet } from './generateSet'\nimport { generateUse } from './generateUse'\nimport { extendGetters } from './extendGetters'\nimport { extendSetters } from './extendSetters'\nimport { restrictState } from './restrictState'\n\nexport function createStore<S extends State, Plugins extends StoreApiPluginList = []>(\n\tinitialState: S,\n\toptions?: {\n\t\tname?: string\n\t\tplugins?: [...Plugins]\n\t\tmiddlewares?: { devtools?: true | DevtoolsOptions; persist?: true | PersistOptions<any> }\n\t}\n): Plugins extends []\n\t? StoreApi<S>\n\t: StoreApi<AugmentedApiData<S, Plugins>, AugmentedGetters<Plugins>, AugmentedSetters<Plugins>> {\n\tconst { name = 'zustand-lite', plugins = [], middlewares = {} } = options ?? {}\n\n\t// Merge state from plugins to be available for future use.\n\tlet mergedState: any = initialState\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.creates) {\n\t\t\tmergedState = { ...mergedState, ...plugin.creates() }\n\t\t}\n\t})\n\n\t// Apply supported middlewares.\n\tlet initializer: any = () => mergedState\n\n\tif (middlewares.devtools) {\n\t\tinitializer = devtools(\n\t\t\tinitializer,\n\t\t\tmiddlewares.devtools === true\n\t\t\t\t? { name: 'zustand-lite', store: name }\n\t\t\t\t: middlewares.devtools\n\t\t)\n\t}\n\n\tif (middlewares.persist) {\n\t\tinitializer = persist(\n\t\t\tinitializer,\n\t\t\tmiddlewares.persist === true ? { name } : 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\tconst storeApi: any = {\n\t\tapi: generateApi(storeLib),\n\t\tget: generateGet(storeLib),\n\t\tuse: generateUse(storeLib),\n\t\tset: generateSet(storeLib, !!middlewares.devtools),\n\t\textendGetters<Builder extends GettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendGetters(builder, this, storeLib)\n\t\t},\n\t\textendSetters<Builder extends SettersBuilder<typeof mergedState>>(builder: Builder) {\n\t\t\treturn extendSetters(builder, this, storeLib, !!middlewares.devtools)\n\t\t},\n\t\trestrictState(publicState = []) {\n\t\t\treturn restrictState(publicState, mergedState, this, storeLib)\n\t\t},\n\t}\n\n\t// Extend store getters and setters with plugins.\n\tlet result = storeApi\n\tplugins.forEach((plugin) => {\n\t\tif (plugin.extends) {\n\t\t\tresult = plugin.extends(storeApi)\n\t\t}\n\t})\n\n\treturn result\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 * @param lib Zustand api interface\n */\nexport function generateApi<S extends State>(lib: StoreLib<S>) {\n\treturn { getInitialState: lib.getInitialState, subscribe: lib.subscribe }\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n/**\n * Generates getState function for store.get()\n * @param lib Zustand api interface\n */\nexport function generateGetFn<S extends State>(lib: StoreLib<S>) {\n\treturn () => lib.getState()\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\nimport { generateGetFn } from './generateGetFn'\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 * @param lib Zustand api interface\n */\nexport function generateGet<S extends State>(lib: StoreLib<S>) {\n\treturn generateGetFn(lib)\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { State } from '../types'\n\n// A bit hacky way, but the working method, of obtaining caller function name at any level.\nfunction getSetterName() {\n\treturn new Error()?.stack?.split('\\n')[3].trim().split(' ')[1].split('setter.')[1] ?? 'setState'\n}\n\n/**\n * Generates automatic setState function for store like store.set({ value })\n * @param lib Zustand api interface\n * @param hasDevtools If devtools were activated for this store\n */\nexport function generateSetFn<S extends State>(lib: StoreLib<S>, hasDevtools: boolean) {\n\treturn (updater: S | ((state: S) => S), replace?: boolean, name?: string) => {\n\t\tlib.setState(\n\t\t\tupdater,\n\t\t\treplace,\n\t\t\t// @ts-ignore Additional parameter will have no effect even if devtools are disabled.\n\t\t\thasDevtools ? { type: name ?? getSetterName(), payload: updater } : undefined\n\t\t)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { SetRecord, State } from '../types'\nimport { generateSetFn } from './generateSetFn'\n\n/**\n * Generates automatic setters like store.set.foo(value)\n * @param lib Zustand api interface\n * @param hasDevtools If devtools were activated for this store\n */\nexport function generateSet<S extends State>(lib: StoreLib<S>, hasDevtools: boolean) {\n\tconst setters: any = generateSetFn(lib, hasDevtools)\n\n\tObject.keys(lib.getState()).forEach((key) => {\n\t\tsetters[key] = (value: any) => {\n\t\t\tif (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 devtools are disabled.\n\t\t\t\thasDevtools ? { type: 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 { 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 * @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 generateUseStep(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\tgenerateUseStep(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, EqualityChecker } from '../types'\n\n/**\n * Generates automatic getters like store.use.foo()\n * @param lib Zustand api interface\n */\nexport function generateUseFn<S extends State, U>(lib: StoreLib<S>) {\n\treturn (selector: (state: S) => U, equality: EqualityChecker<U> = shallow) => {\n\t\treturn useStoreWithEqualityFn(lib, selector, equality)\n\t}\n}\n","import { StoreApi as StoreLib } from 'zustand'\n\nimport { State } from '../types'\nimport { generateUseStep } from './generateUseStep'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Generates automatic store hook subscribe function store.use()\n * @param lib Zustand api interface\n */\nexport function generateUse<S extends State>(lib: StoreLib<S>) {\n\tconst getters = generateUseFn(lib)\n\tgenerateUseStep(lib.getState(), getters, [], lib)\n\treturn getters\n}\n","import { shallow } from 'zustand/shallow'\nimport { useStoreWithEqualityFn } from 'zustand/traditional'\nimport { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { Default, GettersBuilder, State, StoreApi } from '../types'\nimport { generateGetFn } from './generateGetFn'\nimport { generateUseFn } from './generateUseFn'\n\nexport function extendGetters<\n\tBuilder extends GettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, store: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\tconst methods: any = builder(store)\n\tconst getters: any = {}\n\n\tObject.keys(methods).forEach((key) => {\n\t\tgetters[key] = (...args: any[]) =>\n\t\t\tuseStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\n\t})\n\n\tstore.use = Object.assign(generateUseFn(lib), store.use, getters)\n\tstore.get = Object.assign(generateGetFn(lib), store.get, methods)\n\treturn store\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\nimport { Default, SettersBuilder, State, StoreApi } from '../types'\nimport { generateSetFn } from './generateSetFn'\n\nexport function extendSetters<\n\tBuilder extends SettersBuilder<S, Getters, Setters>,\n\tS extends State = Default,\n\tGetters = Default,\n\tSetters = Default,\n>(builder: Builder, store: StoreApi<S, Getters, Setters>, lib: StoreLib<S>, hasDevtools: boolean) {\n\tconst setters = generateSetFn(lib, hasDevtools)\n\tstore.set = Object.assign(setters, store.set, builder(store))\n\treturn store\n}\n","import { StoreApi as StoreLib } from 'zustand/vanilla'\n\nimport { GetRecord, SetRecord, State, StoreApi } from '../types'\nimport { generateUseFn } from './generateUseFn'\n\n/**\n * Function that restrict access to the store and store api.\n * @param privateState Property names to be made private like ['foo', 'bar']\n * @param mergedState Final state of the store\n * @param store 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, store: StoreApi<S, Getters, Setters>, lib: StoreLib<S>) {\n\treturn {\n\t\tapi: store.api,\n\t\tset: store.set,\n\t\tuse: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getters = Object.keys(store.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]: store.use[key] },\n\t\t\t\t\t\t{}\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Object.assign(generateUseFn(lib), getters)\n\t\t\t\t})()\n\t\t\t: store.use,\n\t\tget: privateState\n\t\t\t? (() => {\n\t\t\t\t\tconst getFn = () =>\n\t\t\t\t\t\tObject.entries(store.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, store.get)\n\t\t\t\t})()\n\t\t\t: store.get,\n\t}\n}\n","import { StoreApiPlugin } from '../types'\n\ntype PluginResetSetters = { reset: () => void }\n\n/**\n * Basic plugin example, that extends store with custom setter.\n */\nexport const reset: StoreApiPlugin<{}, {}, PluginResetSetters> = {\n\textends: (store) => {\n\t\treturn store.extendSetters(({ api, set }) => ({\n\t\t\treset: () => {\n\t\t\t\tset(api.getInitialState?.() ?? {}, true)\n\t\t\t},\n\t\t}))\n\t},\n}\n"],"mappings":"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","names":["devtools","persist","createVanillaStore","generateApi","lib","generateGetFn","lib","generateGet","lib","generateGetFn","getSetterName","generateSetFn","lib","hasDevtools","updater","replace","name","generateSet","lib","hasDevtools","setters","generateSetFn","key","value","state","shallow","useStoreWithEqualityFn","generateUseStep","state","getters","path","lib","key","newPath","equalityFn","getFromPath","data","shallow","useStoreWithEqualityFn","generateUseFn","lib","selector","equality","generateUse","lib","getters","generateUseFn","generateUseStep","shallow","useStoreWithEqualityFn","extendGetters","builder","store","lib","methods","getters","key","args","useStoreWithEqualityFn","shallow","generateUseFn","generateGetFn","extendSetters","builder","store","lib","hasDevtools","setters","generateSetFn","restrictState","privateState","mergedState","store","lib","getters","acc","key","generateUseFn","val","createStore","initialState","options","name","plugins","middlewares","mergedState","plugin","initializer","devtools","persist","storeLib","createVanillaStore","storeApi","generateApi","generateGet","generateUse","generateSet","builder","extendGetters","extendSetters","publicState","restrictState","result","reset","store","api","set"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zustand-lite",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "Zustand Lite builds upon zustand, by auto-generating selectors and simplifying API even more.",
5
5
  "author": "Piotr Siatkowski <p.siatkowski@gmail.com>",
6
6
  "license": "MIT",