diff --git a/packages/queue/.gitignore b/packages/queue/.gitignore new file mode 100644 index 0000000..53c37a1 --- /dev/null +++ b/packages/queue/.gitignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/packages/queue/.npmignore b/packages/queue/.npmignore new file mode 100644 index 0000000..5582df4 --- /dev/null +++ b/packages/queue/.npmignore @@ -0,0 +1,3 @@ +Queue.ts +.gitignore +tsconfig.json diff --git a/packages/queue/Queue.ts b/packages/queue/Queue.ts new file mode 100644 index 0000000..fb1c67f --- /dev/null +++ b/packages/queue/Queue.ts @@ -0,0 +1,49 @@ +import Logger from "@dzeio/logger" + +export default class Queue { + private queue = 0 + private isPaused = false + + public constructor( + private maxQueueLength = 5, + private timeToWait = 500 + ) {} + + public pause() { + this.isPaused = true + } + + public start() { + this.isPaused = false + } + + public updateCurrentQueueLength(len: number) { + this.queue = len + } + + public async add(promise: Promise) { + while (this.queue >= this.maxQueueLength || this.isPaused) { + await new Promise((res) => setTimeout(res, this.timeToWait)) + } + this.updateCurrentQueueLength(this.queue+1) + promise + .then(() => { + this.updateCurrentQueueLength(this.queue-1) + }).catch(() => { + this.updateCurrentQueueLength(this.queue-1) + }) + } + + public async waitEnd() { + let currentQueue = this.queue + while (this.queue !== 0) { + await new Promise((res) => setTimeout(() => { + if (currentQueue !== this.queue) { + Logger.log('PromiseQueue', this.queue, 'remaining in queue') + currentQueue = this.queue + } + res() + }, this.timeToWait)) + } + } +} \ No newline at end of file diff --git a/packages/queue/package.json b/packages/queue/package.json new file mode 100644 index 0000000..1e8f1eb --- /dev/null +++ b/packages/queue/package.json @@ -0,0 +1,24 @@ +{ + "name": "@dzeio/queue", + "version": "1.0.0", + "description": "My Personnal Promise Queue System", + "repository": { + "type": "git", + "url": "https://github.com/dzeiocom/libs.git", + "directory": "packages/Queue" + }, + "author": "Aviortheking", + "license": "MIT", + "main": "./dist/Queue.js", + "types": "./dist/Queue.d.ts", + "devDependencies": { + "typescript": "^3.9.5" + }, + "scripts": { + "prepublishOnly": "yarn build", + "build": "tsc" + }, + "dependencies": { + "@dzeio/logger": "^1.1.1" + } +} diff --git a/packages/queue/tsconfig.json b/packages/queue/tsconfig.json new file mode 100644 index 0000000..84b30c1 --- /dev/null +++ b/packages/queue/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist" + }, + "exclude": [ + "node_modules" + ], + "files": [ + "Queue.ts" + ] +}