bullmq 2.0.2 → 2.1.1

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 (66) hide show
  1. package/dist/cjs/classes/child-pool.js +11 -1
  2. package/dist/cjs/classes/child-pool.js.map +1 -1
  3. package/dist/cjs/classes/job.d.ts +4 -2
  4. package/dist/cjs/classes/job.js +38 -3
  5. package/dist/cjs/classes/job.js.map +1 -1
  6. package/dist/cjs/classes/queue.d.ts +2 -2
  7. package/dist/cjs/classes/queue.js.map +1 -1
  8. package/dist/cjs/classes/repeat.d.ts +2 -1
  9. package/dist/cjs/classes/scripts.d.ts +3 -3
  10. package/dist/cjs/classes/scripts.js +5 -2
  11. package/dist/cjs/classes/scripts.js.map +1 -1
  12. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +25 -0
  13. package/dist/cjs/commands/moveToFinished-12.lua +16 -13
  14. package/dist/cjs/interfaces/{jobs-options.d.ts → base-job-options.d.ts} +2 -2
  15. package/dist/cjs/interfaces/base-job-options.js +3 -0
  16. package/dist/cjs/interfaces/base-job-options.js.map +1 -0
  17. package/dist/cjs/interfaces/flow-job.d.ts +1 -1
  18. package/dist/cjs/interfaces/index.d.ts +1 -1
  19. package/dist/cjs/interfaces/index.js +1 -1
  20. package/dist/cjs/interfaces/index.js.map +1 -1
  21. package/dist/cjs/interfaces/job-json.d.ts +2 -2
  22. package/dist/cjs/interfaces/parent.d.ts +1 -1
  23. package/dist/cjs/interfaces/queue-options.d.ts +2 -2
  24. package/dist/cjs/interfaces/sandboxed-job.d.ts +1 -1
  25. package/dist/cjs/types/index.d.ts +1 -0
  26. package/dist/cjs/types/index.js +1 -0
  27. package/dist/cjs/types/index.js.map +1 -1
  28. package/dist/cjs/types/job-options.d.ts +16 -0
  29. package/dist/cjs/{interfaces/jobs-options.js → types/job-options.js} +1 -1
  30. package/dist/cjs/types/job-options.js.map +1 -0
  31. package/dist/cjs/utils.d.ts +2 -1
  32. package/dist/esm/classes/child-pool.js +11 -1
  33. package/dist/esm/classes/child-pool.js.map +1 -1
  34. package/dist/esm/classes/job.d.ts +4 -2
  35. package/dist/esm/classes/job.js +39 -4
  36. package/dist/esm/classes/job.js.map +1 -1
  37. package/dist/esm/classes/queue.d.ts +2 -2
  38. package/dist/esm/classes/queue.js.map +1 -1
  39. package/dist/esm/classes/repeat.d.ts +2 -1
  40. package/dist/esm/classes/scripts.d.ts +3 -3
  41. package/dist/esm/classes/scripts.js +5 -2
  42. package/dist/esm/classes/scripts.js.map +1 -1
  43. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +25 -0
  44. package/dist/esm/commands/moveToFinished-12.lua +16 -13
  45. package/dist/esm/interfaces/{jobs-options.d.ts → base-job-options.d.ts} +2 -2
  46. package/dist/esm/interfaces/base-job-options.js +2 -0
  47. package/dist/esm/interfaces/base-job-options.js.map +1 -0
  48. package/dist/esm/interfaces/flow-job.d.ts +1 -1
  49. package/dist/esm/interfaces/index.d.ts +1 -1
  50. package/dist/esm/interfaces/index.js +1 -1
  51. package/dist/esm/interfaces/index.js.map +1 -1
  52. package/dist/esm/interfaces/job-json.d.ts +2 -2
  53. package/dist/esm/interfaces/parent.d.ts +1 -1
  54. package/dist/esm/interfaces/queue-options.d.ts +2 -2
  55. package/dist/esm/interfaces/sandboxed-job.d.ts +1 -1
  56. package/dist/esm/types/index.d.ts +1 -0
  57. package/dist/esm/types/index.js +1 -0
  58. package/dist/esm/types/index.js.map +1 -1
  59. package/dist/esm/types/job-options.d.ts +16 -0
  60. package/dist/esm/types/job-options.js +2 -0
  61. package/dist/esm/types/job-options.js.map +1 -0
  62. package/dist/esm/utils.d.ts +2 -1
  63. package/package.json +1 -2
  64. package/dist/cjs/interfaces/jobs-options.js.map +0 -1
  65. package/dist/esm/interfaces/jobs-options.js +0 -2
  66. package/dist/esm/interfaces/jobs-options.js.map +0 -1
@@ -24,13 +24,13 @@
24
24
 
25
25
  ARGV[1] jobId
26
26
  ARGV[2] timestamp
27
- ARGV[3] msg property
27
+ ARGV[3] msg property returnvalue / failedReason
28
28
  ARGV[4] return value / failed reason
29
29
  ARGV[5] target (completed/failed)
30
30
  ARGV[6] event data (? maybe just send jobid).
31
31
  ARGV[7] fetch next?
32
32
  ARGV[8] keys prefix
33
- ARGV[9] opts
33
+ ARGV[9] opts
34
34
 
35
35
  opts - token - lock token
36
36
  opts - keepJobs
@@ -40,6 +40,7 @@
40
40
  opts - attempts max attempts
41
41
  opts - attemptsMade
42
42
  opts - maxMetricsSize
43
+ opts - fpof - fail parent on fail
43
44
 
44
45
  Output:
45
46
  0 OK
@@ -54,15 +55,15 @@
54
55
  local rcall = redis.call
55
56
 
56
57
  --- Includes
57
- --- @include "includes/destructureJobKey"
58
+ --- @include "includes/collectMetrics"
59
+ --- @include "includes/getNextDelayedTimestamp"
58
60
  --- @include "includes/moveJobFromWaitToActive"
61
+ --- @include "includes/moveParentFromWaitingChildrenToFailed"
62
+ --- @include "includes/promoteDelayedJobs"
59
63
  --- @include "includes/removeJobsByMaxAge"
60
64
  --- @include "includes/removeJobsByMaxCount"
61
65
  --- @include "includes/trimEvents"
62
66
  --- @include "includes/updateParentDepsIfNeeded"
63
- --- @include "includes/collectMetrics"
64
- --- @include "includes/getNextDelayedTimestamp"
65
- --- @include "includes/promoteDelayedJobs"
66
67
 
67
68
  local jobIdKey = KEYS[10]
68
69
  if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
@@ -112,13 +113,15 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
112
113
  parentId = getJobIdFromKey(parentKey)
113
114
  parentQueueKey = getJobKeyPrefix(parentKey, ":" .. parentId)
114
115
  end
115
- if parentId ~= "" and ARGV[5] == "completed" then
116
- local parentKey = parentQueueKey .. ":" .. parentId
117
- local dependenciesSet = parentKey .. ":dependencies"
118
- local result = rcall("SREM", dependenciesSet, jobIdKey)
119
- if result == 1 then
120
- updateParentDepsIfNeeded(parentKey, parentQueueKey, dependenciesSet,
121
- parentId, jobIdKey, ARGV[4])
116
+ if parentId ~= "" then
117
+ if ARGV[5] == "completed" then
118
+ local dependenciesSet = parentKey .. ":dependencies"
119
+ if rcall("SREM", dependenciesSet, jobIdKey) == 1 then
120
+ updateParentDepsIfNeeded(parentKey, parentQueueKey, dependenciesSet,
121
+ parentId, jobIdKey, ARGV[4])
122
+ end
123
+ elseif opts['fpof'] then
124
+ moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
122
125
  end
123
126
  end
124
127
 
@@ -1,5 +1,5 @@
1
1
  import { RepeatOptions, KeepJobs, BackoffOptions } from './';
2
- export interface BaseJobOptions {
2
+ export interface DefaultJobOptions {
3
3
  /**
4
4
  * Timestamp when the job was created.
5
5
  * @defaultValue Date.now()
@@ -63,7 +63,7 @@ export interface BaseJobOptions {
63
63
  */
64
64
  sizeLimit?: number;
65
65
  }
66
- export interface JobsOptions extends BaseJobOptions {
66
+ export interface BaseJobOptions extends DefaultJobOptions {
67
67
  /**
68
68
  * Repeat this job, for example based on a `cron` schedule.
69
69
  */
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base-job-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-job-options.js","sourceRoot":"","sources":["../../../src/interfaces/base-job-options.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { JobsOptions } from './jobs-options';
1
+ import { JobsOptions } from '../types';
2
2
  import { QueueOptions } from './queue-options';
3
3
  export interface FlowJob {
4
4
  name: string;
@@ -1,12 +1,12 @@
1
1
  export * from './advanced-options';
2
2
  export * from './backoff-options';
3
+ export * from './base-job-options';
3
4
  export * from './child-command';
4
5
  export * from './child-message';
5
6
  export * from './connection';
6
7
  export * from './flow-job';
7
8
  export * from './ioredis-events';
8
9
  export * from './job-json';
9
- export * from './jobs-options';
10
10
  export * from './keep-jobs';
11
11
  export * from './metrics-options';
12
12
  export * from './metrics';
@@ -1,12 +1,12 @@
1
1
  export * from './advanced-options';
2
2
  export * from './backoff-options';
3
+ export * from './base-job-options';
3
4
  export * from './child-command';
4
5
  export * from './child-message';
5
6
  export * from './connection';
6
7
  export * from './flow-job';
7
8
  export * from './ioredis-events';
8
9
  export * from './job-json';
9
- export * from './jobs-options';
10
10
  export * from './keep-jobs';
11
11
  export * from './metrics-options';
12
12
  export * from './metrics';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -1,10 +1,10 @@
1
- import { JobsOptions } from './jobs-options';
1
+ import { RedisJobOptions } from '../types';
2
2
  import { ParentKeys } from './parent';
3
3
  export interface JobJson {
4
4
  id: string;
5
5
  name: string;
6
6
  data: string;
7
- opts: JobsOptions;
7
+ opts: RedisJobOptions;
8
8
  progress: number | object;
9
9
  attemptsMade: number;
10
10
  finishedOn?: number;
@@ -1,4 +1,4 @@
1
- import { JobsOptions } from './jobs-options';
1
+ import { JobsOptions } from '../types';
2
2
  /**
3
3
  * Describes the parent for a Job.
4
4
  */
@@ -1,5 +1,5 @@
1
1
  import { AdvancedRepeatOptions } from './advanced-options';
2
- import { BaseJobOptions } from './jobs-options';
2
+ import { DefaultJobOptions } from './base-job-options';
3
3
  import { ConnectionOptions } from './redis-options';
4
4
  export declare enum ClientType {
5
5
  blocking = "blocking",
@@ -30,7 +30,7 @@ export interface QueueBaseOptions {
30
30
  * Options for the Queue class.
31
31
  */
32
32
  export interface QueueOptions extends QueueBaseOptions {
33
- defaultJobOptions?: BaseJobOptions;
33
+ defaultJobOptions?: DefaultJobOptions;
34
34
  /**
35
35
  * Options for the rate limiter.
36
36
  */
@@ -1,5 +1,5 @@
1
+ import { JobsOptions } from '../types';
1
2
  import { JobJson } from './job-json';
2
- import { JobsOptions } from './jobs-options';
3
3
  /**
4
4
  * @see {@link https://docs.bullmq.io/guide/workers/sandboxed-processors}
5
5
  */
@@ -1,4 +1,5 @@
1
1
  export * from './repeat-strategy';
2
2
  export * from './finished-status';
3
3
  export * from './job-json-sandbox';
4
+ export * from './job-options';
4
5
  export * from './job-type';
@@ -1,5 +1,6 @@
1
1
  export * from './repeat-strategy';
2
2
  export * from './finished-status';
3
3
  export * from './job-json-sandbox';
4
+ export * from './job-options';
4
5
  export * from './job-type';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { BaseJobOptions } from '../interfaces';
2
+ export declare type JobsOptions = BaseJobOptions & {
3
+ /**
4
+ * If true, moves parent to failed.
5
+ */
6
+ failParentOnFailure?: boolean;
7
+ };
8
+ /**
9
+ * These fields are the ones stored in Redis with smaller keys for compactness.
10
+ */
11
+ export declare type RedisJobOptions = BaseJobOptions & {
12
+ /**
13
+ * If true, moves parent to failed.
14
+ */
15
+ fpof?: boolean;
16
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=job-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-options.js","sourceRoot":"","sources":["../../../src/types/job-options.ts"],"names":[],"mappings":""}
@@ -1,7 +1,8 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  import { Cluster, Redis } from 'ioredis';
4
- import { ChildMessage, JobsOptions, ParentMessage, QueueOptions, RedisClient } from './interfaces';
4
+ import { ChildMessage, ParentMessage, QueueOptions, RedisClient } from './interfaces';
5
+ import { JobsOptions } from './types';
5
6
  import { ChildProcess } from 'child_process';
6
7
  export declare const errorObject: {
7
8
  [index: string]: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bullmq",
3
- "version": "2.0.2",
3
+ "version": "2.1.1",
4
4
  "description": "Queue for messages and jobs based on Redis",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -46,7 +46,6 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "cron-parser": "^4.6.0",
49
- "get-port": "6.1.2",
50
49
  "glob": "^8.0.3",
51
50
  "ioredis": "^5.2.2",
52
51
  "lodash": "^4.17.21",
@@ -1 +0,0 @@
1
- {"version":3,"file":"jobs-options.js","sourceRoot":"","sources":["../../../src/interfaces/jobs-options.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=jobs-options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jobs-options.js","sourceRoot":"","sources":["../../../src/interfaces/jobs-options.ts"],"names":[],"mappings":""}