{"version":3,"file":"use-immer.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { produce, Draft, nothing, freeze } from \"immer\";\nimport { useState, useReducer, useCallback, useMemo, Dispatch } from \"react\";\n\nexport type DraftFunction<S> = (draft: Draft<S>) => void;\nexport type Updater<S> = (arg: S | DraftFunction<S>) => void;\nexport type ImmerHook<S> = [S, Updater<S>];\n\nexport function useImmer<S = any>(initialValue: S | (() => S)): ImmerHook<S>;\n\nexport function useImmer(initialValue: any) {\n  const [val, updateValue] = useState(() =>\n    freeze(\n      typeof initialValue === \"function\" ? initialValue() : initialValue,\n      true\n    )\n  );\n  return [\n    val,\n    useCallback((updater) => {\n      if (typeof updater === \"function\") updateValue(produce(updater));\n      else updateValue(freeze(updater));\n    }, []),\n  ];\n}\n\n// Provides different overloads of `useImmerReducer` similar to `useReducer` from `@types/react`.\n\nexport type ImmerReducer<S, A> = (\n  draftState: Draft<S>,\n  action: A\n) => void | (S extends undefined ? typeof nothing : S);\n\n/**\n * @deprecated Use `ImmerReducer` instead since there is already a `Reducer` type in `@types/react`.\n */\nexport type Reducer<S = any, A = any> = ImmerReducer<S, A>;\n\nexport function useImmerReducer<S, A, I>(\n  reducer: ImmerReducer<S, A>,\n  initializerArg: S & I,\n  initializer: (arg: S & I) => S\n): [S, Dispatch<A>];\n\nexport function useImmerReducer<S, A, I>(\n  reducer: ImmerReducer<S, A>,\n  initializerArg: I,\n  initializer: (arg: I) => S\n): [S, Dispatch<A>];\n\nexport function useImmerReducer<S, A>(\n  reducer: ImmerReducer<S, A>,\n  initialState: S,\n  initializer?: undefined\n): [S, Dispatch<A>];\n\nexport function useImmerReducer<S, A, I>(\n  reducer: ImmerReducer<S, A>,\n  initializerArg: S & I,\n  initializer?: (arg: S & I) => S\n) {\n  const cachedReducer = useMemo(() => produce(reducer), [reducer]);\n  return useReducer(cachedReducer, initializerArg as any, initializer as any);\n}\n"],"names":["initialValue","_useState","useState","freeze","updateValue","useCallback","updater","produce","reducer","initializerArg","initializer","cachedReducer","useMemo","useReducer"],"mappings":"mTASM,SAAmBA,GACvB,IAAAC,EAA2BC,EAAAA,SAAS,kBAClCC,SAC0B,mBAAjBH,EAA8BA,IAAiBA,GACtD,EACD,GAJSI,EAAWH,EAMvB,GAAA,MAAO,CANGA,EAAA,GAQRI,EAAAA,YAAY,SAACC,GACwBF,EAAZ,mBAAZE,EAAoCC,EAAOA,QAACD,GACtCH,EAAAA,OAAOG,GAC1B,EAAG,IAEP,6BAiCEE,EACAC,EACAC,GAEA,IAAMC,EAAgBC,EAAOA,QAAC,WAAM,OAAAL,EAAAA,QAAQC,EAAQ,EAAE,CAACA,IACvD,OAAOK,EAAAA,WAAWF,EAAeF,EAAuBC,EAC1D"}