@mini-rx/signal-store
Version:
Signal Store for Angular
1 lines • 52.9 kB
Source Map (JSON)
{"version":3,"file":"mini-rx-signal-store.mjs","sources":["../../../../libs/signal-store/src/lib/signal-selector.ts","../../../../libs/signal-store/src/lib/create-selectable-signal.ts","../../../../libs/signal-store/src/lib/store-core.ts","../../../../libs/signal-store/src/lib/store.ts","../../../../libs/signal-store/src/lib/mini-rx-to-observable.ts","../../../../libs/signal-store/src/lib/signal-store-sub-sink.ts","../../../../libs/signal-store/src/lib/create-rx-effect-fn.ts","../../../../libs/signal-store/src/lib/create-connect-fn.ts","../../../../libs/signal-store/src/lib/feature-store.ts","../../../../libs/signal-store/src/lib/component-store.ts","../../../../libs/signal-store/src/lib/extensions/redux-devtools.extension.ts","../../../../libs/signal-store/src/lib/injection-tokens.ts","../../../../libs/signal-store/src/lib/modules/store.module.ts","../../../../libs/signal-store/src/lib/effects-mapper.ts","../../../../libs/signal-store/src/lib/modules/effects.module.ts","../../../../libs/signal-store/src/lib/modules/component-store.module.ts","../../../../libs/signal-store/src/lib/providers.ts","../../../../libs/signal-store/src/index.ts","../../../../libs/signal-store/src/mini-rx-signal-store.ts"],"sourcesContent":["// Credits go to NgRx\n// Typings are taken directly from NgRx with small modifications:\n// https://github.com/ngrx/platform/blob/8.6.0/modules/store/src/selector.ts\n\n// The MIT License (MIT)\n//\n// Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { computed, Signal } from '@angular/core';\nimport { AppState } from '@mini-rx/common';\n\nexport const SIGNAL_SELECTOR_KEY = '@mini-rx/signalSelector';\n\nexport interface HasSignalSelectorKey {\n [SIGNAL_SELECTOR_KEY]: true;\n}\n\ntype Selector<T, R> = (state: Signal<T>) => Signal<R>;\nexport type SignalSelector<T, R> = Selector<T, R> & HasSignalSelectorKey;\n\nexport function createSelector<State, S1, Result>(\n s1: SignalSelector<State, S1>,\n projector: (s1: S1) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n projector: (s1: S1, s2: S2) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, S3, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n s3: SignalSelector<State, S3>,\n projector: (s1: S1, s2: S2, s3: S3) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, S3, S4, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n s3: SignalSelector<State, S3>,\n s4: SignalSelector<State, S4>,\n projector: (s1: S1, s2: S2, s3: S3, s4: S4) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, S3, S4, S5, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n s3: SignalSelector<State, S3>,\n s4: SignalSelector<State, S4>,\n s5: SignalSelector<State, S5>,\n projector: (s1: S1, s2: S2, s3: S3, s4: S4, s5: S5) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, S3, S4, S5, S6, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n s3: SignalSelector<State, S3>,\n s4: SignalSelector<State, S4>,\n s5: SignalSelector<State, S5>,\n s6: SignalSelector<State, S6>,\n projector: (s1: S1, s2: S2, s3: S3, s4: S4, s5: S5, s6: S6) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, S3, S4, S5, S6, S7, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n s3: SignalSelector<State, S3>,\n s4: SignalSelector<State, S4>,\n s5: SignalSelector<State, S5>,\n s6: SignalSelector<State, S6>,\n s7: SignalSelector<State, S7>,\n projector: (s1: S1, s2: S2, s3: S3, s4: S4, s5: S5, s6: S6, s7: S7) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector<State, S1, S2, S3, S4, S5, S6, S7, S8, Result>(\n s1: SignalSelector<State, S1>,\n s2: SignalSelector<State, S2>,\n s3: SignalSelector<State, S3>,\n s4: SignalSelector<State, S4>,\n s5: SignalSelector<State, S5>,\n s6: SignalSelector<State, S6>,\n s7: SignalSelector<State, S7>,\n s8: SignalSelector<State, S8>,\n projector: (s1: S1, s2: S2, s3: S3, s4: S4, s5: S5, s6: S6, s7: S7, s8: S8) => Result\n): SignalSelector<State, Result>;\n\nexport function createSelector(...args: any[]): SignalSelector<any, any> {\n const selectors = args.slice(0, args.length - 1);\n const projector = args[args.length - 1];\n\n const selector: Selector<any, any> = (state) => {\n const signalsFromSelectors: Signal<any>[] = selectors.map((fn) => {\n return fn(state); // Pass the state Signal\n });\n\n // Return computed Signal which recalculates when one of the `signalsFromSelectors` notifies about changes\n return computed(() => {\n const results: any[] = signalsFromSelectors.map((aSignal) => aSignal());\n return projector(...results);\n });\n };\n\n return addSignalSelectorKey(selector);\n}\n\nexport function createFeatureStateSelector<T>(featureKey?: string): SignalSelector<object, T>;\nexport function createFeatureStateSelector<T, V>(featureKey: keyof T): SignalSelector<T, V>;\nexport function createFeatureStateSelector(featureKey?: any): SignalSelector<any, any> {\n let selector: Selector<any, any>;\n if (featureKey) {\n selector = createSelector(\n addSignalSelectorKey((state: Signal<any>) => state),\n (state: AppState) => state[featureKey]\n );\n } else {\n selector = (state) => state; // Do not memoize: when used with FeatureStore there is a new state object created for every `setState`\n }\n return addSignalSelectorKey(selector);\n}\n\nexport function createComponentStateSelector<T>(): SignalSelector<T, T> {\n return addSignalSelectorKey((state: Signal<T>) => state);\n}\n\n// Exported for testing\nexport function addSignalSelectorKey<T, R>(s: Selector<T, R>): SignalSelector<T, R> {\n Object.defineProperty(s, SIGNAL_SELECTOR_KEY, {\n value: true,\n });\n\n return s as SignalSelector<T, R>;\n}\n\nexport function isSignalSelector(v: any): v is SignalSelector<any, any> {\n return Object.hasOwn(v, SIGNAL_SELECTOR_KEY);\n}\n","import { computed, Signal, WritableSignal } from '@angular/core';\nimport { isSignalSelector, SignalSelector } from './signal-selector';\nimport { isKey } from '@mini-rx/common';\n\ntype StateSelector<T, R> = (state: T) => R;\n\nfunction createSelectFn<StateType extends object>(state: Signal<StateType>) {\n function select(): Signal<StateType>;\n function select<R>(mapFn: SignalSelector<StateType, R>): Signal<R>;\n function select<R>(mapFn: StateSelector<StateType, R>): Signal<R>;\n function select<KeyType extends keyof StateType>(key: KeyType): Signal<StateType[KeyType]>;\n function select(mapFnOrKey?: any): Signal<any> {\n if (!mapFnOrKey) {\n return state;\n }\n\n if (isSignalSelector(mapFnOrKey)) {\n return mapFnOrKey(state);\n }\n\n return computed(() => {\n const rawState = state();\n return isKey(rawState, mapFnOrKey) ? rawState[mapFnOrKey] : mapFnOrKey(state());\n });\n }\n\n return select;\n}\n\nexport function createSelectableSignal<StateType extends object>(state: Signal<StateType>) {\n return {\n select: createSelectFn(state),\n get: () => {\n return state();\n },\n };\n}\n\nexport function createSelectableWritableSignal<StateType extends object>(\n state: WritableSignal<StateType>\n) {\n return {\n select: createSelectFn(state),\n get: (): StateType => {\n return state();\n },\n set: (v: StateType): void => {\n state.set(v);\n },\n };\n}\n","import { signal } from '@angular/core';\nimport { AppState, createRegisterEffectFn, createStore } from '@mini-rx/common';\nimport { createSelectableWritableSignal } from './create-selectable-signal';\n\nexport const storeCore = createStore(createSelectableWritableSignal<AppState>(signal({})));\nexport const rxEffect = createRegisterEffectFn(storeCore.dispatch);\n","import { AppState, StoreConfig } from '@mini-rx/common';\nimport { storeCore } from './store-core';\n\nexport class Store {\n dispatch = storeCore.dispatch;\n select = storeCore.appState.select;\n\n constructor(config: StoreConfig<AppState>) {\n storeCore.configureStore(config);\n }\n}\n","// Credits go to Angular\n// Copied from with small modifications: https://github.com/angular/angular/blob/16.2.10/packages/core/rxjs-interop/src/to_observable.ts\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n assertInInjectionContext,\n DestroyRef,\n effect,\n inject,\n Injector,\n Signal,\n untracked,\n} from '@angular/core';\nimport { ToObservableOptions } from '@angular/core/rxjs-interop';\nimport { Observable, Subject } from 'rxjs';\n\n// Reimplemented `toObservable` from Angular\n// Use Subject instead of ReplaySubject (which is more lightweight and sufficient for internal use in MiniRx)\nexport function miniRxToObservable<T>(\n source: Signal<T>,\n options?: ToObservableOptions\n): Observable<T> {\n !options?.injector && assertInInjectionContext(miniRxToObservable);\n const injector = options?.injector ?? inject(Injector);\n const subject = new Subject<T>();\n\n const watcher = effect(\n () => {\n let value: T;\n try {\n value = source();\n } catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n },\n { injector, manualCleanup: true }\n );\n\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n\n return subject.asObservable();\n}\n","import { DestroyRef, inject } from '@angular/core';\nimport { createSubSink } from '@mini-rx/common';\nimport { Subscription } from 'rxjs';\n\nexport function createSignalStoreSubSink() {\n const subSink = createSubSink();\n inject(DestroyRef).onDestroy(subSink.unsubscribe);\n return {\n set sink(sub: Subscription) {\n subSink.sink = sub;\n },\n };\n}\n","import { EnvironmentInjector, inject, isSignal, Signal } from '@angular/core';\nimport { isObservable, Observable, Subject } from 'rxjs';\nimport { defaultEffectsErrorHandler } from '@mini-rx/common';\nimport { miniRxToObservable } from './mini-rx-to-observable';\nimport { createSignalStoreSubSink } from './signal-store-sub-sink';\n\nexport function createRxEffectFn() {\n const subSink = createSignalStoreSubSink();\n const injector = inject(EnvironmentInjector);\n\n function rxEffect<\n // Credits for the typings go to NgRx (Component Store): https://github.com/ngrx/platform/blob/13.1.0/modules/component-store/src/component-store.ts#L279-L291\n ProvidedType = void,\n // The actual origin$ type, which could be unknown, when not specified\n OriginType extends Observable<ProvidedType> | unknown = Observable<ProvidedType>,\n // Unwrapped actual type of the origin$ Observable, after default was applied\n ObservableType = OriginType extends Observable<infer A> ? A : never,\n // Return either an empty callback or a function requiring specific types as inputs\n ReturnType = ProvidedType | ObservableType extends void\n ? () => void\n : (\n observableOrValue:\n | ObservableType\n | Observable<ObservableType>\n | Signal<ObservableType>\n ) => void\n >(effectFn: (origin$: OriginType) => Observable<unknown>): ReturnType {\n const subject = new Subject<ObservableType>();\n const effect$ = effectFn(subject as OriginType);\n subSink.sink = effect$.pipe(defaultEffectsErrorHandler).subscribe();\n\n return ((\n observableOrValue?: ObservableType | Observable<ObservableType> | Signal<ObservableType>\n ) => {\n // If we detect a Signal: convert Signal to Observable\n observableOrValue = isSignal(observableOrValue)\n ? miniRxToObservable(observableOrValue, { injector })\n : observableOrValue;\n\n isObservable(observableOrValue)\n ? (subSink.sink = observableOrValue.subscribe((v) => subject.next(v)))\n : subject.next(observableOrValue as ObservableType);\n }) as unknown as ReturnType;\n }\n\n return rxEffect;\n}\n","import { EnvironmentInjector, inject, isSignal, Signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { OperationType, UpdateStateCallback } from '@mini-rx/common';\nimport { miniRxToObservable } from './mini-rx-to-observable';\nimport { createSignalStoreSubSink } from './signal-store-sub-sink';\n\nexport function createConnectFn<StateType>(updateStateCallback: UpdateStateCallback<StateType>) {\n const subSink = createSignalStoreSubSink();\n const injector = inject(EnvironmentInjector);\n\n return <K extends keyof StateType, ValueType = StateType[K]>(\n dict: Record<K, Observable<ValueType> | Signal<ValueType>>\n ) => {\n const keys: K[] = Object.keys(dict) as K[];\n\n keys.forEach((key) => {\n const observableOrSignal: Observable<ValueType> | Signal<ValueType> = dict[key];\n const obs$ = isSignal(observableOrSignal)\n ? miniRxToObservable(observableOrSignal, { injector })\n : observableOrSignal;\n subSink.sink = obs$.subscribe((v) => {\n updateStateCallback(\n {\n [key]: v,\n } as unknown as Partial<StateType>,\n OperationType.CONNECTION,\n key as string\n );\n });\n });\n };\n}\n","import { DestroyRef, inject, Signal, untracked } from '@angular/core';\nimport {\n Action,\n createFeatureStoreReducer,\n createMiniRxActionType,\n createUpdateFn,\n FeatureStoreConfig,\n generateFeatureKey,\n generateId,\n MiniRxAction,\n miniRxError,\n OperationType,\n StateOrCallback,\n undo,\n UpdateStateCallback,\n} from '@mini-rx/common';\nimport { storeCore } from './store-core';\nimport { createSelectableSignal } from './create-selectable-signal';\nimport { ComponentStoreLike } from './models';\nimport { createRxEffectFn } from './create-rx-effect-fn';\nimport { createConnectFn } from './create-connect-fn';\n\nexport class FeatureStore<StateType extends object> implements ComponentStoreLike<StateType> {\n private readonly featureId: string;\n private readonly _featureKey: string;\n get featureKey(): string {\n return this._featureKey;\n }\n\n private _state: Signal<StateType> = storeCore.appState.select(\n (state) => state[this.featureKey]\n );\n get state(): StateType {\n return untracked(() => this._state());\n }\n\n private updateState: UpdateStateCallback<StateType> = (\n stateOrCallback: StateOrCallback<StateType>,\n operationType: OperationType,\n name: string | undefined\n ): MiniRxAction<StateType> => {\n return storeCore.dispatch({\n type: createMiniRxActionType(operationType, this.featureKey, name),\n stateOrCallback,\n featureId: this.featureId,\n });\n };\n\n constructor(featureKey: string, initialState: StateType, config: FeatureStoreConfig = {}) {\n this.featureId = generateId();\n this._featureKey = generateFeatureKey(featureKey, config.multi);\n\n storeCore.addFeature<StateType>(\n this._featureKey,\n createFeatureStoreReducer(this.featureId, initialState)\n );\n\n inject(DestroyRef).onDestroy(() => this.destroy());\n }\n\n undo(action: Action): void {\n storeCore.hasUndoExtension\n ? storeCore.dispatch(undo(action))\n : miniRxError('UndoExtension is not initialized.');\n }\n\n setState = createUpdateFn(this.updateState);\n connect = createConnectFn(this.updateState);\n rxEffect = createRxEffectFn();\n select = createSelectableSignal(this._state).select;\n\n private destroy(): void {\n storeCore.removeFeature(this._featureKey);\n }\n}\n\nexport function createFeatureStore<T extends object>(\n featureKey: string,\n initialState: T,\n config: FeatureStoreConfig = {}\n): FeatureStore<T> {\n return new FeatureStore<T>(featureKey, initialState, config);\n}\n","import { DestroyRef, inject, signal, untracked } from '@angular/core';\nimport {\n Action,\n calculateExtensions,\n componentStoreConfig,\n ComponentStoreConfig,\n ComponentStoreExtension,\n componentStoreFeatureKey,\n createActionsOnQueue,\n createComponentStoreReducer,\n createMiniRxActionType,\n createUpdateFn,\n ExtensionId,\n MiniRxAction,\n miniRxError,\n OperationType,\n StateOrCallback,\n undo,\n UpdateStateCallback,\n} from '@mini-rx/common';\nimport { createSelectableWritableSignal } from './create-selectable-signal';\nimport { ComponentStoreLike } from './models';\nimport { createRxEffectFn } from './create-rx-effect-fn';\nimport { createConnectFn } from './create-connect-fn';\nimport { createSignalStoreSubSink } from './signal-store-sub-sink';\n\nexport const globalCsConfig = componentStoreConfig();\n\nexport class ComponentStore<StateType extends object> implements ComponentStoreLike<StateType> {\n private readonly extensions: ComponentStoreExtension[] = calculateExtensions(\n this.config,\n globalCsConfig.get()\n );\n private readonly hasUndoExtension: boolean = this.extensions.some(\n (ext) => ext.id === ExtensionId.UNDO\n );\n\n private actionsOnQueue = createActionsOnQueue();\n\n private _state = createSelectableWritableSignal(signal(this.initialState));\n get state(): StateType {\n return untracked(() => this._state.get());\n }\n\n private updateState: UpdateStateCallback<StateType> = (\n stateOrCallback: StateOrCallback<StateType>,\n operationType: OperationType,\n name: string | undefined\n ): MiniRxAction<StateType> => {\n return this.actionsOnQueue.dispatch({\n type: createMiniRxActionType(operationType, componentStoreFeatureKey, name),\n stateOrCallback,\n });\n };\n\n constructor(private initialState: StateType, private config?: ComponentStoreConfig) {\n inject(DestroyRef).onDestroy(() => this.destroy());\n\n const reducer = createComponentStoreReducer(initialState, this.extensions);\n\n const subSink = createSignalStoreSubSink();\n subSink.sink = this.actionsOnQueue.actions$.subscribe((action) => {\n const newState: StateType = reducer(this.state, action);\n this._state.set(newState);\n });\n\n this.actionsOnQueue.dispatch({\n type: createMiniRxActionType(OperationType.INIT, componentStoreFeatureKey),\n });\n }\n\n undo(action: Action): void {\n this.hasUndoExtension\n ? this.actionsOnQueue.dispatch(undo(action))\n : miniRxError(`${this.constructor.name} has no UndoExtension yet.`);\n }\n\n setState = createUpdateFn(this.updateState);\n connect = createConnectFn(this.updateState);\n rxEffect = createRxEffectFn();\n select = this._state.select;\n\n private destroy(): void {\n // Dispatch an action really just for logging via LoggerExtension\n this.actionsOnQueue.dispatch({\n type: createMiniRxActionType(OperationType.DESTROY, componentStoreFeatureKey),\n });\n }\n}\n\nexport function createComponentStore<T extends object>(\n initialState: T,\n config?: ComponentStoreConfig\n): ComponentStore<T> {\n return new ComponentStore<T>(initialState, config);\n}\n","import { AbstractReduxDevtoolsExtension, Action, AppState } from '@mini-rx/common';\nimport { Observable } from 'rxjs';\nimport { storeCore } from '../store-core';\n\nexport class ReduxDevtoolsExtension extends AbstractReduxDevtoolsExtension {\n get actions$(): Observable<Action> {\n return storeCore.actions$;\n }\n\n readState(): AppState {\n return storeCore.appState.get();\n }\n\n updateState(state: AppState): void {\n storeCore.appState.set(state);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FeatureConfig, miniRxNameSpace, Reducer, StoreConfig } from '@mini-rx/common';\n\n// Injection tokens are part of the bundle, therefore keep the strings as short as possible (they just have to be unique!)\n\nexport const STORE_CONFIG = new InjectionToken<StoreConfig<any>>(`${miniRxNameSpace}/1`);\nexport const FEATURE_NAMES = new InjectionToken<string[]>(`${miniRxNameSpace}/2`);\nexport const FEATURE_REDUCERS = new InjectionToken<Reducer<any>[]>(`${miniRxNameSpace}/3`);\nexport const FEATURE_CONFIGS = new InjectionToken<FeatureConfig<any>[]>(`${miniRxNameSpace}/4`);\n\nexport const OBJECTS_WITH_EFFECTS = new InjectionToken<object[]>(`${miniRxNameSpace}/5`);\n\nexport const STORE_PROVIDER = new InjectionToken<void>(`${miniRxNameSpace}/6`);\nexport const FEATURE_PROVIDER = new InjectionToken<void>(`${miniRxNameSpace}/7`);\nexport const EFFECTS_PROVIDER = new InjectionToken<void>(`${miniRxNameSpace}/8`);\nexport const COMPONENT_STORE_CONFIG_PROVIDER = new InjectionToken<void>(`${miniRxNameSpace}/9`);\n","import { inject, ModuleWithProviders, NgModule } from '@angular/core';\nimport { Actions, AppState, FeatureConfig, Reducer, StoreConfig } from '@mini-rx/common';\nimport { Store } from '../store';\nimport { storeCore } from '../store-core';\nimport {\n FEATURE_CONFIGS,\n FEATURE_NAMES,\n FEATURE_REDUCERS,\n STORE_CONFIG,\n} from '../injection-tokens';\n\nexport function storeFactory(config: StoreConfig<AppState>) {\n return new Store(config);\n}\n\n@NgModule()\nexport class StoreRootModule {\n private store = inject(Store); // Make sure store is initialized also if it is NOT injected in other services/components\n}\n\n@NgModule()\nexport class StoreFeatureModule {\n constructor() {\n const storeRootModule = inject(StoreRootModule); // Prevent feature states to be initialized before root state\n const featureNames: string[] = inject(FEATURE_NAMES);\n const reducers: Reducer<any>[] = inject(FEATURE_REDUCERS);\n const configs: FeatureConfig<any>[] = inject(FEATURE_CONFIGS);\n\n featureNames.forEach((featureName, index) => {\n storeCore.addFeature(featureName, reducers[index], configs[index]);\n });\n }\n}\n\n@NgModule()\nexport class StoreModule {\n static forRoot<T>(config: StoreConfig<T>): ModuleWithProviders<StoreRootModule> {\n return {\n ngModule: StoreRootModule,\n providers: [\n { provide: STORE_CONFIG, useValue: config },\n {\n provide: Store,\n useFactory: storeFactory,\n deps: [STORE_CONFIG],\n },\n {\n provide: Actions,\n useValue: storeCore.actions$,\n },\n ],\n };\n }\n\n static forFeature<T>(\n featureName: string,\n reducer: Reducer<T>,\n config?: Partial<FeatureConfig<T>>\n ): ModuleWithProviders<StoreFeatureModule> {\n return {\n ngModule: StoreFeatureModule,\n providers: [\n { provide: FEATURE_NAMES, multi: true, useValue: featureName },\n { provide: FEATURE_REDUCERS, multi: true, useValue: reducer },\n { provide: FEATURE_CONFIGS, multi: true, useValue: config },\n ],\n };\n }\n}\n","// Credits go to Marko Stanimirović\n// Copied from with small modifications: https://github.com/markostanimirovic/juliette/blob/1.2.0/projects/juliette-ng/src/lib/effects.mapper.ts\n\n// MIT License\n//\n// Copyright (c) 2020 Marko Stanimirović\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { ClassProvider, InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { hasEffectMetaData } from '@mini-rx/common';\n\nexport const fromClassesWithEffectsToClassProviders = (\n injectionToken: InjectionToken<any>,\n classesWithEffects: Type<any>[]\n): ClassProvider[] =>\n classesWithEffects.map((classWithEffects) => ({\n provide: injectionToken,\n useClass: classWithEffects,\n multi: true,\n }));\n\nexport const fromObjectsWithEffectsToEffects = (objectsWithEffects: any[]): Observable<any>[] =>\n objectsWithEffects.reduce((acc, objectWithEffects) => {\n const effectsFromCurrentObject = Object.getOwnPropertyNames(objectWithEffects).reduce<\n Array<Observable<any>>\n >((acc, prop) => {\n const effect = objectWithEffects[prop];\n if (hasEffectMetaData(effect)) {\n acc.push(effect);\n }\n return acc;\n }, []);\n return [...acc, ...effectsFromCurrentObject];\n }, []);\n","// Credits go to Marko Stanimirović\n// Copied from with small modifications: https://github.com/markostanimirovic/juliette/blob/1.2.0/projects/juliette-ng/src/lib/effects.module.ts\n\n// MIT License\n//\n// Copyright (c) 2020 Marko Stanimirović\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { Inject, ModuleWithProviders, NgModule, Optional, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action } from '@mini-rx/common';\nimport {\n fromClassesWithEffectsToClassProviders,\n fromObjectsWithEffectsToEffects,\n} from '../effects-mapper';\nimport { StoreFeatureModule, StoreRootModule } from './store.module';\nimport { rxEffect } from '../store-core';\nimport { OBJECTS_WITH_EFFECTS } from '../injection-tokens';\n\n@NgModule()\nexport class EffectsModule {\n constructor(\n @Inject(OBJECTS_WITH_EFFECTS) objectsWithEffects: any[],\n // Make sure effects can select state from store, also if EffectsModule is registered before Store.forFeature\n @Optional() storeRootModule: StoreRootModule,\n @Optional() storeFeatureModule: StoreFeatureModule\n ) {\n const effects = fromObjectsWithEffectsToEffects(objectsWithEffects);\n effects.forEach((effect: Observable<Action>) => {\n rxEffect(effect);\n });\n }\n\n static register(classesWithEffects: Type<any>[]): ModuleWithProviders<EffectsModule> {\n return {\n ngModule: EffectsModule,\n providers: [\n ...fromClassesWithEffectsToClassProviders(OBJECTS_WITH_EFFECTS, classesWithEffects),\n ],\n };\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ComponentStoreConfig } from '@mini-rx/common';\nimport { globalCsConfig } from '../component-store';\n\n@NgModule()\nexport class ComponentStoreModule {\n static forRoot(config: ComponentStoreConfig): ModuleWithProviders<ComponentStoreModule> {\n globalCsConfig.set(config);\n\n return {\n ngModule: ComponentStoreModule,\n };\n }\n}\n","import {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n Type,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n Action,\n Actions,\n AppState,\n ComponentStoreConfig,\n FeatureConfig,\n Reducer,\n StoreConfig,\n} from '@mini-rx/common';\nimport { rxEffect, storeCore } from './store-core';\nimport { Store } from './store';\nimport { globalCsConfig } from './component-store';\nimport {\n fromClassesWithEffectsToClassProviders,\n fromObjectsWithEffectsToEffects,\n} from './effects-mapper';\nimport {\n COMPONENT_STORE_CONFIG_PROVIDER,\n EFFECTS_PROVIDER,\n FEATURE_CONFIGS,\n FEATURE_NAMES,\n FEATURE_PROVIDER,\n FEATURE_REDUCERS,\n OBJECTS_WITH_EFFECTS,\n STORE_CONFIG,\n STORE_PROVIDER,\n} from './injection-tokens';\n\n// Store\nfunction storeFactory(config: StoreConfig<AppState>) {\n return new Store(config);\n}\n\nfunction rootStoreProviderFactory(): void {\n inject(Store);\n inject(Actions);\n}\n\nexport function provideStore<T>(config: StoreConfig<T>): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: STORE_CONFIG, useValue: config },\n {\n provide: Store,\n useFactory: storeFactory,\n deps: [STORE_CONFIG],\n },\n {\n provide: Actions,\n useValue: storeCore.actions$,\n },\n { provide: STORE_PROVIDER, useFactory: rootStoreProviderFactory },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => inject(STORE_PROVIDER);\n },\n },\n ]);\n}\n\n// Feature\nfunction featureProviderFactory(): void {\n const featureNames = inject(FEATURE_NAMES);\n const reducers = inject(FEATURE_REDUCERS);\n const configs = inject(FEATURE_CONFIGS);\n\n featureNames.forEach((featureName, index) => {\n storeCore.addFeature(featureName, reducers[index], configs[index]);\n });\n}\n\nexport function provideFeature<T>(\n featureName: string,\n reducer: Reducer<T>,\n config?: Partial<FeatureConfig<T>>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: FEATURE_NAMES, multi: true, useValue: featureName },\n { provide: FEATURE_REDUCERS, multi: true, useValue: reducer },\n { provide: FEATURE_CONFIGS, multi: true, useValue: config },\n { provide: FEATURE_PROVIDER, useFactory: featureProviderFactory },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => inject(FEATURE_PROVIDER);\n },\n },\n ]);\n}\n\n// Effects\nfunction effectsProviderFactory(): void {\n const objectsWithEffects = inject(OBJECTS_WITH_EFFECTS);\n\n const effects = fromObjectsWithEffectsToEffects(objectsWithEffects);\n effects.forEach((effect: Observable<Action>) => {\n rxEffect(effect);\n });\n}\n\nexport function provideEffects(classesWithEffects: Type<any>[]): EnvironmentProviders;\nexport function provideEffects(...classesWithEffects: Type<any>[]): EnvironmentProviders;\nexport function provideEffects(...classesWithEffects: any[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...fromClassesWithEffectsToClassProviders(OBJECTS_WITH_EFFECTS, classesWithEffects),\n { provide: EFFECTS_PROVIDER, useFactory: effectsProviderFactory },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => inject(EFFECTS_PROVIDER);\n },\n },\n ]);\n}\n\n// Component Store config\nexport function provideComponentStoreConfig(config: ComponentStoreConfig) {\n return makeEnvironmentProviders([\n {\n provide: COMPONENT_STORE_CONFIG_PROVIDER,\n useFactory: () => globalCsConfig.set(config),\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => inject(COMPONENT_STORE_CONFIG_PROVIDER);\n },\n },\n ]);\n}\n","/*\n * Public API Surface of Signal Store\n */\n\nexport { Store } from './lib/store';\nexport { FeatureStore, createFeatureStore } from './lib/feature-store';\nexport { ComponentStore, createComponentStore } from './lib/component-store';\nexport {\n createSelector,\n createFeatureStateSelector,\n createComponentStateSelector,\n} from './lib/signal-selector';\nexport { ReduxDevtoolsExtension } from './lib/extensions/redux-devtools.extension';\nexport { StoreRootModule, StoreModule, StoreFeatureModule } from './lib/modules/store.module';\nexport { EffectsModule } from './lib/modules/effects.module';\nexport { ComponentStoreModule } from './lib/modules/component-store.module';\nexport {\n provideStore,\n provideFeature,\n provideEffects,\n provideComponentStoreConfig,\n} from './lib/providers';\n\n// Re-export from @mini-rx/common\nexport {\n Action,\n Reducer,\n Actions,\n StoreConfig,\n FeatureConfig,\n FeatureStoreConfig,\n ComponentStoreConfig,\n StoreExtension,\n undo,\n tapResponse,\n createRxEffect,\n LoggerExtension,\n ImmutableStateExtension,\n UndoExtension,\n mapResponse,\n ReduxDevtoolsOptions,\n} from '@mini-rx/common';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["storeFactory","i1.StoreRootModule","i1.StoreFeatureModule"],"mappings":"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