@nest-boot/schedule 7.3.8 → 8.0.0-beta.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.
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -21
- package/dist/index.js.map +1 -1
- package/dist/schedule-module-options.interface.d.ts +0 -10
- package/dist/schedule-module-options.interface.js +1 -2
- package/dist/schedule-options.interface.d.ts +0 -4
- package/dist/schedule-options.interface.js +1 -2
- package/dist/schedule.decorator.d.ts +1 -18
- package/dist/schedule.decorator.js +6 -29
- package/dist/schedule.decorator.js.map +1 -1
- package/dist/schedule.module-definition.d.ts +1 -1
- package/dist/schedule.module-definition.js +7 -11
- package/dist/schedule.module-definition.js.map +1 -1
- package/dist/schedule.module.d.ts +1 -18
- package/dist/schedule.module.js +20 -40
- package/dist/schedule.module.js.map +1 -1
- package/dist/schedule.processor.d.ts +2 -3
- package/dist/schedule.processor.js +14 -16
- package/dist/schedule.processor.js.map +1 -1
- package/dist/schedule.registry.d.ts +1 -30
- package/dist/schedule.registry.js +19 -45
- package/dist/schedule.registry.js.map +1 -1
- package/package.json +35 -27
- package/dist/index.spec.d.ts +0 -0
- package/dist/index.spec.js +0 -45
- package/dist/index.spec.js.map +0 -1
- package/dist/schedule.decorator.spec.d.ts +0 -1
- package/dist/schedule.decorator.spec.js +0 -108
- package/dist/schedule.decorator.spec.js.map +0 -1
- package/dist/schedule.module.spec.d.ts +0 -1
- package/dist/schedule.module.spec.js +0 -91
- package/dist/schedule.module.spec.js.map +0 -1
- package/dist/schedule.processor.spec.d.ts +0 -1
- package/dist/schedule.processor.spec.js +0 -197
- package/dist/schedule.processor.spec.js.map +0 -1
- package/dist/schedule.registry.spec.d.ts +0 -1
- package/dist/schedule.registry.spec.js +0 -233
- package/dist/schedule.registry.spec.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from "./schedule.decorator";
|
|
2
|
-
export * from "./schedule.module";
|
|
3
|
-
export * from "./schedule.registry";
|
|
4
|
-
export * from "./schedule-module-options.interface";
|
|
5
|
-
export * from "./schedule-options.interface";
|
|
1
|
+
export * from "./schedule.decorator.js";
|
|
2
|
+
export * from "./schedule.module.js";
|
|
3
|
+
export * from "./schedule.registry.js";
|
|
4
|
+
export * from "./schedule-module-options.interface.js";
|
|
5
|
+
export * from "./schedule-options.interface.js";
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./schedule.decorator"), exports);
|
|
18
|
-
__exportStar(require("./schedule.module"), exports);
|
|
19
|
-
__exportStar(require("./schedule.registry"), exports);
|
|
20
|
-
__exportStar(require("./schedule-module-options.interface"), exports);
|
|
21
|
-
__exportStar(require("./schedule-options.interface"), exports);
|
|
1
|
+
export * from "./schedule.decorator.js";
|
|
2
|
+
export * from "./schedule.module.js";
|
|
3
|
+
export * from "./schedule.registry.js";
|
|
4
|
+
export * from "./schedule-module-options.interface.js";
|
|
5
|
+
export * from "./schedule-options.interface.js";
|
|
22
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC"}
|
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
import { type RegisterQueueOptions } from "@nest-boot/bullmq";
|
|
2
2
|
import { type ConnectionOptions } from "bullmq";
|
|
3
|
-
/**
|
|
4
|
-
* Configuration options for the schedule module.
|
|
5
|
-
*
|
|
6
|
-
* @remarks
|
|
7
|
-
* Extends BullMQ queue options with schedule-specific settings
|
|
8
|
-
* for controlling job processing behavior.
|
|
9
|
-
*/
|
|
10
3
|
export interface ScheduleModuleOptions extends RegisterQueueOptions {
|
|
11
|
-
/** Whether to automatically start processing scheduled jobs on module init. */
|
|
12
4
|
autorun?: boolean;
|
|
13
|
-
/** Maximum number of concurrent scheduled jobs to process. */
|
|
14
5
|
concurrency?: number;
|
|
15
|
-
/** Optional Redis connection options for the schedule queue. */
|
|
16
6
|
connection?: ConnectionOptions;
|
|
17
7
|
}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { JobSchedulerTemplateOptions } from "bullmq";
|
|
2
|
-
/** Options for configuring a scheduled job. */
|
|
3
2
|
export interface ScheduleOptions extends JobSchedulerTemplateOptions {
|
|
4
|
-
/** Type of schedule: `"cron"` for cron expressions or `"interval"` for millisecond intervals. */
|
|
5
3
|
type: "cron" | "interval";
|
|
6
|
-
/** Cron expression (for `"cron"` type) or millisecond interval (for `"interval"` type). */
|
|
7
4
|
value: number | string;
|
|
8
|
-
/** Timezone for cron expressions (defaults to `"UTC"`). */
|
|
9
5
|
timezone?: string;
|
|
10
6
|
}
|
|
@@ -1,21 +1,4 @@
|
|
|
1
|
-
import { type ScheduleOptions } from "./schedule-options.interface";
|
|
2
|
-
/**
|
|
3
|
-
* Decorator that registers a method as a scheduled job.
|
|
4
|
-
* @param options - Schedule configuration (type, value, timezone, etc.)
|
|
5
|
-
* @returns Method decorator
|
|
6
|
-
*/
|
|
1
|
+
import { type ScheduleOptions } from "./schedule-options.interface.js";
|
|
7
2
|
export declare const Schedule: (options: ScheduleOptions) => <T>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => void;
|
|
8
|
-
/**
|
|
9
|
-
* Decorator that registers a method as a cron-scheduled job.
|
|
10
|
-
* @param value - Cron expression (e.g. `"0 * * * *"`)
|
|
11
|
-
* @param options - Additional schedule options (timezone, etc.)
|
|
12
|
-
* @returns Method decorator
|
|
13
|
-
*/
|
|
14
3
|
export declare const Cron: (value: string, options?: Omit<ScheduleOptions, "type" | "value">) => <T>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => void;
|
|
15
|
-
/**
|
|
16
|
-
* Decorator that registers a method as an interval-scheduled job.
|
|
17
|
-
* @param value - Interval in milliseconds
|
|
18
|
-
* @param options - Additional schedule options
|
|
19
|
-
* @returns Method decorator
|
|
20
|
-
*/
|
|
21
4
|
export declare const Interval: (value: number | string, options?: Omit<ScheduleOptions, "type" | "value">) => <T>(target: object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => void;
|
|
@@ -1,39 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const schedule_module_definition_1 = require("./schedule.module-definition");
|
|
6
|
-
/**
|
|
7
|
-
* Decorator that registers a method as a scheduled job.
|
|
8
|
-
* @param options - Schedule configuration (type, value, timezone, etc.)
|
|
9
|
-
* @returns Method decorator
|
|
10
|
-
*/
|
|
11
|
-
const Schedule = (options) => (target, propertyKey, descriptor) => {
|
|
12
|
-
(0, common_1.SetMetadata)(schedule_module_definition_1.SCHEDULE_METADATA_KEY, options)(target, propertyKey, descriptor);
|
|
1
|
+
import { SetMetadata } from "@nestjs/common";
|
|
2
|
+
import { SCHEDULE_METADATA_KEY } from "./schedule.module-definition.js";
|
|
3
|
+
export const Schedule = (options) => (target, propertyKey, descriptor) => {
|
|
4
|
+
SetMetadata(SCHEDULE_METADATA_KEY, options)(target, propertyKey, descriptor);
|
|
13
5
|
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Decorator that registers a method as a cron-scheduled job.
|
|
17
|
-
* @param value - Cron expression (e.g. `"0 * * * *"`)
|
|
18
|
-
* @param options - Additional schedule options (timezone, etc.)
|
|
19
|
-
* @returns Method decorator
|
|
20
|
-
*/
|
|
21
|
-
const Cron = (value, options) => (0, exports.Schedule)({
|
|
6
|
+
export const Cron = (value, options) => Schedule({
|
|
22
7
|
type: "cron",
|
|
23
8
|
value,
|
|
24
9
|
...(options ?? {}),
|
|
25
10
|
});
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Decorator that registers a method as an interval-scheduled job.
|
|
29
|
-
* @param value - Interval in milliseconds
|
|
30
|
-
* @param options - Additional schedule options
|
|
31
|
-
* @returns Method decorator
|
|
32
|
-
*/
|
|
33
|
-
const Interval = (value, options) => (0, exports.Schedule)({
|
|
11
|
+
export const Interval = (value, options) => Schedule({
|
|
34
12
|
type: "interval",
|
|
35
13
|
value,
|
|
36
14
|
...(options ?? {}),
|
|
37
15
|
});
|
|
38
|
-
exports.Interval = Interval;
|
|
39
16
|
//# sourceMappingURL=schedule.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.decorator.js","sourceRoot":"","sources":["../src/schedule.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.decorator.js","sourceRoot":"","sources":["../src/schedule.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAQxE,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,OAAwB,EAAE,EAAE,CAC7B,CACE,MAAc,EACd,WAAmB,EACnB,UAAsC,EACtC,EAAE;IACF,WAAW,CAA0B,qBAAqB,EAAE,OAAO,CAAC,CAClE,MAAM,EACN,WAAW,EACX,UAAU,CACX,CAAC;AACJ,CAAC,CAAC;AAQJ,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,KAAa,EACb,OAAiD,EACjD,EAAE,CACF,QAAQ,CAAC;IACP,IAAI,EAAE,MAAM;IACZ,KAAK;IACL,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;CACnB,CAAC,CAAC;AAQL,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAAsB,EACtB,OAAiD,EACjD,EAAE,CACF,QAAQ,CAAC;IACP,IAAI,EAAE,UAAU;IAChB,KAAK;IACL,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;CACnB,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ScheduleModuleOptions } from "./schedule-module-options.interface";
|
|
1
|
+
import { type ScheduleModuleOptions } from "./schedule-module-options.interface.js";
|
|
2
2
|
export declare const SCHEDULE_QUEUE_NAME = "schedule";
|
|
3
3
|
export declare const SCHEDULE_METADATA_KEY: `${string}-${string}-${string}-${string}-${string}`;
|
|
4
4
|
export declare const MODULE_OPTIONS_TOKEN: unique symbol;
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
exports.SCHEDULE_QUEUE_NAME = "schedule";
|
|
8
|
-
exports.SCHEDULE_METADATA_KEY = (0, crypto_1.randomUUID)();
|
|
9
|
-
exports.MODULE_OPTIONS_TOKEN = Symbol("ScheduleModuleOptions");
|
|
10
|
-
_a = new common_1.ConfigurableModuleBuilder()
|
|
1
|
+
import { ConfigurableModuleBuilder } from "@nestjs/common";
|
|
2
|
+
import { randomUUID } from "crypto";
|
|
3
|
+
export const SCHEDULE_QUEUE_NAME = "schedule";
|
|
4
|
+
export const SCHEDULE_METADATA_KEY = randomUUID();
|
|
5
|
+
export const MODULE_OPTIONS_TOKEN = Symbol("ScheduleModuleOptions");
|
|
6
|
+
export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN: BASE_MODULE_OPTIONS_TOKEN, OPTIONS_TYPE, ASYNC_OPTIONS_TYPE, } = new ConfigurableModuleBuilder()
|
|
11
7
|
.setClassMethodName("forRoot")
|
|
12
|
-
.build()
|
|
8
|
+
.build();
|
|
13
9
|
//# sourceMappingURL=schedule.module-definition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.module-definition.js","sourceRoot":"","sources":["../src/schedule.module-definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.module-definition.js","sourceRoot":"","sources":["../src/schedule.module-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,EACX,uBAAuB,EACvB,oBAAoB,EAAE,yBAAyB,EAC/C,YAAY,EACZ,kBAAkB,GACnB,GAAG,IAAI,yBAAyB,EAAyB;KACvD,kBAAkB,CAAC,SAAS,CAAC;KAC7B,KAAK,EAAE,CAAC"}
|
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
import { type DynamicModule } from "@nestjs/common";
|
|
2
|
-
import { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from "./schedule.module-definition";
|
|
3
|
-
/**
|
|
4
|
-
* Job scheduling module powered by BullMQ.
|
|
5
|
-
*
|
|
6
|
-
* @remarks
|
|
7
|
-
* Provides cron-like job scheduling using BullMQ queues.
|
|
8
|
-
* Supports decorator-based schedule registration and configurable concurrency.
|
|
9
|
-
*/
|
|
2
|
+
import { ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, OPTIONS_TYPE } from "./schedule.module-definition.js";
|
|
10
3
|
export declare class ScheduleModule extends ConfigurableModuleClass {
|
|
11
|
-
/**
|
|
12
|
-
* Registers the ScheduleModule with the given options.
|
|
13
|
-
* @param options - Configuration options including connection and concurrency
|
|
14
|
-
* @returns Dynamic module configuration
|
|
15
|
-
*/
|
|
16
4
|
static forRoot(options: typeof OPTIONS_TYPE): DynamicModule;
|
|
17
|
-
/**
|
|
18
|
-
* Registers the ScheduleModule asynchronously with factory functions.
|
|
19
|
-
* @param options - Async configuration options
|
|
20
|
-
* @returns Dynamic module configuration
|
|
21
|
-
*/
|
|
22
5
|
static forRootAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule;
|
|
23
6
|
}
|
package/dist/schedule.module.js
CHANGED
|
@@ -1,66 +1,46 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
6
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const schedule_registry_1 = require("./schedule.registry");
|
|
16
|
-
/**
|
|
17
|
-
* Job scheduling module powered by BullMQ.
|
|
18
|
-
*
|
|
19
|
-
* @remarks
|
|
20
|
-
* Provides cron-like job scheduling using BullMQ queues.
|
|
21
|
-
* Supports decorator-based schedule registration and configurable concurrency.
|
|
22
|
-
*/
|
|
23
|
-
let ScheduleModule = class ScheduleModule extends schedule_module_definition_1.ConfigurableModuleClass {
|
|
24
|
-
/**
|
|
25
|
-
* Registers the ScheduleModule with the given options.
|
|
26
|
-
* @param options - Configuration options including connection and concurrency
|
|
27
|
-
* @returns Dynamic module configuration
|
|
28
|
-
*/
|
|
7
|
+
import { BullModule } from "@nest-boot/bullmq";
|
|
8
|
+
import { Global, Logger, Module } from "@nestjs/common";
|
|
9
|
+
import { DiscoveryModule } from "@nestjs/core";
|
|
10
|
+
import { BASE_MODULE_OPTIONS_TOKEN, ConfigurableModuleClass, MODULE_OPTIONS_TOKEN, } from "./schedule.module-definition.js";
|
|
11
|
+
import { ScheduleProcessor } from "./schedule.processor.js";
|
|
12
|
+
import { ScheduleRegistry } from "./schedule.registry.js";
|
|
13
|
+
let ScheduleModule = class ScheduleModule extends ConfigurableModuleClass {
|
|
29
14
|
static forRoot(options) {
|
|
30
15
|
return super.forRoot(options);
|
|
31
16
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Registers the ScheduleModule asynchronously with factory functions.
|
|
34
|
-
* @param options - Async configuration options
|
|
35
|
-
* @returns Dynamic module configuration
|
|
36
|
-
*/
|
|
37
17
|
static forRootAsync(options) {
|
|
38
18
|
return super.forRootAsync(options);
|
|
39
19
|
}
|
|
40
20
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
(
|
|
44
|
-
(0, common_1.Module)({
|
|
21
|
+
ScheduleModule = __decorate([
|
|
22
|
+
Global(),
|
|
23
|
+
Module({
|
|
45
24
|
imports: [
|
|
46
|
-
|
|
47
|
-
|
|
25
|
+
DiscoveryModule,
|
|
26
|
+
BullModule.registerQueueAsync({
|
|
48
27
|
name: "schedule",
|
|
49
|
-
inject: [
|
|
28
|
+
inject: [MODULE_OPTIONS_TOKEN],
|
|
50
29
|
useFactory: (options) => options,
|
|
51
30
|
}),
|
|
52
31
|
],
|
|
53
32
|
providers: [
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
33
|
+
Logger,
|
|
34
|
+
ScheduleRegistry,
|
|
35
|
+
ScheduleProcessor,
|
|
57
36
|
{
|
|
58
|
-
provide:
|
|
59
|
-
inject: [{ token:
|
|
37
|
+
provide: MODULE_OPTIONS_TOKEN,
|
|
38
|
+
inject: [{ token: BASE_MODULE_OPTIONS_TOKEN, optional: true }],
|
|
60
39
|
useFactory: (options) => options ?? {},
|
|
61
40
|
},
|
|
62
41
|
],
|
|
63
|
-
exports: [
|
|
42
|
+
exports: [MODULE_OPTIONS_TOKEN],
|
|
64
43
|
})
|
|
65
44
|
], ScheduleModule);
|
|
45
|
+
export { ScheduleModule };
|
|
66
46
|
//# sourceMappingURL=schedule.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.module.js","sourceRoot":"","sources":["../src/schedule.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.module.js","sourceRoot":"","sources":["../src/schedule.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAsB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAEL,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAgCnD,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,uBAAuB;IAMzD,MAAM,CAAU,OAAO,CAAC,OAA4B;QAClD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAOD,MAAM,CAAU,YAAY,CAC1B,OAAkC;QAElC,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AApBY,cAAc;IAtB1B,MAAM,EAAE;IACR,MAAM,CAAC;QACN,OAAO,EAAE;YACP,eAAe;YACf,UAAU,CAAC,kBAAkB,CAAC;gBAC5B,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,CAAC,oBAAoB,CAAC;gBAC9B,UAAU,EAAE,CAAC,OAA8B,EAAE,EAAE,CAAC,OAAO;aACxD,CAAC;SACH;QACD,SAAS,EAAE;YACT,MAAM;YACN,gBAAgB;YAChB,iBAAiB;YACjB;gBACE,OAAO,EAAE,oBAAoB;gBAC7B,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC9D,UAAU,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE;aAC/D;SACF;QACD,OAAO,EAAE,CAAC,oBAAoB,CAAC;KAChC,CAAC;GACW,cAAc,CAoB1B"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { WorkerHost } from "@nest-boot/bullmq";
|
|
2
2
|
import { OnApplicationBootstrap } from "@nestjs/common";
|
|
3
3
|
import { Job } from "bullmq";
|
|
4
|
-
import { ScheduleRegistry } from "./schedule.registry";
|
|
5
|
-
import { ScheduleModuleOptions } from "./schedule-module-options.interface";
|
|
4
|
+
import { ScheduleRegistry } from "./schedule.registry.js";
|
|
5
|
+
import { type ScheduleModuleOptions } from "./schedule-module-options.interface.js";
|
|
6
6
|
export declare class ScheduleProcessor extends WorkerHost implements OnApplicationBootstrap {
|
|
7
7
|
private readonly scheduleRegistry;
|
|
8
8
|
private readonly options?;
|
|
9
|
-
/** Logger for worker lifecycle failures. @internal */
|
|
10
9
|
private readonly logger;
|
|
11
10
|
constructor(scheduleRegistry: ScheduleRegistry, options?: ScheduleModuleOptions | undefined);
|
|
12
11
|
process(job: Job): Promise<void>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -12,19 +11,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
12
|
};
|
|
14
13
|
var ScheduleProcessor_1;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
import { Processor, WorkerHost } from "@nest-boot/bullmq";
|
|
15
|
+
import { Inject, Logger, Optional, } from "@nestjs/common";
|
|
16
|
+
import { MODULE_OPTIONS_TOKEN } from "./schedule.module-definition.js";
|
|
17
|
+
import { ScheduleRegistry } from "./schedule.registry.js";
|
|
18
|
+
let ScheduleProcessor = ScheduleProcessor_1 = class ScheduleProcessor extends WorkerHost {
|
|
19
|
+
scheduleRegistry;
|
|
20
|
+
options;
|
|
21
|
+
logger = new Logger(ScheduleProcessor_1.name);
|
|
22
22
|
constructor(scheduleRegistry, options) {
|
|
23
23
|
super();
|
|
24
24
|
this.scheduleRegistry = scheduleRegistry;
|
|
25
25
|
this.options = options;
|
|
26
|
-
/** Logger for worker lifecycle failures. @internal */
|
|
27
|
-
this.logger = new common_1.Logger(ScheduleProcessor_1.name);
|
|
28
26
|
}
|
|
29
27
|
async process(job) {
|
|
30
28
|
await this.scheduleRegistry.get(job.name)?.handler();
|
|
@@ -41,11 +39,11 @@ let ScheduleProcessor = ScheduleProcessor_1 = class ScheduleProcessor extends bu
|
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
(
|
|
47
|
-
__param(1, (
|
|
48
|
-
|
|
49
|
-
__metadata("design:paramtypes", [schedule_registry_1.ScheduleRegistry, Object])
|
|
42
|
+
ScheduleProcessor = ScheduleProcessor_1 = __decorate([
|
|
43
|
+
Processor("schedule", { autorun: false }),
|
|
44
|
+
__param(1, Optional()),
|
|
45
|
+
__param(1, Inject(MODULE_OPTIONS_TOKEN)),
|
|
46
|
+
__metadata("design:paramtypes", [ScheduleRegistry, Object])
|
|
50
47
|
], ScheduleProcessor);
|
|
48
|
+
export { ScheduleProcessor };
|
|
51
49
|
//# sourceMappingURL=schedule.processor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.processor.js","sourceRoot":"","sources":["../src/schedule.processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.processor.js","sourceRoot":"","sources":["../src/schedule.processor.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACL,MAAM,EACN,MAAM,EAEN,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAInD,IAAM,iBAAiB,yBAAvB,MAAM,iBACX,SAAQ,UAAU;IAOC;IAGA;IANF,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAE7D,YACmB,gBAAkC,EAGlC,OAA+B;QAEhD,KAAK,EAAE,CAAC;QALS,qBAAgB,GAAhB,gBAAgB,CAAkB;QAGlC,YAAO,GAAP,OAAO,CAAwB;IAGlD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAQ;QACpB,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAED,sBAAsB;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACrD,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC9C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEvE,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yCAAyC,OAAO,EAAE,EAClD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CACjD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAA;AApCY,iBAAiB;IAD7B,SAAS,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAUrC,WAAA,QAAQ,EAAE,CAAA;IACV,WAAA,MAAM,CAAC,oBAAoB,CAAC,CAAA;qCAFM,gBAAgB;GAR1C,iBAAiB,CAoC7B"}
|
|
@@ -1,50 +1,21 @@
|
|
|
1
1
|
import { OnApplicationBootstrap } from "@nestjs/common";
|
|
2
2
|
import { DiscoveryService, MetadataScanner, Reflector } from "@nestjs/core";
|
|
3
3
|
import { Queue } from "bullmq";
|
|
4
|
-
import { type ScheduleOptions } from "./schedule-options.interface";
|
|
5
|
-
/**
|
|
6
|
-
* Registry that discovers and manages scheduled jobs at application startup.
|
|
7
|
-
*
|
|
8
|
-
* @remarks
|
|
9
|
-
* Scans all controllers and providers for methods decorated with
|
|
10
|
-
* {@link Schedule}, {@link Cron}, or {@link Interval}, then registers
|
|
11
|
-
* them as BullMQ job schedulers. Removes stale schedulers that are no
|
|
12
|
-
* longer defined in the codebase.
|
|
13
|
-
*/
|
|
4
|
+
import { type ScheduleOptions } from "./schedule-options.interface.js";
|
|
14
5
|
export declare class ScheduleRegistry implements OnApplicationBootstrap {
|
|
15
6
|
private readonly queue;
|
|
16
7
|
private readonly reflector;
|
|
17
8
|
private readonly discoveryService;
|
|
18
9
|
private readonly metadataScanner;
|
|
19
|
-
/** Logger instance for the schedule registry. @internal */
|
|
20
10
|
private readonly logger;
|
|
21
|
-
/** Map of schedule names to their handlers and options. @internal */
|
|
22
11
|
private readonly schedules;
|
|
23
|
-
/**
|
|
24
|
-
* Creates a new ScheduleRegistry instance.
|
|
25
|
-
* @param queue - BullMQ queue for managing scheduled jobs
|
|
26
|
-
* @param reflector - NestJS reflector for reading decorator metadata
|
|
27
|
-
* @param discoveryService - NestJS discovery service for scanning providers
|
|
28
|
-
* @param metadataScanner - Scanner for extracting method metadata
|
|
29
|
-
*/
|
|
30
12
|
constructor(queue: Queue, reflector: Reflector, discoveryService: DiscoveryService, metadataScanner: MetadataScanner);
|
|
31
|
-
/**
|
|
32
|
-
* Retrieves a registered schedule entry by name.
|
|
33
|
-
* @param name - The schedule identifier (className.methodName)
|
|
34
|
-
* @returns The schedule handler and options, or undefined
|
|
35
|
-
*/
|
|
36
13
|
get(name: string): {
|
|
37
|
-
/** Handler function bound to the original instance. */
|
|
38
14
|
handler: () => Promise<void>;
|
|
39
|
-
/** Schedule options from the decorator. */
|
|
40
15
|
options: ScheduleOptions;
|
|
41
16
|
} | undefined;
|
|
42
|
-
/** Scans controllers and providers for schedule-decorated methods. @internal */
|
|
43
17
|
private discoverySchedules;
|
|
44
|
-
/** Removes job schedulers that are no longer defined. @internal */
|
|
45
18
|
private cleanUnregisteredSchedules;
|
|
46
|
-
/** Registers all discovered schedules as BullMQ job schedulers. @internal */
|
|
47
19
|
private registerSchedules;
|
|
48
|
-
/** Discovers all scheduled methods and registers them as BullMQ job schedulers. */
|
|
49
20
|
onApplicationBootstrap(): Promise<void>;
|
|
50
21
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -12,49 +11,27 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
12
|
};
|
|
14
13
|
var ScheduleRegistry_1;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const bullmq_2 = require("bullmq");
|
|
21
|
-
const schedule_module_definition_1 = require("./schedule.module-definition");
|
|
22
|
-
/**
|
|
23
|
-
* Registry that discovers and manages scheduled jobs at application startup.
|
|
24
|
-
*
|
|
25
|
-
* @remarks
|
|
26
|
-
* Scans all controllers and providers for methods decorated with
|
|
27
|
-
* {@link Schedule}, {@link Cron}, or {@link Interval}, then registers
|
|
28
|
-
* them as BullMQ job schedulers. Removes stale schedulers that are no
|
|
29
|
-
* longer defined in the codebase.
|
|
30
|
-
*/
|
|
14
|
+
import { InjectQueue } from "@nest-boot/bullmq";
|
|
15
|
+
import { Logger } from "@nestjs/common";
|
|
16
|
+
import { DiscoveryService, MetadataScanner, Reflector } from "@nestjs/core";
|
|
17
|
+
import { Queue } from "bullmq";
|
|
18
|
+
import { SCHEDULE_METADATA_KEY, SCHEDULE_QUEUE_NAME, } from "./schedule.module-definition.js";
|
|
31
19
|
let ScheduleRegistry = ScheduleRegistry_1 = class ScheduleRegistry {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*/
|
|
20
|
+
queue;
|
|
21
|
+
reflector;
|
|
22
|
+
discoveryService;
|
|
23
|
+
metadataScanner;
|
|
24
|
+
logger = new Logger(ScheduleRegistry_1.name);
|
|
25
|
+
schedules = new Map();
|
|
39
26
|
constructor(queue, reflector, discoveryService, metadataScanner) {
|
|
40
27
|
this.queue = queue;
|
|
41
28
|
this.reflector = reflector;
|
|
42
29
|
this.discoveryService = discoveryService;
|
|
43
30
|
this.metadataScanner = metadataScanner;
|
|
44
|
-
/** Logger instance for the schedule registry. @internal */
|
|
45
|
-
this.logger = new common_1.Logger(ScheduleRegistry_1.name);
|
|
46
|
-
/** Map of schedule names to their handlers and options. @internal */
|
|
47
|
-
this.schedules = new Map();
|
|
48
31
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Retrieves a registered schedule entry by name.
|
|
51
|
-
* @param name - The schedule identifier (className.methodName)
|
|
52
|
-
* @returns The schedule handler and options, or undefined
|
|
53
|
-
*/
|
|
54
32
|
get(name) {
|
|
55
33
|
return this.schedules.get(name);
|
|
56
34
|
}
|
|
57
|
-
/** Scans controllers and providers for schedule-decorated methods. @internal */
|
|
58
35
|
discoverySchedules() {
|
|
59
36
|
[
|
|
60
37
|
...this.discoveryService.getControllers(),
|
|
@@ -67,7 +44,7 @@ let ScheduleRegistry = ScheduleRegistry_1 = class ScheduleRegistry {
|
|
|
67
44
|
.forEach((key) => {
|
|
68
45
|
const instanceClassName = instance.constructor.name;
|
|
69
46
|
if (typeof instanceClassName === "string") {
|
|
70
|
-
const options = this.reflector.get(
|
|
47
|
+
const options = this.reflector.get(SCHEDULE_METADATA_KEY, instance[key]);
|
|
71
48
|
if (typeof options !== "undefined") {
|
|
72
49
|
this.schedules.set(`${instanceClassName}.${key}`, {
|
|
73
50
|
handler: instance[key].bind(instance),
|
|
@@ -79,7 +56,6 @@ let ScheduleRegistry = ScheduleRegistry_1 = class ScheduleRegistry {
|
|
|
79
56
|
}
|
|
80
57
|
});
|
|
81
58
|
}
|
|
82
|
-
/** Removes job schedulers that are no longer defined. @internal */
|
|
83
59
|
async cleanUnregisteredSchedules() {
|
|
84
60
|
const jobSchedulers = await this.queue.getJobSchedulers();
|
|
85
61
|
for (const jobScheduler of jobSchedulers) {
|
|
@@ -89,7 +65,6 @@ let ScheduleRegistry = ScheduleRegistry_1 = class ScheduleRegistry {
|
|
|
89
65
|
}
|
|
90
66
|
}
|
|
91
67
|
}
|
|
92
|
-
/** Registers all discovered schedules as BullMQ job schedulers. @internal */
|
|
93
68
|
async registerSchedules() {
|
|
94
69
|
for (const [name, { options: { type, value, timezone, ...jobOptions }, },] of this.schedules.entries()) {
|
|
95
70
|
await this.queue.upsertJobScheduler(name, {
|
|
@@ -108,19 +83,18 @@ let ScheduleRegistry = ScheduleRegistry_1 = class ScheduleRegistry {
|
|
|
108
83
|
this.logger.log(`Registered {${name}, ${type}, ${String(value)}}`);
|
|
109
84
|
}
|
|
110
85
|
}
|
|
111
|
-
/** Discovers all scheduled methods and registers them as BullMQ job schedulers. */
|
|
112
86
|
async onApplicationBootstrap() {
|
|
113
87
|
this.discoverySchedules();
|
|
114
88
|
await this.cleanUnregisteredSchedules();
|
|
115
89
|
await this.registerSchedules();
|
|
116
90
|
}
|
|
117
91
|
};
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
core_1.MetadataScanner])
|
|
92
|
+
ScheduleRegistry = ScheduleRegistry_1 = __decorate([
|
|
93
|
+
__param(0, InjectQueue(SCHEDULE_QUEUE_NAME)),
|
|
94
|
+
__metadata("design:paramtypes", [Queue,
|
|
95
|
+
Reflector,
|
|
96
|
+
DiscoveryService,
|
|
97
|
+
MetadataScanner])
|
|
125
98
|
], ScheduleRegistry);
|
|
99
|
+
export { ScheduleRegistry };
|
|
126
100
|
//# sourceMappingURL=schedule.registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.registry.js","sourceRoot":"","sources":["../src/schedule.registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.registry.js","sourceRoot":"","sources":["../src/schedule.registry.ts"],"names":[],"mappings":"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"}
|