diff --git a/lib/commonjs/Queue.js b/lib/commonjs/Queue.js index 1e271a7..21e0bea 100644 --- a/lib/commonjs/Queue.js +++ b/lib/commonjs/Queue.js @@ -135,7 +135,7 @@ class Queue extends _eventemitter.default { ...job, payload: JSON.stringify(payload) }); - this.emitter.emit('jobStarted', job); + this.emit('jobStarted', job); this.activeJobCount++; if (!this.workers[rawJob.workerName]) { throw new Error(`Missing worker with name ${rawJob.workerName}`); @@ -150,7 +150,7 @@ class Queue extends _eventemitter.default { payload: JSON.stringify(payload) }); this.jobStore.removeJob(rawJob); - this.emitter.emit('jobSucceeded', job); + this.emit('jobSucceeded', job); } catch (err) { const error = err; const { @@ -185,12 +185,12 @@ class Queue extends _eventemitter.default { } }; this.jobStore.updateJob(failedJob); - this.emitter.emit('jobFailed', failedJob, error); + this.emit('jobFailed', failedJob, error); } finally { delete this.runningJobPromises[job.id]; worker.decreaseExecutionCount(); worker.triggerCompletion(job); - this.emitter.emit('jobCompleted', { + this.emit('jobCompleted', { ...job }); this.executedJobs.push(rawJob); @@ -257,7 +257,7 @@ class Queue extends _eventemitter.default { throw new Error(`Worker "${worker.name}" already exists.`); } this.workers[worker.name] = worker; - this.emitter.emit('workerAdded', worker.name); + this.emit('workerAdded', worker.name); } /** @@ -313,7 +313,7 @@ class Queue extends _eventemitter.default { throw new Error(`Missing worker with name ${job.workerName}`); } this.jobStore.addJob(job); - this.emitter.emit('jobAdded', job); + this.emit('jobAdded', job); if (startQueue && !this.isActive) { this.start(); } diff --git a/lib/commonjs/Queue.js.map b/lib/commonjs/Queue.js.map index b2ef328..fa25448 100644 --- a/lib/commonjs/Queue.js.map +++ b/lib/commonjs/Queue.js.map @@ -1 +1 @@ -{"version":3,"names":["_reactNative","require","_Job","_Uuid","_Worker","_eventemitter","_interopRequireDefault","_Queue","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Queue","EventEmitter","instance","queueInstance","isRunning","isActive","registeredWorkers","workers","constructor","job","jobStore","updateJob","active","FALSE","finishQueue","nextJob","getNextJob","isJobNotEmpty","nextJobs","getJobsForWorker","workerName","processingJobs","map","limitExecution","excuteJob","Promise","all","isExecuting","scheduleQueue","executer","rawJob","resolve","enqueueJobExecuter","isExecuterAvailable","runExecuter","queuedJobExecuter","push","bind","length","shift","worker","payload","JSON","parse","status","stringify","emitter","emit","activeJobCount","Error","promise","execute","runningJobPromises","id","triggerSuccess","removeJob","err","error","attempts","errors","failedAttempts","metaData","failed","Date","toISOString","triggerFailure","failedJob","decreaseExecutionCount","triggerCompletion","executedJobs","NativeModules","JobQueue","timeoutId","updateInterval","onQueueFinish","concurrency","getJobs","getJobsWithDeleted","removeJobPermanent","removeJobPermanently","requeueJob","configure","options","addWorker","name","removeWorker","deleteRelatedJobs","removeJobsByWorkerName","addJob","timeout","priority","startQueue","Uuid","v4","created","isDeleted","start","resetActiveJobs","stop","cancelJob","jobId","exception","undefined","CANCEL","console","warn","activeMarkedJobs","getActiveMarkedJobs","resetTasks","resetActiveJob","AppState","currentState","Platform","OS","setTimeout","runQueue","keys","clearTimeout","isBusy","availableExecuters","getJobsForAlternateWorker","getJobsForWorkerWithDeleted","exports","_default"],"sources":["Queue.ts"],"sourcesContent":["import { AppState, NativeModules, Platform } from 'react-native';\n\nimport { FALSE, Job, RawJob, JobStatus } from './models/Job';\nimport { JobStore } from './models/JobStore';\nimport { Uuid } from './utils/Uuid';\nimport { Worker, CANCEL, CancellablePromise } from './Worker';\n\n\nimport EventEmitter from 'eventemitter3';\n\n/**\n * Events emitted by the Queue.\n */\nexport interface QueueEvents {\n /**\n * Fired when a worker is added.\n * @param workerName Name of the worker.\n */\n workerAdded: (workerName: string) => void;\n\n /**\n * Fired when a job is added to the queue.\n * @param job The RawJob that was added.\n */\n jobAdded: (job: RawJob) => void;\n\n /**\n * Fired when a job starts processing.\n * @param job The RawJob that started.\n */\n jobStarted: (job: RawJob) => void;\n\n /**\n * Fired when a job completes successfully.\n * @param job The Job with payload that succeeded.\n */\n jobSucceeded: (job: Job) => void;\n\n /**\n * Fired when a job fails.\n * @param job The RawJob that failed.\n * @param error The error thrown.\n */\n jobFailed: (job: RawJob, error: Error) => void;\n\n /**\n * Fired when a job completes (regardless of success or failure).\n * @param job The RawJob that finished.\n */\n jobCompleted: (job: RawJob) => void;\n\n jobDeleted: (job: RawJob) => void\n}\n\n\n/**\n * Options to configure the queue\n */\nexport interface QueueOptions {\n /**\n * A callback function which is called after the queue has been stopped\n * @parameter executedJobs\n */\n onQueueFinish?: (executedJobs: Array>) => void;\n /**\n * Interval in which the queue checks for new jobs to execute\n */\n updateInterval?: number;\n concurrency?: number;\n}\n/**\n * ## Usage\n *\n * ```typescript\n * import queue from 'react-native-job-queue'\n *\n * queue.configure({onQueueFinish:(executedJobs:Job[])=>{\n * console.log(\"Queue stopped and executed\",executedJobs)\n * }});\n * queue.addWorker(new Worker(\"testWorker\",async(payload, id)=>{\n * return new Promise((resolve) => {\n * setTimeout(() => {\n * console.log('Executing jobId', id, 'with:', payload.text);\n * resolve();\n * }, payload.delay);});\n * }))\n * queue.addJob(\"testWorker\",{text:\"Job example payload content text\",delay:5000})\n * ```\n */\nexport class Queue extends EventEmitter {\n static get instance() {\n if (this.queueInstance) {\n return this.queueInstance;\n } else {\n this.queueInstance = new Queue();\n return this.queueInstance;\n }\n }\n /**\n * @returns true if the Queue is running and false otherwise\n */\n get isRunning() {\n return this.isActive;\n }\n /**\n * @returns the workers map (readonly)\n */\n get registeredWorkers() {\n return this.workers;\n }\n private static queueInstance: Queue | null;\n private emitter: EventEmitter = new EventEmitter();\n\n private jobStore: JobStore;\n private workers: { [key: string]: Worker };\n private isActive: boolean;\n\n private timeoutId: number;\n private executedJobs: Array>;\n private activeJobCount: number;\n\n private concurrency: number;\n private updateInterval: number;\n private onQueueFinish: (executedJobs: Array>) => void;\n\n private queuedJobExecuter: any[] = [];\n private runningJobPromises: { [key: string]: CancellablePromise };\n\n private constructor() {\n super();\n this.jobStore = NativeModules.JobQueue;\n this.workers = {};\n this.runningJobPromises = {};\n this.isActive = false;\n\n this.timeoutId = 0;\n this.executedJobs = [];\n this.activeJobCount = 0;\n\n this.updateInterval = 10;\n this.onQueueFinish = (executedJobs: Array>) => { };\n this.concurrency = -1;\n }\n\n\n\n /**\n * @returns a promise that resolves all jobs of jobStore\n */\n async getJobs() {\n return await this.jobStore.getJobs();\n }\n async getJobsWithDeleted() {\n return await this.jobStore.getJobsWithDeleted();\n }\n /**\n * @param job the job to be deleted\n */\n removeJob(job: RawJob) {\n this.jobStore.removeJob(job);\n this.emit(\"jobDeleted\", job)\n }\n removeJobPermanent(job: RawJob) {\n this.jobStore.removeJobPermanently(job);\n this.emit(\"jobDeleted\", job)\n }\n /**\n * @param job the job which should be requeued\n */\n requeueJob(job: RawJob) {\n return this.jobStore.updateJob({ ...job, failed: '' });\n }\n\n configure(options: QueueOptions) {\n const {\n onQueueFinish = (executedJobs: Array>) => { },\n updateInterval = 10,\n concurrency = -1,\n } = options;\n this.onQueueFinish = onQueueFinish;\n this.updateInterval = updateInterval;\n this.concurrency = concurrency;\n }\n /**\n * adds a [[Worker]] to the queue which can execute Jobs\n * @param worker\n */\n addWorker(worker: Worker) {\n if (this.workers[worker.name]) {\n throw new Error(`Worker \"${worker.name}\" already exists.`);\n }\n this.workers[worker.name] = worker;\n this.emitter.emit('workerAdded', worker.name);\n }\n\n /**\n * removes worker from queue\n *\n * @param name\n * @param [deleteRelatedJobs=false] removes all queued jobs releated to the worker if set to true\n */\n removeWorker(name: string, deleteRelatedJobs = false) {\n delete this.workers[name];\n if (deleteRelatedJobs) {\n this.jobStore.removeJobsByWorkerName(name);\n }\n }\n\n /**\n * adds a job to the queue\n * @param workerName name of the worker which should be used to excute the job\n * @param [payload={}] payload which is passed as parameter to the executer\n * @param [options={ attempts: 0, timeout: 0, priority: 0 }] options to set max attempts, a timeout and a priority\n * @param [startQueue=true] if set to false the queue won't start automaticly when adding a job\n * @returns job id\n */\n addJob

(\n workerName: string,\n payload: P,\n options = { attempts: 0, timeout: 0, priority: 0 },\n startQueue = true\n ) {\n const { attempts = 0, timeout = 0, priority = 0 } = options;\n const id: string = Uuid.v4();\n const job: RawJob = {\n id,\n payload: JSON.stringify(payload || {}),\n metaData: JSON.stringify({ failedAttempts: 0, errors: [] }),\n active: FALSE,\n created: new Date().toISOString(),\n failed: '',\n workerName,\n attempts,\n timeout,\n priority,\n isDeleted: false,\n status: \"idle\"\n };\n if (!this.workers[job.workerName]) {\n throw new Error(`Missing worker with name ${job.workerName}`);\n }\n\n this.jobStore.addJob(job);\n this.emitter.emit('jobAdded', job);\n if (startQueue && !this.isActive) {\n this.start();\n }\n\n return id;\n }\n /**\n * starts the queue to execute queued jobs\n */\n async start() {\n if (!this.isActive) {\n this.isActive = true;\n this.executedJobs = [];\n await this.resetActiveJobs();\n this.scheduleQueue();\n }\n }\n /**\n * stop the queue from executing queued jobs\n */\n stop() {\n this.isActive = false;\n }\n\n /**\n * cancel running job\n */\n cancelJob(jobId: string, exception?: Error) {\n const promise = this.runningJobPromises[jobId];\n if (promise !== undefined && typeof promise[CANCEL] === 'function') {\n promise[CANCEL](exception || new Error(`canceled`));\n } else if (!promise[CANCEL]) {\n console.warn('Worker does not have a cancel method implemented');\n } else {\n throw new Error(`Job with id ${jobId} not currently running`);\n }\n }\n private resetActiveJob = (job: RawJob) => {\n this.jobStore.updateJob({ ...job, ...{ active: FALSE } });\n };\n private async resetActiveJobs() {\n const activeMarkedJobs = await this.jobStore.getActiveMarkedJobs();\n const resetTasks = activeMarkedJobs.map(this.resetActiveJob);\n await Promise.all(resetTasks);\n }\n private scheduleQueue() {\n if (AppState.currentState === 'active' && Platform.OS === \"ios\") {\n this.timeoutId = setTimeout(this.runQueue, this.updateInterval);\n } else {\n this.runQueue();\n }\n }\n private runQueue = async () => {\n if (!this.isActive) {\n this.finishQueue();\n return;\n }\n const nextJob = await this.jobStore.getNextJob();\n if (this.isJobNotEmpty(nextJob)) {\n const nextJobs = await this.getJobsForWorker(nextJob.workerName);\n const processingJobs = nextJobs.map(async (job) => this.limitExecution(this.excuteJob, job));\n await Promise.all(processingJobs);\n } else if (!this.isExecuting()) {\n this.finishQueue();\n return;\n }\n this.scheduleQueue();\n };\n\n private isJobNotEmpty(rawJob: RawJob | {}) {\n return Object.keys(rawJob).length > 0;\n }\n\n private limitExecution = async (executer: (rawJob: RawJob) => Promise, rawJob: RawJob) => {\n return new Promise(async (resolve) => await this.enqueueJobExecuter(executer, resolve, rawJob));\n };\n\n private enqueueJobExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n if (this.isExecuterAvailable()) {\n await this.runExecuter(executer, resolve, rawJob);\n } else {\n this.queuedJobExecuter.push(this.runExecuter.bind(null, executer, resolve, rawJob));\n }\n };\n\n private runExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n try {\n await executer(rawJob);\n } finally {\n resolve(true);\n if (this.queuedJobExecuter.length > 0 && this.isExecuterAvailable()) {\n await this.queuedJobExecuter.shift()();\n }\n }\n };\n private isExecuterAvailable() {\n return this.concurrency <= 0 || this.activeJobCount < this.concurrency;\n }\n private isExecuting() {\n return this.activeJobCount > 0;\n }\n\n private finishQueue() {\n this.onQueueFinish(this.executedJobs);\n this.isActive = false;\n clearTimeout(this.timeoutId);\n }\n\n async getJobsForWorker(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n async getJobsForWorkerWithDeleted(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorkerWithDeleted(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n private async getJobsForAlternateWorker() {\n for (const workerName of Object.keys(this.workers)) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n let nextJobs: RawJob[] = [];\n if (!isBusy) {\n nextJobs = await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n }\n if (nextJobs.length > 0) {\n return nextJobs;\n }\n }\n return [];\n }\n\n private excuteJob = async (rawJob: RawJob) => {\n const worker = this.workers[rawJob.workerName];\n const payload = JSON.parse(rawJob.payload) as Worker;\n const job = { ...rawJob, ...{ payload } } as Job;\n\n try {\n job.status = \"processing\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.emitter.emit('jobStarted', job);\n\n this.activeJobCount++;\n if (!this.workers[rawJob.workerName]) {\n throw new Error(`Missing worker with name ${rawJob.workerName}`);\n }\n const promise = worker.execute(rawJob);\n\n this.runningJobPromises[rawJob.id] = promise;\n await promise;\n\n worker.triggerSuccess(job);\n job.status = \"finished\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.jobStore.removeJob(rawJob);\n this.emitter.emit('jobSucceeded', job);\n } catch (err) {\n const error = err as Error;\n const { attempts } = rawJob;\n // eslint-disable-next-line prefer-const\n let { errors, failedAttempts } = JSON.parse(rawJob.metaData) as { errors: string[]; failedAttempts: number };\n failedAttempts++;\n let failed = '';\n if (failedAttempts >= attempts) {\n failed = new Date().toISOString();\n }\n const metaData = JSON.stringify({ errors: [...errors, error], failedAttempts });\n worker.triggerFailure({ ...job, metaData, failed }, error);\n const failedJob = { ...rawJob, ...{ active: FALSE, metaData, failed, status: \"failed\" } } as RawJob;\n this.jobStore.updateJob(failedJob);\n this.emitter.emit('jobFailed', failedJob, error);\n } finally {\n delete this.runningJobPromises[job.id];\n worker.decreaseExecutionCount();\n worker.triggerCompletion(job);\n this.emitter.emit('jobCompleted', { ...job });\n this.executedJobs.push(rawJob);\n this.activeJobCount--;\n }\n };\n}\nexport default Queue.instance;\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["_reactNative","require","_Job","_Uuid","_Worker","_eventemitter","_interopRequireDefault","_Queue","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","Queue","EventEmitter","instance","queueInstance","isRunning","isActive","registeredWorkers","workers","constructor","job","jobStore","updateJob","active","FALSE","finishQueue","nextJob","getNextJob","isJobNotEmpty","nextJobs","getJobsForWorker","workerName","processingJobs","map","limitExecution","excuteJob","Promise","all","isExecuting","scheduleQueue","executer","rawJob","resolve","enqueueJobExecuter","isExecuterAvailable","runExecuter","queuedJobExecuter","push","bind","length","shift","worker","payload","JSON","parse","status","stringify","emit","activeJobCount","Error","promise","execute","runningJobPromises","id","triggerSuccess","removeJob","err","error","attempts","errors","failedAttempts","metaData","failed","Date","toISOString","triggerFailure","failedJob","decreaseExecutionCount","triggerCompletion","executedJobs","NativeModules","JobQueue","timeoutId","updateInterval","onQueueFinish","concurrency","getJobs","getJobsWithDeleted","removeJobPermanent","removeJobPermanently","requeueJob","configure","options","addWorker","name","removeWorker","deleteRelatedJobs","removeJobsByWorkerName","addJob","timeout","priority","startQueue","Uuid","v4","created","isDeleted","start","resetActiveJobs","stop","cancelJob","jobId","exception","undefined","CANCEL","console","warn","activeMarkedJobs","getActiveMarkedJobs","resetTasks","resetActiveJob","AppState","currentState","Platform","OS","setTimeout","runQueue","keys","clearTimeout","isBusy","availableExecuters","getJobsForAlternateWorker","getJobsForWorkerWithDeleted","exports","_default"],"sources":["Queue.ts"],"sourcesContent":["import { AppState, NativeModules, Platform } from 'react-native';\n\nimport { FALSE, Job, RawJob, JobStatus } from './models/Job';\nimport { JobStore } from './models/JobStore';\nimport { Uuid } from './utils/Uuid';\nimport { Worker, CANCEL, CancellablePromise } from './Worker';\n\n\nimport EventEmitter from 'eventemitter3';\n\n/**\n * Events emitted by the Queue.\n */\nexport interface QueueEvents {\n /**\n * Fired when a worker is added.\n * @param workerName Name of the worker.\n */\n workerAdded: (workerName: string) => void;\n\n /**\n * Fired when a job is added to the queue.\n * @param job The RawJob that was added.\n */\n jobAdded: (job: RawJob) => void;\n\n /**\n * Fired when a job starts processing.\n * @param job The RawJob that started.\n */\n jobStarted: (job: RawJob) => void;\n\n /**\n * Fired when a job completes successfully.\n * @param job The Job with payload that succeeded.\n */\n jobSucceeded: (job: Job) => void;\n\n /**\n * Fired when a job fails.\n * @param job The RawJob that failed.\n * @param error The error thrown.\n */\n jobFailed: (job: RawJob, error: Error) => void;\n\n /**\n * Fired when a job completes (regardless of success or failure).\n * @param job The RawJob that finished.\n */\n jobCompleted: (job: RawJob) => void;\n\n jobDeleted: (job: RawJob) => void\n}\n\n\n/**\n * Options to configure the queue\n */\nexport interface QueueOptions {\n /**\n * A callback function which is called after the queue has been stopped\n * @parameter executedJobs\n */\n onQueueFinish?: (executedJobs: Array>) => void;\n /**\n * Interval in which the queue checks for new jobs to execute\n */\n updateInterval?: number;\n concurrency?: number;\n}\n/**\n * ## Usage\n *\n * ```typescript\n * import queue from 'react-native-job-queue'\n *\n * queue.configure({onQueueFinish:(executedJobs:Job[])=>{\n * console.log(\"Queue stopped and executed\",executedJobs)\n * }});\n * queue.addWorker(new Worker(\"testWorker\",async(payload, id)=>{\n * return new Promise((resolve) => {\n * setTimeout(() => {\n * console.log('Executing jobId', id, 'with:', payload.text);\n * resolve();\n * }, payload.delay);});\n * }))\n * queue.addJob(\"testWorker\",{text:\"Job example payload content text\",delay:5000})\n * ```\n */\nexport class Queue extends EventEmitter {\n static get instance() {\n if (this.queueInstance) {\n return this.queueInstance;\n } else {\n this.queueInstance = new Queue();\n return this.queueInstance;\n }\n }\n /**\n * @returns true if the Queue is running and false otherwise\n */\n get isRunning() {\n return this.isActive;\n }\n /**\n * @returns the workers map (readonly)\n */\n get registeredWorkers() {\n return this.workers;\n }\n private static queueInstance: Queue | null;\n private emitter: EventEmitter = new EventEmitter();\n\n private jobStore: JobStore;\n private workers: { [key: string]: Worker };\n private isActive: boolean;\n\n private timeoutId: number;\n private executedJobs: Array>;\n private activeJobCount: number;\n\n private concurrency: number;\n private updateInterval: number;\n private onQueueFinish: (executedJobs: Array>) => void;\n\n private queuedJobExecuter: any[] = [];\n private runningJobPromises: { [key: string]: CancellablePromise };\n\n private constructor() {\n super();\n this.jobStore = NativeModules.JobQueue;\n this.workers = {};\n this.runningJobPromises = {};\n this.isActive = false;\n\n this.timeoutId = 0;\n this.executedJobs = [];\n this.activeJobCount = 0;\n\n this.updateInterval = 10;\n this.onQueueFinish = (executedJobs: Array>) => { };\n this.concurrency = -1;\n }\n\n\n\n /**\n * @returns a promise that resolves all jobs of jobStore\n */\n async getJobs() {\n return await this.jobStore.getJobs();\n }\n async getJobsWithDeleted() {\n return await this.jobStore.getJobsWithDeleted();\n }\n /**\n * @param job the job to be deleted\n */\n removeJob(job: RawJob) {\n this.jobStore.removeJob(job);\n this.emit(\"jobDeleted\", job)\n }\n removeJobPermanent(job: RawJob) {\n this.jobStore.removeJobPermanently(job);\n this.emit(\"jobDeleted\", job)\n }\n /**\n * @param job the job which should be requeued\n */\n requeueJob(job: RawJob) {\n return this.jobStore.updateJob({ ...job, failed: '' });\n }\n\n configure(options: QueueOptions) {\n const {\n onQueueFinish = (executedJobs: Array>) => { },\n updateInterval = 10,\n concurrency = -1,\n } = options;\n this.onQueueFinish = onQueueFinish;\n this.updateInterval = updateInterval;\n this.concurrency = concurrency;\n }\n /**\n * adds a [[Worker]] to the queue which can execute Jobs\n * @param worker\n */\n addWorker(worker: Worker) {\n if (this.workers[worker.name]) {\n throw new Error(`Worker \"${worker.name}\" already exists.`);\n }\n this.workers[worker.name] = worker;\n this.emit('workerAdded', worker.name);\n }\n\n /**\n * removes worker from queue\n *\n * @param name\n * @param [deleteRelatedJobs=false] removes all queued jobs releated to the worker if set to true\n */\n removeWorker(name: string, deleteRelatedJobs = false) {\n delete this.workers[name];\n if (deleteRelatedJobs) {\n this.jobStore.removeJobsByWorkerName(name);\n }\n }\n\n /**\n * adds a job to the queue\n * @param workerName name of the worker which should be used to excute the job\n * @param [payload={}] payload which is passed as parameter to the executer\n * @param [options={ attempts: 0, timeout: 0, priority: 0 }] options to set max attempts, a timeout and a priority\n * @param [startQueue=true] if set to false the queue won't start automaticly when adding a job\n * @returns job id\n */\n addJob

(\n workerName: string,\n payload: P,\n options = { attempts: 0, timeout: 0, priority: 0 },\n startQueue = true\n ) {\n const { attempts = 0, timeout = 0, priority = 0 } = options;\n const id: string = Uuid.v4();\n const job: RawJob = {\n id,\n payload: JSON.stringify(payload || {}),\n metaData: JSON.stringify({ failedAttempts: 0, errors: [] }),\n active: FALSE,\n created: new Date().toISOString(),\n failed: '',\n workerName,\n attempts,\n timeout,\n priority,\n isDeleted: false,\n status: \"idle\"\n };\n if (!this.workers[job.workerName]) {\n throw new Error(`Missing worker with name ${job.workerName}`);\n }\n\n this.jobStore.addJob(job);\n this.emit('jobAdded', job);\n if (startQueue && !this.isActive) {\n this.start();\n }\n\n return id;\n }\n /**\n * starts the queue to execute queued jobs\n */\n async start() {\n if (!this.isActive) {\n this.isActive = true;\n this.executedJobs = [];\n await this.resetActiveJobs();\n this.scheduleQueue();\n }\n }\n /**\n * stop the queue from executing queued jobs\n */\n stop() {\n this.isActive = false;\n }\n\n /**\n * cancel running job\n */\n cancelJob(jobId: string, exception?: Error) {\n const promise = this.runningJobPromises[jobId];\n if (promise !== undefined && typeof promise[CANCEL] === 'function') {\n promise[CANCEL](exception || new Error(`canceled`));\n } else if (!promise[CANCEL]) {\n console.warn('Worker does not have a cancel method implemented');\n } else {\n throw new Error(`Job with id ${jobId} not currently running`);\n }\n }\n private resetActiveJob = (job: RawJob) => {\n this.jobStore.updateJob({ ...job, ...{ active: FALSE } });\n };\n private async resetActiveJobs() {\n const activeMarkedJobs = await this.jobStore.getActiveMarkedJobs();\n const resetTasks = activeMarkedJobs.map(this.resetActiveJob);\n await Promise.all(resetTasks);\n }\n private scheduleQueue() {\n if (AppState.currentState === 'active' && Platform.OS === \"ios\") {\n this.timeoutId = setTimeout(this.runQueue, this.updateInterval);\n } else {\n this.runQueue();\n }\n }\n private runQueue = async () => {\n if (!this.isActive) {\n this.finishQueue();\n return;\n }\n const nextJob = await this.jobStore.getNextJob();\n if (this.isJobNotEmpty(nextJob)) {\n const nextJobs = await this.getJobsForWorker(nextJob.workerName);\n const processingJobs = nextJobs.map(async (job) => this.limitExecution(this.excuteJob, job));\n await Promise.all(processingJobs);\n } else if (!this.isExecuting()) {\n this.finishQueue();\n return;\n }\n this.scheduleQueue();\n };\n\n private isJobNotEmpty(rawJob: RawJob | {}) {\n return Object.keys(rawJob).length > 0;\n }\n\n private limitExecution = async (executer: (rawJob: RawJob) => Promise, rawJob: RawJob) => {\n return new Promise(async (resolve) => await this.enqueueJobExecuter(executer, resolve, rawJob));\n };\n\n private enqueueJobExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n if (this.isExecuterAvailable()) {\n await this.runExecuter(executer, resolve, rawJob);\n } else {\n this.queuedJobExecuter.push(this.runExecuter.bind(null, executer, resolve, rawJob));\n }\n };\n\n private runExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n try {\n await executer(rawJob);\n } finally {\n resolve(true);\n if (this.queuedJobExecuter.length > 0 && this.isExecuterAvailable()) {\n await this.queuedJobExecuter.shift()();\n }\n }\n };\n private isExecuterAvailable() {\n return this.concurrency <= 0 || this.activeJobCount < this.concurrency;\n }\n private isExecuting() {\n return this.activeJobCount > 0;\n }\n\n private finishQueue() {\n this.onQueueFinish(this.executedJobs);\n this.isActive = false;\n clearTimeout(this.timeoutId);\n }\n\n async getJobsForWorker(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n async getJobsForWorkerWithDeleted(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorkerWithDeleted(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n private async getJobsForAlternateWorker() {\n for (const workerName of Object.keys(this.workers)) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n let nextJobs: RawJob[] = [];\n if (!isBusy) {\n nextJobs = await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n }\n if (nextJobs.length > 0) {\n return nextJobs;\n }\n }\n return [];\n }\n\n private excuteJob = async (rawJob: RawJob) => {\n const worker = this.workers[rawJob.workerName];\n const payload = JSON.parse(rawJob.payload) as Worker;\n const job = { ...rawJob, ...{ payload } } as Job;\n\n try {\n job.status = \"processing\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.emit('jobStarted', job);\n\n this.activeJobCount++;\n if (!this.workers[rawJob.workerName]) {\n throw new Error(`Missing worker with name ${rawJob.workerName}`);\n }\n const promise = worker.execute(rawJob);\n\n this.runningJobPromises[rawJob.id] = promise;\n await promise;\n\n worker.triggerSuccess(job);\n job.status = \"finished\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.jobStore.removeJob(rawJob);\n this.emit('jobSucceeded', job);\n } catch (err) {\n const error = err as Error;\n const { attempts } = rawJob;\n // eslint-disable-next-line prefer-const\n let { errors, failedAttempts } = JSON.parse(rawJob.metaData) as { errors: string[]; failedAttempts: number };\n failedAttempts++;\n let failed = '';\n if (failedAttempts >= attempts) {\n failed = new Date().toISOString();\n }\n const metaData = JSON.stringify({ errors: [...errors, error], failedAttempts });\n worker.triggerFailure({ ...job, metaData, failed }, error);\n const failedJob = { ...rawJob, ...{ active: FALSE, metaData, failed, status: \"failed\" } } as RawJob;\n this.jobStore.updateJob(failedJob);\n this.emit('jobFailed', failedJob, error);\n } finally {\n delete this.runningJobPromises[job.id];\n worker.decreaseExecutionCount();\n worker.triggerCompletion(job);\n this.emit('jobCompleted', { ...job });\n this.executedJobs.push(rawJob);\n this.activeJobCount--;\n }\n };\n}\nexport default Queue.instance;\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/lib/commonjs/hooks/useQueue.js b/lib/commonjs/hooks/useQueue.js index f15219d..baace7e 100644 --- a/lib/commonjs/hooks/useQueue.js +++ b/lib/commonjs/hooks/useQueue.js @@ -70,19 +70,19 @@ function useQueue() { }; // Subscribe - _Queue.default.on('jobAdded', onJobAdded); - _Queue.default.on('jobStarted', onJobStarted); - _Queue.default.on('jobFailed', onJobFailed); - _Queue.default.on('jobSucceeded', onJobSucceeded); - _Queue.default.on('jobDeleted', onJobSucceeded); + _Queue.default.addListener('jobAdded', onJobAdded); + _Queue.default.addListener('jobStarted', onJobStarted); + _Queue.default.addListener('jobFailed', onJobFailed); + _Queue.default.addListener('jobSucceeded', onJobSucceeded); + _Queue.default.addListener('jobDeleted', onJobDeleted); // Cleanup return () => { - _Queue.default.off('jobAdded', onJobAdded); - _Queue.default.off('jobStarted', onJobStarted); - _Queue.default.off('jobFailed', onJobFailed); - _Queue.default.off('jobSucceeded', onJobSucceeded); - _Queue.default.off('jobDeleted', onJobDeleted); + _Queue.default.removeListener('jobAdded', onJobAdded); + _Queue.default.removeListener('jobStarted', onJobStarted); + _Queue.default.removeListener('jobFailed', onJobFailed); + _Queue.default.removeListener('jobSucceeded', onJobSucceeded); + _Queue.default.removeListener('jobDeleted', onJobDeleted); }; }, [refreshJobs]); return { diff --git a/lib/commonjs/hooks/useQueue.js.map b/lib/commonjs/hooks/useQueue.js.map index 5f9e63e..18b8730 100644 --- a/lib/commonjs/hooks/useQueue.js.map +++ b/lib/commonjs/hooks/useQueue.js.map @@ -1 +1 @@ -{"version":3,"names":["_react","require","_Queue","_interopRequireDefault","e","__esModule","default","useQueue","activeJobs","setActiveJobs","useState","lastCompletedJobs","setLastCompletedJobs","queuedCount","useMemo","filter","j","status","length","activeCount","failedCount","completedCount","refreshJobs","useCallback","all","queue","getJobs","allWithDeleted","getJobsWithDeleted","completed","isDeleted","useEffect","onJobAdded","job","prev","onJobStarted","map","id","onJobFailed","onJobSucceeded","onJobDeleted","on","off"],"sources":["useQueue.tsx"],"sourcesContent":["// src/hooks/useQueue.tsx\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport queue from '../Queue';\nimport { RawJob } from '../models/Job';\nimport { Job } from '../models/Job';\n\nexport interface UseQueueState {\n queuedCount: number;\n activeCount: number;\n failedCount: number;\n completedCount: number;\n activeJobs: RawJob[];\n lastCompletedJobs: RawJob[];\n refreshJobs: () => Promise;\n}\n\n/**\n * useQueue hook\n *\n * Tracks the queue state:\n * - queuedCount: number of jobs waiting to start (status === 'idle')\n * - activeCount: number of jobs currently processing\n * - failedCount: number of jobs that have failed\n * - completedCount: number of jobs that have completed successfully\n * - activeJobs: list of current non-deleted jobs\n * - lastCompletedJobs: list of jobs marked as deleted (completed)\n */\nexport function useQueue(): UseQueueState {\n const [activeJobs, setActiveJobs] = useState([]);\n const [lastCompletedJobs, setLastCompletedJobs] = useState([]);\n\n // Derive counts from job statuses\n const queuedCount = useMemo(() => activeJobs.filter((j) => j.status === 'idle').length, [activeJobs]);\n const activeCount = useMemo(() => activeJobs.filter((j) => j.status === 'processing').length, [activeJobs]);\n const failedCount = useMemo(() => activeJobs.filter((j) => j.status === 'failed').length, [activeJobs]);\n const completedCount = useMemo(() => lastCompletedJobs.length, [lastCompletedJobs]);\n\n // Yığın içindeki işleri güncelle\n const refreshJobs = useCallback(async () => {\n const all = await queue.getJobs();\n const allWithDeleted = await queue.getJobsWithDeleted();\n const completed = allWithDeleted.filter((j) => j.isDeleted);\n setLastCompletedJobs(completed);\n\n setActiveJobs(all);\n }, []);\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n refreshJobs();\n\n // Event listener tanımları\n const onJobAdded = (job: RawJob) => {\n setActiveJobs((prev) => [...prev, job]);\n };\n const onJobStarted = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobFailed = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobSucceeded = (job: Job) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => [...prev, { ...job }]);\n };\n const onJobDeleted = (job: RawJob) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => prev.filter((j) => j.id !== job.id));\n };\n\n // Subscribe\n queue.on('jobAdded', onJobAdded);\n queue.on('jobStarted', onJobStarted);\n queue.on('jobFailed', onJobFailed);\n queue.on('jobSucceeded', onJobSucceeded);\n queue.on('jobDeleted', onJobSucceeded);\n\n // Cleanup\n return () => {\n queue.off('jobAdded', onJobAdded);\n queue.off('jobStarted', onJobStarted);\n queue.off('jobFailed', onJobFailed);\n queue.off('jobSucceeded', onJobSucceeded);\n queue.off('jobDeleted', onJobDeleted);\n };\n }, [refreshJobs]);\n\n return {\n queuedCount,\n activeCount,\n failedCount,\n completedCount,\n activeJobs,\n lastCompletedJobs,\n refreshJobs,\n };\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["_react","require","_Queue","_interopRequireDefault","e","__esModule","default","useQueue","activeJobs","setActiveJobs","useState","lastCompletedJobs","setLastCompletedJobs","queuedCount","useMemo","filter","j","status","length","activeCount","failedCount","completedCount","refreshJobs","useCallback","all","queue","getJobs","allWithDeleted","getJobsWithDeleted","completed","isDeleted","useEffect","onJobAdded","job","prev","onJobStarted","map","id","onJobFailed","onJobSucceeded","onJobDeleted","addListener","removeListener"],"sources":["useQueue.tsx"],"sourcesContent":["// src/hooks/useQueue.tsx\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport queue from '../Queue';\nimport { RawJob } from '../models/Job';\nimport { Job } from '../models/Job';\n\nexport interface UseQueueState {\n queuedCount: number;\n activeCount: number;\n failedCount: number;\n completedCount: number;\n activeJobs: RawJob[];\n lastCompletedJobs: RawJob[];\n refreshJobs: () => Promise;\n}\n\n/**\n * useQueue hook\n *\n * Tracks the queue state:\n * - queuedCount: number of jobs waiting to start (status === 'idle')\n * - activeCount: number of jobs currently processing\n * - failedCount: number of jobs that have failed\n * - completedCount: number of jobs that have completed successfully\n * - activeJobs: list of current non-deleted jobs\n * - lastCompletedJobs: list of jobs marked as deleted (completed)\n */\nexport function useQueue(): UseQueueState {\n const [activeJobs, setActiveJobs] = useState([]);\n const [lastCompletedJobs, setLastCompletedJobs] = useState([]);\n\n // Derive counts from job statuses\n const queuedCount = useMemo(() => activeJobs.filter((j) => j.status === 'idle').length, [activeJobs]);\n const activeCount = useMemo(() => activeJobs.filter((j) => j.status === 'processing').length, [activeJobs]);\n const failedCount = useMemo(() => activeJobs.filter((j) => j.status === 'failed').length, [activeJobs]);\n const completedCount = useMemo(() => lastCompletedJobs.length, [lastCompletedJobs]);\n\n // Yığın içindeki işleri güncelle\n const refreshJobs = useCallback(async () => {\n const all = await queue.getJobs();\n const allWithDeleted = await queue.getJobsWithDeleted();\n const completed = allWithDeleted.filter((j) => j.isDeleted);\n setLastCompletedJobs(completed);\n\n setActiveJobs(all);\n }, []);\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n refreshJobs();\n\n // Event listener tanımları\n const onJobAdded = (job: RawJob) => {\n setActiveJobs((prev) => [...prev, job]);\n };\n const onJobStarted = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobFailed = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobSucceeded = (job: Job) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => [...prev, { ...job }]);\n };\n const onJobDeleted = (job: RawJob) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => prev.filter((j) => j.id !== job.id));\n };\n\n // Subscribe\n queue.addListener('jobAdded', onJobAdded);\n queue.addListener('jobStarted', onJobStarted);\n queue.addListener('jobFailed', onJobFailed);\n queue.addListener('jobSucceeded', onJobSucceeded);\n queue.addListener('jobDeleted', onJobDeleted);\n\n // Cleanup\n return () => {\n queue.removeListener('jobAdded', onJobAdded);\n queue.removeListener('jobStarted', onJobStarted);\n queue.removeListener('jobFailed', onJobFailed);\n queue.removeListener('jobSucceeded', onJobSucceeded);\n queue.removeListener('jobDeleted', onJobDeleted);\n };\n }, [refreshJobs]);\n\n return {\n queuedCount,\n activeCount,\n failedCount,\n completedCount,\n activeJobs,\n lastCompletedJobs,\n refreshJobs,\n };\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/lib/module/Queue.js b/lib/module/Queue.js index bdb516b..f32567a 100644 --- a/lib/module/Queue.js +++ b/lib/module/Queue.js @@ -129,7 +129,7 @@ export class Queue extends EventEmitter { ...job, payload: JSON.stringify(payload) }); - this.emitter.emit('jobStarted', job); + this.emit('jobStarted', job); this.activeJobCount++; if (!this.workers[rawJob.workerName]) { throw new Error(`Missing worker with name ${rawJob.workerName}`); @@ -144,7 +144,7 @@ export class Queue extends EventEmitter { payload: JSON.stringify(payload) }); this.jobStore.removeJob(rawJob); - this.emitter.emit('jobSucceeded', job); + this.emit('jobSucceeded', job); } catch (err) { const error = err; const { @@ -179,12 +179,12 @@ export class Queue extends EventEmitter { } }; this.jobStore.updateJob(failedJob); - this.emitter.emit('jobFailed', failedJob, error); + this.emit('jobFailed', failedJob, error); } finally { delete this.runningJobPromises[job.id]; worker.decreaseExecutionCount(); worker.triggerCompletion(job); - this.emitter.emit('jobCompleted', { + this.emit('jobCompleted', { ...job }); this.executedJobs.push(rawJob); @@ -251,7 +251,7 @@ export class Queue extends EventEmitter { throw new Error(`Worker "${worker.name}" already exists.`); } this.workers[worker.name] = worker; - this.emitter.emit('workerAdded', worker.name); + this.emit('workerAdded', worker.name); } /** @@ -307,7 +307,7 @@ export class Queue extends EventEmitter { throw new Error(`Missing worker with name ${job.workerName}`); } this.jobStore.addJob(job); - this.emitter.emit('jobAdded', job); + this.emit('jobAdded', job); if (startQueue && !this.isActive) { this.start(); } diff --git a/lib/module/Queue.js.map b/lib/module/Queue.js.map index 5cc3cba..69a3223 100644 --- a/lib/module/Queue.js.map +++ b/lib/module/Queue.js.map @@ -1 +1 @@ -{"version":3,"names":["AppState","NativeModules","Platform","FALSE","Uuid","CANCEL","EventEmitter","Queue","instance","queueInstance","isRunning","isActive","registeredWorkers","workers","constructor","_defineProperty","job","jobStore","updateJob","active","finishQueue","nextJob","getNextJob","isJobNotEmpty","nextJobs","getJobsForWorker","workerName","processingJobs","map","limitExecution","excuteJob","Promise","all","isExecuting","scheduleQueue","executer","rawJob","resolve","enqueueJobExecuter","isExecuterAvailable","runExecuter","queuedJobExecuter","push","bind","length","shift","worker","payload","JSON","parse","status","stringify","emitter","emit","activeJobCount","Error","promise","execute","runningJobPromises","id","triggerSuccess","removeJob","err","error","attempts","errors","failedAttempts","metaData","failed","Date","toISOString","triggerFailure","failedJob","decreaseExecutionCount","triggerCompletion","executedJobs","JobQueue","timeoutId","updateInterval","onQueueFinish","concurrency","getJobs","getJobsWithDeleted","removeJobPermanent","removeJobPermanently","requeueJob","configure","options","addWorker","name","removeWorker","deleteRelatedJobs","removeJobsByWorkerName","addJob","timeout","priority","startQueue","v4","created","isDeleted","start","resetActiveJobs","stop","cancelJob","jobId","exception","undefined","console","warn","activeMarkedJobs","getActiveMarkedJobs","resetTasks","resetActiveJob","currentState","OS","setTimeout","runQueue","Object","keys","clearTimeout","isBusy","availableExecuters","getJobsForAlternateWorker","getJobsForWorkerWithDeleted","_Queue"],"sources":["Queue.ts"],"sourcesContent":["import { AppState, NativeModules, Platform } from 'react-native';\n\nimport { FALSE, Job, RawJob, JobStatus } from './models/Job';\nimport { JobStore } from './models/JobStore';\nimport { Uuid } from './utils/Uuid';\nimport { Worker, CANCEL, CancellablePromise } from './Worker';\n\n\nimport EventEmitter from 'eventemitter3';\n\n/**\n * Events emitted by the Queue.\n */\nexport interface QueueEvents {\n /**\n * Fired when a worker is added.\n * @param workerName Name of the worker.\n */\n workerAdded: (workerName: string) => void;\n\n /**\n * Fired when a job is added to the queue.\n * @param job The RawJob that was added.\n */\n jobAdded: (job: RawJob) => void;\n\n /**\n * Fired when a job starts processing.\n * @param job The RawJob that started.\n */\n jobStarted: (job: RawJob) => void;\n\n /**\n * Fired when a job completes successfully.\n * @param job The Job with payload that succeeded.\n */\n jobSucceeded: (job: Job) => void;\n\n /**\n * Fired when a job fails.\n * @param job The RawJob that failed.\n * @param error The error thrown.\n */\n jobFailed: (job: RawJob, error: Error) => void;\n\n /**\n * Fired when a job completes (regardless of success or failure).\n * @param job The RawJob that finished.\n */\n jobCompleted: (job: RawJob) => void;\n\n jobDeleted: (job: RawJob) => void\n}\n\n\n/**\n * Options to configure the queue\n */\nexport interface QueueOptions {\n /**\n * A callback function which is called after the queue has been stopped\n * @parameter executedJobs\n */\n onQueueFinish?: (executedJobs: Array>) => void;\n /**\n * Interval in which the queue checks for new jobs to execute\n */\n updateInterval?: number;\n concurrency?: number;\n}\n/**\n * ## Usage\n *\n * ```typescript\n * import queue from 'react-native-job-queue'\n *\n * queue.configure({onQueueFinish:(executedJobs:Job[])=>{\n * console.log(\"Queue stopped and executed\",executedJobs)\n * }});\n * queue.addWorker(new Worker(\"testWorker\",async(payload, id)=>{\n * return new Promise((resolve) => {\n * setTimeout(() => {\n * console.log('Executing jobId', id, 'with:', payload.text);\n * resolve();\n * }, payload.delay);});\n * }))\n * queue.addJob(\"testWorker\",{text:\"Job example payload content text\",delay:5000})\n * ```\n */\nexport class Queue extends EventEmitter {\n static get instance() {\n if (this.queueInstance) {\n return this.queueInstance;\n } else {\n this.queueInstance = new Queue();\n return this.queueInstance;\n }\n }\n /**\n * @returns true if the Queue is running and false otherwise\n */\n get isRunning() {\n return this.isActive;\n }\n /**\n * @returns the workers map (readonly)\n */\n get registeredWorkers() {\n return this.workers;\n }\n private static queueInstance: Queue | null;\n private emitter: EventEmitter = new EventEmitter();\n\n private jobStore: JobStore;\n private workers: { [key: string]: Worker };\n private isActive: boolean;\n\n private timeoutId: number;\n private executedJobs: Array>;\n private activeJobCount: number;\n\n private concurrency: number;\n private updateInterval: number;\n private onQueueFinish: (executedJobs: Array>) => void;\n\n private queuedJobExecuter: any[] = [];\n private runningJobPromises: { [key: string]: CancellablePromise };\n\n private constructor() {\n super();\n this.jobStore = NativeModules.JobQueue;\n this.workers = {};\n this.runningJobPromises = {};\n this.isActive = false;\n\n this.timeoutId = 0;\n this.executedJobs = [];\n this.activeJobCount = 0;\n\n this.updateInterval = 10;\n this.onQueueFinish = (executedJobs: Array>) => { };\n this.concurrency = -1;\n }\n\n\n\n /**\n * @returns a promise that resolves all jobs of jobStore\n */\n async getJobs() {\n return await this.jobStore.getJobs();\n }\n async getJobsWithDeleted() {\n return await this.jobStore.getJobsWithDeleted();\n }\n /**\n * @param job the job to be deleted\n */\n removeJob(job: RawJob) {\n this.jobStore.removeJob(job);\n this.emit(\"jobDeleted\", job)\n }\n removeJobPermanent(job: RawJob) {\n this.jobStore.removeJobPermanently(job);\n this.emit(\"jobDeleted\", job)\n }\n /**\n * @param job the job which should be requeued\n */\n requeueJob(job: RawJob) {\n return this.jobStore.updateJob({ ...job, failed: '' });\n }\n\n configure(options: QueueOptions) {\n const {\n onQueueFinish = (executedJobs: Array>) => { },\n updateInterval = 10,\n concurrency = -1,\n } = options;\n this.onQueueFinish = onQueueFinish;\n this.updateInterval = updateInterval;\n this.concurrency = concurrency;\n }\n /**\n * adds a [[Worker]] to the queue which can execute Jobs\n * @param worker\n */\n addWorker(worker: Worker) {\n if (this.workers[worker.name]) {\n throw new Error(`Worker \"${worker.name}\" already exists.`);\n }\n this.workers[worker.name] = worker;\n this.emitter.emit('workerAdded', worker.name);\n }\n\n /**\n * removes worker from queue\n *\n * @param name\n * @param [deleteRelatedJobs=false] removes all queued jobs releated to the worker if set to true\n */\n removeWorker(name: string, deleteRelatedJobs = false) {\n delete this.workers[name];\n if (deleteRelatedJobs) {\n this.jobStore.removeJobsByWorkerName(name);\n }\n }\n\n /**\n * adds a job to the queue\n * @param workerName name of the worker which should be used to excute the job\n * @param [payload={}] payload which is passed as parameter to the executer\n * @param [options={ attempts: 0, timeout: 0, priority: 0 }] options to set max attempts, a timeout and a priority\n * @param [startQueue=true] if set to false the queue won't start automaticly when adding a job\n * @returns job id\n */\n addJob

(\n workerName: string,\n payload: P,\n options = { attempts: 0, timeout: 0, priority: 0 },\n startQueue = true\n ) {\n const { attempts = 0, timeout = 0, priority = 0 } = options;\n const id: string = Uuid.v4();\n const job: RawJob = {\n id,\n payload: JSON.stringify(payload || {}),\n metaData: JSON.stringify({ failedAttempts: 0, errors: [] }),\n active: FALSE,\n created: new Date().toISOString(),\n failed: '',\n workerName,\n attempts,\n timeout,\n priority,\n isDeleted: false,\n status: \"idle\"\n };\n if (!this.workers[job.workerName]) {\n throw new Error(`Missing worker with name ${job.workerName}`);\n }\n\n this.jobStore.addJob(job);\n this.emitter.emit('jobAdded', job);\n if (startQueue && !this.isActive) {\n this.start();\n }\n\n return id;\n }\n /**\n * starts the queue to execute queued jobs\n */\n async start() {\n if (!this.isActive) {\n this.isActive = true;\n this.executedJobs = [];\n await this.resetActiveJobs();\n this.scheduleQueue();\n }\n }\n /**\n * stop the queue from executing queued jobs\n */\n stop() {\n this.isActive = false;\n }\n\n /**\n * cancel running job\n */\n cancelJob(jobId: string, exception?: Error) {\n const promise = this.runningJobPromises[jobId];\n if (promise !== undefined && typeof promise[CANCEL] === 'function') {\n promise[CANCEL](exception || new Error(`canceled`));\n } else if (!promise[CANCEL]) {\n console.warn('Worker does not have a cancel method implemented');\n } else {\n throw new Error(`Job with id ${jobId} not currently running`);\n }\n }\n private resetActiveJob = (job: RawJob) => {\n this.jobStore.updateJob({ ...job, ...{ active: FALSE } });\n };\n private async resetActiveJobs() {\n const activeMarkedJobs = await this.jobStore.getActiveMarkedJobs();\n const resetTasks = activeMarkedJobs.map(this.resetActiveJob);\n await Promise.all(resetTasks);\n }\n private scheduleQueue() {\n if (AppState.currentState === 'active' && Platform.OS === \"ios\") {\n this.timeoutId = setTimeout(this.runQueue, this.updateInterval);\n } else {\n this.runQueue();\n }\n }\n private runQueue = async () => {\n if (!this.isActive) {\n this.finishQueue();\n return;\n }\n const nextJob = await this.jobStore.getNextJob();\n if (this.isJobNotEmpty(nextJob)) {\n const nextJobs = await this.getJobsForWorker(nextJob.workerName);\n const processingJobs = nextJobs.map(async (job) => this.limitExecution(this.excuteJob, job));\n await Promise.all(processingJobs);\n } else if (!this.isExecuting()) {\n this.finishQueue();\n return;\n }\n this.scheduleQueue();\n };\n\n private isJobNotEmpty(rawJob: RawJob | {}) {\n return Object.keys(rawJob).length > 0;\n }\n\n private limitExecution = async (executer: (rawJob: RawJob) => Promise, rawJob: RawJob) => {\n return new Promise(async (resolve) => await this.enqueueJobExecuter(executer, resolve, rawJob));\n };\n\n private enqueueJobExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n if (this.isExecuterAvailable()) {\n await this.runExecuter(executer, resolve, rawJob);\n } else {\n this.queuedJobExecuter.push(this.runExecuter.bind(null, executer, resolve, rawJob));\n }\n };\n\n private runExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n try {\n await executer(rawJob);\n } finally {\n resolve(true);\n if (this.queuedJobExecuter.length > 0 && this.isExecuterAvailable()) {\n await this.queuedJobExecuter.shift()();\n }\n }\n };\n private isExecuterAvailable() {\n return this.concurrency <= 0 || this.activeJobCount < this.concurrency;\n }\n private isExecuting() {\n return this.activeJobCount > 0;\n }\n\n private finishQueue() {\n this.onQueueFinish(this.executedJobs);\n this.isActive = false;\n clearTimeout(this.timeoutId);\n }\n\n async getJobsForWorker(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n async getJobsForWorkerWithDeleted(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorkerWithDeleted(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n private async getJobsForAlternateWorker() {\n for (const workerName of Object.keys(this.workers)) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n let nextJobs: RawJob[] = [];\n if (!isBusy) {\n nextJobs = await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n }\n if (nextJobs.length > 0) {\n return nextJobs;\n }\n }\n return [];\n }\n\n private excuteJob = async (rawJob: RawJob) => {\n const worker = this.workers[rawJob.workerName];\n const payload = JSON.parse(rawJob.payload) as Worker;\n const job = { ...rawJob, ...{ payload } } as Job;\n\n try {\n job.status = \"processing\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.emitter.emit('jobStarted', job);\n\n this.activeJobCount++;\n if (!this.workers[rawJob.workerName]) {\n throw new Error(`Missing worker with name ${rawJob.workerName}`);\n }\n const promise = worker.execute(rawJob);\n\n this.runningJobPromises[rawJob.id] = promise;\n await promise;\n\n worker.triggerSuccess(job);\n job.status = \"finished\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.jobStore.removeJob(rawJob);\n this.emitter.emit('jobSucceeded', job);\n } catch (err) {\n const error = err as Error;\n const { attempts } = rawJob;\n // eslint-disable-next-line prefer-const\n let { errors, failedAttempts } = JSON.parse(rawJob.metaData) as { errors: string[]; failedAttempts: number };\n failedAttempts++;\n let failed = '';\n if (failedAttempts >= attempts) {\n failed = new Date().toISOString();\n }\n const metaData = JSON.stringify({ errors: [...errors, error], failedAttempts });\n worker.triggerFailure({ ...job, metaData, failed }, error);\n const failedJob = { ...rawJob, ...{ active: FALSE, metaData, failed, status: \"failed\" } } as RawJob;\n this.jobStore.updateJob(failedJob);\n this.emitter.emit('jobFailed', failedJob, error);\n } finally {\n delete this.runningJobPromises[job.id];\n worker.decreaseExecutionCount();\n worker.triggerCompletion(job);\n this.emitter.emit('jobCompleted', { ...job });\n this.executedJobs.push(rawJob);\n this.activeJobCount--;\n }\n };\n}\nexport default Queue.instance;\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["AppState","NativeModules","Platform","FALSE","Uuid","CANCEL","EventEmitter","Queue","instance","queueInstance","isRunning","isActive","registeredWorkers","workers","constructor","_defineProperty","job","jobStore","updateJob","active","finishQueue","nextJob","getNextJob","isJobNotEmpty","nextJobs","getJobsForWorker","workerName","processingJobs","map","limitExecution","excuteJob","Promise","all","isExecuting","scheduleQueue","executer","rawJob","resolve","enqueueJobExecuter","isExecuterAvailable","runExecuter","queuedJobExecuter","push","bind","length","shift","worker","payload","JSON","parse","status","stringify","emit","activeJobCount","Error","promise","execute","runningJobPromises","id","triggerSuccess","removeJob","err","error","attempts","errors","failedAttempts","metaData","failed","Date","toISOString","triggerFailure","failedJob","decreaseExecutionCount","triggerCompletion","executedJobs","JobQueue","timeoutId","updateInterval","onQueueFinish","concurrency","getJobs","getJobsWithDeleted","removeJobPermanent","removeJobPermanently","requeueJob","configure","options","addWorker","name","removeWorker","deleteRelatedJobs","removeJobsByWorkerName","addJob","timeout","priority","startQueue","v4","created","isDeleted","start","resetActiveJobs","stop","cancelJob","jobId","exception","undefined","console","warn","activeMarkedJobs","getActiveMarkedJobs","resetTasks","resetActiveJob","currentState","OS","setTimeout","runQueue","Object","keys","clearTimeout","isBusy","availableExecuters","getJobsForAlternateWorker","getJobsForWorkerWithDeleted","_Queue"],"sources":["Queue.ts"],"sourcesContent":["import { AppState, NativeModules, Platform } from 'react-native';\n\nimport { FALSE, Job, RawJob, JobStatus } from './models/Job';\nimport { JobStore } from './models/JobStore';\nimport { Uuid } from './utils/Uuid';\nimport { Worker, CANCEL, CancellablePromise } from './Worker';\n\n\nimport EventEmitter from 'eventemitter3';\n\n/**\n * Events emitted by the Queue.\n */\nexport interface QueueEvents {\n /**\n * Fired when a worker is added.\n * @param workerName Name of the worker.\n */\n workerAdded: (workerName: string) => void;\n\n /**\n * Fired when a job is added to the queue.\n * @param job The RawJob that was added.\n */\n jobAdded: (job: RawJob) => void;\n\n /**\n * Fired when a job starts processing.\n * @param job The RawJob that started.\n */\n jobStarted: (job: RawJob) => void;\n\n /**\n * Fired when a job completes successfully.\n * @param job The Job with payload that succeeded.\n */\n jobSucceeded: (job: Job) => void;\n\n /**\n * Fired when a job fails.\n * @param job The RawJob that failed.\n * @param error The error thrown.\n */\n jobFailed: (job: RawJob, error: Error) => void;\n\n /**\n * Fired when a job completes (regardless of success or failure).\n * @param job The RawJob that finished.\n */\n jobCompleted: (job: RawJob) => void;\n\n jobDeleted: (job: RawJob) => void\n}\n\n\n/**\n * Options to configure the queue\n */\nexport interface QueueOptions {\n /**\n * A callback function which is called after the queue has been stopped\n * @parameter executedJobs\n */\n onQueueFinish?: (executedJobs: Array>) => void;\n /**\n * Interval in which the queue checks for new jobs to execute\n */\n updateInterval?: number;\n concurrency?: number;\n}\n/**\n * ## Usage\n *\n * ```typescript\n * import queue from 'react-native-job-queue'\n *\n * queue.configure({onQueueFinish:(executedJobs:Job[])=>{\n * console.log(\"Queue stopped and executed\",executedJobs)\n * }});\n * queue.addWorker(new Worker(\"testWorker\",async(payload, id)=>{\n * return new Promise((resolve) => {\n * setTimeout(() => {\n * console.log('Executing jobId', id, 'with:', payload.text);\n * resolve();\n * }, payload.delay);});\n * }))\n * queue.addJob(\"testWorker\",{text:\"Job example payload content text\",delay:5000})\n * ```\n */\nexport class Queue extends EventEmitter {\n static get instance() {\n if (this.queueInstance) {\n return this.queueInstance;\n } else {\n this.queueInstance = new Queue();\n return this.queueInstance;\n }\n }\n /**\n * @returns true if the Queue is running and false otherwise\n */\n get isRunning() {\n return this.isActive;\n }\n /**\n * @returns the workers map (readonly)\n */\n get registeredWorkers() {\n return this.workers;\n }\n private static queueInstance: Queue | null;\n private emitter: EventEmitter = new EventEmitter();\n\n private jobStore: JobStore;\n private workers: { [key: string]: Worker };\n private isActive: boolean;\n\n private timeoutId: number;\n private executedJobs: Array>;\n private activeJobCount: number;\n\n private concurrency: number;\n private updateInterval: number;\n private onQueueFinish: (executedJobs: Array>) => void;\n\n private queuedJobExecuter: any[] = [];\n private runningJobPromises: { [key: string]: CancellablePromise };\n\n private constructor() {\n super();\n this.jobStore = NativeModules.JobQueue;\n this.workers = {};\n this.runningJobPromises = {};\n this.isActive = false;\n\n this.timeoutId = 0;\n this.executedJobs = [];\n this.activeJobCount = 0;\n\n this.updateInterval = 10;\n this.onQueueFinish = (executedJobs: Array>) => { };\n this.concurrency = -1;\n }\n\n\n\n /**\n * @returns a promise that resolves all jobs of jobStore\n */\n async getJobs() {\n return await this.jobStore.getJobs();\n }\n async getJobsWithDeleted() {\n return await this.jobStore.getJobsWithDeleted();\n }\n /**\n * @param job the job to be deleted\n */\n removeJob(job: RawJob) {\n this.jobStore.removeJob(job);\n this.emit(\"jobDeleted\", job)\n }\n removeJobPermanent(job: RawJob) {\n this.jobStore.removeJobPermanently(job);\n this.emit(\"jobDeleted\", job)\n }\n /**\n * @param job the job which should be requeued\n */\n requeueJob(job: RawJob) {\n return this.jobStore.updateJob({ ...job, failed: '' });\n }\n\n configure(options: QueueOptions) {\n const {\n onQueueFinish = (executedJobs: Array>) => { },\n updateInterval = 10,\n concurrency = -1,\n } = options;\n this.onQueueFinish = onQueueFinish;\n this.updateInterval = updateInterval;\n this.concurrency = concurrency;\n }\n /**\n * adds a [[Worker]] to the queue which can execute Jobs\n * @param worker\n */\n addWorker(worker: Worker) {\n if (this.workers[worker.name]) {\n throw new Error(`Worker \"${worker.name}\" already exists.`);\n }\n this.workers[worker.name] = worker;\n this.emit('workerAdded', worker.name);\n }\n\n /**\n * removes worker from queue\n *\n * @param name\n * @param [deleteRelatedJobs=false] removes all queued jobs releated to the worker if set to true\n */\n removeWorker(name: string, deleteRelatedJobs = false) {\n delete this.workers[name];\n if (deleteRelatedJobs) {\n this.jobStore.removeJobsByWorkerName(name);\n }\n }\n\n /**\n * adds a job to the queue\n * @param workerName name of the worker which should be used to excute the job\n * @param [payload={}] payload which is passed as parameter to the executer\n * @param [options={ attempts: 0, timeout: 0, priority: 0 }] options to set max attempts, a timeout and a priority\n * @param [startQueue=true] if set to false the queue won't start automaticly when adding a job\n * @returns job id\n */\n addJob

(\n workerName: string,\n payload: P,\n options = { attempts: 0, timeout: 0, priority: 0 },\n startQueue = true\n ) {\n const { attempts = 0, timeout = 0, priority = 0 } = options;\n const id: string = Uuid.v4();\n const job: RawJob = {\n id,\n payload: JSON.stringify(payload || {}),\n metaData: JSON.stringify({ failedAttempts: 0, errors: [] }),\n active: FALSE,\n created: new Date().toISOString(),\n failed: '',\n workerName,\n attempts,\n timeout,\n priority,\n isDeleted: false,\n status: \"idle\"\n };\n if (!this.workers[job.workerName]) {\n throw new Error(`Missing worker with name ${job.workerName}`);\n }\n\n this.jobStore.addJob(job);\n this.emit('jobAdded', job);\n if (startQueue && !this.isActive) {\n this.start();\n }\n\n return id;\n }\n /**\n * starts the queue to execute queued jobs\n */\n async start() {\n if (!this.isActive) {\n this.isActive = true;\n this.executedJobs = [];\n await this.resetActiveJobs();\n this.scheduleQueue();\n }\n }\n /**\n * stop the queue from executing queued jobs\n */\n stop() {\n this.isActive = false;\n }\n\n /**\n * cancel running job\n */\n cancelJob(jobId: string, exception?: Error) {\n const promise = this.runningJobPromises[jobId];\n if (promise !== undefined && typeof promise[CANCEL] === 'function') {\n promise[CANCEL](exception || new Error(`canceled`));\n } else if (!promise[CANCEL]) {\n console.warn('Worker does not have a cancel method implemented');\n } else {\n throw new Error(`Job with id ${jobId} not currently running`);\n }\n }\n private resetActiveJob = (job: RawJob) => {\n this.jobStore.updateJob({ ...job, ...{ active: FALSE } });\n };\n private async resetActiveJobs() {\n const activeMarkedJobs = await this.jobStore.getActiveMarkedJobs();\n const resetTasks = activeMarkedJobs.map(this.resetActiveJob);\n await Promise.all(resetTasks);\n }\n private scheduleQueue() {\n if (AppState.currentState === 'active' && Platform.OS === \"ios\") {\n this.timeoutId = setTimeout(this.runQueue, this.updateInterval);\n } else {\n this.runQueue();\n }\n }\n private runQueue = async () => {\n if (!this.isActive) {\n this.finishQueue();\n return;\n }\n const nextJob = await this.jobStore.getNextJob();\n if (this.isJobNotEmpty(nextJob)) {\n const nextJobs = await this.getJobsForWorker(nextJob.workerName);\n const processingJobs = nextJobs.map(async (job) => this.limitExecution(this.excuteJob, job));\n await Promise.all(processingJobs);\n } else if (!this.isExecuting()) {\n this.finishQueue();\n return;\n }\n this.scheduleQueue();\n };\n\n private isJobNotEmpty(rawJob: RawJob | {}) {\n return Object.keys(rawJob).length > 0;\n }\n\n private limitExecution = async (executer: (rawJob: RawJob) => Promise, rawJob: RawJob) => {\n return new Promise(async (resolve) => await this.enqueueJobExecuter(executer, resolve, rawJob));\n };\n\n private enqueueJobExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n if (this.isExecuterAvailable()) {\n await this.runExecuter(executer, resolve, rawJob);\n } else {\n this.queuedJobExecuter.push(this.runExecuter.bind(null, executer, resolve, rawJob));\n }\n };\n\n private runExecuter = async (\n executer: (rawJob: RawJob) => Promise,\n resolve: (_: unknown) => void,\n rawJob: RawJob\n ) => {\n try {\n await executer(rawJob);\n } finally {\n resolve(true);\n if (this.queuedJobExecuter.length > 0 && this.isExecuterAvailable()) {\n await this.queuedJobExecuter.shift()();\n }\n }\n };\n private isExecuterAvailable() {\n return this.concurrency <= 0 || this.activeJobCount < this.concurrency;\n }\n private isExecuting() {\n return this.activeJobCount > 0;\n }\n\n private finishQueue() {\n this.onQueueFinish(this.executedJobs);\n this.isActive = false;\n clearTimeout(this.timeoutId);\n }\n\n async getJobsForWorker(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n async getJobsForWorkerWithDeleted(workerName: string) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n if (!isBusy) {\n return await this.jobStore.getJobsForWorkerWithDeleted(workerName, availableExecuters);\n } else {\n return await this.getJobsForAlternateWorker();\n }\n }\n\n private async getJobsForAlternateWorker() {\n for (const workerName of Object.keys(this.workers)) {\n const { isBusy, availableExecuters } = this.workers[workerName];\n let nextJobs: RawJob[] = [];\n if (!isBusy) {\n nextJobs = await this.jobStore.getJobsForWorker(workerName, availableExecuters);\n }\n if (nextJobs.length > 0) {\n return nextJobs;\n }\n }\n return [];\n }\n\n private excuteJob = async (rawJob: RawJob) => {\n const worker = this.workers[rawJob.workerName];\n const payload = JSON.parse(rawJob.payload) as Worker;\n const job = { ...rawJob, ...{ payload } } as Job;\n\n try {\n job.status = \"processing\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.emit('jobStarted', job);\n\n this.activeJobCount++;\n if (!this.workers[rawJob.workerName]) {\n throw new Error(`Missing worker with name ${rawJob.workerName}`);\n }\n const promise = worker.execute(rawJob);\n\n this.runningJobPromises[rawJob.id] = promise;\n await promise;\n\n worker.triggerSuccess(job);\n job.status = \"finished\";\n this.jobStore.updateJob({ ...job, payload: JSON.stringify(payload) });\n this.jobStore.removeJob(rawJob);\n this.emit('jobSucceeded', job);\n } catch (err) {\n const error = err as Error;\n const { attempts } = rawJob;\n // eslint-disable-next-line prefer-const\n let { errors, failedAttempts } = JSON.parse(rawJob.metaData) as { errors: string[]; failedAttempts: number };\n failedAttempts++;\n let failed = '';\n if (failedAttempts >= attempts) {\n failed = new Date().toISOString();\n }\n const metaData = JSON.stringify({ errors: [...errors, error], failedAttempts });\n worker.triggerFailure({ ...job, metaData, failed }, error);\n const failedJob = { ...rawJob, ...{ active: FALSE, metaData, failed, status: \"failed\" } } as RawJob;\n this.jobStore.updateJob(failedJob);\n this.emit('jobFailed', failedJob, error);\n } finally {\n delete this.runningJobPromises[job.id];\n worker.decreaseExecutionCount();\n worker.triggerCompletion(job);\n this.emit('jobCompleted', { ...job });\n this.executedJobs.push(rawJob);\n this.activeJobCount--;\n }\n };\n}\nexport default Queue.instance;\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/lib/module/hooks/useQueue.js b/lib/module/hooks/useQueue.js index ebb5380..238bdb9 100644 --- a/lib/module/hooks/useQueue.js +++ b/lib/module/hooks/useQueue.js @@ -62,19 +62,19 @@ export function useQueue() { }; // Subscribe - queue.on('jobAdded', onJobAdded); - queue.on('jobStarted', onJobStarted); - queue.on('jobFailed', onJobFailed); - queue.on('jobSucceeded', onJobSucceeded); - queue.on('jobDeleted', onJobSucceeded); + queue.addListener('jobAdded', onJobAdded); + queue.addListener('jobStarted', onJobStarted); + queue.addListener('jobFailed', onJobFailed); + queue.addListener('jobSucceeded', onJobSucceeded); + queue.addListener('jobDeleted', onJobDeleted); // Cleanup return () => { - queue.off('jobAdded', onJobAdded); - queue.off('jobStarted', onJobStarted); - queue.off('jobFailed', onJobFailed); - queue.off('jobSucceeded', onJobSucceeded); - queue.off('jobDeleted', onJobDeleted); + queue.removeListener('jobAdded', onJobAdded); + queue.removeListener('jobStarted', onJobStarted); + queue.removeListener('jobFailed', onJobFailed); + queue.removeListener('jobSucceeded', onJobSucceeded); + queue.removeListener('jobDeleted', onJobDeleted); }; }, [refreshJobs]); return { diff --git a/lib/module/hooks/useQueue.js.map b/lib/module/hooks/useQueue.js.map index 6b9c21b..224368e 100644 --- a/lib/module/hooks/useQueue.js.map +++ b/lib/module/hooks/useQueue.js.map @@ -1 +1 @@ -{"version":3,"names":["useState","useEffect","useCallback","useMemo","queue","useQueue","activeJobs","setActiveJobs","lastCompletedJobs","setLastCompletedJobs","queuedCount","filter","j","status","length","activeCount","failedCount","completedCount","refreshJobs","all","getJobs","allWithDeleted","getJobsWithDeleted","completed","isDeleted","onJobAdded","job","prev","onJobStarted","map","id","onJobFailed","onJobSucceeded","onJobDeleted","on","off"],"sources":["useQueue.tsx"],"sourcesContent":["// src/hooks/useQueue.tsx\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport queue from '../Queue';\nimport { RawJob } from '../models/Job';\nimport { Job } from '../models/Job';\n\nexport interface UseQueueState {\n queuedCount: number;\n activeCount: number;\n failedCount: number;\n completedCount: number;\n activeJobs: RawJob[];\n lastCompletedJobs: RawJob[];\n refreshJobs: () => Promise;\n}\n\n/**\n * useQueue hook\n *\n * Tracks the queue state:\n * - queuedCount: number of jobs waiting to start (status === 'idle')\n * - activeCount: number of jobs currently processing\n * - failedCount: number of jobs that have failed\n * - completedCount: number of jobs that have completed successfully\n * - activeJobs: list of current non-deleted jobs\n * - lastCompletedJobs: list of jobs marked as deleted (completed)\n */\nexport function useQueue(): UseQueueState {\n const [activeJobs, setActiveJobs] = useState([]);\n const [lastCompletedJobs, setLastCompletedJobs] = useState([]);\n\n // Derive counts from job statuses\n const queuedCount = useMemo(() => activeJobs.filter((j) => j.status === 'idle').length, [activeJobs]);\n const activeCount = useMemo(() => activeJobs.filter((j) => j.status === 'processing').length, [activeJobs]);\n const failedCount = useMemo(() => activeJobs.filter((j) => j.status === 'failed').length, [activeJobs]);\n const completedCount = useMemo(() => lastCompletedJobs.length, [lastCompletedJobs]);\n\n // Yığın içindeki işleri güncelle\n const refreshJobs = useCallback(async () => {\n const all = await queue.getJobs();\n const allWithDeleted = await queue.getJobsWithDeleted();\n const completed = allWithDeleted.filter((j) => j.isDeleted);\n setLastCompletedJobs(completed);\n\n setActiveJobs(all);\n }, []);\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n refreshJobs();\n\n // Event listener tanımları\n const onJobAdded = (job: RawJob) => {\n setActiveJobs((prev) => [...prev, job]);\n };\n const onJobStarted = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobFailed = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobSucceeded = (job: Job) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => [...prev, { ...job }]);\n };\n const onJobDeleted = (job: RawJob) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => prev.filter((j) => j.id !== job.id));\n };\n\n // Subscribe\n queue.on('jobAdded', onJobAdded);\n queue.on('jobStarted', onJobStarted);\n queue.on('jobFailed', onJobFailed);\n queue.on('jobSucceeded', onJobSucceeded);\n queue.on('jobDeleted', onJobSucceeded);\n\n // Cleanup\n return () => {\n queue.off('jobAdded', onJobAdded);\n queue.off('jobStarted', onJobStarted);\n queue.off('jobFailed', onJobFailed);\n queue.off('jobSucceeded', onJobSucceeded);\n queue.off('jobDeleted', onJobDeleted);\n };\n }, [refreshJobs]);\n\n return {\n queuedCount,\n activeCount,\n failedCount,\n completedCount,\n activeJobs,\n lastCompletedJobs,\n refreshJobs,\n };\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"names":["useState","useEffect","useCallback","useMemo","queue","useQueue","activeJobs","setActiveJobs","lastCompletedJobs","setLastCompletedJobs","queuedCount","filter","j","status","length","activeCount","failedCount","completedCount","refreshJobs","all","getJobs","allWithDeleted","getJobsWithDeleted","completed","isDeleted","onJobAdded","job","prev","onJobStarted","map","id","onJobFailed","onJobSucceeded","onJobDeleted","addListener","removeListener"],"sources":["useQueue.tsx"],"sourcesContent":["// src/hooks/useQueue.tsx\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport queue from '../Queue';\nimport { RawJob } from '../models/Job';\nimport { Job } from '../models/Job';\n\nexport interface UseQueueState {\n queuedCount: number;\n activeCount: number;\n failedCount: number;\n completedCount: number;\n activeJobs: RawJob[];\n lastCompletedJobs: RawJob[];\n refreshJobs: () => Promise;\n}\n\n/**\n * useQueue hook\n *\n * Tracks the queue state:\n * - queuedCount: number of jobs waiting to start (status === 'idle')\n * - activeCount: number of jobs currently processing\n * - failedCount: number of jobs that have failed\n * - completedCount: number of jobs that have completed successfully\n * - activeJobs: list of current non-deleted jobs\n * - lastCompletedJobs: list of jobs marked as deleted (completed)\n */\nexport function useQueue(): UseQueueState {\n const [activeJobs, setActiveJobs] = useState([]);\n const [lastCompletedJobs, setLastCompletedJobs] = useState([]);\n\n // Derive counts from job statuses\n const queuedCount = useMemo(() => activeJobs.filter((j) => j.status === 'idle').length, [activeJobs]);\n const activeCount = useMemo(() => activeJobs.filter((j) => j.status === 'processing').length, [activeJobs]);\n const failedCount = useMemo(() => activeJobs.filter((j) => j.status === 'failed').length, [activeJobs]);\n const completedCount = useMemo(() => lastCompletedJobs.length, [lastCompletedJobs]);\n\n // Yığın içindeki işleri güncelle\n const refreshJobs = useCallback(async () => {\n const all = await queue.getJobs();\n const allWithDeleted = await queue.getJobsWithDeleted();\n const completed = allWithDeleted.filter((j) => j.isDeleted);\n setLastCompletedJobs(completed);\n\n setActiveJobs(all);\n }, []);\n\n useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n refreshJobs();\n\n // Event listener tanımları\n const onJobAdded = (job: RawJob) => {\n setActiveJobs((prev) => [...prev, job]);\n };\n const onJobStarted = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobFailed = (job: RawJob) => {\n setActiveJobs((prev) => prev.map((j) => (j.id === job.id ? { ...j, ...job } : j)));\n };\n const onJobSucceeded = (job: Job) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => [...prev, { ...job }]);\n };\n const onJobDeleted = (job: RawJob) => {\n setActiveJobs((prev) => prev.filter((j) => j.id !== job.id));\n setLastCompletedJobs((prev) => prev.filter((j) => j.id !== job.id));\n };\n\n // Subscribe\n queue.addListener('jobAdded', onJobAdded);\n queue.addListener('jobStarted', onJobStarted);\n queue.addListener('jobFailed', onJobFailed);\n queue.addListener('jobSucceeded', onJobSucceeded);\n queue.addListener('jobDeleted', onJobDeleted);\n\n // Cleanup\n return () => {\n queue.removeListener('jobAdded', onJobAdded);\n queue.removeListener('jobStarted', onJobStarted);\n queue.removeListener('jobFailed', onJobFailed);\n queue.removeListener('jobSucceeded', onJobSucceeded);\n queue.removeListener('jobDeleted', onJobDeleted);\n };\n }, [refreshJobs]);\n\n return {\n queuedCount,\n activeCount,\n failedCount,\n completedCount,\n activeJobs,\n lastCompletedJobs,\n refreshJobs,\n };\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file