{"version":3,"sources":["../src/createStore.ts","../src/utils/extendSelectors.ts","../src/utils/storeFactory.ts","../src/useStore.ts"],"sourcesContent":["import { createTrackedSelector } from 'react-tracked';\nimport { createWithEqualityFn as createStoreZustand } from 'zustand/traditional';\n\nimport { buildStateCreator } from './internal/buildStateCreator';\nimport { createBaseApi } from './internal/createBaseApi';\nimport { DefaultMutators, TBaseStoreOptions, TState } from './types';\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 builder = buildStateCreator(initializer, options);\n  const store = createStoreZustand(builder.stateCreator);\n\n  const useTrackedStore = createTrackedSelector(store);\n\n  const useTracked = (key: string) => {\n    return useTrackedStore()[key as keyof StateType];\n  };\n\n  const baseApi = createBaseApi<StateType, Mutators, {}, {}>(store, {\n    name: builder.name,\n    isMutative: builder.isMutative,\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) => baseApi.set(key as keyof StateType, val)];\n  };\n\n  const apiInternal = {\n    ...baseApi,\n    store,\n    useStore: store,\n    useValue,\n    useState,\n    useTracked,\n    useTrackedStore,\n  } as any as TStateApiForBuilder<StateType, Mutators>;\n\n  return storeFactory(apiInternal);\n};\n\n// Alias {@link createStore}\nexport const createZustandStore = createStore;\n","import { extendSelectors as extendSelectorsInternal } from '../internal/extendSelectors';\n\nimport type {\n  AnyFunction,\n  TSelectorBuilder,\n  TState,\n  TStateApiForBuilder,\n} from '../types';\nimport type { StoreMutatorIdentifier } from 'zustand';\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  return extendSelectorsInternal(builder, api, {\n    selectWithStore: (selector, equalityFn) => api.useStore(selector, equalityFn),\n  }) as TStateApiForBuilder<\n    StateType,\n    Mutators,\n    TActions,\n    TSelectors & ReturnType<Builder>\n  >;\n};\n","import { storeFactory as storeFactoryBase } from '../internal/storeFactory';\nimport { extendActions } from './extendActions';\nimport { extendSelectors } from './extendSelectors';\n\nimport type {\n  AnyFunction,\n  TState,\n  TStateApi,\n  TStateApiForBuilder,\n} from '../types';\nimport type { StoreMutatorIdentifier } from 'zustand';\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 storeFactoryBase(api, {\n    extendSelectors: (builder, baseApi) =>\n      extendSelectors(builder, baseApi as any) as any,\n    extendActions: (builder, baseApi) =>\n      extendActions(builder, baseApi as any) as any,\n  }) as TStateApi<\n    StateType,\n    Mutators,\n    TActions,\n    TSelectors\n  >;\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":";;;;;;;;;;;;;;AAAA,SAAS,6BAA6B;AACtC,SAAS,wBAAwB,0BAA0B;;;ACSpD,IAAMA,mBAAkB,CAO7B,SACA,QACG;AACH,SAAO,gBAAwB,SAAS,KAAK;AAAA,IAC3C,iBAAiB,CAAC,UAAU,eAAe,IAAI,SAAS,UAAU,UAAU;AAAA,EAC9E,CAAC;AAMH;;;AChBO,IAAMC,gBAAe,CAM1B,QACyD;AACzD,SAAO,aAAiB,KAAK;AAAA,IAC3B,iBAAiB,CAAC,SAAS,YACzBC,iBAAgB,SAAS,OAAc;AAAA,IACzC,eAAe,CAAC,SAAS,YACvB,cAAc,SAAS,OAAc;AAAA,EACzC,CAAC;AAMH;;;AFbO,IAAM,cAAc,CAOzB,aACA,YACG;AAEH,QAAM,UAAU,kBAAkB,aAAa,OAAO;AACtD,QAAM,QAAQ,mBAAmB,QAAQ,YAAY;AAErD,QAAMC,mBAAkB,sBAAsB,KAAK;AAEnD,QAAMC,cAAa,CAAC,QAAgB;AAClC,WAAOD,iBAAgB,EAAE,GAAsB;AAAA,EACjD;AAEA,QAAM,UAAU,cAA2C,OAAO;AAAA,IAChE,MAAM,QAAQ;AAAA,IACd,YAAY,QAAQ;AAAA,EACtB,CAAC;AAED,QAAM,WAAW,CACf,KACA,eACG;AACH,WAAO,MAAM,CAAC,UAAU,MAAM,GAAsB,GAAG,UAAU;AAAA,EACnE;AAEA,QAAM,WAAW,CACf,KACA,eACG;AACH,UAAM,QAAQ,SAAS,KAAK,UAAU;AAEtC,WAAO,CAAC,OAAO,CAAC,QAAa,QAAQ,IAAI,KAAwB,GAAG,CAAC;AAAA,EACvE;AAEA,QAAM,cAAc;AAAA,IAClB,GAAG;AAAA,IACH;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAD;AAAA,EACF;AAEA,SAAOE,cAAa,WAAW;AACjC;AAGO,IAAM,qBAAqB;;;AGf3B,SAAS,cASd,OACA,QACG,MACH;AACA,SAAO,MAAM,SAAS,KAAY,GAAI,IAAY;AACpD;AAEO,SAAS,cAOd,OACA,KACA,YAC+C;AAC/C,SAAO,MAAM,SAAS,KAAK,UAAU;AACvC;AAEO,SAAS,gBAKd,OAAwE;AACxE,SAAO,MAAM,gBAAgB;AAC/B;AAEO,SAAS,WAOd,OACA,KACc;AACd,SAAO,MAAM,WAAW,GAAG;AAC7B;AAOO,IAAM,iBAAiB,CAO5B,OACA,UACA,eACM;AACN,SAAO,MAAM,SAAS,UAAU,UAAU;AAC5C;","names":["extendSelectors","storeFactory","extendSelectors","useTrackedStore","useTracked","storeFactory"]}