Skip to content

Commit 178850f

Browse files
committed
add queue.all (#2)
1 parent 2ff1752 commit 178850f

13 files changed

Lines changed: 248 additions & 26 deletions

bun.lock

Lines changed: 98 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.async-storage.cjs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ let newQueue = (concurrency) => {
3535
let tail;
3636
let resolveDonePromise;
3737
let donePromise;
38+
let queue;
3839
let afterRun = () => {
3940
active--;
4041
if (--size) {
@@ -54,7 +55,7 @@ let newQueue = (concurrency) => {
5455
);
5556
}
5657
};
57-
return {
58+
return queue = {
5859
add(p) {
5960
let node = { p: import_async_hooks.AsyncResource.bind(p) };
6061
let promise = new Promize((res, rej) => {
@@ -84,6 +85,7 @@ let newQueue = (concurrency) => {
8485
size = active;
8586
},
8687
active: () => active,
87-
size: () => size
88+
size: () => size,
89+
all: (fns) => Promize.all(fns.map((fn) => queue.add(typeof fn === "function" ? fn : () => fn)))
8890
};
8991
};

dist/index.async-storage.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ let newQueue = (concurrency) => {
1313
let tail;
1414
let resolveDonePromise;
1515
let donePromise;
16+
let queue;
1617
let afterRun = () => {
1718
active--;
1819
if (--size) {
@@ -32,7 +33,7 @@ let newQueue = (concurrency) => {
3233
);
3334
}
3435
};
35-
return {
36+
return queue = {
3637
add(p) {
3738
let node = { p: AsyncResource.bind(p) };
3839
let promise = new Promize((res, rej) => {
@@ -62,7 +63,8 @@ let newQueue = (concurrency) => {
6263
size = active;
6364
},
6465
active: () => active,
65-
size: () => size
66+
size: () => size,
67+
all: (fns) => Promize.all(fns.map((fn) => queue.add(typeof fn === "function" ? fn : () => fn)))
6668
};
6769
};
6870
export {

dist/index.cjs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ var __copyProps = (to, from, except, desc) => {
1515
return to;
1616
};
1717
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18-
var async_queue_exports = {};
19-
__export(async_queue_exports, {
18+
var queue_exports = {};
19+
__export(queue_exports, {
2020
newQueue: () => newQueue
2121
});
22-
module.exports = __toCommonJS(async_queue_exports);
22+
module.exports = __toCommonJS(queue_exports);
2323
let Promize = Promise;
2424
let newQueue = (concurrency) => {
2525
let active = 0;
@@ -28,6 +28,7 @@ let newQueue = (concurrency) => {
2828
let tail;
2929
let resolveDonePromise;
3030
let donePromise;
31+
let queue;
3132
let afterRun = () => {
3233
active--;
3334
if (--size) {
@@ -47,7 +48,7 @@ let newQueue = (concurrency) => {
4748
);
4849
}
4950
};
50-
return {
51+
return queue = {
5152
add(p) {
5253
let node = { p };
5354
let promise = new Promize((res, rej) => {
@@ -77,6 +78,7 @@ let newQueue = (concurrency) => {
7778
size = active;
7879
},
7980
active: () => active,
80-
size: () => size
81+
size: () => size,
82+
all: (fns) => Promize.all(fns.map((fn) => queue.add(typeof fn === "function" ? fn : () => fn)))
8183
};
8284
};

dist/index.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export interface Queue {
1010
active(): number;
1111
/** Returns the total number of promises in the queue */
1212
size(): number;
13+
/** Adds promises (or wrappers) to the queue and resolves like Promise.all */
14+
all<T>(promiseFunctions: Array<PromiseLike<T> | (() => PromiseLike<T>)>): Promise<T[]>;
1315
}
1416
/**
1517
* Creates a new queue with the specified concurrency level.

dist/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ let newQueue = (concurrency) => {
66
let tail;
77
let resolveDonePromise;
88
let donePromise;
9+
let queue;
910
let afterRun = () => {
1011
active--;
1112
if (--size) {
@@ -25,7 +26,7 @@ let newQueue = (concurrency) => {
2526
);
2627
}
2728
};
28-
return {
29+
return queue = {
2930
add(p) {
3031
let node = { p };
3132
let promise = new Promize((res, rej) => {
@@ -55,7 +56,8 @@ let newQueue = (concurrency) => {
5556
size = active;
5657
},
5758
active: () => active,
58-
size: () => size
59+
size: () => size,
60+
all: (fns) => Promize.all(fns.map((fn) => queue.add(typeof fn === "function" ? fn : () => fn)))
5961
};
6062
};
6163
export {

dist/index.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.async-storage.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ interface Queue {
3131
active(): number
3232
/** Returns the total number of promises in the queue */
3333
size(): number
34+
/** Adds promises (or wrappers) to the queue and resolves like Promise.all */
35+
all<T>(promiseFunctions: Array<PromiseLike<T> | (() => PromiseLike<T>)>): Promise<T[]>
3436
}
3537

3638
// this just saves a few bytes
@@ -49,6 +51,7 @@ export let newQueue = (concurrency: number): Queue => {
4951
let tail: Node<PromiseLike<any>> | undefined | null
5052
let resolveDonePromise: (value: void | PromiseLike<void>) => void
5153
let donePromise: Promise<void> | void
54+
let queue: Queue
5255

5356
let afterRun = () => {
5457
active--
@@ -66,12 +69,12 @@ export let newQueue = (concurrency: number): Queue => {
6669
head = head.next
6770
curHead.p().then(
6871
(v) => (curHead.res(v), afterRun()),
69-
(e) => (curHead.rej(e), afterRun())
72+
(e) => (curHead.rej(e), afterRun()),
7073
)
7174
}
7275
}
7376

74-
return {
77+
return (queue = {
7578
add<T>(p: () => PromiseLike<T>) {
7679
let node = { p: AsyncResource.bind(p) } as unknown as Node<PromiseLike<T>>
7780
let promise = new Promize((res, rej) => {
@@ -102,5 +105,7 @@ export let newQueue = (concurrency: number): Queue => {
102105
},
103106
active: () => active,
104107
size: () => size,
105-
}
108+
all: <T>(fns: Array<PromiseLike<T> | (() => PromiseLike<T>)>): Promise<T[]> =>
109+
Promize.all(fns.map((fn) => queue.add(typeof fn === 'function' ? fn : () => fn))),
110+
})
106111
}

index.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export interface Queue {
2222
active(): number
2323
/** Returns the total number of promises in the queue */
2424
size(): number
25+
/** Adds promises (or wrappers) to the queue and resolves like Promise.all */
26+
all<T>(promiseFunctions: Array<PromiseLike<T> | (() => PromiseLike<T>)>): Promise<T[]>
2527
}
2628

2729
// this just saves a few bytes
@@ -40,6 +42,7 @@ export let newQueue = (concurrency: number): Queue => {
4042
let tail: Node<PromiseLike<any>> | undefined | null
4143
let resolveDonePromise: (value: void | PromiseLike<void>) => void
4244
let donePromise: Promise<void> | void
45+
let queue: Queue
4346

4447
let afterRun = () => {
4548
active--
@@ -62,7 +65,7 @@ export let newQueue = (concurrency: number): Queue => {
6265
}
6366
}
6467

65-
return {
68+
return (queue = {
6669
add<T>(p: () => PromiseLike<T>) {
6770
let node = { p } as Node<PromiseLike<T>>
6871
let promise = new Promize((res, rej) => {
@@ -93,5 +96,7 @@ export let newQueue = (concurrency: number): Queue => {
9396
},
9497
active: () => active,
9598
size: () => size,
96-
}
99+
all: <T>(fns: Array<PromiseLike<T> | (() => PromiseLike<T>)>): Promise<T[]> =>
100+
Promize.all(fns.map(fn => queue.add(typeof fn === 'function' ? fn : () => fn))),
101+
})
97102
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@henrygd/queue",
3-
"version": "1.0.7",
3+
"version": "1.1.0",
44
"license": "MIT",
55
"type": "module",
66
"description": "Tiny async queue with concurrency control. Like p-limit or fastq, but smaller and faster.",
@@ -61,7 +61,7 @@
6161
"worker"
6262
],
6363
"devDependencies": {
64-
"@types/bun": "^1.1.3",
64+
"@types/bun": "latest",
6565
"async": "^3.2.5",
6666
"esbuild": "^0.21.4",
6767
"fastq": "^1.17.1",

0 commit comments

Comments
 (0)