bullmq 4.0.0-beta.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/README.md +156 -22
  2. package/dist/cjs/classes/async-fifo-queue.js +90 -0
  3. package/dist/cjs/classes/async-fifo-queue.js.map +1 -0
  4. package/dist/{classes → cjs/classes}/backoffs.js +10 -9
  5. package/dist/cjs/classes/backoffs.js.map +1 -0
  6. package/dist/cjs/classes/child-pool.js +64 -0
  7. package/dist/cjs/classes/child-pool.js.map +1 -0
  8. package/dist/cjs/classes/child-processor.js +150 -0
  9. package/dist/cjs/classes/child-processor.js.map +1 -0
  10. package/dist/cjs/classes/child.js +216 -0
  11. package/dist/cjs/classes/child.js.map +1 -0
  12. package/dist/cjs/classes/delayed-error.js +19 -0
  13. package/dist/cjs/classes/delayed-error.js.map +1 -0
  14. package/dist/cjs/classes/flow-producer.js +283 -0
  15. package/dist/cjs/classes/flow-producer.js.map +1 -0
  16. package/dist/{classes → cjs/classes}/index.js +11 -3
  17. package/dist/cjs/classes/index.js.map +1 -0
  18. package/dist/cjs/classes/job.js +768 -0
  19. package/dist/cjs/classes/job.js.map +1 -0
  20. package/dist/cjs/classes/main-base.js +45 -0
  21. package/dist/cjs/classes/main-base.js.map +1 -0
  22. package/dist/cjs/classes/main-worker.js +10 -0
  23. package/dist/cjs/classes/main-worker.js.map +1 -0
  24. package/dist/cjs/classes/main.js +10 -0
  25. package/dist/cjs/classes/main.js.map +1 -0
  26. package/dist/cjs/classes/queue-base.js +135 -0
  27. package/dist/cjs/classes/queue-base.js.map +1 -0
  28. package/dist/cjs/classes/queue-events.js +120 -0
  29. package/dist/cjs/classes/queue-events.js.map +1 -0
  30. package/dist/cjs/classes/queue-getters.js +347 -0
  31. package/dist/cjs/classes/queue-getters.js.map +1 -0
  32. package/dist/cjs/classes/queue-keys.js +45 -0
  33. package/dist/cjs/classes/queue-keys.js.map +1 -0
  34. package/dist/cjs/classes/queue.js +275 -0
  35. package/dist/cjs/classes/queue.js.map +1 -0
  36. package/dist/cjs/classes/redis-connection.js +207 -0
  37. package/dist/cjs/classes/redis-connection.js.map +1 -0
  38. package/dist/cjs/classes/repeat.js +149 -0
  39. package/dist/cjs/classes/repeat.js.map +1 -0
  40. package/dist/{classes → cjs/classes}/sandbox.js +18 -14
  41. package/dist/cjs/classes/sandbox.js.map +1 -0
  42. package/dist/cjs/classes/scripts.js +658 -0
  43. package/dist/cjs/classes/scripts.js.map +1 -0
  44. package/dist/cjs/classes/unrecoverable-error.js +19 -0
  45. package/dist/cjs/classes/unrecoverable-error.js.map +1 -0
  46. package/dist/cjs/classes/waiting-children-error.js +19 -0
  47. package/dist/cjs/classes/waiting-children-error.js.map +1 -0
  48. package/dist/cjs/classes/worker.js +577 -0
  49. package/dist/cjs/classes/worker.js.map +1 -0
  50. package/dist/cjs/commands/addJob-9.lua +170 -0
  51. package/dist/cjs/commands/changeDelay-3.lua +40 -0
  52. package/dist/cjs/commands/changePriority-5.lua +52 -0
  53. package/dist/cjs/commands/cleanJobsInSet-2.lua +48 -0
  54. package/dist/cjs/commands/drain-4.lua +26 -0
  55. package/dist/{commands → cjs/commands}/extendLock-2.lua +1 -0
  56. package/dist/cjs/commands/getCounts-1.lua +35 -0
  57. package/dist/cjs/commands/getRanges-1.lua +69 -0
  58. package/dist/cjs/commands/getState-8.lua +66 -0
  59. package/dist/cjs/commands/getStateV2-8.lua +59 -0
  60. package/dist/cjs/commands/includes/addDelayMarkerIfNeeded.lua +15 -0
  61. package/dist/cjs/commands/includes/addJobWithPriority.lua +15 -0
  62. package/dist/cjs/commands/includes/addPriorityMarkerIfNeeded.lua +12 -0
  63. package/dist/cjs/commands/includes/batches.lua +18 -0
  64. package/dist/cjs/commands/includes/checkItemInList.lua +12 -0
  65. package/dist/cjs/commands/includes/checkStalledJobs.lua +139 -0
  66. package/dist/cjs/commands/includes/cleanList.lua +47 -0
  67. package/dist/cjs/commands/includes/cleanSet.lua +39 -0
  68. package/dist/cjs/commands/includes/collectMetrics.lua +46 -0
  69. package/dist/cjs/commands/includes/destructureJobKey.lua +12 -0
  70. package/dist/cjs/commands/includes/getJobsInZset.lua +12 -0
  71. package/dist/cjs/commands/includes/getNextDelayedTimestamp.lua +13 -0
  72. package/dist/cjs/commands/includes/getRateLimitTTL.lua +17 -0
  73. package/dist/cjs/commands/includes/getTargetQueueList.lua +12 -0
  74. package/dist/cjs/commands/includes/getTimestamp.lua +19 -0
  75. package/dist/cjs/commands/includes/getZSetItems.lua +7 -0
  76. package/dist/cjs/commands/includes/isLocked.lua +31 -0
  77. package/dist/cjs/commands/includes/moveJobFromPriorityToActive.lua +14 -0
  78. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +28 -0
  79. package/dist/cjs/commands/includes/prepareJobForProcessing.lua +74 -0
  80. package/dist/cjs/commands/includes/promoteDelayedJobs.lua +39 -0
  81. package/dist/cjs/commands/includes/pushBackJobWithPriority.lua +9 -0
  82. package/dist/cjs/commands/includes/removeJob.lua +13 -0
  83. package/dist/cjs/commands/includes/removeJobFromAnyState.lua +35 -0
  84. package/dist/cjs/commands/includes/removeJobs.lua +25 -0
  85. package/dist/cjs/commands/includes/removeJobsByMaxAge.lua +15 -0
  86. package/dist/cjs/commands/includes/removeJobsByMaxCount.lua +15 -0
  87. package/dist/cjs/commands/includes/removeParentDependencyKey.lua +77 -0
  88. package/dist/cjs/commands/includes/removeZSetJobs.lua +15 -0
  89. package/dist/cjs/commands/includes/trimEvents.lua +12 -0
  90. package/dist/cjs/commands/includes/updateParentDepsIfNeeded.lua +40 -0
  91. package/dist/cjs/commands/index.js +10 -0
  92. package/dist/cjs/commands/index.js.map +1 -0
  93. package/dist/cjs/commands/isFinished-3.lua +48 -0
  94. package/dist/cjs/commands/isJobInList-1.lua +16 -0
  95. package/dist/cjs/commands/moveJobFromActiveToWait-9.lua +53 -0
  96. package/dist/cjs/commands/moveStalledJobsToWait-8.lua +24 -0
  97. package/dist/cjs/commands/moveToActive-10.lua +116 -0
  98. package/dist/cjs/commands/moveToDelayed-8.lua +66 -0
  99. package/dist/cjs/commands/moveToFinished-13.lua +250 -0
  100. package/dist/cjs/commands/moveToWaitingChildren-4.lua +62 -0
  101. package/dist/cjs/commands/obliterate-2.lua +102 -0
  102. package/dist/cjs/commands/pause-5.lua +36 -0
  103. package/dist/cjs/commands/promote-7.lua +57 -0
  104. package/dist/cjs/commands/releaseLock-1.lua +19 -0
  105. package/dist/cjs/commands/removeJob-1.lua +71 -0
  106. package/{src → dist/cjs}/commands/removeRepeatable-2.lua +13 -1
  107. package/dist/cjs/commands/reprocessJob-6.lua +43 -0
  108. package/dist/cjs/commands/retryJob-9.lua +69 -0
  109. package/dist/cjs/commands/retryJobs-6.lua +53 -0
  110. package/dist/cjs/commands/saveStacktrace-1.lua +22 -0
  111. package/dist/cjs/commands/script-loader.js +408 -0
  112. package/dist/cjs/commands/script-loader.js.map +1 -0
  113. package/dist/cjs/commands/updateData-1.lua +20 -0
  114. package/dist/cjs/commands/updateProgress-2.lua +26 -0
  115. package/dist/cjs/enums/error-code.enum.js +13 -0
  116. package/dist/cjs/enums/error-code.enum.js.map +1 -0
  117. package/dist/cjs/enums/index.js +6 -0
  118. package/dist/cjs/enums/index.js.map +1 -0
  119. package/dist/cjs/enums/metrics-time.js +15 -0
  120. package/dist/cjs/enums/metrics-time.js.map +1 -0
  121. package/dist/{index.js → cjs/index.js} +2 -0
  122. package/dist/cjs/index.js.map +1 -0
  123. package/dist/cjs/interfaces/advanced-options.js +3 -0
  124. package/dist/cjs/interfaces/advanced-options.js.map +1 -0
  125. package/dist/cjs/interfaces/backoff-options.js.map +1 -0
  126. package/dist/cjs/interfaces/base-job-options.js +3 -0
  127. package/dist/cjs/interfaces/base-job-options.js.map +1 -0
  128. package/dist/cjs/interfaces/child-command.js +10 -0
  129. package/dist/cjs/interfaces/child-command.js.map +1 -0
  130. package/dist/{interfaces/backoff-opts.js → cjs/interfaces/child-message.js} +1 -1
  131. package/dist/cjs/interfaces/child-message.js.map +1 -0
  132. package/dist/{interfaces/redis-opts.js → cjs/interfaces/connection.js} +1 -1
  133. package/dist/cjs/interfaces/connection.js.map +1 -0
  134. package/dist/{interfaces/jobs-opts.js → cjs/interfaces/flow-job.js} +1 -1
  135. package/dist/cjs/interfaces/flow-job.js.map +1 -0
  136. package/dist/cjs/interfaces/index.js +28 -0
  137. package/dist/cjs/interfaces/index.js.map +1 -0
  138. package/dist/cjs/interfaces/ioredis-events.js +3 -0
  139. package/dist/cjs/interfaces/ioredis-events.js.map +1 -0
  140. package/dist/{interfaces/repeat-opts.js → cjs/interfaces/job-json.js} +1 -1
  141. package/dist/cjs/interfaces/job-json.js.map +1 -0
  142. package/dist/{interfaces/worker-opts.js → cjs/interfaces/keep-jobs.js} +1 -1
  143. package/dist/cjs/interfaces/keep-jobs.js.map +1 -0
  144. package/dist/cjs/interfaces/metrics-options.js +3 -0
  145. package/dist/cjs/interfaces/metrics-options.js.map +1 -0
  146. package/dist/cjs/interfaces/metrics.js +3 -0
  147. package/dist/cjs/interfaces/metrics.js.map +1 -0
  148. package/dist/cjs/interfaces/minimal-job.js +3 -0
  149. package/dist/cjs/interfaces/minimal-job.js.map +1 -0
  150. package/dist/cjs/interfaces/parent-command.js +15 -0
  151. package/dist/cjs/interfaces/parent-command.js.map +1 -0
  152. package/dist/cjs/interfaces/parent-message.js +3 -0
  153. package/dist/cjs/interfaces/parent-message.js.map +1 -0
  154. package/dist/cjs/interfaces/parent.js +3 -0
  155. package/dist/cjs/interfaces/parent.js.map +1 -0
  156. package/dist/{interfaces → cjs/interfaces}/queue-options.js +1 -0
  157. package/dist/cjs/interfaces/queue-options.js.map +1 -0
  158. package/dist/cjs/interfaces/rate-limiter-options.js.map +1 -0
  159. package/dist/cjs/interfaces/redis-options.js.map +1 -0
  160. package/dist/{interfaces/jobs-options.js → cjs/interfaces/redis-streams.js} +1 -1
  161. package/dist/cjs/interfaces/redis-streams.js.map +1 -0
  162. package/dist/cjs/interfaces/repeat-options.js.map +1 -0
  163. package/dist/cjs/interfaces/sandboxed-job-processor.js +3 -0
  164. package/dist/cjs/interfaces/sandboxed-job-processor.js.map +1 -0
  165. package/dist/cjs/interfaces/sandboxed-job.js +3 -0
  166. package/dist/cjs/interfaces/sandboxed-job.js.map +1 -0
  167. package/dist/cjs/interfaces/worker-options.js.map +1 -0
  168. package/dist/cjs/scripts/addJob-9.js +252 -0
  169. package/dist/cjs/scripts/addJob-9.js.map +1 -0
  170. package/dist/cjs/scripts/changeDelay-3.js +41 -0
  171. package/dist/cjs/scripts/changeDelay-3.js.map +1 -0
  172. package/dist/cjs/scripts/changePriority-5.js +87 -0
  173. package/dist/cjs/scripts/changePriority-5.js.map +1 -0
  174. package/dist/cjs/scripts/cleanJobsInSet-2.js +259 -0
  175. package/dist/cjs/scripts/cleanJobsInSet-2.js.map +1 -0
  176. package/dist/cjs/scripts/drain-4.js +178 -0
  177. package/dist/cjs/scripts/drain-4.js.map +1 -0
  178. package/dist/cjs/scripts/extendLock-2.js +30 -0
  179. package/dist/cjs/scripts/extendLock-2.js.map +1 -0
  180. package/dist/cjs/scripts/getCounts-1.js +41 -0
  181. package/dist/cjs/scripts/getCounts-1.js.map +1 -0
  182. package/dist/cjs/scripts/getRanges-1.js +72 -0
  183. package/dist/cjs/scripts/getRanges-1.js.map +1 -0
  184. package/dist/cjs/scripts/getState-8.js +74 -0
  185. package/dist/cjs/scripts/getState-8.js.map +1 -0
  186. package/dist/cjs/scripts/getStateV2-8.js +58 -0
  187. package/dist/cjs/scripts/getStateV2-8.js.map +1 -0
  188. package/dist/cjs/scripts/index.js +34 -0
  189. package/dist/cjs/scripts/index.js.map +1 -0
  190. package/dist/cjs/scripts/isFinished-3.js +49 -0
  191. package/dist/cjs/scripts/isFinished-3.js.map +1 -0
  192. package/dist/cjs/scripts/isJobInList-1.js +32 -0
  193. package/dist/cjs/scripts/isJobInList-1.js.map +1 -0
  194. package/dist/cjs/scripts/moveJobFromActiveToWait-9.js +70 -0
  195. package/dist/cjs/scripts/moveJobFromActiveToWait-9.js.map +1 -0
  196. package/dist/cjs/scripts/moveStalledJobsToWait-8.js +289 -0
  197. package/dist/cjs/scripts/moveStalledJobsToWait-8.js.map +1 -0
  198. package/dist/cjs/scripts/moveToActive-10.js +269 -0
  199. package/dist/cjs/scripts/moveToActive-10.js.map +1 -0
  200. package/dist/cjs/scripts/moveToDelayed-8.js +152 -0
  201. package/dist/cjs/scripts/moveToDelayed-8.js.map +1 -0
  202. package/dist/cjs/scripts/moveToFinished-13.js +624 -0
  203. package/dist/cjs/scripts/moveToFinished-13.js.map +1 -0
  204. package/dist/cjs/scripts/moveToWaitingChildren-4.js +59 -0
  205. package/dist/cjs/scripts/moveToWaitingChildren-4.js.map +1 -0
  206. package/dist/cjs/scripts/obliterate-2.js +244 -0
  207. package/dist/cjs/scripts/obliterate-2.js.map +1 -0
  208. package/dist/cjs/scripts/pause-5.js +48 -0
  209. package/dist/cjs/scripts/pause-5.js.map +1 -0
  210. package/dist/cjs/scripts/promote-7.js +87 -0
  211. package/dist/cjs/scripts/promote-7.js.map +1 -0
  212. package/dist/cjs/scripts/releaseLock-1.js +25 -0
  213. package/dist/cjs/scripts/releaseLock-1.js.map +1 -0
  214. package/dist/cjs/scripts/removeJob-1.js +210 -0
  215. package/dist/cjs/scripts/removeJob-1.js.map +1 -0
  216. package/dist/cjs/scripts/removeRepeatable-2.js +38 -0
  217. package/dist/cjs/scripts/removeRepeatable-2.js.map +1 -0
  218. package/dist/cjs/scripts/reprocessJob-6.js +56 -0
  219. package/dist/cjs/scripts/reprocessJob-6.js.map +1 -0
  220. package/dist/cjs/scripts/retryJob-9.js +128 -0
  221. package/dist/cjs/scripts/retryJob-9.js.map +1 -0
  222. package/dist/cjs/scripts/retryJobs-6.js +76 -0
  223. package/dist/cjs/scripts/retryJobs-6.js.map +1 -0
  224. package/dist/cjs/scripts/saveStacktrace-1.js +27 -0
  225. package/dist/cjs/scripts/saveStacktrace-1.js.map +1 -0
  226. package/dist/cjs/scripts/updateData-1.js +26 -0
  227. package/dist/cjs/scripts/updateData-1.js.map +1 -0
  228. package/dist/cjs/scripts/updateProgress-2.js +31 -0
  229. package/dist/cjs/scripts/updateProgress-2.js.map +1 -0
  230. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -0
  231. package/dist/cjs/types/backoff-strategy.js +3 -0
  232. package/dist/cjs/types/backoff-strategy.js.map +1 -0
  233. package/dist/cjs/types/finished-status.js +3 -0
  234. package/dist/cjs/types/finished-status.js.map +1 -0
  235. package/dist/cjs/types/index.js +11 -0
  236. package/dist/cjs/types/index.js.map +1 -0
  237. package/dist/cjs/types/job-json-sandbox.js +3 -0
  238. package/dist/cjs/types/job-json-sandbox.js.map +1 -0
  239. package/dist/cjs/types/job-options.js +3 -0
  240. package/dist/cjs/types/job-options.js.map +1 -0
  241. package/dist/cjs/types/job-type.js +3 -0
  242. package/dist/cjs/types/job-type.js.map +1 -0
  243. package/dist/cjs/types/minimal-queue.js +3 -0
  244. package/dist/cjs/types/minimal-queue.js.map +1 -0
  245. package/dist/cjs/types/repeat-strategy.js +3 -0
  246. package/dist/cjs/types/repeat-strategy.js.map +1 -0
  247. package/dist/cjs/utils.js +152 -0
  248. package/dist/cjs/utils.js.map +1 -0
  249. package/dist/esm/classes/async-fifo-queue.d.ts +31 -0
  250. package/dist/esm/classes/async-fifo-queue.js +86 -0
  251. package/dist/esm/classes/async-fifo-queue.js.map +1 -0
  252. package/dist/esm/classes/backoffs.d.ts +10 -0
  253. package/dist/esm/classes/backoffs.js +44 -0
  254. package/dist/esm/classes/backoffs.js.map +1 -0
  255. package/dist/esm/classes/child-pool.d.ts +23 -0
  256. package/dist/esm/classes/child-pool.js +60 -0
  257. package/dist/esm/classes/child-pool.js.map +1 -0
  258. package/dist/esm/classes/child-processor.d.ts +26 -0
  259. package/dist/esm/classes/child-processor.js +146 -0
  260. package/dist/esm/classes/child-processor.js.map +1 -0
  261. package/dist/esm/classes/child.d.ts +36 -0
  262. package/dist/esm/classes/child.js +212 -0
  263. package/dist/esm/classes/child.js.map +1 -0
  264. package/dist/esm/classes/delayed-error.d.ts +10 -0
  265. package/dist/esm/classes/delayed-error.js +15 -0
  266. package/dist/esm/classes/delayed-error.js.map +1 -0
  267. package/dist/esm/classes/flow-producer.d.ts +163 -0
  268. package/dist/esm/classes/flow-producer.js +279 -0
  269. package/dist/esm/classes/flow-producer.js.map +1 -0
  270. package/dist/{classes → esm/classes}/index.d.ts +9 -3
  271. package/dist/esm/classes/index.js +22 -0
  272. package/dist/esm/classes/index.js.map +1 -0
  273. package/dist/esm/classes/job.d.ts +355 -0
  274. package/dist/esm/classes/job.js +764 -0
  275. package/dist/esm/classes/job.js.map +1 -0
  276. package/dist/esm/classes/main-base.d.ts +4 -0
  277. package/dist/esm/classes/main-base.js +43 -0
  278. package/dist/esm/classes/main-base.js.map +1 -0
  279. package/dist/esm/classes/main-worker.js +8 -0
  280. package/dist/esm/classes/main-worker.js.map +1 -0
  281. package/dist/esm/classes/main.js +8 -0
  282. package/dist/esm/classes/main.js.map +1 -0
  283. package/dist/esm/classes/queue-base.d.ts +67 -0
  284. package/dist/esm/classes/queue-base.js +131 -0
  285. package/dist/esm/classes/queue-base.js.map +1 -0
  286. package/dist/esm/classes/queue-events.d.ts +179 -0
  287. package/dist/esm/classes/queue-events.js +116 -0
  288. package/dist/esm/classes/queue-events.js.map +1 -0
  289. package/dist/esm/classes/queue-getters.d.ts +164 -0
  290. package/dist/esm/classes/queue-getters.js +344 -0
  291. package/dist/esm/classes/queue-getters.js.map +1 -0
  292. package/dist/esm/classes/queue-keys.d.ts +10 -0
  293. package/dist/esm/classes/queue-keys.js +41 -0
  294. package/dist/esm/classes/queue-keys.js.map +1 -0
  295. package/dist/esm/classes/queue.d.ts +236 -0
  296. package/dist/esm/classes/queue.js +271 -0
  297. package/dist/esm/classes/queue.js.map +1 -0
  298. package/dist/esm/classes/redis-connection.d.ts +37 -0
  299. package/dist/esm/classes/redis-connection.js +203 -0
  300. package/dist/esm/classes/redis-connection.js.map +1 -0
  301. package/dist/esm/classes/repeat.d.ts +25 -0
  302. package/dist/esm/classes/repeat.js +144 -0
  303. package/dist/esm/classes/repeat.js.map +1 -0
  304. package/dist/esm/classes/sandbox.d.ts +4 -0
  305. package/dist/esm/classes/sandbox.js +58 -0
  306. package/dist/esm/classes/sandbox.js.map +1 -0
  307. package/dist/esm/classes/scripts.d.ts +106 -0
  308. package/dist/esm/classes/scripts.js +654 -0
  309. package/dist/esm/classes/scripts.js.map +1 -0
  310. package/dist/esm/classes/unrecoverable-error.d.ts +10 -0
  311. package/dist/esm/classes/unrecoverable-error.js +15 -0
  312. package/dist/esm/classes/unrecoverable-error.js.map +1 -0
  313. package/dist/esm/classes/waiting-children-error.d.ts +10 -0
  314. package/dist/esm/classes/waiting-children-error.js +15 -0
  315. package/dist/esm/classes/waiting-children-error.js.map +1 -0
  316. package/dist/esm/classes/worker.d.ts +215 -0
  317. package/dist/esm/classes/worker.js +573 -0
  318. package/dist/esm/classes/worker.js.map +1 -0
  319. package/dist/esm/commands/addJob-9.lua +170 -0
  320. package/dist/esm/commands/changeDelay-3.lua +40 -0
  321. package/dist/esm/commands/changePriority-5.lua +52 -0
  322. package/dist/esm/commands/cleanJobsInSet-2.lua +48 -0
  323. package/dist/esm/commands/drain-4.lua +26 -0
  324. package/{src → dist/esm}/commands/extendLock-2.lua +1 -0
  325. package/dist/esm/commands/getCounts-1.lua +35 -0
  326. package/dist/esm/commands/getRanges-1.lua +69 -0
  327. package/dist/esm/commands/getState-8.lua +66 -0
  328. package/dist/esm/commands/getStateV2-8.lua +59 -0
  329. package/dist/esm/commands/includes/addDelayMarkerIfNeeded.lua +15 -0
  330. package/dist/esm/commands/includes/addJobWithPriority.lua +15 -0
  331. package/dist/esm/commands/includes/addPriorityMarkerIfNeeded.lua +12 -0
  332. package/dist/esm/commands/includes/batches.lua +18 -0
  333. package/dist/esm/commands/includes/checkItemInList.lua +12 -0
  334. package/dist/esm/commands/includes/checkStalledJobs.lua +139 -0
  335. package/dist/esm/commands/includes/cleanList.lua +47 -0
  336. package/dist/esm/commands/includes/cleanSet.lua +39 -0
  337. package/dist/esm/commands/includes/collectMetrics.lua +46 -0
  338. package/dist/esm/commands/includes/destructureJobKey.lua +12 -0
  339. package/dist/esm/commands/includes/getJobsInZset.lua +12 -0
  340. package/dist/esm/commands/includes/getNextDelayedTimestamp.lua +13 -0
  341. package/dist/esm/commands/includes/getRateLimitTTL.lua +17 -0
  342. package/dist/esm/commands/includes/getTargetQueueList.lua +12 -0
  343. package/dist/esm/commands/includes/getTimestamp.lua +19 -0
  344. package/dist/esm/commands/includes/getZSetItems.lua +7 -0
  345. package/dist/esm/commands/includes/isLocked.lua +31 -0
  346. package/dist/esm/commands/includes/moveJobFromPriorityToActive.lua +14 -0
  347. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +28 -0
  348. package/dist/esm/commands/includes/prepareJobForProcessing.lua +74 -0
  349. package/dist/esm/commands/includes/promoteDelayedJobs.lua +39 -0
  350. package/dist/esm/commands/includes/pushBackJobWithPriority.lua +9 -0
  351. package/dist/esm/commands/includes/removeJob.lua +13 -0
  352. package/dist/esm/commands/includes/removeJobFromAnyState.lua +35 -0
  353. package/dist/esm/commands/includes/removeJobs.lua +25 -0
  354. package/dist/esm/commands/includes/removeJobsByMaxAge.lua +15 -0
  355. package/dist/esm/commands/includes/removeJobsByMaxCount.lua +15 -0
  356. package/dist/esm/commands/includes/removeParentDependencyKey.lua +77 -0
  357. package/dist/esm/commands/includes/removeZSetJobs.lua +15 -0
  358. package/dist/esm/commands/includes/trimEvents.lua +12 -0
  359. package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +40 -0
  360. package/dist/esm/commands/index.d.ts +4 -0
  361. package/dist/esm/commands/index.js +5 -0
  362. package/dist/esm/commands/index.js.map +1 -0
  363. package/dist/esm/commands/isFinished-3.lua +48 -0
  364. package/dist/esm/commands/isJobInList-1.lua +16 -0
  365. package/dist/esm/commands/moveJobFromActiveToWait-9.lua +53 -0
  366. package/dist/esm/commands/moveStalledJobsToWait-8.lua +24 -0
  367. package/dist/esm/commands/moveToActive-10.lua +116 -0
  368. package/dist/esm/commands/moveToDelayed-8.lua +66 -0
  369. package/dist/esm/commands/moveToFinished-13.lua +250 -0
  370. package/dist/esm/commands/moveToWaitingChildren-4.lua +62 -0
  371. package/dist/esm/commands/obliterate-2.lua +102 -0
  372. package/dist/esm/commands/pause-5.lua +36 -0
  373. package/dist/esm/commands/promote-7.lua +57 -0
  374. package/dist/esm/commands/releaseLock-1.lua +19 -0
  375. package/dist/esm/commands/removeJob-1.lua +71 -0
  376. package/dist/{commands → esm/commands}/removeRepeatable-2.lua +13 -1
  377. package/dist/esm/commands/reprocessJob-6.lua +43 -0
  378. package/dist/esm/commands/retryJob-9.lua +69 -0
  379. package/dist/esm/commands/retryJobs-6.lua +53 -0
  380. package/dist/esm/commands/saveStacktrace-1.lua +22 -0
  381. package/dist/esm/commands/script-loader.d.ts +119 -0
  382. package/dist/esm/commands/script-loader.js +403 -0
  383. package/dist/esm/commands/script-loader.js.map +1 -0
  384. package/dist/esm/commands/updateData-1.lua +20 -0
  385. package/dist/esm/commands/updateProgress-2.lua +26 -0
  386. package/dist/esm/enums/error-code.enum.d.ts +8 -0
  387. package/dist/esm/enums/error-code.enum.js +10 -0
  388. package/dist/esm/enums/error-code.enum.js.map +1 -0
  389. package/dist/esm/enums/index.d.ts +2 -0
  390. package/dist/esm/enums/index.js +3 -0
  391. package/dist/esm/enums/index.js.map +1 -0
  392. package/dist/esm/enums/metrics-time.d.ts +10 -0
  393. package/dist/esm/enums/metrics-time.js +12 -0
  394. package/dist/esm/enums/metrics-time.js.map +1 -0
  395. package/dist/{index.d.ts → esm/index.d.ts} +2 -0
  396. package/{src/index.ts → dist/esm/index.js} +7 -4
  397. package/dist/esm/index.js.map +1 -0
  398. package/dist/esm/interfaces/advanced-options.d.ts +13 -0
  399. package/dist/esm/interfaces/advanced-options.js +2 -0
  400. package/dist/esm/interfaces/advanced-options.js.map +1 -0
  401. package/dist/esm/interfaces/backoff-options.d.ts +15 -0
  402. package/dist/esm/interfaces/backoff-options.js +2 -0
  403. package/dist/esm/interfaces/backoff-options.js.map +1 -0
  404. package/dist/esm/interfaces/base-job-options.d.ts +97 -0
  405. package/dist/esm/interfaces/base-job-options.js +2 -0
  406. package/dist/esm/interfaces/base-job-options.js.map +1 -0
  407. package/dist/esm/interfaces/child-command.d.ts +5 -0
  408. package/dist/esm/interfaces/child-command.js +7 -0
  409. package/dist/esm/interfaces/child-command.js.map +1 -0
  410. package/dist/esm/interfaces/child-message.d.ts +6 -0
  411. package/dist/esm/interfaces/child-message.js +2 -0
  412. package/dist/esm/interfaces/child-message.js.map +1 -0
  413. package/dist/esm/interfaces/connection.d.ts +8 -0
  414. package/dist/esm/interfaces/connection.js +2 -0
  415. package/dist/esm/interfaces/connection.js.map +1 -0
  416. package/dist/esm/interfaces/flow-job.d.ts +19 -0
  417. package/dist/esm/interfaces/flow-job.js +2 -0
  418. package/dist/esm/interfaces/flow-job.js.map +1 -0
  419. package/dist/esm/interfaces/index.d.ts +24 -0
  420. package/dist/esm/interfaces/index.js +25 -0
  421. package/dist/esm/interfaces/index.js.map +1 -0
  422. package/dist/esm/interfaces/ioredis-events.d.ts +8 -0
  423. package/dist/esm/interfaces/ioredis-events.js +2 -0
  424. package/dist/esm/interfaces/ioredis-events.js.map +1 -0
  425. package/dist/esm/interfaces/job-json.d.ts +37 -0
  426. package/dist/esm/interfaces/job-json.js +2 -0
  427. package/dist/esm/interfaces/job-json.js.map +1 -0
  428. package/dist/esm/interfaces/keep-jobs.d.ts +17 -0
  429. package/dist/esm/interfaces/keep-jobs.js +2 -0
  430. package/dist/esm/interfaces/keep-jobs.js.map +1 -0
  431. package/dist/esm/interfaces/metrics-options.d.ts +12 -0
  432. package/dist/esm/interfaces/metrics-options.js +2 -0
  433. package/dist/esm/interfaces/metrics-options.js.map +1 -0
  434. package/dist/esm/interfaces/metrics.d.ts +9 -0
  435. package/dist/esm/interfaces/metrics.js +2 -0
  436. package/dist/esm/interfaces/metrics.js.map +1 -0
  437. package/dist/esm/interfaces/minimal-job.d.ts +129 -0
  438. package/dist/esm/interfaces/minimal-job.js +2 -0
  439. package/dist/esm/interfaces/minimal-job.js.map +1 -0
  440. package/dist/esm/interfaces/parent-command.d.ts +10 -0
  441. package/dist/esm/interfaces/parent-command.js +12 -0
  442. package/dist/esm/interfaces/parent-command.js.map +1 -0
  443. package/dist/esm/interfaces/parent-message.d.ts +8 -0
  444. package/dist/esm/interfaces/parent-message.js +2 -0
  445. package/dist/esm/interfaces/parent-message.js.map +1 -0
  446. package/dist/esm/interfaces/parent.d.ts +20 -0
  447. package/dist/esm/interfaces/parent.js +2 -0
  448. package/dist/esm/interfaces/parent.js.map +1 -0
  449. package/dist/esm/interfaces/queue-options.d.ts +74 -0
  450. package/dist/esm/interfaces/queue-options.js +6 -0
  451. package/dist/esm/interfaces/queue-options.js.map +1 -0
  452. package/dist/esm/interfaces/rate-limiter-options.d.ts +12 -0
  453. package/dist/esm/interfaces/rate-limiter-options.js +2 -0
  454. package/dist/esm/interfaces/rate-limiter-options.js.map +1 -0
  455. package/dist/esm/interfaces/redis-options.d.ts +7 -0
  456. package/dist/esm/interfaces/redis-options.js +2 -0
  457. package/dist/esm/interfaces/redis-options.js.map +1 -0
  458. package/dist/esm/interfaces/redis-streams.d.ts +4 -0
  459. package/dist/esm/interfaces/redis-streams.js +2 -0
  460. package/dist/esm/interfaces/redis-streams.js.map +1 -0
  461. package/dist/esm/interfaces/repeat-options.d.ts +33 -0
  462. package/dist/esm/interfaces/repeat-options.js +2 -0
  463. package/dist/esm/interfaces/repeat-options.js.map +1 -0
  464. package/dist/esm/interfaces/sandboxed-job-processor.d.ts +5 -0
  465. package/dist/esm/interfaces/sandboxed-job-processor.js +2 -0
  466. package/dist/esm/interfaces/sandboxed-job-processor.js.map +1 -0
  467. package/dist/esm/interfaces/sandboxed-job.d.ts +13 -0
  468. package/dist/esm/interfaces/sandboxed-job.js +2 -0
  469. package/dist/esm/interfaces/sandboxed-job.js.map +1 -0
  470. package/dist/esm/interfaces/worker-options.d.ts +123 -0
  471. package/dist/esm/interfaces/worker-options.js +2 -0
  472. package/dist/esm/interfaces/worker-options.js.map +1 -0
  473. package/dist/esm/scripts/addJob-9.d.ts +5 -0
  474. package/dist/esm/scripts/addJob-9.js +249 -0
  475. package/dist/esm/scripts/addJob-9.js.map +1 -0
  476. package/dist/esm/scripts/changeDelay-3.d.ts +5 -0
  477. package/dist/esm/scripts/changeDelay-3.js +38 -0
  478. package/dist/esm/scripts/changeDelay-3.js.map +1 -0
  479. package/dist/esm/scripts/changePriority-5.d.ts +5 -0
  480. package/dist/esm/scripts/changePriority-5.js +84 -0
  481. package/dist/esm/scripts/changePriority-5.js.map +1 -0
  482. package/dist/esm/scripts/cleanJobsInSet-2.d.ts +5 -0
  483. package/dist/esm/scripts/cleanJobsInSet-2.js +256 -0
  484. package/dist/esm/scripts/cleanJobsInSet-2.js.map +1 -0
  485. package/dist/esm/scripts/drain-4.d.ts +5 -0
  486. package/dist/esm/scripts/drain-4.js +175 -0
  487. package/dist/esm/scripts/drain-4.js.map +1 -0
  488. package/dist/esm/scripts/extendLock-2.d.ts +5 -0
  489. package/dist/esm/scripts/extendLock-2.js +27 -0
  490. package/dist/esm/scripts/extendLock-2.js.map +1 -0
  491. package/dist/esm/scripts/getCounts-1.d.ts +5 -0
  492. package/dist/esm/scripts/getCounts-1.js +38 -0
  493. package/dist/esm/scripts/getCounts-1.js.map +1 -0
  494. package/dist/esm/scripts/getRanges-1.d.ts +5 -0
  495. package/dist/esm/scripts/getRanges-1.js +69 -0
  496. package/dist/esm/scripts/getRanges-1.js.map +1 -0
  497. package/dist/esm/scripts/getState-8.d.ts +5 -0
  498. package/dist/esm/scripts/getState-8.js +71 -0
  499. package/dist/esm/scripts/getState-8.js.map +1 -0
  500. package/dist/esm/scripts/getStateV2-8.d.ts +5 -0
  501. package/dist/esm/scripts/getStateV2-8.js +55 -0
  502. package/dist/esm/scripts/getStateV2-8.js.map +1 -0
  503. package/dist/esm/scripts/index.d.ts +30 -0
  504. package/dist/esm/scripts/index.js +31 -0
  505. package/dist/esm/scripts/index.js.map +1 -0
  506. package/dist/esm/scripts/isFinished-3.d.ts +5 -0
  507. package/dist/esm/scripts/isFinished-3.js +46 -0
  508. package/dist/esm/scripts/isFinished-3.js.map +1 -0
  509. package/dist/esm/scripts/isJobInList-1.d.ts +5 -0
  510. package/dist/esm/scripts/isJobInList-1.js +29 -0
  511. package/dist/esm/scripts/isJobInList-1.js.map +1 -0
  512. package/dist/esm/scripts/moveJobFromActiveToWait-9.d.ts +5 -0
  513. package/dist/esm/scripts/moveJobFromActiveToWait-9.js +67 -0
  514. package/dist/esm/scripts/moveJobFromActiveToWait-9.js.map +1 -0
  515. package/dist/esm/scripts/moveStalledJobsToWait-8.d.ts +5 -0
  516. package/dist/esm/scripts/moveStalledJobsToWait-8.js +286 -0
  517. package/dist/esm/scripts/moveStalledJobsToWait-8.js.map +1 -0
  518. package/dist/esm/scripts/moveToActive-10.d.ts +5 -0
  519. package/dist/esm/scripts/moveToActive-10.js +266 -0
  520. package/dist/esm/scripts/moveToActive-10.js.map +1 -0
  521. package/dist/esm/scripts/moveToDelayed-8.d.ts +5 -0
  522. package/dist/esm/scripts/moveToDelayed-8.js +149 -0
  523. package/dist/esm/scripts/moveToDelayed-8.js.map +1 -0
  524. package/dist/esm/scripts/moveToFinished-13.d.ts +5 -0
  525. package/dist/esm/scripts/moveToFinished-13.js +621 -0
  526. package/dist/esm/scripts/moveToFinished-13.js.map +1 -0
  527. package/dist/esm/scripts/moveToWaitingChildren-4.d.ts +5 -0
  528. package/dist/esm/scripts/moveToWaitingChildren-4.js +56 -0
  529. package/dist/esm/scripts/moveToWaitingChildren-4.js.map +1 -0
  530. package/dist/esm/scripts/obliterate-2.d.ts +5 -0
  531. package/dist/esm/scripts/obliterate-2.js +241 -0
  532. package/dist/esm/scripts/obliterate-2.js.map +1 -0
  533. package/dist/esm/scripts/pause-5.d.ts +5 -0
  534. package/dist/esm/scripts/pause-5.js +45 -0
  535. package/dist/esm/scripts/pause-5.js.map +1 -0
  536. package/dist/esm/scripts/promote-7.d.ts +5 -0
  537. package/dist/esm/scripts/promote-7.js +84 -0
  538. package/dist/esm/scripts/promote-7.js.map +1 -0
  539. package/dist/esm/scripts/releaseLock-1.d.ts +5 -0
  540. package/dist/esm/scripts/releaseLock-1.js +22 -0
  541. package/dist/esm/scripts/releaseLock-1.js.map +1 -0
  542. package/dist/esm/scripts/removeJob-1.d.ts +5 -0
  543. package/dist/esm/scripts/removeJob-1.js +207 -0
  544. package/dist/esm/scripts/removeJob-1.js.map +1 -0
  545. package/dist/esm/scripts/removeRepeatable-2.d.ts +5 -0
  546. package/dist/esm/scripts/removeRepeatable-2.js +35 -0
  547. package/dist/esm/scripts/removeRepeatable-2.js.map +1 -0
  548. package/dist/esm/scripts/reprocessJob-6.d.ts +5 -0
  549. package/dist/esm/scripts/reprocessJob-6.js +53 -0
  550. package/dist/esm/scripts/reprocessJob-6.js.map +1 -0
  551. package/dist/esm/scripts/retryJob-9.d.ts +5 -0
  552. package/dist/esm/scripts/retryJob-9.js +125 -0
  553. package/dist/esm/scripts/retryJob-9.js.map +1 -0
  554. package/dist/esm/scripts/retryJobs-6.d.ts +5 -0
  555. package/dist/esm/scripts/retryJobs-6.js +73 -0
  556. package/dist/esm/scripts/retryJobs-6.js.map +1 -0
  557. package/dist/esm/scripts/saveStacktrace-1.d.ts +5 -0
  558. package/dist/esm/scripts/saveStacktrace-1.js +24 -0
  559. package/dist/esm/scripts/saveStacktrace-1.js.map +1 -0
  560. package/dist/esm/scripts/updateData-1.d.ts +5 -0
  561. package/dist/esm/scripts/updateData-1.js +23 -0
  562. package/dist/esm/scripts/updateData-1.js.map +1 -0
  563. package/dist/esm/scripts/updateProgress-2.d.ts +5 -0
  564. package/dist/esm/scripts/updateProgress-2.js +28 -0
  565. package/dist/esm/scripts/updateProgress-2.js.map +1 -0
  566. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  567. package/dist/esm/types/backoff-strategy.d.ts +2 -0
  568. package/dist/esm/types/backoff-strategy.js +2 -0
  569. package/dist/esm/types/backoff-strategy.js.map +1 -0
  570. package/dist/esm/types/finished-status.d.ts +2 -0
  571. package/dist/esm/types/finished-status.js +2 -0
  572. package/dist/esm/types/finished-status.js.map +1 -0
  573. package/dist/esm/types/index.d.ts +7 -0
  574. package/dist/esm/types/index.js +8 -0
  575. package/dist/esm/types/index.js.map +1 -0
  576. package/dist/esm/types/job-json-sandbox.d.ts +5 -0
  577. package/dist/esm/types/job-json-sandbox.js +2 -0
  578. package/dist/esm/types/job-json-sandbox.js.map +1 -0
  579. package/dist/esm/types/job-options.d.ts +20 -0
  580. package/dist/esm/types/job-options.js +2 -0
  581. package/dist/esm/types/job-options.js.map +1 -0
  582. package/dist/esm/types/job-type.d.ts +3 -0
  583. package/dist/esm/types/job-type.js +2 -0
  584. package/dist/esm/types/job-type.js.map +1 -0
  585. package/dist/esm/types/minimal-queue.d.ts +2 -0
  586. package/dist/esm/types/minimal-queue.js +2 -0
  587. package/dist/esm/types/minimal-queue.js.map +1 -0
  588. package/dist/esm/types/repeat-strategy.d.ts +2 -0
  589. package/dist/esm/types/repeat-strategy.js +2 -0
  590. package/dist/esm/types/repeat-strategy.js.map +1 -0
  591. package/dist/esm/utils.d.ts +42 -0
  592. package/dist/esm/utils.js +134 -0
  593. package/dist/esm/utils.js.map +1 -0
  594. package/package.json +181 -60
  595. package/.travis.yml +0 -32
  596. package/SUMMARY.md +0 -4
  597. package/commitlint.config.js +0 -1
  598. package/dist/classes/backoffs.d.ts +0 -14
  599. package/dist/classes/backoffs.js.map +0 -1
  600. package/dist/classes/child-pool.d.ts +0 -22
  601. package/dist/classes/child-pool.js +0 -98
  602. package/dist/classes/child-pool.js.map +0 -1
  603. package/dist/classes/compat.d.ts +0 -316
  604. package/dist/classes/compat.js +0 -667
  605. package/dist/classes/compat.js.map +0 -1
  606. package/dist/classes/index.js.map +0 -1
  607. package/dist/classes/job.d.ts +0 -93
  608. package/dist/classes/job.js +0 -351
  609. package/dist/classes/job.js.map +0 -1
  610. package/dist/classes/master.js +0 -112
  611. package/dist/classes/master.js.map +0 -1
  612. package/dist/classes/queue-base.d.ts +0 -23
  613. package/dist/classes/queue-base.js +0 -68
  614. package/dist/classes/queue-base.js.map +0 -1
  615. package/dist/classes/queue-events.d.ts +0 -8
  616. package/dist/classes/queue-events.js +0 -59
  617. package/dist/classes/queue-events.js.map +0 -1
  618. package/dist/classes/queue-getters.d.ts +0 -38
  619. package/dist/classes/queue-getters.js +0 -182
  620. package/dist/classes/queue-getters.js.map +0 -1
  621. package/dist/classes/queue-keeper.js +0 -103
  622. package/dist/classes/queue-keeper.js.map +0 -1
  623. package/dist/classes/queue-scheduler.d.ts +0 -25
  624. package/dist/classes/queue-scheduler.js +0 -96
  625. package/dist/classes/queue-scheduler.js.map +0 -1
  626. package/dist/classes/queue.d.ts +0 -46
  627. package/dist/classes/queue.js +0 -122
  628. package/dist/classes/queue.js.map +0 -1
  629. package/dist/classes/redis-connection.d.ts +0 -17
  630. package/dist/classes/redis-connection.js +0 -97
  631. package/dist/classes/redis-connection.js.map +0 -1
  632. package/dist/classes/repeat.d.ts +0 -26
  633. package/dist/classes/repeat.js +0 -128
  634. package/dist/classes/repeat.js.map +0 -1
  635. package/dist/classes/sandbox.d.ts +0 -2
  636. package/dist/classes/sandbox.js.map +0 -1
  637. package/dist/classes/scripts.d.ts +0 -43
  638. package/dist/classes/scripts.js +0 -296
  639. package/dist/classes/scripts.js.map +0 -1
  640. package/dist/classes/worker.d.ts +0 -38
  641. package/dist/classes/worker.js +0 -231
  642. package/dist/classes/worker.js.map +0 -1
  643. package/dist/commands/addJob-8.lua +0 -106
  644. package/dist/commands/cleanJobsInSet-1.lua +0 -48
  645. package/dist/commands/index.d.ts +0 -2
  646. package/dist/commands/index.js +0 -42
  647. package/dist/commands/index.js.map +0 -1
  648. package/dist/commands/isFinished-2.lua +0 -22
  649. package/dist/commands/isJobInList-1.lua +0 -20
  650. package/dist/commands/moveStalledJobsToWait-8.lua +0 -91
  651. package/dist/commands/moveToActive-8.lua +0 -79
  652. package/dist/commands/moveToDelayed-5.lua +0 -39
  653. package/dist/commands/moveToFinished-6.lua +0 -87
  654. package/dist/commands/moveToFinished-7.lua +0 -92
  655. package/dist/commands/pause-4.lua +0 -27
  656. package/dist/commands/promote-4.lua +0 -49
  657. package/dist/commands/releaseLock-1.lua +0 -19
  658. package/dist/commands/removeJob-10.lua +0 -37
  659. package/dist/commands/reprocessJob-4.lua +0 -36
  660. package/dist/commands/retryJob-4.lua +0 -34
  661. package/dist/commands/takeLock-1.lua +0 -17
  662. package/dist/commands/updateDelaySet-7.lua +0 -71
  663. package/dist/commands/updateProgress-2.lua +0 -15
  664. package/dist/enums/index.d.ts +0 -1
  665. package/dist/enums/index.js +0 -5
  666. package/dist/enums/index.js.map +0 -1
  667. package/dist/enums/retry-errors.enum.d.ts +0 -5
  668. package/dist/enums/retry-errors.enum.js +0 -9
  669. package/dist/enums/retry-errors.enum.js.map +0 -1
  670. package/dist/index.js.map +0 -1
  671. package/dist/interfaces/advance-opts.js +0 -12
  672. package/dist/interfaces/advance-opts.js.map +0 -1
  673. package/dist/interfaces/advanced-options.d.ts +0 -9
  674. package/dist/interfaces/advanced-options.js +0 -11
  675. package/dist/interfaces/advanced-options.js.map +0 -1
  676. package/dist/interfaces/advanced-opts.js +0 -11
  677. package/dist/interfaces/advanced-opts.js.map +0 -1
  678. package/dist/interfaces/backoff-options.d.ts +0 -4
  679. package/dist/interfaces/backoff-options.js.map +0 -1
  680. package/dist/interfaces/backoff-opts.js.map +0 -1
  681. package/dist/interfaces/index.d.ts +0 -9
  682. package/dist/interfaces/index.js +0 -6
  683. package/dist/interfaces/index.js.map +0 -1
  684. package/dist/interfaces/jobs-options.d.ts +0 -16
  685. package/dist/interfaces/jobs-options.js.map +0 -1
  686. package/dist/interfaces/jobs-opts.js.map +0 -1
  687. package/dist/interfaces/queue-keeper-opts.js +0 -3
  688. package/dist/interfaces/queue-keeper-opts.js.map +0 -1
  689. package/dist/interfaces/queue-options.d.ts +0 -24
  690. package/dist/interfaces/queue-options.js.map +0 -1
  691. package/dist/interfaces/queue-opts.js +0 -8
  692. package/dist/interfaces/queue-opts.js.map +0 -1
  693. package/dist/interfaces/queue-scheduler-options.d.ts +0 -5
  694. package/dist/interfaces/queue-scheduler-options.js +0 -3
  695. package/dist/interfaces/queue-scheduler-options.js.map +0 -1
  696. package/dist/interfaces/queue-scheduler-opts.js +0 -3
  697. package/dist/interfaces/queue-scheduler-opts.js.map +0 -1
  698. package/dist/interfaces/rate-limiter-options.d.ts +0 -4
  699. package/dist/interfaces/rate-limiter-options.js.map +0 -1
  700. package/dist/interfaces/rate-limiter-opts.js +0 -3
  701. package/dist/interfaces/rate-limiter-opts.js.map +0 -1
  702. package/dist/interfaces/redis-options.d.ts +0 -7
  703. package/dist/interfaces/redis-options.js.map +0 -1
  704. package/dist/interfaces/redis-opts.js.map +0 -1
  705. package/dist/interfaces/repeat-options.d.ts +0 -11
  706. package/dist/interfaces/repeat-options.js.map +0 -1
  707. package/dist/interfaces/repeat-opts.js.map +0 -1
  708. package/dist/interfaces/worker-options.d.ts +0 -11
  709. package/dist/interfaces/worker-options.js.map +0 -1
  710. package/dist/interfaces/worker-opts.js.map +0 -1
  711. package/dist/test/test_bulk.js +0 -55
  712. package/dist/test/test_bulk.js.map +0 -1
  713. package/dist/test/test_child-pool.js +0 -81
  714. package/dist/test/test_child-pool.js.map +0 -1
  715. package/dist/test/test_clean.js +0 -124
  716. package/dist/test/test_clean.js.map +0 -1
  717. package/dist/test/test_compat.d.ts +0 -1
  718. package/dist/test/test_compat.js +0 -533
  719. package/dist/test/test_compat.js.map +0 -1
  720. package/dist/test/test_connection.d.ts +0 -1
  721. package/dist/test/test_connection.js +0 -140
  722. package/dist/test/test_connection.js.map +0 -1
  723. package/dist/test/test_delay.d.ts +0 -1
  724. package/dist/test/test_delay.js +0 -186
  725. package/dist/test/test_delay.js.map +0 -1
  726. package/dist/test/test_events.d.ts +0 -1
  727. package/dist/test/test_events.js +0 -147
  728. package/dist/test/test_events.js.map +0 -1
  729. package/dist/test/test_getters.d.ts +0 -1
  730. package/dist/test/test_getters.js +0 -293
  731. package/dist/test/test_getters.js.map +0 -1
  732. package/dist/test/test_job.d.ts +0 -1
  733. package/dist/test/test_job.js +0 -419
  734. package/dist/test/test_job.js.map +0 -1
  735. package/dist/test/test_pause.d.ts +0 -1
  736. package/dist/test/test_pause.js +0 -255
  737. package/dist/test/test_pause.js.map +0 -1
  738. package/dist/test/test_queue.d.ts +0 -0
  739. package/dist/test/test_queue.js +0 -72
  740. package/dist/test/test_queue.js.map +0 -1
  741. package/dist/test/test_rate_limiter.d.ts +0 -1
  742. package/dist/test/test_rate_limiter.js +0 -98
  743. package/dist/test/test_rate_limiter.js.map +0 -1
  744. package/dist/test/test_repeat.d.ts +0 -1
  745. package/dist/test/test_repeat.js +0 -602
  746. package/dist/test/test_repeat.js.map +0 -1
  747. package/dist/test/test_sandboxed_process.d.ts +0 -1
  748. package/dist/test/test_sandboxed_process.js +0 -319
  749. package/dist/test/test_sandboxed_process.js.map +0 -1
  750. package/dist/test/test_stalled_jobs.d.ts +0 -1
  751. package/dist/test/test_stalled_jobs.js +0 -107
  752. package/dist/test/test_stalled_jobs.js.map +0 -1
  753. package/dist/test/test_worker.d.ts +0 -1
  754. package/dist/test/test_worker.js +0 -1182
  755. package/dist/test/test_worker.js.map +0 -1
  756. package/dist/utils.d.ts +0 -8
  757. package/dist/utils.js +0 -31
  758. package/dist/utils.js.map +0 -1
  759. package/release.txt +0 -21
  760. package/src/classes/backoffs.ts +0 -67
  761. package/src/classes/child-pool.ts +0 -119
  762. package/src/classes/compat.ts +0 -890
  763. package/src/classes/index.ts +0 -13
  764. package/src/classes/job.ts +0 -495
  765. package/src/classes/master.ts +0 -113
  766. package/src/classes/queue-base.ts +0 -87
  767. package/src/classes/queue-events.ts +0 -78
  768. package/src/classes/queue-getters.ts +0 -213
  769. package/src/classes/queue-scheduler.ts +0 -125
  770. package/src/classes/queue.ts +0 -180
  771. package/src/classes/redis-connection.ts +0 -111
  772. package/src/classes/repeat.ts +0 -217
  773. package/src/classes/sandbox.ts +0 -60
  774. package/src/classes/scripts.ts +0 -468
  775. package/src/classes/worker.ts +0 -288
  776. package/src/commands/addJob-8.lua +0 -106
  777. package/src/commands/cleanJobsInSet-1.lua +0 -48
  778. package/src/commands/index.ts +0 -62
  779. package/src/commands/isFinished-2.lua +0 -22
  780. package/src/commands/isJobInList-1.lua +0 -20
  781. package/src/commands/moveStalledJobsToWait-8.lua +0 -91
  782. package/src/commands/moveToActive-8.lua +0 -79
  783. package/src/commands/moveToDelayed-5.lua +0 -39
  784. package/src/commands/moveToFinished-7.lua +0 -92
  785. package/src/commands/pause-4.lua +0 -27
  786. package/src/commands/promote-4.lua +0 -49
  787. package/src/commands/releaseLock-1.lua +0 -19
  788. package/src/commands/removeJob-10.lua +0 -37
  789. package/src/commands/reprocessJob-4.lua +0 -36
  790. package/src/commands/retryJob-4.lua +0 -34
  791. package/src/commands/takeLock-1.lua +0 -17
  792. package/src/commands/updateDelaySet-7.lua +0 -71
  793. package/src/commands/updateProgress-2.lua +0 -15
  794. package/src/enums/index.ts +0 -1
  795. package/src/enums/retry-errors.enum.ts +0 -5
  796. package/src/interfaces/advanced-options.ts +0 -28
  797. package/src/interfaces/backoff-options.ts +0 -4
  798. package/src/interfaces/index.ts +0 -9
  799. package/src/interfaces/jobs-options.ts +0 -53
  800. package/src/interfaces/queue-options.ts +0 -30
  801. package/src/interfaces/queue-scheduler-options.ts +0 -6
  802. package/src/interfaces/rate-limiter-options.ts +0 -7
  803. package/src/interfaces/redis-options.ts +0 -9
  804. package/src/interfaces/repeat-options.ts +0 -19
  805. package/src/interfaces/worker-options.ts +0 -13
  806. package/src/test/fixtures/fixture_processor.js +0 -13
  807. package/src/test/fixtures/fixture_processor_bar.js +0 -13
  808. package/src/test/fixtures/fixture_processor_crash.js +0 -16
  809. package/src/test/fixtures/fixture_processor_exit.js +0 -15
  810. package/src/test/fixtures/fixture_processor_fail.js +0 -13
  811. package/src/test/fixtures/fixture_processor_foo.js +0 -13
  812. package/src/test/fixtures/fixture_processor_progress.js +0 -29
  813. package/src/test/fixtures/fixture_processor_slow.js +0 -13
  814. package/src/test/test_bulk.ts +0 -59
  815. package/src/test/test_child-pool.ts +0 -88
  816. package/src/test/test_clean.ts +0 -148
  817. package/src/test/test_compat.ts +0 -640
  818. package/src/test/test_connection.ts +0 -159
  819. package/src/test/test_delay.ts +0 -220
  820. package/src/test/test_events.ts +0 -198
  821. package/src/test/test_getters.ts +0 -348
  822. package/src/test/test_job.ts +0 -524
  823. package/src/test/test_pause.ts +0 -313
  824. package/src/test/test_queue.ts +0 -70
  825. package/src/test/test_rate_limiter.ts +0 -113
  826. package/src/test/test_repeat.ts +0 -783
  827. package/src/test/test_sandboxed_process.ts +0 -380
  828. package/src/test/test_stalled_jobs.ts +0 -146
  829. package/src/test/test_worker.ts +0 -1503
  830. package/src/utils.ts +0 -28
  831. package/tsconfig.json +0 -25
  832. package/tslint.json +0 -23
  833. /package/dist/{classes/master.d.ts → cjs/classes/main-worker.d.ts} +0 -0
  834. /package/dist/{test/test_bulk.d.ts → cjs/classes/main.d.ts} +0 -0
  835. /package/dist/{interfaces → cjs/interfaces}/backoff-options.js +0 -0
  836. /package/dist/{interfaces → cjs/interfaces}/rate-limiter-options.js +0 -0
  837. /package/dist/{interfaces → cjs/interfaces}/redis-options.js +0 -0
  838. /package/dist/{interfaces → cjs/interfaces}/repeat-options.js +0 -0
  839. /package/dist/{interfaces → cjs/interfaces}/worker-options.js +0 -0
  840. /package/dist/{test/test_child-pool.d.ts → esm/classes/main-worker.d.ts} +0 -0
  841. /package/dist/{test/test_clean.d.ts → esm/classes/main.d.ts} +0 -0
@@ -1,1503 +0,0 @@
1
- import { Queue, QueueEvents, Job, Worker, QueueScheduler } from '@src/classes';
2
- import { describe, beforeEach, it } from 'mocha';
3
- import { expect } from 'chai';
4
- import IORedis from 'ioredis';
5
- import { v4 } from 'node-uuid';
6
- import { delay } from 'bluebird';
7
- import { after, times, once } from 'lodash';
8
- import { RetryErrors } from '@src/enums';
9
- import * as sinon from 'sinon';
10
-
11
- describe('workers', function() {
12
- const sandbox = sinon.createSandbox();
13
-
14
- let queue: Queue;
15
- let queueEvents: QueueEvents;
16
- let queueName: string;
17
- let client: IORedis.Redis;
18
-
19
- beforeEach(function() {
20
- client = new IORedis();
21
- return client.flushdb();
22
- });
23
-
24
- beforeEach(async function() {
25
- queueName = 'test-' + v4();
26
- queue = new Queue(queueName);
27
- queueEvents = new QueueEvents(queueName);
28
- return queueEvents.waitUntilReady();
29
- });
30
-
31
- afterEach(async function() {
32
- sandbox.restore();
33
- await queue.close();
34
- await queueEvents.close();
35
- return client.quit();
36
- });
37
-
38
- it('should get all workers for this queue', async function() {
39
- const worker = new Worker(queueName, async job => {});
40
- await worker.waitUntilReady();
41
-
42
- const workers = await queue.getWorkers();
43
- expect(workers).to.have.length(1);
44
- return worker.close();
45
- });
46
-
47
- describe('auto job removal', () => {
48
- it('should remove job after completed if removeOnComplete', async () => {
49
- const worker = new Worker(queueName, async job => {
50
- expect(job.data.foo).to.be.equal('bar');
51
- });
52
- await worker.waitUntilReady();
53
-
54
- const job = await queue.add(
55
- 'test',
56
- { foo: 'bar' },
57
- { removeOnComplete: true },
58
- );
59
- expect(job.id).to.be.ok;
60
- expect(job.data.foo).to.be.eql('bar');
61
-
62
- return new Promise((resolve, reject) => {
63
- worker.on('completed', async (job: Job) => {
64
- try {
65
- const gotJob = await queue.getJob(job.id);
66
- expect(gotJob).to.be.equal(null);
67
- const counts = await queue.getJobCounts('completed');
68
- expect(counts.completed).to.be.equal(0);
69
- await worker.close();
70
- resolve();
71
- } catch (err) {
72
- reject(err);
73
- }
74
- });
75
- });
76
- });
77
-
78
- it('should remove a job after completed if the default job options specify removeOnComplete', async () => {
79
- const newQueue = new Queue(queueName, {
80
- defaultJobOptions: {
81
- removeOnComplete: true,
82
- },
83
- });
84
-
85
- const worker = new Worker(queueName, async job => {
86
- expect(job.data.foo).to.be.equal('bar');
87
- });
88
- await worker.waitUntilReady();
89
-
90
- const job = await newQueue.add('test', { foo: 'bar' });
91
- expect(job.id).to.be.ok;
92
- expect(job.data.foo).to.be.eql('bar');
93
-
94
- return new Promise((resolve, reject) => {
95
- worker.on('completed', async job => {
96
- try {
97
- const gotJob = await newQueue.getJob(job.id);
98
- expect(gotJob).to.be.equal(null);
99
- const counts = await newQueue.getJobCounts('completed');
100
- expect(counts.completed).to.be.equal(0);
101
- await worker.close();
102
- await newQueue.close();
103
- resolve();
104
- } catch (err) {
105
- reject(err);
106
- }
107
- });
108
- });
109
- });
110
-
111
- it('should keep specified number of jobs after completed with removeOnComplete', async () => {
112
- const keepJobs = 3;
113
-
114
- const worker = new Worker(queueName, async job => {
115
- await job.log('test log');
116
- });
117
- await worker.waitUntilReady();
118
-
119
- const datas = [0, 1, 2, 3, 4, 5, 6, 7, 8];
120
-
121
- const jobIds = await Promise.all(
122
- datas.map(
123
- async data =>
124
- (await queue.add('test', data, { removeOnComplete: keepJobs })).id,
125
- ),
126
- );
127
-
128
- return new Promise(resolve => {
129
- worker.on('completed', async job => {
130
- if (job.data == 8) {
131
- const counts = await queue.getJobCounts('completed');
132
- expect(counts.completed).to.be.equal(keepJobs);
133
-
134
- await Promise.all(
135
- jobIds.map(async (jobId, index) => {
136
- const job = await queue.getJob(jobId);
137
- const logs = await queue.getJobLogs(jobId);
138
- if (index >= datas.length - keepJobs) {
139
- expect(job).to.not.be.equal(null);
140
- expect(logs.logs).to.not.be.empty;
141
- } else {
142
- expect(job).to.be.equal(null);
143
- expect(logs.logs).to.be.empty;
144
- }
145
- }),
146
- );
147
- await worker.close();
148
- resolve();
149
- }
150
- });
151
- });
152
- });
153
-
154
- it('should keep specified number of jobs after completed with global removeOnComplete', async () => {
155
- const keepJobs = 3;
156
-
157
- const newQueue = new Queue(queueName, {
158
- defaultJobOptions: {
159
- removeOnComplete: keepJobs,
160
- },
161
- });
162
-
163
- const worker = new Worker(queueName, async job => {
164
- await job.log('test log');
165
- });
166
- await worker.waitUntilReady();
167
-
168
- const datas = [0, 1, 2, 3, 4, 5, 6, 7, 8];
169
-
170
- const jobIds = await Promise.all(
171
- datas.map(async data => (await newQueue.add('test', data)).id),
172
- );
173
-
174
- return new Promise((resolve, reject) => {
175
- worker.on('completed', async job => {
176
- if (job.data == 8) {
177
- try {
178
- const counts = await newQueue.getJobCounts('completed');
179
- expect(counts.completed).to.be.equal(keepJobs);
180
-
181
- await Promise.all(
182
- jobIds.map(async (jobId, index) => {
183
- const job = await newQueue.getJob(jobId);
184
- if (index >= datas.length - keepJobs) {
185
- expect(job).to.not.be.equal(null);
186
- } else {
187
- expect(job).to.be.equal(null);
188
- }
189
- }),
190
- );
191
- } catch (err) {
192
- reject(err);
193
- } finally {
194
- await worker.close();
195
- await newQueue.close();
196
- }
197
-
198
- resolve();
199
- }
200
- });
201
- });
202
- });
203
-
204
- it('should remove job after failed if removeOnFail', async () => {
205
- const worker = new Worker(queueName, async job => {
206
- await job.log('test log');
207
- throw Error('error');
208
- });
209
- await worker.waitUntilReady();
210
-
211
- const job = await queue.add(
212
- 'test',
213
- { foo: 'bar' },
214
- { removeOnFail: true },
215
- );
216
- expect(job.id).to.be.ok;
217
- expect(job.data.foo).to.be.eql('bar');
218
-
219
- return new Promise((resolve, reject) => {
220
- worker.on('failed', async jobId => {
221
- await queue
222
- .getJob(jobId)
223
- .then(job => {
224
- expect(job).to.be.equal(null);
225
- return null;
226
- })
227
- .then(() => {
228
- return queue.getJobCounts('failed').then(counts => {
229
- expect(counts.failed).to.be.equal(0);
230
- resolve();
231
- });
232
- });
233
- });
234
- });
235
- });
236
-
237
- it('should remove a job after fail if the default job options specify removeOnFail', async () => {
238
- const worker = new Worker(queueName, async job => {
239
- expect(job.data.foo).to.be.equal('bar');
240
- throw Error('error');
241
- });
242
- await worker.waitUntilReady();
243
-
244
- const newQueue = new Queue(queueName, {
245
- defaultJobOptions: {
246
- removeOnFail: true,
247
- },
248
- });
249
-
250
- const job = await newQueue.add('test', { foo: 'bar' });
251
- expect(job.id).to.be.ok;
252
- expect(job.data.foo).to.be.eql('bar');
253
-
254
- return new Promise((resolve, reject) => {
255
- worker.on('failed', async jobId => {
256
- const job = await newQueue.getJob(jobId);
257
- expect(job).to.be.equal(null);
258
- const counts = await newQueue.getJobCounts('completed');
259
- expect(counts.completed).to.be.equal(0);
260
- await worker.close();
261
- await newQueue.close();
262
- resolve();
263
- });
264
- });
265
- });
266
-
267
- it('should keep specified number of jobs after completed with removeOnFail', async () => {
268
- const keepJobs = 3;
269
-
270
- const worker = new Worker(queueName, async job => {
271
- throw Error('error');
272
- });
273
- await worker.waitUntilReady();
274
-
275
- const datas = [0, 1, 2, 3, 4, 5, 6, 7, 8];
276
-
277
- const jobIds = await Promise.all(
278
- datas.map(
279
- async data =>
280
- (await queue.add('test', data, { removeOnFail: keepJobs })).id,
281
- ),
282
- );
283
-
284
- return new Promise(resolve => {
285
- worker.on('failed', async job => {
286
- if (job.data == 8) {
287
- const counts = await queue.getJobCounts('failed');
288
- expect(counts.failed).to.be.equal(keepJobs);
289
-
290
- await Promise.all(
291
- jobIds.map(async (jobId, index) => {
292
- const job = await queue.getJob(jobId);
293
- if (index >= datas.length - keepJobs) {
294
- expect(job).to.not.be.equal(null);
295
- } else {
296
- expect(job).to.be.equal(null);
297
- }
298
- }),
299
- );
300
- await worker.close();
301
- resolve();
302
- }
303
- });
304
- });
305
- });
306
-
307
- it('should keep specified number of jobs after completed with global removeOnFail', async () => {
308
- const keepJobs = 3;
309
-
310
- const worker = new Worker(queueName, async job => {
311
- expect(job.data.foo).to.be.equal('bar');
312
- throw Error('error');
313
- });
314
- await worker.waitUntilReady();
315
-
316
- const newQueue = new Queue(queueName, {
317
- defaultJobOptions: {
318
- removeOnFail: keepJobs,
319
- },
320
- });
321
-
322
- const datas = [0, 1, 2, 3, 4, 5, 6, 7, 8];
323
-
324
- const jobIds = await Promise.all(
325
- datas.map(async data => (await newQueue.add('test', data)).id),
326
- );
327
-
328
- return new Promise((resolve, reject) => {
329
- worker.on('failed', async job => {
330
- if (job.data == 8) {
331
- try {
332
- const counts = await newQueue.getJobCounts('failed');
333
- expect(counts.failed).to.be.equal(keepJobs);
334
-
335
- await Promise.all(
336
- jobIds.map(async (jobId, index) => {
337
- const job = await newQueue.getJob(jobId);
338
- if (index >= datas.length - keepJobs) {
339
- expect(job).to.not.be.equal(null);
340
- } else {
341
- expect(job).to.be.equal(null);
342
- }
343
- }),
344
- );
345
- } catch (err) {
346
- reject(err);
347
- }
348
- await worker.close();
349
- await newQueue.close();
350
- resolve();
351
- }
352
- });
353
- });
354
- });
355
- });
356
-
357
- it('process a lifo queue', async function() {
358
- this.timeout(3000);
359
- let currentValue = 0;
360
- let first = true;
361
-
362
- let processor;
363
- const processing = new Promise((resolve, reject) => {
364
- processor = async (job: Job) => {
365
- try {
366
- expect(job.data.count).to.be.equal(currentValue--);
367
- } catch (err) {
368
- reject(err);
369
- }
370
-
371
- if (first) {
372
- first = false;
373
- } else if (currentValue === 0) {
374
- resolve();
375
- }
376
- };
377
- });
378
-
379
- const worker = new Worker(queueName, processor);
380
- await worker.waitUntilReady();
381
-
382
- await queue.pause();
383
- // Add a series of jobs in a predictable order
384
- const jobs = [
385
- { count: ++currentValue },
386
- { count: ++currentValue },
387
- { count: ++currentValue },
388
- { count: ++currentValue },
389
- ];
390
- await Promise.all(
391
- jobs.map(jobData => {
392
- return queue.add('test', jobData, { lifo: true });
393
- }),
394
- );
395
- await queue.resume();
396
-
397
- await processing;
398
-
399
- await worker.close();
400
- });
401
-
402
- it('should processes jobs by priority', async () => {
403
- const normalPriority = [];
404
- const mediumPriority = [];
405
- const highPriority = [];
406
-
407
- let processor;
408
-
409
- // for the current strategy this number should not exceed 8 (2^2*2)
410
- // this is done to maitain a deterministic output.
411
- const numJobsPerPriority = 6;
412
-
413
- for (let i = 0; i < numJobsPerPriority; i++) {
414
- normalPriority.push(queue.add('test', { p: 2 }, { priority: 2 }));
415
- mediumPriority.push(queue.add('test', { p: 3 }, { priority: 3 }));
416
- highPriority.push(queue.add('test', { p: 1 }, { priority: 1 }));
417
- }
418
-
419
- let currentPriority = 1;
420
- let counter = 0;
421
- let total = 0;
422
-
423
- const processing = new Promise((resolve, reject) => {
424
- processor = async (job: Job) => {
425
- try {
426
- expect(job.id).to.be.ok;
427
- expect(job.data.p).to.be.eql(currentPriority);
428
- } catch (err) {
429
- reject(err);
430
- }
431
-
432
- total++;
433
- if (++counter === numJobsPerPriority) {
434
- currentPriority++;
435
- counter = 0;
436
-
437
- if (currentPriority === 4 && total === numJobsPerPriority * 3) {
438
- resolve();
439
- }
440
- }
441
- };
442
- });
443
-
444
- const worker = new Worker(queueName, processor);
445
- await worker.waitUntilReady();
446
-
447
- // wait for all jobs to enter the queue and then start processing
448
- await Promise.all([normalPriority, mediumPriority, highPriority]);
449
-
450
- await processing;
451
-
452
- await worker.close();
453
- });
454
-
455
- it('process several jobs serially', async () => {
456
- this.timeout(12000);
457
- let counter = 1;
458
- const maxJobs = 35;
459
-
460
- let processor;
461
- const processing = new Promise((resolve, reject) => {
462
- processor = async (job: Job) => {
463
- try {
464
- expect(job.data.num).to.be.equal(counter);
465
- expect(job.data.foo).to.be.equal('bar');
466
- if (counter === maxJobs) {
467
- resolve();
468
- }
469
- counter++;
470
- } catch (err) {
471
- reject(err);
472
- }
473
- };
474
- });
475
-
476
- const worker = new Worker(queueName, processor);
477
- await worker.waitUntilReady();
478
-
479
- for (let i = 1; i <= maxJobs; i++) {
480
- await queue.add('test', { foo: 'bar', num: i });
481
- }
482
-
483
- await processing;
484
- await worker.close();
485
- });
486
-
487
- it('process a job that updates progress', async () => {
488
- let processor;
489
-
490
- const job = await queue.add('test', { foo: 'bar' });
491
- expect(job.id).to.be.ok;
492
- expect(job.data.foo).to.be.eql('bar');
493
-
494
- const processing = new Promise((resolve, reject) => {
495
- queueEvents.on('progress', args => {
496
- const { jobId, data } = args;
497
- expect(jobId).to.be.ok;
498
- expect(data).to.be.eql(42);
499
- resolve();
500
- });
501
-
502
- processor = async (job: Job) => {
503
- try {
504
- expect(job.data.foo).to.be.equal('bar');
505
- await job.updateProgress(42);
506
- } catch (err) {
507
- reject(err);
508
- }
509
- };
510
- });
511
-
512
- const worker = new Worker(queueName, processor);
513
- await worker.waitUntilReady();
514
-
515
- await processing;
516
-
517
- await worker.close();
518
- });
519
-
520
- it('processes jobs that were added before the worker started', async () => {
521
- const jobs = [
522
- queue.add('test', { bar: 'baz' }),
523
- queue.add('test', { bar1: 'baz1' }),
524
- queue.add('test', { bar2: 'baz2' }),
525
- queue.add('test', { bar3: 'baz3' }),
526
- ];
527
-
528
- await Promise.all(jobs);
529
-
530
- const worker = new Worker(queueName, async job => {});
531
- await worker.waitUntilReady();
532
-
533
- await new Promise(resolve => {
534
- const resolveAfterAllJobs = after(jobs.length, resolve);
535
- worker.on('completed', resolveAfterAllJobs);
536
- });
537
-
538
- await worker.close();
539
- });
540
-
541
- it('process a job that returns data in the process handler', async () => {
542
- const worker = new Worker(queueName, async job => {
543
- expect(job.data.foo).to.be.equal('bar');
544
- return 37;
545
- });
546
- await worker.waitUntilReady();
547
-
548
- const job = await queue.add('test', { foo: 'bar' });
549
- expect(job.id).to.be.ok;
550
- expect(job.data.foo).to.be.eql('bar');
551
-
552
- await new Promise(async (resolve, reject) => {
553
- worker.on('completed', async (job, data) => {
554
- try {
555
- expect(job).to.be.ok;
556
- expect(data).to.be.eql(37);
557
-
558
- const gotJob = await queue.getJob(job.id);
559
- expect(gotJob.returnvalue).to.be.eql(37);
560
- resolve();
561
- } catch (err) {
562
- reject(err);
563
- }
564
- });
565
- });
566
-
567
- await worker.close();
568
- });
569
-
570
- it('process a job that returns a string in the process handler', async () => {
571
- const testString = 'a very dignified string';
572
-
573
- const worker = new Worker(queueName, async job => {
574
- return testString;
575
- });
576
- await worker.waitUntilReady();
577
-
578
- const waiting = new Promise(async (resolve, reject) => {
579
- queueEvents.on('completed', async (data /*, data*/) => {
580
- try {
581
- expect(data).to.be.ok;
582
- expect(data.returnvalue).to.be.equal(testString);
583
- await delay(100);
584
- const gotJob = await queue.getJob(data.jobId);
585
-
586
- expect(gotJob).to.be.ok;
587
- expect(gotJob.returnvalue).to.be.equal(testString);
588
- resolve();
589
- } catch (err) {
590
- reject(err);
591
- }
592
- });
593
- });
594
-
595
- await queue.add('test', { testing: true });
596
- await waiting;
597
- await worker.close();
598
- });
599
-
600
- it('process a job that returning data returnvalue gets stored in the database', async () => {
601
- const worker = new Worker(queueName, async job => {
602
- expect(job.data.foo).to.be.equal('bar');
603
- return 37;
604
- });
605
- await worker.waitUntilReady();
606
-
607
- const job = await queue.add('test', { foo: 'bar' });
608
- expect(job.id).to.be.ok;
609
- expect(job.data.foo).to.be.eql('bar');
610
-
611
- await new Promise(async (resolve, reject) => {
612
- worker.on('completed', async (job, data) => {
613
- try {
614
- expect(job).to.be.ok;
615
- expect(data).to.be.eql(37);
616
- const gotJob = await queue.getJob(job.id);
617
- expect(gotJob.returnvalue).to.be.eql(37);
618
-
619
- const retval = await queue.client.hget(
620
- queue.toKey(gotJob.id),
621
- 'returnvalue',
622
- );
623
- expect(JSON.parse(retval)).to.be.eql(37);
624
- resolve();
625
- } catch (err) {
626
- reject(err);
627
- }
628
- });
629
- });
630
-
631
- await worker.close();
632
- });
633
-
634
- it('process a job that does some asynchronous operation', async () => {
635
- const worker = new Worker(queueName, async job => {
636
- expect(job.data.foo).to.be.equal('bar');
637
- await delay(250);
638
- return 'my data';
639
- });
640
- await worker.waitUntilReady();
641
-
642
- const job = await queue.add('test', { foo: 'bar' });
643
- expect(job.id).to.be.ok;
644
- expect(job.data.foo).to.be.eql('bar');
645
-
646
- await new Promise(async resolve => {
647
- worker.on('completed', (job, data) => {
648
- expect(job).to.be.ok;
649
- expect(data).to.be.eql('my data');
650
- resolve();
651
- });
652
- });
653
-
654
- await worker.close();
655
- });
656
-
657
- it('process a synchronous job', async () => {
658
- const worker = new Worker(queueName, async job => {
659
- expect(job.data.foo).to.be.equal('bar');
660
- });
661
-
662
- await worker.waitUntilReady();
663
-
664
- const job = await queue.add('test', { foo: 'bar' });
665
- expect(job.id).to.be.ok;
666
- expect(job.data.foo).to.be.eql('bar');
667
-
668
- await new Promise(resolve => {
669
- worker.on('completed', job => {
670
- expect(job).to.be.ok;
671
- resolve();
672
- });
673
- });
674
-
675
- await worker.close();
676
- });
677
-
678
- it('does not process a job that is being processed when a new queue starts', async () => {
679
- this.timeout(12000);
680
- let err;
681
-
682
- const worker = new Worker(queueName, async job => {
683
- expect(job.data.foo).to.be.equal('bar');
684
-
685
- if (addedJob.id !== job.id) {
686
- err = new Error('Processed job id does not match that of added job');
687
- }
688
- delay(500);
689
- });
690
-
691
- await worker.waitUntilReady();
692
-
693
- const addedJob = await queue.add('test', { foo: 'bar' });
694
-
695
- const anotherWorker = new Worker(queueName, async job => {
696
- err = new Error(
697
- 'The second queue should not have received a job to process',
698
- );
699
- });
700
-
701
- worker.on('completed', async () => {
702
- await anotherWorker.close();
703
- });
704
-
705
- await worker.close();
706
- await anotherWorker.close();
707
-
708
- if (err) {
709
- throw err;
710
- }
711
- });
712
-
713
- it('process a job that throws an exception', async () => {
714
- const jobError = new Error('Job Failed');
715
-
716
- const worker = new Worker(queueName, async job => {
717
- expect(job.data.foo).to.be.equal('bar');
718
- throw jobError;
719
- });
720
- await worker.waitUntilReady();
721
-
722
- const job = await queue.add('test', { foo: 'bar' });
723
- expect(job.id).to.be.ok;
724
- expect(job.data.foo).to.be.eql('bar');
725
-
726
- await new Promise(resolve => {
727
- worker.once('failed', async (job, err) => {
728
- expect(job).to.be.ok;
729
- expect(job.data.foo).to.be.eql('bar');
730
- expect(err).to.be.eql(jobError);
731
- resolve();
732
- });
733
- });
734
-
735
- await worker.close();
736
- });
737
-
738
- it('process a job that returns data with a circular dependency', async () => {
739
- const worker = new Worker(queueName, async job => {
740
- const circular = { x: {} };
741
- circular.x = circular;
742
- return circular;
743
- });
744
- await worker.waitUntilReady();
745
-
746
- const waiting = new Promise((resolve, reject) => {
747
- worker.on('failed', () => {
748
- resolve();
749
- });
750
- worker.on('completed', () => {
751
- reject(Error('Should not complete'));
752
- });
753
- });
754
-
755
- await queue.add('test', { foo: 'bar' });
756
-
757
- await waiting;
758
- await worker.close();
759
- });
760
-
761
- it('process a job that returns a rejected promise', async () => {
762
- const jobError = new Error('Job Failed');
763
-
764
- const worker = new Worker(queueName, async job => {
765
- expect(job.data.foo).to.be.equal('bar');
766
- return Promise.reject(jobError);
767
- });
768
- await worker.waitUntilReady();
769
-
770
- const job = await queue.add('test', { foo: 'bar' });
771
- expect(job.id).to.be.ok;
772
- expect(job.data.foo).to.be.eql('bar');
773
-
774
- await new Promise((resolve, reject) => {
775
- worker.once('failed', (job, err) => {
776
- try {
777
- expect(job.id).to.be.ok;
778
- expect(job.data.foo).to.be.eql('bar');
779
- expect(err).to.be.eql(jobError);
780
- resolve();
781
- } catch (err) {
782
- reject(err);
783
- }
784
- });
785
- });
786
-
787
- await worker.close();
788
- });
789
-
790
- it('retry a job that fails', async () => {
791
- let failedOnce = false;
792
- const notEvenErr = new Error('Not even!');
793
-
794
- const worker = new Worker(queueName, async job => {
795
- if (!failedOnce) {
796
- throw notEvenErr;
797
- }
798
- });
799
- await worker.waitUntilReady();
800
-
801
- const failing = new Promise((resolve, reject) => {
802
- worker.once('failed', async (job, err) => {
803
- try {
804
- expect(job).to.be.ok;
805
- expect(job.data.foo).to.be.eql('bar');
806
- expect(err).to.be.eql(notEvenErr);
807
- failedOnce = true;
808
- } catch (err) {
809
- reject(err);
810
- }
811
- resolve();
812
- });
813
- });
814
-
815
- const completing = new Promise((resolve, reject) => {
816
- worker.once('completed', () => {
817
- try {
818
- expect(failedOnce).to.be.eql(true);
819
- resolve();
820
- } catch (err) {
821
- reject(err);
822
- }
823
- });
824
- });
825
-
826
- const job = await queue.add('test', { foo: 'bar' });
827
- expect(job.id).to.be.ok;
828
- expect(job.data.foo).to.be.eql('bar');
829
-
830
- await failing;
831
- await job.retry();
832
- await completing;
833
-
834
- await worker.close();
835
- });
836
-
837
- it('retry a job that fails using job retry method', async () => {
838
- let called = 0;
839
- let failedOnce = false;
840
- const notEvenErr = new Error('Not even!');
841
-
842
- const worker = new Worker(queueName, async job => {
843
- called++;
844
- if (called % 2 !== 0) {
845
- throw notEvenErr;
846
- }
847
- });
848
- await worker.waitUntilReady();
849
-
850
- const job = await queue.add('test', { foo: 'bar' });
851
- expect(job.id).to.be.ok;
852
- expect(job.data.foo).to.be.eql('bar');
853
-
854
- worker.once('failed', async (job, err) => {
855
- expect(job).to.be.ok;
856
- expect(job.data.foo).to.be.eql('bar');
857
- expect(err).to.be.eql(notEvenErr);
858
- failedOnce = true;
859
-
860
- await worker.pause(true);
861
-
862
- await job.retry();
863
-
864
- expect(job.failedReason).to.be.null;
865
- expect(job.processedOn).to.be.null;
866
- expect(job.finishedOn).to.be.null;
867
-
868
- const updatedJob = await queue.getJob(job.id);
869
- expect(updatedJob.failedReason).to.be.undefined;
870
- expect(updatedJob.processedOn).to.be.undefined;
871
- expect(updatedJob.finishedOn).to.be.undefined;
872
-
873
- await worker.resume();
874
- });
875
-
876
- await new Promise(resolve => {
877
- worker.once('completed', () => {
878
- expect(failedOnce).to.be.eql(true);
879
- resolve();
880
- });
881
- });
882
-
883
- await worker.close();
884
- });
885
-
886
- it('count added, unprocessed jobs', async () => {
887
- const maxJobs = 100;
888
- const added = [];
889
-
890
- for (let i = 1; i <= maxJobs; i++) {
891
- added.push(queue.add('test', { foo: 'bar', num: i }));
892
- }
893
-
894
- await Promise.all(added);
895
- const count = await queue.count();
896
- expect(count).to.be.eql(maxJobs);
897
- await queue.drain();
898
- const countAfterEmpty = await queue.count();
899
- expect(countAfterEmpty).to.be.eql(0);
900
- });
901
-
902
- describe('Concurrency process', () => {
903
- it('should run job in sequence if I specify a concurrency of 1', async () => {
904
- let processing = false;
905
-
906
- const worker = new Worker(
907
- queueName,
908
- async job => {
909
- expect(processing).to.be.equal(false);
910
- processing = true;
911
- await delay(50);
912
- processing = false;
913
- },
914
- {
915
- concurrency: 1,
916
- },
917
- );
918
- await worker.waitUntilReady();
919
-
920
- await queue.add('test', {});
921
- await queue.add('test', {});
922
-
923
- await new Promise(resolve => {
924
- worker.on('completed', after(2, resolve));
925
- });
926
-
927
- await worker.close();
928
- });
929
-
930
- //This job use delay to check that at any time we have 4 process in parallel.
931
- //Due to time to get new jobs and call process, false negative can appear.
932
- it('should process job respecting the concurrency set', async function() {
933
- this.timeout(10000);
934
- let nbProcessing = 0;
935
- let pendingMessageToProcess = 8;
936
- let wait = 10;
937
-
938
- const worker = new Worker(
939
- queueName,
940
- async job => {
941
- try {
942
- nbProcessing++;
943
- expect(nbProcessing).to.be.lessThan(5);
944
-
945
- wait += 100;
946
-
947
- await delay(wait);
948
- //We should not have 4 more in parallel.
949
- //At the end, due to empty list, no new job will process, so nbProcessing will decrease.
950
- expect(nbProcessing).to.be.eql(
951
- Math.min(pendingMessageToProcess, 4),
952
- );
953
- pendingMessageToProcess--;
954
- nbProcessing--;
955
- } catch (err) {
956
- console.error(err);
957
- }
958
- },
959
- {
960
- concurrency: 4,
961
- },
962
- );
963
- await worker.waitUntilReady();
964
-
965
- const waiting = new Promise((resolve, reject) => {
966
- worker.on('completed', after(8, resolve));
967
- worker.on('failed', reject);
968
- });
969
-
970
- await Promise.all(times(8, () => queue.add('test', {})));
971
-
972
- await waiting;
973
- await worker.close();
974
- });
975
-
976
- it('should wait for all concurrent processing in case of pause', async function() {
977
- this.timeout(10000);
978
-
979
- let i = 0;
980
- let nbJobFinish = 0;
981
-
982
- const worker = new Worker(
983
- queueName,
984
- async job => {
985
- try {
986
- if (++i === 4) {
987
- // Pause when all 4 works are processing
988
- await worker.pause();
989
-
990
- // Wait for all the active jobs to finalize.
991
- expect(nbJobFinish).to.be.equal(3);
992
- await worker.resume();
993
- }
994
- } catch (err) {
995
- console.error(err);
996
- }
997
-
998
- // 100 - i*20 is to force to finish job n°4 before lower job that will wait longer
999
- await delay(100 - i * 10);
1000
- nbJobFinish++;
1001
-
1002
- // We simulate an error of one processing job.
1003
- if (i % 3 === 0) {
1004
- throw new Error();
1005
- }
1006
- },
1007
- {
1008
- concurrency: 4,
1009
- },
1010
- );
1011
- await worker.waitUntilReady();
1012
-
1013
- const waiting = new Promise((resolve, reject) => {
1014
- const cb = after(8, resolve);
1015
- worker.on('completed', cb);
1016
- worker.on('failed', cb);
1017
- worker.on('error', reject);
1018
- });
1019
- await Promise.all(times(8, () => queue.add('test', {})));
1020
-
1021
- await waiting;
1022
-
1023
- await worker.close();
1024
- });
1025
- });
1026
-
1027
- describe('Retries and backoffs', () => {
1028
- it('should not retry a job if it has been marked as unrecoverable', async () => {
1029
- let tries = 0;
1030
-
1031
- const worker = new Worker(queueName, async job => {
1032
- tries++;
1033
- expect(tries).to.equal(1);
1034
- job.discard();
1035
- throw new Error('unrecoverable error');
1036
- });
1037
-
1038
- await worker.waitUntilReady();
1039
-
1040
- await queue.add(
1041
- 'test',
1042
- { foo: 'bar' },
1043
- {
1044
- attempts: 5,
1045
- },
1046
- );
1047
-
1048
- await new Promise(resolve => {
1049
- worker.on('failed', resolve);
1050
- });
1051
-
1052
- await worker.close();
1053
- });
1054
-
1055
- it('should automatically retry a failed job if attempts is bigger than 1', async () => {
1056
- let tries = 0;
1057
-
1058
- const worker = new Worker(queueName, async job => {
1059
- expect(job.attemptsMade).to.be.eql(tries);
1060
- tries++;
1061
- if (job.attemptsMade < 2) {
1062
- throw new Error('Not yet!');
1063
- }
1064
- });
1065
-
1066
- await worker.waitUntilReady();
1067
-
1068
- await queue.add(
1069
- 'test',
1070
- { foo: 'bar' },
1071
- {
1072
- attempts: 3,
1073
- },
1074
- );
1075
-
1076
- await new Promise(resolve => {
1077
- worker.on('completed', resolve);
1078
- });
1079
-
1080
- await worker.close();
1081
- });
1082
-
1083
- it('should not retry a failed job more than the number of given attempts times', async () => {
1084
- let tries = 0;
1085
-
1086
- const worker = new Worker(queueName, async job => {
1087
- tries++;
1088
- if (job.attemptsMade < 3) {
1089
- throw new Error('Not yet!');
1090
- }
1091
- expect(job.attemptsMade).to.be.eql(tries - 1);
1092
- });
1093
-
1094
- await worker.waitUntilReady();
1095
-
1096
- await queue.add(
1097
- 'test',
1098
- { foo: 'bar' },
1099
- {
1100
- attempts: 3,
1101
- },
1102
- );
1103
-
1104
- await new Promise((resolve, reject) => {
1105
- worker.on('completed', () => {
1106
- reject(new Error('Failed job was retried more than it should be!'));
1107
- });
1108
- worker.on('failed', () => {
1109
- if (tries === 3) {
1110
- resolve();
1111
- }
1112
- });
1113
- });
1114
-
1115
- await worker.close();
1116
- });
1117
-
1118
- it('should retry a job after a delay if a fixed backoff is given', async function() {
1119
- this.timeout(12000);
1120
-
1121
- const queueScheduler = new QueueScheduler(queueName);
1122
- await queueScheduler.waitUntilReady();
1123
-
1124
- let start: number;
1125
-
1126
- const worker = new Worker(queueName, async job => {
1127
- if (job.attemptsMade < 2) {
1128
- throw new Error('Not yet!');
1129
- }
1130
- });
1131
-
1132
- await worker.waitUntilReady();
1133
-
1134
- start = Date.now();
1135
- await queue.add(
1136
- 'test',
1137
- { foo: 'bar' },
1138
- {
1139
- attempts: 3,
1140
- backoff: 1000,
1141
- },
1142
- );
1143
-
1144
- await new Promise(resolve => {
1145
- worker.on('completed', () => {
1146
- const elapse = Date.now() - start;
1147
- expect(elapse).to.be.greaterThan(2000);
1148
- resolve();
1149
- });
1150
- });
1151
-
1152
- await worker.close();
1153
- await queueScheduler.close();
1154
- });
1155
-
1156
- it('should retry a job after a delay if an exponential backoff is given', async function() {
1157
- this.timeout(12000);
1158
- let start: number;
1159
-
1160
- const queueScheduler = new QueueScheduler(queueName);
1161
- await queueScheduler.waitUntilReady();
1162
-
1163
- const worker = new Worker(queueName, async job => {
1164
- if (job.attemptsMade < 2) {
1165
- throw new Error('Not yet!');
1166
- }
1167
- });
1168
-
1169
- await worker.waitUntilReady();
1170
-
1171
- start = Date.now();
1172
- await queue.add(
1173
- 'test',
1174
- { foo: 'bar' },
1175
- {
1176
- attempts: 3,
1177
- backoff: {
1178
- type: 'exponential',
1179
- delay: 1000,
1180
- },
1181
- },
1182
- );
1183
-
1184
- await new Promise(resolve => {
1185
- worker.on('completed', () => {
1186
- const elapse = Date.now() - start;
1187
- const expected = 1000 * (Math.pow(2, 2) - 1);
1188
- expect(elapse).to.be.greaterThan(expected);
1189
- resolve();
1190
- });
1191
- });
1192
-
1193
- await worker.close();
1194
- await queueScheduler.close();
1195
- });
1196
-
1197
- it('should retry a job after a delay if a custom backoff is given', async function() {
1198
- this.timeout(12000);
1199
- const queueScheduler = new QueueScheduler(queueName);
1200
- await queueScheduler.waitUntilReady();
1201
-
1202
- let start: number;
1203
-
1204
- const worker = new Worker(
1205
- queueName,
1206
- async job => {
1207
- if (job.attemptsMade < 2) {
1208
- throw new Error('Not yet!');
1209
- }
1210
- },
1211
- {
1212
- settings: {
1213
- backoffStrategies: {
1214
- custom(attemptsMade: number) {
1215
- return attemptsMade * 1000;
1216
- },
1217
- },
1218
- },
1219
- },
1220
- );
1221
-
1222
- await worker.waitUntilReady();
1223
-
1224
- start = Date.now();
1225
- await queue.add(
1226
- 'test',
1227
- { foo: 'bar' },
1228
- {
1229
- attempts: 3,
1230
- backoff: {
1231
- type: 'custom',
1232
- },
1233
- },
1234
- );
1235
-
1236
- await new Promise(resolve => {
1237
- worker.on('completed', () => {
1238
- const elapse = Date.now() - start;
1239
- expect(elapse).to.be.greaterThan(3000);
1240
- resolve();
1241
- });
1242
- });
1243
-
1244
- await worker.close();
1245
-
1246
- await queueScheduler.close();
1247
- });
1248
-
1249
- it('should not retry a job if the custom backoff returns -1', async () => {
1250
- let tries = 0;
1251
-
1252
- const worker = new Worker(
1253
- queueName,
1254
- async job => {
1255
- tries++;
1256
- if (job.attemptsMade < 3) {
1257
- throw new Error('Not yet!');
1258
- }
1259
- },
1260
- {
1261
- settings: {
1262
- backoffStrategies: {
1263
- custom() {
1264
- return -1;
1265
- },
1266
- },
1267
- },
1268
- },
1269
- );
1270
-
1271
- await queue.add(
1272
- 'test',
1273
- { foo: 'bar' },
1274
- {
1275
- attempts: 3,
1276
- backoff: {
1277
- type: 'custom',
1278
- },
1279
- },
1280
- );
1281
-
1282
- await new Promise((resolve, reject) => {
1283
- worker.on('completed', () => {
1284
- reject(new Error('Failed job was retried more than it should be!'));
1285
- });
1286
- worker.on('failed', () => {
1287
- if (tries === 1) {
1288
- resolve();
1289
- }
1290
- });
1291
- });
1292
-
1293
- await worker.close();
1294
- });
1295
-
1296
- it('should retry a job after a delay if a custom backoff is given based on the error thrown', async function() {
1297
- class CustomError extends Error {}
1298
-
1299
- this.timeout(12000);
1300
- const queueScheduler = new QueueScheduler(queueName);
1301
- await queueScheduler.waitUntilReady();
1302
-
1303
- const worker = new Worker(
1304
- queueName,
1305
- async job => {
1306
- if (job.attemptsMade < 2) {
1307
- throw new CustomError('Hey, custom error!');
1308
- }
1309
- },
1310
- {
1311
- settings: {
1312
- backoffStrategies: {
1313
- custom(attemptsMade: number, err: Error) {
1314
- if (err instanceof CustomError) {
1315
- return 1500;
1316
- }
1317
- return 500;
1318
- },
1319
- },
1320
- },
1321
- },
1322
- );
1323
-
1324
- const start = Date.now();
1325
- await queue.add(
1326
- 'test',
1327
- { foo: 'bar' },
1328
- {
1329
- attempts: 3,
1330
- backoff: {
1331
- type: 'custom',
1332
- },
1333
- },
1334
- );
1335
-
1336
- await new Promise(resolve => {
1337
- worker.on('completed', () => {
1338
- const elapse = Date.now() - start;
1339
- expect(elapse).to.be.greaterThan(3000);
1340
- resolve();
1341
- });
1342
- });
1343
-
1344
- await worker.close();
1345
-
1346
- await queueScheduler.close();
1347
- });
1348
-
1349
- it.skip('should not retry a job that has been removed', async () => {
1350
- const queueScheduler = new QueueScheduler(queueName);
1351
- await queueScheduler.waitUntilReady();
1352
-
1353
- const worker = new Worker(queueName, async job => {
1354
- if (attempts === 0) {
1355
- attempts++;
1356
- throw failedError;
1357
- }
1358
- });
1359
-
1360
- await worker.waitUntilReady();
1361
-
1362
- let attempts = 0;
1363
- const failedError = new Error('failed');
1364
-
1365
- await queue.add('test', { foo: 'bar' });
1366
-
1367
- await new Promise((resolve, reject) => {
1368
- const failedHandler = once(async (job, err) => {
1369
- expect(job.data.foo).to.equal('bar');
1370
- expect(err).to.equal(failedError);
1371
- expect(job.failedReason).to.equal(failedError.message);
1372
-
1373
- try {
1374
- await job.retry();
1375
- await delay(100);
1376
- const count = await queue.getCompletedCount();
1377
- expect(count).to.equal(1);
1378
- await queue.clean(0, 0);
1379
- try {
1380
- await job.retry();
1381
- } catch (err) {
1382
- expect(err.message).to.equal(RetryErrors.JobNotExist);
1383
- }
1384
-
1385
- const completedCount = await queue.getCompletedCount();
1386
- expect(completedCount).to.equal(0);
1387
- const failedCount = await queue.getFailedCount();
1388
- expect(failedCount).to.equal(0);
1389
- } catch (err) {
1390
- reject(err);
1391
- }
1392
- });
1393
-
1394
- worker.on('failed', failedHandler);
1395
- });
1396
-
1397
- await worker.close();
1398
- await queueScheduler.close();
1399
- });
1400
-
1401
- it.skip('should not retry a job that has been retried already', async () => {
1402
- let attempts = 0;
1403
- const queueScheduler = new QueueScheduler(queueName);
1404
- await queueScheduler.waitUntilReady();
1405
-
1406
- const worker = new Worker(queueName, async job => {
1407
- if (attempts === 0) {
1408
- attempts++;
1409
- throw failedError;
1410
- }
1411
- });
1412
-
1413
- await worker.waitUntilReady();
1414
-
1415
- await queue.add('test', { foo: 'bar' });
1416
-
1417
- const failedError = new Error('failed');
1418
-
1419
- await new Promise((resolve, reject) => {
1420
- const failedHandler = once(async (job, err) => {
1421
- expect(job.data.foo).to.equal('bar');
1422
- expect(err).to.equal(failedError);
1423
-
1424
- await job.retry();
1425
- await delay(100);
1426
- const completedCount = await queue.getCompletedCount();
1427
- expect(completedCount).to.equal(1);
1428
-
1429
- try {
1430
- await job.retry();
1431
- } catch (err) {
1432
- expect(err).to.be.equal(RetryErrors.JobNotExist);
1433
- }
1434
-
1435
- const completedCount2 = await queue.getCompletedCount();
1436
- expect(completedCount2).to.equal(1);
1437
- const failedCount = await queue.getFailedCount();
1438
- expect(failedCount).to.equal(0);
1439
-
1440
- resolve();
1441
- });
1442
-
1443
- worker.on('failed', failedHandler);
1444
- });
1445
-
1446
- await worker.close();
1447
- await queueScheduler.close();
1448
- });
1449
-
1450
- it('should not retry a job that is active', async () => {
1451
- const worker = new Worker(queueName, async job => {
1452
- await delay(500);
1453
- });
1454
-
1455
- await worker.waitUntilReady();
1456
-
1457
- const activating = new Promise(resolve => {
1458
- worker.on('active', resolve);
1459
- });
1460
-
1461
- const job = await queue.add('test', { foo: 'bar' });
1462
-
1463
- expect(job.data.foo).to.equal('bar');
1464
-
1465
- await activating;
1466
-
1467
- try {
1468
- await job.retry();
1469
- } catch (err) {
1470
- expect(err.message).to.equal('Retried job not failed');
1471
- }
1472
-
1473
- await worker.close();
1474
- });
1475
-
1476
- /*
1477
- it('an unlocked job should not be moved to failed', done => {
1478
- queue = utils.buildQueue('test unlocked failed');
1479
-
1480
- queue.process((job, callback) => {
1481
- // Release the lock to simulate the event loop stalling (so failure to renew the lock).
1482
- job.releaseLock().then(() => {
1483
- // Once it's failed, it should NOT be moved to failed since this worker lost the lock.
1484
- callback(new Error('retry this job'));
1485
- });
1486
- });
1487
-
1488
- queue.on('failed', job => {
1489
- job.isFailed().then(isFailed => {
1490
- expect(isFailed).to.be.equal(false);
1491
- });
1492
- });
1493
-
1494
- queue.on('error', (err) => {
1495
- queue.close().then(done, done);
1496
- });
1497
-
1498
- // Note that backoff:0 should immediately retry the job upon failure (ie put it in 'waiting')
1499
- queue.add({ foo: 'bar' }, { backoff: 0, attempts: 2 });
1500
- });
1501
- */
1502
- });
1503
- });