@carno.js/schedule 0.2.3
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/LICENSE +674 -0
- package/dist/decorator/index.d.ts +3 -0
- package/dist/decorator/index.js +19 -0
- package/dist/decorator/interval.decorator.d.ts +8 -0
- package/dist/decorator/interval.decorator.js +23 -0
- package/dist/decorator/schedule.decorator.d.ts +8 -0
- package/dist/decorator/schedule.decorator.js +24 -0
- package/dist/decorator/timeout.decorator.d.ts +8 -0
- package/dist/decorator/timeout.decorator.js +23 -0
- package/dist/entry.d.ts +2 -0
- package/dist/entry.js +9 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +19 -0
- package/dist/scheduler-orchestration.service.d.ts +26 -0
- package/dist/scheduler-orchestration.service.js +140 -0
- package/dist/scheduler.registry.d.ts +20 -0
- package/dist/scheduler.registry.js +112 -0
- package/dist/utils/constants.d.ts +5 -0
- package/dist/utils/constants.js +8 -0
- package/dist/utils/cron-expression.enum.d.ts +85 -0
- package/dist/utils/cron-expression.enum.js +89 -0
- package/dist/utils/cron-options.d.ts +32 -0
- package/dist/utils/cron-options.js +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/scheduler-type.enum.d.ts +5 -0
- package/dist/utils/scheduler-type.enum.js +9 -0
- package/package.json +36 -0
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
__exportStar(require("./schedule.decorator"), exports);
|
|
18
|
+
__exportStar(require("./interval.decorator"), exports);
|
|
19
|
+
__exportStar(require("./timeout.decorator"), exports);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Interval = Interval;
|
|
4
|
+
const core_1 = require("@carno.js/core");
|
|
5
|
+
const constants_1 = require("../utils/constants");
|
|
6
|
+
const scheduler_type_enum_1 = require("../utils/scheduler-type.enum");
|
|
7
|
+
/**
|
|
8
|
+
* Schedules an interval (`setInterval`).
|
|
9
|
+
*/
|
|
10
|
+
function Interval(nameOrTimeout, timeout) {
|
|
11
|
+
const [name, intervalTimeout] = (0, core_1.isString)(nameOrTimeout)
|
|
12
|
+
? [nameOrTimeout, timeout]
|
|
13
|
+
: [undefined, nameOrTimeout];
|
|
14
|
+
return (target, propertyKey) => {
|
|
15
|
+
const anotherMetadata = core_1.Metadata.get(constants_1.SCHEDULE_INTERVAL_OPTIONS, Reflect) || [];
|
|
16
|
+
core_1.Metadata.set(constants_1.SCHEDULE_INTERVAL_OPTIONS, [
|
|
17
|
+
...anotherMetadata,
|
|
18
|
+
{
|
|
19
|
+
name: name, methodName: propertyKey, target: target, type: scheduler_type_enum_1.SchedulerType.INTERVAL, timeout: intervalTimeout,
|
|
20
|
+
},
|
|
21
|
+
], Reflect);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CronJobParams } from 'cron';
|
|
2
|
+
import { CronOptions } from '../utils/cron-options';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a scheduled job.
|
|
5
|
+
* @param cronTime The time to fire off your job. This can be in the form of cron syntax, a JS ```Date``` object or a Luxon ```DateTime``` object.
|
|
6
|
+
* @param options Job execution options.
|
|
7
|
+
*/
|
|
8
|
+
export declare function Schedule(cronTime: CronJobParams['cronTime'], options?: CronOptions): MethodDecorator;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Schedule = Schedule;
|
|
4
|
+
const core_1 = require("@carno.js/core");
|
|
5
|
+
const constants_1 = require("../utils/constants");
|
|
6
|
+
const scheduler_type_enum_1 = require("../utils/scheduler-type.enum");
|
|
7
|
+
/**
|
|
8
|
+
* Creates a scheduled job.
|
|
9
|
+
* @param cronTime The time to fire off your job. This can be in the form of cron syntax, a JS ```Date``` object or a Luxon ```DateTime``` object.
|
|
10
|
+
* @param options Job execution options.
|
|
11
|
+
*/
|
|
12
|
+
function Schedule(cronTime, options = {}) {
|
|
13
|
+
const name = options?.name;
|
|
14
|
+
return (target, propertyKey) => {
|
|
15
|
+
const anotherMetadata = core_1.Metadata.get(constants_1.SCHEDULE_CRON_OPTIONS, Reflect) || [];
|
|
16
|
+
core_1.Metadata.set(constants_1.SCHEDULE_CRON_OPTIONS, [
|
|
17
|
+
...anotherMetadata,
|
|
18
|
+
{
|
|
19
|
+
options: { ...options, cronTime },
|
|
20
|
+
...{ name: name, methodName: propertyKey, target: target, type: scheduler_type_enum_1.SchedulerType.CRON },
|
|
21
|
+
},
|
|
22
|
+
], Reflect);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Timeout = Timeout;
|
|
4
|
+
const constants_1 = require("../utils/constants");
|
|
5
|
+
const scheduler_type_enum_1 = require("../utils/scheduler-type.enum");
|
|
6
|
+
const core_1 = require("@carno.js/core");
|
|
7
|
+
/**
|
|
8
|
+
* Schedules an timeout (`setTimeout`).
|
|
9
|
+
*/
|
|
10
|
+
function Timeout(nameOrTimeout, timeout) {
|
|
11
|
+
const [name, timeoutValue] = (0, core_1.isString)(nameOrTimeout)
|
|
12
|
+
? [nameOrTimeout, timeout]
|
|
13
|
+
: [undefined, nameOrTimeout];
|
|
14
|
+
return function (target, propertyKey) {
|
|
15
|
+
const anotherMetadata = core_1.Metadata.get(constants_1.SCHEDULE_TIMEOUT_OPTIONS, Reflect) || [];
|
|
16
|
+
core_1.Metadata.set(constants_1.SCHEDULE_TIMEOUT_OPTIONS, [
|
|
17
|
+
...anotherMetadata,
|
|
18
|
+
{
|
|
19
|
+
name: name, methodName: propertyKey, target: target, type: scheduler_type_enum_1.SchedulerType.INTERVAL, timeout: timeoutValue,
|
|
20
|
+
},
|
|
21
|
+
], Reflect);
|
|
22
|
+
};
|
|
23
|
+
}
|
package/dist/entry.d.ts
ADDED
package/dist/entry.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CarnoScheduler = void 0;
|
|
4
|
+
const core_1 = require("@carno.js/core");
|
|
5
|
+
const scheduler_orchestration_service_1 = require("./scheduler-orchestration.service");
|
|
6
|
+
const scheduler_registry_1 = require("./scheduler.registry");
|
|
7
|
+
exports.CarnoScheduler = new core_1.Carno({
|
|
8
|
+
exports: [scheduler_orchestration_service_1.SchedulerOrchestration, scheduler_registry_1.SchedulerRegistry]
|
|
9
|
+
});
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
__exportStar(require("./utils"), exports);
|
|
18
|
+
__exportStar(require("./decorator"), exports);
|
|
19
|
+
__exportStar(require("./entry"), exports);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { InjectorService } from '@carno.js/core';
|
|
2
|
+
import { CronOptions } from './utils/cron-options';
|
|
3
|
+
import { CronJobParams } from 'cron';
|
|
4
|
+
import { SchedulerRegistry } from './scheduler.registry';
|
|
5
|
+
export declare class SchedulerOrchestration {
|
|
6
|
+
private readonly schedulerRegistry;
|
|
7
|
+
private readonly injectorService;
|
|
8
|
+
private readonly cronJobs;
|
|
9
|
+
private readonly timeouts;
|
|
10
|
+
private readonly intervals;
|
|
11
|
+
constructor(schedulerRegistry: SchedulerRegistry, injectorService: InjectorService);
|
|
12
|
+
onApplicationInit(): void;
|
|
13
|
+
onApplicationShutdown(): void;
|
|
14
|
+
mountIntervals(): void;
|
|
15
|
+
mountTimeouts(): void;
|
|
16
|
+
mountCron(): void;
|
|
17
|
+
clearTimeouts(): void;
|
|
18
|
+
clearIntervals(): void;
|
|
19
|
+
closeCronJobs(): void;
|
|
20
|
+
addTimeout(methodRef: Function, timeout: number, name?: string): void;
|
|
21
|
+
addInterval(methodRef: Function, timeout: number, name?: string): void;
|
|
22
|
+
addCron(methodRef: Function, options: CronOptions & Record<'cronTime', CronJobParams['cronTime']>): void;
|
|
23
|
+
private discoverSchedulers;
|
|
24
|
+
private bindMethod;
|
|
25
|
+
private resolveInstance;
|
|
26
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SchedulerOrchestration = void 0;
|
|
13
|
+
const core_1 = require("@carno.js/core");
|
|
14
|
+
const cron_1 = require("cron");
|
|
15
|
+
const scheduler_registry_1 = require("./scheduler.registry");
|
|
16
|
+
const uuid_1 = require("uuid");
|
|
17
|
+
const constants_1 = require("./utils/constants");
|
|
18
|
+
let SchedulerOrchestration = class SchedulerOrchestration {
|
|
19
|
+
constructor(schedulerRegistry, injectorService) {
|
|
20
|
+
this.schedulerRegistry = schedulerRegistry;
|
|
21
|
+
this.injectorService = injectorService;
|
|
22
|
+
this.cronJobs = {};
|
|
23
|
+
this.timeouts = {};
|
|
24
|
+
this.intervals = {};
|
|
25
|
+
}
|
|
26
|
+
onApplicationInit() {
|
|
27
|
+
this.discoverSchedulers();
|
|
28
|
+
this.mountTimeouts();
|
|
29
|
+
this.mountIntervals();
|
|
30
|
+
this.mountCron();
|
|
31
|
+
}
|
|
32
|
+
onApplicationShutdown() {
|
|
33
|
+
this.clearTimeouts();
|
|
34
|
+
this.clearIntervals();
|
|
35
|
+
this.closeCronJobs();
|
|
36
|
+
}
|
|
37
|
+
mountIntervals() {
|
|
38
|
+
const intervalKeys = Object.keys(this.intervals);
|
|
39
|
+
intervalKeys.forEach((key) => {
|
|
40
|
+
const options = this.intervals[key];
|
|
41
|
+
const intervalRef = setInterval(options.target, options.timeout);
|
|
42
|
+
options.ref = intervalRef;
|
|
43
|
+
this.schedulerRegistry.addInterval(key, intervalRef);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
mountTimeouts() {
|
|
47
|
+
const timeoutKeys = Object.keys(this.timeouts);
|
|
48
|
+
timeoutKeys.forEach((key) => {
|
|
49
|
+
const options = this.timeouts[key];
|
|
50
|
+
const timeoutRef = setTimeout(options.target, options.timeout);
|
|
51
|
+
options.ref = timeoutRef;
|
|
52
|
+
this.schedulerRegistry.addTimeout(key, timeoutRef);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
mountCron() {
|
|
56
|
+
const cronKeys = Object.keys(this.cronJobs);
|
|
57
|
+
cronKeys.forEach((key) => {
|
|
58
|
+
const { options, target } = this.cronJobs[key];
|
|
59
|
+
const cronJob = cron_1.CronJob.from({
|
|
60
|
+
...options,
|
|
61
|
+
onTick: target,
|
|
62
|
+
start: !(options.disabled ?? false)
|
|
63
|
+
});
|
|
64
|
+
this.cronJobs[key].ref = cronJob;
|
|
65
|
+
this.schedulerRegistry.addCronJob(key, cronJob);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
clearTimeouts() {
|
|
69
|
+
this.schedulerRegistry.getTimeouts().forEach((key) => this.schedulerRegistry.deleteTimeout(key));
|
|
70
|
+
}
|
|
71
|
+
clearIntervals() {
|
|
72
|
+
this.schedulerRegistry.getIntervals().forEach((key) => this.schedulerRegistry.deleteInterval(key));
|
|
73
|
+
}
|
|
74
|
+
closeCronJobs() {
|
|
75
|
+
Array.from(this.schedulerRegistry.getCronJobs().keys()).forEach((key) => this.schedulerRegistry.deleteCronJob(key));
|
|
76
|
+
}
|
|
77
|
+
addTimeout(methodRef, timeout, name = (0, uuid_1.v4)()) {
|
|
78
|
+
this.timeouts[name] = {
|
|
79
|
+
target: methodRef,
|
|
80
|
+
timeout,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
addInterval(methodRef, timeout, name = (0, uuid_1.v4)()) {
|
|
84
|
+
this.intervals[name] = {
|
|
85
|
+
target: methodRef,
|
|
86
|
+
timeout,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
addCron(methodRef, options) {
|
|
90
|
+
const name = options.name || (0, uuid_1.v4)();
|
|
91
|
+
this.cronJobs[name] = {
|
|
92
|
+
target: methodRef,
|
|
93
|
+
options,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
discoverSchedulers() {
|
|
97
|
+
const schedulers = core_1.Metadata.get(constants_1.SCHEDULE_CRON_OPTIONS, Reflect) || [];
|
|
98
|
+
const interval = core_1.Metadata.get(constants_1.SCHEDULE_INTERVAL_OPTIONS, Reflect) || [];
|
|
99
|
+
const timeout = core_1.Metadata.get(constants_1.SCHEDULE_TIMEOUT_OPTIONS, Reflect) || [];
|
|
100
|
+
schedulers.forEach((scheduler) => {
|
|
101
|
+
this.addCron(this.bindMethod(scheduler), scheduler.options);
|
|
102
|
+
});
|
|
103
|
+
interval.forEach((scheduler) => {
|
|
104
|
+
this.addInterval(this.bindMethod(scheduler), scheduler.timeout, scheduler.name);
|
|
105
|
+
});
|
|
106
|
+
timeout.forEach((scheduler) => {
|
|
107
|
+
this.addTimeout(this.bindMethod(scheduler), scheduler.timeout, scheduler.name);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
bindMethod(scheduler) {
|
|
111
|
+
const instance = this.resolveInstance(scheduler.target);
|
|
112
|
+
return instance[scheduler.methodName].bind(instance);
|
|
113
|
+
}
|
|
114
|
+
resolveInstance(target) {
|
|
115
|
+
const token = target.constructor;
|
|
116
|
+
const provider = core_1.GlobalProvider.get(token);
|
|
117
|
+
if (provider?.instance) {
|
|
118
|
+
return provider.instance;
|
|
119
|
+
}
|
|
120
|
+
return this.injectorService.invoke(token);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
exports.SchedulerOrchestration = SchedulerOrchestration;
|
|
124
|
+
__decorate([
|
|
125
|
+
(0, core_1.OnApplicationInit)(),
|
|
126
|
+
__metadata("design:type", Function),
|
|
127
|
+
__metadata("design:paramtypes", []),
|
|
128
|
+
__metadata("design:returntype", void 0)
|
|
129
|
+
], SchedulerOrchestration.prototype, "onApplicationInit", null);
|
|
130
|
+
__decorate([
|
|
131
|
+
(0, core_1.OnApplicationShutdown)(),
|
|
132
|
+
__metadata("design:type", Function),
|
|
133
|
+
__metadata("design:paramtypes", []),
|
|
134
|
+
__metadata("design:returntype", void 0)
|
|
135
|
+
], SchedulerOrchestration.prototype, "onApplicationShutdown", null);
|
|
136
|
+
exports.SchedulerOrchestration = SchedulerOrchestration = __decorate([
|
|
137
|
+
(0, core_1.Service)(),
|
|
138
|
+
__metadata("design:paramtypes", [scheduler_registry_1.SchedulerRegistry,
|
|
139
|
+
core_1.InjectorService])
|
|
140
|
+
], SchedulerOrchestration);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CronJob } from 'cron';
|
|
2
|
+
export declare class SchedulerRegistry {
|
|
3
|
+
private readonly cronJobs;
|
|
4
|
+
private readonly timeouts;
|
|
5
|
+
private readonly intervals;
|
|
6
|
+
doesExist(type: 'cron' | 'timeout' | 'interval', name: string): boolean;
|
|
7
|
+
getCronJob(name: string): CronJob<null, null>;
|
|
8
|
+
getInterval(name: string): any;
|
|
9
|
+
getTimeout(name: string): any;
|
|
10
|
+
addCronJob(name: string, job: CronJob): void;
|
|
11
|
+
addInterval<T = any>(name: string, intervalId: T): void;
|
|
12
|
+
addTimeout<T = any>(name: string, timeoutId: T): void;
|
|
13
|
+
getCronJobs(): Map<string, CronJob>;
|
|
14
|
+
deleteCronJob(name: string): void;
|
|
15
|
+
getIntervals(): string[];
|
|
16
|
+
deleteInterval(name: string): void;
|
|
17
|
+
getTimeouts(): string[];
|
|
18
|
+
deleteTimeout(name: string): void;
|
|
19
|
+
private wrapFunctionInTryCatchBlocks;
|
|
20
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SchedulerRegistry = void 0;
|
|
10
|
+
const core_1 = require("@carno.js/core");
|
|
11
|
+
let SchedulerRegistry = class SchedulerRegistry {
|
|
12
|
+
constructor() {
|
|
13
|
+
// private readonly logger = new Logger(SchedulerRegistry.name);
|
|
14
|
+
this.cronJobs = new Map();
|
|
15
|
+
this.timeouts = new Map();
|
|
16
|
+
this.intervals = new Map();
|
|
17
|
+
}
|
|
18
|
+
doesExist(type, name) {
|
|
19
|
+
switch (type) {
|
|
20
|
+
case 'cron':
|
|
21
|
+
return this.cronJobs.has(name);
|
|
22
|
+
case 'interval':
|
|
23
|
+
return this.intervals.has(name);
|
|
24
|
+
case 'timeout':
|
|
25
|
+
return this.timeouts.has(name);
|
|
26
|
+
default:
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
getCronJob(name) {
|
|
31
|
+
const ref = this.cronJobs.get(name);
|
|
32
|
+
if (!ref) {
|
|
33
|
+
throw new Error("NO_SCHEDULER_FOUND('Cron Job', name)");
|
|
34
|
+
}
|
|
35
|
+
return ref;
|
|
36
|
+
}
|
|
37
|
+
getInterval(name) {
|
|
38
|
+
const ref = this.intervals.get(name);
|
|
39
|
+
if (typeof ref === 'undefined') {
|
|
40
|
+
throw new Error("NO_SCHEDULER_FOUND('Interval', name)");
|
|
41
|
+
}
|
|
42
|
+
return ref;
|
|
43
|
+
}
|
|
44
|
+
getTimeout(name) {
|
|
45
|
+
const ref = this.timeouts.get(name);
|
|
46
|
+
if (typeof ref === 'undefined') {
|
|
47
|
+
throw new Error("NO_SCHEDULER_FOUND('Timeout', name)");
|
|
48
|
+
}
|
|
49
|
+
return ref;
|
|
50
|
+
}
|
|
51
|
+
addCronJob(name, job) {
|
|
52
|
+
const ref = this.cronJobs.get(name);
|
|
53
|
+
if (ref) {
|
|
54
|
+
throw new Error("DUPLICATE_SCHEDULER('Cron Job', name)");
|
|
55
|
+
}
|
|
56
|
+
job.fireOnTick = this.wrapFunctionInTryCatchBlocks(job.fireOnTick, job);
|
|
57
|
+
this.cronJobs.set(name, job);
|
|
58
|
+
}
|
|
59
|
+
addInterval(name, intervalId) {
|
|
60
|
+
const ref = this.intervals.get(name);
|
|
61
|
+
if (ref) {
|
|
62
|
+
throw new Error("DUPLICATE_SCHEDULER('Interval', name)");
|
|
63
|
+
}
|
|
64
|
+
this.intervals.set(name, intervalId);
|
|
65
|
+
}
|
|
66
|
+
addTimeout(name, timeoutId) {
|
|
67
|
+
const ref = this.timeouts.get(name);
|
|
68
|
+
if (ref) {
|
|
69
|
+
throw new Error("DUPLICATE_SCHEDULER('Timeout', name)");
|
|
70
|
+
}
|
|
71
|
+
this.timeouts.set(name, timeoutId);
|
|
72
|
+
}
|
|
73
|
+
getCronJobs() {
|
|
74
|
+
return this.cronJobs;
|
|
75
|
+
}
|
|
76
|
+
deleteCronJob(name) {
|
|
77
|
+
const cronJob = this.getCronJob(name);
|
|
78
|
+
cronJob.stop();
|
|
79
|
+
this.cronJobs.delete(name);
|
|
80
|
+
}
|
|
81
|
+
getIntervals() {
|
|
82
|
+
return [...this.intervals.keys()];
|
|
83
|
+
}
|
|
84
|
+
deleteInterval(name) {
|
|
85
|
+
const interval = this.getInterval(name);
|
|
86
|
+
clearInterval(interval);
|
|
87
|
+
this.intervals.delete(name);
|
|
88
|
+
}
|
|
89
|
+
getTimeouts() {
|
|
90
|
+
return [...this.timeouts.keys()];
|
|
91
|
+
}
|
|
92
|
+
deleteTimeout(name) {
|
|
93
|
+
const timeout = this.getTimeout(name);
|
|
94
|
+
clearTimeout(timeout);
|
|
95
|
+
this.timeouts.delete(name);
|
|
96
|
+
}
|
|
97
|
+
wrapFunctionInTryCatchBlocks(methodRef, instance) {
|
|
98
|
+
return async (...args) => {
|
|
99
|
+
try {
|
|
100
|
+
await methodRef.call(instance, ...args);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.log(error);
|
|
104
|
+
// this.logger.error(error);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.SchedulerRegistry = SchedulerRegistry;
|
|
110
|
+
exports.SchedulerRegistry = SchedulerRegistry = __decorate([
|
|
111
|
+
(0, core_1.Injectable)()
|
|
112
|
+
], SchedulerRegistry);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const SCHEDULE_CRON_OPTIONS = "carno:schedule:cron:options";
|
|
2
|
+
export declare const SCHEDULER_NAME = "carno:schedule:name";
|
|
3
|
+
export declare const SCHEDULER_TYPE = "carno:schedule:type";
|
|
4
|
+
export declare const SCHEDULE_TIMEOUT_OPTIONS = "carno:schedule:timeout:options";
|
|
5
|
+
export declare const SCHEDULE_INTERVAL_OPTIONS = "carno:schedule:interval:options";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SCHEDULE_INTERVAL_OPTIONS = exports.SCHEDULE_TIMEOUT_OPTIONS = exports.SCHEDULER_TYPE = exports.SCHEDULER_NAME = exports.SCHEDULE_CRON_OPTIONS = void 0;
|
|
4
|
+
exports.SCHEDULE_CRON_OPTIONS = "carno:schedule:cron:options";
|
|
5
|
+
exports.SCHEDULER_NAME = "carno:schedule:name";
|
|
6
|
+
exports.SCHEDULER_TYPE = "carno:schedule:type";
|
|
7
|
+
exports.SCHEDULE_TIMEOUT_OPTIONS = "carno:schedule:timeout:options";
|
|
8
|
+
exports.SCHEDULE_INTERVAL_OPTIONS = "carno:schedule:interval:options";
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export declare enum CronExpression {
|
|
2
|
+
EVERY_SECOND = "* * * * * *",
|
|
3
|
+
EVERY_5_SECONDS = "*/5 * * * * *",
|
|
4
|
+
EVERY_10_SECONDS = "*/10 * * * * *",
|
|
5
|
+
EVERY_30_SECONDS = "*/30 * * * * *",
|
|
6
|
+
EVERY_MINUTE = "*/1 * * * *",
|
|
7
|
+
EVERY_5_MINUTES = "0 */5 * * * *",
|
|
8
|
+
EVERY_10_MINUTES = "0 */10 * * * *",
|
|
9
|
+
EVERY_30_MINUTES = "0 */30 * * * *",
|
|
10
|
+
EVERY_HOUR = "0 0-23/1 * * *",
|
|
11
|
+
EVERY_2_HOURS = "0 0-23/2 * * *",
|
|
12
|
+
EVERY_3_HOURS = "0 0-23/3 * * *",
|
|
13
|
+
EVERY_4_HOURS = "0 0-23/4 * * *",
|
|
14
|
+
EVERY_5_HOURS = "0 0-23/5 * * *",
|
|
15
|
+
EVERY_6_HOURS = "0 0-23/6 * * *",
|
|
16
|
+
EVERY_7_HOURS = "0 0-23/7 * * *",
|
|
17
|
+
EVERY_8_HOURS = "0 0-23/8 * * *",
|
|
18
|
+
EVERY_9_HOURS = "0 0-23/9 * * *",
|
|
19
|
+
EVERY_10_HOURS = "0 0-23/10 * * *",
|
|
20
|
+
EVERY_11_HOURS = "0 0-23/11 * * *",
|
|
21
|
+
EVERY_12_HOURS = "0 0-23/12 * * *",
|
|
22
|
+
EVERY_DAY_AT_1AM = "0 01 * * *",
|
|
23
|
+
EVERY_DAY_AT_2AM = "0 02 * * *",
|
|
24
|
+
EVERY_DAY_AT_3AM = "0 03 * * *",
|
|
25
|
+
EVERY_DAY_AT_4AM = "0 04 * * *",
|
|
26
|
+
EVERY_DAY_AT_5AM = "0 05 * * *",
|
|
27
|
+
EVERY_DAY_AT_6AM = "0 06 * * *",
|
|
28
|
+
EVERY_DAY_AT_7AM = "0 07 * * *",
|
|
29
|
+
EVERY_DAY_AT_8AM = "0 08 * * *",
|
|
30
|
+
EVERY_DAY_AT_9AM = "0 09 * * *",
|
|
31
|
+
EVERY_DAY_AT_10AM = "0 10 * * *",
|
|
32
|
+
EVERY_DAY_AT_11AM = "0 11 * * *",
|
|
33
|
+
EVERY_DAY_AT_NOON = "0 12 * * *",
|
|
34
|
+
EVERY_DAY_AT_1PM = "0 13 * * *",
|
|
35
|
+
EVERY_DAY_AT_2PM = "0 14 * * *",
|
|
36
|
+
EVERY_DAY_AT_3PM = "0 15 * * *",
|
|
37
|
+
EVERY_DAY_AT_4PM = "0 16 * * *",
|
|
38
|
+
EVERY_DAY_AT_5PM = "0 17 * * *",
|
|
39
|
+
EVERY_DAY_AT_6PM = "0 18 * * *",
|
|
40
|
+
EVERY_DAY_AT_7PM = "0 19 * * *",
|
|
41
|
+
EVERY_DAY_AT_8PM = "0 20 * * *",
|
|
42
|
+
EVERY_DAY_AT_9PM = "0 21 * * *",
|
|
43
|
+
EVERY_DAY_AT_10PM = "0 22 * * *",
|
|
44
|
+
EVERY_DAY_AT_11PM = "0 23 * * *",
|
|
45
|
+
EVERY_DAY_AT_MIDNIGHT = "0 0 * * *",
|
|
46
|
+
EVERY_WEEK = "0 0 * * 0",
|
|
47
|
+
EVERY_WEEKDAY = "0 0 * * 1-5",
|
|
48
|
+
EVERY_WEEKEND = "0 0 * * 6,0",
|
|
49
|
+
EVERY_1ST_DAY_OF_MONTH_AT_MIDNIGHT = "0 0 1 * *",
|
|
50
|
+
EVERY_1ST_DAY_OF_MONTH_AT_NOON = "0 12 1 * *",
|
|
51
|
+
EVERY_2ND_HOUR = "0 */2 * * *",
|
|
52
|
+
EVERY_2ND_HOUR_FROM_1AM_THROUGH_11PM = "0 1-23/2 * * *",
|
|
53
|
+
EVERY_2ND_MONTH = "0 0 1 */2 *",
|
|
54
|
+
EVERY_QUARTER = "0 0 1 */3 *",
|
|
55
|
+
EVERY_6_MONTHS = "0 0 1 */6 *",
|
|
56
|
+
EVERY_YEAR = "0 0 1 0 *",
|
|
57
|
+
EVERY_30_MINUTES_BETWEEN_9AM_AND_5PM = "0 */30 9-17 * * *",
|
|
58
|
+
EVERY_30_MINUTES_BETWEEN_9AM_AND_6PM = "0 */30 9-18 * * *",
|
|
59
|
+
EVERY_30_MINUTES_BETWEEN_10AM_AND_7PM = "0 */30 10-19 * * *",
|
|
60
|
+
MONDAY_TO_FRIDAY_AT_1AM = "0 0 01 * * 1-5",
|
|
61
|
+
MONDAY_TO_FRIDAY_AT_2AM = "0 0 02 * * 1-5",
|
|
62
|
+
MONDAY_TO_FRIDAY_AT_3AM = "0 0 03 * * 1-5",
|
|
63
|
+
MONDAY_TO_FRIDAY_AT_4AM = "0 0 04 * * 1-5",
|
|
64
|
+
MONDAY_TO_FRIDAY_AT_5AM = "0 0 05 * * 1-5",
|
|
65
|
+
MONDAY_TO_FRIDAY_AT_6AM = "0 0 06 * * 1-5",
|
|
66
|
+
MONDAY_TO_FRIDAY_AT_7AM = "0 0 07 * * 1-5",
|
|
67
|
+
MONDAY_TO_FRIDAY_AT_8AM = "0 0 08 * * 1-5",
|
|
68
|
+
MONDAY_TO_FRIDAY_AT_9AM = "0 0 09 * * 1-5",
|
|
69
|
+
MONDAY_TO_FRIDAY_AT_09_30AM = "0 30 09 * * 1-5",
|
|
70
|
+
MONDAY_TO_FRIDAY_AT_10AM = "0 0 10 * * 1-5",
|
|
71
|
+
MONDAY_TO_FRIDAY_AT_11AM = "0 0 11 * * 1-5",
|
|
72
|
+
MONDAY_TO_FRIDAY_AT_11_30AM = "0 30 11 * * 1-5",
|
|
73
|
+
MONDAY_TO_FRIDAY_AT_12PM = "0 0 12 * * 1-5",
|
|
74
|
+
MONDAY_TO_FRIDAY_AT_1PM = "0 0 13 * * 1-5",
|
|
75
|
+
MONDAY_TO_FRIDAY_AT_2PM = "0 0 14 * * 1-5",
|
|
76
|
+
MONDAY_TO_FRIDAY_AT_3PM = "0 0 15 * * 1-5",
|
|
77
|
+
MONDAY_TO_FRIDAY_AT_4PM = "0 0 16 * * 1-5",
|
|
78
|
+
MONDAY_TO_FRIDAY_AT_5PM = "0 0 17 * * 1-5",
|
|
79
|
+
MONDAY_TO_FRIDAY_AT_6PM = "0 0 18 * * 1-5",
|
|
80
|
+
MONDAY_TO_FRIDAY_AT_7PM = "0 0 19 * * 1-5",
|
|
81
|
+
MONDAY_TO_FRIDAY_AT_8PM = "0 0 20 * * 1-5",
|
|
82
|
+
MONDAY_TO_FRIDAY_AT_9PM = "0 0 21 * * 1-5",
|
|
83
|
+
MONDAY_TO_FRIDAY_AT_10PM = "0 0 22 * * 1-5",
|
|
84
|
+
MONDAY_TO_FRIDAY_AT_11PM = "0 0 23 * * 1-5"
|
|
85
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CronExpression = void 0;
|
|
4
|
+
var CronExpression;
|
|
5
|
+
(function (CronExpression) {
|
|
6
|
+
CronExpression["EVERY_SECOND"] = "* * * * * *";
|
|
7
|
+
CronExpression["EVERY_5_SECONDS"] = "*/5 * * * * *";
|
|
8
|
+
CronExpression["EVERY_10_SECONDS"] = "*/10 * * * * *";
|
|
9
|
+
CronExpression["EVERY_30_SECONDS"] = "*/30 * * * * *";
|
|
10
|
+
CronExpression["EVERY_MINUTE"] = "*/1 * * * *";
|
|
11
|
+
CronExpression["EVERY_5_MINUTES"] = "0 */5 * * * *";
|
|
12
|
+
CronExpression["EVERY_10_MINUTES"] = "0 */10 * * * *";
|
|
13
|
+
CronExpression["EVERY_30_MINUTES"] = "0 */30 * * * *";
|
|
14
|
+
CronExpression["EVERY_HOUR"] = "0 0-23/1 * * *";
|
|
15
|
+
CronExpression["EVERY_2_HOURS"] = "0 0-23/2 * * *";
|
|
16
|
+
CronExpression["EVERY_3_HOURS"] = "0 0-23/3 * * *";
|
|
17
|
+
CronExpression["EVERY_4_HOURS"] = "0 0-23/4 * * *";
|
|
18
|
+
CronExpression["EVERY_5_HOURS"] = "0 0-23/5 * * *";
|
|
19
|
+
CronExpression["EVERY_6_HOURS"] = "0 0-23/6 * * *";
|
|
20
|
+
CronExpression["EVERY_7_HOURS"] = "0 0-23/7 * * *";
|
|
21
|
+
CronExpression["EVERY_8_HOURS"] = "0 0-23/8 * * *";
|
|
22
|
+
CronExpression["EVERY_9_HOURS"] = "0 0-23/9 * * *";
|
|
23
|
+
CronExpression["EVERY_10_HOURS"] = "0 0-23/10 * * *";
|
|
24
|
+
CronExpression["EVERY_11_HOURS"] = "0 0-23/11 * * *";
|
|
25
|
+
CronExpression["EVERY_12_HOURS"] = "0 0-23/12 * * *";
|
|
26
|
+
CronExpression["EVERY_DAY_AT_1AM"] = "0 01 * * *";
|
|
27
|
+
CronExpression["EVERY_DAY_AT_2AM"] = "0 02 * * *";
|
|
28
|
+
CronExpression["EVERY_DAY_AT_3AM"] = "0 03 * * *";
|
|
29
|
+
CronExpression["EVERY_DAY_AT_4AM"] = "0 04 * * *";
|
|
30
|
+
CronExpression["EVERY_DAY_AT_5AM"] = "0 05 * * *";
|
|
31
|
+
CronExpression["EVERY_DAY_AT_6AM"] = "0 06 * * *";
|
|
32
|
+
CronExpression["EVERY_DAY_AT_7AM"] = "0 07 * * *";
|
|
33
|
+
CronExpression["EVERY_DAY_AT_8AM"] = "0 08 * * *";
|
|
34
|
+
CronExpression["EVERY_DAY_AT_9AM"] = "0 09 * * *";
|
|
35
|
+
CronExpression["EVERY_DAY_AT_10AM"] = "0 10 * * *";
|
|
36
|
+
CronExpression["EVERY_DAY_AT_11AM"] = "0 11 * * *";
|
|
37
|
+
CronExpression["EVERY_DAY_AT_NOON"] = "0 12 * * *";
|
|
38
|
+
CronExpression["EVERY_DAY_AT_1PM"] = "0 13 * * *";
|
|
39
|
+
CronExpression["EVERY_DAY_AT_2PM"] = "0 14 * * *";
|
|
40
|
+
CronExpression["EVERY_DAY_AT_3PM"] = "0 15 * * *";
|
|
41
|
+
CronExpression["EVERY_DAY_AT_4PM"] = "0 16 * * *";
|
|
42
|
+
CronExpression["EVERY_DAY_AT_5PM"] = "0 17 * * *";
|
|
43
|
+
CronExpression["EVERY_DAY_AT_6PM"] = "0 18 * * *";
|
|
44
|
+
CronExpression["EVERY_DAY_AT_7PM"] = "0 19 * * *";
|
|
45
|
+
CronExpression["EVERY_DAY_AT_8PM"] = "0 20 * * *";
|
|
46
|
+
CronExpression["EVERY_DAY_AT_9PM"] = "0 21 * * *";
|
|
47
|
+
CronExpression["EVERY_DAY_AT_10PM"] = "0 22 * * *";
|
|
48
|
+
CronExpression["EVERY_DAY_AT_11PM"] = "0 23 * * *";
|
|
49
|
+
CronExpression["EVERY_DAY_AT_MIDNIGHT"] = "0 0 * * *";
|
|
50
|
+
CronExpression["EVERY_WEEK"] = "0 0 * * 0";
|
|
51
|
+
CronExpression["EVERY_WEEKDAY"] = "0 0 * * 1-5";
|
|
52
|
+
CronExpression["EVERY_WEEKEND"] = "0 0 * * 6,0";
|
|
53
|
+
CronExpression["EVERY_1ST_DAY_OF_MONTH_AT_MIDNIGHT"] = "0 0 1 * *";
|
|
54
|
+
CronExpression["EVERY_1ST_DAY_OF_MONTH_AT_NOON"] = "0 12 1 * *";
|
|
55
|
+
CronExpression["EVERY_2ND_HOUR"] = "0 */2 * * *";
|
|
56
|
+
CronExpression["EVERY_2ND_HOUR_FROM_1AM_THROUGH_11PM"] = "0 1-23/2 * * *";
|
|
57
|
+
CronExpression["EVERY_2ND_MONTH"] = "0 0 1 */2 *";
|
|
58
|
+
CronExpression["EVERY_QUARTER"] = "0 0 1 */3 *";
|
|
59
|
+
CronExpression["EVERY_6_MONTHS"] = "0 0 1 */6 *";
|
|
60
|
+
CronExpression["EVERY_YEAR"] = "0 0 1 0 *";
|
|
61
|
+
CronExpression["EVERY_30_MINUTES_BETWEEN_9AM_AND_5PM"] = "0 */30 9-17 * * *";
|
|
62
|
+
CronExpression["EVERY_30_MINUTES_BETWEEN_9AM_AND_6PM"] = "0 */30 9-18 * * *";
|
|
63
|
+
CronExpression["EVERY_30_MINUTES_BETWEEN_10AM_AND_7PM"] = "0 */30 10-19 * * *";
|
|
64
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_1AM"] = "0 0 01 * * 1-5";
|
|
65
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_2AM"] = "0 0 02 * * 1-5";
|
|
66
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_3AM"] = "0 0 03 * * 1-5";
|
|
67
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_4AM"] = "0 0 04 * * 1-5";
|
|
68
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_5AM"] = "0 0 05 * * 1-5";
|
|
69
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_6AM"] = "0 0 06 * * 1-5";
|
|
70
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_7AM"] = "0 0 07 * * 1-5";
|
|
71
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_8AM"] = "0 0 08 * * 1-5";
|
|
72
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_9AM"] = "0 0 09 * * 1-5";
|
|
73
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_09_30AM"] = "0 30 09 * * 1-5";
|
|
74
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_10AM"] = "0 0 10 * * 1-5";
|
|
75
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_11AM"] = "0 0 11 * * 1-5";
|
|
76
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_11_30AM"] = "0 30 11 * * 1-5";
|
|
77
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_12PM"] = "0 0 12 * * 1-5";
|
|
78
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_1PM"] = "0 0 13 * * 1-5";
|
|
79
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_2PM"] = "0 0 14 * * 1-5";
|
|
80
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_3PM"] = "0 0 15 * * 1-5";
|
|
81
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_4PM"] = "0 0 16 * * 1-5";
|
|
82
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_5PM"] = "0 0 17 * * 1-5";
|
|
83
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_6PM"] = "0 0 18 * * 1-5";
|
|
84
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_7PM"] = "0 0 19 * * 1-5";
|
|
85
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_8PM"] = "0 0 20 * * 1-5";
|
|
86
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_9PM"] = "0 0 21 * * 1-5";
|
|
87
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_10PM"] = "0 0 22 * * 1-5";
|
|
88
|
+
CronExpression["MONDAY_TO_FRIDAY_AT_11PM"] = "0 0 23 * * 1-5";
|
|
89
|
+
})(CronExpression || (exports.CronExpression = CronExpression = {}));
|