UNPKG

zustand-lite

Version:

Zustand Lite builds upon zustand, by auto-generating selectors and simplifying API even more.

1 lines 24.5 kB
{"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'\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.\n\tlib.setState(newState as unknown as OldData)\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 } from '../types'\nimport { generateGetFnBase } from './generateGetFnBase'\nimport { generateUseFnBase } from './generateUseFnBase'\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\tuseStoreWithEqualityFn(lib, () => methods[key](...args), shallow)\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","extendGetters","builder","api","lib","methods","getters","key","args","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"]}