@dromio/workflow-kernel 0.1.6 → 0.1.7
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/package.json +2 -2
- package/dist/cron.d.ts +0 -18
- package/dist/cron.d.ts.map +0 -1
- package/dist/cron.js +0 -223
- package/dist/cron.js.map +0 -1
- package/dist/index.cjs +0 -6802
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/lease.d.ts +0 -21
- package/dist/lease.d.ts.map +0 -1
- package/dist/lease.js +0 -44
- package/dist/lease.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dromio/workflow-kernel",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"dromio": {
|
|
5
5
|
"stability": "beta"
|
|
6
6
|
},
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"license": "Apache-2.0",
|
|
34
34
|
"repository": {
|
|
35
35
|
"type": "git",
|
|
36
|
-
"url": "https://github.com/Dromio-Labs/
|
|
36
|
+
"url": "https://github.com/Dromio-Labs/dromio.git",
|
|
37
37
|
"directory": "packages/workflow/kernel"
|
|
38
38
|
},
|
|
39
39
|
"publishConfig": {
|
package/dist/cron.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export type SimpleFrequency = "every-minute" | "every-n-minutes" | "hourly" | "daily" | "weekly";
|
|
2
|
-
export type SimpleSchedule = {
|
|
3
|
-
frequency: SimpleFrequency;
|
|
4
|
-
interval?: number;
|
|
5
|
-
minute?: number;
|
|
6
|
-
hour?: number;
|
|
7
|
-
daysOfWeek?: number[];
|
|
8
|
-
};
|
|
9
|
-
export declare function validateCronExpression(cronExpression: string): {
|
|
10
|
-
valid: boolean;
|
|
11
|
-
error?: string;
|
|
12
|
-
};
|
|
13
|
-
export declare function buildCronFromSimple(state: SimpleSchedule): string;
|
|
14
|
-
export declare function parseCronToSimple(cron: string): SimpleSchedule | null;
|
|
15
|
-
export declare function describeCron(cron: string): string;
|
|
16
|
-
export declare function computeNextRunTime(cronExpression: string, timezone: string, currentDate?: Date): Date | null;
|
|
17
|
-
export declare function validateTimezone(timezone: string): boolean;
|
|
18
|
-
//# sourceMappingURL=cron.d.ts.map
|
package/dist/cron.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG;IAC9D,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAsBA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAoBjE;AA8BD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAkDrE;AAmDD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAkCD,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,IAAiB,GAC7B,IAAI,GAAG,IAAI,CAUb;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO1D"}
|
package/dist/cron.js
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import { CronExpressionParser } from "cron-parser";
|
|
2
|
-
const CRON_FIELD_SPLITTER = /\s+/;
|
|
3
|
-
const INTERVAL_PATTERN = /^\*\/(\d+)$/;
|
|
4
|
-
const RANGE_PATTERN = /^(\d+)-(\d+)$/;
|
|
5
|
-
const DAY_NAMES = [
|
|
6
|
-
"Sunday",
|
|
7
|
-
"Monday",
|
|
8
|
-
"Tuesday",
|
|
9
|
-
"Wednesday",
|
|
10
|
-
"Thursday",
|
|
11
|
-
"Friday",
|
|
12
|
-
"Saturday",
|
|
13
|
-
];
|
|
14
|
-
export function validateCronExpression(cronExpression) {
|
|
15
|
-
if (!cronExpression || typeof cronExpression !== "string") {
|
|
16
|
-
return { valid: false, error: "Cron expression is required" };
|
|
17
|
-
}
|
|
18
|
-
const parts = cronExpression.trim().split(CRON_FIELD_SPLITTER);
|
|
19
|
-
if (parts.length < 5 || parts.length > 6) {
|
|
20
|
-
return {
|
|
21
|
-
valid: false,
|
|
22
|
-
error: "Cron expression must have 5 or 6 fields",
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
CronExpressionParser.parse(cronExpression);
|
|
27
|
-
return { valid: true };
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
return {
|
|
31
|
-
valid: false,
|
|
32
|
-
error: error instanceof Error ? error.message : "Invalid cron expression",
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export function buildCronFromSimple(state) {
|
|
37
|
-
switch (state.frequency) {
|
|
38
|
-
case "every-minute":
|
|
39
|
-
return "* * * * *";
|
|
40
|
-
case "every-n-minutes":
|
|
41
|
-
return `*/${state.interval ?? 5} * * * *`;
|
|
42
|
-
case "hourly":
|
|
43
|
-
return `${state.minute ?? 0} * * * *`;
|
|
44
|
-
case "daily":
|
|
45
|
-
return `${state.minute ?? 0} ${state.hour ?? 9} * * *`;
|
|
46
|
-
case "weekly": {
|
|
47
|
-
const days = state.daysOfWeek !== undefined && state.daysOfWeek.length > 0
|
|
48
|
-
? state.daysOfWeek.join(",")
|
|
49
|
-
: "*";
|
|
50
|
-
return `${state.minute ?? 0} ${state.hour ?? 9} * * ${days}`;
|
|
51
|
-
}
|
|
52
|
-
default:
|
|
53
|
-
return "* * * * *";
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function parseNumericField(field) {
|
|
57
|
-
const num = Number.parseInt(field, 10);
|
|
58
|
-
if (Number.isNaN(num) || String(num) !== field) {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
return num;
|
|
62
|
-
}
|
|
63
|
-
function parseWildcardMinute(minuteField, hourField, dayOfWeek) {
|
|
64
|
-
if (minuteField === "*" && hourField === "*" && dayOfWeek === "*") {
|
|
65
|
-
return { frequency: "every-minute" };
|
|
66
|
-
}
|
|
67
|
-
const intervalMatch = minuteField.match(INTERVAL_PATTERN);
|
|
68
|
-
if (intervalMatch !== null && hourField === "*" && dayOfWeek === "*") {
|
|
69
|
-
return {
|
|
70
|
-
frequency: "every-n-minutes",
|
|
71
|
-
interval: Number.parseInt(intervalMatch[1], 10),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
export function parseCronToSimple(cron) {
|
|
77
|
-
if (!cron) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const parts = cron.trim().split(CRON_FIELD_SPLITTER);
|
|
81
|
-
if (parts.length !== 5) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
const [minuteField, hourField, dayOfMonth, month, dayOfWeek] = parts;
|
|
85
|
-
if (dayOfMonth !== "*" || month !== "*") {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
const wildcardResult = parseWildcardMinute(minuteField, hourField, dayOfWeek);
|
|
89
|
-
if (wildcardResult !== null) {
|
|
90
|
-
return wildcardResult;
|
|
91
|
-
}
|
|
92
|
-
const minuteNum = parseNumericField(minuteField);
|
|
93
|
-
if (minuteNum === null) {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
if (hourField === "*" && dayOfWeek === "*") {
|
|
97
|
-
return { frequency: "hourly", minute: minuteNum };
|
|
98
|
-
}
|
|
99
|
-
const hourNum = parseNumericField(hourField);
|
|
100
|
-
if (hourNum === null) {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
if (dayOfWeek === "*") {
|
|
104
|
-
return { frequency: "daily", minute: minuteNum, hour: hourNum };
|
|
105
|
-
}
|
|
106
|
-
const days = parseDaysOfWeek(dayOfWeek);
|
|
107
|
-
if (days === null) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
frequency: "weekly",
|
|
112
|
-
minute: minuteNum,
|
|
113
|
-
hour: hourNum,
|
|
114
|
-
daysOfWeek: days,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
function parseDayToken(token) {
|
|
118
|
-
const rangeMatch = token.match(RANGE_PATTERN);
|
|
119
|
-
if (rangeMatch === null) {
|
|
120
|
-
const num = parseNumericField(token);
|
|
121
|
-
if (num === null || num > 6) {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
return [num];
|
|
125
|
-
}
|
|
126
|
-
const start = Number.parseInt(rangeMatch[1], 10);
|
|
127
|
-
const end = Number.parseInt(rangeMatch[2], 10);
|
|
128
|
-
if (start > 6 || end > 6 || start > end) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
const result = [];
|
|
132
|
-
for (let i = start; i <= end; i++) {
|
|
133
|
-
result.push(i);
|
|
134
|
-
}
|
|
135
|
-
return result;
|
|
136
|
-
}
|
|
137
|
-
function parseDaysOfWeek(field) {
|
|
138
|
-
const days = [];
|
|
139
|
-
for (const part of field.split(",")) {
|
|
140
|
-
const parsed = parseDayToken(part);
|
|
141
|
-
if (parsed === null) {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
days.push(...parsed);
|
|
145
|
-
}
|
|
146
|
-
return days.length > 0 ? days : null;
|
|
147
|
-
}
|
|
148
|
-
function formatTime(hour, minute) {
|
|
149
|
-
const period = hour >= 12 ? "PM" : "AM";
|
|
150
|
-
let displayHour = hour;
|
|
151
|
-
if (hour === 0) {
|
|
152
|
-
displayHour = 12;
|
|
153
|
-
}
|
|
154
|
-
else if (hour > 12) {
|
|
155
|
-
displayHour = hour - 12;
|
|
156
|
-
}
|
|
157
|
-
const displayMinute = String(minute).padStart(2, "0");
|
|
158
|
-
return `${displayHour}:${displayMinute} ${period}`;
|
|
159
|
-
}
|
|
160
|
-
export function describeCron(cron) {
|
|
161
|
-
if (!cron) {
|
|
162
|
-
return "";
|
|
163
|
-
}
|
|
164
|
-
const simple = parseCronToSimple(cron);
|
|
165
|
-
if (simple !== null) {
|
|
166
|
-
return describeSimple(simple);
|
|
167
|
-
}
|
|
168
|
-
const validation = validateCronExpression(cron);
|
|
169
|
-
if (!validation.valid) {
|
|
170
|
-
return "";
|
|
171
|
-
}
|
|
172
|
-
return "Custom schedule";
|
|
173
|
-
}
|
|
174
|
-
function describeSimple(s) {
|
|
175
|
-
switch (s.frequency) {
|
|
176
|
-
case "every-minute":
|
|
177
|
-
return "Every minute";
|
|
178
|
-
case "every-n-minutes":
|
|
179
|
-
return `Every ${s.interval} minutes`;
|
|
180
|
-
case "hourly":
|
|
181
|
-
return s.minute === 0
|
|
182
|
-
? "Every hour on the hour"
|
|
183
|
-
: `Every hour at minute ${s.minute}`;
|
|
184
|
-
case "daily":
|
|
185
|
-
return `Every day at ${formatTime(s.hour ?? 9, s.minute ?? 0)}`;
|
|
186
|
-
case "weekly": {
|
|
187
|
-
const days = s.daysOfWeek ?? [];
|
|
188
|
-
const time = formatTime(s.hour ?? 9, s.minute ?? 0);
|
|
189
|
-
if (days.length === 5 && [1, 2, 3, 4, 5].every((d) => days.includes(d))) {
|
|
190
|
-
return `Every weekday at ${time}`;
|
|
191
|
-
}
|
|
192
|
-
if (days.length === 1) {
|
|
193
|
-
return `Every ${DAY_NAMES[days[0]]} at ${time}`;
|
|
194
|
-
}
|
|
195
|
-
const dayNames = days.map((d) => DAY_NAMES[d]).join(", ");
|
|
196
|
-
return `Every ${dayNames} at ${time}`;
|
|
197
|
-
}
|
|
198
|
-
default:
|
|
199
|
-
return "Custom schedule";
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
export function computeNextRunTime(cronExpression, timezone, currentDate = new Date()) {
|
|
203
|
-
try {
|
|
204
|
-
const interval = CronExpressionParser.parse(cronExpression, {
|
|
205
|
-
currentDate,
|
|
206
|
-
tz: timezone,
|
|
207
|
-
});
|
|
208
|
-
return interval.next().toDate();
|
|
209
|
-
}
|
|
210
|
-
catch {
|
|
211
|
-
return null;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
export function validateTimezone(timezone) {
|
|
215
|
-
try {
|
|
216
|
-
Intl.DateTimeFormat(undefined, { timeZone: timezone });
|
|
217
|
-
return true;
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
//# sourceMappingURL=cron.js.map
|
package/dist/cron.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":"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"}
|