@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 +2 -2
- package/dist/adapters/BaseAdapter/BaseAdapter.d.ts +6 -1
- package/dist/adapters/BaseAdapter/BaseAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter/PrismaAdapter.d.ts +8 -5
- package/dist/adapters/PrismaAdapter/PrismaAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter/PrismaAdapter.js +10 -11
- package/dist/adapters/PrismaAdapter/errors.d.ts +2 -2
- package/dist/adapters/PrismaAdapter/errors.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter/errors.js +1 -1
- package/dist/bins/rw-jobs-worker.d.ts.map +1 -1
- package/dist/bins/rw-jobs-worker.js +1 -1
- package/dist/bins/rw-jobs.d.ts.map +1 -1
- package/dist/bins/rw-jobs.js +2 -2
- package/dist/core/Executor.d.ts +4 -0
- package/dist/core/Executor.d.ts.map +1 -1
- package/dist/core/Executor.js +15 -9
- package/dist/core/JobManager.d.ts +5 -3
- package/dist/core/JobManager.d.ts.map +1 -1
- package/dist/core/JobManager.js +1 -1
- package/dist/core/Scheduler.d.ts.map +1 -1
- package/dist/core/Scheduler.js +8 -2
- package/dist/core/Worker.d.ts.map +1 -1
- package/dist/errors.d.ts +15 -15
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -16
- package/dist/types.d.ts +29 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -5
package/README.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CedarJS Jobs
|
|
2
2
|
|
|
3
|
-
Provides background job scheduling and processing for
|
|
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
|
|
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
|
|
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
|
|
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(`[
|
|
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
|
-
|
|
134
|
-
|
|
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
|
|
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 {
|
|
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
|
|
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,
|
|
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.
|
|
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;
|
|
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
|
|
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;
|
|
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"}
|
package/dist/bins/rw-jobs.js
CHANGED
|
@@ -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
|
|
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
|
|
195
|
+
logger.warn(`Starting CedarJS Jobs Runner at ${(/* @__PURE__ */ new Date()).toISOString()}...`);
|
|
196
196
|
switch (command) {
|
|
197
197
|
case "start":
|
|
198
198
|
startWorkers({
|
package/dist/core/Executor.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/core/Executor.js
CHANGED
|
@@ -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(`[
|
|
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
|
-
|
|
69
|
+
runAt,
|
|
70
|
+
deleteJob: !runAt && this.deleteSuccessfulJobs
|
|
68
71
|
});
|
|
69
72
|
} catch (error) {
|
|
70
|
-
this.
|
|
71
|
-
|
|
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.
|
|
80
|
-
|
|
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
|
|
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,
|
|
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"}
|
package/dist/core/JobManager.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/core/Scheduler.js
CHANGED
|
@@ -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, `[
|
|
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
|
-
`[
|
|
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;
|
|
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
|
|
2
|
+
* Parent class for any CedarJS Jobs-related error
|
|
3
3
|
*/
|
|
4
|
-
export declare class
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
98
|
+
export declare class QueueNotDefinedError extends CedarJSJobsError {
|
|
99
99
|
constructor();
|
|
100
100
|
}
|
|
101
|
-
export declare class WorkerConfigIndexNotFoundError extends
|
|
101
|
+
export declare class WorkerConfigIndexNotFoundError extends CedarJSJobsError {
|
|
102
102
|
constructor(index: number);
|
|
103
103
|
}
|
|
104
104
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAExE,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACxD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACvD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACvD,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CACzD;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAExE,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACxD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACvD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACvD,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CACzD;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;CACjC;AACD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAElD,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAEvD,MAAM,WAAW,YAAY,CAC3B,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,CAC1B,SAAQ,mBAAmB;IAC3B;;;OAGG;IACH,OAAO,EAAE,MAAM,SAAS,CAAA;IAExB;;;;OAIG;IACH,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;IAEhD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB,CAC/B,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,EAC1B,OAAO,SAAS,WAAW;IAE3B;;;;OAIG;IACH,QAAQ,EAAE,SAAS,CAAA;IAEnB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;IAEf;;;;;;;;OAQG;IACH,MAAM,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAA;CAC5C;AAED,MAAM,WAAW,qBAAqB,CAAC,SAAS,SAAS,QAAQ;IAC/D;;;OAGG;IACH,OAAO,EAAE,MAAM,SAAS,CAAA;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,aAAa,CAC5B,OAAO,SAAS,UAAU,EAC1B,KAAK,SAAS,OAAO,EAAE,GAAG,EAAE,EAC5B,KAAK,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAErD;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;IAExB;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAA;IAEZ;;;;OAIG;IACH,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAClD;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,GAAG,CACb,OAAO,SAAS,UAAU,EAC1B,KAAK,SAAS,OAAO,EAAE,GAAG,EAAE,EAC5B,KAAK,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACnD,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,qBAAqB,CAAA;AAEhE,MAAM,MAAM,kBAAkB,GAC1B;IACE;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,KAAK,CAAA;CAClB,GACD;IACE,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ;;;OAGG;IACH,SAAS,EAAE,IAAI,CAAA;CAChB,CAAA;AAEL,KAAK,aAAa,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAErC;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAEnB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,GACpC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,GACjD,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GACpD,IAAI,CAAC,MAAM,CAAC,SAAS,MAAM,GAEzB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,GACpC,EAAE,GAAG,CAAC,EAAE,CAAC,GACT,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAE/B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,GACpC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,GACjD,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedarjs/jobs",
|
|
3
|
-
"version": "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.
|
|
42
|
-
"@cedarjs/project-config": "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.
|
|
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": "
|
|
58
|
+
"gitHead": "ebf827bba666cc5a129823079056d0b0e8280aad"
|
|
58
59
|
}
|