@cedarjs/jobs 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # RedwoodJob
1
+ # CedarJS Jobs
2
2
 
3
- Provides background job scheduling and processing for Redwood.
3
+ Provides background job scheduling and processing for CedarJS.
@@ -3,6 +3,7 @@ export interface SchedulePayload {
3
3
  name: string;
4
4
  path: string;
5
5
  args: unknown[];
6
+ cron?: string | undefined;
6
7
  runAt: Date;
7
8
  queue: string;
8
9
  priority: number;
@@ -17,10 +18,12 @@ export interface BaseAdapterOptions {
17
18
  }
18
19
  export interface SuccessOptions<TJob extends BaseJob = BaseJob> {
19
20
  job: TJob;
21
+ runAt: Date | undefined;
20
22
  deleteJob?: boolean;
21
23
  }
22
24
  export interface ErrorOptions<TJob extends BaseJob = BaseJob> {
23
25
  job: TJob;
26
+ runAt: Date;
24
27
  error: Error;
25
28
  }
26
29
  export interface FailureOptions<TJob extends BaseJob = BaseJob> {
@@ -49,7 +52,9 @@ export declare abstract class BaseAdapter<TOptions extends BaseAdapterOptions =
49
52
  */
50
53
  abstract success(options: SuccessOptions): void | Promise<void>;
51
54
  /**
52
- * Called when an attempt to run a job produced an error
55
+ * Called when an attempt to run a job produced an error.
56
+ * This should update the stored job with the new `options.runAt` so that it
57
+ * will be retried
53
58
  */
54
59
  abstract error(options: ErrorOptions): void | Promise<void>;
55
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/BaseAdapter/BaseAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG3E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC1D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,KAAK,CAAA;CACb;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,8BAAsB,WAAW,CAC/B,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,EACxD,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtC,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAE3B,OAAO,EAAE,QAAQ;IAU7B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe;IAE5D;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAEzE;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CACvC"}
1
+ {"version":3,"file":"BaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/BaseAdapter/BaseAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG3E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC1D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;CACb;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,8BAAsB,WAAW,CAC/B,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,EACxD,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtC,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAE3B,OAAO,EAAE,QAAQ;IAU7B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe;IAE5D;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAEzE;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CACvC"}
@@ -6,6 +6,7 @@ export interface PrismaJob extends BaseJob {
6
6
  id: number;
7
7
  handler: string;
8
8
  runAt: Date;
9
+ cron: string | null | undefined;
9
10
  lockedAt: Date;
10
11
  lockedBy: string;
11
12
  lastError: string | null;
@@ -27,7 +28,9 @@ export interface PrismaAdapterOptions extends BaseAdapterOptions {
27
28
  /**
28
29
  * Implements a job adapter using Prisma ORM.
29
30
  *
30
- * Assumes a table exists with the following schema (the table name can be customized):
31
+ * Assumes a table exists with the following schema (the table name can be
32
+ * customized):
33
+ *
31
34
  * ```prisma
32
35
  * model BackgroundJob {
33
36
  * id Int \@id \@default(autoincrement())
@@ -36,6 +39,7 @@ export interface PrismaAdapterOptions extends BaseAdapterOptions {
36
39
  * queue String
37
40
  * priority Int
38
41
  * runAt DateTime
42
+ * cron String?
39
43
  * lockedAt DateTime?
40
44
  * lockedBy String?
41
45
  * lastError String?
@@ -58,11 +62,10 @@ export declare class PrismaAdapter extends BaseAdapter<PrismaAdapterOptions> {
58
62
  * in their generated code to do this in a DB-agnostic way.
59
63
  */
60
64
  find({ processName, maxRuntime, queues, }: FindArgs): Promise<PrismaJob | undefined>;
61
- success({ job, deleteJob }: SuccessOptions<PrismaJob>): Promise<void>;
62
- error({ job, error }: ErrorOptions<PrismaJob>): Promise<void>;
65
+ success({ job, runAt, deleteJob }: SuccessOptions<PrismaJob>): Promise<void>;
66
+ error({ job, runAt, error }: ErrorOptions<PrismaJob>): Promise<void>;
63
67
  failure({ job, deleteJob }: FailureOptions<PrismaJob>): Promise<void>;
64
- schedule({ name, path, args, runAt, queue, priority, }: SchedulePayload): Promise<void>;
68
+ schedule({ name, path, args, runAt, cron, queue, priority, }: SchedulePayload): Promise<void>;
65
69
  clear(): Promise<void>;
66
- backoffMilliseconds(attempts: number): number;
67
70
  }
68
71
  //# sourceMappingURL=PrismaAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrismaAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/PrismaAdapter/PrismaAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAIlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,cAAc,EACf,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAI3D,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,IAAI,CAAA;IACX,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D;;OAEG;IACH,EAAE,EAAE,YAAY,CAAA;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAUD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAc,SAAQ,WAAW,CAAC,oBAAoB,CAAC;IAClE,EAAE,EAAE,YAAY,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,YAAY,CAAC,MAAM,YAAY,CAAC,CAAA;IAC1C,QAAQ,EAAE,MAAM,CAAA;gBAEJ,OAAO,EAAE,oBAAoB;IAqBzC;;;;;OAKG;IACY,IAAI,CAAC,EAClB,WAAW,EACX,UAAU,EACV,MAAM,GACP,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IA4F7B,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC;IAkBrD,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC;IAmB7C,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC;IAYrD,QAAQ,CAAC,EACtB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,eAAe;IAWH,KAAK;IAIpB,mBAAmB,CAAC,QAAQ,EAAE,MAAM;CAGrC"}
1
+ {"version":3,"file":"PrismaAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/PrismaAdapter/PrismaAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAIlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,cAAc,EACf,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAI3D,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,IAAI,CAAA;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC/B,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D;;OAEG;IACH,EAAE,EAAE,YAAY,CAAA;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAUD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,aAAc,SAAQ,WAAW,CAAC,oBAAoB,CAAC;IAClE,EAAE,EAAE,YAAY,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,YAAY,CAAC,MAAM,YAAY,CAAC,CAAA;IAC1C,QAAQ,EAAE,MAAM,CAAA;gBAEJ,OAAO,EAAE,oBAAoB;IAqBzC;;;;;OAKG;IACY,IAAI,CAAC,EAClB,WAAW,EACX,UAAU,EACV,MAAM,GACP,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IA6F7B,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC;IAoB5D,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC;IAiBpD,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC;IAYrD,QAAQ,CAAC,EACtB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,GACT,EAAE,eAAe;IAYH,KAAK;CAGrB"}
@@ -114,8 +114,8 @@ class PrismaAdapter extends import_BaseAdapter.BaseAdapter {
114
114
  // Prisma queries are lazily evaluated and only sent to the db when they are
115
115
  // awaited, so do the await here to ensure they actually run (if the user
116
116
  // doesn't await the Promise then the queries will never be executed!)
117
- async success({ job, deleteJob }) {
118
- this.logger.debug(`[RedwoodJob] Job ${job.id} success`);
117
+ async success({ job, runAt, deleteJob }) {
118
+ this.logger.debug(`[CedarJS Jobs] Job ${job.id} success`);
119
119
  if (deleteJob) {
120
120
  await this.accessor.delete({ where: { id: job.id } });
121
121
  } else {
@@ -125,22 +125,22 @@ class PrismaAdapter extends import_BaseAdapter.BaseAdapter {
125
125
  lockedAt: null,
126
126
  lockedBy: null,
127
127
  lastError: null,
128
- runAt: null
128
+ runAt: runAt || null
129
129
  }
130
130
  });
131
131
  }
132
132
  }
133
- async error({ job, error }) {
134
- this.logger.debug(`[RedwoodJob] Job ${job.id} failure`);
133
+ // There was an error processing the job. Record the failure data and the new
134
+ // runAt time.
135
+ async error({ job, runAt, error }) {
136
+ this.logger.debug(`[CedarJS Jobs] Job ${job.id} failure`);
135
137
  const data = {
136
138
  lockedAt: null,
137
139
  lockedBy: null,
138
140
  lastError: `${error.message}
139
141
 
140
142
  ${error.stack}`,
141
- runAt: new Date(
142
- (/* @__PURE__ */ new Date()).getTime() + this.backoffMilliseconds(job.attempts)
143
- )
143
+ runAt
144
144
  };
145
145
  await this.accessor.update({
146
146
  where: { id: job.id },
@@ -164,6 +164,7 @@ ${error.stack}`,
164
164
  path,
165
165
  args,
166
166
  runAt,
167
+ cron,
167
168
  queue,
168
169
  priority
169
170
  }) {
@@ -171,6 +172,7 @@ ${error.stack}`,
171
172
  data: {
172
173
  handler: JSON.stringify({ name, path, args }),
173
174
  runAt,
175
+ cron,
174
176
  queue,
175
177
  priority
176
178
  }
@@ -179,9 +181,6 @@ ${error.stack}`,
179
181
  async clear() {
180
182
  await this.accessor.deleteMany();
181
183
  }
182
- backoffMilliseconds(attempts) {
183
- return 1e3 * attempts ** 4;
184
- }
185
184
  }
186
185
  // Annotate the CommonJS export names for ESM import in node:
187
186
  0 && (module.exports = {
@@ -1,8 +1,8 @@
1
- import { RedwoodJobError } from '../../errors.js';
1
+ import { CedarJSJobsError } from '../../errors.js';
2
2
  /**
3
3
  * Thrown when a given model name isn't actually available in the PrismaClient
4
4
  */
5
- export declare class ModelNameError extends RedwoodJobError {
5
+ export declare class ModelNameError extends CedarJSJobsError {
6
6
  constructor(name: string);
7
7
  }
8
8
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/adapters/PrismaAdapter/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD;;GAEG;AACH,qBAAa,cAAe,SAAQ,eAAe;gBACrC,IAAI,EAAE,MAAM;CAGzB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/adapters/PrismaAdapter/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD;;GAEG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,IAAI,EAAE,MAAM;CAGzB"}
@@ -22,7 +22,7 @@ __export(errors_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(errors_exports);
24
24
  var import_errors = require("../../errors.js");
25
- class ModelNameError extends import_errors.RedwoodJobError {
25
+ class ModelNameError extends import_errors.CedarJSJobsError {
26
26
  constructor(name) {
27
27
  super(`Model \`${name}\` not found in PrismaClient`);
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rw-jobs-worker.d.ts","sourceRoot":"","sources":["../../src/bins/rw-jobs-worker.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAqC/C,eAAO,MAAM,WAAW,oBAGrB;IACD,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC1B,WAEA,CAAA;AAwBD,eAAO,MAAM,SAAS,mCAKnB;IACD,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,oBAqBA,CAAA"}
1
+ {"version":3,"file":"rw-jobs-worker.d.ts","sourceRoot":"","sources":["../../src/bins/rw-jobs-worker.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAwC/C,eAAO,MAAM,WAAW,oBAGrB;IACD,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC1B,WAEA,CAAA;AA0BD,eAAO,MAAM,SAAS,mCAKnB;IACD,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,oBAqBA,CAAA"}
@@ -43,7 +43,7 @@ var import_setupEnv = require("../setupEnv.js");
43
43
  (0, import_setupEnv.setupEnv)();
44
44
  const parseArgs = (argv) => {
45
45
  return (0, import_yargs.default)((0, import_helpers.hideBin)(argv)).usage(
46
- "Starts a single RedwoodJob worker to process background jobs\n\nUsage: $0 [options]"
46
+ "Starts a single CedarJS Jobs worker to process background jobs\n\nUsage: $0 [options]"
47
47
  ).option("index", {
48
48
  type: "number",
49
49
  required: true,
@@ -1 +1 @@
1
- {"version":3,"file":"rw-jobs.d.ts","sourceRoot":"","sources":["../../src/bins/rw-jobs.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAatD,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;AAsEjD,eAAO,MAAM,eAAe,WAAY,GAAG,qBAU1C,CAAA;AAED,eAAO,MAAM,YAAY,6CAKtB;IACD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,WAAW,CAAA;CACpB,mBA2BA,CAAA;AAGD,eAAO,MAAM,WAAW,oCAIrB;IACD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;CACpB,kBAqBA,CAAA;AAED,eAAO,MAAM,UAAU,eAAgB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,SAG7D,CAAA"}
1
+ {"version":3,"file":"rw-jobs.d.ts","sourceRoot":"","sources":["../../src/bins/rw-jobs.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAatD,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;AAyEjD,eAAO,MAAM,eAAe,WAAY,GAAG,qBAU1C,CAAA;AAED,eAAO,MAAM,YAAY,6CAKtB;IACD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,WAAW,CAAA;CACpB,mBA2BA,CAAA;AAGD,eAAO,MAAM,WAAW,oCAIrB;IACD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;CACpB,kBAqBA,CAAA;AAED,eAAO,MAAM,UAAU,eAAgB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,SAG7D,CAAA"}
@@ -54,7 +54,7 @@ const parseArgs = (argv) => {
54
54
  commandString.shift();
55
55
  }
56
56
  const parsed = (0, import_yargs.default)(commandString).usage(
57
- "Starts the RedwoodJob runner to process background jobs\n\nUsage: rw jobs <command> [options]"
57
+ "Starts the CedarJS Jobs runner to process background jobs\n\nUsage: rw jobs <command> [options]"
58
58
  ).command("work", "Start a worker and process jobs").command("workoff", "Start a worker and exit after all jobs processed").command("start", "Start workers in daemon mode").command("stop", "Stop any daemonized job workers").command("restart", "Stop and start any daemonized job workers").command("clear", "Clear the job queue").demandCommand(1, "You must specify a mode to start in").example(
59
59
  "rw jobs work",
60
60
  "Start the job workers using the job config and work on jobs until manually stopped"
@@ -192,7 +192,7 @@ const main = async () => {
192
192
  const workerConfig = jobsConfig.workers;
193
193
  const numWorkers = buildNumWorkers(workerConfig);
194
194
  const logger = jobsConfig.logger ?? import_consts.DEFAULT_LOGGER;
195
- logger.warn(`Starting RedwoodJob Runner at ${(/* @__PURE__ */ new Date()).toISOString()}...`);
195
+ logger.warn(`Starting CedarJS Jobs Runner at ${(/* @__PURE__ */ new Date()).toISOString()}...`);
196
196
  switch (command) {
197
197
  case "start":
198
198
  startWorkers({
@@ -4,8 +4,11 @@ export interface ExecutorOptions {
4
4
  adapter: BaseAdapter;
5
5
  job: BaseJob;
6
6
  logger?: BasicLogger;
7
+ /** Defaults to DEFAULT_MAX_ATTEMPTS */
7
8
  maxAttempts?: number;
9
+ /** Defaults to DEFAULT_DELETE_FAILED_JOBS */
8
10
  deleteFailedJobs?: boolean;
11
+ /** Defaults to DEFAULT_DELETE_SUCCESSFUL_JOBS */
9
12
  deleteSuccessfulJobs?: boolean;
10
13
  }
11
14
  export declare const DEFAULTS: {
@@ -25,5 +28,6 @@ export declare class Executor {
25
28
  constructor(options: ExecutorOptions);
26
29
  get jobIdentifier(): string;
27
30
  perform(): Promise<void>;
31
+ backoffMilliseconds(attempts: number): number;
28
32
  }
29
33
  //# sourceMappingURL=Executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Executor.d.ts","sourceRoot":"","sources":["../../src/core/Executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AASzE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,QAAQ;;;;;CAKpB,CAAA;AAED,qBAAa,QAAQ;IACnB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC9C,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAA;IACxD,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAClE,oBAAoB,EAAE,WAAW,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAE9D,OAAO,EAAE,eAAe;IAmBpC,IAAI,aAAa,WAEhB;IAEK,OAAO;CAkCd"}
1
+ {"version":3,"file":"Executor.d.ts","sourceRoot":"","sources":["../../src/core/Executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AASzE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,QAAQ;;;;;CAKpB,CAAA;AAED,qBAAa,QAAQ;IACnB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC9C,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAA;IACxD,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAClE,oBAAoB,EAAE,WAAW,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAE9D,OAAO,EAAE,eAAe;IAmBpC,IAAI,aAAa,WAEhB;IAEK,OAAO;IA2Cb,mBAAmB,CAAC,QAAQ,EAAE,MAAM;CAGrC"}
@@ -22,6 +22,7 @@ __export(Executor_exports, {
22
22
  Executor: () => Executor
23
23
  });
24
24
  module.exports = __toCommonJS(Executor_exports);
25
+ var import_cron_parser = require("cron-parser");
25
26
  var import_consts = require("../consts.js");
26
27
  var import_errors = require("../errors.js");
27
28
  var import_loaders = require("../loaders.js");
@@ -58,28 +59,30 @@ class Executor {
58
59
  return `${this.job.id} (${this.job.path}:${this.job.name})`;
59
60
  }
60
61
  async perform() {
61
- this.logger.info(`[RedwoodJob] Started job ${this.jobIdentifier}`);
62
+ this.logger.info(`[CedarJS Jobs] Started job ${this.jobIdentifier}`);
62
63
  try {
63
64
  const job = await (0, import_loaders.loadJob)({ name: this.job.name, path: this.job.path });
64
65
  await job.perform(...this.job.args);
66
+ const runAt = job.cron ? import_cron_parser.CronExpressionParser.parse(job.cron).next().toDate() : void 0;
65
67
  await this.adapter.success({
66
68
  job: this.job,
67
- deleteJob: this.deleteSuccessfulJobs
69
+ runAt,
70
+ deleteJob: !runAt && this.deleteSuccessfulJobs
68
71
  });
69
72
  } catch (error) {
70
- this.logger.error(
71
- `[RedwoodJob] Error in job ${this.jobIdentifier}: ${error.message}`
72
- );
73
+ const errorMessage = `[CedarJS Jobs] Error in job ${this.jobIdentifier}: ${error.message}`;
74
+ this.logger.error(errorMessage);
73
75
  this.logger.error(error.stack);
74
76
  await this.adapter.error({
75
77
  job: this.job,
78
+ runAt: new Date(
79
+ (/* @__PURE__ */ new Date()).getTime() + this.backoffMilliseconds(this.job.attempts)
80
+ ),
76
81
  error
77
82
  });
78
83
  if (this.job.attempts >= this.maxAttempts) {
79
- this.logger.warn(
80
- this.job,
81
- `[RedwoodJob] Failed job ${this.jobIdentifier}: reached max attempts (${this.maxAttempts})`
82
- );
84
+ const maxAttemptsMessage = `[CedarJS Jobs] Failed job ${this.jobIdentifier}: reached max attempts (${this.maxAttempts})`;
85
+ this.logger.warn(this.job, maxAttemptsMessage);
83
86
  await this.adapter.failure({
84
87
  job: this.job,
85
88
  deleteJob: this.deleteFailedJobs
@@ -87,6 +90,9 @@ class Executor {
87
90
  }
88
91
  }
89
92
  }
93
+ backoffMilliseconds(attempts) {
94
+ return 1e3 * attempts ** 4;
95
+ }
90
96
  }
91
97
  // Annotate the CommonJS export names for ESM import in node:
92
98
  0 && (module.exports = {
@@ -1,4 +1,4 @@
1
- import type { Adapters, BasicLogger, CreateSchedulerArgs, CreateSchedulerConfig, Job, JobDefinition, JobManagerConfig, QueueNames, WorkerConfig } from '../types.js';
1
+ import type { Adapters, BasicLogger, CreateSchedulerArgs, CreateSchedulerConfig, Job, JobComputedProperties, JobDefinition, JobManagerConfig, QueueNames, WorkerConfig } from '../types.js';
2
2
  import type { WorkerOptions } from './Worker.js';
3
3
  import { Worker } from './Worker.js';
4
4
  export interface CreateWorkerArgs {
@@ -13,8 +13,10 @@ export declare class JobManager<TAdapters extends Adapters, TQueues extends Queu
13
13
  logger: TLogger;
14
14
  workers: WorkerConfig<TAdapters, TQueues>[];
15
15
  constructor(config: JobManagerConfig<TAdapters, TQueues extends string[] ? never : TQueues, TLogger>);
16
- createScheduler(schedulerConfig: CreateSchedulerConfig<TAdapters>): <TJob extends Job<TQueues, any[]>>(job: TJob, ...argsAndOptions: CreateSchedulerArgs<TJob>) => Promise<boolean>;
17
- createJob<TArgs extends unknown[]>(jobDefinition: JobDefinition<TQueues, TArgs>): Job<TQueues, TArgs>;
16
+ createScheduler(schedulerConfig: CreateSchedulerConfig<TAdapters>): <TJob extends Job<TQueues, any[], any>>(job: TJob, ...argsAndOptions: CreateSchedulerArgs<TJob>) => Promise<boolean>;
17
+ createJob<TArgs extends any[], TCron extends string | undefined, TJobDef extends JobDefinition<TQueues, TArgs, TCron> & {
18
+ cron?: TCron;
19
+ }>(jobDefinition: TJobDef): TJobDef & JobComputedProperties;
18
20
  createWorker({ index, workoff, clear, processName }: CreateWorkerArgs): Worker;
19
21
  }
20
22
  //# sourceMappingURL=JobManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JobManager.d.ts","sourceRoot":"","sources":["../../src/core/JobManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IACjC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,UAAU,CACrB,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,EAC1B,OAAO,SAAS,WAAW;IAE3B,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAA;gBAGzC,MAAM,EAAE,gBAAgB,CACtB,SAAS,EAGT,OAAO,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,EAC1C,OAAO,CACR;IAQH,eAAe,CAAC,eAAe,EAAE,qBAAqB,CAAC,SAAS,CAAC,IAMvD,IAAI,SAAS,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OACjC,IAAI,qBACU,mBAAmB,CAAC,IAAI,CAAC;IAYhD,SAAS,CAAC,KAAK,SAAS,OAAO,EAAE,EAC/B,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAC3C,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IAOtB,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,gBAAgB;CAqBtE"}
1
+ {"version":3,"file":"JobManager.d.ts","sourceRoot":"","sources":["../../src/core/JobManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,GAAG,EACH,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IACjC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,UAAU,CACrB,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,EAC1B,OAAO,SAAS,WAAW;IAE3B,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAA;gBAGzC,MAAM,EAAE,gBAAgB,CACtB,SAAS,EAGT,OAAO,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,EAC1C,OAAO,CACR;IAQH,eAAe,CAAC,eAAe,EAAE,qBAAqB,CAAC,SAAS,CAAC,IAMvD,IAAI,SAAS,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,OACtC,IAAI,qBACU,mBAAmB,CAAC,IAAI,CAAC;IAYhD,SAAS,CACP,KAAK,SAAS,GAAG,EAAE,EACnB,KAAK,SAAS,MAAM,GAAG,SAAS,EAChC,OAAO,SAAS,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,EACvE,aAAa,EAAE,OAAO,GAAG,OAAO,GAAG,qBAAqB;IAO1D,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,gBAAgB;CAqBtE"}
@@ -38,7 +38,7 @@ class JobManager {
38
38
  createScheduler(schedulerConfig) {
39
39
  const scheduler = new import_Scheduler.Scheduler({
40
40
  adapter: this.adapters[schedulerConfig.adapter],
41
- logger: this.logger
41
+ logger: schedulerConfig.logger ?? this.logger
42
42
  });
43
43
  return (job, ...argsAndOptions) => {
44
44
  const [possibleArgs, possibleOptions] = argsAndOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/core/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAY/C,OAAO,KAAK,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAEpB,UAAU,eAAe,CAAC,QAAQ,SAAS,WAAW;IACpD,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,qBAAa,SAAS,CAAC,QAAQ,SAAS,WAAW;IACjD,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAE5C,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC;IAS1D,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE;IAU1E,YAAY,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EACpD,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,IAAI,CAAA;QACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;QAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAA;KAC7B,GAAG,eAAe;IAoBb,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EACtD,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,IAAI,CAAA;QACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;QAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAA;KAC7B;CAmBF"}
1
+ {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/core/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAY/C,OAAO,KAAK,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAEpB,UAAU,eAAe,CAAC,QAAQ,SAAS,WAAW;IACpD,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,qBAAa,SAAS,CAAC,QAAQ,SAAS,WAAW;IACjD,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAE5C,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC;IAS1D,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE;IAU1E,YAAY,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EACpD,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,IAAI,CAAA;QACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;QAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAA;KAC7B,GAAG,eAAe;IA2Bb,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EACtD,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,IAAI,CAAA;QACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;QAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAA;KAC7B;CAmBF"}
@@ -54,10 +54,16 @@ class Scheduler {
54
54
  if (!queue) {
55
55
  throw new import_errors.QueueNotDefinedError();
56
56
  }
57
+ if (job.cron && (wait || waitUntil)) {
58
+ throw new Error(
59
+ "Cannot schedule a cron job with wait or waitUntil options"
60
+ );
61
+ }
57
62
  return {
58
63
  name: job.name,
59
64
  path: job.path,
60
65
  args: args ?? [],
66
+ cron: job.cron,
61
67
  runAt: this.computeRunAt({ wait, waitUntil }),
62
68
  queue,
63
69
  priority
@@ -73,13 +79,13 @@ class Scheduler {
73
79
  args,
74
80
  options
75
81
  });
76
- this.logger.info(payload, `[RedwoodJob] Scheduling ${job.name}`);
82
+ this.logger.info(payload, `[CedarJS Jobs] Scheduling ${job.name}`);
77
83
  try {
78
84
  await this.adapter.schedule(payload);
79
85
  return true;
80
86
  } catch (e) {
81
87
  throw new import_errors.SchedulingError(
82
- `[RedwoodJob] Exception when scheduling ${payload.name}`,
88
+ `[CedarJS Jobs] Exception when scheduling ${payload.name}`,
83
89
  e
84
90
  );
85
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/core/Worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAUzE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAInE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IAGxD,OAAO,EAAE,WAAW,CAAA;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAA;IAIhB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,KAAK,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;AAc9C,qBAAa,MAAM;;IACjB,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAC/B,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,oBAAoB,EAAE,eAAe,CAAC,sBAAsB,CAAC,CAAA;IAC7D,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAA;IACrD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,aAAa,EAAE,IAAI,CAAA;gBAEP,OAAO,EAAE,aAAa;IAwElC,GAAG;IAQH,IAAI,UAAU,WAMb;CAmDF"}
1
+ {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/core/Worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAUzE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAInE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IAGxD,OAAO,EAAE,WAAW,CAAA;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAA;IAIhB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,KAAK,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;AAc9C,qBAAa,MAAM;;IACjB,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAC/B,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,oBAAoB,EAAE,eAAe,CAAC,sBAAsB,CAAC,CAAA;IAC7D,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAA;IACrD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,aAAa,EAAE,IAAI,CAAA;gBAEP,OAAO,EAAE,aAAa;IA2ElC,GAAG;IAQH,IAAI,UAAU,WAMb;CAqDF"}
package/dist/errors.d.ts CHANGED
@@ -1,68 +1,68 @@
1
1
  /**
2
- * Parent class for any RedwoodJob-related error
2
+ * Parent class for any CedarJS Jobs-related error
3
3
  */
4
- export declare class RedwoodJobError extends Error {
4
+ export declare class CedarJSJobsError extends Error {
5
5
  constructor(message: string);
6
6
  }
7
7
  /**
8
8
  * Thrown when trying to configure a scheduler without an adapter
9
9
  */
10
- export declare class AdapterNotConfiguredError extends RedwoodJobError {
10
+ export declare class AdapterNotConfiguredError extends CedarJSJobsError {
11
11
  constructor();
12
12
  }
13
13
  /**
14
14
  * Thrown when the Worker or Executor is instantiated without an adapter
15
15
  */
16
- export declare class AdapterRequiredError extends RedwoodJobError {
16
+ export declare class AdapterRequiredError extends CedarJSJobsError {
17
17
  constructor();
18
18
  }
19
19
  /**
20
20
  * Thrown when the Worker is instantiated without an array of queues
21
21
  */
22
- export declare class QueuesRequiredError extends RedwoodJobError {
22
+ export declare class QueuesRequiredError extends CedarJSJobsError {
23
23
  constructor();
24
24
  }
25
25
  /**
26
26
  * Thrown when the Executor is instantiated without a job
27
27
  */
28
- export declare class JobRequiredError extends RedwoodJobError {
28
+ export declare class JobRequiredError extends CedarJSJobsError {
29
29
  constructor();
30
30
  }
31
31
  /**
32
32
  * Thrown when a job with the given handler is not found in the filesystem
33
33
  */
34
- export declare class JobNotFoundError extends RedwoodJobError {
34
+ export declare class JobNotFoundError extends CedarJSJobsError {
35
35
  constructor(name: string);
36
36
  }
37
37
  /**
38
38
  * Thrown when a job file exists, but the export does not match the filename
39
39
  */
40
- export declare class JobExportNotFoundError extends RedwoodJobError {
40
+ export declare class JobExportNotFoundError extends CedarJSJobsError {
41
41
  constructor(name: string);
42
42
  }
43
43
  /**
44
44
  * Thrown when the runner tries to import `adapter` from api/src/lib/jobs.js|ts and
45
45
  * the file does not exist
46
46
  */
47
- export declare class JobsLibNotFoundError extends RedwoodJobError {
47
+ export declare class JobsLibNotFoundError extends CedarJSJobsError {
48
48
  constructor();
49
49
  }
50
50
  /**
51
51
  * Thrown when the runner tries to import `adapter` from api/src/lib/jobs.js|ts
52
52
  */
53
- export declare class AdapterNotFoundError extends RedwoodJobError {
53
+ export declare class AdapterNotFoundError extends CedarJSJobsError {
54
54
  constructor(name: string);
55
55
  }
56
56
  /**
57
57
  * Thrown when the runner tries to import `logger` from api/src/lib/jobs.js|ts
58
58
  */
59
- export declare class LoggerNotFoundError extends RedwoodJobError {
59
+ export declare class LoggerNotFoundError extends CedarJSJobsError {
60
60
  constructor(name: string);
61
61
  }
62
62
  /**
63
63
  * Thrown when the runner tries to import `workerConfig` from api/src/lib/jobs.js|ts
64
64
  */
65
- export declare class WorkerConfigNotFoundError extends RedwoodJobError {
65
+ export declare class WorkerConfigNotFoundError extends CedarJSJobsError {
66
66
  constructor(name: string);
67
67
  }
68
68
  /**
@@ -78,7 +78,7 @@ export declare class WorkerConfigNotFoundError extends RedwoodJobError {
78
78
  * }
79
79
  * ```
80
80
  */
81
- export declare class RethrownJobError extends RedwoodJobError {
81
+ export declare class RethrownJobError extends CedarJSJobsError {
82
82
  originalError: Error;
83
83
  stackBeforeRethrow: string | undefined;
84
84
  constructor(message: string, error: Error);
@@ -95,10 +95,10 @@ export declare class SchedulingError extends RethrownJobError {
95
95
  export declare class PerformError extends RethrownJobError {
96
96
  constructor(message: string, error: Error);
97
97
  }
98
- export declare class QueueNotDefinedError extends RedwoodJobError {
98
+ export declare class QueueNotDefinedError extends CedarJSJobsError {
99
99
  constructor();
100
100
  }
101
- export declare class WorkerConfigIndexNotFoundError extends RedwoodJobError {
101
+ export declare class WorkerConfigIndexNotFoundError extends CedarJSJobsError {
102
102
  constructor(index: number);
103
103
  }
104
104
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,eAAe;;CAI7D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;;CAIxD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;;CAIvD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;;CAIpD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;gBACvC,IAAI,EAAE,MAAM;CAGzB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;gBAC7C,IAAI,EAAE,MAAM;CAGzB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;;CAMxD;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;gBAC3C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,eAAe;gBAChD,IAAI,EAAE,MAAM;CAGzB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,aAAa,EAAE,KAAK,CAAA;IACpB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE1B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAqB1C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED,qBAAa,oBAAqB,SAAQ,eAAe;;CAIxD;AAED,qBAAa,8BAA+B,SAAQ,eAAe;gBACrD,KAAK,EAAE,MAAM;CAG1B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAI9D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;CAIzD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;;CAIxD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;;CAIrD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;gBACxC,IAAI,EAAE,MAAM;CAGzB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC9C,IAAI,EAAE,MAAM;CAGzB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;CASzD;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAC5C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;gBACjD,IAAI,EAAE,MAAM;CAGzB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,aAAa,EAAE,KAAK,CAAA;IACpB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE1B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAqB1C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED,qBAAa,oBAAqB,SAAQ,gBAAgB;;CAIzD;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;gBACtD,KAAK,EAAE,MAAM;CAG1B"}
package/dist/errors.js CHANGED
@@ -21,6 +21,7 @@ __export(errors_exports, {
21
21
  AdapterNotConfiguredError: () => AdapterNotConfiguredError,
22
22
  AdapterNotFoundError: () => AdapterNotFoundError,
23
23
  AdapterRequiredError: () => AdapterRequiredError,
24
+ CedarJSJobsError: () => CedarJSJobsError,
24
25
  JobExportNotFoundError: () => JobExportNotFoundError,
25
26
  JobNotFoundError: () => JobNotFoundError,
26
27
  JobRequiredError: () => JobRequiredError,
@@ -29,7 +30,6 @@ __export(errors_exports, {
29
30
  PerformError: () => PerformError,
30
31
  QueueNotDefinedError: () => QueueNotDefinedError,
31
32
  QueuesRequiredError: () => QueuesRequiredError,
32
- RedwoodJobError: () => RedwoodJobError,
33
33
  RethrownJobError: () => RethrownJobError,
34
34
  SchedulingError: () => SchedulingError,
35
35
  WorkerConfigIndexNotFoundError: () => WorkerConfigIndexNotFoundError,
@@ -37,69 +37,69 @@ __export(errors_exports, {
37
37
  });
38
38
  module.exports = __toCommonJS(errors_exports);
39
39
  const JOBS_CONFIG_FILENAME = "jobs.{ts,js}";
40
- class RedwoodJobError extends Error {
40
+ class CedarJSJobsError extends Error {
41
41
  constructor(message) {
42
42
  super(message);
43
43
  this.name = this.constructor.name;
44
44
  }
45
45
  }
46
- class AdapterNotConfiguredError extends RedwoodJobError {
46
+ class AdapterNotConfiguredError extends CedarJSJobsError {
47
47
  constructor() {
48
48
  super("No adapter configured for the job scheduler");
49
49
  }
50
50
  }
51
- class AdapterRequiredError extends RedwoodJobError {
51
+ class AdapterRequiredError extends CedarJSJobsError {
52
52
  constructor() {
53
53
  super("`adapter` is required to perform a job");
54
54
  }
55
55
  }
56
- class QueuesRequiredError extends RedwoodJobError {
56
+ class QueuesRequiredError extends CedarJSJobsError {
57
57
  constructor() {
58
58
  super("`queues` is required to find a job to run");
59
59
  }
60
60
  }
61
- class JobRequiredError extends RedwoodJobError {
61
+ class JobRequiredError extends CedarJSJobsError {
62
62
  constructor() {
63
63
  super("`job` is required to perform a job");
64
64
  }
65
65
  }
66
- class JobNotFoundError extends RedwoodJobError {
66
+ class JobNotFoundError extends CedarJSJobsError {
67
67
  constructor(name) {
68
68
  super(`Job \`${name}\` not found in the filesystem`);
69
69
  }
70
70
  }
71
- class JobExportNotFoundError extends RedwoodJobError {
71
+ class JobExportNotFoundError extends CedarJSJobsError {
72
72
  constructor(name) {
73
73
  super(`Job file \`${name}\` does not export a class with the same name`);
74
74
  }
75
75
  }
76
- class JobsLibNotFoundError extends RedwoodJobError {
76
+ class JobsLibNotFoundError extends CedarJSJobsError {
77
77
  constructor() {
78
78
  super(
79
79
  `api/src/lib/${JOBS_CONFIG_FILENAME} not found. Run \`yarn rw setup jobs\` to create this file and configure background jobs. Already did that? You'll need to run \`yarn rw dev\` or \`yarn rw build\` before you can start the job workers!`
80
80
  );
81
81
  }
82
82
  }
83
- class AdapterNotFoundError extends RedwoodJobError {
83
+ class AdapterNotFoundError extends CedarJSJobsError {
84
84
  constructor(name) {
85
85
  super(
86
86
  `api/src/lib/${JOBS_CONFIG_FILENAME} does not export an adapter named \`${name}\``
87
87
  );
88
88
  }
89
89
  }
90
- class LoggerNotFoundError extends RedwoodJobError {
90
+ class LoggerNotFoundError extends CedarJSJobsError {
91
91
  constructor(name) {
92
92
  super(
93
93
  `api/src/lib/${JOBS_CONFIG_FILENAME} does not export a logger named \`${name}\``
94
94
  );
95
95
  }
96
96
  }
97
- class WorkerConfigNotFoundError extends RedwoodJobError {
97
+ class WorkerConfigNotFoundError extends CedarJSJobsError {
98
98
  constructor(name) {
99
99
  super(`api/src/lib/#{JOBS_CONFIG_FILENAME} does not export \`${name}\``);
100
100
  }
101
101
  }
102
- class RethrownJobError extends RedwoodJobError {
102
+ class RethrownJobError extends CedarJSJobsError {
103
103
  originalError;
104
104
  stackBeforeRethrow;
105
105
  constructor(message, error) {
@@ -125,12 +125,12 @@ class PerformError extends RethrownJobError {
125
125
  super(message, error);
126
126
  }
127
127
  }
128
- class QueueNotDefinedError extends RedwoodJobError {
128
+ class QueueNotDefinedError extends CedarJSJobsError {
129
129
  constructor() {
130
130
  super("Scheduler requires a named `queue` to place jobs in");
131
131
  }
132
132
  }
133
- class WorkerConfigIndexNotFoundError extends RedwoodJobError {
133
+ class WorkerConfigIndexNotFoundError extends CedarJSJobsError {
134
134
  constructor(index) {
135
135
  super(`Worker index ${index} not found in jobs config`);
136
136
  }
@@ -140,6 +140,7 @@ class WorkerConfigIndexNotFoundError extends RedwoodJobError {
140
140
  AdapterNotConfiguredError,
141
141
  AdapterNotFoundError,
142
142
  AdapterRequiredError,
143
+ CedarJSJobsError,
143
144
  JobExportNotFoundError,
144
145
  JobNotFoundError,
145
146
  JobRequiredError,
@@ -148,7 +149,6 @@ class WorkerConfigIndexNotFoundError extends RedwoodJobError {
148
149
  PerformError,
149
150
  QueueNotDefinedError,
150
151
  QueuesRequiredError,
151
- RedwoodJobError,
152
152
  RethrownJobError,
153
153
  SchedulingError,
154
154
  WorkerConfigIndexNotFoundError,
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { IntRange } from 'type-fest';
2
2
  import type { BaseAdapter } from './adapters/BaseAdapter/BaseAdapter.js';
3
- /** Redwood's logger and the standard console logger conform to this shape. */
3
+ /** CedarJS's logger and the standard console logger conform to this shape. */
4
4
  export interface BasicLogger {
5
5
  debug: (message?: any, ...optionalParams: any[]) => void;
6
6
  info: (message?: any, ...optionalParams: any[]) => void;
@@ -8,8 +8,8 @@ export interface BasicLogger {
8
8
  error: (message?: any, ...optionalParams: any[]) => void;
9
9
  }
10
10
  /**
11
- *This is the minimum interface that a "job" must conform to in order to be
12
- * scheduled and executed by Redwood's job engine.
11
+ * This is the minimum interface that a "job" must conform to in order to be
12
+ * scheduled and executed by CedarJS's job engine.
13
13
  */
14
14
  export interface BaseJob {
15
15
  id: string | number;
@@ -17,6 +17,7 @@ export interface BaseJob {
17
17
  path: string;
18
18
  args: unknown[];
19
19
  attempts: number;
20
+ cron?: string | undefined | null;
20
21
  }
21
22
  export type PossibleBaseJob = BaseJob | undefined;
22
23
  export type Adapters = Record<string, BaseAdapter>;
@@ -113,8 +114,8 @@ export interface JobManagerConfig<TAdapters extends Adapters, TQueues extends Qu
113
114
  }
114
115
  export interface CreateSchedulerConfig<TAdapters extends Adapters> {
115
116
  /**
116
- * The name of the adapter to use for this scheduler. This must be one of the keys
117
- * in the `adapters` object when you created the `JobManager`.
117
+ * The name of the adapter to use for this scheduler. This must be one of the
118
+ * keys in the `adapters` object when you created the `JobManager`.
118
119
  */
119
120
  adapter: keyof TAdapters;
120
121
  /**
@@ -123,7 +124,7 @@ export interface CreateSchedulerConfig<TAdapters extends Adapters> {
123
124
  */
124
125
  logger?: BasicLogger;
125
126
  }
126
- export interface JobDefinition<TQueues extends QueueNames, TArgs extends unknown[] = []> {
127
+ export interface JobDefinition<TQueues extends QueueNames, TArgs extends unknown[] = [], TCron extends string | undefined = string | undefined> {
127
128
  /**
128
129
  * The name of the queue that this job should always be scheduled on. This
129
130
  * must be one of the values in the `queues` array when you created the
@@ -136,6 +137,12 @@ export interface JobDefinition<TQueues extends QueueNames, TArgs extends unknown
136
137
  * @default 50
137
138
  */
138
139
  priority?: PriorityValue;
140
+ /**
141
+ * If this is specified it will be the recurring schedule this job will run at
142
+ * See https://github.com/harrisiirak/cron-parser#cron-format for the
143
+ * supported syntax.
144
+ */
145
+ cron?: TCron;
139
146
  /**
140
147
  * The function to run when this job is executed.
141
148
  *
@@ -153,23 +160,33 @@ export type JobComputedProperties = {
153
160
  */
154
161
  path: string;
155
162
  };
156
- export type Job<TQueues extends QueueNames, TArgs extends unknown[] = []> = JobDefinition<TQueues, TArgs> & JobComputedProperties;
163
+ export type Job<TQueues extends QueueNames, TArgs extends unknown[] = [], TCron extends string | undefined = string | undefined> = JobDefinition<TQueues, TArgs, TCron> & JobComputedProperties;
157
164
  export type ScheduleJobOptions = {
158
165
  /**
159
- * The number of seconds to wait before scheduling this job. This is mutually
160
- * exclusive with `waitUntil`.
166
+ * The number of seconds to wait before scheduling this job. This is
167
+ * mutually exclusive with `waitUntil`.
161
168
  */
162
169
  wait: number;
163
170
  waitUntil?: never;
164
171
  } | {
165
172
  wait?: never;
166
173
  /**
167
- * The date and time to schedule this job for. This is mutually exclusive with
168
- * `wait`.
174
+ * The date and time to schedule this job for. This is mutually exclusive
175
+ * with `wait`.
169
176
  */
170
177
  waitUntil: Date;
171
178
  };
172
179
  type PriorityValue = IntRange<1, 101>;
173
- export type CreateSchedulerArgs<TJob extends Job<QueueNames>> = Parameters<TJob['perform']> extends [] ? [ScheduleJobOptions?] | [[], ScheduleJobOptions?] : [Parameters<TJob['perform']>, ScheduleJobOptions?];
180
+ /**
181
+ * If the job has no arguments:
182
+ * - you may pass an empty array for the arguments and then optionally pass the
183
+ * scheduler options
184
+ * - you may optionally pass the scheduler options
185
+ * If the job has arguments:
186
+ * - you must pass the arguments and then optionally pass the scheduler options
187
+ * If the job has a cron schedule defined:
188
+ * - options are not allowed (cron jobs are scheduled automatically)
189
+ */
190
+ export type CreateSchedulerArgs<TJob extends Job<QueueNames, any[], any>> = TJob['cron'] extends '' ? Parameters<TJob['perform']> extends [] ? [ScheduleJobOptions?] | [[], ScheduleJobOptions?] : [Parameters<TJob['perform']>, ScheduleJobOptions?] : TJob['cron'] extends string ? Parameters<TJob['perform']> extends [] ? [] | [[]] : [Parameters<TJob['perform']>] : Parameters<TJob['perform']> extends [] ? [ScheduleJobOptions?] | [[], ScheduleJobOptions?] : [Parameters<TJob['perform']>, ScheduleJobOptions?];
174
191
  export {};
175
192
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cedarjs/jobs",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/cedarjs/cedar.git",
@@ -38,12 +38,13 @@
38
38
  "test:watch": "vitest"
39
39
  },
40
40
  "dependencies": {
41
- "@cedarjs/cli-helpers": "0.2.0",
42
- "@cedarjs/project-config": "0.2.0",
41
+ "@cedarjs/cli-helpers": "0.3.0",
42
+ "@cedarjs/project-config": "0.3.0",
43
+ "cron-parser": "5.3.0",
43
44
  "type-fest": "4.26.1"
44
45
  },
45
46
  "devDependencies": {
46
- "@cedarjs/framework-tools": "0.2.0",
47
+ "@cedarjs/framework-tools": "0.3.0",
47
48
  "@prisma/client": "5.20.0",
48
49
  "concurrently": "8.2.2",
49
50
  "publint": "0.3.12",
@@ -54,5 +55,5 @@
54
55
  "publishConfig": {
55
56
  "access": "public"
56
57
  },
57
- "gitHead": "568c8f994789688a43c5f57181505d7461417b0f"
58
+ "gitHead": "ebf827bba666cc5a129823079056d0b0e8280aad"
58
59
  }