+212
-65
lines changedFilter options
+212
-65
lines changed Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
1
+
"use strict";
2
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+
if (k2 === undefined) k2 = k;
4
+
var desc = Object.getOwnPropertyDescriptor(m, k);
5
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+
desc = { enumerable: true, get: function() { return m[k]; } };
7
+
}
8
+
Object.defineProperty(o, k2, desc);
9
+
}) : (function(o, m, k, k2) {
10
+
if (k2 === undefined) k2 = k;
11
+
o[k2] = m[k];
12
+
}));
13
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+
}) : function(o, v) {
16
+
o["default"] = v;
17
+
});
18
+
var __importStar = (this && this.__importStar) || function (mod) {
19
+
if (mod && mod.__esModule) return mod;
20
+
var result = {};
21
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+
__setModuleDefault(result, mod);
23
+
return result;
24
+
};
25
+
Object.defineProperty(exports, "__esModule", { value: true });
26
+
exports.callLimit = void 0;
27
+
const os = __importStar(require("node:os"));
28
+
// availableParallelism available only since node v19, for older versions use
29
+
// cpus() cpus() can return an empty list if /proc is not mounted, use 1 in
30
+
// this case
31
+
/* c8 ignore start */
32
+
const defLimit = 'availableParallelism' in os
33
+
? Math.max(1, os.availableParallelism() - 1)
34
+
: Math.max(1, os.cpus().length - 1);
35
+
const callLimit = (queue, { limit = defLimit, rejectLate } = {}) => new Promise((res, rej) => {
36
+
let active = 0;
37
+
let current = 0;
38
+
const results = [];
39
+
// Whether or not we rejected, distinct from the rejection just in case the rejection itself is falsey
40
+
let rejected = false;
41
+
let rejection;
42
+
const reject = (er) => {
43
+
if (rejected)
44
+
return;
45
+
rejected = true;
46
+
rejection ??= er;
47
+
if (!rejectLate)
48
+
rej(rejection);
49
+
};
50
+
let resolved = false;
51
+
const resolve = () => {
52
+
if (resolved || active > 0)
53
+
return;
54
+
resolved = true;
55
+
res(results);
56
+
};
57
+
const run = () => {
58
+
const c = current++;
59
+
if (c >= queue.length)
60
+
return rejected ? reject() : resolve();
61
+
active++;
62
+
const step = queue[c];
63
+
/* c8 ignore start */
64
+
if (!step)
65
+
throw new Error('walked off queue');
66
+
/* c8 ignore stop */
67
+
results[c] = step()
68
+
.then(result => {
69
+
active--;
70
+
results[c] = result;
71
+
return result;
72
+
}, er => {
73
+
active--;
74
+
reject(er);
75
+
})
76
+
.then(result => {
77
+
if (rejected && active === 0)
78
+
return rej(rejection);
79
+
run();
80
+
return result;
81
+
});
82
+
};
83
+
for (let i = 0; i < limit; i++)
84
+
run();
85
+
});
86
+
exports.callLimit = callLimit;
87
+
//# sourceMappingURL=index.js.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
1
+
{
2
+
"type": "commonjs"
3
+
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
1
+
import * as os from 'node:os';
2
+
// availableParallelism available only since node v19, for older versions use
3
+
// cpus() cpus() can return an empty list if /proc is not mounted, use 1 in
4
+
// this case
5
+
/* c8 ignore start */
6
+
const defLimit = 'availableParallelism' in os
7
+
? Math.max(1, os.availableParallelism() - 1)
8
+
: Math.max(1, os.cpus().length - 1);
9
+
export const callLimit = (queue, { limit = defLimit, rejectLate } = {}) => new Promise((res, rej) => {
10
+
let active = 0;
11
+
let current = 0;
12
+
const results = [];
13
+
// Whether or not we rejected, distinct from the rejection just in case the rejection itself is falsey
14
+
let rejected = false;
15
+
let rejection;
16
+
const reject = (er) => {
17
+
if (rejected)
18
+
return;
19
+
rejected = true;
20
+
rejection ??= er;
21
+
if (!rejectLate)
22
+
rej(rejection);
23
+
};
24
+
let resolved = false;
25
+
const resolve = () => {
26
+
if (resolved || active > 0)
27
+
return;
28
+
resolved = true;
29
+
res(results);
30
+
};
31
+
const run = () => {
32
+
const c = current++;
33
+
if (c >= queue.length)
34
+
return rejected ? reject() : resolve();
35
+
active++;
36
+
const step = queue[c];
37
+
/* c8 ignore start */
38
+
if (!step)
39
+
throw new Error('walked off queue');
40
+
/* c8 ignore stop */
41
+
results[c] = step()
42
+
.then(result => {
43
+
active--;
44
+
results[c] = result;
45
+
return result;
46
+
}, er => {
47
+
active--;
48
+
reject(er);
49
+
})
50
+
.then(result => {
51
+
if (rejected && active === 0)
52
+
return rej(rejection);
53
+
run();
54
+
return result;
55
+
});
56
+
};
57
+
for (let i = 0; i < limit; i++)
58
+
run();
59
+
});
60
+
//# sourceMappingURL=index.js.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
1
+
{
2
+
"type": "module"
3
+
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
1
1
{
2
2
"name": "promise-call-limit",
3
-
"version": "1.0.2",
3
+
"version": "3.0.1",
4
4
"files": [
5
-
"index.js"
5
+
"dist"
6
6
],
7
7
"description": "Call an array of promise-returning functions, restricting concurrency to a specified limit.",
8
8
"repository": {
@@ -12,18 +12,55 @@
12
12
"author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
13
13
"license": "ISC",
14
14
"scripts": {
15
+
"prepare": "tshy",
16
+
"pretest": "npm run prepare",
17
+
"snap": "tap",
15
18
"test": "tap",
16
19
"preversion": "npm test",
17
20
"postversion": "npm publish",
18
21
"prepublishOnly": "git push origin --follow-tags"
19
22
},
20
-
"tap": {
21
-
"check-coverage": true
22
-
},
23
23
"devDependencies": {
24
-
"tap": "^16.0.0"
24
+
"prettier": "^3.2.1",
25
+
"tap": "^18.6.1",
26
+
"tshy": "^1.8.2",
27
+
"format": "prettier --write . --loglevel warn --ignore-path ../../.prettierignore --cache",
28
+
"typedoc": "typedoc"
29
+
},
30
+
"prettier": {
31
+
"semi": false,
32
+
"printWidth": 70,
33
+
"tabWidth": 2,
34
+
"useTabs": false,
35
+
"singleQuote": true,
36
+
"jsxSingleQuote": false,
37
+
"bracketSameLine": true,
38
+
"arrowParens": "avoid",
39
+
"endOfLine": "lf"
25
40
},
26
41
"funding": {
27
42
"url": "https://github.com/sponsors/isaacs"
28
-
}
43
+
},
44
+
"tshy": {
45
+
"exports": {
46
+
"./package.json": "./package.json",
47
+
".": "./src/index.ts"
48
+
}
49
+
},
50
+
"exports": {
51
+
"./package.json": "./package.json",
52
+
".": {
53
+
"import": {
54
+
"types": "./dist/esm/index.d.ts",
55
+
"default": "./dist/esm/index.js"
56
+
},
57
+
"require": {
58
+
"types": "./dist/commonjs/index.d.ts",
59
+
"default": "./dist/commonjs/index.js"
60
+
}
61
+
}
62
+
},
63
+
"main": "./dist/commonjs/index.js",
64
+
"types": "./dist/commonjs/index.d.ts",
65
+
"type": "module"
29
66
}
Original file line number Diff line number Diff line change
@@ -8249,6 +8249,15 @@
8249
8249
"node": ">=8"
8250
8250
}
8251
8251
},
8252
+
"node_modules/licensee/node_modules/promise-call-limit": {
8253
+
"version": "1.0.2",
8254
+
"resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz",
8255
+
"integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==",
8256
+
"dev": true,
8257
+
"funding": {
8258
+
"url": "https://github.com/sponsors/isaacs"
8259
+
}
8260
+
},
8252
8261
"node_modules/licensee/node_modules/read-package-json": {
8253
8262
"version": "6.0.4",
8254
8263
"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz",
@@ -10940,9 +10949,9 @@
10940
10949
}
10941
10950
},
10942
10951
"node_modules/promise-call-limit": {
10943
-
"version": "1.0.2",
10944
-
"resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz",
10945
-
"integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==",
10952
+
"version": "3.0.1",
10953
+
"resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.1.tgz",
10954
+
"integrity": "sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==",
10946
10955
"funding": {
10947
10956
"url": "https://github.com/sponsors/isaacs"
10948
10957
}
@@ -16045,7 +16054,7 @@
16045
16054
"parse-conflict-json": "^3.0.0",
16046
16055
"proc-log": "^3.0.0",
16047
16056
"promise-all-reject-late": "^1.0.0",
16048
-
"promise-call-limit": "^1.0.2",
16057
+
"promise-call-limit": "^3.0.1",
16049
16058
"read-package-json-fast": "^3.0.2",
16050
16059
"semver": "^7.3.7",
16051
16060
"ssri": "^10.0.5",
Original file line number Diff line number Diff line change
@@ -387,7 +387,7 @@ module.exports = cls => class Builder extends cls {
387
387
: p)
388
388
389
389
process.emit('timeEnd', timer)
390
-
}), limit)
390
+
}), { limit })
391
391
process.emit('timeEnd', `build:run:${event}`)
392
392
}
393
393
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@
30
30
"parse-conflict-json": "^3.0.0",
31
31
"proc-log": "^3.0.0",
32
32
"promise-all-reject-late": "^1.0.0",
33
-
"promise-call-limit": "^1.0.2",
33
+
"promise-call-limit": "^3.0.1",
34
34
"read-package-json-fast": "^3.0.2",
35
35
"semver": "^7.3.7",
36
36
"ssri": "^10.0.5",
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4