{"version":3,"file":"ngxtension-signal-slice.mjs","sources":["../../../../libs/ngxtension/signal-slice/src/signal-slice.ts","../../../../libs/ngxtension/signal-slice/src/ngxtension-signal-slice.ts"],"sourcesContent":["import {\n\tDestroyRef,\n\tInjector,\n\tcomputed,\n\teffect,\n\tinject,\n\tsignal,\n\ttype EffectRef,\n\ttype Signal,\n\ttype WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { connect, type PartialOrValue } from 'ngxtension/connect';\nimport { createNotifier } from 'ngxtension/create-notifier';\nimport { Subject, isObservable, share, take, type Observable } from 'rxjs';\n\ntype ActionSourceFn<TSignalValue, TPayload> = (\n\tstate: Signal<TSignalValue>,\n\tvalue: TPayload,\n) => Observable<PartialOrValue<TSignalValue>>;\n\ntype NoOptionalProperties<T> = {\n\t[P in keyof T]-?: T[P];\n};\n\ntype NamedActionSources<TSignalValue> = {\n\t[actionName: string]: Subject<any> | ActionSourceFn<TSignalValue, any>;\n};\n\ntype NamedSelectors = {\n\t[selectorName: string]: () => any;\n};\n\ntype Selectors<TSignalValue> = {\n\t[K in keyof TSignalValue]: Signal<TSignalValue[K]>;\n};\n\ntype ExtraSelectors<TSelectors extends NamedSelectors> = {\n\t[K in keyof TSelectors]: Signal<ReturnType<TSelectors[K]>>;\n};\n\ntype NamedEffects = {\n\t[selectorName: string]: () => void | (() => void);\n};\n\ntype Effects<TEffects extends NamedEffects> = {\n\t[K in keyof TEffects]: EffectRef;\n};\n\ntype Action<TSignalValue, TValue> = TValue extends [void]\n\t? () => Promise<TSignalValue>\n\t: [unknown] extends TValue\n\t\t? () => Promise<TSignalValue>\n\t\t: (\n\t\t\t\tvalue: TValue extends [infer TInferred]\n\t\t\t\t\t? TInferred | Observable<TInferred>\n\t\t\t\t\t: TValue | Observable<TValue>,\n\t\t\t) => Promise<TSignalValue>;\n\ntype ActionMethod<\n\tTSignalValue,\n\tTActionSource extends NamedActionSources<TSignalValue>[string],\n> = TActionSource extends (\n\tstate: Signal<TSignalValue>,\n\tvalue: Observable<infer TObservableValue>,\n) => any\n\t? Action<TSignalValue, [TObservableValue]>\n\t: TActionSource extends Subject<infer TSubjectValue>\n\t\t? Action<TSignalValue, [TSubjectValue]>\n\t\t: never;\n\ntype ActionMethods<\n\tTSignalValue,\n\tTActionSources extends NamedActionSources<TSignalValue>,\n> = {\n\t[K in keyof TActionSources]: ActionMethod<TSignalValue, TActionSources[K]>;\n};\n\ntype ActionStreams<\n\tTSignalValue,\n\tTActionSources extends NamedActionSources<TSignalValue>,\n> = {\n\t[K in keyof TActionSources &\n\t\tstring as `${K}$`]: TActionSources[K] extends ActionSourceFn<\n\t\tTSignalValue,\n\t\tunknown\n\t>\n\t\t? Observable<void>\n\t\t: TActionSources[K] extends ActionSourceFn<TSignalValue, infer TValue>\n\t\t\t? TValue extends Observable<any>\n\t\t\t\t? TValue\n\t\t\t\t: Observable<TValue>\n\t\t\t: never;\n};\n\ntype InitialStateStreams<TSignalValue> = {\n\t[K in keyof TSignalValue & string as `${K}$`]: Observable<TSignalValue[K]>;\n};\n\ntype ActionUpdates<\n\tTSignalValue,\n\tTActionSources extends NamedActionSources<TSignalValue>,\n> = {\n\t[K in keyof TActionSources & string as `${K}Updated`]: Signal<number>;\n};\n\nexport type Source<TSignalValue> = Observable<PartialOrValue<TSignalValue>>;\ntype SourceConfig<TSignalValue> = Array<\n\t| Source<TSignalValue>\n\t| ((\n\t\t\tstate: Signal<TSignalValue> & InitialStateStreams<TSignalValue>,\n\t  ) => Source<TSignalValue>)\n>;\n\nexport type SignalSlice<\n\tTSignalValue extends NoOptionalProperties<TSignalValue>,\n\tTActionSources extends NamedActionSources<TSignalValue>,\n\tTSelectors extends NamedSelectors,\n\tTEffects extends NamedEffects,\n> = Signal<TSignalValue> &\n\tSelectors<TSignalValue> &\n\tExtraSelectors<TSelectors> &\n\tEffects<TEffects> &\n\tInitialStateStreams<TSignalValue> &\n\tActionMethods<TSignalValue, TActionSources> &\n\tActionStreams<TSignalValue, TActionSources> &\n\tActionUpdates<TSignalValue, TActionSources>;\n\ntype SelectorsState<TSignalValue extends NoOptionalProperties<TSignalValue>> =\n\tSignal<TSignalValue> & Selectors<TSignalValue>;\n\ntype EffectsState<\n\tTSignalValue extends NoOptionalProperties<TSignalValue>,\n\tTActionSources extends NamedActionSources<TSignalValue>,\n\tTSelectors extends NamedSelectors,\n> = SelectorsState<TSignalValue> &\n\tExtraSelectors<TSelectors> &\n\tActionMethods<TSignalValue, TActionSources>;\n\nexport function signalSlice<\n\tTSignalValue extends NoOptionalProperties<TSignalValue>,\n\tTActionSources extends NamedActionSources<TSignalValue>,\n\tTSelectors extends NamedSelectors,\n\tTEffects extends NamedEffects,\n>(config: {\n\tinitialState: TSignalValue;\n\tsources?: SourceConfig<TSignalValue>;\n\tlazySources?: SourceConfig<TSignalValue>;\n\tactionSources?: TActionSources;\n\tselectors?: (state: SelectorsState<TSignalValue>) => TSelectors;\n\t/** @deprecated */\n\teffects?: (\n\t\tstate: EffectsState<TSignalValue, TActionSources, TSelectors>,\n\t) => TEffects;\n}): SignalSlice<TSignalValue, TActionSources, TSelectors, TEffects> {\n\tconst destroyRef = inject(DestroyRef);\n\tconst injector = inject(Injector);\n\n\tconst {\n\t\tinitialState,\n\t\tsources = [],\n\t\tlazySources = [],\n\t\tactionSources = {},\n\t\tselectors = (() => ({})) as unknown as Exclude<\n\t\t\t(typeof config)['selectors'],\n\t\t\tundefined\n\t\t>,\n\t\teffects = (() => ({})) as unknown as Exclude<\n\t\t\t(typeof config)['effects'],\n\t\t\tundefined\n\t\t>,\n\t} = config;\n\n\tconst state = signal(initialState);\n\tconst readonlyState = state.asReadonly();\n\tconst state$ = toObservable(state);\n\tlet lazySourcesLoaded = false;\n\n\tconst subs: Subject<any>[] = [];\n\n\tconst slice = readonlyState as SignalSlice<\n\t\tTSignalValue,\n\t\tTActionSources,\n\t\tTSelectors,\n\t\tTEffects\n\t>;\n\n\tfor (const [key, actionSource] of Object.entries(\n\t\tactionSources as TActionSources,\n\t)) {\n\t\tif (isObservable(actionSource)) {\n\t\t\taddReducerProperties(\n\t\t\t\treadonlyState,\n\t\t\t\tstate$,\n\t\t\t\tkey,\n\t\t\t\tdestroyRef,\n\t\t\t\tactionSource,\n\t\t\t\tsubs,\n\t\t\t);\n\t\t} else {\n\t\t\tconst subject = new Subject();\n\t\t\tconst observable = actionSource(readonlyState, subject);\n\t\t\tconst sharedObservable = observable.pipe(share());\n\t\t\tconnect(state, sharedObservable);\n\t\t\taddReducerProperties(\n\t\t\t\treadonlyState,\n\t\t\t\tstate$,\n\t\t\t\tkey,\n\t\t\t\tdestroyRef,\n\t\t\t\tsubject,\n\t\t\t\tsubs,\n\t\t\t\tsharedObservable,\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const key in initialState) {\n\t\tconst value = computed(() => readonlyState()[key]);\n\t\tObject.defineProperty(readonlyState, key, {\n\t\t\tvalue,\n\t\t});\n\t\t(readonlyState as any)[`${key}$`] = toObservable(value);\n\t}\n\n\tfor (const [key, selector] of Object.entries(selectors(slice))) {\n\t\tconst value = computed(selector);\n\n\t\tObject.defineProperty(readonlyState, key, {\n\t\t\tvalue,\n\t\t});\n\t\t(readonlyState as any)[`${key}$`] = toObservable(value);\n\t}\n\n\tfor (const [key, namedEffect] of Object.entries(effects(slice))) {\n\t\tconsole.warn(\n\t\t\t\"The 'effects' configuration in signalSlice is deprecated. Please use standard signal effects outside of signalSlice instead.\",\n\t\t);\n\t\tObject.defineProperty(slice, key, {\n\t\t\tvalue: effect((onCleanup) => {\n\t\t\t\tconst maybeCleanup = namedEffect();\n\t\t\t\tif (maybeCleanup) {\n\t\t\t\t\tonCleanup(() => maybeCleanup());\n\t\t\t\t}\n\t\t\t}),\n\t\t});\n\t}\n\n\tconnectSources(state, sources, readonlyState);\n\n\tdestroyRef.onDestroy(() => {\n\t\tsubs.forEach((sub) => sub.complete());\n\t});\n\n\tconst connectLazySources = () => {\n\t\tif (!lazySourcesLoaded) {\n\t\t\tlazySourcesLoaded = true;\n\t\t\tconnectSources(state, lazySources, readonlyState, injector, true);\n\t\t}\n\t};\n\n\treturn new Proxy(slice, {\n\t\tget(target, property, receiver) {\n\t\t\tconnectLazySources();\n\t\t\treturn Reflect.get(target, property, receiver);\n\t\t},\n\t\tapply(target, thisArg, argumentsList) {\n\t\t\tconnectLazySources();\n\t\t\treturn Reflect.apply(target, thisArg, argumentsList);\n\t\t},\n\t});\n}\n\nfunction connectSources<TSignalValue>(\n\tstate: WritableSignal<TSignalValue>,\n\tsources: SourceConfig<TSignalValue>,\n\treadonlyState: Signal<TSignalValue>,\n\tinjector?: Injector,\n\tuseUntracked = false,\n) {\n\tfor (const source of sources) {\n\t\tif (isObservable(source)) {\n\t\t\tconnect(state, source, injector, useUntracked);\n\t\t} else {\n\t\t\tconnect(state, source(readonlyState as any), injector, useUntracked);\n\t\t}\n\t}\n}\n\nfunction addReducerProperties(\n\treadonlyState: Signal<unknown>,\n\tstate$: Observable<unknown>,\n\tkey: string,\n\tdestroyRef: DestroyRef,\n\tsubject: Subject<unknown>,\n\tsubs: Subject<unknown>[],\n\tobservableFromActionSource?: Observable<any>,\n) {\n\tconst version = createNotifier();\n\tObject.defineProperties(readonlyState, {\n\t\t[key]: {\n\t\t\tvalue: (nextValue: unknown) => {\n\t\t\t\tif (isObservable(nextValue)) {\n\t\t\t\t\treturn new Promise((res, rej) => {\n\t\t\t\t\t\tnextValue.pipe(takeUntilDestroyed(destroyRef)).subscribe({\n\t\t\t\t\t\t\tnext: (value) => {\n\t\t\t\t\t\t\t\tversion.notify();\n\t\t\t\t\t\t\t\tsubject.next(value);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terror: (err) => {\n\t\t\t\t\t\t\t\tsubject.error(err);\n\t\t\t\t\t\t\t\trej(err);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t\t\tversion.notify();\n\t\t\t\t\t\t\t\tsubject.complete();\n\t\t\t\t\t\t\t\tres(readonlyState());\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (observableFromActionSource) {\n\t\t\t\t\tobservableFromActionSource\n\t\t\t\t\t\t.pipe(takeUntilDestroyed(destroyRef))\n\t\t\t\t\t\t.subscribe();\n\t\t\t\t}\n\n\t\t\t\treturn new Promise((res) => {\n\t\t\t\t\tstate$.pipe(take(1)).subscribe((val) => {\n\t\t\t\t\t\tres(val);\n\t\t\t\t\t});\n\t\t\t\t\tversion.notify();\n\t\t\t\t\tsubject.next(nextValue);\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\t[`${key}$`]: {\n\t\t\tvalue: subject.asObservable(),\n\t\t},\n\t\t[`${key}Updated`]: {\n\t\t\tvalue: version.listen,\n\t\t},\n\t});\n\tsubs.push(subject);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}