PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@lerna/run-topologically
Просмотр файла: run-topologically.js
"use strict";
const PQueue = require("p-queue").default;
const { QueryGraph } = require("@lerna/query-graph");
module.exports.runTopologically = runTopologically;
/**
* @typedef {import("@lerna/query-graph").QueryGraphConfig & { concurrency: number }} TopologicalConfig
*/
/**
* Run callback in maximally-saturated topological order.
*
* @template T
* @param {import("@lerna/package").Package[]} packages List of `Package` instances
* @param {(pkg: import("@lerna/package").Package) => Promise<T>} runner Callback to map each `Package` with
* @param {TopologicalConfig} [options]
* @returns {Promise<T[]>} when all executions complete
*/
function runTopologically(packages, runner, { concurrency, graphType, rejectCycles } = {}) {
const queue = new PQueue({ concurrency });
const graph = new QueryGraph(packages, { graphType, rejectCycles });
return new Promise((resolve, reject) => {
const returnValues = [];
const queueNextAvailablePackages = () =>
graph.getAvailablePackages().forEach(({ pkg, name }) => {
graph.markAsTaken(name);
queue
.add(() =>
runner(pkg)
.then((value) => returnValues.push(value))
.then(() => graph.markAsDone(pkg))
.then(() => queueNextAvailablePackages())
)
.catch(reject);
});
queueNextAvailablePackages();
queue.onIdle().then(() => resolve(returnValues));
});
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!