UNPKG

@ng-doc/builder

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

38 lines 1.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeFactory = mergeFactory; const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const types_1 = require("../types"); const builder_state_1 = require("./builder-state"); const handle_cache_strategy_1 = require("./handle-cache-strategy"); let builderId = 0; /** * * @param tag * @param sources * @param project * @param cacheStrategy * @param mapper */ function mergeFactory(tag, sources, project, cacheStrategy, mapper) { const id = builderId++; const buffer = new Array(sources.length); return (0, rxjs_1.merge)(...sources.map((source, i) => (0, rxjs_1.from)(source).pipe((0, operators_1.map)((value) => [i, value])))).pipe((0, rxjs_1.switchMap)(([i, value]) => { buffer[i] = value; const valueMapper = () => { if (!mapper || !(0, types_1.isBuilderDone)(value)) { return value; } return new types_1.BuilderDone(value.tag, mapper(value.result), value.fromCache); }; const mappedValue = valueMapper(); if (buffer.every(types_1.isBuilderDone)) { const results = buffer.map(({ result }) => result); const buildFn = (0, rxjs_1.from)(project(...results)).pipe((0, builder_state_1.builderState)(tag), (0, handle_cache_strategy_1.handleCacheStrategy)(`mergeFactory${id}`, cacheStrategy, buffer.every(({ fromCache }) => fromCache))); return (0, rxjs_1.merge)((0, rxjs_1.of)(mappedValue), buildFn); } return (0, rxjs_1.of)(mappedValue); })); } //# sourceMappingURL=merge-factory.js.map