From 6a814c5d0bea01f0a75829f6fe325182a95b6d40 Mon Sep 17 00:00:00 2001 From: jblasco Date: Wed, 5 Jan 2022 12:03:02 +0100 Subject: [PATCH 1/5] [ADDED] ~minor :sparkles: Return task id at enqueue and dequeue --- dist/index.js | 2 +- dist/index.js.flow | 13 +++++++++---- package-lock.json | 12 ++---------- src/index.js | 13 +++++++++---- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/dist/index.js b/dist/index.js index 620eadac..420370f2 100755 --- a/dist/index.js +++ b/dist/index.js @@ -1 +1 @@ -"use strict";var _events=_interopRequireDefault(require("events"));Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c{for(;this.shouldRun;)await this.dequeue()})())}stop(){clearTimeout(this.timeoutId),this.state=State.STOPPED,this.emit("stop")}finalize(){this.currentlyHandled-=1,0===this.currentlyHandled&&this.isEmpty&&(this.stop(),this.state=State.IDLE,this.emit("end"))}async execute(){const a=[];this.tasks.forEach((b,c)=>{this.currentlyHandled(this.emit("resolve",a),a)).catch(a=>(this.emit("reject",a),a)).finally(()=>{this.emit("dequeue"),this.finalize()})))});const b=await Promise.all(a);return 1===this.options.concurrent?b[0]:b}dequeue(){const{interval:a}=this.options;return new Promise(b=>{const c=Math.max(0,a-(Date.now()-this.lastRan));clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.lastRan=Date.now(),this.execute().then(b)},c)})}enqueue(a){if(Array.isArray(a))return void a.map(a=>this.enqueue(a));if("function"!=typeof a)throw new Error(`You must provide a function, not ${typeof a}.`);this.uniqueId=(this.uniqueId+1)%Number.MAX_SAFE_INTEGER,this.tasks.set(this.uniqueId,a),this.options.start&&this.state!==State.STOPPED&&this.start()}add(a){this.enqueue(a)}clear(){this.tasks.clear()}get size(){return this.tasks.size}get isEmpty(){return 0===this.size}get shouldRun(){return!this.isEmpty&&this.state!==State.STOPPED}}exports.default=Queue,module.exports=exports.default; \ No newline at end of file +"use strict";var _events=_interopRequireDefault(require("events"));Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c{for(;this.shouldRun;)await this.dequeue()})())}stop(){clearTimeout(this.timeoutId),this.state=State.STOPPED,this.emit("stop")}finalize(){this.currentlyHandled-=1,0===this.currentlyHandled&&this.isEmpty&&(this.stop(),this.state=State.IDLE,this.emit("end"))}async execute(){const a=[];this.tasks.forEach((b,c)=>{this.currentlyHandled(this.emit("resolve",a),a)).catch(a=>(this.emit("reject",a),a)).finally(()=>{this.emit("dequeue",c),this.finalize()})))});const b=await Promise.all(a);return 1===this.options.concurrent?b[0]:b}dequeue(){const{interval:a}=this.options;return new Promise(b=>{const c=Math.max(0,a-(Date.now()-this.lastRan));clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.lastRan=Date.now(),this.execute().then(b)},c)})}enqueue(a){var b=Number.MAX_SAFE_INTEGER;if(Array.isArray(a)){const b=[].concat(a.map(a=>this.enqueue(a)[0]));return b}if("function"!=typeof a)throw new Error(`You must provide a function, not ${typeof a}.`);return this.uniqueId=(this.uniqueId+1)%b,this.tasks.set(this.uniqueId,a),this.options.start&&this.state!==State.STOPPED&&this.start(),[this.uniqueId]}add(a){this.enqueue(a)}clear(){this.tasks.clear()}get size(){return this.tasks.size}get isEmpty(){return 0===this.size}get shouldRun(){return!this.isEmpty&&this.state!==State.STOPPED}}exports.default=Queue,module.exports=exports.default; \ No newline at end of file diff --git a/dist/index.js.flow b/dist/index.js.flow index e6bbc8cc..ae852fa6 100755 --- a/dist/index.js.flow +++ b/dist/index.js.flow @@ -192,7 +192,7 @@ export default class Queue extends EventEmitter { return error; }) .finally(() => { - this.emit("dequeue"); + this.emit("dequeue", id); this.finalize(); }) ); @@ -240,10 +240,13 @@ export default class Queue extends EventEmitter { * @return {void} * @access public */ - enqueue(tasks: Function | Array): void { + enqueue(tasks: Function | Array): number[] { if (Array.isArray(tasks)) { - tasks.map((task) => this.enqueue(task)); - return; + const emptyNumberArray: number[] = []; + const taskIds = emptyNumberArray.concat( + tasks.map((task) => this.enqueue(task)[0]) + ); + return taskIds; } if (typeof tasks !== "function") { @@ -258,6 +261,8 @@ export default class Queue extends EventEmitter { if (this.options.start && this.state !== State.STOPPED) { this.start(); } + + return [this.uniqueId]; } /** diff --git a/package-lock.json b/package-lock.json index a7682a83..fcab3641 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5483,7 +5483,6 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "optional": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5493,15 +5492,13 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true + "dev": true }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "optional": true, "requires": { "fill-range": "^7.0.1" } @@ -5511,7 +5508,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "optional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -5521,7 +5517,6 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "optional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -5530,15 +5525,13 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true + "dev": true }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "optional": true, "requires": { "picomatch": "^2.2.1" } @@ -5548,7 +5541,6 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "optional": true, "requires": { "is-number": "^7.0.0" } diff --git a/src/index.js b/src/index.js index e6bbc8cc..ae852fa6 100755 --- a/src/index.js +++ b/src/index.js @@ -192,7 +192,7 @@ export default class Queue extends EventEmitter { return error; }) .finally(() => { - this.emit("dequeue"); + this.emit("dequeue", id); this.finalize(); }) ); @@ -240,10 +240,13 @@ export default class Queue extends EventEmitter { * @return {void} * @access public */ - enqueue(tasks: Function | Array): void { + enqueue(tasks: Function | Array): number[] { if (Array.isArray(tasks)) { - tasks.map((task) => this.enqueue(task)); - return; + const emptyNumberArray: number[] = []; + const taskIds = emptyNumberArray.concat( + tasks.map((task) => this.enqueue(task)[0]) + ); + return taskIds; } if (typeof tasks !== "function") { @@ -258,6 +261,8 @@ export default class Queue extends EventEmitter { if (this.options.start && this.state !== State.STOPPED) { this.start(); } + + return [this.uniqueId]; } /** From c5eeec13797e3c675f211fd05f0c94f3d829219f Mon Sep 17 00:00:00 2001 From: jblasco Date: Wed, 5 Jan 2022 12:09:21 +0100 Subject: [PATCH 2/5] feat: return task id and updated comments --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index ae852fa6..75a759fc 100755 --- a/src/index.js +++ b/src/index.js @@ -237,7 +237,7 @@ export default class Queue extends EventEmitter { * * @param {Function|Array} tasks Tasks to add to the queue * @throws {Error} When task is not a function - * @return {void} + * @return {number[]} Array of task ids * @access public */ enqueue(tasks: Function | Array): number[] { From 6099e016a6ab68a5b01f35419ae66dff80144f3b Mon Sep 17 00:00:00 2001 From: jblasco Date: Wed, 5 Jan 2022 13:07:15 +0100 Subject: [PATCH 3/5] fix: rebuilt --- dist/index.js.flow | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/index.js.flow b/dist/index.js.flow index ae852fa6..75a759fc 100755 --- a/dist/index.js.flow +++ b/dist/index.js.flow @@ -237,7 +237,7 @@ export default class Queue extends EventEmitter { * * @param {Function|Array} tasks Tasks to add to the queue * @throws {Error} When task is not a function - * @return {void} + * @return {number[]} Array of task ids * @access public */ enqueue(tasks: Function | Array): number[] { From c39540bb1a158b73faf1315162d6663804a6c72f Mon Sep 17 00:00:00 2001 From: jblasco Date: Wed, 5 Jan 2022 13:10:27 +0100 Subject: [PATCH 4/5] fix: updated types --- dist/index.d.ts | 2 +- types/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.d.ts b/dist/index.d.ts index fbe52b12..cef53bab 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -28,7 +28,7 @@ declare module "queue-promise" { start(): void; stop(): void; dequeue(): any; - enqueue(tasks: TaskFactory | ReadonlyArray): void; + enqueue(tasks: TaskFactory | ReadonlyArray): number[]; add(tasks: TaskFactory | ReadonlyArray): void; clear(): void; } diff --git a/types/index.d.ts b/types/index.d.ts index fbe52b12..cef53bab 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -28,7 +28,7 @@ declare module "queue-promise" { start(): void; stop(): void; dequeue(): any; - enqueue(tasks: TaskFactory | ReadonlyArray): void; + enqueue(tasks: TaskFactory | ReadonlyArray): number[]; add(tasks: TaskFactory | ReadonlyArray): void; clear(): void; } From 48654ec5bfa4842303119e87648c2957830b0d6f Mon Sep 17 00:00:00 2001 From: jblasco Date: Tue, 18 Jan 2022 13:13:44 +0100 Subject: [PATCH 5/5] [FIXED] ~patch :bug: Fixed test return types --- types/index.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/types/index.test.ts b/types/index.test.ts index 5fe210d3..dc90ad52 100644 --- a/types/index.test.ts +++ b/types/index.test.ts @@ -40,11 +40,11 @@ queue.stop(); const [e, f, g] = await queue.dequeue(); })(); -// $ExpectType void +// $ExpectType number[] queue.enqueue(() => resolve("Success")); -// $ExpectType void +// $ExpectType number[] queue.enqueue(() => reject("Error")); -// $ExpectType void +// $ExpectType number[] queue.enqueue([() => reject("Success"), () => reject("Error")]); // $ExpectError queue.enqueue("ab");