@angular-architects/ngrx-toolkit 18.0.2 → 18.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +1 -428
  2. package/esm2022/index.mjs +1 -3
  3. package/esm2022/lib/with-undo-redo.mjs +10 -4
  4. package/esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs +5 -0
  5. package/esm2022/redux-connector/index.mjs +3 -0
  6. package/esm2022/redux-connector/src/lib/create-redux.mjs +41 -0
  7. package/esm2022/redux-connector/src/lib/model.mjs +2 -0
  8. package/esm2022/redux-connector/src/lib/rxjs-interop/redux-method.mjs +22 -0
  9. package/esm2022/redux-connector/src/lib/signal-redux-store.mjs +43 -0
  10. package/esm2022/redux-connector/src/lib/util.mjs +13 -0
  11. package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs +119 -0
  12. package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs.map +1 -0
  13. package/fesm2022/angular-architects-ngrx-toolkit.mjs +34 -138
  14. package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
  15. package/index.d.ts +0 -2
  16. package/lib/with-undo-redo.d.ts +14 -25
  17. package/package.json +14 -2
  18. package/redux-connector/index.d.ts +2 -0
  19. package/esm2022/lib/redux-connector/create-redux.mjs +0 -41
  20. package/esm2022/lib/redux-connector/index.mjs +0 -2
  21. package/esm2022/lib/redux-connector/model.mjs +0 -2
  22. package/esm2022/lib/redux-connector/rxjs-interop/index.mjs +0 -2
  23. package/esm2022/lib/redux-connector/rxjs-interop/redux-method.mjs +0 -22
  24. package/esm2022/lib/redux-connector/signal-redux-store.mjs +0 -43
  25. package/esm2022/lib/redux-connector/util.mjs +0 -13
  26. package/lib/redux-connector/index.d.ts +0 -1
  27. package/lib/redux-connector/rxjs-interop/index.d.ts +0 -1
  28. /package/{lib/redux-connector → redux-connector/src/lib}/create-redux.d.ts +0 -0
  29. /package/{lib/redux-connector → redux-connector/src/lib}/model.d.ts +0 -0
  30. /package/{lib/redux-connector → redux-connector/src/lib}/rxjs-interop/redux-method.d.ts +0 -0
  31. /package/{lib/redux-connector → redux-connector/src/lib}/signal-redux-store.d.ts +0 -0
  32. /package/{lib/redux-connector → redux-connector/src/lib}/util.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/lib/with-storage-sync.ts","../../../../libs/ngrx-toolkit/src/lib/with-pagination.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/util.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/signal-redux-store.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/create-redux.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/rxjs-interop/redux-method.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import {\n EmptyFeatureResult,\n PartialStateUpdater,\n patchState as originalPatchState,\n SignalStoreFeature,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { effect, inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { Prettify } from './shared/prettify';\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION__:\n | {\n connect: (options: { name: string }) => {\n send: (action: Action, state: Record<string, unknown>) => void;\n };\n }\n | undefined;\n }\n}\n\nexport type Action = { type: string };\n\nconst storeRegistry = signal<Record<string, Signal<unknown>>>({});\n\nlet currentActionNames = new Set<string>();\n\nlet synchronizationInitialized = false;\n\nfunction initSynchronization() {\n effect(() => {\n if (!connection) {\n return;\n }\n\n const stores = storeRegistry();\n const rootState: Record<string, unknown> = {};\n for (const name in stores) {\n const store = stores[name];\n rootState[name] = store();\n }\n\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames = new Set<string>();\n\n connection.send({ type }, rootState);\n });\n}\n\nfunction getValueFromSymbol(obj: unknown, symbol: symbol) {\n if (typeof obj === 'object' && obj && symbol in obj) {\n return (obj as { [key: symbol]: any })[symbol];\n }\n}\n\nfunction getStoreSignal(store: unknown): Signal<unknown> {\n const [signalStateKey] = Object.getOwnPropertySymbols(store);\n if (!signalStateKey) {\n throw new Error('Cannot find State Signal');\n }\n\n return getValueFromSymbol(store, signalStateKey);\n}\n\ntype ConnectResponse = {\n send: (action: Action, state: Record<string, unknown>) => void;\n};\nlet connection: ConnectResponse | undefined;\n\n/**\n * required for testing. is not exported during build\n */\nexport function reset() {\n connection = undefined;\n synchronizationInitialized = false;\n storeRegistry.set({});\n}\n\n/**\n * @param name store's name as it should appear in the DevTools\n */\nexport function withDevtools<Input extends EmptyFeatureResult>(\n name: string\n): SignalStoreFeature<Input, EmptyFeatureResult> {\n return (store) => {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n if (isServer) {\n return store;\n }\n\n const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;\n if (!extensions) {\n return store;\n }\n\n if (!connection) {\n connection = extensions.connect({\n name: 'NgRx Signal Store',\n });\n }\n\n const storeSignal = getStoreSignal(store);\n storeRegistry.update((value) => ({\n ...value,\n [name]: storeSignal,\n }));\n\n if (!synchronizationInitialized) {\n initSynchronization();\n synchronizationInitialized = true;\n }\n\n return store;\n };\n}\n\ntype PatchFn = typeof originalPatchState extends (\n arg1: infer First,\n ...args: infer Rest\n) => infer Returner\n ? (state: First, action: string, ...rest: Rest) => Returner\n : never;\n\n/**\n * @deprecated Has been renamed to `updateState`\n */\nexport const patchState: PatchFn = (state, action, ...rest) => {\n updateState(state, action, ...rest);\n};\n\n/**\n * Wrapper of `patchState` for DevTools integration. Next to updating the state,\n * it also sends the action to the DevTools.\n * @param stateSource state of Signal Store\n * @param action name of action how it will show in DevTools\n * @param updaters updater functions or objects\n */\nexport function updateState<State extends object>(\n stateSource: WritableStateSource<State>,\n action: string,\n ...updaters: Array<\n Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>\n >\n): void {\n currentActionNames.add(action);\n return originalPatchState(stateSource, ...updaters);\n}\n","import { ActionsFnSpecs } from '../with-redux';\n\nexport function assertActionFnSpecs(\n obj: unknown\n): asserts obj is ActionsFnSpecs {\n if (!obj || typeof obj !== 'object') {\n throw new Error('%o is not an Action Specification');\n }\n}\n","import { Observable, Subject } from 'rxjs';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { assertActionFnSpecs } from './assertions/assertions';\n\n/** Actions **/\n\ntype Payload = Record<string, unknown>;\n\ntype ActionFn<\n Type extends string = string,\n ActionPayload extends Payload = Payload\n> = ((payload: ActionPayload) => ActionPayload & { type: Type }) & {\n type: Type;\n};\n\ntype ActionFns = Record<string, ActionFn>;\n\nexport type ActionsFnSpecs = Record<string, Payload>;\n\ntype ActionFnCreator<Spec extends ActionsFnSpecs> = {\n [ActionName in keyof Spec]: (Record<never, never> extends Spec[ActionName]\n ? () => Spec[ActionName] & { type: ActionName }\n : (\n payload: Spec[ActionName]\n ) => Spec[ActionName] & { type: ActionName }) & {\n type: ActionName & string;\n };\n};\n\ntype ActionFnPayload<Action> = Action extends (payload: infer Payload) => void\n ? Payload\n : never;\n\ntype ActionFnsCreator<Spec extends ActionsFnSpecs> = Spec extends {\n private: Record<string, Payload>;\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['private']> & ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\ntype PublicActionFns<Spec extends ActionsFnSpecs> = Spec extends {\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\nexport function payload<Type extends Payload>(): Type {\n return {} as Type;\n}\n\nexport const noPayload = {};\n\n/** Reducer **/\n\ntype ReducerFunction<ReducerAction, State> = (\n state: State,\n action: ActionFnPayload<ReducerAction>\n) => void;\n\ntype ReducerFactory<StateActionFns extends ActionFns, State> = (\n actions: StateActionFns,\n on: <ReducerAction extends { type: string }>(\n action: ReducerAction,\n reducerFn: ReducerFunction<ReducerAction, State>\n ) => void\n) => void;\n\n/** Effect **/\n\ntype EffectsFactory<StateActionFns extends ActionFns> = (\n actions: StateActionFns,\n create: <EffectAction extends { type: string }>(\n action: EffectAction\n ) => Observable<ActionFnPayload<EffectAction>>\n) => Record<string, Observable<unknown>>;\n\n// internal types\n\n/**\n * Record which holds all effects for a specific action type.\n * The values are Subject which the effect are subscribed to.\n * `createActionFns` will call next on these subjects.\n */\ntype EffectsRegistry = Record<string, Subject<ActionFnPayload<unknown>>[]>;\n\nfunction createActionFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: EffectsRegistry,\n state: unknown\n) {\n const actionFns: Record<string, ActionFn> = {};\n\n for (const type in actionFnSpecs) {\n const actionFn = (payload: Payload) => {\n const fullPayload = { ...payload, type };\n const reducer = reducerRegistry[type];\n if (reducer) {\n (reducer as (state: unknown, payload: unknown) => void)(\n state,\n fullPayload as unknown\n );\n }\n const effectSubjects = effectsRegistry[type];\n if (effectSubjects?.length) {\n for (const effectSubject of effectSubjects) {\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\n }\n }\n return fullPayload;\n };\n actionFn.type = type.toString();\n actionFns[type] = actionFn;\n }\n\n return actionFns;\n}\n\nfunction createPublicAndAllActionsFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: EffectsRegistry,\n state: unknown\n): { all: ActionFns; publics: ActionFns } {\n if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {\n const privates = actionFnSpecs['private'] || {};\n const publics = actionFnSpecs['public'] || {};\n\n assertActionFnSpecs(privates);\n assertActionFnSpecs(publics);\n\n const privateActionFns = createActionFns(\n privates,\n reducerRegistry,\n effectsRegistry,\n state\n );\n const publicActionFns = createActionFns(\n publics,\n reducerRegistry,\n effectsRegistry,\n state\n );\n\n return {\n all: { ...privateActionFns, ...publicActionFns },\n publics: publicActionFns,\n };\n }\n\n const actionFns = createActionFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n state\n );\n\n return { all: actionFns, publics: actionFns };\n}\n\nfunction fillReducerRegistry(\n reducer: ReducerFactory<ActionFns, unknown>,\n actionFns: ActionFns,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >\n) {\n function on(\n action: { type: string },\n reducerFn: (state: unknown, payload: ActionFnPayload<unknown>) => void\n ) {\n reducerRegistry[action.type] = reducerFn;\n }\n\n reducer(actionFns, on);\n\n return reducerRegistry;\n}\n\nfunction fillEffects(\n effects: EffectsFactory<ActionFns>,\n actionFns: ActionFns,\n effectsRegistry: EffectsRegistry = {}\n): Observable<unknown>[] {\n function create(action: { type: string }) {\n const subject = new Subject<ActionFnPayload<unknown>>();\n if (!(action.type in effectsRegistry)) {\n effectsRegistry[action.type] = [];\n }\n effectsRegistry[action.type].push(subject);\n return subject.asObservable();\n }\n\n const effectObservables = effects(actionFns, create);\n return Object.values(effectObservables);\n}\n\nfunction startSubscriptions(observables: Observable<unknown>[]) {\n return observables.map((observable) => observable.subscribe());\n}\n\nfunction processRedux<Spec extends ActionsFnSpecs, ReturnType>(\n actionFnSpecs: Spec,\n reducer: ReducerFactory<ActionFns, unknown>,\n effects: EffectsFactory<ActionFns>,\n store: unknown\n) {\n const reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n > = {};\n const effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>[]> =\n {};\n const actionsMap = createPublicAndAllActionsFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n store\n );\n const actionFns = actionsMap.all;\n const publicActionsFns = actionsMap.publics;\n\n fillReducerRegistry(reducer, actionFns, reducerRegistry);\n const effectObservables = fillEffects(effects, actionFns, effectsRegistry);\n const subscriptions = startSubscriptions(effectObservables);\n\n return {\n methods: publicActionsFns as ReturnType,\n subscriptions: subscriptions,\n };\n}\n\n/**\n * @param redux redux\n *\n * properties do not start with `with` since they are not extension functions on their own.\n *\n * no dependency to NgRx\n *\n * actions are passed to reducer and effects, but it is also possible to use other actions.\n * effects provide forAction and do not return anything. that is important because effects should stay inaccessible\n */\nexport function withRedux<\n Spec extends ActionsFnSpecs,\n Input extends SignalStoreFeatureResult,\n StateActionFns extends ActionFnsCreator<Spec> = ActionFnsCreator<Spec>,\n PublicStoreActionFns extends PublicActionFns<Spec> = PublicActionFns<Spec>\n>(redux: {\n actions: Spec;\n reducer: ReducerFactory<StateActionFns, WritableStateSource<Input['state']>>;\n effects: EffectsFactory<StateActionFns>;\n}): SignalStoreFeature<\n Input,\n EmptyFeatureResult & { methods: PublicStoreActionFns }\n> {\n return (store) => {\n const { methods } = processRedux<Spec, PublicStoreActionFns>(\n redux.actions,\n redux.reducer as ReducerFactory<ActionFns, unknown>,\n redux.effects as EffectsFactory<ActionFns>,\n store\n );\n return {\n ...store,\n methods,\n };\n };\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\n\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\n\nexport type CallStateSlice = {\n callState: CallState;\n};\n\nexport type NamedCallStateSlice<Collection extends string> = {\n [K in keyof CallStateSlice as `${Collection}${Capitalize<K>}`]: CallStateSlice[K];\n};\n\nexport type CallStateSignals = {\n loading: Signal<boolean>;\n loaded: Signal<boolean>;\n error: Signal<string | null>;\n};\n\nexport type NamedCallStateSignals<Prop extends string> = {\n [K in keyof CallStateSignals as `${Prop}${Capitalize<K>}`]: CallStateSignals[K];\n};\n\nexport type SetCallState<Prop extends string | undefined> = Prop extends string\n ? NamedCallStateSlice<Prop>\n : CallStateSlice;\n\nexport function getCallStateKeys(config?: { collection?: string }) {\n const prop = config?.collection;\n return {\n callStateKey: prop ? `${config.collection}CallState` : 'callState',\n loadingKey: prop ? `${config.collection}Loading` : 'loading',\n loadedKey: prop ? `${config.collection}Loaded` : 'loaded',\n errorKey: prop ? `${config.collection}Error` : 'error',\n };\n}\n\nexport function withCallState<Collection extends string>(config: {\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: NamedCallStateSlice<Collection>;\n computed: NamedCallStateSignals<Collection>;\n }\n>;\nexport function withCallState(): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: CallStateSlice;\n computed: CallStateSignals;\n }\n>;\nexport function withCallState<Collection extends string>(config?: {\n collection: Collection;\n}): SignalStoreFeature {\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n getCallStateKeys(config);\n\n return signalStoreFeature(\n withState({ [callStateKey]: 'init' }),\n withComputed((state: Record<string, Signal<unknown>>) => {\n const callState = state[callStateKey] as Signal<CallState>;\n\n return {\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n }),\n };\n })\n );\n}\n\nexport function setLoading<Prop extends string | undefined = undefined>(\n prop?: Prop\n): SetCallState<Prop> {\n if (prop) {\n return { [`${prop}CallState`]: 'loading' } as SetCallState<Prop>;\n }\n\n return { callState: 'loading' } as SetCallState<Prop>;\n}\n\nexport function setLoaded<Prop extends string | undefined = undefined>(\n prop?: Prop\n): SetCallState<Prop> {\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' } as SetCallState<Prop>;\n } else {\n return { callState: 'loaded' } as SetCallState<Prop>;\n }\n}\n\nexport function setError<Prop extends string | undefined = undefined>(\n error: unknown,\n prop?: Prop\n): SetCallState<Prop> {\n let errorMessage: string;\n\n if (!error) {\n errorMessage = '';\n } else if (typeof error === 'object' && 'message' in error) {\n errorMessage = String(error.message);\n } else {\n errorMessage = String(error);\n }\n\n if (prop) {\n return {\n [`${prop}CallState`]: { error: errorMessage },\n } as SetCallState<Prop>;\n } else {\n return { callState: { error: errorMessage } } as SetCallState<Prop>;\n }\n}\n","import { ProviderToken, Signal, computed, inject } from '@angular/core';\nimport {\n SignalStoreFeature,\n patchState,\n signalStoreFeature,\n withComputed,\n withMethods,\n withState,\n EmptyFeatureResult,\n WritableStateSource,\n} from '@ngrx/signals';\nimport {\n CallState,\n getCallStateKeys,\n setError,\n setLoaded,\n setLoading,\n} from './with-call-state';\nimport {\n setAllEntities,\n EntityId,\n addEntity,\n updateEntity,\n removeEntity,\n} from '@ngrx/signals/entities';\nimport { EntityState, NamedEntityComputed } from './shared/signal-store-models';\n\nexport type Filter = Record<string, unknown>;\nexport type Entity = { id: EntityId };\n\nexport interface DataService<E extends Entity, F extends Filter> {\n load(filter: F): Promise<E[]>;\n\n loadById(id: EntityId): Promise<E>;\n\n create(entity: E): Promise<E>;\n\n update(entity: E): Promise<E>;\n\n updateAll(entity: E[]): Promise<E[]>;\n\n delete(entity: E): Promise<void>;\n}\n\nexport function capitalize(str: string): string {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\n\nexport function getDataServiceKeys(options: { collection?: string }) {\n const filterKey = options.collection\n ? `${options.collection}Filter`\n : 'filter';\n const selectedIdsKey = options.collection\n ? `selected${capitalize(options.collection)}Ids`\n : 'selectedIds';\n const selectedEntitiesKey = options.collection\n ? `selected${capitalize(options.collection)}Entities`\n : 'selectedEntities';\n\n const updateFilterKey = options.collection\n ? `update${capitalize(options.collection)}Filter`\n : 'updateFilter';\n const updateSelectedKey = options.collection\n ? `updateSelected${capitalize(options.collection)}Entities`\n : 'updateSelected';\n const loadKey = options.collection\n ? `load${capitalize(options.collection)}Entities`\n : 'load';\n\n const currentKey = options.collection\n ? `current${capitalize(options.collection)}`\n : 'current';\n const loadByIdKey = options.collection\n ? `load${capitalize(options.collection)}ById`\n : 'loadById';\n const setCurrentKey = options.collection\n ? `setCurrent${capitalize(options.collection)}`\n : 'setCurrent';\n const createKey = options.collection\n ? `create${capitalize(options.collection)}`\n : 'create';\n const updateKey = options.collection\n ? `update${capitalize(options.collection)}`\n : 'update';\n const updateAllKey = options.collection\n ? `updateAll${capitalize(options.collection)}`\n : 'updateAll';\n const deleteKey = options.collection\n ? `delete${capitalize(options.collection)}`\n : 'delete';\n\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection\n ? `${options.collection}Entities`\n : 'entities';\n const entityMapKey = options.collection\n ? `${options.collection}EntityMap`\n : 'entityMap';\n const idsKey = options.collection ? `${options.collection}Ids` : 'ids';\n\n return {\n filterKey,\n selectedIdsKey,\n selectedEntitiesKey,\n updateFilterKey,\n updateSelectedKey,\n loadKey,\n entitiesKey,\n entityMapKey,\n idsKey,\n\n currentKey,\n loadByIdKey,\n setCurrentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n };\n}\n\nexport type NamedDataServiceState<\n E extends Entity,\n F extends Filter,\n Collection extends string\n> = {\n [K in Collection as `${K}Filter`]: F;\n} & {\n [K in Collection as `selected${Capitalize<K>}Ids`]: Record<EntityId, boolean>;\n} & {\n [K in Collection as `current${Capitalize<K>}`]: E;\n};\n\nexport type DataServiceState<E extends Entity, F extends Filter> = {\n filter: F;\n selectedIds: Record<EntityId, boolean>;\n current: E;\n};\n\nexport type DataServiceComputed<E extends Entity> = {\n selectedEntities: Signal<E[]>;\n};\n\nexport type NamedDataServiceComputed<\n E extends Entity,\n Collection extends string\n> = {\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\n};\n\nexport type NamedDataServiceMethods<\n E extends Entity,\n F extends Filter,\n Collection extends string\n> = {\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\n} & {\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (\n id: EntityId,\n selected: boolean\n ) => void;\n} & {\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\n} & {\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\n} & {\n [K in Collection as `load${Capitalize<K>}ById`]: (\n id: EntityId\n ) => Promise<void>;\n} & {\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\n} & {\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\n} & {\n [K in Collection as `updateAll${Capitalize<K>}`]: (\n entity: E[]\n ) => Promise<void>;\n} & {\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\n};\n\nexport type DataServiceMethods<E extends Entity, F extends Filter> = {\n updateFilter: (filter: F) => void;\n updateSelected: (id: EntityId, selected: boolean) => void;\n load: () => Promise<void>;\n\n setCurrent(entity: E): void;\n loadById(id: EntityId): Promise<void>;\n create(entity: E): Promise<void>;\n update(entity: E): Promise<void>;\n updateAll(entities: E[]): Promise<void>;\n delete(entity: E): Promise<void>;\n};\n\nexport function withDataService<\n E extends Entity,\n F extends Filter,\n Collection extends string\n>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n collection: Collection;\n}): SignalStoreFeature<\n // These alternatives break type inference:\n // state: { callState: CallState } & NamedEntityState<E, Collection>,\n // state: NamedEntityState<E, Collection>,\n EmptyFeatureResult & { computed: NamedEntityComputed<E, Collection> },\n {\n state: NamedDataServiceState<E, F, Collection>;\n computed: NamedDataServiceComputed<E, Collection>;\n methods: NamedDataServiceMethods<E, F, Collection>;\n }\n>;\nexport function withDataService<E extends Entity, F extends Filter>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n}): SignalStoreFeature<\n EmptyFeatureResult & { state: { callState: CallState } & EntityState<E> },\n {\n state: DataServiceState<E, F>;\n computed: DataServiceComputed<E>;\n methods: DataServiceMethods<E, F>;\n }\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withDataService<\n E extends Entity,\n F extends Filter,\n Collection extends string\n>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n collection?: Collection;\n}): SignalStoreFeature<any, any> {\n const { dataServiceType, filter, collection: prefix } = options;\n const {\n entitiesKey,\n filterKey,\n loadKey,\n selectedEntitiesKey,\n selectedIdsKey,\n updateFilterKey,\n updateSelectedKey,\n\n currentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n loadByIdKey,\n setCurrentKey,\n } = getDataServiceKeys(options);\n\n const { callStateKey } = getCallStateKeys({ collection: prefix });\n\n return signalStoreFeature(\n withState(() => ({\n [filterKey]: filter,\n [selectedIdsKey]: {} as Record<EntityId, boolean>,\n [currentKey]: undefined as E | undefined,\n })),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const selectedIds = store[selectedIdsKey] as Signal<\n Record<EntityId, boolean>\n >;\n\n return {\n [selectedEntitiesKey]: computed(() =>\n entities().filter((e) => selectedIds()[e.id])\n ),\n };\n }),\n withMethods(\n (store: Record<string, unknown> & WritableStateSource<object>) => {\n const dataService = inject(dataServiceType);\n return {\n [updateFilterKey]: (filter: F): void => {\n patchState(store, { [filterKey]: filter });\n },\n [updateSelectedKey]: (id: EntityId, selected: boolean): void => {\n patchState(store, (state: Record<string, unknown>) => ({\n [selectedIdsKey]: {\n ...(state[selectedIdsKey] as Record<EntityId, boolean>),\n [id]: selected,\n },\n }));\n },\n [loadKey]: async (): Promise<void> => {\n const filter = store[filterKey] as Signal<F>;\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.load(filter());\n patchState(\n store,\n prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const current = await dataService.loadById(id);\n store[callStateKey] && patchState(store, setLoaded(prefix));\n patchState(store, { [currentKey]: current });\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [setCurrentKey]: (current: E): void => {\n patchState(store, { [currentKey]: current });\n },\n [createKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(\n store,\n prefix\n ? addEntity(created, { collection: prefix })\n : addEntity(created)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n\n const updateArg = {\n id: updated.id,\n changes: updated,\n };\n\n const updater = (collection: string) =>\n updateEntity(updateArg, { collection });\n\n patchState(\n store,\n prefix ? updater(prefix) : updateEntity(updateArg)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateAllKey]: async (entities: E[]): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.updateAll(entities);\n patchState(\n store,\n prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [deleteKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(\n store,\n prefix\n ? removeEntity(entity.id, { collection: prefix })\n : removeEntity(entity.id)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n };\n }\n )\n );\n}\n","import {\n SignalStoreFeature,\n patchState,\n signalStoreFeature,\n withComputed,\n withHooks,\n withMethods,\n EmptyFeatureResult,\n} from '@ngrx/signals';\nimport { EntityId, EntityMap, EntityState } from '@ngrx/signals/entities';\nimport { Signal, effect, signal, untracked, isSignal } from '@angular/core';\nimport { Entity, capitalize } from './with-data-service';\nimport {\n EntityComputed,\n NamedEntityComputed,\n} from './shared/signal-store-models';\n\nexport type StackItem = Record<string, unknown>;\n\nexport type NormalizedUndoRedoOptions = {\n maxStackSize: number;\n collections?: string[];\n};\n\nconst defaultOptions: NormalizedUndoRedoOptions = {\n maxStackSize: 100,\n};\n\nexport function getUndoRedoKeys(collections?: string[]): string[] {\n if (collections) {\n return collections.flatMap((c) => [\n `${c}EntityMap`,\n `${c}Ids`,\n `selected${capitalize(c)}Ids`,\n `${c}Filter`,\n ]);\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\n\nexport function withUndoRedo<Collection extends string>(options?: {\n maxStackSize?: number;\n collections: Collection[];\n}): SignalStoreFeature<\n EmptyFeatureResult & {\n computed: NamedEntityComputed<Entity, Collection>;\n },\n EmptyFeatureResult & {\n computed: {\n canUndo: Signal<boolean>;\n canRedo: Signal<boolean>;\n };\n methods: {\n undo: () => void;\n redo: () => void;\n };\n }\n>;\n\nexport function withUndoRedo(options?: {\n maxStackSize?: number;\n}): SignalStoreFeature<\n EmptyFeatureResult & {\n state: EntityState<Entity>;\n computed: EntityComputed<Entity>;\n },\n EmptyFeatureResult & {\n computed: {\n canUndo: Signal<boolean>;\n canRedo: Signal<boolean>;\n };\n methods: {\n undo: () => void;\n redo: () => void;\n };\n }\n>;\n\nexport function withUndoRedo<Collection extends string>(\n options: {\n maxStackSize?: number;\n collections?: Collection[];\n } = {}\n): // eslint-disable-next-line @typescript-eslint/no-explicit-any\nSignalStoreFeature<any, any> {\n let previous: StackItem | null = null;\n let skipOnce = false;\n\n const normalized = {\n ...defaultOptions,\n ...options,\n };\n\n //\n // Design Decision: This feature has its own\n // internal state.\n //\n\n const undoStack: StackItem[] = [];\n const redoStack: StackItem[] = [];\n\n const canUndo = signal(false);\n const canRedo = signal(false);\n\n const updateInternal = () => {\n canUndo.set(undoStack.length !== 0);\n canRedo.set(redoStack.length !== 0);\n };\n\n const keys = getUndoRedoKeys(normalized?.collections);\n\n return signalStoreFeature(\n withComputed(() => ({\n canUndo: canUndo.asReadonly(),\n canRedo: canRedo.asReadonly(),\n })),\n withMethods((store) => ({\n undo(): void {\n const item = undoStack.pop();\n\n if (item && previous) {\n redoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n redo(): void {\n const item = redoStack.pop();\n\n if (item && previous) {\n undoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n })),\n withHooks({\n onInit(store: Record<string, unknown>) {\n effect(() => {\n const cand = keys.reduce((acc, key) => {\n const s = store[key];\n if (s && isSignal(s)) {\n return {\n ...acc,\n [key]: s(),\n };\n }\n return acc;\n }, {});\n\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n\n //\n // Deep Comparison to prevent duplicated entries\n // on the stack. This can e.g. happen after an undo\n // if the component sends back the undone filter\n // to the store.\n //\n if (JSON.stringify(cand) === JSON.stringify(previous)) {\n return;\n }\n\n // Clear redoStack after recorded action\n redoStack.splice(0);\n\n if (previous) {\n undoStack.push(previous);\n }\n\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n\n previous = cand;\n\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n });\n },\n })\n );\n}\n","import { isPlatformServer } from '@angular/common';\nimport { PLATFORM_ID, effect, inject } from '@angular/core';\nimport {\n SignalStoreFeature,\n getState,\n patchState,\n signalStoreFeature,\n withHooks,\n withMethods,\n SignalStoreFeatureResult,\n EmptyFeatureResult,\n} from '@ngrx/signals';\n\nconst NOOP = () => {};\n\ntype WithStorageSyncFeatureResult = EmptyFeatureResult & {\n methods: {\n clearStorage(): void;\n readFromStorage(): void;\n writeToStorage(): void;\n };\n};\n\nconst StorageSyncStub: Pick<\n WithStorageSyncFeatureResult,\n 'methods'\n>['methods'] = {\n clearStorage: NOOP,\n readFromStorage: NOOP,\n writeToStorage: NOOP,\n};\n\nexport type SyncConfig<State> = {\n /**\n * The key which is used to access the storage.\n */\n key: string;\n /**\n * Flag indicating if the store should read from storage on init and write to storage on every state change.\n *\n * `true` by default\n */\n autoSync?: boolean;\n /**\n * Function to select that portion of the state which should be stored.\n *\n * Returns the whole state object by default\n */\n select?: (state: State) => Partial<State>;\n /**\n * Function used to parse the state coming from storage.\n *\n * `JSON.parse()` by default\n */\n parse?: (stateString: string) => State;\n /**\n * Function used to tranform the state into a string representation.\n *\n * `JSON.stringify()` by default\n */\n stringify?: (state: State) => string;\n /**\n * Factory function used to select the storage.\n *\n * `localstorage` by default\n */\n storage?: () => Storage;\n};\n\n/**\n * Enables store synchronization with storage.\n *\n * Only works on browser platform.\n */\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureResult\n>(key: string): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureResult\n>(\n config: SyncConfig<Input['state']>\n): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureResult\n>(\n configOrKey: SyncConfig<Input['state']> | string\n): SignalStoreFeature<Input, WithStorageSyncFeatureResult> {\n const {\n key,\n autoSync = true,\n select = (state: State) => state,\n parse = JSON.parse,\n stringify = JSON.stringify,\n storage: storageFactory = () => localStorage,\n } = typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey;\n\n return signalStoreFeature(\n withMethods((store, platformId = inject(PLATFORM_ID)) => {\n if (isPlatformServer(platformId)) {\n console.warn(\n `'withStorageSync' provides non-functional implementation due to server-side execution`\n );\n return StorageSyncStub;\n }\n\n const storage = storageFactory();\n\n return {\n /**\n * Removes the item stored in storage.\n */\n clearStorage(): void {\n storage.removeItem(key);\n },\n /**\n * Reads item from storage and patches the state.\n */\n readFromStorage(): void {\n const stateString = storage.getItem(key);\n if (stateString) {\n patchState(store, parse(stateString));\n }\n },\n /**\n * Writes selected portion to storage.\n */\n writeToStorage(): void {\n const slicedState = select(getState(store) as State);\n storage.setItem(key, stringify(slicedState));\n },\n };\n }),\n withHooks({\n onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n\n if (autoSync) {\n store.readFromStorage();\n\n effect(() => {\n store.writeToStorage();\n });\n }\n },\n })\n );\n}\n","/** With pagination comes in two flavors the first one is local pagination or in memory pagination. For example we have 2000 items which we want\n * to display in a table and the response payload is small enough to be stored in the memory. But we can not display all 2000 items at once\n * so we need to paginate the data. The second flavor is server side pagination where the response payload is too large to be stored in the memory\n * and we need to fetch the data from the server in chunks. In the second case we 'could' also cache the data in the memory but that could lead to\n * other problems like memory leaks and stale data. So we will not cache the data in the memory in the second case.\n * This feature implements the local pagination.\n */\n\nimport { Signal, computed } from '@angular/core';\nimport {\n SignalStoreFeature,\n patchState,\n signalStoreFeature,\n withComputed,\n withMethods,\n withState,\n WritableStateSource,\n EmptyFeatureResult,\n} from '@ngrx/signals';\nimport { capitalize } from './with-data-service';\nimport {\n EntityComputed,\n EntityState,\n NamedEntityComputed,\n} from './shared/signal-store-models';\n\n// This is a virtual page which is can be used to create a pagination control\nexport type Page = { label: string | number; value: number };\n\nexport type NamedPaginationServiceState<E, Collection extends string> = {\n [K in Collection as `selectedPage${Capitalize<K>}Entities`]: Array<E>;\n} & {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageSize`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}TotalCount`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageCount`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArray`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArrayMax`]: number;\n};\n\nexport type NamedPaginationServiceSignals<E, Collection extends string> = {\n [K in Collection as `selectedPage${Capitalize<K>}Entities`]: Signal<E[]>;\n} & {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageSize`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}TotalCount`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageCount`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArray`]: Signal<Page[]>;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArrayMax`]: Signal<number>;\n} & {\n [K in Collection as `hasNext${Capitalize<K>}Page`]: Signal<boolean>;\n} & {\n [K in Collection as `hasPrevious${Capitalize<K>}Page`]: Signal<boolean>;\n};\n\nexport type NamedPaginationServiceMethods<Collection extends string> = {\n [K in Collection as `set${Capitalize<K>}PageSize`]: (size: number) => void;\n} & {\n [K in Collection as `next${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `previous${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `last${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `first${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `goto${Capitalize<K>}Page`]: (page: number) => void;\n};\n\nexport type PaginationServiceState<E> = {\n selectedPageEntities: Array<E>;\n currentPage: number;\n pageSize: number;\n totalCount: number;\n pageCount: number;\n pageNavigationArray: Page[];\n pageNavigationArrayMax: number;\n};\n\nexport type PaginationServiceSignals<E> = {\n selectedPageEntities: Signal<E[]>;\n currentPage: Signal<number>;\n pageSize: Signal<number>;\n totalCount: Signal<number>;\n pageCount: Signal<number>;\n pageNavigationArray: Signal<Page[]>;\n pageNavigationArrayMax: Signal<number>;\n hasNextPage: Signal<boolean>;\n hasPreviousPage: Signal<boolean>;\n};\n\nexport type PaginationServiceMethods = {\n setPageSize: (size: number) => void;\n nextPageKey: () => void;\n previousPage: () => void;\n lastPage: () => void;\n firstPage: () => void;\n gotoPage: (page: number) => void;\n};\n\nexport type SetPaginationState<\n E,\n Collection extends string | undefined\n> = Collection extends string\n ? NamedPaginationServiceState<E, Collection>\n : PaginationServiceState<E>;\n\nexport function withPagination<E, Collection extends string>(options: {\n entity: E;\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult & { computed: NamedEntityComputed<E, Collection> },\n {\n state: NamedPaginationServiceState<E, Collection>;\n computed: NamedPaginationServiceSignals<E, Collection>;\n methods: NamedPaginationServiceMethods<Collection>;\n }\n>;\n\nexport function withPagination<E>(): SignalStoreFeature<\n EmptyFeatureResult & {\n state: EntityState<E>;\n computed: EntityComputed<E>;\n },\n {\n state: PaginationServiceState<E>;\n computed: PaginationServiceSignals<E>;\n methods: PaginationServiceMethods;\n }\n>;\n\nexport function withPagination<E, Collection extends string>(options?: {\n entity: E;\n collection: Collection;\n}): SignalStoreFeature<any, any> {\n const {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayMaxKey,\n pageNavigationArrayKey,\n setPageSizeKey,\n nextPageKey,\n previousPageKey,\n lastPageKey,\n firstPageKey,\n gotoPageKey,\n hasNextPageKey,\n hasPreviousPageKey,\n } = createPaginationKeys<Collection>(options);\n\n return signalStoreFeature(\n withState({\n [pageKey]: 0,\n [pageSizeKey]: 10,\n [pageNavigationArrayMaxKey]: 7,\n }),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const page = store[pageKey] as Signal<number>;\n const pageSize = store[pageSizeKey] as Signal<number>;\n const pageNavigationArrayMax = store[\n pageNavigationArrayMaxKey\n ] as Signal<number>;\n\n return {\n // The derived enitites which are displayed on the current page\n [selectedPageEntitiesKey]: computed<E[]>(() => {\n const pageSizeValue = pageSize();\n const pageValue = page();\n\n return entities().slice(\n pageValue * pageSizeValue,\n (pageValue + 1) * pageSizeValue\n ) as E[];\n }),\n [totalCountKey]: computed(() => entities().length),\n [pageCountKey]: computed(() => {\n const totalCountValue = entities().length;\n const pageSizeValue = pageSize();\n\n if (totalCountValue === 0) {\n return 0;\n }\n\n return Math.ceil(totalCountValue / pageSizeValue);\n }),\n [pageNavigationArrayKey]: computed(() =>\n createPageArray(\n page(),\n pageSize(),\n entities().length,\n pageNavigationArrayMax()\n )\n ),\n\n [hasNextPageKey]: computed(() => {\n return page() < pageSize();\n }),\n\n [hasPreviousPageKey]: computed(() => {\n return page() > 1;\n }),\n };\n }),\n withMethods(\n (store: Record<string, unknown> & WritableStateSource<object>) => {\n return {\n [setPageSizeKey]: (size: number) => {\n patchState(store, setPageSize(size, options));\n },\n [nextPageKey]: () => {\n patchState(store, nextPage(options));\n },\n\n [previousPageKey]: () => {\n patchState(store, previousPage(options));\n },\n\n [lastPageKey]: () => {\n const lastPage = (store[pageCountKey] as Signal<number>)();\n if (lastPage === 0) return;\n patchState(store, gotoPage(lastPage - 1, options));\n },\n\n [firstPageKey]: () => {\n patchState(store, firstPage());\n },\n\n [gotoPageKey]: (page: number) => {\n patchState(store, gotoPage(page, options));\n },\n };\n }\n )\n );\n}\n\nexport function gotoPage<E, Collection extends string>(\n page: number,\n options?: {\n collection: Collection;\n }\n): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: page,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function setPageSize<E, Collection extends string>(\n pageSize: number,\n options?: {\n collection: Collection;\n }\n): Partial<SetPaginationState<E, Collection>> {\n const { pageSizeKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageSizeKey]: pageSize,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function nextPage<E, Collection extends string>(options?: {\n collection: Collection;\n}): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: (currentPage: number) => currentPage + 1,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function previousPage<E, Collection extends string>(options?: {\n collection: Collection;\n}): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: (currentPage: number) => Math.max(currentPage - 1, 1),\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function firstPage<E, Collection extends string>(options?: {\n collection: Collection;\n}): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: 1,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function setMaxPageNavigationArrayItems<E, Collection extends string>(\n maxPageNavigationArrayItems: number,\n options?: {\n collection: Collection;\n }\n): Partial<SetPaginationState<E, Collection>> {\n const { pageNavigationArrayMaxKey } =\n createPaginationKeys<Collection>(options);\n\n return {\n [pageNavigationArrayMaxKey]: maxPageNavigationArrayItems,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nfunction createPaginationKeys<Collection extends string>(\n options: { collection: Collection } | undefined\n) {\n const entitiesKey = options?.collection\n ? `${options.collection}Entities`\n : 'entities';\n\n const selectedPageEntitiesKey = options?.collection\n ? `selectedPage${capitalize(options?.collection)}Entities`\n : 'selectedPageEntities';\n const pageKey = options?.collection\n ? `${options.collection}CurrentPage`\n : 'currentPage';\n const pageSizeKey = options?.collection\n ? `${options.collection}PageSize`\n : 'pageSize';\n const totalCountKey = options?.collection\n ? `${options.collection}TotalCount`\n : 'totalCount';\n const pageCountKey = options?.collection\n ? `${options.collection}PageCount`\n : 'pageCount';\n const pageNavigationArrayMaxKey = options?.collection\n ? `${options.collection}PageNavigationArrayMax`\n : 'pageNavigationArrayMax';\n const pageNavigationArrayKey = options?.collection\n ? `${options.collection}PageNavigationArray`\n : 'pageNavigationArray';\n\n const setPageSizeKey = options?.collection\n ? `set${capitalize(options.collection)}PageSize`\n : 'setPageSize';\n\n const nextPageKey = options?.collection\n ? `next${capitalize(options.collection)}Page`\n : 'nextPage';\n\n const previousPageKey = options?.collection\n ? `previous${capitalize(options.collection)}Page`\n : 'previousPage';\n\n const lastPageKey = options?.collection\n ? `last${capitalize(options.collection)}Page`\n : 'lastPage';\n\n const firstPageKey = options?.collection\n ? `first${capitalize(options.collection)}Page`\n : 'firstPage';\n\n const gotoPageKey = options?.collection\n ? `goto${capitalize(options.collection)}Page`\n : 'gotoPage';\n\n const hasNextPageKey = options?.collection\n ? `hasNext${capitalize(options.collection)}Page`\n : 'hasNextPage';\n\n const hasPreviousPageKey = options?.collection\n ? `hasPrevious${capitalize(options.collection)}Page`\n : 'hasPreviousPage';\n\n return {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayKey,\n pageNavigationArrayMaxKey,\n setPageSizeKey,\n nextPageKey,\n previousPageKey,\n lastPageKey,\n firstPageKey,\n gotoPageKey,\n hasNextPageKey,\n hasPreviousPageKey,\n };\n}\n\nexport function createPageArray(\n currentPage: number,\n itemsPerPage: number,\n totalItems: number,\n paginationRange: number\n): Page[] {\n // Convert paginationRange to number in case it's a string\n paginationRange = +paginationRange;\n\n // Calculate total number of pages\n const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n const halfWay = Math.ceil(paginationRange / 2);\n\n const isStart = currentPage <= halfWay;\n const isEnd = totalPages - halfWay < currentPage;\n const isMiddle = !isStart && !isEnd;\n\n const ellipsesNeeded = paginationRange < totalPages;\n const pages: Page[] = [];\n\n for (let i = 1; i <= totalPages && i <= paginationRange; i++) {\n let pageNumber = i;\n\n if (i === paginationRange) {\n pageNumber = totalPages;\n } else if (ellipsesNeeded) {\n if (isEnd) {\n pageNumber = totalPages - paginationRange + i;\n } else if (isMiddle) {\n pageNumber = currentPage - halfWay + i;\n }\n }\n\n const openingEllipsesNeeded = i === 2 && (isMiddle || isEnd);\n const closingEllipsesNeeded =\n i === paginationRange - 1 && (isMiddle || isStart);\n\n const label =\n ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)\n ? '...'\n : pageNumber;\n\n pages.push({ label, value: pageNumber });\n }\n\n return pages;\n}\n","import { Action } from '@ngrx/store';\nimport { Unsubscribable } from 'rxjs';\n\n\nexport function isUnsubscribable<F extends (...args: unknown[]) => unknown>(\n fn: F | (F & Unsubscribable)\n): fn is F & Unsubscribable {\n return !!(fn as any as F & Unsubscribable)?.unsubscribe;\n}\n\nexport function capitalize(str: string): string {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\n\nexport function isActionCreator(action: any): action is Action {\n return (\n typeof action === 'function' &&\n action &&\n action.type &&\n typeof action.type === 'string'\n );\n}\n","import { Injectable, inject } from \"@angular/core\";\nimport { rxMethod } from \"@ngrx/signals/rxjs-interop\";\nimport { Action, ActionCreator } from \"@ngrx/store\";\nimport { pipe, tap } from \"rxjs\";\nimport { MapperTypes } from \"./model\";\nimport { isUnsubscribable } from \"./util\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SignalReduxStore {\n private mapperDict: Record<string, {\n storeMethod: (...args: unknown[]) => unknown,\n resultMethod?: (...args: unknown[]) => unknown,\n }> = {};\n\n dispatch = rxMethod<Action>(pipe(\n tap((action: Action) => {\n const callbacks = this.mapperDict[action.type];\n if (callbacks?.storeMethod) {\n if (\n isUnsubscribable(callbacks.storeMethod) &&\n callbacks.resultMethod\n ) {\n return callbacks.storeMethod(action, (a: Action) => {\n const resultAction = callbacks.resultMethod?.(a) as Action;\n this.dispatch(resultAction);\n });\n }\n\n return callbacks?.storeMethod(action);\n }\n\n return;\n })\n ));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connectFeatureStore(mappers: MapperTypes<ActionCreator<any, any>[]>[]): void {\n mappers.forEach(\n mapper => mapper.types.forEach(\n action => this.mapperDict[action] = {\n storeMethod: mapper.storeMethod,\n resultMethod: mapper.resultMethod\n }\n )\n );\n }\n}\n\nexport function injectReduxDispatch() {\n return inject(SignalReduxStore).dispatch;\n}\n","import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { ActionCreator, ActionType } from \"@ngrx/store/src/models\";\nimport { CreateReduxState, ExtractActionTypes, MapperTypes, Store } from \"./model\";\nimport { SignalReduxStore, injectReduxDispatch } from \"./signal-redux-store\";\nimport { capitalize, isActionCreator } from \"./util\";\n\n\nexport function mapAction<\n Creators extends readonly ActionCreator[]\n>(\n ...args: [\n ...creators: Creators,\n storeMethod: (action: ActionType<Creators[number]>) => unknown\n ]\n): MapperTypes<Creators>;\nexport function mapAction<\n Creators extends readonly ActionCreator[],\n T\n>(\n ...args: [\n ...creators: Creators,\n storeMethod: (action: ActionType<Creators[number]>, resultMethod: (input: T) => unknown) => unknown,\n resultMethod: (input: T) => unknown\n ]\n): MapperTypes<Creators>;\nexport function mapAction<\n Creators extends readonly ActionCreator[]\n>(\n ...args: [\n ...creators: Creators,\n storeMethod: (action: ActionType<Creators[number]>) => unknown,\n resultMethod?: (input: unknown) => unknown\n ]\n): MapperTypes<Creators> {\n let resultMethod = args.pop() as unknown as ((input: unknown) => unknown ) | undefined;\n let storeMethod = args.pop() as unknown as (action: ActionType<Creators[number]>) => unknown;\n\n if (isActionCreator(storeMethod)) {\n args.push(storeMethod);\n storeMethod = resultMethod || storeMethod;\n resultMethod = undefined;\n }\n\n const types = (args as unknown as Creators).map(\n (creator) => creator.type\n ) as unknown as ExtractActionTypes<Creators>;\n\n return {\n types,\n storeMethod,\n resultMethod\n };\n}\n\nexport function withActionMappers(\n ...mappers: MapperTypes<ActionCreator<any, any>[]>[]\n): MapperTypes<ActionCreator<any, any>[]>[] {\n return mappers;\n}\n\nexport function createReduxState<\n StoreName extends string,\n STORE extends Store\n>(\n storeName: StoreName,\n signalStore: STORE,\n withActionMappers: (store: InstanceType<STORE>) => MapperTypes<ActionCreator<any, any>[]>[],\n): CreateReduxState<StoreName, STORE> {\n const isRootProvider = (signalStore as any)?.ɵprov?.providedIn === 'root';\n return {\n [`provide${capitalize(storeName)}Store`]: (connectReduxDevtools = false) => makeEnvironmentProviders([\n isRootProvider? [] : signalStore,\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (\n signalReduxStore = inject(SignalReduxStore),\n store = inject(signalStore)\n ) => () => {\n if (connectReduxDevtools) {\n // addStoreToReduxDevtools(store, storeName, false);\n }\n signalReduxStore.connectFeatureStore(\n withActionMappers(store)\n );\n }\n }\n ]),\n [`inject${capitalize(storeName)}Store`]: () => Object.assign(\n inject(signalStore),\n { dispatch: injectReduxDispatch() }\n )\n } as CreateReduxState<StoreName, STORE>;\n}\n","import { Injector, Signal, inject } from \"@angular/core\";\nimport { rxMethod } from \"@ngrx/signals/rxjs-interop\";\nimport { Observable, Unsubscribable, map, pipe } from \"rxjs\";\n\n\ntype RxMethodInput<Input> = Input | Observable<Input> | Signal<Input>;\n\ntype RxMethod<Input, MethodInput = Input, MethodResult = unknown> = ((\n input: RxMethodInput<Input>,\n resultMethod: (input: MethodInput) => MethodResult\n) => Unsubscribable) & Unsubscribable;\n\nexport function reduxMethod<Input, MethodInput = Input>(\n generator: (source$: Observable<Input>) => Observable<MethodInput>,\n config?: { injector?: Injector }\n): RxMethod<Input, MethodInput>;\nexport function reduxMethod<Input, MethodInput = Input, MethodResult = unknown>(\n generator: (source$: Observable<Input>) => Observable<MethodInput>,\n resultMethod: (input: MethodInput) => MethodResult,\n config?: {\n injector?: Injector\n }\n): RxMethod<Input, MethodInput, MethodResult>;\nexport function reduxMethod<Input, MethodInput = Input, MethodResult = unknown>(\n generator: (source$: Observable<Input>) => Observable<MethodInput>,\n resultMethodOrConfig?: ((input: MethodInput) => MethodResult) | {\n injector?: Injector\n },\n config?: {\n injector?: Injector\n }\n): RxMethod<Input, MethodInput, MethodResult> {\n const injector = inject(Injector);\n\n if (typeof resultMethodOrConfig === 'function') {\n let unsubscribable: Unsubscribable;\n const inputResultFn = ((\n input: RxMethodInput<Input>,\n resultMethod = resultMethodOrConfig\n ) => {\n\n const rxMethodWithResult = rxMethod<Input>(pipe(\n generator,\n map(resultMethod)\n ), {\n ...(config || {}),\n injector: config?.injector || injector\n });\n const rxWithInput = rxMethodWithResult(input);\n unsubscribable = { unsubscribe: rxWithInput.unsubscribe.bind(rxWithInput) };\n\n return rxWithInput;\n }) as RxMethod<Input, MethodInput, MethodResult>;\n\n inputResultFn.unsubscribe = () => unsubscribable?.unsubscribe();\n\n return inputResultFn;\n }\n\n return rxMethod<Input>(generator, resultMethodOrConfig);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","capitalize","patchState"],"mappings":"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"}
1
+ {"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/lib/with-storage-sync.ts","../../../../libs/ngrx-toolkit/src/lib/with-pagination.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import {\n EmptyFeatureResult,\n PartialStateUpdater,\n patchState as originalPatchState,\n SignalStoreFeature,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { effect, inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { Prettify } from './shared/prettify';\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION__:\n | {\n connect: (options: { name: string }) => {\n send: (action: Action, state: Record<string, unknown>) => void;\n };\n }\n | undefined;\n }\n}\n\nexport type Action = { type: string };\n\nconst storeRegistry = signal<Record<string, Signal<unknown>>>({});\n\nlet currentActionNames = new Set<string>();\n\nlet synchronizationInitialized = false;\n\nfunction initSynchronization() {\n effect(() => {\n if (!connection) {\n return;\n }\n\n const stores = storeRegistry();\n const rootState: Record<string, unknown> = {};\n for (const name in stores) {\n const store = stores[name];\n rootState[name] = store();\n }\n\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames = new Set<string>();\n\n connection.send({ type }, rootState);\n });\n}\n\nfunction getValueFromSymbol(obj: unknown, symbol: symbol) {\n if (typeof obj === 'object' && obj && symbol in obj) {\n return (obj as { [key: symbol]: any })[symbol];\n }\n}\n\nfunction getStoreSignal(store: unknown): Signal<unknown> {\n const [signalStateKey] = Object.getOwnPropertySymbols(store);\n if (!signalStateKey) {\n throw new Error('Cannot find State Signal');\n }\n\n return getValueFromSymbol(store, signalStateKey);\n}\n\ntype ConnectResponse = {\n send: (action: Action, state: Record<string, unknown>) => void;\n};\nlet connection: ConnectResponse | undefined;\n\n/**\n * required for testing. is not exported during build\n */\nexport function reset() {\n connection = undefined;\n synchronizationInitialized = false;\n storeRegistry.set({});\n}\n\n/**\n * @param name store's name as it should appear in the DevTools\n */\nexport function withDevtools<Input extends EmptyFeatureResult>(\n name: string\n): SignalStoreFeature<Input, EmptyFeatureResult> {\n return (store) => {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n if (isServer) {\n return store;\n }\n\n const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;\n if (!extensions) {\n return store;\n }\n\n if (!connection) {\n connection = extensions.connect({\n name: 'NgRx Signal Store',\n });\n }\n\n const storeSignal = getStoreSignal(store);\n storeRegistry.update((value) => ({\n ...value,\n [name]: storeSignal,\n }));\n\n if (!synchronizationInitialized) {\n initSynchronization();\n synchronizationInitialized = true;\n }\n\n return store;\n };\n}\n\ntype PatchFn = typeof originalPatchState extends (\n arg1: infer First,\n ...args: infer Rest\n) => infer Returner\n ? (state: First, action: string, ...rest: Rest) => Returner\n : never;\n\n/**\n * @deprecated Has been renamed to `updateState`\n */\nexport const patchState: PatchFn = (state, action, ...rest) => {\n updateState(state, action, ...rest);\n};\n\n/**\n * Wrapper of `patchState` for DevTools integration. Next to updating the state,\n * it also sends the action to the DevTools.\n * @param stateSource state of Signal Store\n * @param action name of action how it will show in DevTools\n * @param updaters updater functions or objects\n */\nexport function updateState<State extends object>(\n stateSource: WritableStateSource<State>,\n action: string,\n ...updaters: Array<\n Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>\n >\n): void {\n currentActionNames.add(action);\n return originalPatchState(stateSource, ...updaters);\n}\n","import { ActionsFnSpecs } from '../with-redux';\n\nexport function assertActionFnSpecs(\n obj: unknown\n): asserts obj is ActionsFnSpecs {\n if (!obj || typeof obj !== 'object') {\n throw new Error('%o is not an Action Specification');\n }\n}\n","import { Observable, Subject } from 'rxjs';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { assertActionFnSpecs } from './assertions/assertions';\n\n/** Actions **/\n\ntype Payload = Record<string, unknown>;\n\ntype ActionFn<\n Type extends string = string,\n ActionPayload extends Payload = Payload\n> = ((payload: ActionPayload) => ActionPayload & { type: Type }) & {\n type: Type;\n};\n\ntype ActionFns = Record<string, ActionFn>;\n\nexport type ActionsFnSpecs = Record<string, Payload>;\n\ntype ActionFnCreator<Spec extends ActionsFnSpecs> = {\n [ActionName in keyof Spec]: (Record<never, never> extends Spec[ActionName]\n ? () => Spec[ActionName] & { type: ActionName }\n : (\n payload: Spec[ActionName]\n ) => Spec[ActionName] & { type: ActionName }) & {\n type: ActionName & string;\n };\n};\n\ntype ActionFnPayload<Action> = Action extends (payload: infer Payload) => void\n ? Payload\n : never;\n\ntype ActionFnsCreator<Spec extends ActionsFnSpecs> = Spec extends {\n private: Record<string, Payload>;\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['private']> & ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\ntype PublicActionFns<Spec extends ActionsFnSpecs> = Spec extends {\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\nexport function payload<Type extends Payload>(): Type {\n return {} as Type;\n}\n\nexport const noPayload = {};\n\n/** Reducer **/\n\ntype ReducerFunction<ReducerAction, State> = (\n state: State,\n action: ActionFnPayload<ReducerAction>\n) => void;\n\ntype ReducerFactory<StateActionFns extends ActionFns, State> = (\n actions: StateActionFns,\n on: <ReducerAction extends { type: string }>(\n action: ReducerAction,\n reducerFn: ReducerFunction<ReducerAction, State>\n ) => void\n) => void;\n\n/** Effect **/\n\ntype EffectsFactory<StateActionFns extends ActionFns> = (\n actions: StateActionFns,\n create: <EffectAction extends { type: string }>(\n action: EffectAction\n ) => Observable<ActionFnPayload<EffectAction>>\n) => Record<string, Observable<unknown>>;\n\n// internal types\n\n/**\n * Record which holds all effects for a specific action type.\n * The values are Subject which the effect are subscribed to.\n * `createActionFns` will call next on these subjects.\n */\ntype EffectsRegistry = Record<string, Subject<ActionFnPayload<unknown>>[]>;\n\nfunction createActionFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: EffectsRegistry,\n state: unknown\n) {\n const actionFns: Record<string, ActionFn> = {};\n\n for (const type in actionFnSpecs) {\n const actionFn = (payload: Payload) => {\n const fullPayload = { ...payload, type };\n const reducer = reducerRegistry[type];\n if (reducer) {\n (reducer as (state: unknown, payload: unknown) => void)(\n state,\n fullPayload as unknown\n );\n }\n const effectSubjects = effectsRegistry[type];\n if (effectSubjects?.length) {\n for (const effectSubject of effectSubjects) {\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\n }\n }\n return fullPayload;\n };\n actionFn.type = type.toString();\n actionFns[type] = actionFn;\n }\n\n return actionFns;\n}\n\nfunction createPublicAndAllActionsFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: EffectsRegistry,\n state: unknown\n): { all: ActionFns; publics: ActionFns } {\n if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {\n const privates = actionFnSpecs['private'] || {};\n const publics = actionFnSpecs['public'] || {};\n\n assertActionFnSpecs(privates);\n assertActionFnSpecs(publics);\n\n const privateActionFns = createActionFns(\n privates,\n reducerRegistry,\n effectsRegistry,\n state\n );\n const publicActionFns = createActionFns(\n publics,\n reducerRegistry,\n effectsRegistry,\n state\n );\n\n return {\n all: { ...privateActionFns, ...publicActionFns },\n publics: publicActionFns,\n };\n }\n\n const actionFns = createActionFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n state\n );\n\n return { all: actionFns, publics: actionFns };\n}\n\nfunction fillReducerRegistry(\n reducer: ReducerFactory<ActionFns, unknown>,\n actionFns: ActionFns,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >\n) {\n function on(\n action: { type: string },\n reducerFn: (state: unknown, payload: ActionFnPayload<unknown>) => void\n ) {\n reducerRegistry[action.type] = reducerFn;\n }\n\n reducer(actionFns, on);\n\n return reducerRegistry;\n}\n\nfunction fillEffects(\n effects: EffectsFactory<ActionFns>,\n actionFns: ActionFns,\n effectsRegistry: EffectsRegistry = {}\n): Observable<unknown>[] {\n function create(action: { type: string }) {\n const subject = new Subject<ActionFnPayload<unknown>>();\n if (!(action.type in effectsRegistry)) {\n effectsRegistry[action.type] = [];\n }\n effectsRegistry[action.type].push(subject);\n return subject.asObservable();\n }\n\n const effectObservables = effects(actionFns, create);\n return Object.values(effectObservables);\n}\n\nfunction startSubscriptions(observables: Observable<unknown>[]) {\n return observables.map((observable) => observable.subscribe());\n}\n\nfunction processRedux<Spec extends ActionsFnSpecs, ReturnType>(\n actionFnSpecs: Spec,\n reducer: ReducerFactory<ActionFns, unknown>,\n effects: EffectsFactory<ActionFns>,\n store: unknown\n) {\n const reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n > = {};\n const effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>[]> =\n {};\n const actionsMap = createPublicAndAllActionsFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n store\n );\n const actionFns = actionsMap.all;\n const publicActionsFns = actionsMap.publics;\n\n fillReducerRegistry(reducer, actionFns, reducerRegistry);\n const effectObservables = fillEffects(effects, actionFns, effectsRegistry);\n const subscriptions = startSubscriptions(effectObservables);\n\n return {\n methods: publicActionsFns as ReturnType,\n subscriptions: subscriptions,\n };\n}\n\n/**\n * @param redux redux\n *\n * properties do not start with `with` since they are not extension functions on their own.\n *\n * no dependency to NgRx\n *\n * actions are passed to reducer and effects, but it is also possible to use other actions.\n * effects provide forAction and do not return anything. that is important because effects should stay inaccessible\n */\nexport function withRedux<\n Spec extends ActionsFnSpecs,\n Input extends SignalStoreFeatureResult,\n StateActionFns extends ActionFnsCreator<Spec> = ActionFnsCreator<Spec>,\n PublicStoreActionFns extends PublicActionFns<Spec> = PublicActionFns<Spec>\n>(redux: {\n actions: Spec;\n reducer: ReducerFactory<StateActionFns, WritableStateSource<Input['state']>>;\n effects: EffectsFactory<StateActionFns>;\n}): SignalStoreFeature<\n Input,\n EmptyFeatureResult & { methods: PublicStoreActionFns }\n> {\n return (store) => {\n const { methods } = processRedux<Spec, PublicStoreActionFns>(\n redux.actions,\n redux.reducer as ReducerFactory<ActionFns, unknown>,\n redux.effects as EffectsFactory<ActionFns>,\n store\n );\n return {\n ...store,\n methods,\n };\n };\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\n\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\n\nexport type CallStateSlice = {\n callState: CallState;\n};\n\nexport type NamedCallStateSlice<Collection extends string> = {\n [K in keyof CallStateSlice as `${Collection}${Capitalize<K>}`]: CallStateSlice[K];\n};\n\nexport type CallStateSignals = {\n loading: Signal<boolean>;\n loaded: Signal<boolean>;\n error: Signal<string | null>;\n};\n\nexport type NamedCallStateSignals<Prop extends string> = {\n [K in keyof CallStateSignals as `${Prop}${Capitalize<K>}`]: CallStateSignals[K];\n};\n\nexport type SetCallState<Prop extends string | undefined> = Prop extends string\n ? NamedCallStateSlice<Prop>\n : CallStateSlice;\n\nexport function getCallStateKeys(config?: { collection?: string }) {\n const prop = config?.collection;\n return {\n callStateKey: prop ? `${config.collection}CallState` : 'callState',\n loadingKey: prop ? `${config.collection}Loading` : 'loading',\n loadedKey: prop ? `${config.collection}Loaded` : 'loaded',\n errorKey: prop ? `${config.collection}Error` : 'error',\n };\n}\n\nexport function withCallState<Collection extends string>(config: {\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: NamedCallStateSlice<Collection>;\n computed: NamedCallStateSignals<Collection>;\n }\n>;\nexport function withCallState(): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: CallStateSlice;\n computed: CallStateSignals;\n }\n>;\nexport function withCallState<Collection extends string>(config?: {\n collection: Collection;\n}): SignalStoreFeature {\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n getCallStateKeys(config);\n\n return signalStoreFeature(\n withState({ [callStateKey]: 'init' }),\n withComputed((state: Record<string, Signal<unknown>>) => {\n const callState = state[callStateKey] as Signal<CallState>;\n\n return {\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n }),\n };\n })\n );\n}\n\nexport function setLoading<Prop extends string | undefined = undefined>(\n prop?: Prop\n): SetCallState<Prop> {\n if (prop) {\n return { [`${prop}CallState`]: 'loading' } as SetCallState<Prop>;\n }\n\n return { callState: 'loading' } as SetCallState<Prop>;\n}\n\nexport function setLoaded<Prop extends string | undefined = undefined>(\n prop?: Prop\n): SetCallState<Prop> {\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' } as SetCallState<Prop>;\n } else {\n return { callState: 'loaded' } as SetCallState<Prop>;\n }\n}\n\nexport function setError<Prop extends string | undefined = undefined>(\n error: unknown,\n prop?: Prop\n): SetCallState<Prop> {\n let errorMessage: string;\n\n if (!error) {\n errorMessage = '';\n } else if (typeof error === 'object' && 'message' in error) {\n errorMessage = String(error.message);\n } else {\n errorMessage = String(error);\n }\n\n if (prop) {\n return {\n [`${prop}CallState`]: { error: errorMessage },\n } as SetCallState<Prop>;\n } else {\n return { callState: { error: errorMessage } } as SetCallState<Prop>;\n }\n}\n","import { ProviderToken, Signal, computed, inject } from '@angular/core';\nimport {\n SignalStoreFeature,\n patchState,\n signalStoreFeature,\n withComputed,\n withMethods,\n withState,\n EmptyFeatureResult,\n WritableStateSource,\n} from '@ngrx/signals';\nimport {\n CallState,\n getCallStateKeys,\n setError,\n setLoaded,\n setLoading,\n} from './with-call-state';\nimport {\n setAllEntities,\n EntityId,\n addEntity,\n updateEntity,\n removeEntity,\n} from '@ngrx/signals/entities';\nimport { EntityState, NamedEntityComputed } from './shared/signal-store-models';\n\nexport type Filter = Record<string, unknown>;\nexport type Entity = { id: EntityId };\n\nexport interface DataService<E extends Entity, F extends Filter> {\n load(filter: F): Promise<E[]>;\n\n loadById(id: EntityId): Promise<E>;\n\n create(entity: E): Promise<E>;\n\n update(entity: E): Promise<E>;\n\n updateAll(entity: E[]): Promise<E[]>;\n\n delete(entity: E): Promise<void>;\n}\n\nexport function capitalize(str: string): string {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\n\nexport function getDataServiceKeys(options: { collection?: string }) {\n const filterKey = options.collection\n ? `${options.collection}Filter`\n : 'filter';\n const selectedIdsKey = options.collection\n ? `selected${capitalize(options.collection)}Ids`\n : 'selectedIds';\n const selectedEntitiesKey = options.collection\n ? `selected${capitalize(options.collection)}Entities`\n : 'selectedEntities';\n\n const updateFilterKey = options.collection\n ? `update${capitalize(options.collection)}Filter`\n : 'updateFilter';\n const updateSelectedKey = options.collection\n ? `updateSelected${capitalize(options.collection)}Entities`\n : 'updateSelected';\n const loadKey = options.collection\n ? `load${capitalize(options.collection)}Entities`\n : 'load';\n\n const currentKey = options.collection\n ? `current${capitalize(options.collection)}`\n : 'current';\n const loadByIdKey = options.collection\n ? `load${capitalize(options.collection)}ById`\n : 'loadById';\n const setCurrentKey = options.collection\n ? `setCurrent${capitalize(options.collection)}`\n : 'setCurrent';\n const createKey = options.collection\n ? `create${capitalize(options.collection)}`\n : 'create';\n const updateKey = options.collection\n ? `update${capitalize(options.collection)}`\n : 'update';\n const updateAllKey = options.collection\n ? `updateAll${capitalize(options.collection)}`\n : 'updateAll';\n const deleteKey = options.collection\n ? `delete${capitalize(options.collection)}`\n : 'delete';\n\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection\n ? `${options.collection}Entities`\n : 'entities';\n const entityMapKey = options.collection\n ? `${options.collection}EntityMap`\n : 'entityMap';\n const idsKey = options.collection ? `${options.collection}Ids` : 'ids';\n\n return {\n filterKey,\n selectedIdsKey,\n selectedEntitiesKey,\n updateFilterKey,\n updateSelectedKey,\n loadKey,\n entitiesKey,\n entityMapKey,\n idsKey,\n\n currentKey,\n loadByIdKey,\n setCurrentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n };\n}\n\nexport type NamedDataServiceState<\n E extends Entity,\n F extends Filter,\n Collection extends string\n> = {\n [K in Collection as `${K}Filter`]: F;\n} & {\n [K in Collection as `selected${Capitalize<K>}Ids`]: Record<EntityId, boolean>;\n} & {\n [K in Collection as `current${Capitalize<K>}`]: E;\n};\n\nexport type DataServiceState<E extends Entity, F extends Filter> = {\n filter: F;\n selectedIds: Record<EntityId, boolean>;\n current: E;\n};\n\nexport type DataServiceComputed<E extends Entity> = {\n selectedEntities: Signal<E[]>;\n};\n\nexport type NamedDataServiceComputed<\n E extends Entity,\n Collection extends string\n> = {\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\n};\n\nexport type NamedDataServiceMethods<\n E extends Entity,\n F extends Filter,\n Collection extends string\n> = {\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\n} & {\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (\n id: EntityId,\n selected: boolean\n ) => void;\n} & {\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\n} & {\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\n} & {\n [K in Collection as `load${Capitalize<K>}ById`]: (\n id: EntityId\n ) => Promise<void>;\n} & {\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\n} & {\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\n} & {\n [K in Collection as `updateAll${Capitalize<K>}`]: (\n entity: E[]\n ) => Promise<void>;\n} & {\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\n};\n\nexport type DataServiceMethods<E extends Entity, F extends Filter> = {\n updateFilter: (filter: F) => void;\n updateSelected: (id: EntityId, selected: boolean) => void;\n load: () => Promise<void>;\n\n setCurrent(entity: E): void;\n loadById(id: EntityId): Promise<void>;\n create(entity: E): Promise<void>;\n update(entity: E): Promise<void>;\n updateAll(entities: E[]): Promise<void>;\n delete(entity: E): Promise<void>;\n};\n\nexport function withDataService<\n E extends Entity,\n F extends Filter,\n Collection extends string\n>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n collection: Collection;\n}): SignalStoreFeature<\n // These alternatives break type inference:\n // state: { callState: CallState } & NamedEntityState<E, Collection>,\n // state: NamedEntityState<E, Collection>,\n EmptyFeatureResult & { computed: NamedEntityComputed<E, Collection> },\n {\n state: NamedDataServiceState<E, F, Collection>;\n computed: NamedDataServiceComputed<E, Collection>;\n methods: NamedDataServiceMethods<E, F, Collection>;\n }\n>;\nexport function withDataService<E extends Entity, F extends Filter>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n}): SignalStoreFeature<\n EmptyFeatureResult & { state: { callState: CallState } & EntityState<E> },\n {\n state: DataServiceState<E, F>;\n computed: DataServiceComputed<E>;\n methods: DataServiceMethods<E, F>;\n }\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withDataService<\n E extends Entity,\n F extends Filter,\n Collection extends string\n>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n collection?: Collection;\n}): SignalStoreFeature<any, any> {\n const { dataServiceType, filter, collection: prefix } = options;\n const {\n entitiesKey,\n filterKey,\n loadKey,\n selectedEntitiesKey,\n selectedIdsKey,\n updateFilterKey,\n updateSelectedKey,\n\n currentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n loadByIdKey,\n setCurrentKey,\n } = getDataServiceKeys(options);\n\n const { callStateKey } = getCallStateKeys({ collection: prefix });\n\n return signalStoreFeature(\n withState(() => ({\n [filterKey]: filter,\n [selectedIdsKey]: {} as Record<EntityId, boolean>,\n [currentKey]: undefined as E | undefined,\n })),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const selectedIds = store[selectedIdsKey] as Signal<\n Record<EntityId, boolean>\n >;\n\n return {\n [selectedEntitiesKey]: computed(() =>\n entities().filter((e) => selectedIds()[e.id])\n ),\n };\n }),\n withMethods(\n (store: Record<string, unknown> & WritableStateSource<object>) => {\n const dataService = inject(dataServiceType);\n return {\n [updateFilterKey]: (filter: F): void => {\n patchState(store, { [filterKey]: filter });\n },\n [updateSelectedKey]: (id: EntityId, selected: boolean): void => {\n patchState(store, (state: Record<string, unknown>) => ({\n [selectedIdsKey]: {\n ...(state[selectedIdsKey] as Record<EntityId, boolean>),\n [id]: selected,\n },\n }));\n },\n [loadKey]: async (): Promise<void> => {\n const filter = store[filterKey] as Signal<F>;\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.load(filter());\n patchState(\n store,\n prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const current = await dataService.loadById(id);\n store[callStateKey] && patchState(store, setLoaded(prefix));\n patchState(store, { [currentKey]: current });\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [setCurrentKey]: (current: E): void => {\n patchState(store, { [currentKey]: current });\n },\n [createKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(\n store,\n prefix\n ? addEntity(created, { collection: prefix })\n : addEntity(created)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n\n const updateArg = {\n id: updated.id,\n changes: updated,\n };\n\n const updater = (collection: string) =>\n updateEntity(updateArg, { collection });\n\n patchState(\n store,\n prefix ? updater(prefix) : updateEntity(updateArg)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateAllKey]: async (entities: E[]): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.updateAll(entities);\n patchState(\n store,\n prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [deleteKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(\n store,\n prefix\n ? removeEntity(entity.id, { collection: prefix })\n : removeEntity(entity.id)\n );\n store[callStateKey] && patchState(store, setLoaded(prefix));\n } catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n };\n }\n )\n );\n}\n","import {\n SignalStoreFeature,\n patchState,\n signalStoreFeature,\n withComputed,\n withHooks,\n withMethods,\n EmptyFeatureResult, SignalStoreFeatureResult\n} from '@ngrx/signals';\nimport { Signal, effect, signal, untracked, isSignal } from '@angular/core';\nimport { capitalize } from './with-data-service';\n\nexport type StackItem = Record<string, unknown>;\n\nexport type NormalizedUndoRedoOptions = {\n maxStackSize: number;\n collections?: string[];\n keys: string[];\n skip: number,\n};\n\nconst defaultOptions: NormalizedUndoRedoOptions = {\n maxStackSize: 100,\n keys: [],\n skip: 0,\n};\n\nexport function getUndoRedoKeys(collections?: string[]): string[] {\n if (collections) {\n return collections.flatMap((c) => [\n `${c}EntityMap`,\n `${c}Ids`,\n `selected${capitalize(c)}Ids`,\n `${c}Filter`,\n ]);\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\n\ntype NonNever<T> = T extends never ? never : T;\n\ntype ExtractEntityCollection<T> = T extends `${infer U}Entities` ? U : never;\n\ntype ExtractEntityCollections<Store extends SignalStoreFeatureResult> = NonNever<{\n [K in keyof Store['computed']]: ExtractEntityCollection<K>;\n}[keyof Store['computed']]>;\n\ntype OptionsForState<Store extends SignalStoreFeatureResult> = Partial<Omit<NormalizedUndoRedoOptions, 'collections' | 'keys'>> & {\n collections?: ExtractEntityCollections<Store>[];\n keys?: (keyof Store['state'])[];\n};\n\nexport function withUndoRedo<\n Input extends EmptyFeatureResult>(options?: OptionsForState<Input>): SignalStoreFeature<\n Input,\n EmptyFeatureResult & {\n computed: {\n canUndo: Signal<boolean>;\n canRedo: Signal<boolean>;\n };\n methods: {\n undo: () => void;\n redo: () => void;\n };\n}\n> {\n let previous: StackItem | null = null;\n let skipOnce = false;\n\n const normalized = {\n ...defaultOptions,\n ...options,\n };\n\n //\n // Design Decision: This feature has its own\n // internal state.\n //\n\n const undoStack: StackItem[] = [];\n const redoStack: StackItem[] = [];\n\n const canUndo = signal(false);\n const canRedo = signal(false);\n\n const updateInternal = () => {\n canUndo.set(undoStack.length !== 0);\n canRedo.set(redoStack.length !== 0);\n };\n\n const keys = [...getUndoRedoKeys(normalized.collections), ...normalized.keys];\n\n return signalStoreFeature(\n withComputed(() => ({\n canUndo: canUndo.asReadonly(),\n canRedo: canRedo.asReadonly(),\n })),\n withMethods((store) => ({\n undo(): void {\n const item = undoStack.pop();\n\n if (item && previous) {\n redoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n redo(): void {\n const item = redoStack.pop();\n\n if (item && previous) {\n undoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n })),\n withHooks({\n onInit(store) {\n effect(() => {\n const cand = keys.reduce((acc, key) => {\n const s = (store as Record<string | keyof Input['state'], unknown>)[key];\n if (s && isSignal(s)) {\n return {\n ...acc,\n [key]: s(),\n };\n }\n return acc;\n }, {});\n\n if (normalized.skip > 0) {\n normalized.skip--;\n return;\n }\n\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n\n //\n // Deep Comparison to prevent duplicated entries\n // on the stack. This can e.g. happen after an undo\n // if the component sends back the undone filter\n // to the store.\n //\n if (JSON.stringify(cand) === JSON.stringify(previous)) {\n return;\n }\n\n // Clear redoStack after recorded action\n redoStack.splice(0);\n\n if (previous) {\n undoStack.push(previous);\n }\n\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n\n previous = cand;\n\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n });\n },\n })\n );\n}\n","import { isPlatformServer } from '@angular/common';\nimport { PLATFORM_ID, effect, inject } from '@angular/core';\nimport {\n SignalStoreFeature,\n getState,\n patchState,\n signalStoreFeature,\n withHooks,\n withMethods,\n SignalStoreFeatureResult,\n EmptyFeatureResult,\n} from '@ngrx/signals';\n\nconst NOOP = () => {};\n\ntype WithStorageSyncFeatureResult = EmptyFeatureResult & {\n methods: {\n clearStorage(): void;\n readFromStorage(): void;\n writeToStorage(): void;\n };\n};\n\nconst StorageSyncStub: Pick<\n WithStorageSyncFeatureResult,\n 'methods'\n>['methods'] = {\n clearStorage: NOOP,\n readFromStorage: NOOP,\n writeToStorage: NOOP,\n};\n\nexport type SyncConfig<State> = {\n /**\n * The key which is used to access the storage.\n */\n key: string;\n /**\n * Flag indicating if the store should read from storage on init and write to storage on every state change.\n *\n * `true` by default\n */\n autoSync?: boolean;\n /**\n * Function to select that portion of the state which should be stored.\n *\n * Returns the whole state object by default\n */\n select?: (state: State) => Partial<State>;\n /**\n * Function used to parse the state coming from storage.\n *\n * `JSON.parse()` by default\n */\n parse?: (stateString: string) => State;\n /**\n * Function used to tranform the state into a string representation.\n *\n * `JSON.stringify()` by default\n */\n stringify?: (state: State) => string;\n /**\n * Factory function used to select the storage.\n *\n * `localstorage` by default\n */\n storage?: () => Storage;\n};\n\n/**\n * Enables store synchronization with storage.\n *\n * Only works on browser platform.\n */\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureResult\n>(key: string): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureResult\n>(\n config: SyncConfig<Input['state']>\n): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureResult\n>(\n configOrKey: SyncConfig<Input['state']> | string\n): SignalStoreFeature<Input, WithStorageSyncFeatureResult> {\n const {\n key,\n autoSync = true,\n select = (state: State) => state,\n parse = JSON.parse,\n stringify = JSON.stringify,\n storage: storageFactory = () => localStorage,\n } = typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey;\n\n return signalStoreFeature(\n withMethods((store, platformId = inject(PLATFORM_ID)) => {\n if (isPlatformServer(platformId)) {\n console.warn(\n `'withStorageSync' provides non-functional implementation due to server-side execution`\n );\n return StorageSyncStub;\n }\n\n const storage = storageFactory();\n\n return {\n /**\n * Removes the item stored in storage.\n */\n clearStorage(): void {\n storage.removeItem(key);\n },\n /**\n * Reads item from storage and patches the state.\n */\n readFromStorage(): void {\n const stateString = storage.getItem(key);\n if (stateString) {\n patchState(store, parse(stateString));\n }\n },\n /**\n * Writes selected portion to storage.\n */\n writeToStorage(): void {\n const slicedState = select(getState(store) as State);\n storage.setItem(key, stringify(slicedState));\n },\n };\n }),\n withHooks({\n onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n\n if (autoSync) {\n store.readFromStorage();\n\n effect(() => {\n store.writeToStorage();\n });\n }\n },\n })\n );\n}\n","/** With pagination comes in two flavors the first one is local pagination or in memory pagination. For example we have 2000 items which we want\n * to display in a table and the response payload is small enough to be stored in the memory. But we can not display all 2000 items at once\n * so we need to paginate the data. The second flavor is server side pagination where the response payload is too large to be stored in the memory\n * and we need to fetch the data from the server in chunks. In the second case we 'could' also cache the data in the memory but that could lead to\n * other problems like memory leaks and stale data. So we will not cache the data in the memory in the second case.\n * This feature implements the local pagination.\n */\n\nimport { Signal, computed } from '@angular/core';\nimport {\n SignalStoreFeature,\n patchState,\n signalStoreFeature,\n withComputed,\n withMethods,\n withState,\n WritableStateSource,\n EmptyFeatureResult,\n} from '@ngrx/signals';\nimport { capitalize } from './with-data-service';\nimport {\n EntityComputed,\n EntityState,\n NamedEntityComputed,\n} from './shared/signal-store-models';\n\n// This is a virtual page which is can be used to create a pagination control\nexport type Page = { label: string | number; value: number };\n\nexport type NamedPaginationServiceState<E, Collection extends string> = {\n [K in Collection as `selectedPage${Capitalize<K>}Entities`]: Array<E>;\n} & {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageSize`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}TotalCount`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageCount`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArray`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArrayMax`]: number;\n};\n\nexport type NamedPaginationServiceSignals<E, Collection extends string> = {\n [K in Collection as `selectedPage${Capitalize<K>}Entities`]: Signal<E[]>;\n} & {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageSize`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}TotalCount`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageCount`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArray`]: Signal<Page[]>;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArrayMax`]: Signal<number>;\n} & {\n [K in Collection as `hasNext${Capitalize<K>}Page`]: Signal<boolean>;\n} & {\n [K in Collection as `hasPrevious${Capitalize<K>}Page`]: Signal<boolean>;\n};\n\nexport type NamedPaginationServiceMethods<Collection extends string> = {\n [K in Collection as `set${Capitalize<K>}PageSize`]: (size: number) => void;\n} & {\n [K in Collection as `next${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `previous${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `last${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `first${Capitalize<K>}Page`]: () => void;\n} & {\n [K in Collection as `goto${Capitalize<K>}Page`]: (page: number) => void;\n};\n\nexport type PaginationServiceState<E> = {\n selectedPageEntities: Array<E>;\n currentPage: number;\n pageSize: number;\n totalCount: number;\n pageCount: number;\n pageNavigationArray: Page[];\n pageNavigationArrayMax: number;\n};\n\nexport type PaginationServiceSignals<E> = {\n selectedPageEntities: Signal<E[]>;\n currentPage: Signal<number>;\n pageSize: Signal<number>;\n totalCount: Signal<number>;\n pageCount: Signal<number>;\n pageNavigationArray: Signal<Page[]>;\n pageNavigationArrayMax: Signal<number>;\n hasNextPage: Signal<boolean>;\n hasPreviousPage: Signal<boolean>;\n};\n\nexport type PaginationServiceMethods = {\n setPageSize: (size: number) => void;\n nextPageKey: () => void;\n previousPage: () => void;\n lastPage: () => void;\n firstPage: () => void;\n gotoPage: (page: number) => void;\n};\n\nexport type SetPaginationState<\n E,\n Collection extends string | undefined\n> = Collection extends string\n ? NamedPaginationServiceState<E, Collection>\n : PaginationServiceState<E>;\n\nexport function withPagination<E, Collection extends string>(options: {\n entity: E;\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult & { computed: NamedEntityComputed<E, Collection> },\n {\n state: NamedPaginationServiceState<E, Collection>;\n computed: NamedPaginationServiceSignals<E, Collection>;\n methods: NamedPaginationServiceMethods<Collection>;\n }\n>;\n\nexport function withPagination<E>(): SignalStoreFeature<\n EmptyFeatureResult & {\n state: EntityState<E>;\n computed: EntityComputed<E>;\n },\n {\n state: PaginationServiceState<E>;\n computed: PaginationServiceSignals<E>;\n methods: PaginationServiceMethods;\n }\n>;\n\nexport function withPagination<E, Collection extends string>(options?: {\n entity: E;\n collection: Collection;\n}): SignalStoreFeature<any, any> {\n const {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayMaxKey,\n pageNavigationArrayKey,\n setPageSizeKey,\n nextPageKey,\n previousPageKey,\n lastPageKey,\n firstPageKey,\n gotoPageKey,\n hasNextPageKey,\n hasPreviousPageKey,\n } = createPaginationKeys<Collection>(options);\n\n return signalStoreFeature(\n withState({\n [pageKey]: 0,\n [pageSizeKey]: 10,\n [pageNavigationArrayMaxKey]: 7,\n }),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const page = store[pageKey] as Signal<number>;\n const pageSize = store[pageSizeKey] as Signal<number>;\n const pageNavigationArrayMax = store[\n pageNavigationArrayMaxKey\n ] as Signal<number>;\n\n return {\n // The derived enitites which are displayed on the current page\n [selectedPageEntitiesKey]: computed<E[]>(() => {\n const pageSizeValue = pageSize();\n const pageValue = page();\n\n return entities().slice(\n pageValue * pageSizeValue,\n (pageValue + 1) * pageSizeValue\n ) as E[];\n }),\n [totalCountKey]: computed(() => entities().length),\n [pageCountKey]: computed(() => {\n const totalCountValue = entities().length;\n const pageSizeValue = pageSize();\n\n if (totalCountValue === 0) {\n return 0;\n }\n\n return Math.ceil(totalCountValue / pageSizeValue);\n }),\n [pageNavigationArrayKey]: computed(() =>\n createPageArray(\n page(),\n pageSize(),\n entities().length,\n pageNavigationArrayMax()\n )\n ),\n\n [hasNextPageKey]: computed(() => {\n return page() < pageSize();\n }),\n\n [hasPreviousPageKey]: computed(() => {\n return page() > 1;\n }),\n };\n }),\n withMethods(\n (store: Record<string, unknown> & WritableStateSource<object>) => {\n return {\n [setPageSizeKey]: (size: number) => {\n patchState(store, setPageSize(size, options));\n },\n [nextPageKey]: () => {\n patchState(store, nextPage(options));\n },\n\n [previousPageKey]: () => {\n patchState(store, previousPage(options));\n },\n\n [lastPageKey]: () => {\n const lastPage = (store[pageCountKey] as Signal<number>)();\n if (lastPage === 0) return;\n patchState(store, gotoPage(lastPage - 1, options));\n },\n\n [firstPageKey]: () => {\n patchState(store, firstPage());\n },\n\n [gotoPageKey]: (page: number) => {\n patchState(store, gotoPage(page, options));\n },\n };\n }\n )\n );\n}\n\nexport function gotoPage<E, Collection extends string>(\n page: number,\n options?: {\n collection: Collection;\n }\n): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: page,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function setPageSize<E, Collection extends string>(\n pageSize: number,\n options?: {\n collection: Collection;\n }\n): Partial<SetPaginationState<E, Collection>> {\n const { pageSizeKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageSizeKey]: pageSize,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function nextPage<E, Collection extends string>(options?: {\n collection: Collection;\n}): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: (currentPage: number) => currentPage + 1,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function previousPage<E, Collection extends string>(options?: {\n collection: Collection;\n}): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: (currentPage: number) => Math.max(currentPage - 1, 1),\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function firstPage<E, Collection extends string>(options?: {\n collection: Collection;\n}): Partial<SetPaginationState<E, Collection>> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: 1,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nexport function setMaxPageNavigationArrayItems<E, Collection extends string>(\n maxPageNavigationArrayItems: number,\n options?: {\n collection: Collection;\n }\n): Partial<SetPaginationState<E, Collection>> {\n const { pageNavigationArrayMaxKey } =\n createPaginationKeys<Collection>(options);\n\n return {\n [pageNavigationArrayMaxKey]: maxPageNavigationArrayItems,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nfunction createPaginationKeys<Collection extends string>(\n options: { collection: Collection } | undefined\n) {\n const entitiesKey = options?.collection\n ? `${options.collection}Entities`\n : 'entities';\n\n const selectedPageEntitiesKey = options?.collection\n ? `selectedPage${capitalize(options?.collection)}Entities`\n : 'selectedPageEntities';\n const pageKey = options?.collection\n ? `${options.collection}CurrentPage`\n : 'currentPage';\n const pageSizeKey = options?.collection\n ? `${options.collection}PageSize`\n : 'pageSize';\n const totalCountKey = options?.collection\n ? `${options.collection}TotalCount`\n : 'totalCount';\n const pageCountKey = options?.collection\n ? `${options.collection}PageCount`\n : 'pageCount';\n const pageNavigationArrayMaxKey = options?.collection\n ? `${options.collection}PageNavigationArrayMax`\n : 'pageNavigationArrayMax';\n const pageNavigationArrayKey = options?.collection\n ? `${options.collection}PageNavigationArray`\n : 'pageNavigationArray';\n\n const setPageSizeKey = options?.collection\n ? `set${capitalize(options.collection)}PageSize`\n : 'setPageSize';\n\n const nextPageKey = options?.collection\n ? `next${capitalize(options.collection)}Page`\n : 'nextPage';\n\n const previousPageKey = options?.collection\n ? `previous${capitalize(options.collection)}Page`\n : 'previousPage';\n\n const lastPageKey = options?.collection\n ? `last${capitalize(options.collection)}Page`\n : 'lastPage';\n\n const firstPageKey = options?.collection\n ? `first${capitalize(options.collection)}Page`\n : 'firstPage';\n\n const gotoPageKey = options?.collection\n ? `goto${capitalize(options.collection)}Page`\n : 'gotoPage';\n\n const hasNextPageKey = options?.collection\n ? `hasNext${capitalize(options.collection)}Page`\n : 'hasNextPage';\n\n const hasPreviousPageKey = options?.collection\n ? `hasPrevious${capitalize(options.collection)}Page`\n : 'hasPreviousPage';\n\n return {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayKey,\n pageNavigationArrayMaxKey,\n setPageSizeKey,\n nextPageKey,\n previousPageKey,\n lastPageKey,\n firstPageKey,\n gotoPageKey,\n hasNextPageKey,\n hasPreviousPageKey,\n };\n}\n\nexport function createPageArray(\n currentPage: number,\n itemsPerPage: number,\n totalItems: number,\n paginationRange: number\n): Page[] {\n // Convert paginationRange to number in case it's a string\n paginationRange = +paginationRange;\n\n // Calculate total number of pages\n const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n const halfWay = Math.ceil(paginationRange / 2);\n\n const isStart = currentPage <= halfWay;\n const isEnd = totalPages - halfWay < currentPage;\n const isMiddle = !isStart && !isEnd;\n\n const ellipsesNeeded = paginationRange < totalPages;\n const pages: Page[] = [];\n\n for (let i = 1; i <= totalPages && i <= paginationRange; i++) {\n let pageNumber = i;\n\n if (i === paginationRange) {\n pageNumber = totalPages;\n } else if (ellipsesNeeded) {\n if (isEnd) {\n pageNumber = totalPages - paginationRange + i;\n } else if (isMiddle) {\n pageNumber = currentPage - halfWay + i;\n }\n }\n\n const openingEllipsesNeeded = i === 2 && (isMiddle || isEnd);\n const closingEllipsesNeeded =\n i === paginationRange - 1 && (isMiddle || isStart);\n\n const label =\n ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)\n ? '...'\n : pageNumber;\n\n pages.push({ label, value: pageNumber });\n }\n\n return pages;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","patchState"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -5,5 +5,3 @@ export * from './lib/with-undo-redo';
5
5
  export * from './lib/with-data-service';
6
6
  export { withStorageSync, SyncConfig } from './lib/with-storage-sync';
7
7
  export * from './lib/with-pagination';
8
- export * from './lib/redux-connector';
9
- export * from './lib/redux-connector/rxjs-interop';
@@ -1,35 +1,23 @@
1
- import { SignalStoreFeature, EmptyFeatureResult } from '@ngrx/signals';
2
- import { EntityState } from '@ngrx/signals/entities';
1
+ import { SignalStoreFeature, EmptyFeatureResult, SignalStoreFeatureResult } from '@ngrx/signals';
3
2
  import { Signal } from '@angular/core';
4
- import { Entity } from './with-data-service';
5
- import { EntityComputed, NamedEntityComputed } from './shared/signal-store-models';
6
3
  export type StackItem = Record<string, unknown>;
7
4
  export type NormalizedUndoRedoOptions = {
8
5
  maxStackSize: number;
9
6
  collections?: string[];
7
+ keys: string[];
8
+ skip: number;
10
9
  };
11
10
  export declare function getUndoRedoKeys(collections?: string[]): string[];
12
- export declare function withUndoRedo<Collection extends string>(options?: {
13
- maxStackSize?: number;
14
- collections: Collection[];
15
- }): SignalStoreFeature<EmptyFeatureResult & {
16
- computed: NamedEntityComputed<Entity, Collection>;
17
- }, EmptyFeatureResult & {
18
- computed: {
19
- canUndo: Signal<boolean>;
20
- canRedo: Signal<boolean>;
21
- };
22
- methods: {
23
- undo: () => void;
24
- redo: () => void;
25
- };
26
- }>;
27
- export declare function withUndoRedo(options?: {
28
- maxStackSize?: number;
29
- }): SignalStoreFeature<EmptyFeatureResult & {
30
- state: EntityState<Entity>;
31
- computed: EntityComputed<Entity>;
32
- }, EmptyFeatureResult & {
11
+ type NonNever<T> = T extends never ? never : T;
12
+ type ExtractEntityCollection<T> = T extends `${infer U}Entities` ? U : never;
13
+ type ExtractEntityCollections<Store extends SignalStoreFeatureResult> = NonNever<{
14
+ [K in keyof Store['computed']]: ExtractEntityCollection<K>;
15
+ }[keyof Store['computed']]>;
16
+ type OptionsForState<Store extends SignalStoreFeatureResult> = Partial<Omit<NormalizedUndoRedoOptions, 'collections' | 'keys'>> & {
17
+ collections?: ExtractEntityCollections<Store>[];
18
+ keys?: (keyof Store['state'])[];
19
+ };
20
+ export declare function withUndoRedo<Input extends EmptyFeatureResult>(options?: OptionsForState<Input>): SignalStoreFeature<Input, EmptyFeatureResult & {
33
21
  computed: {
34
22
  canUndo: Signal<boolean>;
35
23
  canRedo: Signal<boolean>;
@@ -39,3 +27,4 @@ export declare function withUndoRedo(options?: {
39
27
  redo: () => void;
40
28
  };
41
29
  }>;
30
+ export {};
package/package.json CHANGED
@@ -1,13 +1,19 @@
1
1
  {
2
2
  "name": "@angular-architects/ngrx-toolkit",
3
- "version": "18.0.2",
3
+ "version": "18.0.3",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "GitHub",
7
7
  "url": "https://github.com/angular-architects/ngrx-toolkit"
8
8
  },
9
9
  "peerDependencies": {
10
- "@ngrx/signals": "18.0.2"
10
+ "@ngrx/signals": "18.0.2",
11
+ "@ngrx/store": ">=18.0.0"
12
+ },
13
+ "peerDependenciesMeta": {
14
+ "@ngrx/store": {
15
+ "optional": true
16
+ }
11
17
  },
12
18
  "dependencies": {
13
19
  "tslib": "^2.3.0"
@@ -24,6 +30,12 @@
24
30
  "esm2022": "./esm2022/angular-architects-ngrx-toolkit.mjs",
25
31
  "esm": "./esm2022/angular-architects-ngrx-toolkit.mjs",
26
32
  "default": "./fesm2022/angular-architects-ngrx-toolkit.mjs"
33
+ },
34
+ "./redux-connector": {
35
+ "types": "./redux-connector/index.d.ts",
36
+ "esm2022": "./esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs",
37
+ "esm": "./esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs",
38
+ "default": "./fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs"
27
39
  }
28
40
  }
29
41
  }
@@ -0,0 +1,2 @@
1
+ export { createReduxState, mapAction, withActionMappers, } from './src/lib/create-redux';
2
+ export { reduxMethod } from './src/lib/rxjs-interop/redux-method';
@@ -1,41 +0,0 @@
1
- import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from "@angular/core";
2
- import { SignalReduxStore, injectReduxDispatch } from "./signal-redux-store";
3
- import { capitalize, isActionCreator } from "./util";
4
- export function mapAction(...args) {
5
- let resultMethod = args.pop();
6
- let storeMethod = args.pop();
7
- if (isActionCreator(storeMethod)) {
8
- args.push(storeMethod);
9
- storeMethod = resultMethod || storeMethod;
10
- resultMethod = undefined;
11
- }
12
- const types = args.map((creator) => creator.type);
13
- return {
14
- types,
15
- storeMethod,
16
- resultMethod
17
- };
18
- }
19
- export function withActionMappers(...mappers) {
20
- return mappers;
21
- }
22
- export function createReduxState(storeName, signalStore, withActionMappers) {
23
- const isRootProvider = signalStore?.ɵprov?.providedIn === 'root';
24
- return {
25
- [`provide${capitalize(storeName)}Store`]: (connectReduxDevtools = false) => makeEnvironmentProviders([
26
- isRootProvider ? [] : signalStore,
27
- {
28
- provide: ENVIRONMENT_INITIALIZER,
29
- multi: true,
30
- useFactory: (signalReduxStore = inject(SignalReduxStore), store = inject(signalStore)) => () => {
31
- if (connectReduxDevtools) {
32
- // addStoreToReduxDevtools(store, storeName, false);
33
- }
34
- signalReduxStore.connectFeatureStore(withActionMappers(store));
35
- }
36
- }
37
- ]),
38
- [`inject${capitalize(storeName)}Store`]: () => Object.assign(inject(signalStore), { dispatch: injectReduxDispatch() })
39
- };
40
- }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJlZHV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9yZWR1eC1jb25uZWN0b3IvY3JlYXRlLXJlZHV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFxQnJELE1BQU0sVUFBVSxTQUFTLENBR3ZCLEdBQUcsSUFJRjtJQUVELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQTJELENBQUM7SUFDdkYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBa0UsQ0FBQztJQUU3RixJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkIsV0FBVyxHQUFHLFlBQVksSUFBSSxXQUFXLENBQUM7UUFDMUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUksSUFBNEIsQ0FBQyxHQUFHLENBQzdDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNpQixDQUFDO0lBRTdDLE9BQU87UUFDTCxLQUFLO1FBQ0wsV0FBVztRQUNYLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsR0FBRyxPQUFpRDtJQUVwRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUk5QixTQUFvQixFQUNwQixXQUFrQixFQUNsQixpQkFBMkY7SUFFM0YsTUFBTSxjQUFjLEdBQUksV0FBbUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxLQUFLLE1BQU0sQ0FBQztJQUMxRSxPQUFPO1FBQ0wsQ0FBQyxVQUFVLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDO1lBQ25HLGNBQWMsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ2hDO2dCQUNFLE9BQU8sRUFBRSx1QkFBdUI7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJO2dCQUNYLFVBQVUsRUFBRSxDQUNWLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUMzQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixFQUFFLENBQUMsR0FBRyxFQUFFO29CQUNSLElBQUksb0JBQW9CLEVBQUUsQ0FBQzt3QkFDekIsb0RBQW9EO29CQUN0RCxDQUFDO29CQUNELGdCQUFnQixDQUFDLG1CQUFtQixDQUNsQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FDekIsQ0FBQztnQkFDSixDQUFDO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDMUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUNuQixFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLENBQ3BDO0tBQ29DLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBpbmplY3QsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25DcmVhdG9yLCBBY3Rpb25UeXBlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlL3NyYy9tb2RlbHNcIjtcbmltcG9ydCB7IENyZWF0ZVJlZHV4U3RhdGUsIEV4dHJhY3RBY3Rpb25UeXBlcywgTWFwcGVyVHlwZXMsIFN0b3JlIH0gZnJvbSBcIi4vbW9kZWxcIjtcbmltcG9ydCB7IFNpZ25hbFJlZHV4U3RvcmUsIGluamVjdFJlZHV4RGlzcGF0Y2ggfSBmcm9tIFwiLi9zaWduYWwtcmVkdXgtc3RvcmVcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIGlzQWN0aW9uQ3JlYXRvciB9IGZyb20gXCIuL3V0aWxcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gbWFwQWN0aW9uPFxuICBDcmVhdG9ycyBleHRlbmRzIHJlYWRvbmx5IEFjdGlvbkNyZWF0b3JbXVxuPihcbiAgLi4uYXJnczogW1xuICAgIC4uLmNyZWF0b3JzOiBDcmVhdG9ycyxcbiAgICBzdG9yZU1ldGhvZDogKGFjdGlvbjogQWN0aW9uVHlwZTxDcmVhdG9yc1tudW1iZXJdPikgPT4gdW5rbm93blxuICBdXG4pOiBNYXBwZXJUeXBlczxDcmVhdG9ycz47XG5leHBvcnQgZnVuY3Rpb24gbWFwQWN0aW9uPFxuICBDcmVhdG9ycyBleHRlbmRzIHJlYWRvbmx5IEFjdGlvbkNyZWF0b3JbXSxcbiAgVFxuPihcbiAgLi4uYXJnczogW1xuICAgIC4uLmNyZWF0b3JzOiBDcmVhdG9ycyxcbiAgICBzdG9yZU1ldGhvZDogKGFjdGlvbjogQWN0aW9uVHlwZTxDcmVhdG9yc1tudW1iZXJdPiwgcmVzdWx0TWV0aG9kOiAoaW5wdXQ6IFQpID0+IHVua25vd24pID0+IHVua25vd24sXG4gICAgcmVzdWx0TWV0aG9kOiAoaW5wdXQ6IFQpID0+IHVua25vd25cbiAgXVxuKTogTWFwcGVyVHlwZXM8Q3JlYXRvcnM+O1xuZXhwb3J0IGZ1bmN0aW9uIG1hcEFjdGlvbjxcbiAgQ3JlYXRvcnMgZXh0ZW5kcyByZWFkb25seSBBY3Rpb25DcmVhdG9yW11cbj4oXG4gIC4uLmFyZ3M6IFtcbiAgICAuLi5jcmVhdG9yczogQ3JlYXRvcnMsXG4gICAgc3RvcmVNZXRob2Q6IChhY3Rpb246IEFjdGlvblR5cGU8Q3JlYXRvcnNbbnVtYmVyXT4pID0+IHVua25vd24sXG4gICAgcmVzdWx0TWV0aG9kPzogKGlucHV0OiB1bmtub3duKSA9PiB1bmtub3duXG4gIF1cbik6IE1hcHBlclR5cGVzPENyZWF0b3JzPiB7XG4gIGxldCByZXN1bHRNZXRob2QgPSBhcmdzLnBvcCgpIGFzIHVua25vd24gYXMgKChpbnB1dDogdW5rbm93bikgPT4gdW5rbm93biApIHwgdW5kZWZpbmVkO1xuICBsZXQgc3RvcmVNZXRob2QgPSBhcmdzLnBvcCgpIGFzIHVua25vd24gYXMgKGFjdGlvbjogQWN0aW9uVHlwZTxDcmVhdG9yc1tudW1iZXJdPikgPT4gdW5rbm93bjtcblxuICBpZiAoaXNBY3Rpb25DcmVhdG9yKHN0b3JlTWV0aG9kKSkge1xuICAgIGFyZ3MucHVzaChzdG9yZU1ldGhvZCk7XG4gICAgc3RvcmVNZXRob2QgPSByZXN1bHRNZXRob2QgfHwgc3RvcmVNZXRob2Q7XG4gICAgcmVzdWx0TWV0aG9kID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZXMgPSAoYXJncyBhcyB1bmtub3duIGFzIENyZWF0b3JzKS5tYXAoXG4gICAgKGNyZWF0b3IpID0+IGNyZWF0b3IudHlwZVxuICApIGFzIHVua25vd24gYXMgRXh0cmFjdEFjdGlvblR5cGVzPENyZWF0b3JzPjtcblxuICByZXR1cm4ge1xuICAgIHR5cGVzLFxuICAgIHN0b3JlTWV0aG9kLFxuICAgIHJlc3VsdE1ldGhvZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEFjdGlvbk1hcHBlcnMoXG4gIC4uLm1hcHBlcnM6IE1hcHBlclR5cGVzPEFjdGlvbkNyZWF0b3I8YW55LCBhbnk+W10+W11cbik6IE1hcHBlclR5cGVzPEFjdGlvbkNyZWF0b3I8YW55LCBhbnk+W10+W10ge1xuICByZXR1cm4gbWFwcGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHV4U3RhdGU8XG4gIFN0b3JlTmFtZSBleHRlbmRzIHN0cmluZyxcbiAgU1RPUkUgZXh0ZW5kcyBTdG9yZVxuPihcbiAgc3RvcmVOYW1lOiBTdG9yZU5hbWUsXG4gIHNpZ25hbFN0b3JlOiBTVE9SRSxcbiAgd2l0aEFjdGlvbk1hcHBlcnM6IChzdG9yZTogSW5zdGFuY2VUeXBlPFNUT1JFPikgPT4gTWFwcGVyVHlwZXM8QWN0aW9uQ3JlYXRvcjxhbnksIGFueT5bXT5bXSxcbik6IENyZWF0ZVJlZHV4U3RhdGU8U3RvcmVOYW1lLCBTVE9SRT4ge1xuICBjb25zdCBpc1Jvb3RQcm92aWRlciA9IChzaWduYWxTdG9yZSBhcyBhbnkpPy7JtXByb3Y/LnByb3ZpZGVkSW4gPT09ICdyb290JztcbiAgcmV0dXJuIHtcbiAgICBbYHByb3ZpZGUke2NhcGl0YWxpemUoc3RvcmVOYW1lKX1TdG9yZWBdOiAoY29ubmVjdFJlZHV4RGV2dG9vbHMgPSBmYWxzZSkgPT4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgIGlzUm9vdFByb3ZpZGVyPyBbXSA6IHNpZ25hbFN0b3JlLFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIHVzZUZhY3Rvcnk6IChcbiAgICAgICAgICBzaWduYWxSZWR1eFN0b3JlID0gaW5qZWN0KFNpZ25hbFJlZHV4U3RvcmUpLFxuICAgICAgICAgIHN0b3JlID0gaW5qZWN0KHNpZ25hbFN0b3JlKVxuICAgICAgICApID0+ICgpID0+IHtcbiAgICAgICAgICBpZiAoY29ubmVjdFJlZHV4RGV2dG9vbHMpIHtcbiAgICAgICAgICAgIC8vIGFkZFN0b3JlVG9SZWR1eERldnRvb2xzKHN0b3JlLCBzdG9yZU5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2lnbmFsUmVkdXhTdG9yZS5jb25uZWN0RmVhdHVyZVN0b3JlKFxuICAgICAgICAgICAgd2l0aEFjdGlvbk1hcHBlcnMoc3RvcmUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pLFxuICAgIFtgaW5qZWN0JHtjYXBpdGFsaXplKHN0b3JlTmFtZSl9U3RvcmVgXTogKCkgPT4gT2JqZWN0LmFzc2lnbihcbiAgICAgIGluamVjdChzaWduYWxTdG9yZSksXG4gICAgICB7IGRpc3BhdGNoOiBpbmplY3RSZWR1eERpc3BhdGNoKCkgfVxuICAgIClcbiAgfSBhcyBDcmVhdGVSZWR1eFN0YXRlPFN0b3JlTmFtZSwgU1RPUkU+O1xufVxuIl19
@@ -1,2 +0,0 @@
1
- export { createReduxState, mapAction, withActionMappers } from './create-redux';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3JlZHV4LWNvbm5lY3Rvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCB7IGNyZWF0ZVJlZHV4U3RhdGUsIG1hcEFjdGlvbiwgd2l0aEFjdGlvbk1hcHBlcnMgfSBmcm9tICcuL2NyZWF0ZS1yZWR1eCc7XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3JlZHV4LWNvbm5lY3Rvci9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIFNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVlcFNpZ25hbCB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL2RlZXAtc2lnbmFsJztcbmltcG9ydCB7XG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxufSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zaWduYWwtc3RvcmUtbW9kZWxzJztcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQ3JlYXRvcixcbiAgQWN0aW9uVHlwZSxcbiAgUHJldHRpZnksXG59IGZyb20gJ0BuZ3J4L3N0b3JlL3NyYy9tb2RlbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgVW5zdWJzY3JpYmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgSW5jbHVkZVByb3BUeXBlPFxuICBULFxuICBWLFxuICBXaXRoTmV2ZXJzID0ge1xuICAgIFtLIGluIGtleW9mIFRdOiBFeGNsdWRlPFRbS10sIHVuZGVmaW5lZD4gZXh0ZW5kcyBWXG4gICAgICA/IFRbS10gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICA/IEluY2x1ZGVQcm9wVHlwZTxUW0tdLCBWPlxuICAgICAgICA6IFRbS11cbiAgICAgIDogbmV2ZXI7XG4gIH1cbj4gPSBQcmV0dGlmeTxcbiAgUGljazxcbiAgICBXaXRoTmV2ZXJzLFxuICAgIHtcbiAgICAgIFtLIGluIGtleW9mIFdpdGhOZXZlcnNdOiBXaXRoTmV2ZXJzW0tdIGV4dGVuZHMgbmV2ZXJcbiAgICAgICAgPyBuZXZlclxuICAgICAgICA6IEsgZXh0ZW5kcyBzdHJpbmdcbiAgICAgICAgPyBLXG4gICAgICAgIDogbmV2ZXI7XG4gICAgfVtrZXlvZiBXaXRoTmV2ZXJzXVxuICA+XG4+O1xuXG5leHBvcnQgdHlwZSBTdG9yZSA9IFR5cGU8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgU3RhdGVTaWduYWxzPFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdFsnc3RhdGUnXT5cbj47XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlZHV4U3RhdGU8U3RvcmVOYW1lIGV4dGVuZHMgc3RyaW5nLCBTVE9SRSBleHRlbmRzIFN0b3JlPiA9IHtcbiAgW0sgaW4gU3RvcmVOYW1lIGFzIGBwcm92aWRlJHtDYXBpdGFsaXplPEs+fVN0b3JlYF06IChcbiAgICBjb25uZWN0UmVkdXhEZXZ0b29scz86IGJvb2xlYW5cbiAgKSA9PiBFbnZpcm9ubWVudFByb3ZpZGVycztcbn0gJiB7XG4gIFtLIGluIFN0b3JlTmFtZSBhcyBgaW5qZWN0JHtDYXBpdGFsaXplPEs+fVN0b3JlYF06ICgpID0+IEluamVjdGFibGVSZWR1eFNsaWNlPFNUT1JFPjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yczxTVE9SRSBleHRlbmRzIFN0b3JlPiA9IEluY2x1ZGVQcm9wVHlwZTxcbiAgSW5zdGFuY2VUeXBlPFNUT1JFPixcbiAgU2lnbmFsPHVua25vd24+IHwgRGVlcFNpZ25hbDx1bmtub3duPlxuPjtcbmV4cG9ydCB0eXBlIERpc3BhdGNoID0ge1xuICBkaXNwYXRjaDogKFxuICAgIGlucHV0OiBBY3Rpb24gfCBPYnNlcnZhYmxlPEFjdGlvbj4gfCBTaWduYWw8QWN0aW9uPlxuICApID0+IFVuc3Vic2NyaWJhYmxlO1xufTtcbmV4cG9ydCB0eXBlIEluamVjdGFibGVSZWR1eFNsaWNlPFNUT1JFIGV4dGVuZHMgU3RvcmU+ID0gU2VsZWN0b3JzPFNUT1JFPiAmXG4gIERpc3BhdGNoO1xuXG5leHBvcnQgdHlwZSBFeHRyYWN0QWN0aW9uVHlwZXM8Q3JlYXRvcnMgZXh0ZW5kcyByZWFkb25seSBBY3Rpb25DcmVhdG9yW10+ID0ge1xuICBbS2V5IGluIGtleW9mIENyZWF0b3JzXTogQ3JlYXRvcnNbS2V5XSBleHRlbmRzIEFjdGlvbkNyZWF0b3I8aW5mZXIgVD5cbiAgICA/IFRcbiAgICA6IG5ldmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25NZXRob2Q8VCwgViBleHRlbmRzIEFjdGlvbiA9IEFjdGlvbj4ge1xuICAoYWN0aW9uOiBWKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9yZU1ldGhvZDxcbiAgQ3JlYXRvcnMgZXh0ZW5kcyByZWFkb25seSBBY3Rpb25DcmVhdG9yW10sXG4gIFJlc3VsdFN0YXRlID0gdW5rbm93blxuPiB7XG4gIChhY3Rpb246IEFjdGlvblR5cGU8Q3JlYXRvcnNbbnVtYmVyXT4pOiBSZXN1bHRTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBwZXJUeXBlczxDcmVhdG9ycyBleHRlbmRzIHJlYWRvbmx5IEFjdGlvbkNyZWF0b3JbXT4ge1xuICB0eXBlczogRXh0cmFjdEFjdGlvblR5cGVzPENyZWF0b3JzPjtcbiAgc3RvcmVNZXRob2Q6IFN0b3JlTWV0aG9kPENyZWF0b3JzPjtcbiAgcmVzdWx0TWV0aG9kPzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export { reduxMethod } from './redux-method';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3JlZHV4LWNvbm5lY3Rvci9yeGpzLWludGVyb3AvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgeyByZWR1eE1ldGhvZCB9IGZyb20gJy4vcmVkdXgtbWV0aG9kJztcbiJdfQ==