timequeue 2.0.2 → 2.1.0

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 CHANGED
@@ -2,7 +2,7 @@
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
- [![Dependency Status](https://david-dm.org/fent/timequeue.js.svg)](https://david-dm.org/fent/timequeue.js)
5
+ ![Depfu](https://img.shields.io/depfu/fent/timequeue.js)
6
6
  [![codecov](https://codecov.io/gh/fent/timequeue.js/branch/master/graph/badge.svg)](https://codecov.io/gh/fent/timequeue.js)
7
7
 
8
8
  # Usage
@@ -16,8 +16,8 @@ const worker = (arg1, arg2, callback) => {
16
16
 
17
17
  // Worker can be an async function.
18
18
  const worker = async (arg1) => {
19
- await anotherSyncFunction(arg1);
20
- return await andAnotherOne();
19
+ let result1 = await anotherSyncFunction(arg1);
20
+ return andAnotherOne(result1);
21
21
  };
22
22
 
23
23
  // create a queue with max 5 concurrency every second
@@ -60,32 +60,33 @@ Creates a new instance of a queue. Worker must be a function with a callback for
60
60
  // if callback was given to that task, it will be called with the error,
61
61
  // otherwise, the returned promise should be `caught`.
62
62
  , timeout: 0
63
+
64
+ // You can pass a custom store to share tasks between several queues.
65
+ // Default is MemoryStore from `src/mem-store.ts`.
66
+ // Look at `example/redis-store.js` for an example that saves tasks onto redis.
67
+ , store: MemoryStore
63
68
  }
64
69
  ```
65
70
 
66
71
  All of these options can later be edited on the queue instance.
67
72
 
68
73
  ### TimeQueue#active
69
-
70
74
  How many tasks are currently active.
71
75
 
72
76
  ### TimeQueue#intransit
73
-
74
77
  If you use the `every` option to queue up tasks, this property will be delayed from being updated until there are free spots open for new tasks to begin. `active` will be updated as soon as a task finishes, even if the next one is just a timeout around the corner.
75
78
 
76
- ### TimeQueue#queued
77
-
78
- How many tasks are currently in the queue.
79
-
80
79
  ### TimeQueue#finished
81
-
82
80
  How many tasks have finished in total.
83
81
 
84
- ### TimeQueue#push(data..., [callback])
82
+ ### async TimeQueue#push(data..., [callback])
85
83
  Pushes a new task to the queue. Any number of arguments can be given. An optional callback can also be given as the last parameter. The callback will be called when the task is finished or if there was any error running the worker.
86
84
 
87
85
  If the queue is full, pushed tasks will be ignored.
88
86
 
87
+ ### async TimeQueue#store.getQueued()
88
+ How many tasks are currently in the queue.
89
+
89
90
  ### TimeQueue#isFull()
90
91
  Returns true if queue is full.
91
92
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- declare const EventEmitter: any;
2
+ import { EventEmitter } from 'events';
3
3
  declare namespace TimeQueue {
4
4
  type Worker = (...args: any[]) => void | Promise<any>;
5
5
  interface Options {
@@ -7,10 +7,18 @@ declare namespace TimeQueue {
7
7
  every?: number;
8
8
  maxQueued?: number;
9
9
  timeout?: number;
10
+ store?: Store;
10
11
  }
11
12
  interface TaskError extends Error {
12
13
  args: any[];
13
14
  }
15
+ interface Store {
16
+ isEmpty: () => Promise<boolean>;
17
+ getQueued: () => Promise<number>;
18
+ getNextTask: () => Promise<any[]>;
19
+ pushTask: (...args: any[]) => void;
20
+ clear: () => void;
21
+ }
14
22
  }
15
23
  declare class TimeQueue extends EventEmitter {
16
24
  worker: TimeQueue.Worker;
@@ -18,12 +26,11 @@ declare class TimeQueue extends EventEmitter {
18
26
  every: number;
19
27
  maxQueued: number;
20
28
  timeout: number;
21
- private _workerAsync;
22
- private _queue;
29
+ private _isWorkerAsync;
23
30
  private _timers;
31
+ store: TimeQueue.Store;
24
32
  active: number;
25
33
  intransit: number;
26
- queued: number;
27
34
  finished: number;
28
35
  static TaskError: {
29
36
  new (message?: string): {
@@ -32,7 +39,7 @@ declare class TimeQueue extends EventEmitter {
32
39
  message: string;
33
40
  stack?: string;
34
41
  };
35
- captureStackTrace(targetObject: Object, constructorOpt?: Function): void;
42
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
36
43
  prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any;
37
44
  stackTraceLimit: number;
38
45
  };
@@ -55,12 +62,6 @@ declare class TimeQueue extends EventEmitter {
55
62
  * @return {Promise?}
56
63
  */
57
64
  push(...args: any[]): Promise<unknown>;
58
- /**
59
- * Returns true if queue is full.
60
- *
61
- * @return {boolean}
62
- */
63
- isFull(): boolean;
64
65
  /**
65
66
  * Starts a task
66
67
  *
@@ -71,7 +72,7 @@ declare class TimeQueue extends EventEmitter {
71
72
  * Called when a task finishes. Looks at the queue and processes the next
72
73
  * waiting task.
73
74
  */
74
- _next(): void;
75
+ _next(): Promise<void>;
75
76
  /**
76
77
  * Empties the queue and kills the timers.
77
78
  * Active tasks will still be completed.
package/dist/index.js CHANGED
@@ -8,8 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const EventEmitter = require('events').EventEmitter;
12
- class TimeQueue extends EventEmitter {
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ const events_1 = require("events");
15
+ const mem_store_1 = __importDefault(require("./mem-store"));
16
+ class TimeQueue extends events_1.EventEmitter {
13
17
  /**
14
18
  * @constructor
15
19
  * @extends {EventEmitter}
@@ -23,16 +27,15 @@ class TimeQueue extends EventEmitter {
23
27
  constructor(worker, options = {}) {
24
28
  super();
25
29
  this.worker = worker;
26
- this._workerAsync = worker.constructor.name == 'AsyncFunction';
30
+ this._isWorkerAsync = worker.constructor.name == 'AsyncFunction';
27
31
  this.concurrency = options.concurrency || 1;
28
32
  this.every = options.every || 0;
29
33
  this.maxQueued = options.maxQueued || Infinity;
30
34
  this.timeout = options.timeout || 0;
31
- this._queue = [];
35
+ this.store = options.store || new mem_store_1.default({ maxQueued: this.maxQueued });
32
36
  this._timers = [];
33
37
  this.active = 0;
34
38
  this.intransit = 0;
35
- this.queued = 0;
36
39
  this.finished = 0;
37
40
  }
38
41
  /**
@@ -43,46 +46,36 @@ class TimeQueue extends EventEmitter {
43
46
  * @return {Promise?}
44
47
  */
45
48
  push(...args) {
46
- // Returns a promise no `callback` is given.
47
- if (this._workerAsync && args.length === this.worker.length ||
48
- !this._workerAsync && args.length < this.worker.length) {
49
- return new Promise((resolve, reject) => {
50
- // Add any missing arguments.
51
- if (!this._workerAsync) {
52
- while (args.length < this.worker.length - 1) {
53
- args.push(undefined);
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ // Returns a promise when no `callback` is given.
51
+ if (this._isWorkerAsync && args.length === this.worker.length ||
52
+ !this._isWorkerAsync && args.length < this.worker.length) {
53
+ return new Promise((resolve, reject) => {
54
+ // Add any missing arguments.
55
+ if (!this._isWorkerAsync) {
56
+ while (args.length < this.worker.length - 1) {
57
+ args.push(undefined);
58
+ }
54
59
  }
55
- }
56
- TimeQueue.prototype.push.call(this, ...args, (err, results) => {
57
- if (err)
58
- return reject(err);
59
- resolve(results);
60
+ this.push(...args, (err, results) => {
61
+ if (err)
62
+ return reject(err);
63
+ resolve(results);
64
+ });
60
65
  });
61
- });
62
- }
63
- if (this.isFull()) {
64
- return;
65
- }
66
- if (this.intransit < this.concurrency) {
67
- this.intransit++;
68
- this.active++;
69
- if (this.intransit === this.concurrency) {
70
- this.emit('full');
71
66
  }
72
- this._process(args);
73
- }
74
- else {
75
- this._queue.push(args);
76
- this.queued++;
77
- }
78
- }
79
- /**
80
- * Returns true if queue is full.
81
- *
82
- * @return {boolean}
83
- */
84
- isFull() {
85
- return this.maxQueued === this.queued;
67
+ if (this.intransit < this.concurrency) {
68
+ this.intransit++;
69
+ this.active++;
70
+ if (this.intransit === this.concurrency) {
71
+ this.emit('full');
72
+ }
73
+ yield this._process(args);
74
+ }
75
+ else {
76
+ yield this.store.pushTask(args);
77
+ }
78
+ });
86
79
  }
87
80
  /**
88
81
  * Starts a task
@@ -94,11 +87,11 @@ class TimeQueue extends EventEmitter {
94
87
  const callback = args.pop();
95
88
  let finished = false;
96
89
  let every = ~~this.every;
97
- let timedOut;
90
+ let tookLongerThanEvery;
98
91
  if (every) {
99
- timedOut = false;
92
+ tookLongerThanEvery = false;
100
93
  this._timers.push(setTimeout(() => {
101
- timedOut = true;
94
+ tookLongerThanEvery = true;
102
95
  this._timers.shift();
103
96
  if (finished) {
104
97
  this._next();
@@ -106,7 +99,7 @@ class TimeQueue extends EventEmitter {
106
99
  }, every));
107
100
  }
108
101
  else {
109
- timedOut = true;
102
+ tookLongerThanEvery = true;
110
103
  }
111
104
  // If `timeout` option is set, set a timeout to check the task doesn't lag.
112
105
  let taskTimedOut = false;
@@ -131,7 +124,7 @@ class TimeQueue extends EventEmitter {
131
124
  this.active--;
132
125
  callback(err, result);
133
126
  finished = true;
134
- if (timedOut) {
127
+ if (tookLongerThanEvery) {
135
128
  this._next();
136
129
  }
137
130
  };
@@ -144,7 +137,7 @@ class TimeQueue extends EventEmitter {
144
137
  }, timeout);
145
138
  }
146
139
  // Call the worker.
147
- if (this._workerAsync) {
140
+ if (this._isWorkerAsync) {
148
141
  try {
149
142
  taskCallback(null, yield this.worker(...args));
150
143
  }
@@ -165,29 +158,30 @@ class TimeQueue extends EventEmitter {
165
158
  * waiting task.
166
159
  */
167
160
  _next() {
168
- if (this.intransit <= this.concurrency && this._queue.length) {
169
- this.queued--;
170
- this.active++;
171
- this._process(this._queue.shift());
172
- if (this._queue.length === 0) {
173
- this.emit('empty');
161
+ return __awaiter(this, void 0, void 0, function* () {
162
+ let task;
163
+ if (this.intransit <= this.concurrency && (task = yield this.store.getNextTask())) {
164
+ this.active++;
165
+ yield this._process(task);
166
+ if (yield this.store.isEmpty()) {
167
+ this.emit('empty');
168
+ }
174
169
  }
175
- }
176
- else if (--this.intransit === 0) {
177
- this.emit('drain');
178
- }
170
+ else if (--this.intransit === 0) {
171
+ this.emit('drain');
172
+ }
173
+ });
179
174
  }
180
175
  /**
181
176
  * Empties the queue and kills the timers.
182
177
  * Active tasks will still be completed.
183
178
  */
184
179
  die() {
185
- this._queue = [];
180
+ this.store.clear();
186
181
  this._timers.forEach(clearTimeout);
187
182
  this._timers = [];
188
183
  this.intransit = 0;
189
184
  this.active = 0;
190
- this.queued = 0;
191
185
  }
192
186
  }
193
187
  TimeQueue.TaskError = class TaskError extends Error {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare class Options {
2
+ maxQueued?: number;
3
+ }
4
+ export default class MemoryStore {
5
+ maxQueued: number;
6
+ private _queue;
7
+ constructor(options: Options);
8
+ isEmpty(): Promise<boolean>;
9
+ getQueued(): Promise<number>;
10
+ getNextTask(): Promise<any[]>;
11
+ pushTask(args: any[]): Promise<void>;
12
+ clear(): Promise<void>;
13
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Options = void 0;
13
+ class Options {
14
+ }
15
+ exports.Options = Options;
16
+ class MemoryStore {
17
+ constructor(options) {
18
+ this.maxQueued = options.maxQueued;
19
+ this._queue = [];
20
+ }
21
+ isEmpty() {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ return this._queue.length === 0;
24
+ });
25
+ }
26
+ getQueued() {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ return this._queue.length;
29
+ });
30
+ }
31
+ getNextTask() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ return this._queue.shift();
34
+ });
35
+ }
36
+ pushTask(args) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (this._queue.length < this.maxQueued) {
39
+ this._queue.push(args);
40
+ }
41
+ });
42
+ }
43
+ clear() {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ this._queue = [];
46
+ });
47
+ }
48
+ }
49
+ exports.default = MemoryStore;
50
+ //# sourceMappingURL=mem-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem-store.js","sourceRoot":"","sources":["../src/mem-store.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAa,OAAO;CAEnB;AAFD,0BAEC;AACD,MAAqB,WAAW;IAG9B,YAAY,OAAgB;QAC1B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IACK,OAAO;;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAClC,CAAC;KAAA;IACK,SAAS;;YACb,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;gBACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;QACH,CAAC;KAAA;IACK,KAAK;;YACT,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;KAAA;CACF;AAxBD,8BAwBC"}
package/package.json CHANGED
@@ -6,33 +6,31 @@
6
6
  "flow",
7
7
  "time"
8
8
  ],
9
- "version": "2.0.2",
9
+ "version": "2.1.0",
10
10
  "repository": {
11
11
  "type": "git",
12
12
  "url": "git://github.com/fent/timequeue.js.git"
13
13
  },
14
- "author": "fent (https://github.com/fent)",
14
+ "author": "fent <fentbox@gmail.com> (https://github.com/fent)",
15
15
  "main": "./dist/index.js",
16
- "types": "./dist/index.d.ts",
17
16
  "files": [
18
17
  "dist"
19
18
  ],
20
19
  "scripts": {
20
+ "prepare": "tsc -p tsconfig.build.json",
21
21
  "build": "tsc -p tsconfig.build.json",
22
- "test": "nyc --extension .ts --reporter=lcov --reporter=text-summary mocha -- --require ts-node/register test/*-test.ts"
23
- },
24
- "directories": {
25
- "lib": "./lib"
22
+ "test": "nyc --extension .ts --reporter=lcov --reporter=text-summary npm run test:unit",
23
+ "test:unit": "mocha -- --require ts-node/register test/*-test.ts"
26
24
  },
27
25
  "devDependencies": {
28
- "@types/mocha": "^5.2.7",
29
- "@types/node": "^12.12.16",
30
- "@types/sinon": "^7.5.1",
31
- "mocha": "^6.2.0",
26
+ "@types/mocha": "^7.0.0",
27
+ "@types/node": "^13.1.6",
28
+ "@types/sinon": "^9.0.8",
29
+ "mocha": "^7.0.1",
32
30
  "nyc": "^15.0.0",
33
- "sinon": "^8.0.0",
34
- "ts-node": "^8.5.4",
35
- "typescript": "^3.7.3"
31
+ "sinon": "^9.0.0",
32
+ "ts-node": "^10.4.0",
33
+ "typescript": "^4.5.4"
36
34
  },
37
35
  "engines": {
38
36
  "node": ">=10"