{"version":3,"file":"robodux.cjs","sources":["../src/types.ts","../src/combine.ts","../src/create-action.ts","../src/create-reducer.ts","../src/create-slice.ts","../src/create-assign.ts","../src/create-map.ts","../src/create-table.ts","../src/create-loader.ts","../src/create-loader-table.ts","../src/create-list.ts","../src/create-list-table.ts"],"sourcesContent":["/**\n * Inlined from redux\n */\nexport interface BaseAction<T extends string = string> {\n  type: T;\n}\n\n/**\n * Inlined from redux\n */\nexport interface AnyAction extends BaseAction {\n  // Allows any extra properties to be defined in an action.\n  [extraProps: string]: any;\n}\n\n/**\n * Inlined from redux\n */\nexport type Reducer<S = any, A extends Action = AnyAction> = (\n  state: S | undefined,\n  action: A,\n) => S;\n\nexport interface Action<P = any, T extends string = string>\n  extends BaseAction<T> {\n  payload?: P;\n}\n\nexport interface ActionWithPayload<P = any, T extends string = string>\n  extends BaseAction<T> {\n  payload: P;\n}\n\nexport type ActionReducer<SliceState = any, A = any> = (\n  state: SliceState,\n  payload: A,\n) => SliceState | void | undefined;\n\nexport type ActionsObjWithSlice<SliceState = any, Ax = any> = {\n  [K in keyof Ax]: ActionReducer<SliceState, Ax[K]>;\n};\n\nexport interface ActionsAny<P = any> {\n  [Action: string]: P;\n}\n\nexport interface AnyState {\n  [name: string]: any;\n}\n\nexport interface MapEntity<E> {\n  [key: string]: E | undefined;\n}\n\nexport const excludesFalse = <T>(n?: T): n is T => Boolean(n);\n\nexport interface ReducerMap<SliceState, A = Action> {\n  [Action: string]: ActionReducer<SliceState, A>;\n}\n\nexport interface PatchEntity<T> {\n  [key: string]: Partial<T[keyof T]>;\n}\n\nexport interface SliceHelper<State> {\n  name: string;\n  initialState?: State;\n  extraReducers?: ActionsAny;\n}\n\nexport interface SliceHelperRequired<State> {\n  name: string;\n  initialState: State;\n  extraReducers?: ActionsAny;\n}\n\nexport interface PropId {\n  id: string;\n}\n\nexport interface PropIds {\n  ids: string[];\n}\n","import type { Action, Reducer } from './types';\n\ntype MergeIntersections<T> = T extends infer O\n  ? { [K in keyof O]: O[K] }\n  : never;\n\nexport function combine<A>(a: A): MergeIntersections<A>;\nexport function combine<A, B>(a: A, b: B): MergeIntersections<A & B>;\nexport function combine<A, B, C>(\n  a: A,\n  b: B,\n  c: C,\n): MergeIntersections<A & B & C>;\nexport function combine<A, B, C, D>(\n  a: A,\n  b: B,\n  c: C,\n  d: D,\n): MergeIntersections<A & B & C & D>;\nexport function combine<A, B, C, D, E>(\n  a: A,\n  b: B,\n  c: C,\n  d: D,\n  e: E,\n): MergeIntersections<A & B & C & D & E>;\nexport function combine(...args: any[]): any {\n  const newObj: any = {};\n  for (const obj of args) {\n    for (const key in obj) {\n      if (newObj.hasOwnProperty(key)) {\n        console.warn(`collision detected: ${key} already exists`, args);\n      }\n      newObj[key] = obj[key];\n    }\n  }\n  return newObj;\n}\n\ninterface TSlice<A = any, SS = any> {\n  actions: { [K in keyof A]: A[K] };\n  reducer: Reducer<SS, Action>;\n  name: string;\n}\n\nexport function createActionMap<A>(a: TSlice<A>): MergeIntersections<A>;\nexport function createActionMap<A, B>(\n  a: TSlice<A>,\n  b: TSlice<B>,\n): MergeIntersections<A & B>;\nexport function createActionMap<A, B, C>(\n  a: TSlice<A>,\n  b: TSlice<B>,\n  c: TSlice<C>,\n): MergeIntersections<A & B & C>;\nexport function createActionMap<A, B, C, D>(\n  a: TSlice<A>,\n  b: TSlice<B>,\n  c: TSlice<C>,\n  d: TSlice<D>,\n): MergeIntersections<A & B & C & D>;\nexport function createActionMap<A, B, C, D, E>(\n  a: TSlice<A>,\n  b: TSlice<B>,\n  c: TSlice<C>,\n  d: TSlice<D>,\n  e: TSlice<E>,\n): MergeIntersections<A & B & C & D & E>;\nexport function createActionMap(...args: any[]): any {\n  return args.reduce((acc, slice) => {\n    return combine(acc, slice.actions);\n  }, {});\n}\n\nexport function createReducerMap<\n  KV extends Array<{ name: P; reducer: Reducer }>,\n  P extends keyof any,\n>(\n  ...args: KV\n): { [K in KV[number]['name']]: Extract<KV[number], { name: K }>['reducer'] };\nexport function createReducerMap(...args: any[]): any {\n  return args.reduce((acc, slice) => {\n    if (acc.hasOwnProperty(slice.name)) {\n      console.warn(`Reducer collision detected: ${slice.name} already exists`);\n    }\n    acc[slice.name] = slice.reducer;\n    return acc;\n  }, {});\n}\n","import type { ActionWithPayload } from './types';\n\ntype Creator<P = any, T extends string = string> = (\n  p: P,\n) => ActionWithPayload<P, T>;\ntype CreatorNoPayload<T extends string = string> = () => ActionWithPayload<\n  undefined,\n  T\n>;\n\nexport default function creator(type: string): CreatorNoPayload<string>;\nexport default function creator<P, T extends string = string>(\n  type: string,\n): Creator<P, T>;\nexport default function creator<T extends string = string>(type: T) {\n  function action(payload?: any) {\n    return {\n      type,\n      payload,\n    };\n  }\n\n  action.toString = (): T => `${type}` as T;\n  action.type = type;\n  return action;\n}\n","import createNextState, { Draft } from 'immer';\n\nimport type { Action, ReducerMap, Reducer } from './types';\n\nexport type CreateReducer<State = any> = {\n  initialState: State;\n  reducers: ReducerMap<State, any>;\n  useImmer?: boolean;\n};\n\nexport function createReducerPlain<State = any>(\n  initialState: State,\n  reducers: ReducerMap<State>,\n): Reducer<State, Action<any>> {\n  const reducer = (state = initialState, action: Action<any>) => {\n    const caseReducer = reducers[action.type];\n    if (!caseReducer) {\n      return state;\n    }\n    return caseReducer(state, action.payload) as State;\n  };\n\n  return reducer;\n}\n\nexport default function createReducer<State = any>(\n  initialState: State,\n  reducers: ReducerMap<State>,\n): Reducer<State, Action<any>> {\n  const reducer = (state = initialState, action: Action<any>): State => {\n    // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n    // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n    // these two types.\n    return createNextState(state, (draft: Draft<State>) => {\n      const caseReducer = reducers[action.type];\n      if (!caseReducer) {\n        return draft;\n      }\n      return caseReducer(draft as any, action.payload);\n    });\n  };\n\n  return reducer;\n}\n","import createAction from './create-action';\nimport createReducer, { createReducerPlain } from './create-reducer';\nimport type {\n  Action,\n  ActionsObjWithSlice,\n  ActionsAny,\n  ReducerMap,\n  Reducer,\n} from './types';\n\ninterface SliceOptions<SliceState = any, Ax = ActionsAny> {\n  initialState: SliceState;\n  reducers: ActionsObjWithSlice<SliceState, Ax>;\n  name: string;\n  extraReducers?: ActionsAny;\n  useImmer?: boolean;\n}\n\nconst actionTypeBuilder = (slice: string) => (action: string) =>\n  slice ? `${slice}/${action}` : action;\n\nexport default function createSlice<SliceState, Actions extends ActionsAny>({\n  name,\n  initialState,\n  reducers,\n  extraReducers,\n  useImmer = true,\n}: SliceOptions<SliceState, Actions>): {\n  name: string;\n  reducer: Reducer<SliceState, Action>;\n  actions: {\n    [key in keyof Actions]: Object extends Actions[key] // ensures payload isn't inferred as {}\n      ? (payload?: any) => Action\n      : Actions[key] extends never\n      ? () => Action\n      : (payload: Actions[key]) => Action<Actions[key]>;\n  };\n  toString: () => string;\n} {\n  if (!name) {\n    throw new Error(`createSlice name must not be blank`);\n  }\n\n  const actionKeys = Object.keys(reducers) as (keyof Actions)[];\n  const createActionType = actionTypeBuilder(name as string);\n\n  const reducerMap = actionKeys.reduce<ReducerMap<SliceState>>(\n    (map, action) => {\n      const scopedAction = createActionType(action as string);\n      (map as any)[scopedAction] = reducers[action];\n      return map;\n    },\n    extraReducers || {},\n  );\n\n  const reducer = useImmer\n    ? createReducer<SliceState>(initialState, reducerMap)\n    : createReducerPlain<SliceState>(initialState, reducerMap);\n\n  const actionMap = actionKeys.reduce<{\n    [key in keyof Actions]: Object extends Actions[key] // ensures payload isn't inferred as {}\n      ? (payload?: any) => Action\n      : Actions[key] extends never\n      ? () => Action\n      : (payload: Actions[key]) => Action<Actions[key]>;\n  }>((map, action) => {\n    const type = createActionType(action as string);\n    map[action] = createAction(type) as any;\n    return map;\n  }, {} as any);\n\n  return {\n    actions: actionMap,\n    reducer,\n    name,\n    toString: () => name,\n  };\n}\n","import createSlice from './create-slice';\nimport type { SliceHelperRequired } from './types';\n\nexport function assignReducers<State>(initialState: State) {\n  return {\n    set: (_: State, p: State) => p,\n    reset: () => initialState,\n  };\n}\n\ninterface AssignActions<SS> {\n  set: SS;\n  reset: never;\n}\n\nexport default function createAssign<State = any>({\n  name,\n  initialState,\n  extraReducers,\n}: SliceHelperRequired<State>) {\n  return createSlice<State, AssignActions<State>>({\n    name,\n    useImmer: false,\n    initialState,\n    reducers: assignReducers(initialState),\n    extraReducers,\n  });\n}\n","import createSlice from './create-slice';\nimport type { AnyState, PatchEntity, SliceHelper } from './types';\n\nexport interface MapReducers<State extends AnyState = AnyState> {\n  add: (state: State, payload: State) => State;\n  set: (state: State, payload: State) => State;\n  remove: (state: State, payload: string[]) => State;\n  reset: (state: State) => State;\n  merge: (state: State, payload: PatchEntity<State>) => State;\n  patch: (state: State, payload: PatchEntity<State>) => State;\n}\n\nexport function mapReducers<State extends AnyState>(\n  initialState = {} as State,\n): MapReducers<State> {\n  return {\n    add: (state: State, payload: State) => {\n      const newState = { ...state };\n      Object.keys(payload).forEach((key) => {\n        newState[key as keyof State] = payload[key];\n      });\n      return newState;\n    },\n    set: (_: State, payload: State) => payload,\n    remove: (state: State, payload: string[]) => {\n      const newState = { ...state };\n      payload.forEach((key) => {\n        delete newState[key];\n      });\n      return newState;\n    },\n    reset: (_: State) => initialState,\n    patch: (\n      state: State,\n      payload: { [key: string]: Partial<State[keyof State]> },\n    ): State => {\n      const newState = { ...state };\n      Object.keys(payload).forEach((id) => {\n        if (typeof payload[id] !== 'object') {\n          return;\n        }\n\n        const entity = payload[id];\n        if (entity) {\n          // getting weird issue with typing here\n          const s: any = newState;\n          const nextEntity = { ...s[id] };\n          Object.keys(entity).forEach((key) => {\n            if (s.hasOwnProperty(id)) {\n              nextEntity[key] = (payload[id] as any)[key];\n            }\n          });\n          (newState as any)[id] = nextEntity;\n        }\n      });\n\n      return newState;\n    },\n    merge: (\n      state: State,\n      payload: { [key: string]: Partial<State[keyof State]> },\n    ): State => {\n      const newState = { ...state };\n      Object.keys(payload).forEach((id) => {\n        if (typeof payload[id] !== 'object') {\n          return;\n        }\n\n        const entity = payload[id];\n        if (entity) {\n          // getting weird issue with typing here\n          const s: any = newState;\n          if (!s.hasOwnProperty(id)) {\n            return;\n          }\n\n          const nextEntity = { ...s[id] };\n          Object.keys(entity).forEach((key) => {\n            const prop = (payload[id] as any)[key];\n            if (Array.isArray(nextEntity[key])) {\n              nextEntity[key] = [...nextEntity[key], ...prop];\n            } else if (Object == prop.constructor) {\n              nextEntity[key] = {\n                ...nextEntity[key],\n                ...prop,\n              };\n            } else {\n              nextEntity[key] = prop;\n            }\n          });\n          (newState as any)[id] = nextEntity;\n        }\n      });\n\n      return newState;\n    },\n  };\n}\n\ninterface MapActions<S> {\n  add: S;\n  set: S;\n  remove: string[];\n  patch: PatchEntity<S>;\n  reset: never;\n}\n\nexport default function createMap<State extends AnyState>({\n  name,\n  extraReducers,\n  initialState = {} as State,\n}: SliceHelper<State>) {\n  const slice = createSlice<State, MapActions<State>>({\n    name,\n    initialState,\n    extraReducers,\n    useImmer: false,\n    reducers: mapReducers(initialState),\n  });\n\n  return slice;\n}\n","import { createSelector } from 'reselect';\nimport { mapReducers } from './create-map';\nimport createSlice from './create-slice';\nimport type {\n  AnyState,\n  MapEntity,\n  PatchEntity,\n  SliceHelper,\n  PropId,\n  PropIds,\n} from './types';\nimport { excludesFalse } from './types';\n\nexport interface TableSelectors<Entity extends AnyState = AnyState, S = any> {\n  findById: (d: MapEntity<Entity>, { id }: PropId) => Entity | undefined;\n  findByIds: (d: MapEntity<Entity>, { ids }: PropIds) => Entity[];\n  tableAsList: (d: MapEntity<Entity>) => Entity[];\n  selectTable: (s: S) => MapEntity<Entity>;\n  selectTableAsList: (state: S) => Entity[];\n  selectById: (s: S, p: PropId) => Entity | undefined;\n  selectByIds: (s: S, p: { ids: string[] }) => Entity[];\n}\n\nexport function tableSelectors<Entity extends AnyState = AnyState, S = any>(\n  selectTable: (s: S) => MapEntity<Entity>,\n): TableSelectors<Entity, S> {\n  const tableAsList = (data: MapEntity<Entity>): Entity[] =>\n    Object.values(data).filter(excludesFalse);\n  const findById = (data: MapEntity<Entity>, { id }: PropId) => data[id];\n  const findByIds = (data: MapEntity<Entity>, { ids }: PropIds): Entity[] =>\n    ids.map((id) => data[id]).filter(excludesFalse);\n  const selectById = (state: S, { id }: PropId): Entity | undefined => {\n    const data = selectTable(state);\n    return findById(data, { id });\n  };\n  return {\n    findById,\n    findByIds,\n    tableAsList,\n    selectTable,\n    selectTableAsList: createSelector(selectTable, (data): Entity[] =>\n      tableAsList(data),\n    ) as any,\n    selectById,\n    selectByIds: createSelector(\n      selectTable,\n      (_: S, p: PropIds) => p.ids,\n      (tbl, ids) => findByIds(tbl, { ids }),\n    ) as any,\n  };\n}\n\nexport function mustSelectEntity<Entity extends AnyState = AnyState>(\n  defaultEntity: Entity | (() => Entity),\n) {\n  const isFn = typeof defaultEntity === 'function';\n\n  return function selectEntity<S = any>(\n    selectById: (s: S, p: PropId) => Entity | undefined,\n  ) {\n    return (state: S, { id }: PropId): Entity => {\n      if (isFn) {\n        const entity = defaultEntity as () => Entity;\n        return selectById(state, { id }) || entity();\n      }\n\n      return selectById(state, { id }) || (defaultEntity as Entity);\n    };\n  };\n}\n\ninterface TableReducers<Entity extends AnyState = AnyState> {\n  add: (\n    state: MapEntity<Entity>,\n    payload: MapEntity<Entity>,\n  ) => MapEntity<Entity>;\n  set: (\n    state: MapEntity<Entity>,\n    payload: MapEntity<Entity>,\n  ) => MapEntity<Entity>;\n  remove: (state: MapEntity<Entity>, payload: string[]) => MapEntity<Entity>;\n  reset: (state: MapEntity<Entity>) => MapEntity<Entity>;\n  merge: (\n    state: MapEntity<Entity>,\n    payload: PatchEntity<MapEntity<Entity>>,\n  ) => MapEntity<Entity>;\n  patch: (\n    state: MapEntity<Entity>,\n    payload: PatchEntity<MapEntity<Entity>>,\n  ) => MapEntity<Entity>;\n}\n\nexport function tableReducers<Entity extends AnyState = AnyState>(\n  initialState = {} as MapEntity<Entity>,\n): TableReducers<Entity> {\n  return mapReducers(initialState);\n}\n\nexport function createTableAdapter<Entity extends AnyState = AnyState>(\n  initialState = {} as MapEntity<Entity>,\n) {\n  const reducers = tableReducers(initialState);\n  return {\n    reducers,\n    getSelectors: <S>(stateFn: (s: S) => MapEntity<Entity>) =>\n      tableSelectors(stateFn),\n  };\n}\n\ninterface TableActions<S> {\n  add: MapEntity<S>;\n  set: MapEntity<S>;\n  remove: string[];\n  patch: PatchEntity<MapEntity<S>>;\n  merge: PatchEntity<MapEntity<S>>;\n  reset: never;\n}\n\nexport default function createTable<Entity extends AnyState = AnyState>({\n  name,\n  extraReducers,\n  initialState = {} as MapEntity<Entity>,\n}: SliceHelper<MapEntity<Entity>>) {\n  const { reducers, ...adapter } = createTableAdapter<Entity>(initialState);\n  const slice = createSlice<MapEntity<Entity>, TableActions<Entity>>({\n    name,\n    initialState,\n    extraReducers,\n    reducers,\n    useImmer: false,\n  });\n\n  return { ...slice, ...adapter };\n}\n","import createSlice from './create-slice';\nimport type { Action, SliceHelper, Reducer } from './types';\n\nconst ts = () => Date.now();\n\nexport type LoadingStatus = 'loading' | 'success' | 'error' | 'idle';\n\nexport interface LoadingItemState<\n  M extends Record<string, any> = Record<string, any>,\n> {\n  status: LoadingStatus;\n  message: string;\n  lastRun: number;\n  lastSuccess: number;\n  meta: M;\n}\n\nexport type LoadingPayload<\n  M extends Record<string, any> = Record<string, any>,\n> = Partial<{\n  message: string;\n  timestamp: number;\n  meta: M;\n}>;\n\ninterface LoadingActions<M extends Record<string, any> = Record<string, any>> {\n  loading: LoadingPayload<M>;\n  success: LoadingPayload<M>;\n  error: LoadingPayload<M>;\n  reset: never;\n}\n\nexport function defaultLoadingItem<\n  M extends Record<string, any> = Record<string, any>,\n>(li: Partial<LoadingItemState<M>> = {}): LoadingItemState<M> {\n  return {\n    status: 'idle',\n    message: '',\n    lastRun: 0,\n    lastSuccess: 0,\n    meta: {} as M,\n    ...li,\n  };\n}\n\nexport function loadingReducers<\n  M extends Record<string, any> = Record<string, any>,\n>(initialState: LoadingItemState<M>) {\n  return {\n    success: (\n      state: LoadingItemState<M> | undefined,\n      payload: LoadingPayload<M> = {},\n    ) =>\n      ({\n        status: 'success' as 'success',\n        message: payload.message || initialState.message,\n        meta: payload.meta || {},\n        lastRun: state && state.lastRun ? state.lastRun : initialState.lastRun,\n        lastSuccess: payload.timestamp || ts(),\n      } as LoadingItemState<M>),\n    error: (\n      state: LoadingItemState<M> | undefined,\n      payload: LoadingPayload<M> = {},\n    ) =>\n      ({\n        status: 'error' as 'error',\n        message: payload.message || initialState.message,\n        meta: payload.meta || {},\n        lastRun: state && state.lastRun ? state.lastRun : initialState.lastRun,\n        lastSuccess:\n          state && state.lastSuccess\n            ? state.lastSuccess\n            : initialState.lastSuccess,\n      } as LoadingItemState<M>),\n    loading: (\n      state: LoadingItemState<M> | undefined,\n      payload: LoadingPayload<M> = {},\n    ) =>\n      ({\n        status: 'loading' as 'loading',\n        message: payload.message || initialState.message,\n        meta: payload.meta || {},\n        lastRun: payload.timestamp || ts(),\n        lastSuccess:\n          state && state.lastSuccess\n            ? state.lastSuccess\n            : initialState.lastSuccess,\n      } as LoadingItemState<M>),\n    reset: () => initialState,\n  };\n}\n\nexport default function createLoader<\n  M extends Record<string, any> = Record<string, any>,\n>({\n  name,\n  initialState,\n  extraReducers,\n}: SliceHelper<LoadingItemState<M>>): {\n  name: string;\n  reducer: Reducer<LoadingItemState<M>, Action>;\n  actions: {\n    [key in keyof LoadingActions]: LoadingActions[key] extends never\n      ? () => Action\n      : (payload?: LoadingActions<M>[key]) => Action<LoadingActions<M>[key]>;\n  };\n  toString: () => string;\n};\nexport default function createLoader<\n  M extends Record<string, any> = Record<string, any>,\n>({\n  name,\n  initialState,\n  extraReducers,\n}: SliceHelper<LoadingItemState<M>>): {\n  name: string;\n  reducer: Reducer<LoadingItemState<M>, Action>;\n  actions: {\n    [key in keyof LoadingActions]: LoadingActions[key] extends never\n      ? () => Action\n      : (payload?: LoadingActions[key]) => Action<LoadingActions[key]>;\n  };\n  toString: () => string;\n};\nexport default function createLoader<\n  M extends Record<string, any> = Record<string, any>,\n>({\n  name,\n  initialState = defaultLoadingItem(),\n  extraReducers,\n}: SliceHelper<LoadingItemState<M>>) {\n  return createSlice<LoadingItemState<M>, LoadingActions<M>>({\n    name,\n    initialState,\n    extraReducers,\n    useImmer: false,\n    reducers: loadingReducers<M>(initialState),\n  });\n}\n","import { createSelector } from 'reselect';\n\nimport createSlice from './create-slice';\nimport type { SliceHelper, PropId, PropIds, MapEntity } from './types';\nimport { excludesFalse } from './types';\nimport { mapReducers } from './create-map';\nimport {\n  LoadingItemState,\n  LoadingPayload,\n  loadingReducers,\n  defaultLoadingItem,\n} from './create-loader';\n\nexport type LoaderTableState<\n  M extends Record<string, any> = Record<string, any>,\n> = MapEntity<LoadingItemState<M>>;\n\nexport interface LoadingState<\n  M extends Record<string, any> = Record<string, any>,\n> extends LoadingItemState<M> {\n  isError: boolean;\n  isSuccess: boolean;\n  isIdle: boolean;\n  isLoading: boolean;\n  isInitialLoading: boolean;\n}\n\nexport const defaultLoader = (\n  l: Partial<LoadingItemState> = {},\n): LoadingState => {\n  const loading = defaultLoadingItem(l);\n  return {\n    ...loading,\n    isIdle: loading.status === 'idle',\n    isError: loading.status === 'error',\n    isSuccess: loading.status === 'success',\n    isLoading: loading.status === 'loading',\n    isInitialLoading:\n      (loading.status === 'idle' || loading.status === 'loading') &&\n      loading.lastSuccess === 0,\n  };\n};\n\nexport type LoadingMapPayload<\n  M extends Record<string, any> = Record<string, any>,\n> = LoadingPayload<M> & { id: string };\n\nfunction reducerCreator<M extends Record<string, any> = Record<string, any>>(\n  reducer: (\n    s: LoadingItemState<M> | undefined,\n    p: LoadingPayload<M>,\n  ) => LoadingItemState<M>,\n) {\n  return (state: LoaderTableState<M>, payload: LoadingMapPayload<M>) => ({\n    ...state,\n    [payload.id]: reducer(state[payload.id], payload),\n  });\n}\n\nexport interface LoaderTableSelectors<S = any> {\n  findById: (d: LoaderTableState, { id }: PropId) => LoadingState;\n  findByIds: (d: LoaderTableState, { ids }: PropIds) => LoadingState[];\n  selectTable: (s: S) => LoaderTableState;\n  selectById: (s: S, p: PropId) => LoadingState;\n  selectByIds: (s: S, p: { ids: string[] }) => LoadingState[];\n}\n\nexport function loaderTableSelectors<S = any>(\n  selectTable: (s: S) => LoaderTableState,\n): LoaderTableSelectors<S> {\n  const findById = (data: LoaderTableState = {}, { id }: PropId) =>\n    defaultLoader(data[id]);\n  const findByIds = (\n    data: LoaderTableState,\n    { ids }: PropIds,\n  ): LoadingState[] =>\n    ids\n      .map((id) => data[id])\n      .filter(excludesFalse)\n      .map((loader) => defaultLoader(loader));\n\n  const selectById: any = createSelector(\n    selectTable,\n    (_: S, p: PropId) => p.id,\n    (loaders, id) => findById(loaders, { id }),\n  );\n  const selectByIds: any = createSelector(\n    selectTable,\n    (_: S, p: PropIds) => p.ids,\n    (loaders, ids) => findByIds(loaders, { ids }),\n  );\n\n  return {\n    findById,\n    findByIds,\n    selectTable,\n    selectById,\n    selectByIds,\n  };\n}\n\ninterface LoadingMapActions<\n  M extends Record<string, any> = Record<string, any>,\n> {\n  loading: LoadingMapPayload<M>;\n  success: LoadingMapPayload<M>;\n  error: LoadingMapPayload<M>;\n  remove: string[];\n  resetById: string;\n  resetAll: never;\n}\n\nexport default function createLoaderTable<\n  M extends Record<string, any> = Record<string, any>,\n>({\n  name,\n  initialState = {},\n  extraReducers,\n}: SliceHelper<LoaderTableState<M>>) {\n  const loading = loadingReducers<M>(defaultLoadingItem<M>());\n  const map = mapReducers(initialState);\n\n  const slice = createSlice<LoaderTableState<M>, LoadingMapActions<M>>({\n    name,\n    initialState,\n    extraReducers,\n    useImmer: false,\n    reducers: {\n      loading: reducerCreator<M>(loading.loading as any),\n      success: reducerCreator<M>(loading.success as any),\n      error: reducerCreator<M>(loading.error as any),\n      resetById: (state: LoaderTableState<M>, id: string) => ({\n        ...state,\n        [id]: loading.reset(),\n      }),\n      remove: map.remove,\n      resetAll: map.reset,\n    },\n  });\n\n  return {\n    ...slice,\n    getSelectors: <S>(stateFn: (s: S) => LoaderTableState<M>) =>\n      loaderTableSelectors(stateFn),\n  };\n}\n","import createSlice from './create-slice';\nimport type { SliceHelper } from './types';\n\nexport function listReducers<State extends any[]>(\n  initialState = [] as unknown as State,\n) {\n  return {\n    add: (state: State, payload: State): State => {\n      return [...state, ...payload] as State;\n    },\n    remove: (state: State, payload: number[]): State => {\n      const newState = [...state] as State;\n      payload.forEach((index) => {\n        newState.splice(index, 1);\n      });\n      return newState;\n    },\n    reset: (_: State): State => initialState,\n  };\n}\n\ninterface ListActions<S> {\n  add: S;\n  remove: number[];\n  reset: never;\n}\n\nexport default function createList<State extends any[]>({\n  name,\n  extraReducers,\n  initialState = [] as unknown as State,\n}: SliceHelper<State>) {\n  const slice = createSlice<State, ListActions<State>>({\n    name,\n    initialState,\n    extraReducers,\n    useImmer: false,\n    reducers: listReducers(initialState),\n  });\n\n  return slice;\n}\n","import { listReducers } from './create-list';\nimport type { MapEntity, SliceHelper } from './types';\nimport { mapReducers } from './create-map';\nimport createSlice from './create-slice';\n\ninterface ListTableActions<M extends any[]> {\n  add: MapEntity<M>;\n  set: MapEntity<M>;\n  remove: string[];\n  reset: never;\n  addItems: MapEntity<M>;\n}\n\nexport default function createListTable<M extends any[] = string[]>({\n  name,\n  initialState = {},\n  extraReducers,\n}: SliceHelper<MapEntity<M>>) {\n  const listReducer = listReducers<M>([] as any);\n  const map = mapReducers(initialState);\n\n  return createSlice<MapEntity<M>, ListTableActions<M>>({\n    name,\n    initialState,\n    extraReducers,\n    useImmer: false,\n    reducers: {\n      add: map.add,\n      set: map.set,\n      remove: map.remove,\n      reset: map.reset,\n      addItems: (state: MapEntity<M>, p: MapEntity<M>) => {\n        const nextState = { ...state };\n        Object.keys(p).forEach((key) => {\n          if (nextState[key]) {\n            nextState[key] = listReducer.add(\n              nextState[key] as any,\n              p[key] as any,\n            );\n          } else {\n            nextState[key] = p[key];\n          }\n        });\n        return nextState;\n      },\n    },\n  });\n}\n"],"names":["excludesFalse","n","Boolean","combine","_step","args","slice","call","arguments","newObj","_iterator","done","obj","value","key","hasOwnProperty","console","warn","creator","type","action","payload","toString","createReducer","initialState","reducers","state","createNextState","draft","caseReducer","createSlice","_ref","name","extraReducers","useImmer","_ref$useImmer","Error","Object","keys","reducerMap","actionKeys","reduce","map","createActionType","createReducerPlain","actions","createAction","reducer","assignReducers","set","_","p","reset","mapReducers","add","newState","_extends","forEach","remove","patch","id","entity","s","nextEntity","merge","Array","isArray","concat","prop","constructor","tableSelectors","selectTable","tableAsList","data","values","filter","findByIds","ids","findById","selectTableAsList","createSelector","selectById","selectByIds","tbl","createTableAdapter","tableReducers","getSelectors","stateFn","now","defaultLoadingItem","li","status","message","lastRun","lastSuccess","meta","loadingReducers","success","timestamp","ts","error","loading","defaultLoader","l","isIdle","isError","isSuccess","isLoading","isInitialLoading","reducerCreator","_extends2","loader","loaders","listReducers","index","splice","createActionMap","acc","_ref$initialState","addItems","nextState","listReducer","createLoader","createLoaderTable","_ref3$initialState","resetById","_extends3","resetAll","loaderTableSelectors","createMap","createTable","_createTableAdapter","adapter","defaultEntity","_ref4","isFn"],"mappings":"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"}