timequeue 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.js +21 -17
- package/dist/index.js.map +1 -1
- package/dist/mem-store.d.ts +1 -1
- package/dist/mem-store.js.map +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.js +0 -4
- package/dist/store.js.map +1 -1
- package/package.json +11 -10
package/README.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A queue with custom concurrency and time limits. Inspired by [async/queue](https://caolan.github.io/async/v3/docs.html#queue), but also with variable number of arguments in the worker, events, and with optional time limits.
|
|
4
4
|
|
|
5
|
-
](https://www.npmjs.com/package/timequeue)
|
|
6
|
+
[](https://github.com/fent/timequeue.js/actions/workflows/nodejs.yml)
|
|
6
7
|
[](https://codecov.io/gh/fent/timequeue.js)
|
|
7
8
|
|
|
8
9
|
# Usage
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { EventEmitter } from 'events';
|
|
3
|
-
import { Store } from './store';
|
|
4
|
-
export { Store, StoreOptions } from './store';
|
|
5
|
-
export
|
|
2
|
+
import type { Store } from './store';
|
|
3
|
+
export type { Store, StoreOptions } from './store';
|
|
4
|
+
export type Worker = (...args: any[]) => void | Promise<any>;
|
|
6
5
|
export interface Options {
|
|
7
6
|
concurrency?: number;
|
|
8
7
|
every?: number;
|
package/dist/index.js
CHANGED
|
@@ -12,11 +12,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.TaskError =
|
|
15
|
+
exports.TaskError = void 0;
|
|
16
16
|
const events_1 = require("events");
|
|
17
17
|
const mem_store_1 = __importDefault(require("./mem-store"));
|
|
18
|
-
var store_1 = require("./store");
|
|
19
|
-
Object.defineProperty(exports, "StoreOptions", { enumerable: true, get: function () { return store_1.StoreOptions; } });
|
|
20
18
|
class TaskError extends Error {
|
|
21
19
|
}
|
|
22
20
|
exports.TaskError = TaskError;
|
|
@@ -41,12 +39,13 @@ class TimeQueue extends events_1.EventEmitter {
|
|
|
41
39
|
// How many tasks have finished.
|
|
42
40
|
this.finished = 0;
|
|
43
41
|
this.worker = worker;
|
|
44
|
-
this._isWorkerAsync = worker.constructor.name
|
|
42
|
+
this._isWorkerAsync = worker.constructor.name === 'AsyncFunction';
|
|
45
43
|
this.concurrency = options.concurrency || 1;
|
|
46
44
|
this.every = options.every || 0;
|
|
47
45
|
this.maxQueued = options.maxQueued || Infinity;
|
|
48
46
|
this.timeout = options.timeout || 0;
|
|
49
|
-
this.store =
|
|
47
|
+
this.store =
|
|
48
|
+
options.store || new mem_store_1.default({ maxQueued: this.maxQueued });
|
|
50
49
|
this._timers = [];
|
|
51
50
|
}
|
|
52
51
|
/**
|
|
@@ -59,8 +58,8 @@ class TimeQueue extends events_1.EventEmitter {
|
|
|
59
58
|
push(...args) {
|
|
60
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
60
|
// Returns a promise when no `callback` is given.
|
|
62
|
-
if (this._isWorkerAsync && args.length === this.worker.length ||
|
|
63
|
-
!this._isWorkerAsync && args.length < this.worker.length) {
|
|
61
|
+
if ((this._isWorkerAsync && args.length === this.worker.length) ||
|
|
62
|
+
(!this._isWorkerAsync && args.length < this.worker.length)) {
|
|
64
63
|
return new Promise((resolve, reject) => {
|
|
65
64
|
// Add any missing arguments.
|
|
66
65
|
if (!this._isWorkerAsync) {
|
|
@@ -99,7 +98,7 @@ class TimeQueue extends events_1.EventEmitter {
|
|
|
99
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
99
|
const callback = args.pop();
|
|
101
100
|
let finished = false;
|
|
102
|
-
|
|
101
|
+
const every = ~~this.every;
|
|
103
102
|
let tookLongerThanEvery;
|
|
104
103
|
if (every) {
|
|
105
104
|
tookLongerThanEvery = false;
|
|
@@ -117,7 +116,7 @@ class TimeQueue extends events_1.EventEmitter {
|
|
|
117
116
|
// If `timeout` option is set, set a timeout to check the task doesn't lag.
|
|
118
117
|
let taskTimedOut = false;
|
|
119
118
|
let callbackCalled = false;
|
|
120
|
-
|
|
119
|
+
const timeout = ~~this.timeout;
|
|
121
120
|
let tid;
|
|
122
121
|
const taskCallback = (err, result) => {
|
|
123
122
|
// If this task has timed out, and the callback is called again
|
|
@@ -172,15 +171,18 @@ class TimeQueue extends events_1.EventEmitter {
|
|
|
172
171
|
*/
|
|
173
172
|
_next() {
|
|
174
173
|
return __awaiter(this, void 0, void 0, function* () {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.
|
|
174
|
+
if (this.intransit <= this.concurrency) {
|
|
175
|
+
const task = yield this.store.getNextTask();
|
|
176
|
+
if (task) {
|
|
177
|
+
this.active++;
|
|
178
|
+
yield this._process(task);
|
|
179
|
+
if ((yield this.store.getQueueLen()) === 0) {
|
|
180
|
+
this.emit('empty');
|
|
181
|
+
}
|
|
182
|
+
return;
|
|
181
183
|
}
|
|
182
184
|
}
|
|
183
|
-
|
|
185
|
+
if (--this.intransit === 0) {
|
|
184
186
|
this.emit('drain');
|
|
185
187
|
}
|
|
186
188
|
});
|
|
@@ -192,7 +194,9 @@ class TimeQueue extends events_1.EventEmitter {
|
|
|
192
194
|
die() {
|
|
193
195
|
return __awaiter(this, void 0, void 0, function* () {
|
|
194
196
|
yield this.store.clear();
|
|
195
|
-
this._timers
|
|
197
|
+
for (const t of this._timers) {
|
|
198
|
+
clearTimeout(t);
|
|
199
|
+
}
|
|
196
200
|
this._timers = [];
|
|
197
201
|
this.intransit = 0;
|
|
198
202
|
this.active = 0;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mCAAsC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mem-store.d.ts
CHANGED
package/dist/mem-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mem-store.js","sourceRoot":"","sources":["../src/mem-store.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,MAAqB,WAAW;IAG9B,YAAY,OAAqB;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IACK,WAAW;;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,CAAC;KAAA;IACK,WAAW;;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;KAAA;IACK,QAAQ,CAAC,IAAW;;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"mem-store.js","sourceRoot":"","sources":["../src/mem-store.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,MAAqB,WAAW;IAG9B,YAAY,OAAqB;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IACK,WAAW;;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,CAAC;KAAA;IACK,WAAW;;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;KAAA;IACK,QAAQ,CAAC,IAAW;;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KAAA;IACK,KAAK;;YACT,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;KAAA;CACF;AArBD,8BAqBC"}
|
package/dist/store.d.ts
CHANGED
package/dist/store.js
CHANGED
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"flow",
|
|
7
7
|
"time"
|
|
8
8
|
],
|
|
9
|
-
"version": "4.0.
|
|
9
|
+
"version": "4.0.1",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "git://github.com/fent/timequeue.js.git"
|
|
@@ -19,18 +19,19 @@
|
|
|
19
19
|
"scripts": {
|
|
20
20
|
"prepare": "tsc -p tsconfig.build.json",
|
|
21
21
|
"build": "tsc -p tsconfig.build.json",
|
|
22
|
+
"lint": "biome check .",
|
|
23
|
+
"lint:fix": "biome check --write .",
|
|
22
24
|
"test": "nyc --extension .ts --reporter=lcov --reporter=text-summary npm run test:unit",
|
|
23
|
-
"test:unit": "mocha --
|
|
25
|
+
"test:unit": "mocha --require ts-node/register test/*-test.ts"
|
|
24
26
|
},
|
|
25
27
|
"devDependencies": {
|
|
26
|
-
"@
|
|
27
|
-
"@types/
|
|
28
|
-
"@types/
|
|
29
|
-
"mocha": "^
|
|
30
|
-
"nyc": "^
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"typescript": "^4.5.4"
|
|
28
|
+
"@biomejs/biome": "2.5.15",
|
|
29
|
+
"@types/mocha": "^10.0.10",
|
|
30
|
+
"@types/node": "^20.1.2",
|
|
31
|
+
"mocha": "^12.0.3",
|
|
32
|
+
"nyc": "^18.0.0",
|
|
33
|
+
"ts-node": "^10.9.2",
|
|
34
|
+
"typescript": "^5.6.3"
|
|
34
35
|
},
|
|
35
36
|
"engines": {
|
|
36
37
|
"node": ">=10"
|