@angular-devkit/build-angular
Version:
Angular Webpack Build Facade
61 lines (60 loc) • 2.06 kB
JavaScript
;
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BundleActionExecutor = void 0;
const piscina_1 = __importDefault(require("piscina"));
const environment_options_1 = require("./environment-options");
const workerFile = require.resolve('./process-bundle');
class BundleActionExecutor {
workerOptions;
workerPool;
constructor(workerOptions) {
this.workerOptions = workerOptions;
}
ensureWorkerPool() {
if (this.workerPool) {
return this.workerPool;
}
this.workerPool = new piscina_1.default({
filename: workerFile,
name: 'inlineLocales',
workerData: this.workerOptions,
maxThreads: environment_options_1.maxWorkers,
recordTiming: false,
});
return this.workerPool;
}
async inline(action) {
return this.ensureWorkerPool().run(action, { name: 'inlineLocales' });
}
inlineAll(actions) {
return BundleActionExecutor.executeAll(actions, (action) => this.inline(action));
}
static async *executeAll(actions, executor) {
const executions = new Map();
for (const action of actions) {
const execution = executor(action);
executions.set(execution, execution.then((result) => [execution, result]));
}
while (executions.size > 0) {
const [execution, result] = await Promise.race(executions.values());
executions.delete(execution);
yield result;
}
}
stop() {
if (this.workerPool) {
void this.workerPool.destroy();
}
}
}
exports.BundleActionExecutor = BundleActionExecutor;