@sidequest/engine 1.0.0-next.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +65 -0
  2. package/dist/engine.cjs +27 -11
  3. package/dist/engine.cjs.map +1 -1
  4. package/dist/engine.d.ts +3 -2
  5. package/dist/engine.js +28 -12
  6. package/dist/engine.js.map +1 -1
  7. package/dist/execution/executor-manager.cjs +23 -19
  8. package/dist/execution/executor-manager.cjs.map +1 -1
  9. package/dist/execution/executor-manager.d.ts +4 -7
  10. package/dist/execution/executor-manager.js +24 -20
  11. package/dist/execution/executor-manager.js.map +1 -1
  12. package/dist/execution/queue-manager.cjs +5 -2
  13. package/dist/execution/queue-manager.cjs.map +1 -1
  14. package/dist/execution/queue-manager.d.ts +4 -1
  15. package/dist/execution/queue-manager.js +5 -2
  16. package/dist/execution/queue-manager.js.map +1 -1
  17. package/dist/index.cjs +2 -2
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/job/job-builder.cjs +51 -9
  21. package/dist/job/job-builder.cjs.map +1 -1
  22. package/dist/job/job-builder.d.ts +22 -2
  23. package/dist/job/job-builder.js +52 -10
  24. package/dist/job/job-builder.js.map +1 -1
  25. package/dist/job/job-transitioner.cjs +1 -1
  26. package/dist/job/job-transitioner.cjs.map +1 -1
  27. package/dist/job/job-transitioner.js +1 -1
  28. package/dist/job/job-transitioner.js.map +1 -1
  29. package/dist/queue/grant-queue-config.cjs +4 -2
  30. package/dist/queue/grant-queue-config.cjs.map +1 -1
  31. package/dist/queue/grant-queue-config.d.ts +3 -1
  32. package/dist/queue/grant-queue-config.js +4 -2
  33. package/dist/queue/grant-queue-config.js.map +1 -1
  34. package/dist/shared-runner/runner-pool.cjs +9 -6
  35. package/dist/shared-runner/runner-pool.cjs.map +1 -1
  36. package/dist/shared-runner/runner-pool.d.ts +4 -2
  37. package/dist/shared-runner/runner-pool.js +9 -6
  38. package/dist/shared-runner/runner-pool.js.map +1 -1
  39. package/dist/shared-runner/runner.cjs +30 -2
  40. package/dist/shared-runner/runner.cjs.map +1 -1
  41. package/dist/shared-runner/runner.d.ts +20 -3
  42. package/dist/shared-runner/runner.js +30 -3
  43. package/dist/shared-runner/runner.js.map +1 -1
  44. package/dist/utils/import.cjs +13 -0
  45. package/dist/utils/import.cjs.map +1 -0
  46. package/dist/utils/import.d.ts +15 -0
  47. package/dist/utils/import.js +11 -0
  48. package/dist/utils/import.js.map +1 -0
  49. package/dist/workers/main.cjs +4 -4
  50. package/dist/workers/main.cjs.map +1 -1
  51. package/dist/workers/main.js +4 -4
  52. package/dist/workers/main.js.map +1 -1
  53. package/package.json +7 -5
  54. package/dist/job/job.cjs +0 -250
  55. package/dist/job/job.cjs.map +0 -1
  56. package/dist/job/job.d.ts +0 -178
  57. package/dist/job/job.js +0 -248
  58. package/dist/job/job.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { Backend, NewQueueData } from '@sidequest/backend';
2
2
  import { QueueConfig } from '@sidequest/core';
3
+ import { QueueDefaults } from '../queue/grant-queue-config.js';
3
4
 
4
5
  /**
5
6
  * Manages queue configurations and retrieves active queues with runnable jobs.
@@ -7,12 +8,14 @@ import { QueueConfig } from '@sidequest/core';
7
8
  declare class QueueManager {
8
9
  private backend;
9
10
  private queues;
11
+ private defaults?;
10
12
  /**
11
13
  * Creates a new QueueManager.
12
14
  * @param backend The backend instance.
13
15
  * @param queues The queue configurations to manage.
16
+ * @param defaults Optional default queue settings.
14
17
  */
15
- constructor(backend: Backend, queues: NewQueueData[]);
18
+ constructor(backend: Backend, queues: NewQueueData[], defaults?: QueueDefaults | undefined);
16
19
  /**
17
20
  * Gets all active queues that have runnable jobs, sorted by priority.
18
21
  * @returns A promise resolving to an array of active queue configs.
@@ -6,14 +6,17 @@ import { grantQueueConfig } from '../queue/grant-queue-config.js';
6
6
  class QueueManager {
7
7
  backend;
8
8
  queues;
9
+ defaults;
9
10
  /**
10
11
  * Creates a new QueueManager.
11
12
  * @param backend The backend instance.
12
13
  * @param queues The queue configurations to manage.
14
+ * @param defaults Optional default queue settings.
13
15
  */
14
- constructor(backend, queues) {
16
+ constructor(backend, queues, defaults) {
15
17
  this.backend = backend;
16
18
  this.queues = queues;
19
+ this.defaults = defaults;
17
20
  }
18
21
  /**
19
22
  * Gets all active queues that have runnable jobs, sorted by priority.
@@ -24,7 +27,7 @@ class QueueManager {
24
27
  const queues = [];
25
28
  for (const queue of queueNames) {
26
29
  const fromConfig = this.queues.find((q) => q.name === queue);
27
- const queueConfig = await grantQueueConfig(this.backend, { ...fromConfig, name: queue });
30
+ const queueConfig = await grantQueueConfig(this.backend, { ...fromConfig, name: queue }, this.defaults, false);
28
31
  if (queueConfig) {
29
32
  queues.push(queueConfig);
30
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queue-manager.js","sources":["../../src/execution/queue-manager.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;AAEG;MACU,YAAY,CAAA;AAOb,IAAA,OAAA;AACA,IAAA,MAAA;AAPV;;;;AAIG;IACH,WAAA,CACU,OAAgB,EAChB,MAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;AAEH;;;AAGG;AACH,IAAA,MAAM,+BAA+B,GAAA;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;QAEzD,MAAM,MAAM,GAAkB,EAAE;AAChC,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC9B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AAC5D,YAAA,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACxF,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1B;QACF;AAEA,QAAA,OAAO;aACJ,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,QAAQ;AAC1C,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,YAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC9C,QAAA,CAAC,CAAC;IACN;AACD;;;;"}
1
+ {"version":3,"file":"queue-manager.js","sources":["../../src/execution/queue-manager.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;AAEG;MACU,YAAY,CAAA;AAQb,IAAA,OAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AATV;;;;;AAKG;AACH,IAAA,WAAA,CACU,OAAgB,EAChB,MAAsB,EACtB,QAAwB,EAAA;QAFxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;AAEH;;;AAGG;AACH,IAAA,MAAM,+BAA+B,GAAA;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;QAEzD,MAAM,MAAM,GAAkB,EAAE;AAChC,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC9B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;YAC5D,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC9G,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1B;QACF;AAEA,QAAA,OAAO;aACJ,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,QAAQ;AAC1C,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,YAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC9C,QAAA,CAAC,CAAC;IACN;AACD;;;;"}
package/dist/index.cjs CHANGED
@@ -5,7 +5,6 @@ var dispatcher = require('./execution/dispatcher.cjs');
5
5
  var executorManager = require('./execution/executor-manager.cjs');
6
6
  var queueManager = require('./execution/queue-manager.cjs');
7
7
  var constants = require('./job/constants.cjs');
8
- var job = require('./job/job.cjs');
9
8
  var jobBuilder = require('./job/job-builder.cjs');
10
9
  var jobTransitioner = require('./job/job-transitioner.cjs');
11
10
  var grantQueueConfig = require('./queue/grant-queue-config.cjs');
@@ -13,6 +12,7 @@ var cleanupFinishedJob = require('./routines/cleanup-finished-job.cjs');
13
12
  var releaseStaleJobs = require('./routines/release-stale-jobs.cjs');
14
13
  var runner = require('./shared-runner/runner.cjs');
15
14
  var runnerPool = require('./shared-runner/runner-pool.cjs');
15
+ var _import = require('./utils/import.cjs');
16
16
  var shutdown = require('./utils/shutdown.cjs');
17
17
  var main = require('./workers/main.cjs');
18
18
 
@@ -23,7 +23,6 @@ exports.Dispatcher = dispatcher.Dispatcher;
23
23
  exports.ExecutorManager = executorManager.ExecutorManager;
24
24
  exports.QueueManager = queueManager.QueueManager;
25
25
  exports.JOB_BUILDER_FALLBACK = constants.JOB_BUILDER_FALLBACK;
26
- exports.Job = job.Job;
27
26
  exports.JobBuilder = jobBuilder.JobBuilder;
28
27
  exports.JobTransitioner = jobTransitioner.JobTransitioner;
29
28
  exports.differentQueueConfig = grantQueueConfig.differentQueueConfig;
@@ -32,6 +31,7 @@ exports.cleanupFinishedJobs = cleanupFinishedJob.cleanupFinishedJobs;
32
31
  exports.releaseStaleJobs = releaseStaleJobs.releaseStaleJobs;
33
32
  exports.run = runner;
34
33
  exports.RunnerPool = runnerPool.RunnerPool;
34
+ exports.importSidequest = _import.importSidequest;
35
35
  exports.clearGracefulShutdown = shutdown.clearGracefulShutdown;
36
36
  exports.gracefulShutdown = shutdown.gracefulShutdown;
37
37
  exports.MainWorker = main.MainWorker;
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ export { Dispatcher } from './execution/dispatcher.js';
3
3
  export { ExecutorManager } from './execution/executor-manager.js';
4
4
  export { QueueManager } from './execution/queue-manager.js';
5
5
  export { JOB_BUILDER_FALLBACK } from './job/constants.js';
6
- export { Job, JobClassType } from './job/job.js';
7
6
  export { JobBuilder, JobBuilderDefaults, UniquenessInput } from './job/job-builder.js';
8
7
  export { JobTransitioner } from './job/job-transitioner.js';
9
8
  export { QueueDefaults, differentQueueConfig, grantQueueConfig } from './queue/grant-queue-config.js';
@@ -12,5 +11,6 @@ export { releaseStaleJobs } from './routines/release-stale-jobs.js';
12
11
  import * as runner from './shared-runner/runner.js';
13
12
  export { runner as run };
14
13
  export { RunnerPool } from './shared-runner/runner-pool.js';
14
+ export { importSidequest } from './utils/import.js';
15
15
  export { clearGracefulShutdown, gracefulShutdown } from './utils/shutdown.js';
16
16
  export { MainWorker } from './workers/main.js';
package/dist/index.js CHANGED
@@ -3,7 +3,6 @@ export { Dispatcher } from './execution/dispatcher.js';
3
3
  export { ExecutorManager } from './execution/executor-manager.js';
4
4
  export { QueueManager } from './execution/queue-manager.js';
5
5
  export { JOB_BUILDER_FALLBACK } from './job/constants.js';
6
- export { Job } from './job/job.js';
7
6
  export { JobBuilder } from './job/job-builder.js';
8
7
  export { JobTransitioner } from './job/job-transitioner.js';
9
8
  export { differentQueueConfig, grantQueueConfig } from './queue/grant-queue-config.js';
@@ -12,6 +11,7 @@ export { releaseStaleJobs } from './routines/release-stale-jobs.js';
12
11
  import * as runner from './shared-runner/runner.js';
13
12
  export { runner as run };
14
13
  export { RunnerPool } from './shared-runner/runner-pool.js';
14
+ export { importSidequest } from './utils/import.js';
15
15
  export { clearGracefulShutdown, gracefulShutdown } from './utils/shutdown.js';
16
16
  export { MainWorker } from './workers/main.js';
17
17
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@sidequest/core');
4
+ var nodeCron = require('node-cron');
4
5
  var constants = require('./constants.cjs');
5
6
 
6
7
  /**
@@ -114,12 +115,7 @@ class JobBuilder {
114
115
  this.jobAvailableAt = value;
115
116
  return this;
116
117
  }
117
- /**
118
- * Enqueues the job with the specified arguments.
119
- * @param args Arguments to pass to the job's run method.
120
- * @returns A promise resolving to the created job data.
121
- */
122
- async enqueue(...args) {
118
+ async build(...args) {
123
119
  const job = new this.JobClass(...this.constructorArgs);
124
120
  await job.ready();
125
121
  if (!job.script) {
@@ -138,15 +134,61 @@ class JobBuilder {
138
134
  timeout: this.jobTimeout,
139
135
  uniqueness_config: this.uniquenessConfig,
140
136
  };
141
- core.logger("JobBuilder").debug(`Enqueuing job ${job.className} with args: ${JSON.stringify(args)}
142
- and constructor args: ${JSON.stringify(this.constructorArgs)}`);
143
137
  if (this.uniquenessConfig) {
144
138
  const uniqueness = core.UniquenessFactory.create(this.uniquenessConfig);
145
139
  jobData.unique_digest = uniqueness.digest(jobData);
146
- core.logger("JobBuilder").debug(`Job ${job.className} uniqueness digest: ${jobData.unique_digest}`);
140
+ core.logger("JobBuilder").debug(`Job ${jobData.class} uniqueness digest: ${jobData.unique_digest}`);
147
141
  }
142
+ return jobData;
143
+ }
144
+ /**
145
+ * Enqueues the job with the specified arguments.
146
+ * @param args Arguments to pass to the job's run method.
147
+ * @returns A promise resolving to the created job data.
148
+ */
149
+ async enqueue(...args) {
150
+ const jobData = await this.build(...args);
151
+ core.logger("JobBuilder").debug(`Enqueuing job ${jobData.class} with args: ${JSON.stringify(args)}
152
+ and constructor args: ${JSON.stringify(this.constructorArgs)}`);
148
153
  return this.backend.createNewJob(jobData);
149
154
  }
155
+ /**
156
+ * Registers a recurring schedule to enqueue the job automatically based on a cron expression.
157
+ *
158
+ * This sets up an in-memory schedule that enqueues the job with the provided arguments
159
+ * every time the cron expression is triggered.
160
+ *
161
+ * @remarks
162
+ * - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
163
+ * - You must call this method during application initialization to ensure the job is scheduled correctly.
164
+ * - Uses node-cron’s `noOverlap: true` option to prevent concurrent executions.
165
+ *
166
+ * @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
167
+ * @param args - Arguments to be passed to the job’s `run` method on each scheduled execution.
168
+ *
169
+ * @returns The underlying `ScheduledTask` instance created by node-cron.
170
+ *
171
+ * @throws {Error} If the cron expression is invalid.
172
+ */
173
+ async schedule(cronExpression, ...args) {
174
+ if (!nodeCron.validate(cronExpression)) {
175
+ throw new Error(`Invalid cron expression ${cronExpression}`);
176
+ }
177
+ // Build the job data using the provided arguments,
178
+ // this ensures the scheduled state is going to be respected in cases where the builder was reused.
179
+ // Includes class name, queue, timeout, uniqueness, etc.
180
+ const jobData = await this.build(...args);
181
+ // Freeze the job data to prevent future modifications.
182
+ // Ensures the same payload is used on every scheduled execution.
183
+ Object.freeze(jobData);
184
+ core.logger("JobBuilder").debug(`Scheduling job ${jobData.class} with cron: "${cronExpression}", args: ${JSON.stringify(args)}, ` +
185
+ `constructor args: ${JSON.stringify(this.constructorArgs)}`);
186
+ return nodeCron.schedule(cronExpression, async () => {
187
+ const newJobData = Object.assign({}, jobData);
188
+ core.logger("JobBuilder").debug(`Cron triggered for job ${newJobData.class} at ${newJobData.available_at.toISOString()} with args: ${JSON.stringify(args)}`);
189
+ return this.backend.createNewJob(jobData);
190
+ }, { noOverlap: true });
191
+ }
150
192
  }
151
193
 
152
194
  exports.JobBuilder = JobBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","logger","UniquenessFactory"],"mappings":"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"}
1
+ {"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","UniquenessFactory","logger"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Backend } from '@sidequest/backend';
2
- import { TimePeriod, JobData } from '@sidequest/core';
3
- import { JobClassType } from './job.js';
2
+ import { TimePeriod, JobClassType, JobData } from '@sidequest/core';
3
+ import { ScheduledTask } from 'node-cron';
4
4
 
5
5
  /**
6
6
  * Configuration for job uniqueness constraints.
@@ -103,12 +103,32 @@ declare class JobBuilder<T extends JobClassType> {
103
103
  * @returns This builder instance.
104
104
  */
105
105
  availableAt(value: Date): this;
106
+ private build;
106
107
  /**
107
108
  * Enqueues the job with the specified arguments.
108
109
  * @param args Arguments to pass to the job's run method.
109
110
  * @returns A promise resolving to the created job data.
110
111
  */
111
112
  enqueue(...args: Parameters<InstanceType<T>["run"]>): Promise<JobData>;
113
+ /**
114
+ * Registers a recurring schedule to enqueue the job automatically based on a cron expression.
115
+ *
116
+ * This sets up an in-memory schedule that enqueues the job with the provided arguments
117
+ * every time the cron expression is triggered.
118
+ *
119
+ * @remarks
120
+ * - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
121
+ * - You must call this method during application initialization to ensure the job is scheduled correctly.
122
+ * - Uses node-cron’s `noOverlap: true` option to prevent concurrent executions.
123
+ *
124
+ * @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
125
+ * @param args - Arguments to be passed to the job’s `run` method on each scheduled execution.
126
+ *
127
+ * @returns The underlying `ScheduledTask` instance created by node-cron.
128
+ *
129
+ * @throws {Error} If the cron expression is invalid.
130
+ */
131
+ schedule(cronExpression: string, ...args: Parameters<InstanceType<T>["run"]>): Promise<ScheduledTask>;
112
132
  }
113
133
 
114
134
  export { JobBuilder };
@@ -1,4 +1,5 @@
1
- import { logger, UniquenessFactory } from '@sidequest/core';
1
+ import { UniquenessFactory, logger } from '@sidequest/core';
2
+ import nodeCron from 'node-cron';
2
3
  import { JOB_BUILDER_FALLBACK } from './constants.js';
3
4
 
4
5
  /**
@@ -112,12 +113,7 @@ class JobBuilder {
112
113
  this.jobAvailableAt = value;
113
114
  return this;
114
115
  }
115
- /**
116
- * Enqueues the job with the specified arguments.
117
- * @param args Arguments to pass to the job's run method.
118
- * @returns A promise resolving to the created job data.
119
- */
120
- async enqueue(...args) {
116
+ async build(...args) {
121
117
  const job = new this.JobClass(...this.constructorArgs);
122
118
  await job.ready();
123
119
  if (!job.script) {
@@ -136,15 +132,61 @@ class JobBuilder {
136
132
  timeout: this.jobTimeout,
137
133
  uniqueness_config: this.uniquenessConfig,
138
134
  };
139
- logger("JobBuilder").debug(`Enqueuing job ${job.className} with args: ${JSON.stringify(args)}
140
- and constructor args: ${JSON.stringify(this.constructorArgs)}`);
141
135
  if (this.uniquenessConfig) {
142
136
  const uniqueness = UniquenessFactory.create(this.uniquenessConfig);
143
137
  jobData.unique_digest = uniqueness.digest(jobData);
144
- logger("JobBuilder").debug(`Job ${job.className} uniqueness digest: ${jobData.unique_digest}`);
138
+ logger("JobBuilder").debug(`Job ${jobData.class} uniqueness digest: ${jobData.unique_digest}`);
145
139
  }
140
+ return jobData;
141
+ }
142
+ /**
143
+ * Enqueues the job with the specified arguments.
144
+ * @param args Arguments to pass to the job's run method.
145
+ * @returns A promise resolving to the created job data.
146
+ */
147
+ async enqueue(...args) {
148
+ const jobData = await this.build(...args);
149
+ logger("JobBuilder").debug(`Enqueuing job ${jobData.class} with args: ${JSON.stringify(args)}
150
+ and constructor args: ${JSON.stringify(this.constructorArgs)}`);
146
151
  return this.backend.createNewJob(jobData);
147
152
  }
153
+ /**
154
+ * Registers a recurring schedule to enqueue the job automatically based on a cron expression.
155
+ *
156
+ * This sets up an in-memory schedule that enqueues the job with the provided arguments
157
+ * every time the cron expression is triggered.
158
+ *
159
+ * @remarks
160
+ * - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
161
+ * - You must call this method during application initialization to ensure the job is scheduled correctly.
162
+ * - Uses node-cron’s `noOverlap: true` option to prevent concurrent executions.
163
+ *
164
+ * @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
165
+ * @param args - Arguments to be passed to the job’s `run` method on each scheduled execution.
166
+ *
167
+ * @returns The underlying `ScheduledTask` instance created by node-cron.
168
+ *
169
+ * @throws {Error} If the cron expression is invalid.
170
+ */
171
+ async schedule(cronExpression, ...args) {
172
+ if (!nodeCron.validate(cronExpression)) {
173
+ throw new Error(`Invalid cron expression ${cronExpression}`);
174
+ }
175
+ // Build the job data using the provided arguments,
176
+ // this ensures the scheduled state is going to be respected in cases where the builder was reused.
177
+ // Includes class name, queue, timeout, uniqueness, etc.
178
+ const jobData = await this.build(...args);
179
+ // Freeze the job data to prevent future modifications.
180
+ // Ensures the same payload is used on every scheduled execution.
181
+ Object.freeze(jobData);
182
+ logger("JobBuilder").debug(`Scheduling job ${jobData.class} with cron: "${cronExpression}", args: ${JSON.stringify(args)}, ` +
183
+ `constructor args: ${JSON.stringify(this.constructorArgs)}`);
184
+ return nodeCron.schedule(cronExpression, async () => {
185
+ const newJobData = Object.assign({}, jobData);
186
+ logger("JobBuilder").debug(`Cron triggered for job ${newJobData.class} at ${newJobData.available_at.toISOString()} with args: ${JSON.stringify(args)}`);
187
+ return this.backend.createNewJob(jobData);
188
+ }, { noOverlap: true });
189
+ }
148
190
  }
149
191
 
150
192
  export { JobBuilder };
@@ -1 +1 @@
1
- {"version":3,"file":"job-builder.js","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-builder.js","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ class JobTransitioner {
21
21
  core.logger("JobTransitioner").debug(`Transition ${transition.constructor.name} not applicable for job ${jobData.id}. Returning original job data.`);
22
22
  return jobData;
23
23
  }
24
- core.logger("JobTransitioner").info(`Applying transition ${transition.constructor.name} to job ${jobData.id}`);
24
+ core.logger("JobTransitioner").debug(`Applying transition ${transition.constructor.name} to job ${jobData.id}`);
25
25
  const newData = transition.apply(jobData);
26
26
  if (newData.uniqueness_config) {
27
27
  const uniqueness = core.UniquenessFactory.create(newData.uniqueness_config);
@@ -1 +1 @@
1
- {"version":3,"file":"job-transitioner.cjs","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":["logger","UniquenessFactory"],"mappings":";;;;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QACzG,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,UAAU,GAAGC,sBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD;AACA,QAAAD,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACzF,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC;AACD;;;;"}
1
+ {"version":3,"file":"job-transitioner.cjs","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":["logger","UniquenessFactory"],"mappings":";;;;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QAC1G,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,UAAU,GAAGC,sBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD;AACA,QAAAD,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACzF,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC;AACD;;;;"}
@@ -19,7 +19,7 @@ class JobTransitioner {
19
19
  logger("JobTransitioner").debug(`Transition ${transition.constructor.name} not applicable for job ${jobData.id}. Returning original job data.`);
20
20
  return jobData;
21
21
  }
22
- logger("JobTransitioner").info(`Applying transition ${transition.constructor.name} to job ${jobData.id}`);
22
+ logger("JobTransitioner").debug(`Applying transition ${transition.constructor.name} to job ${jobData.id}`);
23
23
  const newData = transition.apply(jobData);
24
24
  if (newData.uniqueness_config) {
25
25
  const uniqueness = UniquenessFactory.create(newData.uniqueness_config);
@@ -1 +1 @@
1
- {"version":3,"file":"job-transitioner.js","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QACzG,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD;AACA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACzF,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC;AACD;;;;"}
1
+ {"version":3,"file":"job-transitioner.js","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QAC1G,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD;AACA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACzF,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC;AACD;;;;"}
@@ -23,12 +23,14 @@ function differentQueueConfig(queue, queueConfig) {
23
23
  * Ensures a queue configuration exists, creating it if necessary.
24
24
  * @param queue The name of the queue.
25
25
  * @param config Optional configuration for the new queue.
26
+ * @param defaults Optional default values for the queue.
27
+ * @param forceUpdate If true, updates the queue configuration even if it already exists.
26
28
  * @returns The queue configuration.
27
29
  */
28
- async function grantQueueConfig(backend, queue, defaults) {
30
+ async function grantQueueConfig(backend, queue, defaults, forceUpdate = false) {
29
31
  const queueConfig = await backend?.getQueue(queue.name);
30
32
  if (queueConfig) {
31
- if (differentQueueConfig(queue, queueConfig)) {
33
+ if (forceUpdate && differentQueueConfig(queue, queueConfig)) {
32
34
  core.logger("Engine").warn(`Queue config for ${queue.name} exists but differs from the provided configuration. Updating...`);
33
35
  return await backend.updateQueue({ ...queueConfig, ...queue });
34
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grant-queue-config.cjs","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA;;;;;AAKG;AACI,eAAe,gBAAgB,CAAC,OAAgB,EAAE,KAAmB,EAAE,QAAwB,EAAA;IACpG,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,EAAE;AACf,QAAA,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC5C,YAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnB,CAAA,iBAAA,EAAoB,KAAK,CAAC,IAAI,CAAA,gEAAA,CAAkE,CACjG;AACD,YAAA,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAiB;AAC9B,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,KAAK;KACT;AAED,IAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;AAEhE,IAAA,OAAO,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;AAC3C;;;;;"}
1
+ {"version":3,"file":"grant-queue-config.cjs","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA;;;;;;;AAOG;AACI,eAAe,gBAAgB,CACpC,OAAgB,EAChB,KAAmB,EACnB,QAAwB,EACxB,WAAW,GAAG,KAAK,EAAA;IAEnB,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,EAAE;QACf,IAAI,WAAW,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC3D,YAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnB,CAAA,iBAAA,EAAoB,KAAK,CAAC,IAAI,CAAA,gEAAA,CAAkE,CACjG;AACD,YAAA,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAiB;AAC9B,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,KAAK;KACT;AAED,IAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;AAEhE,IAAA,OAAO,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;AAC3C;;;;;"}
@@ -24,9 +24,11 @@ declare function differentQueueConfig(queue: NewQueueData, queueConfig: QueueCon
24
24
  * Ensures a queue configuration exists, creating it if necessary.
25
25
  * @param queue The name of the queue.
26
26
  * @param config Optional configuration for the new queue.
27
+ * @param defaults Optional default values for the queue.
28
+ * @param forceUpdate If true, updates the queue configuration even if it already exists.
27
29
  * @returns The queue configuration.
28
30
  */
29
- declare function grantQueueConfig(backend: Backend, queue: NewQueueData, defaults?: QueueDefaults): Promise<QueueConfig>;
31
+ declare function grantQueueConfig(backend: Backend, queue: NewQueueData, defaults?: QueueDefaults, forceUpdate?: boolean): Promise<QueueConfig>;
30
32
 
31
33
  export { differentQueueConfig, grantQueueConfig };
32
34
  export type { QueueDefaults };
@@ -21,12 +21,14 @@ function differentQueueConfig(queue, queueConfig) {
21
21
  * Ensures a queue configuration exists, creating it if necessary.
22
22
  * @param queue The name of the queue.
23
23
  * @param config Optional configuration for the new queue.
24
+ * @param defaults Optional default values for the queue.
25
+ * @param forceUpdate If true, updates the queue configuration even if it already exists.
24
26
  * @returns The queue configuration.
25
27
  */
26
- async function grantQueueConfig(backend, queue, defaults) {
28
+ async function grantQueueConfig(backend, queue, defaults, forceUpdate = false) {
27
29
  const queueConfig = await backend?.getQueue(queue.name);
28
30
  if (queueConfig) {
29
- if (differentQueueConfig(queue, queueConfig)) {
31
+ if (forceUpdate && differentQueueConfig(queue, queueConfig)) {
30
32
  logger("Engine").warn(`Queue config for ${queue.name} exists but differs from the provided configuration. Updating...`);
31
33
  return await backend.updateQueue({ ...queueConfig, ...queue });
32
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grant-queue-config.js","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA;;;;;AAKG;AACI,eAAe,gBAAgB,CAAC,OAAgB,EAAE,KAAmB,EAAE,QAAwB,EAAA;IACpG,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,EAAE;AACf,QAAA,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC5C,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnB,CAAA,iBAAA,EAAoB,KAAK,CAAC,IAAI,CAAA,gEAAA,CAAkE,CACjG;AACD,YAAA,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAiB;AAC9B,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,KAAK;KACT;AAED,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;AAEhE,IAAA,OAAO,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;AAC3C;;;;"}
1
+ {"version":3,"file":"grant-queue-config.js","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA;;;;;;;AAOG;AACI,eAAe,gBAAgB,CACpC,OAAgB,EAChB,KAAmB,EACnB,QAAwB,EACxB,WAAW,GAAG,KAAK,EAAA;IAEnB,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,EAAE;QACf,IAAI,WAAW,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC3D,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnB,CAAA,iBAAA,EAAoB,KAAK,CAAC,IAAI,CAAA,gEAAA,CAAkE,CACjG;AACD,YAAA,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAiB;AAC9B,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,KAAK;KACT;AAED,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;AAEhE,IAAA,OAAO,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;AAC3C;;;;"}
@@ -9,19 +9,22 @@ const runnerPath = path.resolve(__dirname, "runner.js");
9
9
  * A pool of worker threads for running jobs in parallel using Piscina.
10
10
  */
11
11
  class RunnerPool {
12
+ nonNullConfig;
12
13
  /** The underlying Piscina worker pool. */
13
14
  pool;
14
15
  /**
15
16
  * Creates a new RunnerPool.
16
- * @param size The number of worker threads to use (defaults to number of CPUs).
17
+ * @param nonNullConfig The non-nullable engine configuration.
17
18
  */
18
- constructor(minThreads, maxThreads) {
19
+ constructor(nonNullConfig) {
20
+ this.nonNullConfig = nonNullConfig;
19
21
  this.pool = new Piscina({
20
22
  filename: runnerPath,
21
- minThreads,
22
- maxThreads,
23
+ minThreads: this.nonNullConfig.minThreads,
24
+ maxThreads: this.nonNullConfig.maxThreads,
25
+ idleTimeout: this.nonNullConfig.idleWorkerTimeout,
23
26
  });
24
- core.logger("RunnerPool").debug(`Created worker pool with min ${minThreads} threads and max ${maxThreads} threads`);
27
+ core.logger("RunnerPool").debug(`Created worker pool with min ${this.nonNullConfig.minThreads} threads and max ${this.nonNullConfig.maxThreads} threads`);
25
28
  }
26
29
  /**
27
30
  * Runs a job in the worker pool.
@@ -31,7 +34,7 @@ class RunnerPool {
31
34
  */
32
35
  run(job, signal) {
33
36
  core.logger("RunnerPool").debug(`Running job ${job.id} in pool`);
34
- return this.pool.run(job, { signal });
37
+ return this.pool.run({ jobData: job, config: this.nonNullConfig }, { signal });
35
38
  }
36
39
  /**
37
40
  * Destroys the worker pool and releases resources.
@@ -1 +1 @@
1
- {"version":3,"file":"runner-pool.cjs","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;;;AAKA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,WAAW,CAAC;AAEjE;;AAEG;MACU,UAAU,CAAA;;AAEJ,IAAA,IAAI;AAErB;;;AAGG;IACH,WAAA,CAAY,UAAkB,EAAE,UAAkB,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;YACpB,UAAU;YACV,UAAU;AACX,SAAA,CAAC;AACF,QAAAA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,6BAAA,EAAgC,UAAU,CAAA,iBAAA,EAAoB,UAAU,CAAA,QAAA,CAAU,CAAC;IAChH;AAEA;;;;;AAKG;IACH,GAAG,CAAC,GAAY,EAAE,MAAqB,EAAA;AACrC,QAAAA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;AAC3D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;IACvC;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QACXA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B;AACD;;;;"}
1
+ {"version":3,"file":"runner-pool.cjs","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;;;AAMA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,WAAW,CAAC;AAEjE;;AAEG;MACU,UAAU,CAAA;AAQD,IAAA,aAAA;;AANH,IAAA,IAAI;AAErB;;;AAGG;AACH,IAAA,WAAA,CAAoB,aAAsC,EAAA;QAAtC,IAAA,CAAA,aAAa,GAAb,aAAa;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AAClD,SAAA,CAAC;QACFA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CACxB,CAAA,6BAAA,EAAgC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,iBAAA,EAAoB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,QAAA,CAAU,CACzH;IACH;AAEA;;;;;AAKG;IACH,GAAG,CAAC,GAAY,EAAE,MAAqB,EAAA;AACrC,QAAAA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAChF;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QACXA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B;AACD;;;;"}
@@ -1,17 +1,19 @@
1
1
  import { JobData, JobResult } from '@sidequest/core';
2
2
  import EventEmitter from 'events';
3
+ import { NonNullableEngineConfig } from '../engine.js';
3
4
 
4
5
  /**
5
6
  * A pool of worker threads for running jobs in parallel using Piscina.
6
7
  */
7
8
  declare class RunnerPool {
9
+ private nonNullConfig;
8
10
  /** The underlying Piscina worker pool. */
9
11
  private readonly pool;
10
12
  /**
11
13
  * Creates a new RunnerPool.
12
- * @param size The number of worker threads to use (defaults to number of CPUs).
14
+ * @param nonNullConfig The non-nullable engine configuration.
13
15
  */
14
- constructor(minThreads: number, maxThreads: number);
16
+ constructor(nonNullConfig: NonNullableEngineConfig);
15
17
  /**
16
18
  * Runs a job in the worker pool.
17
19
  * @param job The job data to run.
@@ -7,19 +7,22 @@ const runnerPath = path.resolve(import.meta.dirname, "runner.js");
7
7
  * A pool of worker threads for running jobs in parallel using Piscina.
8
8
  */
9
9
  class RunnerPool {
10
+ nonNullConfig;
10
11
  /** The underlying Piscina worker pool. */
11
12
  pool;
12
13
  /**
13
14
  * Creates a new RunnerPool.
14
- * @param size The number of worker threads to use (defaults to number of CPUs).
15
+ * @param nonNullConfig The non-nullable engine configuration.
15
16
  */
16
- constructor(minThreads, maxThreads) {
17
+ constructor(nonNullConfig) {
18
+ this.nonNullConfig = nonNullConfig;
17
19
  this.pool = new Piscina({
18
20
  filename: runnerPath,
19
- minThreads,
20
- maxThreads,
21
+ minThreads: this.nonNullConfig.minThreads,
22
+ maxThreads: this.nonNullConfig.maxThreads,
23
+ idleTimeout: this.nonNullConfig.idleWorkerTimeout,
21
24
  });
22
- logger("RunnerPool").debug(`Created worker pool with min ${minThreads} threads and max ${maxThreads} threads`);
25
+ logger("RunnerPool").debug(`Created worker pool with min ${this.nonNullConfig.minThreads} threads and max ${this.nonNullConfig.maxThreads} threads`);
23
26
  }
24
27
  /**
25
28
  * Runs a job in the worker pool.
@@ -29,7 +32,7 @@ class RunnerPool {
29
32
  */
30
33
  run(job, signal) {
31
34
  logger("RunnerPool").debug(`Running job ${job.id} in pool`);
32
- return this.pool.run(job, { signal });
35
+ return this.pool.run({ jobData: job, config: this.nonNullConfig }, { signal });
33
36
  }
34
37
  /**
35
38
  * Destroys the worker pool and releases resources.
@@ -1 +1 @@
1
- {"version":3,"file":"runner-pool.js","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAEjE;;AAEG;MACU,UAAU,CAAA;;AAEJ,IAAA,IAAI;AAErB;;;AAGG;IACH,WAAA,CAAY,UAAkB,EAAE,UAAkB,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;YACpB,UAAU;YACV,UAAU;AACX,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,6BAAA,EAAgC,UAAU,CAAA,iBAAA,EAAoB,UAAU,CAAA,QAAA,CAAU,CAAC;IAChH;AAEA;;;;;AAKG;IACH,GAAG,CAAC,GAAY,EAAE,MAAqB,EAAA;AACrC,QAAA,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;AAC3D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;IACvC;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QACX,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B;AACD;;;;"}
1
+ {"version":3,"file":"runner-pool.js","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAEjE;;AAEG;MACU,UAAU,CAAA;AAQD,IAAA,aAAA;;AANH,IAAA,IAAI;AAErB;;;AAGG;AACH,IAAA,WAAA,CAAoB,aAAsC,EAAA;QAAtC,IAAA,CAAA,aAAa,GAAb,aAAa;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AAClD,SAAA,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CACxB,CAAA,6BAAA,EAAgC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,iBAAA,EAAoB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,QAAA,CAAU,CACzH;IACH;AAEA;;;;;AAKG;IACH,GAAG,CAAC,GAAY,EAAE,MAAqB,EAAA;AACrC,QAAA,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAChF;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QACX,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B;AACD;;;;"}