nodejs-task-scheduler 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 (50) hide show
  1. package/.claude/settings.local.json +20 -0
  2. package/.github/workflows/ci.yml +266 -0
  3. package/.github/workflows/release.yml +117 -0
  4. package/CHANGELOG.md +43 -0
  5. package/README.md +653 -0
  6. package/dist/__tests__/setup.d.ts +2 -0
  7. package/dist/__tests__/setup.d.ts.map +1 -0
  8. package/dist/__tests__/setup.js +24 -0
  9. package/dist/__tests__/setup.js.map +1 -0
  10. package/dist/decorators/index.d.ts +80 -0
  11. package/dist/decorators/index.d.ts.map +1 -0
  12. package/dist/decorators/index.js +171 -0
  13. package/dist/decorators/index.js.map +1 -0
  14. package/dist/decorators/metadata.d.ts +59 -0
  15. package/dist/decorators/metadata.d.ts.map +1 -0
  16. package/dist/decorators/metadata.js +68 -0
  17. package/dist/decorators/metadata.js.map +1 -0
  18. package/dist/decorators/registry.d.ts +42 -0
  19. package/dist/decorators/registry.d.ts.map +1 -0
  20. package/dist/decorators/registry.js +182 -0
  21. package/dist/decorators/registry.js.map +1 -0
  22. package/dist/index.d.ts +74 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +198 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/queue/index.d.ts +19 -0
  27. package/dist/queue/index.d.ts.map +1 -0
  28. package/dist/queue/index.js +89 -0
  29. package/dist/queue/index.js.map +1 -0
  30. package/dist/scheduler/index.d.ts +13 -0
  31. package/dist/scheduler/index.d.ts.map +1 -0
  32. package/dist/scheduler/index.js +102 -0
  33. package/dist/scheduler/index.js.map +1 -0
  34. package/dist/types/index.d.ts +63 -0
  35. package/dist/types/index.d.ts.map +1 -0
  36. package/dist/types/index.js +12 -0
  37. package/dist/types/index.js.map +1 -0
  38. package/dist/utils/load-balancer.d.ts +36 -0
  39. package/dist/utils/load-balancer.d.ts.map +1 -0
  40. package/dist/utils/load-balancer.js +158 -0
  41. package/dist/utils/load-balancer.js.map +1 -0
  42. package/dist/utils/rabbitmq.d.ts +18 -0
  43. package/dist/utils/rabbitmq.d.ts.map +1 -0
  44. package/dist/utils/rabbitmq.js +114 -0
  45. package/dist/utils/rabbitmq.js.map +1 -0
  46. package/dist/worker/index.d.ts +20 -0
  47. package/dist/worker/index.d.ts.map +1 -0
  48. package/dist/worker/index.js +138 -0
  49. package/dist/worker/index.js.map +1 -0
  50. package/package.json +63 -0
@@ -0,0 +1,80 @@
1
+ import 'reflect-metadata';
2
+ export interface JobOptions {
3
+ name?: string;
4
+ queue?: string;
5
+ priority?: number;
6
+ attempts?: number;
7
+ backoff?: {
8
+ type: 'fixed' | 'exponential';
9
+ delay: number;
10
+ };
11
+ }
12
+ export interface CronJobOptions {
13
+ schedule: string;
14
+ name?: string;
15
+ timezone?: string;
16
+ queue?: string;
17
+ priority?: number;
18
+ attempts?: number;
19
+ backoff?: {
20
+ type: 'fixed' | 'exponential';
21
+ delay: number;
22
+ };
23
+ }
24
+ export interface QueueOptions {
25
+ name: string;
26
+ durable?: boolean;
27
+ exclusive?: boolean;
28
+ autoDelete?: boolean;
29
+ arguments?: any;
30
+ }
31
+ export interface WorkerOptions {
32
+ name?: string;
33
+ concurrency?: number;
34
+ queues?: string[];
35
+ }
36
+ /**
37
+ * Decorator to mark a method as a job handler
38
+ * @param options Job configuration options
39
+ */
40
+ export declare function Job(options?: JobOptions): MethodDecorator;
41
+ /**
42
+ * Decorator to mark a method as a cron job handler
43
+ * @param options Cron job configuration options
44
+ */
45
+ export declare function CronJob(options: CronJobOptions): MethodDecorator;
46
+ /**
47
+ * Decorator to define queue configuration for a class
48
+ * @param options Queue configuration options
49
+ */
50
+ export declare function Queue(options: QueueOptions): ClassDecorator;
51
+ /**
52
+ * Decorator to define worker configuration for a class
53
+ * @param options Worker configuration options
54
+ */
55
+ export declare function Worker(options?: WorkerOptions): ClassDecorator;
56
+ /**
57
+ * Decorator to mark a method as a singleton job (concurrency: 1)
58
+ * @param options Job configuration options
59
+ */
60
+ export declare function SingletonJob(options?: JobOptions): MethodDecorator;
61
+ /**
62
+ * Decorator to mark a method as a high priority job
63
+ * @param options Job configuration options
64
+ */
65
+ export declare function HighPriorityJob(options?: JobOptions): MethodDecorator;
66
+ /**
67
+ * Decorator to mark a method as a low priority job
68
+ * @param options Job configuration options
69
+ */
70
+ export declare function LowPriorityJob(options?: JobOptions): MethodDecorator;
71
+ /**
72
+ * Decorator to add retry configuration to a job
73
+ * @param attempts Number of retry attempts
74
+ * @param backoffType Type of backoff strategy
75
+ * @param delay Initial delay in milliseconds
76
+ */
77
+ export declare function Retry(attempts?: number, backoffType?: 'fixed' | 'exponential', delay?: number): MethodDecorator;
78
+ export { MetadataStore } from './metadata';
79
+ export * from './metadata';
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAS1B,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,eAAe,CAwB7D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CA0BhE;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CAY3D;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,cAAc,CAUlE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,UAAe,GAAG,eAAe,CAKtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,UAAe,GAAG,eAAe,CAKzE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,UAAe,GAAG,eAAe,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CACnB,QAAQ,GAAE,MAAU,EACpB,WAAW,GAAE,OAAO,GAAG,aAA6B,EACpD,KAAK,GAAE,MAAa,GACnB,eAAe,CAoBjB;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
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
+ exports.MetadataStore = void 0;
18
+ exports.Job = Job;
19
+ exports.CronJob = CronJob;
20
+ exports.Queue = Queue;
21
+ exports.Worker = Worker;
22
+ exports.SingletonJob = SingletonJob;
23
+ exports.HighPriorityJob = HighPriorityJob;
24
+ exports.LowPriorityJob = LowPriorityJob;
25
+ exports.Retry = Retry;
26
+ require("reflect-metadata");
27
+ const metadata_1 = require("./metadata");
28
+ /**
29
+ * Decorator to mark a method as a job handler
30
+ * @param options Job configuration options
31
+ */
32
+ function Job(options = {}) {
33
+ return function (target, propertyKey, descriptor) {
34
+ if (typeof propertyKey !== 'string') {
35
+ throw new Error('Job decorator can only be applied to string property keys');
36
+ }
37
+ const metadata = {
38
+ name: options.name || propertyKey,
39
+ queue: options.queue,
40
+ priority: options.priority,
41
+ attempts: options.attempts,
42
+ backoff: options.backoff
43
+ };
44
+ metadata_1.MetadataStore.setJobMetadata(target, propertyKey, metadata);
45
+ // Ensure the original method is preserved
46
+ if (descriptor && descriptor.value) {
47
+ const originalMethod = descriptor.value;
48
+ descriptor.value = async function (...args) {
49
+ return await originalMethod.apply(this, args);
50
+ };
51
+ }
52
+ };
53
+ }
54
+ /**
55
+ * Decorator to mark a method as a cron job handler
56
+ * @param options Cron job configuration options
57
+ */
58
+ function CronJob(options) {
59
+ return function (target, propertyKey, descriptor) {
60
+ if (typeof propertyKey !== 'string') {
61
+ throw new Error('CronJob decorator can only be applied to string property keys');
62
+ }
63
+ const metadata = {
64
+ name: options.name || propertyKey,
65
+ schedule: options.schedule,
66
+ timezone: options.timezone,
67
+ queue: options.queue,
68
+ priority: options.priority,
69
+ attempts: options.attempts,
70
+ backoff: options.backoff
71
+ };
72
+ metadata_1.MetadataStore.setCronJobMetadata(target, propertyKey, metadata);
73
+ // Ensure the original method is preserved
74
+ if (descriptor && descriptor.value) {
75
+ const originalMethod = descriptor.value;
76
+ descriptor.value = async function (...args) {
77
+ return await originalMethod.apply(this, args);
78
+ };
79
+ }
80
+ };
81
+ }
82
+ /**
83
+ * Decorator to define queue configuration for a class
84
+ * @param options Queue configuration options
85
+ */
86
+ function Queue(options) {
87
+ return function (target) {
88
+ const metadata = {
89
+ name: options.name,
90
+ durable: options.durable,
91
+ exclusive: options.exclusive,
92
+ autoDelete: options.autoDelete,
93
+ arguments: options.arguments
94
+ };
95
+ metadata_1.MetadataStore.setQueueMetadata(target, metadata);
96
+ };
97
+ }
98
+ /**
99
+ * Decorator to define worker configuration for a class
100
+ * @param options Worker configuration options
101
+ */
102
+ function Worker(options = {}) {
103
+ return function (target) {
104
+ const metadata = {
105
+ name: options.name || target.name,
106
+ concurrency: options.concurrency || 1,
107
+ queues: options.queues || []
108
+ };
109
+ metadata_1.MetadataStore.setWorkerMetadata(target, metadata);
110
+ };
111
+ }
112
+ /**
113
+ * Decorator to mark a method as a singleton job (concurrency: 1)
114
+ * @param options Job configuration options
115
+ */
116
+ function SingletonJob(options = {}) {
117
+ return Job({
118
+ ...options,
119
+ queue: options.queue || 'singleton-queue'
120
+ });
121
+ }
122
+ /**
123
+ * Decorator to mark a method as a high priority job
124
+ * @param options Job configuration options
125
+ */
126
+ function HighPriorityJob(options = {}) {
127
+ return Job({
128
+ ...options,
129
+ priority: options.priority || 9
130
+ });
131
+ }
132
+ /**
133
+ * Decorator to mark a method as a low priority job
134
+ * @param options Job configuration options
135
+ */
136
+ function LowPriorityJob(options = {}) {
137
+ return Job({
138
+ ...options,
139
+ priority: options.priority || 1
140
+ });
141
+ }
142
+ /**
143
+ * Decorator to add retry configuration to a job
144
+ * @param attempts Number of retry attempts
145
+ * @param backoffType Type of backoff strategy
146
+ * @param delay Initial delay in milliseconds
147
+ */
148
+ function Retry(attempts = 3, backoffType = 'exponential', delay = 1000) {
149
+ return function (target, propertyKey, descriptor) {
150
+ if (typeof propertyKey !== 'string') {
151
+ throw new Error('Retry decorator can only be applied to string property keys');
152
+ }
153
+ const existingMetadata = metadata_1.MetadataStore.getJobMetadata(target, propertyKey) ||
154
+ metadata_1.MetadataStore.getCronJobMetadata(target, propertyKey);
155
+ if (existingMetadata) {
156
+ existingMetadata.attempts = attempts;
157
+ existingMetadata.backoff = { type: backoffType, delay };
158
+ if ('schedule' in existingMetadata) {
159
+ metadata_1.MetadataStore.setCronJobMetadata(target, propertyKey, existingMetadata);
160
+ }
161
+ else {
162
+ metadata_1.MetadataStore.setJobMetadata(target, propertyKey, existingMetadata);
163
+ }
164
+ }
165
+ };
166
+ }
167
+ // Re-export metadata utilities
168
+ var metadata_2 = require("./metadata");
169
+ Object.defineProperty(exports, "MetadataStore", { enumerable: true, get: function () { return metadata_2.MetadataStore; } });
170
+ __exportStar(require("./metadata"), exports);
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import 'reflect-metadata';
2
+ export declare const JOB_METADATA_KEY: unique symbol;
3
+ export declare const CRON_JOB_METADATA_KEY: unique symbol;
4
+ export declare const QUEUE_METADATA_KEY: unique symbol;
5
+ export declare const WORKER_METADATA_KEY: unique symbol;
6
+ export interface JobMetadata {
7
+ name: string;
8
+ queue?: string;
9
+ priority?: number;
10
+ attempts?: number;
11
+ backoff?: {
12
+ type: 'fixed' | 'exponential';
13
+ delay: number;
14
+ };
15
+ }
16
+ export interface CronJobMetadata {
17
+ name: string;
18
+ schedule: string;
19
+ timezone?: string;
20
+ queue?: string;
21
+ priority?: number;
22
+ attempts?: number;
23
+ backoff?: {
24
+ type: 'fixed' | 'exponential';
25
+ delay: number;
26
+ };
27
+ }
28
+ export interface QueueMetadata {
29
+ name: string;
30
+ durable?: boolean;
31
+ exclusive?: boolean;
32
+ autoDelete?: boolean;
33
+ arguments?: any;
34
+ }
35
+ export interface WorkerMetadata {
36
+ name: string;
37
+ concurrency?: number;
38
+ queues?: string[];
39
+ }
40
+ export declare class MetadataStore {
41
+ static getJobMetadata(target: any, propertyKey: string): JobMetadata | undefined;
42
+ static setJobMetadata(target: any, propertyKey: string, metadata: JobMetadata): void;
43
+ static getCronJobMetadata(target: any, propertyKey: string): CronJobMetadata | undefined;
44
+ static setCronJobMetadata(target: any, propertyKey: string, metadata: CronJobMetadata): void;
45
+ static getQueueMetadata(target: any): QueueMetadata | undefined;
46
+ static setQueueMetadata(target: any, metadata: QueueMetadata): void;
47
+ static getWorkerMetadata(target: any): WorkerMetadata | undefined;
48
+ static setWorkerMetadata(target: any, metadata: WorkerMetadata): void;
49
+ static getAllJobMethods(target: any): Array<{
50
+ method: string;
51
+ metadata: JobMetadata;
52
+ }>;
53
+ static getAllCronJobMethods(target: any): Array<{
54
+ method: string;
55
+ metadata: CronJobMetadata;
56
+ }>;
57
+ static getAllQueues(target: any): QueueMetadata[];
58
+ }
59
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,qBAAqB,eAAoB,CAAC;AACvD,eAAO,MAAM,kBAAkB,eAAkB,CAAC;AAClD,eAAO,MAAM,mBAAmB,eAAmB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIpF,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIxF,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI5F,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,GAAG,SAAS;IAI/D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAInE,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,cAAc,GAAG,SAAS;IAIjE,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIrE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CAAC;IAkBtF,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,eAAe,CAAA;KAAE,CAAC;IAkB9F,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE;CAIlD"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MetadataStore = exports.WORKER_METADATA_KEY = exports.QUEUE_METADATA_KEY = exports.CRON_JOB_METADATA_KEY = exports.JOB_METADATA_KEY = void 0;
4
+ require("reflect-metadata");
5
+ exports.JOB_METADATA_KEY = Symbol('job');
6
+ exports.CRON_JOB_METADATA_KEY = Symbol('cronJob');
7
+ exports.QUEUE_METADATA_KEY = Symbol('queue');
8
+ exports.WORKER_METADATA_KEY = Symbol('worker');
9
+ class MetadataStore {
10
+ static getJobMetadata(target, propertyKey) {
11
+ return Reflect.getMetadata(exports.JOB_METADATA_KEY, target, propertyKey);
12
+ }
13
+ static setJobMetadata(target, propertyKey, metadata) {
14
+ Reflect.defineMetadata(exports.JOB_METADATA_KEY, metadata, target, propertyKey);
15
+ }
16
+ static getCronJobMetadata(target, propertyKey) {
17
+ return Reflect.getMetadata(exports.CRON_JOB_METADATA_KEY, target, propertyKey);
18
+ }
19
+ static setCronJobMetadata(target, propertyKey, metadata) {
20
+ Reflect.defineMetadata(exports.CRON_JOB_METADATA_KEY, metadata, target, propertyKey);
21
+ }
22
+ static getQueueMetadata(target) {
23
+ return Reflect.getMetadata(exports.QUEUE_METADATA_KEY, target);
24
+ }
25
+ static setQueueMetadata(target, metadata) {
26
+ Reflect.defineMetadata(exports.QUEUE_METADATA_KEY, metadata, target);
27
+ }
28
+ static getWorkerMetadata(target) {
29
+ return Reflect.getMetadata(exports.WORKER_METADATA_KEY, target);
30
+ }
31
+ static setWorkerMetadata(target, metadata) {
32
+ Reflect.defineMetadata(exports.WORKER_METADATA_KEY, metadata, target);
33
+ }
34
+ static getAllJobMethods(target) {
35
+ const prototype = target.prototype || target;
36
+ const methods = [];
37
+ const propertyNames = Object.getOwnPropertyNames(prototype);
38
+ for (const propertyName of propertyNames) {
39
+ if (propertyName === 'constructor')
40
+ continue;
41
+ const jobMetadata = this.getJobMetadata(prototype, propertyName);
42
+ if (jobMetadata) {
43
+ methods.push({ method: propertyName, metadata: jobMetadata });
44
+ }
45
+ }
46
+ return methods;
47
+ }
48
+ static getAllCronJobMethods(target) {
49
+ const prototype = target.prototype || target;
50
+ const methods = [];
51
+ const propertyNames = Object.getOwnPropertyNames(prototype);
52
+ for (const propertyName of propertyNames) {
53
+ if (propertyName === 'constructor')
54
+ continue;
55
+ const cronJobMetadata = this.getCronJobMetadata(prototype, propertyName);
56
+ if (cronJobMetadata) {
57
+ methods.push({ method: propertyName, metadata: cronJobMetadata });
58
+ }
59
+ }
60
+ return methods;
61
+ }
62
+ static getAllQueues(target) {
63
+ const queueMetadata = this.getQueueMetadata(target);
64
+ return queueMetadata ? [queueMetadata] : [];
65
+ }
66
+ }
67
+ exports.MetadataStore = MetadataStore;
68
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { TaskScheduler } from '../index';
2
+ export declare class DecoratorRegistry {
3
+ private static instance;
4
+ private registeredClasses;
5
+ private constructor();
6
+ static getInstance(): DecoratorRegistry;
7
+ /**
8
+ * Register a class instance with the scheduler
9
+ * This will automatically set up workers and schedule cron jobs based on decorators
10
+ */
11
+ registerClass(scheduler: TaskScheduler, instance: any): Promise<void>;
12
+ /**
13
+ * Execute a job method directly
14
+ */
15
+ executeJob(scheduler: TaskScheduler, className: string, methodName: string, data?: any): Promise<string>;
16
+ /**
17
+ * Get all registered classes
18
+ */
19
+ getRegisteredClasses(): Array<{
20
+ name: string;
21
+ instance: any;
22
+ }>;
23
+ /**
24
+ * Get job methods for a registered class
25
+ */
26
+ getJobMethods(className: string): Array<{
27
+ method: string;
28
+ metadata: any;
29
+ }>;
30
+ /**
31
+ * Get cron job methods for a registered class
32
+ */
33
+ getCronJobMethods(className: string): Array<{
34
+ method: string;
35
+ metadata: any;
36
+ }>;
37
+ /**
38
+ * Clear all registrations (useful for testing)
39
+ */
40
+ clear(): void;
41
+ }
42
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/decorators/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAC3C,OAAO,CAAC,iBAAiB,CAA4B;IAErD,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA6G3E;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,GAAQ,GACb,OAAO,CAAC,MAAM,CAAC;IAoClB;;OAEG;IACH,oBAAoB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IAO9D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IAS1E;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IAS9E;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DecoratorRegistry = void 0;
4
+ const metadata_1 = require("./metadata");
5
+ class DecoratorRegistry {
6
+ constructor() {
7
+ this.registeredClasses = new Map();
8
+ }
9
+ static getInstance() {
10
+ if (!DecoratorRegistry.instance) {
11
+ DecoratorRegistry.instance = new DecoratorRegistry();
12
+ }
13
+ return DecoratorRegistry.instance;
14
+ }
15
+ /**
16
+ * Register a class instance with the scheduler
17
+ * This will automatically set up workers and schedule cron jobs based on decorators
18
+ */
19
+ async registerClass(scheduler, instance) {
20
+ const constructor = instance.constructor;
21
+ // Check if already registered
22
+ if (this.registeredClasses.has(constructor)) {
23
+ console.warn(`Class ${constructor.name} is already registered`);
24
+ return;
25
+ }
26
+ // Get worker metadata
27
+ const workerMetadata = metadata_1.MetadataStore.getWorkerMetadata(constructor);
28
+ // Get all job methods
29
+ const jobMethods = metadata_1.MetadataStore.getAllJobMethods(constructor);
30
+ const cronJobMethods = metadata_1.MetadataStore.getAllCronJobMethods(constructor);
31
+ // Collect all queues needed
32
+ const queues = new Set();
33
+ // Add queues from worker metadata
34
+ if (workerMetadata?.queues) {
35
+ workerMetadata.queues.forEach(queue => queues.add(queue));
36
+ }
37
+ // Add queues from job metadata
38
+ jobMethods.forEach(({ metadata }) => {
39
+ if (metadata.queue) {
40
+ queues.add(metadata.queue);
41
+ }
42
+ });
43
+ cronJobMethods.forEach(({ metadata }) => {
44
+ if (metadata.queue) {
45
+ queues.add(metadata.queue);
46
+ }
47
+ });
48
+ // If no queues specified, use class name as default queue
49
+ if (queues.size === 0) {
50
+ queues.add(`${constructor.name.toLowerCase()}-queue`);
51
+ }
52
+ // Create handlers map
53
+ const handlers = {};
54
+ // Add job handlers
55
+ jobMethods.forEach(({ method, metadata }) => {
56
+ handlers[metadata.name] = async (data) => {
57
+ try {
58
+ const result = await instance[method](data);
59
+ return { success: true, data: result };
60
+ }
61
+ catch (error) {
62
+ return { success: false, error: error.message };
63
+ }
64
+ };
65
+ });
66
+ // Add cron job handlers
67
+ cronJobMethods.forEach(({ method, metadata }) => {
68
+ handlers[metadata.name] = async (data) => {
69
+ try {
70
+ const result = await instance[method](data);
71
+ return { success: true, data: result };
72
+ }
73
+ catch (error) {
74
+ return { success: false, error: error.message };
75
+ }
76
+ };
77
+ });
78
+ // Create worker if we have handlers
79
+ if (Object.keys(handlers).length > 0) {
80
+ const workerName = workerMetadata?.name || `${constructor.name.toLowerCase()}-worker`;
81
+ const concurrency = workerMetadata?.concurrency || 1;
82
+ await scheduler.createWorker({
83
+ name: workerName,
84
+ concurrency,
85
+ queues: Array.from(queues),
86
+ handlers
87
+ });
88
+ console.log(`✅ Registered worker ${workerName} with ${Object.keys(handlers).length} handlers`);
89
+ }
90
+ // Schedule cron jobs
91
+ for (const { method, metadata } of cronJobMethods) {
92
+ const jobId = `${constructor.name}-${method}`;
93
+ await scheduler.scheduleCronJob({
94
+ id: jobId,
95
+ name: metadata.name,
96
+ handler: metadata.name,
97
+ schedule: metadata.schedule,
98
+ timezone: metadata.timezone,
99
+ data: {}, // Cron jobs typically don't need initial data
100
+ priority: metadata.priority,
101
+ attempts: metadata.attempts,
102
+ backoff: metadata.backoff
103
+ });
104
+ console.log(`⏰ Scheduled cron job ${jobId}: ${metadata.schedule}`);
105
+ }
106
+ // Mark as registered
107
+ this.registeredClasses.set(constructor, instance);
108
+ console.log(`🎯 Successfully registered class ${constructor.name}`);
109
+ }
110
+ /**
111
+ * Execute a job method directly
112
+ */
113
+ async executeJob(scheduler, className, methodName, data = {}) {
114
+ // Find the registered class
115
+ let targetInstance = null;
116
+ let targetMetadata = null;
117
+ for (const [constructor, instance] of this.registeredClasses.entries()) {
118
+ if (constructor.name === className) {
119
+ targetInstance = instance;
120
+ // Find the method metadata
121
+ const jobMethods = metadata_1.MetadataStore.getAllJobMethods(constructor);
122
+ const method = jobMethods.find(m => m.method === methodName);
123
+ if (method) {
124
+ targetMetadata = method.metadata;
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ if (!targetInstance || !targetMetadata) {
130
+ throw new Error(`Job ${className}.${methodName} not found or not registered`);
131
+ }
132
+ // Schedule the job
133
+ return await scheduler.scheduleJob({
134
+ id: `${className}-${methodName}-${Date.now()}`,
135
+ name: targetMetadata.name,
136
+ handler: targetMetadata.name,
137
+ data,
138
+ priority: targetMetadata.priority,
139
+ attempts: targetMetadata.attempts,
140
+ backoff: targetMetadata.backoff
141
+ });
142
+ }
143
+ /**
144
+ * Get all registered classes
145
+ */
146
+ getRegisteredClasses() {
147
+ return Array.from(this.registeredClasses.entries()).map(([constructor, instance]) => ({
148
+ name: constructor.name,
149
+ instance
150
+ }));
151
+ }
152
+ /**
153
+ * Get job methods for a registered class
154
+ */
155
+ getJobMethods(className) {
156
+ for (const [constructor] of this.registeredClasses.entries()) {
157
+ if (constructor.name === className) {
158
+ return metadata_1.MetadataStore.getAllJobMethods(constructor);
159
+ }
160
+ }
161
+ return [];
162
+ }
163
+ /**
164
+ * Get cron job methods for a registered class
165
+ */
166
+ getCronJobMethods(className) {
167
+ for (const [constructor] of this.registeredClasses.entries()) {
168
+ if (constructor.name === className) {
169
+ return metadata_1.MetadataStore.getAllCronJobMethods(constructor);
170
+ }
171
+ }
172
+ return [];
173
+ }
174
+ /**
175
+ * Clear all registrations (useful for testing)
176
+ */
177
+ clear() {
178
+ this.registeredClasses.clear();
179
+ }
180
+ }
181
+ exports.DecoratorRegistry = DecoratorRegistry;
182
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/decorators/registry.ts"],"names":[],"mappings":"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"}