@redmix/jobs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/adapters/BaseAdapter/BaseAdapter.d.ts +64 -0
  4. package/dist/adapters/BaseAdapter/BaseAdapter.d.ts.map +1 -0
  5. package/dist/adapters/BaseAdapter/BaseAdapter.js +36 -0
  6. package/dist/adapters/PrismaAdapter/PrismaAdapter.d.ts +68 -0
  7. package/dist/adapters/PrismaAdapter/PrismaAdapter.d.ts.map +1 -0
  8. package/dist/adapters/PrismaAdapter/PrismaAdapter.js +189 -0
  9. package/dist/adapters/PrismaAdapter/errors.d.ts +8 -0
  10. package/dist/adapters/PrismaAdapter/errors.d.ts.map +1 -0
  11. package/dist/adapters/PrismaAdapter/errors.js +33 -0
  12. package/dist/bins/rw-jobs-worker.d.ts +13 -0
  13. package/dist/bins/rw-jobs-worker.d.ts.map +1 -0
  14. package/dist/bins/rw-jobs-worker.js +126 -0
  15. package/dist/bins/rw-jobs.d.ts +20 -0
  16. package/dist/bins/rw-jobs.d.ts.map +1 -0
  17. package/dist/bins/rw-jobs.js +248 -0
  18. package/dist/consts.d.ts +26 -0
  19. package/dist/consts.d.ts.map +1 -0
  20. package/dist/consts.js +81 -0
  21. package/dist/core/Executor.d.ts +29 -0
  22. package/dist/core/Executor.d.ts.map +1 -0
  23. package/dist/core/Executor.js +95 -0
  24. package/dist/core/JobManager.d.ts +20 -0
  25. package/dist/core/JobManager.d.ts.map +1 -0
  26. package/dist/core/JobManager.js +78 -0
  27. package/dist/core/Scheduler.d.ts +27 -0
  28. package/dist/core/Scheduler.d.ts.map +1 -0
  29. package/dist/core/Scheduler.js +91 -0
  30. package/dist/core/Worker.d.ts +49 -0
  31. package/dist/core/Worker.d.ts.map +1 -0
  32. package/dist/core/Worker.js +143 -0
  33. package/dist/errors.d.ts +104 -0
  34. package/dist/errors.d.ts.map +1 -0
  35. package/dist/errors.js +156 -0
  36. package/dist/index.d.ts +8 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +43 -0
  39. package/dist/loaders.d.ts +13 -0
  40. package/dist/loaders.d.ts.map +1 -0
  41. package/dist/loaders.js +71 -0
  42. package/dist/setupEnv.d.ts +2 -0
  43. package/dist/setupEnv.d.ts.map +1 -0
  44. package/dist/setupEnv.js +34 -0
  45. package/dist/types.d.ts +175 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +16 -0
  48. package/dist/util.d.ts +2 -0
  49. package/dist/util.d.ts.map +1 -0
  50. package/dist/util.js +31 -0
  51. package/package.json +58 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Scheduler_exports = {};
20
+ __export(Scheduler_exports, {
21
+ Scheduler: () => Scheduler
22
+ });
23
+ module.exports = __toCommonJS(Scheduler_exports);
24
+ var import_consts = require("../consts.js");
25
+ var import_errors = require("../errors.js");
26
+ class Scheduler {
27
+ adapter;
28
+ logger;
29
+ constructor({ adapter, logger }) {
30
+ this.logger = logger ?? import_consts.DEFAULT_LOGGER;
31
+ this.adapter = adapter;
32
+ if (!this.adapter) {
33
+ throw new import_errors.AdapterNotConfiguredError();
34
+ }
35
+ }
36
+ computeRunAt({ wait, waitUntil }) {
37
+ if (wait && wait > 0) {
38
+ return new Date(Date.now() + wait * 1e3);
39
+ } else if (waitUntil) {
40
+ return waitUntil;
41
+ } else {
42
+ return /* @__PURE__ */ new Date();
43
+ }
44
+ }
45
+ buildPayload({
46
+ job,
47
+ args,
48
+ options
49
+ }) {
50
+ const queue = job.queue;
51
+ const priority = job.priority ?? import_consts.DEFAULT_PRIORITY;
52
+ const wait = options?.wait ?? import_consts.DEFAULT_WAIT;
53
+ const waitUntil = options?.waitUntil ?? import_consts.DEFAULT_WAIT_UNTIL;
54
+ if (!queue) {
55
+ throw new import_errors.QueueNotDefinedError();
56
+ }
57
+ return {
58
+ name: job.name,
59
+ path: job.path,
60
+ args: args ?? [],
61
+ runAt: this.computeRunAt({ wait, waitUntil }),
62
+ queue,
63
+ priority
64
+ };
65
+ }
66
+ async schedule({
67
+ job,
68
+ args,
69
+ options
70
+ }) {
71
+ const payload = this.buildPayload({
72
+ job,
73
+ args,
74
+ options
75
+ });
76
+ this.logger.info(payload, `[RedwoodJob] Scheduling ${job.name}`);
77
+ try {
78
+ await this.adapter.schedule(payload);
79
+ return true;
80
+ } catch (e) {
81
+ throw new import_errors.SchedulingError(
82
+ `[RedwoodJob] Exception when scheduling ${payload.name}`,
83
+ e
84
+ );
85
+ }
86
+ }
87
+ }
88
+ // Annotate the CommonJS export names for ESM import in node:
89
+ 0 && (module.exports = {
90
+ Scheduler
91
+ });
@@ -0,0 +1,49 @@
1
+ import type { BaseAdapter } from '../adapters/BaseAdapter/BaseAdapter.js';
2
+ import type { BasicLogger, WorkerSharedOptions } from '../types.js';
3
+ export interface WorkerOptions extends WorkerSharedOptions {
4
+ adapter: BaseAdapter;
5
+ /** Used to set the `lockedBy` field in the database */
6
+ processName: string;
7
+ /** If not given a queue name then will work on jobs in any queue */
8
+ queues: string[];
9
+ logger?: BasicLogger;
10
+ /** If true, will clear the queue of all jobs and then exit */
11
+ clear?: boolean;
12
+ /**
13
+ * Set to `false` and the work loop will quit when the current job is done
14
+ * running (regardless of how many outstanding jobs there are to be worked
15
+ * on). The worker process will set this to `false` as soon as the user hits
16
+ * ctrl-c so any current job will complete before exiting.
17
+ */
18
+ workoff?: boolean;
19
+ /**
20
+ * If set to `true` will run the worker forever looking for new jobs. Otherwise
21
+ * will only look for jobs one time and then exit.
22
+ *
23
+ * Useful for testing to avoid infinite loops!
24
+ */
25
+ forever?: boolean;
26
+ }
27
+ type CompleteOptions = Required<WorkerOptions>;
28
+ export declare class Worker {
29
+ #private;
30
+ options: CompleteOptions;
31
+ adapter: CompleteOptions['adapter'];
32
+ logger: CompleteOptions['logger'];
33
+ clear: CompleteOptions['clear'];
34
+ processName: CompleteOptions['processName'];
35
+ queues: CompleteOptions['queues'];
36
+ maxAttempts: CompleteOptions['maxAttempts'];
37
+ maxRuntime: CompleteOptions['maxRuntime'];
38
+ deleteSuccessfulJobs: CompleteOptions['deleteSuccessfulJobs'];
39
+ deleteFailedJobs: CompleteOptions['deleteFailedJobs'];
40
+ sleepDelay: CompleteOptions['sleepDelay'];
41
+ forever: CompleteOptions['forever'];
42
+ workoff: CompleteOptions['workoff'];
43
+ lastCheckTime: Date;
44
+ constructor(options: WorkerOptions);
45
+ run(): Promise<void>;
46
+ get queueNames(): string;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=Worker.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Worker_exports = {};
20
+ __export(Worker_exports, {
21
+ Worker: () => Worker
22
+ });
23
+ module.exports = __toCommonJS(Worker_exports);
24
+ var import_node_timers = require("node:timers");
25
+ var import_consts = require("../consts.js");
26
+ var import_errors = require("../errors.js");
27
+ var import_Executor = require("./Executor.js");
28
+ const DEFAULT_OPTIONS = {
29
+ logger: import_consts.DEFAULT_LOGGER,
30
+ clear: false,
31
+ maxAttempts: import_consts.DEFAULT_MAX_ATTEMPTS,
32
+ maxRuntime: import_consts.DEFAULT_MAX_RUNTIME,
33
+ deleteSuccessfulJobs: import_consts.DEFAULT_DELETE_SUCCESSFUL_JOBS,
34
+ deleteFailedJobs: import_consts.DEFAULT_DELETE_FAILED_JOBS,
35
+ sleepDelay: import_consts.DEFAULT_SLEEP_DELAY,
36
+ workoff: false,
37
+ forever: true
38
+ };
39
+ class Worker {
40
+ options;
41
+ adapter;
42
+ logger;
43
+ clear;
44
+ processName;
45
+ queues;
46
+ maxAttempts;
47
+ maxRuntime;
48
+ deleteSuccessfulJobs;
49
+ deleteFailedJobs;
50
+ sleepDelay;
51
+ forever;
52
+ workoff;
53
+ lastCheckTime;
54
+ constructor(options) {
55
+ const nonUndefinedOptions = Object.fromEntries(
56
+ Object.entries(options ?? {}).filter(([_, value]) => value !== void 0)
57
+ );
58
+ this.options = {
59
+ ...DEFAULT_OPTIONS,
60
+ ...nonUndefinedOptions,
61
+ adapter: options?.adapter,
62
+ processName: options?.processName,
63
+ queues: options?.queues
64
+ };
65
+ if (!options?.adapter) {
66
+ throw new import_errors.AdapterRequiredError();
67
+ }
68
+ if (!options?.queues || options.queues.length === 0) {
69
+ throw new import_errors.QueuesRequiredError();
70
+ }
71
+ this.adapter = this.options.adapter;
72
+ this.logger = this.options.logger;
73
+ this.clear = this.options.clear;
74
+ this.processName = this.options.processName;
75
+ this.queues = this.options.queues;
76
+ this.maxAttempts = this.options.maxAttempts;
77
+ this.maxRuntime = this.options.maxRuntime;
78
+ this.deleteSuccessfulJobs = this.options.deleteSuccessfulJobs;
79
+ this.deleteFailedJobs = this.options.deleteFailedJobs;
80
+ this.sleepDelay = (this.options.sleepDelay ?? DEFAULT_OPTIONS.sleepDelay) * 1e3;
81
+ this.forever = this.options.forever;
82
+ this.workoff = this.options.workoff;
83
+ this.lastCheckTime = /* @__PURE__ */ new Date();
84
+ }
85
+ // Workers run forever unless:
86
+ // `this.forever` to false (loop only runs once, then exits)
87
+ // `this.workoff` is true (run all jobs in the queue, then exits)
88
+ run() {
89
+ if (this.clear) {
90
+ return this.#clearQueue();
91
+ } else {
92
+ return this.#work();
93
+ }
94
+ }
95
+ get queueNames() {
96
+ if (this.queues.length === 1 && this.queues[0] === "*") {
97
+ return "all (*)";
98
+ } else {
99
+ return this.queues.join(", ");
100
+ }
101
+ }
102
+ async #clearQueue() {
103
+ return await this.adapter.clear();
104
+ }
105
+ async #work() {
106
+ do {
107
+ this.lastCheckTime = /* @__PURE__ */ new Date();
108
+ this.logger.debug(
109
+ `[${this.processName}] Checking for jobs in ${this.queueNames} queues...`
110
+ );
111
+ const job = await this.adapter.find({
112
+ processName: this.processName,
113
+ maxRuntime: this.maxRuntime,
114
+ queues: this.queues
115
+ });
116
+ if (job) {
117
+ await new import_Executor.Executor({
118
+ adapter: this.adapter,
119
+ logger: this.logger,
120
+ job,
121
+ maxAttempts: this.maxAttempts,
122
+ deleteSuccessfulJobs: this.deleteSuccessfulJobs,
123
+ deleteFailedJobs: this.deleteFailedJobs
124
+ }).perform();
125
+ } else if (this.workoff) {
126
+ break;
127
+ }
128
+ if (!job && this.forever) {
129
+ const millsSinceLastCheck = (/* @__PURE__ */ new Date()).getTime() - this.lastCheckTime.getTime();
130
+ if (millsSinceLastCheck < this.sleepDelay) {
131
+ await this.#wait(this.sleepDelay - millsSinceLastCheck);
132
+ }
133
+ }
134
+ } while (this.forever);
135
+ }
136
+ #wait(ms) {
137
+ return new Promise((resolve) => (0, import_node_timers.setTimeout)(resolve, ms));
138
+ }
139
+ }
140
+ // Annotate the CommonJS export names for ESM import in node:
141
+ 0 && (module.exports = {
142
+ Worker
143
+ });
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Parent class for any RedwoodJob-related error
3
+ */
4
+ export declare class RedwoodJobError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ /**
8
+ * Thrown when trying to configure a scheduler without an adapter
9
+ */
10
+ export declare class AdapterNotConfiguredError extends RedwoodJobError {
11
+ constructor();
12
+ }
13
+ /**
14
+ * Thrown when the Worker or Executor is instantiated without an adapter
15
+ */
16
+ export declare class AdapterRequiredError extends RedwoodJobError {
17
+ constructor();
18
+ }
19
+ /**
20
+ * Thrown when the Worker is instantiated without an array of queues
21
+ */
22
+ export declare class QueuesRequiredError extends RedwoodJobError {
23
+ constructor();
24
+ }
25
+ /**
26
+ * Thrown when the Executor is instantiated without a job
27
+ */
28
+ export declare class JobRequiredError extends RedwoodJobError {
29
+ constructor();
30
+ }
31
+ /**
32
+ * Thrown when a job with the given handler is not found in the filesystem
33
+ */
34
+ export declare class JobNotFoundError extends RedwoodJobError {
35
+ constructor(name: string);
36
+ }
37
+ /**
38
+ * Thrown when a job file exists, but the export does not match the filename
39
+ */
40
+ export declare class JobExportNotFoundError extends RedwoodJobError {
41
+ constructor(name: string);
42
+ }
43
+ /**
44
+ * Thrown when the runner tries to import `adapter` from api/src/lib/jobs.js|ts and
45
+ * the file does not exist
46
+ */
47
+ export declare class JobsLibNotFoundError extends RedwoodJobError {
48
+ constructor();
49
+ }
50
+ /**
51
+ * Thrown when the runner tries to import `adapter` from api/src/lib/jobs.js|ts
52
+ */
53
+ export declare class AdapterNotFoundError extends RedwoodJobError {
54
+ constructor(name: string);
55
+ }
56
+ /**
57
+ * Thrown when the runner tries to import `logger` from api/src/lib/jobs.js|ts
58
+ */
59
+ export declare class LoggerNotFoundError extends RedwoodJobError {
60
+ constructor(name: string);
61
+ }
62
+ /**
63
+ * Thrown when the runner tries to import `workerConfig` from api/src/lib/jobs.js|ts
64
+ */
65
+ export declare class WorkerConfigNotFoundError extends RedwoodJobError {
66
+ constructor(name: string);
67
+ }
68
+ /**
69
+ * Parent class for any job error where we want to wrap the underlying error
70
+ * in our own. Use by extending this class and passing the original error to
71
+ * the constructor:
72
+ *
73
+ * ```typescript
74
+ * try {
75
+ * throw new Error('Generic error')
76
+ * } catch (e) {
77
+ * throw new RethrowJobError('Custom Error Message', e)
78
+ * }
79
+ * ```
80
+ */
81
+ export declare class RethrownJobError extends RedwoodJobError {
82
+ originalError: Error;
83
+ stackBeforeRethrow: string | undefined;
84
+ constructor(message: string, error: Error);
85
+ }
86
+ /**
87
+ * Thrown when there is an error scheduling a job, wraps the underlying error
88
+ */
89
+ export declare class SchedulingError extends RethrownJobError {
90
+ constructor(message: string, error: Error);
91
+ }
92
+ /**
93
+ * Thrown when there is an error performing a job, wraps the underlying error
94
+ */
95
+ export declare class PerformError extends RethrownJobError {
96
+ constructor(message: string, error: Error);
97
+ }
98
+ export declare class QueueNotDefinedError extends RedwoodJobError {
99
+ constructor();
100
+ }
101
+ export declare class WorkerConfigIndexNotFoundError extends RedwoodJobError {
102
+ constructor(index: number);
103
+ }
104
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +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"}
package/dist/errors.js ADDED
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var errors_exports = {};
20
+ __export(errors_exports, {
21
+ AdapterNotConfiguredError: () => AdapterNotConfiguredError,
22
+ AdapterNotFoundError: () => AdapterNotFoundError,
23
+ AdapterRequiredError: () => AdapterRequiredError,
24
+ JobExportNotFoundError: () => JobExportNotFoundError,
25
+ JobNotFoundError: () => JobNotFoundError,
26
+ JobRequiredError: () => JobRequiredError,
27
+ JobsLibNotFoundError: () => JobsLibNotFoundError,
28
+ LoggerNotFoundError: () => LoggerNotFoundError,
29
+ PerformError: () => PerformError,
30
+ QueueNotDefinedError: () => QueueNotDefinedError,
31
+ QueuesRequiredError: () => QueuesRequiredError,
32
+ RedwoodJobError: () => RedwoodJobError,
33
+ RethrownJobError: () => RethrownJobError,
34
+ SchedulingError: () => SchedulingError,
35
+ WorkerConfigIndexNotFoundError: () => WorkerConfigIndexNotFoundError,
36
+ WorkerConfigNotFoundError: () => WorkerConfigNotFoundError
37
+ });
38
+ module.exports = __toCommonJS(errors_exports);
39
+ const JOBS_CONFIG_FILENAME = "jobs.{ts,js}";
40
+ class RedwoodJobError extends Error {
41
+ constructor(message) {
42
+ super(message);
43
+ this.name = this.constructor.name;
44
+ }
45
+ }
46
+ class AdapterNotConfiguredError extends RedwoodJobError {
47
+ constructor() {
48
+ super("No adapter configured for the job scheduler");
49
+ }
50
+ }
51
+ class AdapterRequiredError extends RedwoodJobError {
52
+ constructor() {
53
+ super("`adapter` is required to perform a job");
54
+ }
55
+ }
56
+ class QueuesRequiredError extends RedwoodJobError {
57
+ constructor() {
58
+ super("`queues` is required to find a job to run");
59
+ }
60
+ }
61
+ class JobRequiredError extends RedwoodJobError {
62
+ constructor() {
63
+ super("`job` is required to perform a job");
64
+ }
65
+ }
66
+ class JobNotFoundError extends RedwoodJobError {
67
+ constructor(name) {
68
+ super(`Job \`${name}\` not found in the filesystem`);
69
+ }
70
+ }
71
+ class JobExportNotFoundError extends RedwoodJobError {
72
+ constructor(name) {
73
+ super(`Job file \`${name}\` does not export a class with the same name`);
74
+ }
75
+ }
76
+ class JobsLibNotFoundError extends RedwoodJobError {
77
+ constructor() {
78
+ super(
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
+ );
81
+ }
82
+ }
83
+ class AdapterNotFoundError extends RedwoodJobError {
84
+ constructor(name) {
85
+ super(
86
+ `api/src/lib/${JOBS_CONFIG_FILENAME} does not export an adapter named \`${name}\``
87
+ );
88
+ }
89
+ }
90
+ class LoggerNotFoundError extends RedwoodJobError {
91
+ constructor(name) {
92
+ super(
93
+ `api/src/lib/${JOBS_CONFIG_FILENAME} does not export a logger named \`${name}\``
94
+ );
95
+ }
96
+ }
97
+ class WorkerConfigNotFoundError extends RedwoodJobError {
98
+ constructor(name) {
99
+ super(`api/src/lib/#{JOBS_CONFIG_FILENAME} does not export \`${name}\``);
100
+ }
101
+ }
102
+ class RethrownJobError extends RedwoodJobError {
103
+ originalError;
104
+ stackBeforeRethrow;
105
+ constructor(message, error) {
106
+ super(message);
107
+ if (!error) {
108
+ throw new Error(
109
+ "RethrownJobError requires a message and existing error object"
110
+ );
111
+ }
112
+ this.originalError = error;
113
+ this.stackBeforeRethrow = this.stack;
114
+ const messageLines = (this.message.match(/\n/g) || []).length + 1;
115
+ this.stack = this.stack?.split("\n").slice(0, messageLines + 1).join("\n") + "\n" + error.stack;
116
+ }
117
+ }
118
+ class SchedulingError extends RethrownJobError {
119
+ constructor(message, error) {
120
+ super(message, error);
121
+ }
122
+ }
123
+ class PerformError extends RethrownJobError {
124
+ constructor(message, error) {
125
+ super(message, error);
126
+ }
127
+ }
128
+ class QueueNotDefinedError extends RedwoodJobError {
129
+ constructor() {
130
+ super("Scheduler requires a named `queue` to place jobs in");
131
+ }
132
+ }
133
+ class WorkerConfigIndexNotFoundError extends RedwoodJobError {
134
+ constructor(index) {
135
+ super(`Worker index ${index} not found in jobs config`);
136
+ }
137
+ }
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ AdapterNotConfiguredError,
141
+ AdapterNotFoundError,
142
+ AdapterRequiredError,
143
+ JobExportNotFoundError,
144
+ JobNotFoundError,
145
+ JobRequiredError,
146
+ JobsLibNotFoundError,
147
+ LoggerNotFoundError,
148
+ PerformError,
149
+ QueueNotDefinedError,
150
+ QueuesRequiredError,
151
+ RedwoodJobError,
152
+ RethrownJobError,
153
+ SchedulingError,
154
+ WorkerConfigIndexNotFoundError,
155
+ WorkerConfigNotFoundError
156
+ });
@@ -0,0 +1,8 @@
1
+ export * from './errors.js';
2
+ export { JobManager } from './core/JobManager.js';
3
+ export { Executor } from './core/Executor.js';
4
+ export { Worker } from './core/Worker.js';
5
+ export { BaseAdapter } from './adapters/BaseAdapter/BaseAdapter.js';
6
+ export { PrismaAdapter } from './adapters/PrismaAdapter/PrismaAdapter.js';
7
+ export type * from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AAEzE,mBAAmB,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var index_exports = {};
21
+ __export(index_exports, {
22
+ BaseAdapter: () => import_BaseAdapter.BaseAdapter,
23
+ Executor: () => import_Executor.Executor,
24
+ JobManager: () => import_JobManager.JobManager,
25
+ PrismaAdapter: () => import_PrismaAdapter.PrismaAdapter,
26
+ Worker: () => import_Worker.Worker
27
+ });
28
+ module.exports = __toCommonJS(index_exports);
29
+ __reExport(index_exports, require("./errors.js"), module.exports);
30
+ var import_JobManager = require("./core/JobManager.js");
31
+ var import_Executor = require("./core/Executor.js");
32
+ var import_Worker = require("./core/Worker.js");
33
+ var import_BaseAdapter = require("./adapters/BaseAdapter/BaseAdapter.js");
34
+ var import_PrismaAdapter = require("./adapters/PrismaAdapter/PrismaAdapter.js");
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ BaseAdapter,
38
+ Executor,
39
+ JobManager,
40
+ PrismaAdapter,
41
+ Worker,
42
+ ...require("./errors.js")
43
+ });
@@ -0,0 +1,13 @@
1
+ import type { JobManager } from './core/JobManager.js';
2
+ import type { Adapters, BasicLogger, Job, JobComputedProperties, QueueNames } from './types.js';
3
+ /**
4
+ * Loads the job manager from the users project
5
+ *
6
+ * @returns JobManager
7
+ */
8
+ export declare const loadJobsManager: () => Promise<JobManager<Adapters, QueueNames, BasicLogger>>;
9
+ /**
10
+ * Load a specific job implementation from the users project
11
+ */
12
+ export declare const loadJob: ({ name: jobName, path: jobPath, }: JobComputedProperties) => Promise<Job<QueueNames, unknown[]>>;
13
+ //# sourceMappingURL=loaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,GAAG,EACH,qBAAqB,EACrB,UAAU,EACX,MAAM,YAAY,CAAA;AAGnB;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAa,OAAO,CAC9C,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAgB9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,sCAGjB,qBAAqB,KAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAgB5D,CAAA"}