@useparagon/core 1.0.16 → 1.0.17-canary.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/triggers/cron/cron.interface.d.ts +8 -2
- package/dist/triggers/cron/cron.interface.js +1 -0
- package/dist/triggers/cron/cron.interface.js.map +1 -1
- package/dist/triggers/cron/cron.utils.d.ts +2 -2
- package/dist/triggers/cron/cron.utils.js +90 -27
- package/dist/triggers/cron/cron.utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,7 +6,8 @@ export declare enum Unit {
|
|
|
6
6
|
MINUTES = "MINUTES",
|
|
7
7
|
HOURLY = "HOURLY",
|
|
8
8
|
DAILY = "DAILY",
|
|
9
|
-
WEEKLY = "WEEKLY"
|
|
9
|
+
WEEKLY = "WEEKLY",
|
|
10
|
+
CUSTOM = "CUSTOM"
|
|
10
11
|
}
|
|
11
12
|
export declare enum Weekday {
|
|
12
13
|
MONDAY = "MONDAY",
|
|
@@ -44,7 +45,12 @@ export type WeeklySchedule<T = Time> = {
|
|
|
44
45
|
weekday: Weekday;
|
|
45
46
|
time: T;
|
|
46
47
|
};
|
|
47
|
-
export type
|
|
48
|
+
export type CustomSchedule = {
|
|
49
|
+
unit: Unit.CUSTOM;
|
|
50
|
+
expression: string;
|
|
51
|
+
timezone: string;
|
|
52
|
+
};
|
|
53
|
+
export type Schedule = SecondsSchedule | MinutesSchedule | HourlySchedule | DailySchedule | WeeklySchedule | CustomSchedule;
|
|
48
54
|
export type Timezone = {
|
|
49
55
|
offset: string;
|
|
50
56
|
label: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.interface.js","sourceRoot":"","sources":["../../../src/triggers/cron/cron.interface.ts"],"names":[],"mappings":";;;AAIA,IAAY,
|
|
1
|
+
{"version":3,"file":"cron.interface.js","sourceRoot":"","sources":["../../../src/triggers/cron/cron.interface.ts"],"names":[],"mappings":";;;AAIA,IAAY,IAOX;AAPD,WAAY,IAAI;IACd,2BAAmB,CAAA;IACnB,2BAAmB,CAAA;IACnB,yBAAiB,CAAA;IACjB,uBAAe,CAAA;IACf,yBAAiB,CAAA;IACjB,yBAAiB,CAAA;AACnB,CAAC,EAPW,IAAI,oBAAJ,IAAI,QAOf;AAED,IAAY,OAQX;AARD,WAAY,OAAO;IACjB,4BAAiB,CAAA;IACjB,8BAAmB,CAAA;IACnB,kCAAuB,CAAA;IACvB,gCAAqB,CAAA;IACrB,4BAAiB,CAAA;IACjB,gCAAqB,CAAA;IACrB,4BAAiB,CAAA;AACnB,CAAC,EARW,OAAO,uBAAP,OAAO,QAQlB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schedule } from './cron.interface';
|
|
2
|
-
export declare const getCronOptions: (schedule: Schedule) => {
|
|
2
|
+
export declare const getCronOptions: (schedule: Schedule, timezone?: string) => {
|
|
3
3
|
cron: string;
|
|
4
|
-
|
|
4
|
+
timezone?: string | undefined;
|
|
5
5
|
};
|
|
6
6
|
export declare const getSchedule: (cron: string, timezone?: string) => Schedule;
|
|
@@ -3,7 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getSchedule = exports.getCronOptions = void 0;
|
|
4
4
|
const cron_parser_1 = require("cron-parser");
|
|
5
5
|
const cron_interface_1 = require("./cron.interface");
|
|
6
|
-
|
|
6
|
+
class InvalidConExpression extends Error {
|
|
7
|
+
name = 'InvalidConExpression';
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const getCronOptions = (schedule, timezone = 'America/Los_Angeles') => {
|
|
7
13
|
switch (schedule.unit) {
|
|
8
14
|
case cron_interface_1.Unit.SECONDS:
|
|
9
15
|
return { cron: `*/${schedule.seconds} * * * * *` };
|
|
@@ -20,7 +26,7 @@ const getCronOptions = (schedule) => {
|
|
|
20
26
|
const dailyHours = Math.floor(schedule.time.minutes / 60);
|
|
21
27
|
return {
|
|
22
28
|
cron: `0 ${dailyMinutes} ${dailyHours} */${schedule.days} * *`,
|
|
23
|
-
|
|
29
|
+
timezone,
|
|
24
30
|
};
|
|
25
31
|
case cron_interface_1.Unit.WEEKLY:
|
|
26
32
|
const weeklyMinutes = schedule.time.minutes % 60;
|
|
@@ -28,62 +34,119 @@ const getCronOptions = (schedule) => {
|
|
|
28
34
|
const weeklyWeekday = Object.keys(cron_interface_1.Weekday).indexOf(schedule.weekday) + 1;
|
|
29
35
|
return {
|
|
30
36
|
cron: `0 ${weeklyMinutes} ${weeklyHours} * * ${weeklyWeekday}`,
|
|
31
|
-
|
|
37
|
+
timezone,
|
|
38
|
+
};
|
|
39
|
+
case cron_interface_1.Unit.CUSTOM:
|
|
40
|
+
return {
|
|
41
|
+
cron: schedule.expression,
|
|
42
|
+
timezone,
|
|
32
43
|
};
|
|
33
44
|
}
|
|
34
45
|
};
|
|
35
46
|
exports.getCronOptions = getCronOptions;
|
|
47
|
+
const extractValue = (cronExpression, index, withSecondExpression) => {
|
|
48
|
+
const expressionParts = cronExpression.split(' ');
|
|
49
|
+
const part = withSecondExpression
|
|
50
|
+
? expressionParts.length === 5
|
|
51
|
+
? ''
|
|
52
|
+
: expressionParts[index]
|
|
53
|
+
: expressionParts.length === 5
|
|
54
|
+
? expressionParts[index]
|
|
55
|
+
: expressionParts[index + 1];
|
|
56
|
+
return part.replace('*/', '');
|
|
57
|
+
};
|
|
58
|
+
const validateRange = (value, min, max, name, cron) => {
|
|
59
|
+
if (isNaN(value) || value < min || value > max) {
|
|
60
|
+
throw new InvalidConExpression(`Invalid ${name} value in cron expression "${cron}". The value must be between ${min} and ${max}.`);
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
};
|
|
64
|
+
const validateSeconds = (cron) => validateRange(parseInt(extractValue(cron, 0, true)), 0, 59, 'seconds', cron);
|
|
65
|
+
const validateMinutes = (cron) => validateRange(parseInt(extractValue(cron, 1)), 0, 59, 'minutes', cron);
|
|
66
|
+
const validateHours = (cron) => validateRange(parseInt(extractValue(cron, 2)), 1, 23, 'hours', cron);
|
|
67
|
+
const validateDays = (cron) => validateRange(parseInt(extractValue(cron, 2)), 1, 31, 'days', cron);
|
|
68
|
+
const sanitizeExpression = (cronExpression) => {
|
|
69
|
+
const parts = cronExpression.split(' ');
|
|
70
|
+
return parts.length > 5 ? parts.slice(-5).join(' ') : parts.join(' ');
|
|
71
|
+
};
|
|
36
72
|
const getSchedule = (cron, timezone = 'America/Los_Angeles') => {
|
|
37
|
-
|
|
73
|
+
let parser;
|
|
74
|
+
try {
|
|
75
|
+
parser = (0, cron_parser_1.parseExpression)(cron);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
throw new InvalidConExpression(`An error occurred while parsing the cron expression "${cron}": ${err.message}`);
|
|
79
|
+
}
|
|
38
80
|
const firstIteration = parser.next().toDate();
|
|
39
81
|
const secondIteration = parser.next().toDate();
|
|
40
82
|
const diffSeconds = Math.floor((secondIteration.getTime() - firstIteration.getTime()) / 1000);
|
|
41
83
|
if (diffSeconds < 60) {
|
|
84
|
+
const secondsFromExpression = parseInt(extractValue(cron, 0, true));
|
|
42
85
|
return {
|
|
43
86
|
unit: cron_interface_1.Unit.SECONDS,
|
|
44
|
-
seconds:
|
|
87
|
+
seconds: secondsFromExpression,
|
|
45
88
|
};
|
|
46
89
|
}
|
|
90
|
+
if (diffSeconds === 60) {
|
|
91
|
+
validateSeconds(cron);
|
|
92
|
+
}
|
|
47
93
|
const diffMinutes = Math.floor(diffSeconds / 60);
|
|
48
94
|
if (diffMinutes < 60) {
|
|
95
|
+
const minutesFromExpression = parseInt(extractValue(cron, 0));
|
|
49
96
|
return {
|
|
50
97
|
unit: cron_interface_1.Unit.MINUTES,
|
|
51
|
-
minutes:
|
|
98
|
+
minutes: minutesFromExpression,
|
|
52
99
|
};
|
|
53
100
|
}
|
|
101
|
+
if (diffMinutes === 60) {
|
|
102
|
+
validateMinutes(cron);
|
|
103
|
+
}
|
|
54
104
|
const diffHours = Math.floor(diffMinutes / 60);
|
|
55
105
|
if (diffHours < 24) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
106
|
+
const minuteFromExpression = parseInt(extractValue(cron, 0));
|
|
107
|
+
const hoursFromExpression = parseInt(extractValue(cron, 1));
|
|
108
|
+
const offset = isNaN(minuteFromExpression) ? 1 : minuteFromExpression;
|
|
109
|
+
return offset % 5 === 0
|
|
110
|
+
? {
|
|
111
|
+
unit: cron_interface_1.Unit.HOURLY,
|
|
112
|
+
hours: hoursFromExpression,
|
|
113
|
+
offset,
|
|
114
|
+
}
|
|
115
|
+
: { unit: cron_interface_1.Unit.CUSTOM, expression: sanitizeExpression(cron), timezone };
|
|
116
|
+
}
|
|
117
|
+
if (diffHours === 24) {
|
|
118
|
+
validateHours(cron);
|
|
61
119
|
}
|
|
62
120
|
const diffDays = Math.floor(diffHours / 24);
|
|
63
121
|
const minutes = firstIteration.getHours() * 60 + firstIteration.getMinutes();
|
|
64
122
|
if (diffDays !== 7) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
123
|
+
validateDays(cron);
|
|
124
|
+
return minutes % 15 === 0
|
|
125
|
+
? {
|
|
126
|
+
unit: cron_interface_1.Unit.DAILY,
|
|
127
|
+
days: diffDays,
|
|
128
|
+
time: {
|
|
129
|
+
minutes,
|
|
130
|
+
timezone,
|
|
131
|
+
},
|
|
132
|
+
}
|
|
133
|
+
: { unit: cron_interface_1.Unit.CUSTOM, expression: sanitizeExpression(cron), timezone };
|
|
73
134
|
}
|
|
74
135
|
const weekday = new Intl.DateTimeFormat('en-US', {
|
|
75
136
|
weekday: 'long',
|
|
76
137
|
})
|
|
77
138
|
.format(firstIteration)
|
|
78
139
|
.toUpperCase();
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
140
|
+
return minutes % 15 === 0
|
|
141
|
+
? {
|
|
142
|
+
unit: cron_interface_1.Unit.WEEKLY,
|
|
143
|
+
weekday,
|
|
144
|
+
time: {
|
|
145
|
+
minutes,
|
|
146
|
+
timezone: timezone,
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
: { unit: cron_interface_1.Unit.CUSTOM, expression: sanitizeExpression(cron), timezone };
|
|
87
150
|
};
|
|
88
151
|
exports.getSchedule = getSchedule;
|
|
89
152
|
//# sourceMappingURL=cron.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.utils.js","sourceRoot":"","sources":["../../../src/triggers/cron/cron.utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"cron.utils.js","sourceRoot":"","sources":["../../../src/triggers/cron/cron.utils.ts"],"names":[],"mappings":"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"}
|