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