{"version":3,"file":"ngxtension-merge-from.mjs","sources":["../../../../libs/ngxtension/merge-from/src/lib/merge-from.ts","../../../../libs/ngxtension/merge-from/src/ngxtension-merge-from.ts"],"sourcesContent":["import { Injector, isSignal, untracked, type Signal } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport {\n\tdistinctUntilChanged,\n\tfrom,\n\tidentity,\n\tisObservable,\n\tmerge,\n\tstartWith,\n\ttype ObservableInput,\n\ttype OperatorFunction,\n} from 'rxjs';\n\nexport type ObservableSignalInput<T> = ObservableInput<T> | Signal<T>;\n\n/**\n * So that we can have `fn([Observable<A>, Signal<B>]): Observable<[A, B]>`\n */\ntype ObservableSignalInputTuple<T> = {\n\t[K in keyof T]: ObservableSignalInput<T[K]>;\n};\n\nexport type MergeFromOptions<T> = {\n\treadonly injector?: Injector;\n\treadonly initialValue?: T | null;\n};\n\nexport function mergeFrom<\n\tInputs extends readonly unknown[],\n\tOutput = Inputs[number],\n>(\n\tinputs: readonly [...ObservableSignalInputTuple<Inputs>],\n\toperator?: OperatorFunction<Inputs[number], Output>,\n\toptions?: MergeFromOptions<Output>,\n): Signal<Output>;\nexport function mergeFrom<\n\tInputs extends readonly unknown[],\n\tOutput = Inputs[number],\n>(\n\tinputs: readonly [...ObservableSignalInputTuple<Inputs>],\n\toptions?: MergeFromOptions<Output>,\n): Signal<Output>;\n\nexport function mergeFrom<\n\tInputs extends readonly unknown[],\n\tOutput = Inputs[number],\n>(...args: unknown[]) {\n\tconst [sources, operator = identity, options = {}] = parseArgs<\n\t\tInputs,\n\t\tOutput\n\t>(args);\n\tconst normalizedSources = sources.map((source) => {\n\t\tif (isSignal(source)) {\n\t\t\treturn toObservable(source, { injector: options.injector }).pipe(\n\t\t\t\tstartWith(untracked(source)),\n\t\t\t);\n\t\t}\n\n\t\tif (!isObservable(source)) {\n\t\t\tsource = from(source);\n\t\t}\n\n\t\treturn source.pipe(distinctUntilChanged());\n\t});\n\n\tconst merged = merge(...normalizedSources).pipe(\n\t\toperator as OperatorFunction<Inputs[number], Output>,\n\t);\n\n\treturn assertInjector(mergeFrom, options.injector, () => {\n\t\tif (options.initialValue !== undefined) {\n\t\t\treturn toSignal(merged, { initialValue: options.initialValue as Output });\n\t\t}\n\t\treturn toSignal(merged, { requireSync: true });\n\t});\n}\n\nfunction parseArgs<Inputs extends readonly unknown[], Output = Inputs[number]>(\n\targs: unknown[],\n) {\n\tif (args.length === 0) {\n\t\tthrow new Error(\n\t\t\t`[ngxtension] mergeFrom: Expected at least one argument, got none.`,\n\t\t);\n\t}\n\n\tif (args.length === 1) {\n\t\treturn [\n\t\t\targs[0] as readonly [...ObservableSignalInputTuple<Inputs>],\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t] as const;\n\t}\n\n\tif (args.length === 2) {\n\t\tconst isOperator = typeof args[1] === 'function';\n\t\tif (isOperator) {\n\t\t\treturn [\n\t\t\t\targs[0] as readonly [...ObservableSignalInputTuple<Inputs>],\n\t\t\t\targs[1] as OperatorFunction<Inputs[number], Output>,\n\t\t\t\tundefined,\n\t\t\t] as const;\n\t\t}\n\n\t\treturn [\n\t\t\targs[0] as readonly [...ObservableSignalInputTuple<Inputs>],\n\t\t\tundefined,\n\t\t\targs[1] as MergeFromOptions<Output>,\n\t\t] as const;\n\t}\n\n\treturn args as unknown as [\n\t\treadonly [...ObservableSignalInputTuple<Inputs>],\n\t\tOperatorFunction<Inputs[number], Output>,\n\t\tMergeFromOptions<Output>,\n\t];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AA4CgB,SAAA,SAAS,CAGvB,GAAG,IAAe,EAAA;AACnB,IAAA,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,SAAS,CAG5D,IAAI,CAAC,CAAC;IACR,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAChD,QAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAC/D,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAC5B,CAAC;SACF;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SACtB;AAED,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC5C,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAC9C,QAAoD,CACpD,CAAC;IAEF,OAAO,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAK;AACvD,QAAA,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,YAAsB,EAAE,CAAC,CAAC;SAC1E;QACD,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,KAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CACjB,IAAe,EAAA;AAEf,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CACd,CAAA,iEAAA,CAAmE,CACnE,CAAC;KACF;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO;YACN,IAAI,CAAC,CAAC,CAAqD;YAC3D,SAAS;YACT,SAAS;SACA,CAAC;KACX;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;QACjD,IAAI,UAAU,EAAE;YACf,OAAO;gBACN,IAAI,CAAC,CAAC,CAAqD;gBAC3D,IAAI,CAAC,CAAC,CAA6C;gBACnD,SAAS;aACA,CAAC;SACX;QAED,OAAO;YACN,IAAI,CAAC,CAAC,CAAqD;YAC3D,SAAS;YACT,IAAI,CAAC,CAAC,CAA6B;SAC1B,CAAC;KACX;AAED,IAAA,OAAO,IAIN,CAAC;AACH;;ACrHA;;AAEG;;;;"}