/** * Types taken from Redux */ /** * @link https://github.com/reduxjs/redux/blob/master/src/types/actions.ts */ export interface AnyAction extends Action { [extraProps: string]: any; } /** * @template T the type of the action's `type` tag. * @link https://github.com/reduxjs/redux/blob/master/src/types/actions.ts */ export interface Action { type: T; } /** * @template S The type of state consumed and produced by this reducer. * @template A The type of actions the reducer can potentially respond to. * @link https://github.com/reduxjs/redux/blob/master/src/types/reducers.ts */ export type Reducer = (state: S | undefined, action: A) => S; /** * Types taken from redux-persist * @link https://github.com/rt2zz/redux-persist/blob/master/types/types.d.ts */ export interface Storage { getItem(key: string, ...args: Array): any; setItem(key: string, value: any, ...args: Array): any; removeItem(key: string, ...args: Array): any; } export interface PersistState { version: number; rehydrated: boolean; } export type PersistedState = | { _persist: PersistState; } | undefined; export type PersistMigrate = (state: PersistedState, currentVersion: number) => Promise; /** * @desc * `SS` means SubState * `ESS` means EndSubState * `S` means State */ export type TransformInbound = (subState: SS, key: keyof S, state: S) => ESS; /** * @desc * `SS` means SubState * `HSS` means HydratedSubState * `RS` means RawState */ export type TransformOutbound = (state: SS, key: keyof RS, rawState: RS) => HSS; export interface Transform { in: TransformInbound; out: TransformOutbound; deepPersistKey?: string; } export type Transforms = Array>; /** * @desc * `S` means State * `RS` means RawState * `HSS` means HydratedSubState * `ESS` means EndSubState */ export interface PersistConfig { version?: number; storage: Storage; key: string; /** * @deprecated keyPrefix is going to be removed in v6. */ keyPrefix?: string; blacklist?: Array; whitelist?: Array; transforms?: Array>; throttle?: number; migrate?: PersistMigrate; stateReconciler?: false | StateReconciler; /** * @desc Used for migrations. */ getStoredState?: (config: PersistConfig) => Promise; debug?: boolean; serialize?: boolean; timeout?: number; writeFailHandler?: (err: Error) => void; } export type StateReconciler = (inboundState: any, state: S, reducedState: S, config: PersistConfig) => S; /** * Types used in redux deep persist core and utils */ export type TObject = Record; export type RootKeysGroup = { [key: string]: string[] | undefined }; export enum ConfigType { WHITELIST, BLACKLIST, } export interface GetPersistConfigArgs extends Omit, 'stateReconciler'> { rootReducer: Reducer; }