UNPKG

584 BJavaScriptView Raw
1const { Sema } = require('async-sema');
2const EventedQueue = require('./evented-queue');
3
4module.exports = (tasks = [], concurrency = 1, preserveOrder = false) => {
5 const semaphore = new Sema(concurrency);
6 const queue = new EventedQueue();
7
8 return Promise.all(
9 tasks.map(async ({ pkg, apply }) => {
10 queue.add(pkg.name);
11
12 await semaphore.acquire();
13
14 // wait for any dependencies still in the queue to finish
15 if (preserveOrder) {
16 await queue.waitBehind(pkg.allDependencies);
17 }
18
19 await apply();
20
21 queue.delete(pkg.name);
22
23 semaphore.release();
24 }),
25 );
26};