@warlock.js/scheduler 4.0.48 → 4.0.59
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/cjs/cron-parser.d.ts +98 -0
- package/cjs/cron-parser.d.ts.map +1 -0
- package/cjs/cron-parser.js +193 -0
- package/cjs/cron-parser.js.map +1 -0
- package/cjs/index.d.ts +44 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +1 -34
- package/cjs/index.js.map +1 -1
- package/cjs/job.d.ts +332 -0
- package/cjs/job.d.ts.map +1 -0
- package/cjs/job.js +611 -0
- package/cjs/job.js.map +1 -0
- package/cjs/scheduler.d.ts +182 -0
- package/cjs/scheduler.d.ts.map +1 -0
- package/cjs/scheduler.js +313 -0
- package/cjs/scheduler.js.map +1 -0
- package/cjs/types.d.ts +63 -0
- package/cjs/types.d.ts.map +1 -0
- package/cjs/utils.d.ts +3 -0
- package/cjs/utils.d.ts.map +1 -0
- package/esm/cron-parser.d.ts +98 -0
- package/esm/cron-parser.d.ts.map +1 -0
- package/esm/cron-parser.js +193 -0
- package/esm/cron-parser.js.map +1 -0
- package/esm/index.d.ts +44 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +1 -5
- package/esm/index.js.map +1 -1
- package/esm/job.d.ts +332 -0
- package/esm/job.d.ts.map +1 -0
- package/esm/job.js +611 -0
- package/esm/job.js.map +1 -0
- package/esm/scheduler.d.ts +182 -0
- package/esm/scheduler.d.ts.map +1 -0
- package/esm/scheduler.js +313 -0
- package/esm/scheduler.js.map +1 -0
- package/esm/types.d.ts +63 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/utils.d.ts +3 -0
- package/esm/utils.d.ts.map +1 -0
- package/package.json +27 -40
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { type Dayjs } from "dayjs";
|
|
2
|
+
/**
|
|
3
|
+
* Parsed cron expression fields
|
|
4
|
+
*/
|
|
5
|
+
export type CronFields = {
|
|
6
|
+
/** Minutes (0-59) */
|
|
7
|
+
minutes: number[];
|
|
8
|
+
/** Hours (0-23) */
|
|
9
|
+
hours: number[];
|
|
10
|
+
/** Days of month (1-31) */
|
|
11
|
+
daysOfMonth: number[];
|
|
12
|
+
/** Months (1-12) */
|
|
13
|
+
months: number[];
|
|
14
|
+
/** Days of week (0-6, Sunday = 0) */
|
|
15
|
+
daysOfWeek: number[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Cron expression parser
|
|
19
|
+
*
|
|
20
|
+
* Supports standard 5-field cron expressions:
|
|
21
|
+
* ```
|
|
22
|
+
* ┌───────────── minute (0-59)
|
|
23
|
+
* │ ┌───────────── hour (0-23)
|
|
24
|
+
* │ │ ┌───────────── day of month (1-31)
|
|
25
|
+
* │ │ │ ┌───────────── month (1-12)
|
|
26
|
+
* │ │ │ │ ┌───────────── day of week (0-6, Sunday = 0)
|
|
27
|
+
* │ │ │ │ │
|
|
28
|
+
* * * * * *
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* Supports:
|
|
32
|
+
* - `*` - any value
|
|
33
|
+
* - `5` - specific value
|
|
34
|
+
* - `1,3,5` - list of values
|
|
35
|
+
* - `1-5` - range of values
|
|
36
|
+
* - `* /5` - step values (every 5)
|
|
37
|
+
* - `1-10/2` - range with step
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const parser = new CronParser("0 9 * * 1-5"); // 9 AM weekdays
|
|
42
|
+
* const nextRun = parser.nextRun();
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare class CronParser {
|
|
46
|
+
private readonly _expression;
|
|
47
|
+
private readonly _fields;
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new CronParser instance
|
|
50
|
+
*
|
|
51
|
+
* @param expression - Standard 5-field cron expression
|
|
52
|
+
* @throws Error if expression is invalid
|
|
53
|
+
*/
|
|
54
|
+
constructor(_expression: string);
|
|
55
|
+
/**
|
|
56
|
+
* Get the parsed cron fields
|
|
57
|
+
*/
|
|
58
|
+
get fields(): Readonly<CronFields>;
|
|
59
|
+
/**
|
|
60
|
+
* Get the original expression
|
|
61
|
+
*/
|
|
62
|
+
get expression(): string;
|
|
63
|
+
/**
|
|
64
|
+
* Calculate the next run time from a given date
|
|
65
|
+
*
|
|
66
|
+
* @param from - Starting date (defaults to now)
|
|
67
|
+
* @returns Next run time as Dayjs
|
|
68
|
+
*/
|
|
69
|
+
nextRun(from?: Dayjs): Dayjs;
|
|
70
|
+
/**
|
|
71
|
+
* Check if a given date matches the cron expression
|
|
72
|
+
*
|
|
73
|
+
* @param date - Date to check
|
|
74
|
+
* @returns true if the date matches
|
|
75
|
+
*/
|
|
76
|
+
matches(date: Dayjs): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Parse a cron expression into fields
|
|
79
|
+
*/
|
|
80
|
+
private _parse;
|
|
81
|
+
/**
|
|
82
|
+
* Parse a single cron field
|
|
83
|
+
*
|
|
84
|
+
* @param field - Field value (e.g., "*", "5", "1-5", "* /2", "1,3,5")
|
|
85
|
+
* @param min - Minimum allowed value
|
|
86
|
+
* @param max - Maximum allowed value
|
|
87
|
+
* @returns Array of matching values
|
|
88
|
+
*/
|
|
89
|
+
private _parseField;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Parse a cron expression string
|
|
93
|
+
*
|
|
94
|
+
* @param expression - Cron expression (5 fields)
|
|
95
|
+
* @returns CronParser instance
|
|
96
|
+
*/
|
|
97
|
+
export declare function parseCron(expression: string): CronParser;
|
|
98
|
+
//# sourceMappingURL=cron-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-parser.d.ts","sourceRoot":"","sources":["../src/cron-parser.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,qBAAqB;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,UAAU;IASF,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IAErC;;;;;OAKG;gBACiC,WAAW,EAAE,MAAM;IAIvD;;OAEG;IACH,IAAW,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,CAExC;IAED;;OAEG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;;;;OAKG;IACI,OAAO,CAAC,IAAI,GAAE,KAAe,GAAG,KAAK;IA+C5C;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO;IAUpC;;OAEG;IACH,OAAO,CAAC,MAAM;IAoBd;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CA2DpB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAExD"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
'use strict';var dayjs=require('dayjs');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var dayjs__default=/*#__PURE__*/_interopDefault(dayjs);/**
|
|
2
|
+
* Cron expression parser
|
|
3
|
+
*
|
|
4
|
+
* Supports standard 5-field cron expressions:
|
|
5
|
+
* ```
|
|
6
|
+
* ┌───────────── minute (0-59)
|
|
7
|
+
* │ ┌───────────── hour (0-23)
|
|
8
|
+
* │ │ ┌───────────── day of month (1-31)
|
|
9
|
+
* │ │ │ ┌───────────── month (1-12)
|
|
10
|
+
* │ │ │ │ ┌───────────── day of week (0-6, Sunday = 0)
|
|
11
|
+
* │ │ │ │ │
|
|
12
|
+
* * * * * *
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Supports:
|
|
16
|
+
* - `*` - any value
|
|
17
|
+
* - `5` - specific value
|
|
18
|
+
* - `1,3,5` - list of values
|
|
19
|
+
* - `1-5` - range of values
|
|
20
|
+
* - `* /5` - step values (every 5)
|
|
21
|
+
* - `1-10/2` - range with step
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const parser = new CronParser("0 9 * * 1-5"); // 9 AM weekdays
|
|
26
|
+
* const nextRun = parser.nextRun();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
class CronParser {
|
|
30
|
+
_expression;
|
|
31
|
+
_fields;
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new CronParser instance
|
|
34
|
+
*
|
|
35
|
+
* @param expression - Standard 5-field cron expression
|
|
36
|
+
* @throws Error if expression is invalid
|
|
37
|
+
*/
|
|
38
|
+
constructor(_expression) {
|
|
39
|
+
this._expression = _expression;
|
|
40
|
+
this._fields = this._parse(_expression);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the parsed cron fields
|
|
44
|
+
*/
|
|
45
|
+
get fields() {
|
|
46
|
+
return this._fields;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the original expression
|
|
50
|
+
*/
|
|
51
|
+
get expression() {
|
|
52
|
+
return this._expression;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Calculate the next run time from a given date
|
|
56
|
+
*
|
|
57
|
+
* @param from - Starting date (defaults to now)
|
|
58
|
+
* @returns Next run time as Dayjs
|
|
59
|
+
*/
|
|
60
|
+
nextRun(from = dayjs__default.default()) {
|
|
61
|
+
let date = from.add(1, "minute").second(0).millisecond(0);
|
|
62
|
+
// Maximum iterations to prevent infinite loops
|
|
63
|
+
const maxIterations = 366 * 24 * 60; // 1 year of minutes
|
|
64
|
+
let iterations = 0;
|
|
65
|
+
while (iterations < maxIterations) {
|
|
66
|
+
iterations++;
|
|
67
|
+
// Check month
|
|
68
|
+
if (!this._fields.months.includes(date.month() + 1)) {
|
|
69
|
+
date = date.add(1, "month").date(1).hour(0).minute(0);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Check day of month
|
|
73
|
+
if (!this._fields.daysOfMonth.includes(date.date())) {
|
|
74
|
+
date = date.add(1, "day").hour(0).minute(0);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Check day of week
|
|
78
|
+
if (!this._fields.daysOfWeek.includes(date.day())) {
|
|
79
|
+
date = date.add(1, "day").hour(0).minute(0);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// Check hour
|
|
83
|
+
if (!this._fields.hours.includes(date.hour())) {
|
|
84
|
+
date = date.add(1, "hour").minute(0);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Check minute
|
|
88
|
+
if (!this._fields.minutes.includes(date.minute())) {
|
|
89
|
+
date = date.add(1, "minute");
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// All fields match!
|
|
93
|
+
return date;
|
|
94
|
+
}
|
|
95
|
+
throw new Error(`Could not find next run time for cron expression: ${this._expression}`);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if a given date matches the cron expression
|
|
99
|
+
*
|
|
100
|
+
* @param date - Date to check
|
|
101
|
+
* @returns true if the date matches
|
|
102
|
+
*/
|
|
103
|
+
matches(date) {
|
|
104
|
+
return (this._fields.minutes.includes(date.minute()) &&
|
|
105
|
+
this._fields.hours.includes(date.hour()) &&
|
|
106
|
+
this._fields.daysOfMonth.includes(date.date()) &&
|
|
107
|
+
this._fields.months.includes(date.month() + 1) &&
|
|
108
|
+
this._fields.daysOfWeek.includes(date.day()));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Parse a cron expression into fields
|
|
112
|
+
*/
|
|
113
|
+
_parse(expression) {
|
|
114
|
+
const parts = expression.trim().split(/\s+/);
|
|
115
|
+
if (parts.length !== 5) {
|
|
116
|
+
throw new Error(`Invalid cron expression: "${expression}". Expected 5 fields (minute hour day month weekday).`);
|
|
117
|
+
}
|
|
118
|
+
const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;
|
|
119
|
+
return {
|
|
120
|
+
minutes: this._parseField(minute, 0, 59),
|
|
121
|
+
hours: this._parseField(hour, 0, 23),
|
|
122
|
+
daysOfMonth: this._parseField(dayOfMonth, 1, 31),
|
|
123
|
+
months: this._parseField(month, 1, 12),
|
|
124
|
+
daysOfWeek: this._parseField(dayOfWeek, 0, 6),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Parse a single cron field
|
|
129
|
+
*
|
|
130
|
+
* @param field - Field value (e.g., "*", "5", "1-5", "* /2", "1,3,5")
|
|
131
|
+
* @param min - Minimum allowed value
|
|
132
|
+
* @param max - Maximum allowed value
|
|
133
|
+
* @returns Array of matching values
|
|
134
|
+
*/
|
|
135
|
+
_parseField(field, min, max) {
|
|
136
|
+
const values = new Set();
|
|
137
|
+
// Handle lists (e.g., "1,3,5")
|
|
138
|
+
const parts = field.split(",");
|
|
139
|
+
for (const part of parts) {
|
|
140
|
+
// Handle step values (e.g., "*/5" or "1-10/2")
|
|
141
|
+
const [range, stepStr] = part.split("/");
|
|
142
|
+
const step = stepStr ? parseInt(stepStr, 10) : 1;
|
|
143
|
+
if (isNaN(step) || step < 1) {
|
|
144
|
+
throw new Error(`Invalid step value in cron field: "${field}"`);
|
|
145
|
+
}
|
|
146
|
+
let rangeStart;
|
|
147
|
+
let rangeEnd;
|
|
148
|
+
if (range === "*") {
|
|
149
|
+
// Wildcard - all values
|
|
150
|
+
rangeStart = min;
|
|
151
|
+
rangeEnd = max;
|
|
152
|
+
}
|
|
153
|
+
else if (range.includes("-")) {
|
|
154
|
+
// Range (e.g., "1-5")
|
|
155
|
+
const [startStr, endStr] = range.split("-");
|
|
156
|
+
rangeStart = parseInt(startStr, 10);
|
|
157
|
+
rangeEnd = parseInt(endStr, 10);
|
|
158
|
+
if (isNaN(rangeStart) || isNaN(rangeEnd)) {
|
|
159
|
+
throw new Error(`Invalid range in cron field: "${field}"`);
|
|
160
|
+
}
|
|
161
|
+
if (rangeStart < min || rangeEnd > max || rangeStart > rangeEnd) {
|
|
162
|
+
throw new Error(`Range out of bounds in cron field: "${field}" (valid: ${min}-${max})`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Single value
|
|
167
|
+
const value = parseInt(range, 10);
|
|
168
|
+
if (isNaN(value)) {
|
|
169
|
+
throw new Error(`Invalid value in cron field: "${field}"`);
|
|
170
|
+
}
|
|
171
|
+
if (value < min || value > max) {
|
|
172
|
+
throw new Error(`Value out of bounds in cron field: "${field}" (valid: ${min}-${max})`);
|
|
173
|
+
}
|
|
174
|
+
rangeStart = value;
|
|
175
|
+
rangeEnd = value;
|
|
176
|
+
}
|
|
177
|
+
// Add values with step
|
|
178
|
+
for (let i = rangeStart; i <= rangeEnd; i += step) {
|
|
179
|
+
values.add(i);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return Array.from(values).sort((a, b) => a - b);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Parse a cron expression string
|
|
187
|
+
*
|
|
188
|
+
* @param expression - Cron expression (5 fields)
|
|
189
|
+
* @returns CronParser instance
|
|
190
|
+
*/
|
|
191
|
+
function parseCron(expression) {
|
|
192
|
+
return new CronParser(expression);
|
|
193
|
+
}exports.CronParser=CronParser;exports.parseCron=parseCron;//# sourceMappingURL=cron-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-parser.js","sources":["../src/cron-parser.ts"],"sourcesContent":[null],"names":["dayjs"],"mappings":"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"}
|
package/cjs/index.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @warlock.js/scheduler
|
|
3
|
+
*
|
|
4
|
+
* A production-ready job scheduler with cron-like functionality.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { Scheduler, job } from "@warlock.js/scheduler";
|
|
9
|
+
*
|
|
10
|
+
* const scheduler = new Scheduler();
|
|
11
|
+
*
|
|
12
|
+
* // Add observability
|
|
13
|
+
* scheduler.on('job:error', (name, error) => console.error(`${name} failed:`, error));
|
|
14
|
+
*
|
|
15
|
+
* // Schedule jobs with fluent API
|
|
16
|
+
* scheduler.addJob(
|
|
17
|
+
* job("cleanup", async () => {
|
|
18
|
+
* await cleanupExpiredTokens();
|
|
19
|
+
* })
|
|
20
|
+
* .daily()
|
|
21
|
+
* .at("03:00")
|
|
22
|
+
* .inTimezone("America/New_York")
|
|
23
|
+
* .preventOverlap()
|
|
24
|
+
* .retry(3, 1000)
|
|
25
|
+
* );
|
|
26
|
+
*
|
|
27
|
+
* // Or use cron expressions
|
|
28
|
+
* scheduler.addJob(
|
|
29
|
+
* job("reports", sendReports).cron("0 9 * * 1-5") // 9 AM weekdays
|
|
30
|
+
* );
|
|
31
|
+
*
|
|
32
|
+
* // Start and handle graceful shutdown
|
|
33
|
+
* scheduler.start();
|
|
34
|
+
* process.on('SIGTERM', () => scheduler.shutdown());
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @packageDocumentation
|
|
38
|
+
*/
|
|
39
|
+
export { CronParser, parseCron } from "./cron-parser";
|
|
40
|
+
export { Job, job } from "./job";
|
|
41
|
+
export { Scheduler, scheduler } from "./scheduler";
|
|
42
|
+
export type { CronFields } from "./cron-parser";
|
|
43
|
+
export type { Day, JobIntervals, JobResult, JobStatus, RetryConfig, SchedulerEvents, TimeType, } from "./types";
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,YAAY,EACV,GAAG,EACH,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,GACT,MAAM,SAAS,CAAC"}
|
package/cjs/index.js
CHANGED
|
@@ -1,34 +1 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var cronParser = require('./cron-parser');
|
|
4
|
-
var job = require('./job');
|
|
5
|
-
var scheduler = require('./scheduler');
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Object.defineProperty(exports, "CronParser", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: function () { return cronParser.CronParser; }
|
|
12
|
-
});
|
|
13
|
-
Object.defineProperty(exports, "parseCron", {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: function () { return cronParser.parseCron; }
|
|
16
|
-
});
|
|
17
|
-
Object.defineProperty(exports, "Job", {
|
|
18
|
-
enumerable: true,
|
|
19
|
-
get: function () { return job.Job; }
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(exports, "job", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () { return job.job; }
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(exports, "Scheduler", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function () { return scheduler.Scheduler; }
|
|
28
|
-
});
|
|
29
|
-
Object.defineProperty(exports, "scheduler", {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
get: function () { return scheduler.scheduler; }
|
|
32
|
-
});
|
|
33
|
-
//# sourceMappingURL=index.js.map
|
|
34
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
'use strict';var cronParser=require('./cron-parser.js'),job=require('./job.js'),scheduler=require('./scheduler.js');exports.CronParser=cronParser.CronParser;exports.parseCron=cronParser.parseCron;exports.Job=job.Job;exports.job=job.job;exports.Scheduler=scheduler.Scheduler;exports.scheduler=scheduler.scheduler;//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|