@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
JavaScript
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
;