UNPKG

zustand-x

Version:

Zustand store factory for a best-in-class developer experience.

1 lines 29.7 kB
{"version":3,"sources":["../src/createStore.ts","../src/middlewares/devtools.ts","../src/middlewares/immer.ts","../src/middlewares/mutative.ts","../src/middlewares/persist.ts","../src/utils/helpers.ts","../src/utils/extendActions.ts","../src/utils/extendSelectors.ts","../src/utils/storeFactory.ts","../src/useStore.ts"],"sourcesContent":["import { createTrackedSelector } from 'react-tracked';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { createWithEqualityFn as createStoreZustand } from 'zustand/traditional';\n\nimport {\n devToolsMiddleware,\n immerMiddleware,\n persistMiddleware,\n} from './middlewares';\nimport { mutativeMiddleware } from './middlewares/mutative';\nimport { DefaultMutators, TBaseStoreOptions, TState } from './types';\nimport { TMiddleware } from './types/middleware';\nimport { getOptions } from './utils/helpers';\nimport { storeFactory } from './utils/storeFactory';\n\nimport type { TStateApiForBuilder } from './types';\nimport type { StateCreator, StoreMutatorIdentifier } from 'zustand';\n\n/**\n * Creates zustand store with additional selectors and actions.\n *\n * @param {StateType | StateCreator<StateType, Mps, Mcs>} initializer - A function or object that initializes the state.\n * @param {TBaseStoreOptions<StateType>} options - store create options.\n */\n\nexport const createStore = <\n StateType extends TState,\n Mps extends [StoreMutatorIdentifier, unknown][] = [],\n Mcs extends [StoreMutatorIdentifier, unknown][] = [],\n CreateStoreOptions extends\n TBaseStoreOptions<StateType> = TBaseStoreOptions<StateType>,\n>(\n initializer: StateType | StateCreator<StateType, Mps, Mcs>,\n options: CreateStoreOptions\n) => {\n type Mutators = [...DefaultMutators<StateType, CreateStoreOptions>, ...Mcs];\n const {\n name,\n devtools: devtoolsOptions,\n immer: immerOptions,\n mutative: mutativeOptions,\n persist: persistOptions,\n isMutativeState,\n } = options;\n\n //current middlewares order devTools(persist(immer(initiator)))\n const middlewares: TMiddleware[] = [];\n\n //enable devtools\n const _devtoolsOptionsInternal = getOptions(devtoolsOptions);\n if (_devtoolsOptionsInternal.enabled) {\n middlewares.push((config) =>\n devToolsMiddleware(config, {\n ..._devtoolsOptionsInternal,\n name: _devtoolsOptionsInternal?.name ?? name,\n })\n );\n }\n\n //enable persist\n const _persistOptionsInternal = getOptions(persistOptions);\n if (_persistOptionsInternal.enabled) {\n middlewares.push((config) =>\n persistMiddleware(config, {\n ..._persistOptionsInternal,\n name: _persistOptionsInternal.name ?? name,\n })\n );\n }\n\n //enable immer\n const _immerOptionsInternal = getOptions(immerOptions);\n if (_immerOptionsInternal.enabled) {\n middlewares.push((config) =>\n immerMiddleware(config, _immerOptionsInternal)\n );\n }\n\n //enable mutative\n const _mutativeOptionsInternal = getOptions(mutativeOptions);\n if (_mutativeOptionsInternal.enabled) {\n middlewares.push((config) =>\n mutativeMiddleware(config, _mutativeOptionsInternal)\n );\n }\n\n const stateMutators = middlewares\n .reverse()\n .reduce(\n (y, fn) => fn(y),\n (typeof initializer === 'function'\n ? initializer\n : () => initializer) as StateCreator<StateType>\n ) as StateCreator<StateType, [], Mutators>;\n\n const store = createStoreZustand(subscribeWithSelector(stateMutators));\n\n const useTrackedStore = createTrackedSelector(store);\n\n const useTracked = (key: string) => {\n return useTrackedStore()[key as keyof StateType];\n };\n\n const getFn = (key: string) => {\n if (key === 'state') {\n return store.getState();\n }\n\n return store.getState()[key as keyof StateType];\n };\n\n const subscribeFn = (\n key: string,\n selector: any,\n listener: any,\n subscribeOptions: any\n ) => {\n if (key === 'state') {\n // @ts-expect-error -- typescript is unable to infer the 3 args version\n return store.subscribe(selector, listener, subscribeOptions);\n }\n\n let wrappedSelector: any;\n\n if (listener) {\n // subscribe(selector, listener, subscribeOptions) variant\n wrappedSelector = (state: StateType) =>\n selector(state[key as keyof StateType]);\n } else {\n // subscribe(listener) variant\n listener = selector;\n wrappedSelector = (state: StateType) => state[key as keyof StateType];\n }\n\n // @ts-expect-error -- typescript is unable to infer the 3 args version\n return store.subscribe(wrappedSelector, listener, subscribeOptions);\n };\n\n const isMutative =\n isMutativeState ||\n _immerOptionsInternal.enabled ||\n _mutativeOptionsInternal.enabled;\n\n const setFn = (key: string, value: any) => {\n if (key === 'state') {\n return (store.setState as any)(value);\n }\n\n const typedKey = key as keyof StateType;\n const prevValue = store.getState()[typedKey];\n\n if (prevValue === value) return;\n\n const actionKey = key.replace(/^\\S/, (s) => s.toUpperCase());\n const debugLog = name ? `@@${name}/set${actionKey}` : undefined;\n\n (store.setState as any)?.(\n isMutative\n ? (draft: StateType) => {\n draft[typedKey] = value;\n }\n : { [typedKey]: value },\n undefined,\n debugLog\n );\n };\n\n const useValue = (\n key: string,\n equalityFn?: (oldValue: any, newValue: any) => boolean\n ) => {\n return store((state) => state[key as keyof StateType], equalityFn);\n };\n\n const useState = (\n key: string,\n equalityFn?: (oldValue: any, newValue: any) => boolean\n ) => {\n const value = useValue(key, equalityFn);\n\n return [value, (val: any) => setFn(key, val)];\n };\n\n const apiInternal = {\n get: getFn,\n name,\n set: setFn,\n subscribe: subscribeFn,\n store,\n useStore: store,\n useValue,\n useState,\n useTracked,\n useTrackedStore,\n actions: {},\n selectors: {},\n } as any as TStateApiForBuilder<StateType, Mutators>;\n\n return storeFactory(apiInternal);\n};\n\n// Alias {@link createStore}\nexport const createZustandStore = createStore;\n","import { DevtoolsOptions as _DevtoolsOptions } from 'zustand/middleware';\n\nimport { MiddlewareOption } from '../types';\n\nexport { devtools as devToolsMiddleware } from 'zustand/middleware';\n\nexport type DevtoolsOptions = MiddlewareOption<Partial<_DevtoolsOptions>>;\n","import { produce } from 'immer';\n\nimport type { AnyFunction, MiddlewareOption } from '../types';\nimport type { Draft } from 'immer';\nimport type { StateCreator, StoreMutatorIdentifier } from 'zustand';\n\ndeclare module 'zustand' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-vars\n interface StoreMutators<S, A> {\n ['zustand/immer-x']: WithImmer<S>;\n }\n}\n\ntype Write<T, U> = Omit<T, keyof U> & U;\ntype SkipTwo<T> = T extends { length: 0 }\n ? []\n : T extends { length: 1 }\n ? []\n : T extends { length: 0 | 1 }\n ? []\n : T extends [unknown, unknown, ...infer A]\n ? A\n : T extends [unknown, unknown?, ...infer A]\n ? A\n : T extends [unknown?, unknown?, ...infer A]\n ? A\n : never;\n\ntype SetStateType<T extends unknown[]> = Exclude<T[0], AnyFunction>;\n\ntype WithImmer<S> = Write<S, StoreImmer<S>>;\n\ntype StoreImmer<S> = S extends {\n setState: infer SetState;\n}\n ? SetState extends {\n (...a: infer A1): infer Sr1;\n (...a: infer A2): infer Sr2;\n }\n ? {\n // Ideally, we would want to infer the `nextStateOrUpdater` `T` type from the\n // `A1` type, but this is infeasible since it is an intersection with\n // a partial type.\n setState(\n nextStateOrUpdater:\n | SetStateType<A1>\n | Partial<SetStateType<A1>>\n | ((state: Draft<Partial<SetStateType<A1>>>) => void),\n shouldReplace?: true,\n ...a: SkipTwo<A1>\n ): Sr1;\n setState(\n nextStateOrUpdater:\n | SetStateType<A2>\n | ((state: Draft<Partial<SetStateType<A2>>>) => void),\n shouldReplace: false,\n ...a: SkipTwo<A2>\n ): Sr2;\n }\n : never\n : never;\n\ntype Options = {\n enableMapSet?: boolean;\n enabledAutoFreeze?: boolean;\n};\ntype ImmerImpl = <T>(\n storeInitializer: StateCreator<T, [], []>,\n options?: Options\n) => StateCreator<T, [], []>;\n\nconst immerImpl: ImmerImpl = (initializer) => (set, get, store) => {\n type T = ReturnType<typeof initializer>;\n\n store.setState = (updater, replace, ...a) => {\n const nextState = (\n typeof updater === 'function' ? produce(updater as any) : updater\n ) as ((s: T) => T) | T | Partial<T>;\n\n return set(\n nextState,\n typeof replace === 'boolean' ? (replace as any) : true,\n ...a\n );\n };\n\n return initializer(store.setState, get, store);\n};\n\ntype Immer = <\n T,\n Mps extends [StoreMutatorIdentifier, unknown][] = [],\n Mcs extends [StoreMutatorIdentifier, unknown][] = [],\n>(\n initializer: StateCreator<T, [...Mps, ['zustand/immer-x', never]], Mcs>,\n options?: Options\n) => StateCreator<T, Mps, [['zustand/immer-x', never], ...Mcs]>;\nexport const immerMiddleware = immerImpl as unknown as Immer;\n\nexport type ImmerOptions = MiddlewareOption<Options>;\n","import { create, PatchesOptions } from 'mutative';\n\nimport type { AnyFunction, MiddlewareOption } from '../types';\nimport type { Options as _MutativeOptions, Draft } from 'mutative';\nimport type { StateCreator, StoreMutatorIdentifier } from 'zustand';\n\ndeclare module 'zustand/vanilla' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-vars\n interface StoreMutators<S, A> {\n ['zustand/mutative-x']: WithMutative<S>;\n }\n}\n\ntype SetStateType<T extends unknown[]> = Exclude<T[0], AnyFunction>;\ntype WithMutative<S> = Write<S, StoreMutative<S>>;\n\ntype Write<T, U> = Omit<T, keyof U> & U;\ntype SkipTwo<T> = T extends { length: 0 }\n ? []\n : T extends { length: 1 }\n ? []\n : T extends { length: 0 | 1 }\n ? []\n : T extends [unknown, unknown, ...infer A]\n ? A\n : T extends [unknown, unknown?, ...infer A]\n ? A\n : T extends [unknown?, unknown?, ...infer A]\n ? A\n : never;\ntype StoreMutative<S> = S extends {\n setState: infer SetState;\n}\n ? SetState extends {\n (...a: infer A1): infer Sr1;\n (...a: infer A2): infer Sr2;\n }\n ? {\n // Ideally, we would want to infer the `nextStateOrUpdater` `T` type from the\n // `A1` type, but this is infeasible since it is an intersection with\n // a partial type.\n setState(\n nextStateOrUpdater:\n | SetStateType<A1>\n | Partial<SetStateType<A1>>\n | ((state: Draft<Partial<SetStateType<A1>>>) => void),\n shouldReplace?: true,\n ...a: SkipTwo<A1>\n ): Sr1;\n setState(\n nextStateOrUpdater:\n | SetStateType<A2>\n | ((state: Draft<Partial<SetStateType<A2>>>) => void),\n shouldReplace: false,\n ...a: SkipTwo<A2>\n ): Sr2;\n }\n : never\n : never;\n\ntype Options<O extends PatchesOptions, F extends boolean> = Omit<\n _MutativeOptions<O, F>,\n 'enablePatches'\n>;\ntype MutativeImpl = <T, F extends boolean = false>(\n storeInitializer: StateCreator<T, [], []>,\n options?: Options<false, F>\n) => StateCreator<T, [], []>;\n\nconst mutativeImpl: MutativeImpl =\n (initializer, options) => (set, get, store) => {\n type T = ReturnType<typeof initializer>;\n\n store.setState = (updater, replace, ...a) => {\n const nextState = (\n typeof updater === 'function'\n ? create(\n updater as any,\n options ? { ...options, enablePatches: false } : options\n )\n : updater\n ) as ((s: T) => T) | T | Partial<T>;\n\n return set(\n nextState as any,\n typeof replace === 'boolean' ? (replace as any) : true,\n ...a\n );\n };\n\n return initializer(store.setState, get, store);\n };\n\ntype Mutative = <\n T,\n Mps extends [StoreMutatorIdentifier, unknown][] = [],\n Mcs extends [StoreMutatorIdentifier, unknown][] = [],\n F extends boolean = false,\n>(\n initializer: StateCreator<T, [...Mps, ['zustand/mutative-x', never]], Mcs>,\n options?: Options<false, F>\n) => StateCreator<T, Mps, [['zustand/mutative-x', never], ...Mcs]>;\n\nexport const mutativeMiddleware = mutativeImpl as unknown as Mutative;\nexport type MutativeOptions<F extends boolean = false> = MiddlewareOption<\n Options<false, F>\n>;\n","import { PersistOptions as _PersistOptions } from 'zustand/middleware';\n\nimport { MiddlewareOption } from '../types';\n\nexport { persist as persistMiddleware } from 'zustand/middleware';\nexport type PersistOptions<StateType> = MiddlewareOption<\n Partial<_PersistOptions<StateType, Partial<StateType>>>\n>;\n","import { MiddlewareOption } from '../types';\n\nexport const getOptions = <T extends MiddlewareOption<object> | undefined>(\n option: T,\n fallbackEnabled: boolean = false\n) => {\n const isBooleanValue = typeof option === 'boolean';\n const { enabled, ...config } = (\n isBooleanValue ? {} : option || {}\n ) as Exclude<T, boolean | undefined>;\n const isValueProvided = isBooleanValue ? option : enabled;\n return {\n enabled: isValueProvided ?? fallbackEnabled,\n ...config,\n };\n};\n","import { StoreMutatorIdentifier } from 'zustand';\n\nimport { TActionBuilder, TState, TStateApiForBuilder } from '../types';\n\nimport type { AnyFunction } from '../types';\n\nexport const extendActions = <\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction>,\n TSelectors extends Record<string, AnyFunction>,\n Builder extends TActionBuilder<StateType, Mutators, TActions, TSelectors>,\n>(\n builder: Builder,\n api: TStateApiForBuilder<StateType, Mutators, TActions, TSelectors>\n) => {\n const newActions = builder(api);\n const actions = {\n ...api.actions,\n ...newActions,\n };\n\n return {\n ...api,\n actions,\n set: <K extends keyof (StateType | TActions)>(\n key: K,\n ...args: K extends keyof TActions\n ? Parameters<TActions[K]>\n : K extends keyof StateType\n ? [StateType[K]]\n : never\n ) => {\n if (key in actions) {\n const action = actions[key as keyof typeof actions];\n return action(...args);\n }\n return api.set(key as any, args[0]);\n },\n };\n};\n","import { StoreMutatorIdentifier } from 'zustand';\n\nimport {\n AnyFunction,\n TEqualityChecker,\n TSelectorBuilder,\n TState,\n TStateApiForBuilder,\n} from '../types';\n\nconst identity = <T>(arg: T) => arg;\n\nexport const extendSelectors = <\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction>,\n TSelectors extends Record<string, AnyFunction>,\n Builder extends TSelectorBuilder<StateType, Mutators, TActions, TSelectors>,\n>(\n builder: Builder,\n api: TStateApiForBuilder<StateType, Mutators, TActions, TSelectors>\n) => {\n const newSelectors = builder(api);\n const selectors = {\n ...api.selectors,\n ...newSelectors,\n };\n\n return {\n ...api,\n get: <K extends keyof (StateType & TSelectors & { state: true })>(\n key: K,\n ...args: K extends keyof TSelectors ? Parameters<TSelectors[K]> : []\n ) => {\n if (key in selectors) {\n const selector = selectors[key as keyof typeof selectors];\n return selector(...args);\n }\n return api.get(key as keyof StateType);\n },\n subscribe: <K extends keyof (StateType & TSelectors & { state: true })>(\n key: keyof (StateType & TSelectors & { state: true }),\n ...args: [\n ...[K extends keyof TSelectors ? Parameters<TSelectors[K]> : []],\n selector: AnyFunction,\n listener: AnyFunction,\n options?: any,\n ]\n ) => {\n if (key in selectors) {\n // variants:\n // subscribe(key, ...args, listener)\n // subscribe(key, ...args, selector, listener)\n // subscribe(key, ...args, selector, listener, undefined)\n // subscribe(key, ...args, selector, listener, options)\n let options: any;\n let selector: any;\n let listener: any;\n const lastArg1 = args.at(-1);\n const lastArg2 = args.at(-2); // May be undefined\n const lastArg3 = args.at(-3); // May be undefined\n let argsEndIdx = -1;\n\n if (typeof lastArg1 === 'function') {\n listener = lastArg1;\n selector = typeof lastArg2 === 'function' ? lastArg2 : identity;\n argsEndIdx = typeof lastArg2 === 'function' ? -2 : -1;\n } else {\n options = lastArg1;\n listener = lastArg2;\n selector = lastArg3;\n argsEndIdx = -3;\n }\n\n return api.subscribe(\n // The key `state` does not matter, as selectors are closures over the `api`\n 'state',\n () =>\n selector(\n selectors[key as keyof typeof selectors](\n ...args.slice(0, argsEndIdx)\n )\n ),\n listener,\n options\n );\n }\n // @ts-expect-error -- don't know how to type this\n return api.subscribe(key, ...args);\n },\n selectors,\n useValue: <K extends keyof (StateType & TSelectors)>(\n key: K,\n ...args: K extends keyof TSelectors\n ? [\n ...Parameters<TSelectors[K]>,\n TEqualityChecker<ReturnType<TSelectors[K]>> | undefined,\n ]\n : [TEqualityChecker<StateType[keyof StateType]> | undefined]\n ) => {\n if (key in selectors) {\n const selector = selectors[key as keyof typeof selectors];\n const lastArg = args.at(-1);\n const equalityFn = typeof lastArg === 'function' ? lastArg : undefined;\n const selectorArgs = equalityFn ? args.slice(0, -1) : args;\n\n return api.useStore(() => selector(...selectorArgs), equalityFn as any);\n }\n return api.useValue(\n key as keyof StateType,\n args[0] as TEqualityChecker<StateType[keyof StateType]>\n );\n },\n };\n};\n","import { StoreMutatorIdentifier } from 'zustand';\n\nimport { TState, TStateApi, TStateApiForBuilder } from '../types';\nimport { extendActions } from './extendActions';\nimport { extendSelectors } from './extendSelectors';\n\nimport type { AnyFunction } from '../types';\n\nexport const storeFactory = <\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][] = [],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n>(\n api: TStateApiForBuilder<StateType, Mutators, TActions, TSelectors>\n): TStateApi<StateType, Mutators, TActions, TSelectors> => {\n return {\n ...api,\n actions: api.actions || {},\n extendSelectors: (builder) =>\n storeFactory(extendSelectors(builder, api) as any),\n extendActions: (builder) =>\n storeFactory(extendActions(builder, api) as any),\n } as TStateApi<StateType, Mutators, TActions, TSelectors>;\n};\n","import type { AnyFunction, TEqualityChecker, TState, TStateApi } from './types';\nimport type { StoreMutatorIdentifier } from 'zustand';\n\nexport function useStoreValue<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof StateType = keyof StateType,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K\n): StateType[K];\nexport function useStoreValue<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof TSelectors = keyof TSelectors,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K,\n ...args: Parameters<TSelectors[K]>\n): ReturnType<TSelectors[K]>;\nexport function useStoreValue<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: 'state'\n): StateType;\nexport function useStoreValue<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof StateType = keyof StateType,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K,\n equalityFn?: TEqualityChecker<StateType[K]>\n): StateType[K];\nexport function useStoreValue<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof TSelectors = keyof TSelectors,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K,\n ...args: [\n ...Parameters<TSelectors[K]>,\n TEqualityChecker<ReturnType<TSelectors[K]>>?,\n ]\n): ReturnType<TSelectors[K]>;\nexport function useStoreValue<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof StateType | keyof TSelectors =\n | keyof StateType\n | keyof TSelectors,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K,\n ...args: unknown[]\n) {\n return store.useValue(key as any, ...(args as any));\n}\n\nexport function useStoreState<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof StateType = keyof StateType,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K,\n equalityFn?: TEqualityChecker<StateType[K]>\n): [StateType[K], (value: StateType[K]) => void] {\n return store.useState(key, equalityFn);\n}\n\nexport function useTrackedStore<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n>(store: TStateApi<StateType, Mutators, TActions, TSelectors>): StateType {\n return store.useTrackedStore();\n}\n\nexport function useTracked<\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n K extends keyof StateType = keyof StateType,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n key: K\n): StateType[K] {\n return store.useTracked(key);\n}\n\n/**\n * Use zustand store selector with optional equality function.\n * @example\n * const name = useStoreSelect(store, (state) => state.name, equalityFn)\n */\nexport const useStoreSelect = <\n StateType extends TState,\n Mutators extends [StoreMutatorIdentifier, unknown][],\n TActions extends Record<string, AnyFunction> = {},\n TSelectors extends Record<string, AnyFunction> = {},\n U = StateType,\n>(\n store: TStateApi<StateType, Mutators, TActions, TSelectors>,\n selector: (state: StateType) => U,\n equalityFn?: (a: U, b: U) => boolean\n): U => {\n return store.useStore(selector, equalityFn);\n};\n"],"mappings":"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","names":["useTrackedStore","useTracked"]}