@desaubv/quik 0.0.21 → 0.0.81

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.
@@ -0,0 +1,291 @@
1
+ // src/cron/cron.ts
2
+ import cron from "node-cron";
3
+ import "node-cron";
4
+
5
+ // src/cron/exceptions.ts
6
+ var CronError = class extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = new.target.name;
10
+ Object.setPrototypeOf(this, new.target.prototype);
11
+ }
12
+ };
13
+ var CronTaskAlreadyExistsError = class extends CronError {
14
+ constructor(name) {
15
+ super(`Cron task "${name}" already exists.`);
16
+ }
17
+ };
18
+ var CronInvalidScheduleError = class extends CronError {
19
+ constructor(schedule) {
20
+ super(`Invalid cron schedule: "${schedule}".`);
21
+ }
22
+ };
23
+ var CronInvalidTimeZoneError = class extends CronError {
24
+ constructor(timeZone) {
25
+ super(`Invalid time zone: "${timeZone}".`);
26
+ }
27
+ };
28
+ var CronTaskExecutionError = class extends CronError {
29
+ constructor(name, cause) {
30
+ super(`Cron task "${name}" failed to execute.`);
31
+ if (cause !== void 0) {
32
+ this.cause = cause;
33
+ }
34
+ }
35
+ };
36
+
37
+ // src/core/time.ts
38
+ function isValidTimeZone(timeZone) {
39
+ try {
40
+ new Intl.DateTimeFormat("en-US", {
41
+ timeZone
42
+ });
43
+ return true;
44
+ } catch {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ // src/cron/cron.ts
50
+ var defaultConfig = {
51
+ language: "en"
52
+ };
53
+ var QuikCron = class {
54
+ tasks = /* @__PURE__ */ new Map();
55
+ jobs = /* @__PURE__ */ new Map();
56
+ #config = structuredClone(defaultConfig);
57
+ constructor() {
58
+ }
59
+ add(task) {
60
+ if (this.tasks.has(task.name)) {
61
+ throw new CronTaskAlreadyExistsError(
62
+ task.name
63
+ );
64
+ }
65
+ if (!cron.validate(task.schedule)) {
66
+ throw new CronInvalidScheduleError(
67
+ task.schedule
68
+ );
69
+ }
70
+ if (task.timezone && !isValidTimeZone(task.timezone)) {
71
+ throw new CronInvalidTimeZoneError(
72
+ task.timezone
73
+ );
74
+ }
75
+ this.tasks.set(task.name, {
76
+ ...task
77
+ });
78
+ }
79
+ remove(name) {
80
+ this.jobs.get(name)?.stop();
81
+ this.jobs.delete(name);
82
+ return this.tasks.delete(name);
83
+ }
84
+ has(name) {
85
+ return this.tasks.has(name);
86
+ }
87
+ get(name) {
88
+ return this.tasks.get(name);
89
+ }
90
+ getTasks() {
91
+ return [...this.tasks.values()];
92
+ }
93
+ start() {
94
+ for (const task of this.tasks.values()) {
95
+ if (this.jobs.has(task.name)) {
96
+ continue;
97
+ }
98
+ const timezone = task.timezone ?? this.#config.timeZone;
99
+ const options = timezone ? { timezone } : {};
100
+ const job = cron.schedule(
101
+ task.schedule,
102
+ async () => {
103
+ try {
104
+ await task.task();
105
+ } catch (error) {
106
+ const exception = new CronTaskExecutionError(
107
+ task.name,
108
+ error
109
+ );
110
+ this.#config.onError?.(exception);
111
+ }
112
+ },
113
+ options
114
+ );
115
+ this.jobs.set(task.name, job);
116
+ }
117
+ }
118
+ stop() {
119
+ for (const job of this.jobs.values()) {
120
+ job.stop();
121
+ }
122
+ this.jobs.clear();
123
+ }
124
+ config() {
125
+ return Object.freeze(
126
+ structuredClone(this.#config)
127
+ );
128
+ }
129
+ setConfig(config) {
130
+ if (config.timeZone && !isValidTimeZone(config.timeZone)) {
131
+ throw new CronInvalidTimeZoneError(
132
+ config.timeZone
133
+ );
134
+ }
135
+ this.#config = {
136
+ ...this.#config,
137
+ ...config
138
+ };
139
+ }
140
+ };
141
+ function Cron() {
142
+ return new QuikCron();
143
+ }
144
+
145
+ // src/cron/schedule.ts
146
+ var weekdays = {
147
+ sunday: 0,
148
+ monday: 1,
149
+ tuesday: 2,
150
+ wednesday: 3,
151
+ thursday: 4,
152
+ friday: 5,
153
+ saturday: 6
154
+ };
155
+ var ScheduleBuilder = class {
156
+ #value;
157
+ constructor(value = 1) {
158
+ if (!Number.isInteger(value) || value < 1) {
159
+ throw new RangeError(
160
+ "Schedule value must be a positive integer."
161
+ );
162
+ }
163
+ this.#value = value;
164
+ }
165
+ seconds() {
166
+ return this.#interval("second");
167
+ }
168
+ second() {
169
+ return this.seconds();
170
+ }
171
+ minutes() {
172
+ return this.#interval("minute");
173
+ }
174
+ minute() {
175
+ return this.minutes();
176
+ }
177
+ hours() {
178
+ return this.#interval("hour");
179
+ }
180
+ hour() {
181
+ return this.hours();
182
+ }
183
+ days() {
184
+ return this.#interval("day");
185
+ }
186
+ day() {
187
+ return this.days();
188
+ }
189
+ months() {
190
+ return this.#interval("month");
191
+ }
192
+ month() {
193
+ return this.months();
194
+ }
195
+ dayAt(time) {
196
+ const [hour, minute] = this.#parseTime(time);
197
+ return `${minute} ${hour} * * *`;
198
+ }
199
+ at(time) {
200
+ return this.dayAt(time);
201
+ }
202
+ weekdayAt(weekday, time) {
203
+ const [hour, minute] = this.#parseTime(time);
204
+ return `${minute} ${hour} * * ${weekdays[weekday]}`;
205
+ }
206
+ sundayAt(time) {
207
+ return this.weekdayAt("sunday", time);
208
+ }
209
+ mondayAt(time) {
210
+ return this.weekdayAt("monday", time);
211
+ }
212
+ tuesdayAt(time) {
213
+ return this.weekdayAt("tuesday", time);
214
+ }
215
+ wednesdayAt(time) {
216
+ return this.weekdayAt("wednesday", time);
217
+ }
218
+ thursdayAt(time) {
219
+ return this.weekdayAt("thursday", time);
220
+ }
221
+ fridayAt(time) {
222
+ return this.weekdayAt("friday", time);
223
+ }
224
+ saturdayAt(time) {
225
+ return this.weekdayAt("saturday", time);
226
+ }
227
+ weekdaysAt(time) {
228
+ const [hour, minute] = this.#parseTime(time);
229
+ return `${minute} ${hour} * * 1-5`;
230
+ }
231
+ weekendsAt(time) {
232
+ const [hour, minute] = this.#parseTime(time);
233
+ return `${minute} ${hour} * * 0,6`;
234
+ }
235
+ #interval(unit) {
236
+ switch (unit) {
237
+ case "second":
238
+ return `*/${this.#value} * * * * *`;
239
+ case "minute":
240
+ return `*/${this.#value} * * * *`;
241
+ case "hour":
242
+ return `0 */${this.#value} * * *`;
243
+ case "day":
244
+ return `0 0 */${this.#value} * *`;
245
+ case "month":
246
+ return `0 0 1 */${this.#value} *`;
247
+ }
248
+ }
249
+ #parseTime(time) {
250
+ if (!/^\d{2}:\d{2}$/.test(time)) {
251
+ throw new TypeError(
252
+ `Invalid time "${time}". Expected HH:mm.`
253
+ );
254
+ }
255
+ const parts = time.split(":");
256
+ const hour = Number(parts[0]);
257
+ const minute = Number(parts[1]);
258
+ if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {
259
+ throw new RangeError(
260
+ `Invalid time "${time}".`
261
+ );
262
+ }
263
+ return [hour, minute];
264
+ }
265
+ };
266
+ var Schedule = class {
267
+ static every(value = 1) {
268
+ return new ScheduleBuilder(value);
269
+ }
270
+ static at(time) {
271
+ return new ScheduleBuilder().at(time);
272
+ }
273
+ static weekday(weekday, time) {
274
+ return new ScheduleBuilder().weekdayAt(
275
+ weekday,
276
+ time
277
+ );
278
+ }
279
+ static weekdaysAt(time) {
280
+ return new ScheduleBuilder().weekdaysAt(time);
281
+ }
282
+ static weekendsAt(time) {
283
+ return new ScheduleBuilder().weekendsAt(time);
284
+ }
285
+ };
286
+ export {
287
+ Cron,
288
+ QuikCron,
289
+ Schedule
290
+ };
291
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cron/cron.ts","../../src/cron/exceptions.ts","../../src/core/time.ts","../../src/cron/schedule.ts"],"sourcesContent":["import cron from \"node-cron\";\r\nimport { type ScheduledTask } from \"node-cron\";\r\n\r\nimport {\r\n CronTaskAlreadyExistsError,\r\n CronInvalidScheduleError,\r\n CronInvalidTimeZoneError,\r\n CronTaskExecutionError,\r\n} from \"./exceptions.js\";\r\n\r\nimport { isValidTimeZone } from \"../core/time.js\";\r\nimport type { CronConfig, CronTask, PartialCronConfig } from \"./types.js\";\r\n\r\n// Default configuration \r\nconst defaultConfig: CronConfig = {\r\n language: \"en\",\r\n};\r\n\r\n// Cron Class\r\nclass QuikCron {\r\n private tasks = new Map<string, CronTask>();\r\n private jobs = new Map<string, ScheduledTask>();\r\n\r\n #config: CronConfig = structuredClone(defaultConfig);\r\n\r\n constructor() {\r\n \r\n }\r\n\r\n add(task: CronTask): void {\r\n if (this.tasks.has(task.name)) {\r\n throw new CronTaskAlreadyExistsError(\r\n task.name\r\n );\r\n }\r\n\r\n if (!cron.validate(task.schedule)) {\r\n throw new CronInvalidScheduleError(\r\n task.schedule\r\n );\r\n }\r\n\r\n if (\r\n task.timezone &&\r\n !isValidTimeZone(task.timezone)\r\n ) {\r\n throw new CronInvalidTimeZoneError(\r\n task.timezone\r\n );\r\n }\r\n\r\n this.tasks.set(task.name, {\r\n ...task,\r\n });\r\n }\r\n\r\n remove(name: string): boolean {\r\n this.jobs.get(name)?.stop();\r\n this.jobs.delete(name);\r\n\r\n return this.tasks.delete(name);\r\n }\r\n\r\n has(name: string): boolean {\r\n return this.tasks.has(name);\r\n }\r\n\r\n get(name: string): CronTask | undefined {\r\n return this.tasks.get(name);\r\n }\r\n\r\n getTasks(): CronTask[] {\r\n return [...this.tasks.values()];\r\n }\r\n\r\n start(): void {\r\n for (const task of this.tasks.values()) {\r\n if (this.jobs.has(task.name)) {\r\n continue;\r\n }\r\n\r\n const timezone =\r\n task.timezone ?? this.#config.timeZone;\r\n\r\n const options = timezone\r\n ? { timezone }\r\n : {};\r\n\r\n const job = cron.schedule(\r\n task.schedule,\r\n async () => {\r\n try {\r\n await task.task();\r\n } catch (error) {\r\n const exception =\r\n new CronTaskExecutionError(\r\n task.name,\r\n error\r\n );\r\n\r\n this.#config.onError?.(exception);\r\n }\r\n },\r\n options\r\n );\r\n\r\n this.jobs.set(task.name, job);\r\n }\r\n }\r\n\r\n stop(): void {\r\n for (const job of this.jobs.values()) {\r\n job.stop();\r\n }\r\n\r\n this.jobs.clear();\r\n }\r\n\r\n config(): Readonly<CronConfig> {\r\n return Object.freeze(\r\n structuredClone(this.#config)\r\n );\r\n }\r\n\r\n setConfig(config: PartialCronConfig): void {\r\n if (\r\n config.timeZone &&\r\n !isValidTimeZone(config.timeZone)\r\n ) {\r\n throw new CronInvalidTimeZoneError(\r\n config.timeZone\r\n );\r\n }\r\n\r\n this.#config = {\r\n ...this.#config,\r\n ...config,\r\n };\r\n }\r\n}\r\n\r\nfunction Cron(): QuikCron {\r\n return new QuikCron();\r\n}\r\n\r\nexport { QuikCron, Cron };\r\n","class CronError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n\r\n this.name = new.target.name;\r\n\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n }\r\n}\r\n\r\nclass CronTaskAlreadyExistsError extends CronError {\r\n constructor(name: string) {\r\n super(`Cron task \"${name}\" already exists.`);\r\n }\r\n}\r\n\r\nclass CronTaskNotFoundError extends CronError {\r\n constructor(name: string) {\r\n super(`Cron task \"${name}\" was not found.`);\r\n }\r\n}\r\n\r\nclass CronInvalidScheduleError extends CronError {\r\n constructor(schedule: string) {\r\n super(`Invalid cron schedule: \"${schedule}\".`);\r\n }\r\n}\r\n\r\nclass CronInvalidTimeZoneError extends CronError {\r\n constructor(timeZone: string) {\r\n super(`Invalid time zone: \"${timeZone}\".`);\r\n }\r\n}\r\n\r\nclass CronTaskExecutionError extends CronError {\r\n constructor(\r\n name: string,\r\n cause?: unknown\r\n ) {\r\n super(`Cron task \"${name}\" failed to execute.`);\r\n\r\n if (cause !== undefined) {\r\n this.cause = cause;\r\n }\r\n }\r\n}\r\n\r\nexport {\r\n CronError,\r\n CronTaskAlreadyExistsError,\r\n CronTaskNotFoundError,\r\n CronInvalidScheduleError,\r\n CronInvalidTimeZoneError,\r\n CronTaskExecutionError,\r\n};\r\n","function dateToString(date: Date, format: string, timeZone?: string): string {\r\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\r\n timeZone,\r\n year: \"numeric\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n second: \"2-digit\",\r\n hourCycle: \"h23\",\r\n });\r\n\r\n const parts = formatter.formatToParts(date);\r\n const values = Object.fromEntries(\r\n parts\r\n .filter(({ type }) => type !== \"literal\")\r\n .map(({ type, value }) => [type, value])\r\n );\r\n\r\n return format.replace(/(YYYY|MM|DD|hh|mm|ss)/g, (match): string => {\r\n switch (match) {\r\n case \"YYYY\":\r\n return values.year || \"\";\r\n case \"MM\":\r\n return values.month || \"\";\r\n case \"DD\":\r\n return values.day || \"\";\r\n case \"hh\":\r\n return values.hour || \"\";\r\n case \"mm\":\r\n return values.minute || \"\";\r\n case \"ss\":\r\n return values.second || \"\";\r\n default:\r\n return match;\r\n }\r\n });\r\n}\r\n\r\nfunction isValidTimeZone(timeZone: string): boolean {\r\n try {\r\n new Intl.DateTimeFormat(\"en-US\", {\r\n timeZone,\r\n });\r\n\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport { dateToString, isValidTimeZone };\r\n","type Weekday =\r\n | \"sunday\"\r\n | \"monday\"\r\n | \"tuesday\"\r\n | \"wednesday\"\r\n | \"thursday\"\r\n | \"friday\"\r\n | \"saturday\";\r\n\r\ntype ScheduleUnit =\r\n | \"second\"\r\n | \"minute\"\r\n | \"hour\"\r\n | \"day\"\r\n | \"month\";\r\n\r\nconst weekdays: Record<Weekday, number> = {\r\n sunday: 0,\r\n monday: 1,\r\n tuesday: 2,\r\n wednesday: 3,\r\n thursday: 4,\r\n friday: 5,\r\n saturday: 6,\r\n};\r\n\r\nexport class ScheduleBuilder {\r\n #value: number;\r\n\r\n constructor(value = 1) {\r\n if (!Number.isInteger(value) || value < 1) {\r\n throw new RangeError(\r\n \"Schedule value must be a positive integer.\"\r\n );\r\n }\r\n\r\n this.#value = value;\r\n }\r\n\r\n seconds(): string {\r\n return this.#interval(\"second\");\r\n }\r\n\r\n second(): string {\r\n return this.seconds();\r\n }\r\n\r\n minutes(): string {\r\n return this.#interval(\"minute\");\r\n }\r\n\r\n minute(): string {\r\n return this.minutes();\r\n }\r\n\r\n hours(): string {\r\n return this.#interval(\"hour\");\r\n }\r\n\r\n hour(): string {\r\n return this.hours();\r\n }\r\n\r\n days(): string {\r\n return this.#interval(\"day\");\r\n }\r\n\r\n day(): string {\r\n return this.days();\r\n }\r\n\r\n months(): string {\r\n return this.#interval(\"month\");\r\n }\r\n\r\n month(): string {\r\n return this.months();\r\n }\r\n\r\n dayAt(time: string): string {\r\n const [hour, minute] = this.#parseTime(time);\r\n\r\n return `${minute} ${hour} * * *`;\r\n }\r\n\r\n at(time: string): string {\r\n return this.dayAt(time);\r\n }\r\n\r\n weekdayAt(\r\n weekday: Weekday,\r\n time: string\r\n ): string {\r\n const [hour, minute] = this.#parseTime(time);\r\n\r\n return `${minute} ${hour} * * ${weekdays[weekday]}`;\r\n }\r\n\r\n sundayAt(time: string): string {\r\n return this.weekdayAt(\"sunday\", time);\r\n }\r\n\r\n mondayAt(time: string): string {\r\n return this.weekdayAt(\"monday\", time);\r\n }\r\n\r\n tuesdayAt(time: string): string {\r\n return this.weekdayAt(\"tuesday\", time);\r\n }\r\n\r\n wednesdayAt(time: string): string {\r\n return this.weekdayAt(\"wednesday\", time);\r\n }\r\n\r\n thursdayAt(time: string): string {\r\n return this.weekdayAt(\"thursday\", time);\r\n }\r\n\r\n fridayAt(time: string): string {\r\n return this.weekdayAt(\"friday\", time);\r\n }\r\n\r\n saturdayAt(time: string): string {\r\n return this.weekdayAt(\"saturday\", time);\r\n }\r\n\r\n weekdaysAt(time: string): string {\r\n const [hour, minute] = this.#parseTime(time);\r\n\r\n return `${minute} ${hour} * * 1-5`;\r\n }\r\n\r\n weekendsAt(time: string): string {\r\n const [hour, minute] = this.#parseTime(time);\r\n\r\n return `${minute} ${hour} * * 0,6`;\r\n }\r\n\r\n #interval(unit: ScheduleUnit): string {\r\n switch (unit) {\r\n case \"second\":\r\n return `*/${this.#value} * * * * *`;\r\n\r\n case \"minute\":\r\n return `*/${this.#value} * * * *`;\r\n\r\n case \"hour\":\r\n return `0 */${this.#value} * * *`;\r\n\r\n case \"day\":\r\n return `0 0 */${this.#value} * *`;\r\n\r\n case \"month\":\r\n return `0 0 1 */${this.#value} *`;\r\n }\r\n }\r\n\r\n #parseTime(time: string): [number, number] {\r\n if (!/^\\d{2}:\\d{2}$/.test(time)) {\r\n throw new TypeError(\r\n `Invalid time \"${time}\". Expected HH:mm.`\r\n );\r\n }\r\n\r\n const parts = time.split(\":\");\r\n\r\n const hour = Number(parts[0]);\r\n const minute = Number(parts[1]);\r\n\r\n if (\r\n hour < 0 ||\r\n hour > 23 ||\r\n minute < 0 ||\r\n minute > 59\r\n ) {\r\n throw new RangeError(\r\n `Invalid time \"${time}\".`\r\n );\r\n }\r\n\r\n return [hour, minute];\r\n }\r\n}\r\n\r\nexport class Schedule {\r\n static every(value = 1): ScheduleBuilder {\r\n return new ScheduleBuilder(value);\r\n }\r\n\r\n static at(time: string): string {\r\n return new ScheduleBuilder().at(time);\r\n }\r\n\r\n static weekday(weekday: Weekday, time: string): string {\r\n return new ScheduleBuilder().weekdayAt(\r\n weekday,\r\n time\r\n );\r\n }\r\n\r\n static weekdaysAt(time: string): string {\r\n return new ScheduleBuilder().weekdaysAt(time);\r\n }\r\n\r\n static weekendsAt(time: string): string {\r\n return new ScheduleBuilder().weekendsAt(time);\r\n }\r\n}"],"mappings":"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","names":[]}
@@ -0,0 +1,38 @@
1
+ declare class CronError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ declare class CronTaskExecutionError extends CronError {
5
+ constructor(name: string, cause?: unknown);
6
+ }
7
+
8
+ type CronTask = {
9
+ name: string;
10
+ schedule: string;
11
+ task: () => void | Promise<void>;
12
+ timezone?: string;
13
+ };
14
+ type CronConfig = {
15
+ language: Language;
16
+ timeZone?: string;
17
+ onError?: (error: CronTaskExecutionError) => void;
18
+ };
19
+ type PartialCronConfig = Partial<CronConfig>;
20
+
21
+ declare class QuikCron {
22
+ #private;
23
+ private tasks;
24
+ private jobs;
25
+ constructor();
26
+ add(task: CronTask): void;
27
+ remove(name: string): boolean;
28
+ has(name: string): boolean;
29
+ get(name: string): CronTask | undefined;
30
+ getTasks(): CronTask[];
31
+ start(): void;
32
+ stop(): void;
33
+ config(): Readonly<CronConfig>;
34
+ setConfig(config: PartialCronConfig): void;
35
+ }
36
+ declare function Cron(): QuikCron;
37
+
38
+ export { Cron as C, QuikCron as Q };
@@ -0,0 +1,38 @@
1
+ declare class CronError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ declare class CronTaskExecutionError extends CronError {
5
+ constructor(name: string, cause?: unknown);
6
+ }
7
+
8
+ type CronTask = {
9
+ name: string;
10
+ schedule: string;
11
+ task: () => void | Promise<void>;
12
+ timezone?: string;
13
+ };
14
+ type CronConfig = {
15
+ language: Language;
16
+ timeZone?: string;
17
+ onError?: (error: CronTaskExecutionError) => void;
18
+ };
19
+ type PartialCronConfig = Partial<CronConfig>;
20
+
21
+ declare class QuikCron {
22
+ #private;
23
+ private tasks;
24
+ private jobs;
25
+ constructor();
26
+ add(task: CronTask): void;
27
+ remove(name: string): boolean;
28
+ has(name: string): boolean;
29
+ get(name: string): CronTask | undefined;
30
+ getTasks(): CronTask[];
31
+ start(): void;
32
+ stop(): void;
33
+ config(): Readonly<CronConfig>;
34
+ setConfig(config: PartialCronConfig): void;
35
+ }
36
+ declare function Cron(): QuikCron;
37
+
38
+ export { Cron as C, QuikCron as Q };