UNPKG

ngrx-immer

Version:

Immer wrappers around NgRx methods createReducer, on, and ComponentStore

1 lines 3.25 kB
{"version":3,"file":"ngrx-immer-signals.mjs","sources":["../../src/signals/index.ts","../../src/signals/ngrx-immer-signals.ts"],"sourcesContent":["import { PartialStateUpdater, patchState, WritableStateSource } from '@ngrx/signals';\nimport { immerReducer } from 'ngrx-immer';\nimport { on, EventCreator } from '@ngrx/signals/events';\nimport { produce } from 'immer';\n\nexport type ImmerStateUpdater<State extends object> = (state: NoInfer<State>) => void;\n\nfunction toFullStateUpdater<State extends object>(updater: PartialStateUpdater<State & {}> | ImmerStateUpdater<State & {}>): (state: State) => State | void {\n\treturn (state: State) => {\n\t\tconst patchedState = updater(state);\n\t\tif (patchedState) {\n\t\t\treturn ({ ...state, ...patchedState });\n\t\t}\n\t\treturn;\n\t};\n}\nexport function immerPatchState<State extends object>(\n\tstateSource: WritableStateSource<State>,\n\t...updaters: Array<\n\t\tPartial<NoInfer<State>> | PartialStateUpdater<NoInfer<State>> | ImmerStateUpdater<State>\n\t>): void {\n\tconst immerUpdaters = updaters.map(updater => {\n\t\tif (typeof updater === 'function') {\n\t\t\treturn immerReducer(toFullStateUpdater(updater)) as unknown as PartialStateUpdater<State & {}>;\n\t\t}\n\t\treturn updater;\n\t});\n\tpatchState(stateSource, ...immerUpdaters);\n}\n\n\n\ntype CaseReducer<\n\tState extends object,\n\tEventCreators extends EventCreator<string, any>[],\n> = (\n\tevent: { [K in keyof EventCreators]: ReturnType<EventCreators[K]> }[number],\n\tstate: State\n) =>\n\t\t| Partial<State>\n\t\t| PartialStateUpdater<State>\n\t\t| Array<Partial<State> | PartialStateUpdater<State>>;\n\ntype CaseReducerResult<State extends object, EventCreators extends EventCreator<string, any>[]> = {\n\treducer: CaseReducer<State, EventCreators>;\n\tevents: EventCreators;\n};\n\nexport function immerOn<State extends object, EventCreators extends EventCreator<string, any>[]>(\n\t...args: [\n\t\t...events: EventCreators,\n\t\treducer: (state: State, action: ReturnType<EventCreators[number]>) => void\n\t]\n): CaseReducerResult<State, EventCreator<string, any>[]> {\n\tconst reducer = args.pop() as (state: State, action: ReturnType<EventCreators[number]>) => void;\n\tconst events = args as unknown as EventCreators;\n\treturn (on as any)(...events, (action: any, state: any) => produce(state, (draft: any) => reducer(draft, action)));\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAOA,SAAS,kBAAkB,CAAuB,OAAwE,EAAA;IACzH,OAAO,CAAC,KAAY,KAAI;AACvB,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,YAAY,EAAE;YACjB,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,YAAY,EAAE;QACtC;QACA;AACD,IAAA,CAAC;AACF;SACgB,eAAe,CAC9B,WAAuC,EACvC,GAAG,QAEF,EAAA;IACD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAG;AAC5C,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AAClC,YAAA,OAAO,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAA+C;QAC/F;AACA,QAAA,OAAO,OAAO;AACf,IAAA,CAAC,CAAC;AACF,IAAA,UAAU,CAAC,WAAW,EAAE,GAAG,aAAa,CAAC;AAC1C;AAoBM,SAAU,OAAO,CACtB,GAAG,IAGF,EAAA;AAED,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAuE;IAC/F,MAAM,MAAM,GAAG,IAAgC;AAC/C,IAAA,OAAQ,EAAU,CAAC,GAAG,MAAM,EAAE,CAAC,MAAW,EAAE,KAAU,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,KAAU,KAAK,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACnH;;ACzDA;;AAEG;;;;"}