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>

32 lines 1.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBuilder = createBuilder; const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const types_1 = require("../types"); let builderId = 0; const blockedBuilders = new Set(); /** * * @param triggers * @param project * @param main * @param secondary * @param autoStart */ function createBuilder(triggers, project, autoStart = true) { const id = builderId++; const main = triggers.filter(types_1.isMainTrigger).map(({ trigger }) => trigger); const secondary = triggers.filter(types_1.isSecondaryTrigger).map(({ trigger }) => trigger); const mainTrigger = (main ? (0, rxjs_1.merge)(...main) : rxjs_1.EMPTY).pipe((0, operators_1.tap)(() => blockedBuilders.clear())); const secondaryTrigger = (secondary ? (0, rxjs_1.merge)(...secondary) : rxjs_1.EMPTY).pipe((0, operators_1.filter)(() => !blockedBuilders.has(id))); return (0, rxjs_1.merge)(mainTrigger, secondaryTrigger).pipe((0, rxjs_1.subscribeOn)(rxjs_1.asyncScheduler), autoStart ? (0, operators_1.startWith)(void 0) : (0, operators_1.tap)(), (0, operators_1.map)(() => id), (0, operators_1.switchMap)(() => { blockedBuilders.add(id); return project().pipe((0, operators_1.tap)((state) => { if ((0, types_1.isBuilderDone)(state) && state.fromCache) { blockedBuilders.delete(id); } })); })); } //# sourceMappingURL=create-builder.js.map