You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
10 KiB
1 lines
10 KiB
{"version":3,"file":"mergeMapTo.js","sourceRoot":"","sources":["../../src/operators/mergeMapTo.ts"],"names":[],"mappings":";;;;;;AAKA,gCAAgC,oBAAoB,CAAC,CAAA;AAErD,kCAAkC,2BAA2B,CAAC,CAAA;AAM9D,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,oBAAoC,eAA8B,EAC9B,cAAuG,EACvG,UAA6C;IAA7C,0BAA6C,GAA7C,aAAqB,MAAM,CAAC,iBAAiB;IAC/E,EAAE,CAAC,CAAC,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC;QACvC,UAAU,GAAW,cAAc,CAAC;QACpC,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,MAAM,CAAC,UAAC,MAAqB,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,eAAe,EAAO,cAAc,EAAE,UAAU,CAAC,CAAC,EAArF,CAAqF,CAAC;AAC1H,CAAC;AARe,kBAAU,aAQzB,CAAA;AAED,yEAAyE;AACzE,oFAAoF;AACpF;IACE,4BAAoB,GAAuB,EACvB,cAA4F,EAC5F,UAA6C;QAArD,0BAAqD,GAArD,aAA6B,MAAM,CAAC,iBAAiB;QAF7C,QAAG,GAAH,GAAG,CAAoB;QACvB,mBAAc,GAAd,cAAc,CAA8E;QAC5F,eAAU,GAAV,UAAU,CAAmC;IACjE,CAAC;IAED,iCAAI,GAAJ,UAAK,QAAuB,EAAE,MAAW;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9G,CAAC;IACH,yBAAC;AAAD,CAAC,AATD,IASC;AATY,0BAAkB,qBAS9B,CAAA;AAED;;;;GAIG;AACH;IAAmD,wCAAqB;IAMtE,8BAAY,WAA0B,EAClB,GAAuB,EACvB,cAA4F,EAC5F,UAA6C;QAArD,0BAAqD,GAArD,aAA6B,MAAM,CAAC,iBAAiB;QAC/D,kBAAM,WAAW,CAAC,CAAC;QAHD,QAAG,GAAH,GAAG,CAAoB;QACvB,mBAAc,GAAd,cAAc,CAA8E;QAC5F,eAAU,GAAV,UAAU,CAAmC;QARzD,iBAAY,GAAY,KAAK,CAAC;QAC9B,WAAM,GAAQ,EAAE,CAAC;QACjB,WAAM,GAAW,CAAC,CAAC;QACjB,UAAK,GAAW,CAAC,CAAC;IAO5B,CAAC;IAES,oCAAK,GAAf,UAAgB,KAAQ;QACtB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAClC,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAErC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,wCAAS,GAAjB,UAAkB,GAAuB,EACvB,WAA+B,EAC/B,cAA2F,EAC3F,KAAQ,EACR,KAAa;QAC7B,IAAI,CAAC,GAAG,CAAC,qCAAiB,CAAO,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAES,wCAAS,GAAnB;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,yCAAU,GAAV,UAAW,UAAa,EAAE,UAAa,EAC5B,UAAkB,EAAE,UAAkB,EACtC,QAA+B;QACxC,IAAA,SAA4C,EAApC,kCAAc,EAAE,4BAAW,CAAU;QAC7C,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACvE,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,8CAAe,GAAvB,UAAwB,UAAa,EAAE,UAAa,EAC5B,UAAkB,EAAE,UAAkB;QAC5D,IAAA,SAA4C,EAApC,kCAAc,EAAE,4BAAW,CAAU;QAC7C,IAAI,MAAS,CAAC;QACd,IAAI,CAAC;YACH,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1E,CAAE;QAAA,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACb,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,CAAC;QACT,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,0CAAW,GAAX,UAAY,GAAQ;QAClB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,6CAAc,GAAd,UAAe,QAAsB;QACnC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACH,2BAAC;AAAD,CAAC,AAjFD,CAAmD,iCAAe,GAiFjE;AAjFY,4BAAoB,uBAiFhC,CAAA","sourcesContent":["import { Observable, ObservableInput } from '../Observable';\nimport { Operator } from '../Operator';\nimport { PartialObserver } from '../Observer';\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { OperatorFunction } from '../interfaces';\n\n/* tslint:disable:max-line-length */\nexport function mergeMapTo<T, R>(observable: ObservableInput<R>, concurrent?: number): OperatorFunction<T, R>;\nexport function mergeMapTo<T, I, R>(observable: ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction<T, R>;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is merged multiple\n * times in the output Observable.\n *\n * <span class=\"informal\">It's like {@link mergeMap}, but maps each value always\n * to the same inner Observable.</span>\n *\n * <img src=\"./img/mergeMapTo.png\" width=\"100%\">\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then merges those resulting Observables into one\n * single Observable, which is the output Observable.\n *\n * @example <caption>For each click event, start an interval Observable ticking every 1 second</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.mergeMapTo(Rx.Observable.interval(1000));\n * result.subscribe(x => console.log(x));\n *\n * @see {@link concatMapTo}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n * @see {@link switchMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits items from the given\n * `innerObservable` (and optionally transformed through `resultSelector`) every\n * time a value is emitted on the source Observable.\n * @method mergeMapTo\n * @owner Observable\n */\nexport function mergeMapTo<T, I, R>(innerObservable: Observable<I>,\n resultSelector?: ((outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Number.POSITIVE_INFINITY): OperatorFunction<T, R> {\n if (typeof resultSelector === 'number') {\n concurrent = <number>resultSelector;\n resultSelector = null;\n }\n return (source: Observable<T>) => source.lift(new MergeMapToOperator(innerObservable, <any>resultSelector, concurrent));\n}\n\n// TODO: Figure out correct signature here: an Operator<Observable<T>, R>\n// needs to implement call(observer: Subscriber<R>): Subscriber<Observable<T>>\nexport class MergeMapToOperator<T, I, R> implements Operator<Observable<T>, R> {\n constructor(private ish: ObservableInput<I>,\n private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R,\n private concurrent: number = Number.POSITIVE_INFINITY) {\n }\n\n call(observer: Subscriber<R>, source: any): any {\n return source.subscribe(new MergeMapToSubscriber(observer, this.ish, this.resultSelector, this.concurrent));\n }\n}\n\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class MergeMapToSubscriber<T, I, R> extends OuterSubscriber<T, I> {\n private hasCompleted: boolean = false;\n private buffer: T[] = [];\n private active: number = 0;\n protected index: number = 0;\n\n constructor(destination: Subscriber<R>,\n private ish: ObservableInput<I>,\n private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R,\n private concurrent: number = Number.POSITIVE_INFINITY) {\n super(destination);\n }\n\n protected _next(value: T): void {\n if (this.active < this.concurrent) {\n const resultSelector = this.resultSelector;\n const index = this.index++;\n const ish = this.ish;\n const destination = this.destination;\n\n this.active++;\n this._innerSub(ish, destination, resultSelector, value, index);\n } else {\n this.buffer.push(value);\n }\n }\n\n private _innerSub(ish: ObservableInput<I>,\n destination: PartialObserver<I>,\n resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R,\n value: T,\n index: number): void {\n this.add(subscribeToResult<T, I>(this, ish, value, index));\n }\n\n protected _complete(): void {\n this.hasCompleted = true;\n if (this.active === 0 && this.buffer.length === 0) {\n this.destination.complete();\n }\n }\n\n notifyNext(outerValue: T, innerValue: I,\n outerIndex: number, innerIndex: number,\n innerSub: InnerSubscriber<T, I>): void {\n const { resultSelector, destination } = this;\n if (resultSelector) {\n this.trySelectResult(outerValue, innerValue, outerIndex, innerIndex);\n } else {\n destination.next(innerValue);\n }\n }\n\n private trySelectResult(outerValue: T, innerValue: I,\n outerIndex: number, innerIndex: number): void {\n const { resultSelector, destination } = this;\n let result: R;\n try {\n result = resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n } catch (err) {\n destination.error(err);\n return;\n }\n\n destination.next(result);\n }\n\n notifyError(err: any): void {\n this.destination.error(err);\n }\n\n notifyComplete(innerSub: Subscription): void {\n const buffer = this.buffer;\n this.remove(innerSub);\n this.active--;\n if (buffer.length > 0) {\n this._next(buffer.shift());\n } else if (this.active === 0 && this.hasCompleted) {\n this.destination.complete();\n }\n }\n}\n"]} |