croner 4.2.3 → 4.3.0
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/README.md +22 -2
- package/dist/croner.cjs +71 -13
- package/dist/croner.min.js +1 -1
- package/dist/croner.min.js.map +1 -1
- package/dist/croner.min.mjs +1 -1
- package/dist/croner.min.mjs.map +1 -1
- package/package.json +1 -1
- package/src/croner.js +18 -8
- package/src/date.js +12 -4
- package/src/options.js +12 -1
- package/src/pattern.js +29 -0
- package/types/croner.d.ts +1 -1
- package/types/date.d.ts +3 -2
- package/types/options.d.ts +5 -0
- package/types/pattern.d.ts +1 -0
package/README.md
CHANGED
|
@@ -204,6 +204,7 @@ job.stop();
|
|
|
204
204
|
| timezone | undefined | String | Timezone in Europe/Stockholm format |
|
|
205
205
|
| startAt | undefined | String | ISO 8601 formatted datetime (2021-10-17T23:43:00)<br>in local or specified timezone |
|
|
206
206
|
| stopAt | undefined | String | ISO 8601 formatted datetime (2021-10-17T23:43:00)<br>in local or specified timezone |
|
|
207
|
+
| interval | 0 | Number | Minimum number of seconds between triggers. |
|
|
207
208
|
| paused | false | Boolean | If the job should be paused from start. |
|
|
208
209
|
| context | undefined | Any | Passed as the second parameter to triggered function |
|
|
209
210
|
| legacyMode | false | boolean | Combine day-of-month and day-of-week using OR, default is AND |
|
|
@@ -243,6 +244,17 @@ The expressions of Croner are very similar to the ones of Vixie Cron, with a few
|
|
|
243
244
|
|
|
244
245
|
**Note**: Weekday and month names are case insensitive. Both MON and mon works.
|
|
245
246
|
|
|
247
|
+
It is also possible to use the following "nicknames" as pattern.
|
|
248
|
+
|
|
249
|
+
| Nickname | Description |
|
|
250
|
+
| -------- | ----------- |
|
|
251
|
+
| \@yearly | Run once a year, ie. "0 0 1 1 *". |
|
|
252
|
+
| \@annually | Run once a year, ie. "0 0 1 1 *". |
|
|
253
|
+
| \@monthly | Run once a month, ie. "0 0 1 * *". |
|
|
254
|
+
| \@weekly | Run once a week, ie. "0 0 * * 0". |
|
|
255
|
+
| \@daily | Run once a day, ie. "0 0 * * *". |
|
|
256
|
+
| \@hourly | Run once an hour, ie. "0 * * * *". |
|
|
257
|
+
|
|
246
258
|
### Examples
|
|
247
259
|
|
|
248
260
|
#### Expressions
|
|
@@ -255,11 +267,19 @@ Cron('15-45/10 */5 1,2,3 ? JAN-MAR SAT', function () {
|
|
|
255
267
|
});
|
|
256
268
|
```
|
|
257
269
|
|
|
270
|
+
#### Interval
|
|
271
|
+
```javascript
|
|
272
|
+
// Trigger on specific interval combined with cron expression
|
|
273
|
+
Cron('* * * 7-16 * MON-FRI', { interval: 90 }, function () {
|
|
274
|
+
console.log('This will trigger every 90th second at 7-16 on mondays to fridays.');
|
|
275
|
+
});
|
|
276
|
+
```
|
|
277
|
+
|
|
258
278
|
#### Find dates
|
|
259
279
|
```javascript
|
|
260
280
|
// Find next month
|
|
261
|
-
const nextMonth = Cron("
|
|
262
|
-
nextSunday = Cron("
|
|
281
|
+
const nextMonth = Cron("@monthly").next(),
|
|
282
|
+
nextSunday = Cron("@weekly").next(),
|
|
263
283
|
nextSat29feb = Cron("0 0 0 29 2 6").next(),
|
|
264
284
|
nextSunLastOfMonth = Cron("0 0 0 L * 7").next();
|
|
265
285
|
|
package/dist/croner.cjs
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
* @property {boolean} [kill] - Job is about to be killed or killed
|
|
31
31
|
* @property {boolean} [catch] - Continue exection even if a unhandled error is thrown by triggered function
|
|
32
32
|
* @property {number} [maxRuns] - Maximum nuber of executions
|
|
33
|
+
* @property {number} [interval] - Minimum interval between executions, in seconds
|
|
33
34
|
* @property {string | Date} [startAt] - When to start running
|
|
34
35
|
* @property {string | Date} [stopAt] - When to stop running
|
|
35
36
|
* @property {string} [timezone] - Time zone in Europe/Stockholm format
|
|
@@ -56,6 +57,7 @@
|
|
|
56
57
|
options.paused = (options.paused === void 0) ? false : options.paused;
|
|
57
58
|
options.maxRuns = (options.maxRuns === void 0) ? Infinity : options.maxRuns;
|
|
58
59
|
options.catch = (options.catch === void 0) ? false : options.catch;
|
|
60
|
+
options.interval = (options.interval === void 0) ? 0 : parseInt(options.interval);
|
|
59
61
|
options.kill = false;
|
|
60
62
|
|
|
61
63
|
// startAt is set, validate it
|
|
@@ -64,7 +66,16 @@
|
|
|
64
66
|
}
|
|
65
67
|
if( options.stopAt ) {
|
|
66
68
|
options.stopAt = new CronDate(options.stopAt, options.timezone);
|
|
67
|
-
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Validate interval
|
|
72
|
+
if (options.interval !== null) {
|
|
73
|
+
if (isNaN(options.interval)) {
|
|
74
|
+
throw new Error("CronOptions: Supplied value for interval is not a number");
|
|
75
|
+
} else if (options.interval < 0) {
|
|
76
|
+
throw new Error("CronOptions: Supplied value for interval can not be negative");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
68
79
|
|
|
69
80
|
return options;
|
|
70
81
|
|
|
@@ -76,7 +87,7 @@
|
|
|
76
87
|
*
|
|
77
88
|
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected
|
|
78
89
|
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format.
|
|
79
|
-
|
|
90
|
+
*/
|
|
80
91
|
function CronDate (date, timezone) {
|
|
81
92
|
|
|
82
93
|
this.timezone = timezone;
|
|
@@ -184,13 +195,20 @@
|
|
|
184
195
|
* @return {CronDate|null} - Returns itself for chaining, or null if increment wasnt possible
|
|
185
196
|
*/
|
|
186
197
|
CronDate.prototype.increment = function (pattern, options, rerun) {
|
|
187
|
-
|
|
198
|
+
|
|
199
|
+
// Always add one second, or minimum interval
|
|
188
200
|
if (!rerun) {
|
|
189
|
-
|
|
201
|
+
if (options.interval > 1) {
|
|
202
|
+
this.seconds += options.interval;
|
|
203
|
+
} else {
|
|
204
|
+
this.seconds += 1;
|
|
205
|
+
}
|
|
190
206
|
}
|
|
191
207
|
|
|
192
|
-
this.
|
|
208
|
+
this.apply();
|
|
193
209
|
|
|
210
|
+
this.milliseconds = 0;
|
|
211
|
+
|
|
194
212
|
const
|
|
195
213
|
|
|
196
214
|
origTime = this.getTime(),
|
|
@@ -335,6 +353,7 @@
|
|
|
335
353
|
}
|
|
336
354
|
|
|
337
355
|
// If anything changed, recreate this CronDate and run again without incrementing
|
|
356
|
+
this.default = false;
|
|
338
357
|
if (origTime != this.getTime()) {
|
|
339
358
|
this.apply();
|
|
340
359
|
return this.increment(pattern, options, true);
|
|
@@ -490,6 +509,9 @@
|
|
|
490
509
|
throw new TypeError("CronPattern: Pattern has to be of type string.");
|
|
491
510
|
}
|
|
492
511
|
|
|
512
|
+
// Handle @yearly, @monthly etc
|
|
513
|
+
this.pattern = this.handleNicknames(this.pattern);
|
|
514
|
+
|
|
493
515
|
// Split configuration on whitespace
|
|
494
516
|
const parts = this.pattern.trim().replace(/\s+/g, " ").split(" ");
|
|
495
517
|
|
|
@@ -789,6 +811,32 @@
|
|
|
789
811
|
.replace(/dec/gi, "12");
|
|
790
812
|
};
|
|
791
813
|
|
|
814
|
+
/**
|
|
815
|
+
* Replace nicknames with actual cron patterns
|
|
816
|
+
* @private
|
|
817
|
+
*
|
|
818
|
+
* @param {string} pattern - Pattern, may contain nicknames, or not
|
|
819
|
+
*
|
|
820
|
+
* @returns {string} - Pattern, with cron expression insted of nicknames
|
|
821
|
+
*/
|
|
822
|
+
CronPattern.prototype.handleNicknames = function (pattern) {
|
|
823
|
+
// Replace textual representations of pattern
|
|
824
|
+
const cleanPattern = pattern.trim().toLowerCase();
|
|
825
|
+
if (cleanPattern === "@yearly" || cleanPattern === "@annually") {
|
|
826
|
+
return "0 0 1 1 *";
|
|
827
|
+
} else if (cleanPattern === "@monthly") {
|
|
828
|
+
return "0 0 1 * *";
|
|
829
|
+
} else if (cleanPattern === "@weekly") {
|
|
830
|
+
return "0 0 * * 0";
|
|
831
|
+
} else if (cleanPattern === "@daily") {
|
|
832
|
+
return "0 0 * * *";
|
|
833
|
+
} else if (cleanPattern === "@hourly") {
|
|
834
|
+
return "0 * * * *";
|
|
835
|
+
} else {
|
|
836
|
+
return pattern;
|
|
837
|
+
}
|
|
838
|
+
};
|
|
839
|
+
|
|
792
840
|
/* ------------------------------------------------------------------------------------
|
|
793
841
|
|
|
794
842
|
Croner - MIT License - Hexagon <github.com/Hexagon>
|
|
@@ -887,7 +935,6 @@
|
|
|
887
935
|
* @returns {Date | null} - Next run time
|
|
888
936
|
*/
|
|
889
937
|
Cron.prototype.next = function (prev) {
|
|
890
|
-
prev = new CronDate(prev, this.options.timezone);
|
|
891
938
|
const next = this._next(prev);
|
|
892
939
|
return next ? next.getDate() : null;
|
|
893
940
|
};
|
|
@@ -900,8 +947,7 @@
|
|
|
900
947
|
* @returns {Date[]} - Next n run times
|
|
901
948
|
*/
|
|
902
949
|
Cron.prototype.enumerate = function (n, previous) {
|
|
903
|
-
|
|
904
|
-
|
|
950
|
+
const enumeration = [];
|
|
905
951
|
while(n-- && (previous = this.next(previous))) {
|
|
906
952
|
enumeration.push(previous);
|
|
907
953
|
}
|
|
@@ -935,12 +981,17 @@
|
|
|
935
981
|
* Returns number of milliseconds to next run
|
|
936
982
|
* @public
|
|
937
983
|
*
|
|
938
|
-
* @param {Date} [prev] - Starting date, defaults to now
|
|
984
|
+
* @param {Date} [prev] - Starting date, defaults to now - minimum interval
|
|
939
985
|
* @returns {number | null}
|
|
940
986
|
*/
|
|
941
987
|
Cron.prototype.msToNext = function (prev) {
|
|
942
|
-
|
|
988
|
+
|
|
989
|
+
// Get next run time
|
|
943
990
|
const next = this._next(prev);
|
|
991
|
+
|
|
992
|
+
// Default previous for millisecond calculation
|
|
993
|
+
prev = new CronDate(prev, this.options.timezone);
|
|
994
|
+
|
|
944
995
|
if( next ) {
|
|
945
996
|
return (next.getTime(true) - prev.getTime(true));
|
|
946
997
|
} else {
|
|
@@ -1025,6 +1076,7 @@
|
|
|
1025
1076
|
this.fn(this, this.options.context);
|
|
1026
1077
|
}
|
|
1027
1078
|
|
|
1079
|
+
// Set previous run to now
|
|
1028
1080
|
this.previousrun = new CronDate(void 0, this.options.timezone);
|
|
1029
1081
|
|
|
1030
1082
|
}
|
|
@@ -1048,13 +1100,19 @@
|
|
|
1048
1100
|
*/
|
|
1049
1101
|
Cron.prototype._next = function (prev) {
|
|
1050
1102
|
|
|
1103
|
+
const hasPreviousRun = prev ? true : false;
|
|
1104
|
+
|
|
1105
|
+
// Default previous
|
|
1106
|
+
prev = new CronDate(prev, this.options.timezone);
|
|
1107
|
+
|
|
1051
1108
|
// Previous run should never be before startAt
|
|
1052
1109
|
if( this.options.startAt && prev && prev.getTime(true) < this.options.startAt.getTime(true) ) {
|
|
1053
1110
|
prev = this.options.startAt;
|
|
1054
1111
|
}
|
|
1055
|
-
|
|
1056
|
-
// Calculate next run according to pattern or one-off timestamp
|
|
1057
|
-
const
|
|
1112
|
+
|
|
1113
|
+
// Calculate next run according to pattern or one-off timestamp, pass actual previous run to increment
|
|
1114
|
+
const
|
|
1115
|
+
nextRun = this.once || new CronDate(prev, this.options.timezone).increment(this.pattern, this.options, !hasPreviousRun);
|
|
1058
1116
|
|
|
1059
1117
|
if (this.once && this.once.getTime(true) <= prev.getTime(true)) {
|
|
1060
1118
|
return null;
|
package/dist/croner.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.Cron=factory())})(this,function(){"use strict";function CronTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronOptions(options){if(options===void 0){options={}}options.legacyMode=options.legacyMode===void 0?false:options.legacyMode;options.paused=options.paused===void 0?false:options.paused;options.maxRuns=options.maxRuns===void 0?Infinity:options.maxRuns;options.catch=options.catch===void 0?false:options.catch;options.kill=false;if(options.startAt){options.startAt=new CronDate(options.startAt,options.timezone)}if(options.stopAt){options.stopAt=new CronDate(options.stopAt,options.timezone)}return options}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){if(!isNaN(date)){this.fromDate(date)}else{throw new TypeError("CronDate: Invalid date passed as parameter to CronDate constructor")}}else if(date===void 0){this.fromDate(new Date)}else if(date&&typeof date==="string"){this.fromString(date)}else if(date instanceof CronDate){this.fromCronDate(date)}else{throw new TypeError("CronDate: Invalid type ("+typeof date+") passed as parameter to CronDate constructor")}}CronDate.prototype.fromDate=function(date){if(this.timezone){date=CronTZ(date,this.timezone)}this.milliseconds=date.getMilliseconds();this.seconds=date.getSeconds();this.minutes=date.getMinutes();this.hours=date.getHours();this.days=date.getDate();this.months=date.getMonth();this.years=date.getFullYear()};CronDate.prototype.fromCronDate=function(date){this.timezone=date.timezone;this.milliseconds=date.milliseconds;this.seconds=date.seconds;this.minutes=date.minutes;this.hours=date.hours;this.days=date.days;this.months=date.months;this.years=date.years};CronDate.prototype.apply=function(){const newDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);this.milliseconds=newDate.getMilliseconds();this.seconds=newDate.getSeconds();this.minutes=newDate.getMinutes();this.hours=newDate.getHours();this.days=newDate.getDate();this.months=newDate.getMonth();this.years=newDate.getFullYear()};CronDate.prototype.fromString=function(str){const parsedDate=this.parseISOLocal(str);if(isNaN(parsedDate)){throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.")}this.fromDate(parsedDate)};CronDate.prototype.increment=function(pattern,options,rerun){if(!rerun){this.seconds+=1}this.milliseconds=0;const origTime=this.getTime(),findNext=(target,pattern,offset,override)=>{const startPos=override===void 0?this[target]+offset:0;for(let i=startPos;i<pattern[target].length;i++){let match=pattern[target][i];if(target==="days"){let targetDate=this.getDate(true);targetDate.setDate(i-offset);if(pattern.lastDayOfMonth){let targetDateCopy=new Date(targetDate);targetDateCopy.setDate(i-offset+1);if(targetDateCopy.getMonth()!==this.months){match=true}}const dowMatch=pattern.daysOfWeek[targetDate.getDay()];if(options.legacyMode){if(!pattern.starDayOfWeek&&pattern.starDayOfMonth){match=dowMatch}else if(!pattern.starDayOfWeek&&!pattern.starDayOfMonth){match=match||dowMatch}}else{match=match&&dowMatch}}if(match){this[target]=i-offset;return true}}return false},resetPrevious=offset=>{while(doing+offset>=0){findNext(toDo[doing+offset][0],pattern,toDo[doing+offset][2],0);doing--}};const toDo=[["seconds","minutes",0],["minutes","hours",0],["hours","days",0],["days","months",-1],["months","years",0]];let doing=0;while(doing<5){let currentValue=this[toDo[doing][0]];if(!findNext(toDo[doing][0],pattern,toDo[doing][2])){this[toDo[doing][1]]++;resetPrevious(0)}else if(currentValue!==this[toDo[doing][0]]){resetPrevious(-1)}if(this.years>=4e3){return null}doing++}if(origTime!=this.getTime()){this.apply();return this.increment(pattern,options,true)}else{return this}};CronDate.prototype.getDate=function(internal){const targetDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);if(internal||!this.timezone){return targetDate}else{const offset=CronTZ(targetDate,this.timezone).getTime()-targetDate.getTime();return new Date(targetDate.getTime()-offset)}};CronDate.prototype.getTime=function(internal){return this.getDate(internal).getTime()};CronDate.prototype.parseISOLocal=function(dateTimeString){const dateTimeStringSplit=dateTimeString.split(/\D/);if(dateTimeStringSplit.length<6){return NaN}const year=parseInt(dateTimeStringSplit[0],10),month=parseInt(dateTimeStringSplit[1],10),day=parseInt(dateTimeStringSplit[2],10),hour=parseInt(dateTimeStringSplit[3],10),minute=parseInt(dateTimeStringSplit[4],10),second=parseInt(dateTimeStringSplit[5],10);if(isNaN(year)||isNaN(month)||isNaN(day)||isNaN(hour)||isNaN(minute)||isNaN(second)){return NaN}else{let generatedDate;if(dateTimeString.indexOf("Z")>0){generatedDate=new Date(Date.UTC(year,month-1,day,hour,minute,second));if(year==generatedDate.getUTCFullYear()&&month==generatedDate.getUTCMonth()+1&&day==generatedDate.getUTCDate()&&hour==generatedDate.getUTCHours()&&minute==generatedDate.getUTCMinutes()&&second==generatedDate.getUTCSeconds()){return generatedDate}else{return NaN}}else{generatedDate=new Date(year,month-1,day,hour,minute,second);if(year==generatedDate.getFullYear()&&month==generatedDate.getMonth()+1&&day==generatedDate.getDate()&&hour==generatedDate.getHours()&&minute==generatedDate.getMinutes()&&second==generatedDate.getSeconds()){return generatedDate}else{return NaN}}}};function CronPattern(pattern,timezone){this.pattern=pattern;this.timezone=timezone;this.seconds=Array(60).fill(0);this.minutes=Array(60).fill(0);this.hours=Array(24).fill(0);this.days=Array(31).fill(0);this.months=Array(12).fill(0);this.daysOfWeek=Array(8).fill(0);this.lastDayOfMonth=false;this.starDayOfMonth=false;this.starDayOfWeek=false;this.parse()}CronPattern.prototype.parse=function(){if(!(typeof this.pattern==="string"||this.pattern.constructor===String)){throw new TypeError("CronPattern: Pattern has to be of type string.")}const parts=this.pattern.trim().replace(/\s+/g," ").split(" ");if(parts.length<5||parts.length>6){throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exacly five or six space separated parts required.")}if(parts.length===5){parts.unshift("0")}if(parts[3].indexOf("L")>=0){parts[3]=parts[3].replace("L","");this.lastDayOfMonth=true}if(parts[3].toUpperCase()=="*"){this.starDayOfMonth=true}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);if(parts[5].toUpperCase()=="*"){this.starDayOfWeek=true}let initDate=new CronDate(new Date,this.timezone).getDate(true);parts[0]=parts[0].replace("?",initDate.getSeconds());parts[1]=parts[1].replace("?",initDate.getMinutes());parts[2]=parts[2].replace("?",initDate.getHours());parts[3]=parts[3].replace("?",initDate.getDate());parts[4]=parts[4].replace("?",initDate.getMonth()+1);parts[5]=parts[5].replace("?",initDate.getDay());this.throwAtIllegalCharacters(parts);this.partToArray("seconds",parts[0],0);this.partToArray("minutes",parts[1],0);this.partToArray("hours",parts[2],0);this.partToArray("days",parts[3],-1);this.partToArray("months",parts[4],-1);this.partToArray("daysOfWeek",parts[5],0);if(this.daysOfWeek[7]){this.daysOfWeek[0]=1}};CronPattern.prototype.partToArray=function(type,conf,valueIndexOffset,recursed){const arr=this[type];if(conf==="*"){for(let i=0;i<arr.length;i++){arr[i]=1}return}const split=conf.split(",");if(split.length>1){for(let i=0;i<split.length;i++){this.partToArray(type,split[i],valueIndexOffset,true)}}else if(conf.indexOf("-")!==-1&&conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRangeWithStepping(conf,type,valueIndexOffset)}else if(conf.indexOf("-")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRange(conf,type,valueIndexOffset)}else if(conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleStepping(conf,type,valueIndexOffset)}else if(conf!==""){this.handleNumber(conf,type,valueIndexOffset)}};CronPattern.prototype.throwAtIllegalCharacters=function(parts){const reValidCron=/[^/*0-9,-]+/;for(let i=0;i<parts.length;i++){if(reValidCron.test(parts[i])){throw new TypeError("CronPattern: configuration entry "+i+" ("+parts[i]+") contains illegal characters.")}}};CronPattern.prototype.handleNumber=function(conf,type,valueIndexOffset){const i=parseInt(conf,10)+valueIndexOffset;if(isNaN(i)){throw new TypeError("CronPattern: "+type+" is not a number: '"+conf+"'")}if(i<0||i>=this[type].length){throw new TypeError("CronPattern: "+type+" value out of range: '"+conf+"'")}this[type][i]=1};CronPattern.prototype.handleRangeWithStepping=function(conf,type,valueIndexOffset){const matches=conf.match(/^(\d+)-(\d+)\/(\d+)$/);if(matches===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+conf+"'");let[,lower,upper,steps]=matches;lower=parseInt(lower,10)+valueIndexOffset;upper=parseInt(upper,10)+valueIndexOffset;steps=parseInt(steps,10);if(isNaN(lower))throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(upper))throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");if(lower<0||upper>=this[type].length)throw new TypeError("CronPattern: Value out of range: '"+conf+"'");if(lower>upper)throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'");for(let i=lower;i<=upper;i+=steps){this[type][i]=1}};CronPattern.prototype.handleRange=function(conf,type,valueIndexOffset){const split=conf.split("-");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal range: '"+conf+"'")}const lower=parseInt(split[0],10)+valueIndexOffset,upper=parseInt(split[1],10)+valueIndexOffset;if(isNaN(lower)){throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)")}else if(isNaN(upper)){throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)")}if(lower<0||upper>=this[type].length){throw new TypeError("CronPattern: Value out of range: '"+conf+"'")}if(lower>upper){throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'")}for(let i=lower;i<=upper;i++){this[type][i]=1}};CronPattern.prototype.handleStepping=function(conf,type){const split=conf.split("/");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+conf+"'")}let start=0;if(split[0]!=="*"){start=parseInt(split[0],10)}const steps=parseInt(split[1],10);if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");for(let i=start;i<this[type].length;i+=steps){this[type][i]=1}};CronPattern.prototype.replaceAlphaDays=function(conf){return conf.replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")};CronPattern.prototype.replaceAlphaMonths=function(conf){return conf.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")};const maxDelay=Math.pow(2,32-1)-1;function Cron(pattern,options,func){if(!(this instanceof Cron)){return new Cron(pattern,options,func)}if(typeof options==="function"){func=options;options=void 0}this.options=CronOptions(options);this.once=void 0;this.pattern=void 0;if(pattern&&(pattern instanceof Date||typeof pattern==="string"&&pattern.indexOf(":")>0)){this.once=new CronDate(pattern,this.options.timezone)}else{this.pattern=new CronPattern(pattern,this.options.timezone)}if(func!==void 0){this.fn=func;this.schedule()}return this}Cron.prototype.next=function(prev){prev=new CronDate(prev,this.options.timezone);const next=this._next(prev);return next?next.getDate():null};Cron.prototype.enumerate=function(n,previous){let enumeration=[];while(n--&&(previous=this.next(previous))){enumeration.push(previous)}return enumeration};Cron.prototype.running=function(){const msLeft=this.msToNext(this.previousrun);const running=!this.options.paused&&this.fn!==void 0;return msLeft!==null&&running};Cron.prototype.previous=function(){return this.previousrun?this.previousrun.getDate():null};Cron.prototype.msToNext=function(prev){prev=new CronDate(prev,this.options.timezone);const next=this._next(prev);if(next){return next.getTime(true)-prev.getTime(true)}else{return null}};Cron.prototype.stop=function(){this.options.kill=true;if(this.currentTimeout){clearTimeout(this.currentTimeout)}};Cron.prototype.pause=function(){return(this.options.paused=true)&&!this.options.kill};Cron.prototype.resume=function(){return!(this.options.paused=false)&&!this.options.kill};Cron.prototype.schedule=function(func){if(func&&this.fn){throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.")}else if(func){this.fn=func}let waitMs=this.msToNext(this.previousrun);if(waitMs===null)return this;if(waitMs>maxDelay){waitMs=maxDelay}this.currentTimeout=setTimeout(()=>{if(waitMs!==maxDelay&&!this.options.paused){this.options.maxRuns--;if(this.options.catch){try{this.fn(this,this.options.context)}catch(_e){}}else{this.fn(this,this.options.context)}this.previousrun=new CronDate(void 0,this.options.timezone)}this.schedule()},waitMs);return this};Cron.prototype._next=function(prev){if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=this.options.startAt}const nextRun=this.once||new CronDate(prev,this.options.timezone).increment(this.pattern,this.options);if(this.once&&this.once.getTime(true)<=prev.getTime(true)){return null}else if(nextRun===null||this.options.maxRuns<=0||this.options.kill||this.options.stopAt&&nextRun.getTime(true)>=this.options.stopAt.getTime(true)){return null}else{return nextRun}};return Cron});
|
|
1
|
+
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.Cron=factory())})(this,function(){"use strict";function CronTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronOptions(options){if(options===void 0){options={}}options.legacyMode=options.legacyMode===void 0?false:options.legacyMode;options.paused=options.paused===void 0?false:options.paused;options.maxRuns=options.maxRuns===void 0?Infinity:options.maxRuns;options.catch=options.catch===void 0?false:options.catch;options.interval=options.interval===void 0?0:parseInt(options.interval);options.kill=false;if(options.startAt){options.startAt=new CronDate(options.startAt,options.timezone)}if(options.stopAt){options.stopAt=new CronDate(options.stopAt,options.timezone)}if(options.interval!==null){if(isNaN(options.interval)){throw new Error("CronOptions: Supplied value for interval is not a number")}else if(options.interval<0){throw new Error("CronOptions: Supplied value for interval can not be negative")}}return options}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){if(!isNaN(date)){this.fromDate(date)}else{throw new TypeError("CronDate: Invalid date passed as parameter to CronDate constructor")}}else if(date===void 0){this.fromDate(new Date)}else if(date&&typeof date==="string"){this.fromString(date)}else if(date instanceof CronDate){this.fromCronDate(date)}else{throw new TypeError("CronDate: Invalid type ("+typeof date+") passed as parameter to CronDate constructor")}}CronDate.prototype.fromDate=function(date){if(this.timezone){date=CronTZ(date,this.timezone)}this.milliseconds=date.getMilliseconds();this.seconds=date.getSeconds();this.minutes=date.getMinutes();this.hours=date.getHours();this.days=date.getDate();this.months=date.getMonth();this.years=date.getFullYear()};CronDate.prototype.fromCronDate=function(date){this.timezone=date.timezone;this.milliseconds=date.milliseconds;this.seconds=date.seconds;this.minutes=date.minutes;this.hours=date.hours;this.days=date.days;this.months=date.months;this.years=date.years};CronDate.prototype.apply=function(){const newDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);this.milliseconds=newDate.getMilliseconds();this.seconds=newDate.getSeconds();this.minutes=newDate.getMinutes();this.hours=newDate.getHours();this.days=newDate.getDate();this.months=newDate.getMonth();this.years=newDate.getFullYear()};CronDate.prototype.fromString=function(str){const parsedDate=this.parseISOLocal(str);if(isNaN(parsedDate)){throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.")}this.fromDate(parsedDate)};CronDate.prototype.increment=function(pattern,options,rerun){if(!rerun){if(options.interval>1){this.seconds+=options.interval}else{this.seconds+=1}}this.apply();this.milliseconds=0;const origTime=this.getTime(),findNext=(target,pattern,offset,override)=>{const startPos=override===void 0?this[target]+offset:0;for(let i=startPos;i<pattern[target].length;i++){let match=pattern[target][i];if(target==="days"){let targetDate=this.getDate(true);targetDate.setDate(i-offset);if(pattern.lastDayOfMonth){let targetDateCopy=new Date(targetDate);targetDateCopy.setDate(i-offset+1);if(targetDateCopy.getMonth()!==this.months){match=true}}const dowMatch=pattern.daysOfWeek[targetDate.getDay()];if(options.legacyMode){if(!pattern.starDayOfWeek&&pattern.starDayOfMonth){match=dowMatch}else if(!pattern.starDayOfWeek&&!pattern.starDayOfMonth){match=match||dowMatch}}else{match=match&&dowMatch}}if(match){this[target]=i-offset;return true}}return false},resetPrevious=offset=>{while(doing+offset>=0){findNext(toDo[doing+offset][0],pattern,toDo[doing+offset][2],0);doing--}};const toDo=[["seconds","minutes",0],["minutes","hours",0],["hours","days",0],["days","months",-1],["months","years",0]];let doing=0;while(doing<5){let currentValue=this[toDo[doing][0]];if(!findNext(toDo[doing][0],pattern,toDo[doing][2])){this[toDo[doing][1]]++;resetPrevious(0)}else if(currentValue!==this[toDo[doing][0]]){resetPrevious(-1)}if(this.years>=4e3){return null}doing++}this.default=false;if(origTime!=this.getTime()){this.apply();return this.increment(pattern,options,true)}else{return this}};CronDate.prototype.getDate=function(internal){const targetDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);if(internal||!this.timezone){return targetDate}else{const offset=CronTZ(targetDate,this.timezone).getTime()-targetDate.getTime();return new Date(targetDate.getTime()-offset)}};CronDate.prototype.getTime=function(internal){return this.getDate(internal).getTime()};CronDate.prototype.parseISOLocal=function(dateTimeString){const dateTimeStringSplit=dateTimeString.split(/\D/);if(dateTimeStringSplit.length<6){return NaN}const year=parseInt(dateTimeStringSplit[0],10),month=parseInt(dateTimeStringSplit[1],10),day=parseInt(dateTimeStringSplit[2],10),hour=parseInt(dateTimeStringSplit[3],10),minute=parseInt(dateTimeStringSplit[4],10),second=parseInt(dateTimeStringSplit[5],10);if(isNaN(year)||isNaN(month)||isNaN(day)||isNaN(hour)||isNaN(minute)||isNaN(second)){return NaN}else{let generatedDate;if(dateTimeString.indexOf("Z")>0){generatedDate=new Date(Date.UTC(year,month-1,day,hour,minute,second));if(year==generatedDate.getUTCFullYear()&&month==generatedDate.getUTCMonth()+1&&day==generatedDate.getUTCDate()&&hour==generatedDate.getUTCHours()&&minute==generatedDate.getUTCMinutes()&&second==generatedDate.getUTCSeconds()){return generatedDate}else{return NaN}}else{generatedDate=new Date(year,month-1,day,hour,minute,second);if(year==generatedDate.getFullYear()&&month==generatedDate.getMonth()+1&&day==generatedDate.getDate()&&hour==generatedDate.getHours()&&minute==generatedDate.getMinutes()&&second==generatedDate.getSeconds()){return generatedDate}else{return NaN}}}};function CronPattern(pattern,timezone){this.pattern=pattern;this.timezone=timezone;this.seconds=Array(60).fill(0);this.minutes=Array(60).fill(0);this.hours=Array(24).fill(0);this.days=Array(31).fill(0);this.months=Array(12).fill(0);this.daysOfWeek=Array(8).fill(0);this.lastDayOfMonth=false;this.starDayOfMonth=false;this.starDayOfWeek=false;this.parse()}CronPattern.prototype.parse=function(){if(!(typeof this.pattern==="string"||this.pattern.constructor===String)){throw new TypeError("CronPattern: Pattern has to be of type string.")}this.pattern=this.handleNicknames(this.pattern);const parts=this.pattern.trim().replace(/\s+/g," ").split(" ");if(parts.length<5||parts.length>6){throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exacly five or six space separated parts required.")}if(parts.length===5){parts.unshift("0")}if(parts[3].indexOf("L")>=0){parts[3]=parts[3].replace("L","");this.lastDayOfMonth=true}if(parts[3].toUpperCase()=="*"){this.starDayOfMonth=true}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);if(parts[5].toUpperCase()=="*"){this.starDayOfWeek=true}let initDate=new CronDate(new Date,this.timezone).getDate(true);parts[0]=parts[0].replace("?",initDate.getSeconds());parts[1]=parts[1].replace("?",initDate.getMinutes());parts[2]=parts[2].replace("?",initDate.getHours());parts[3]=parts[3].replace("?",initDate.getDate());parts[4]=parts[4].replace("?",initDate.getMonth()+1);parts[5]=parts[5].replace("?",initDate.getDay());this.throwAtIllegalCharacters(parts);this.partToArray("seconds",parts[0],0);this.partToArray("minutes",parts[1],0);this.partToArray("hours",parts[2],0);this.partToArray("days",parts[3],-1);this.partToArray("months",parts[4],-1);this.partToArray("daysOfWeek",parts[5],0);if(this.daysOfWeek[7]){this.daysOfWeek[0]=1}};CronPattern.prototype.partToArray=function(type,conf,valueIndexOffset,recursed){const arr=this[type];if(conf==="*"){for(let i=0;i<arr.length;i++){arr[i]=1}return}const split=conf.split(",");if(split.length>1){for(let i=0;i<split.length;i++){this.partToArray(type,split[i],valueIndexOffset,true)}}else if(conf.indexOf("-")!==-1&&conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRangeWithStepping(conf,type,valueIndexOffset)}else if(conf.indexOf("-")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRange(conf,type,valueIndexOffset)}else if(conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleStepping(conf,type,valueIndexOffset)}else if(conf!==""){this.handleNumber(conf,type,valueIndexOffset)}};CronPattern.prototype.throwAtIllegalCharacters=function(parts){const reValidCron=/[^/*0-9,-]+/;for(let i=0;i<parts.length;i++){if(reValidCron.test(parts[i])){throw new TypeError("CronPattern: configuration entry "+i+" ("+parts[i]+") contains illegal characters.")}}};CronPattern.prototype.handleNumber=function(conf,type,valueIndexOffset){const i=parseInt(conf,10)+valueIndexOffset;if(isNaN(i)){throw new TypeError("CronPattern: "+type+" is not a number: '"+conf+"'")}if(i<0||i>=this[type].length){throw new TypeError("CronPattern: "+type+" value out of range: '"+conf+"'")}this[type][i]=1};CronPattern.prototype.handleRangeWithStepping=function(conf,type,valueIndexOffset){const matches=conf.match(/^(\d+)-(\d+)\/(\d+)$/);if(matches===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+conf+"'");let[,lower,upper,steps]=matches;lower=parseInt(lower,10)+valueIndexOffset;upper=parseInt(upper,10)+valueIndexOffset;steps=parseInt(steps,10);if(isNaN(lower))throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(upper))throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");if(lower<0||upper>=this[type].length)throw new TypeError("CronPattern: Value out of range: '"+conf+"'");if(lower>upper)throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'");for(let i=lower;i<=upper;i+=steps){this[type][i]=1}};CronPattern.prototype.handleRange=function(conf,type,valueIndexOffset){const split=conf.split("-");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal range: '"+conf+"'")}const lower=parseInt(split[0],10)+valueIndexOffset,upper=parseInt(split[1],10)+valueIndexOffset;if(isNaN(lower)){throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)")}else if(isNaN(upper)){throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)")}if(lower<0||upper>=this[type].length){throw new TypeError("CronPattern: Value out of range: '"+conf+"'")}if(lower>upper){throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'")}for(let i=lower;i<=upper;i++){this[type][i]=1}};CronPattern.prototype.handleStepping=function(conf,type){const split=conf.split("/");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+conf+"'")}let start=0;if(split[0]!=="*"){start=parseInt(split[0],10)}const steps=parseInt(split[1],10);if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");for(let i=start;i<this[type].length;i+=steps){this[type][i]=1}};CronPattern.prototype.replaceAlphaDays=function(conf){return conf.replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")};CronPattern.prototype.replaceAlphaMonths=function(conf){return conf.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")};CronPattern.prototype.handleNicknames=function(pattern){const cleanPattern=pattern.trim().toLowerCase();if(cleanPattern==="@yearly"||cleanPattern==="@annually"){return"0 0 1 1 *"}else if(cleanPattern==="@monthly"){return"0 0 1 * *"}else if(cleanPattern==="@weekly"){return"0 0 * * 0"}else if(cleanPattern==="@daily"){return"0 0 * * *"}else if(cleanPattern==="@hourly"){return"0 * * * *"}else{return pattern}};const maxDelay=Math.pow(2,32-1)-1;function Cron(pattern,options,func){if(!(this instanceof Cron)){return new Cron(pattern,options,func)}if(typeof options==="function"){func=options;options=void 0}this.options=CronOptions(options);this.once=void 0;this.pattern=void 0;if(pattern&&(pattern instanceof Date||typeof pattern==="string"&&pattern.indexOf(":")>0)){this.once=new CronDate(pattern,this.options.timezone)}else{this.pattern=new CronPattern(pattern,this.options.timezone)}if(func!==void 0){this.fn=func;this.schedule()}return this}Cron.prototype.next=function(prev){const next=this._next(prev);return next?next.getDate():null};Cron.prototype.enumerate=function(n,previous){const enumeration=[];while(n--&&(previous=this.next(previous))){enumeration.push(previous)}return enumeration};Cron.prototype.running=function(){const msLeft=this.msToNext(this.previousrun);const running=!this.options.paused&&this.fn!==void 0;return msLeft!==null&&running};Cron.prototype.previous=function(){return this.previousrun?this.previousrun.getDate():null};Cron.prototype.msToNext=function(prev){const next=this._next(prev);prev=new CronDate(prev,this.options.timezone);if(next){return next.getTime(true)-prev.getTime(true)}else{return null}};Cron.prototype.stop=function(){this.options.kill=true;if(this.currentTimeout){clearTimeout(this.currentTimeout)}};Cron.prototype.pause=function(){return(this.options.paused=true)&&!this.options.kill};Cron.prototype.resume=function(){return!(this.options.paused=false)&&!this.options.kill};Cron.prototype.schedule=function(func){if(func&&this.fn){throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.")}else if(func){this.fn=func}let waitMs=this.msToNext(this.previousrun);if(waitMs===null)return this;if(waitMs>maxDelay){waitMs=maxDelay}this.currentTimeout=setTimeout(()=>{if(waitMs!==maxDelay&&!this.options.paused){this.options.maxRuns--;if(this.options.catch){try{this.fn(this,this.options.context)}catch(_e){}}else{this.fn(this,this.options.context)}this.previousrun=new CronDate(void 0,this.options.timezone)}this.schedule()},waitMs);return this};Cron.prototype._next=function(prev){const hasPreviousRun=prev?true:false;prev=new CronDate(prev,this.options.timezone);if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=this.options.startAt}const nextRun=this.once||new CronDate(prev,this.options.timezone).increment(this.pattern,this.options,!hasPreviousRun);if(this.once&&this.once.getTime(true)<=prev.getTime(true)){return null}else if(nextRun===null||this.options.maxRuns<=0||this.options.kill||this.options.stopAt&&nextRun.getTime(true)>=this.options.stopAt.getTime(true)){return null}else{return nextRun}};return Cron});
|
package/dist/croner.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dist/croner.cjs"],"names":["global","factory","exports","module","define","amd","globalThis","self","Cron","this","CronTZ","date","tzString","Date","toLocaleString","timeZone","CronOptions","options","legacyMode","paused","maxRuns","Infinity","catch","kill","startAt","CronDate","timezone","stopAt","isNaN","fromDate","TypeError","fromString","fromCronDate","prototype","milliseconds","getMilliseconds","seconds","getSeconds","minutes","getMinutes","hours","getHours","days","getDate","months","getMonth","years","getFullYear","apply","newDate","str","parsedDate","parseISOLocal","increment","pattern","rerun","origTime","getTime","findNext","target","offset","override","startPos","let","i","length","match","targetDate","setDate","lastDayOfMonth","targetDateCopy","dowMatch","daysOfWeek","getDay","starDayOfWeek","starDayOfMonth","resetPrevious","doing","toDo","currentValue","internal","dateTimeString","dateTimeStringSplit","split","NaN","year","parseInt","month","day","hour","minute","second","generatedDate","indexOf","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","CronPattern","Array","fill","parse","constructor","String","parts","trim","replace","unshift","toUpperCase","replaceAlphaMonths","replaceAlphaDays","initDate","throwAtIllegalCharacters","partToArray","type","conf","valueIndexOffset","recursed","arr","Error","handleRangeWithStepping","handleRange","handleStepping","handleNumber","reValidCron","test","matches","lower","upper","steps","start","maxDelay","Math","pow","func","once","fn","schedule","next","prev","_next","enumerate","n","previous","enumeration","push","running","msLeft","msToNext","previousrun","stop","currentTimeout","clearTimeout","pause","resume","waitMs","setTimeout","context","_e","nextRun"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["dist/croner.cjs"],"names":["global","factory","exports","module","define","amd","globalThis","self","Cron","this","CronTZ","date","tzString","Date","toLocaleString","timeZone","CronOptions","options","legacyMode","paused","maxRuns","Infinity","catch","interval","parseInt","kill","startAt","CronDate","timezone","stopAt","isNaN","Error","fromDate","TypeError","fromString","fromCronDate","prototype","milliseconds","getMilliseconds","seconds","getSeconds","minutes","getMinutes","hours","getHours","days","getDate","months","getMonth","years","getFullYear","apply","newDate","str","parsedDate","parseISOLocal","increment","pattern","rerun","origTime","getTime","findNext","target","offset","override","startPos","let","i","length","match","targetDate","setDate","lastDayOfMonth","targetDateCopy","dowMatch","daysOfWeek","getDay","starDayOfWeek","starDayOfMonth","resetPrevious","doing","toDo","currentValue","default","internal","dateTimeString","dateTimeStringSplit","split","NaN","year","month","day","hour","minute","second","generatedDate","indexOf","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","CronPattern","Array","fill","parse","constructor","String","handleNicknames","parts","trim","replace","unshift","toUpperCase","replaceAlphaMonths","replaceAlphaDays","initDate","throwAtIllegalCharacters","partToArray","type","conf","valueIndexOffset","recursed","arr","handleRangeWithStepping","handleRange","handleStepping","handleNumber","reValidCron","test","matches","lower","upper","steps","start","cleanPattern","toLowerCase","maxDelay","Math","pow","func","once","fn","schedule","next","prev","_next","enumerate","n","previous","enumeration","push","running","msLeft","msToNext","previousrun","stop","currentTimeout","clearTimeout","pause","resume","waitMs","setTimeout","context","_e","hasPreviousRun","nextRun"],"mappings":"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"}
|
package/dist/croner.min.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function CronTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronOptions(options){if(options===void 0){options={}}options.legacyMode=options.legacyMode===void 0?false:options.legacyMode;options.paused=options.paused===void 0?false:options.paused;options.maxRuns=options.maxRuns===void 0?Infinity:options.maxRuns;options.catch=options.catch===void 0?false:options.catch;options.kill=false;if(options.startAt){options.startAt=new CronDate(options.startAt,options.timezone)}if(options.stopAt){options.stopAt=new CronDate(options.stopAt,options.timezone)}return options}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){if(!isNaN(date)){this.fromDate(date)}else{throw new TypeError("CronDate: Invalid date passed as parameter to CronDate constructor")}}else if(date===void 0){this.fromDate(new Date)}else if(date&&typeof date==="string"){this.fromString(date)}else if(date instanceof CronDate){this.fromCronDate(date)}else{throw new TypeError("CronDate: Invalid type ("+typeof date+") passed as parameter to CronDate constructor")}}CronDate.prototype.fromDate=function(date){if(this.timezone){date=CronTZ(date,this.timezone)}this.milliseconds=date.getMilliseconds();this.seconds=date.getSeconds();this.minutes=date.getMinutes();this.hours=date.getHours();this.days=date.getDate();this.months=date.getMonth();this.years=date.getFullYear()};CronDate.prototype.fromCronDate=function(date){this.timezone=date.timezone;this.milliseconds=date.milliseconds;this.seconds=date.seconds;this.minutes=date.minutes;this.hours=date.hours;this.days=date.days;this.months=date.months;this.years=date.years};CronDate.prototype.apply=function(){const newDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);this.milliseconds=newDate.getMilliseconds();this.seconds=newDate.getSeconds();this.minutes=newDate.getMinutes();this.hours=newDate.getHours();this.days=newDate.getDate();this.months=newDate.getMonth();this.years=newDate.getFullYear()};CronDate.prototype.fromString=function(str){const parsedDate=this.parseISOLocal(str);if(isNaN(parsedDate)){throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.")}this.fromDate(parsedDate)};CronDate.prototype.increment=function(pattern,options,rerun){if(!rerun){this.seconds+=1}this.milliseconds=0;const origTime=this.getTime(),findNext=(target,pattern,offset,override)=>{const startPos=override===void 0?this[target]+offset:0;for(let i=startPos;i<pattern[target].length;i++){let match=pattern[target][i];if(target==="days"){let targetDate=this.getDate(true);targetDate.setDate(i-offset);if(pattern.lastDayOfMonth){let targetDateCopy=new Date(targetDate);targetDateCopy.setDate(i-offset+1);if(targetDateCopy.getMonth()!==this.months){match=true}}const dowMatch=pattern.daysOfWeek[targetDate.getDay()];if(options.legacyMode){if(!pattern.starDayOfWeek&&pattern.starDayOfMonth){match=dowMatch}else if(!pattern.starDayOfWeek&&!pattern.starDayOfMonth){match=match||dowMatch}}else{match=match&&dowMatch}}if(match){this[target]=i-offset;return true}}return false},resetPrevious=offset=>{while(doing+offset>=0){findNext(toDo[doing+offset][0],pattern,toDo[doing+offset][2],0);doing--}};const toDo=[["seconds","minutes",0],["minutes","hours",0],["hours","days",0],["days","months",-1],["months","years",0]];let doing=0;while(doing<5){let currentValue=this[toDo[doing][0]];if(!findNext(toDo[doing][0],pattern,toDo[doing][2])){this[toDo[doing][1]]++;resetPrevious(0)}else if(currentValue!==this[toDo[doing][0]]){resetPrevious(-1)}if(this.years>=4e3){return null}doing++}if(origTime!=this.getTime()){this.apply();return this.increment(pattern,options,true)}else{return this}};CronDate.prototype.getDate=function(internal){const targetDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);if(internal||!this.timezone){return targetDate}else{const offset=CronTZ(targetDate,this.timezone).getTime()-targetDate.getTime();return new Date(targetDate.getTime()-offset)}};CronDate.prototype.getTime=function(internal){return this.getDate(internal).getTime()};CronDate.prototype.parseISOLocal=function(dateTimeString){const dateTimeStringSplit=dateTimeString.split(/\D/);if(dateTimeStringSplit.length<6){return NaN}const year=parseInt(dateTimeStringSplit[0],10),month=parseInt(dateTimeStringSplit[1],10),day=parseInt(dateTimeStringSplit[2],10),hour=parseInt(dateTimeStringSplit[3],10),minute=parseInt(dateTimeStringSplit[4],10),second=parseInt(dateTimeStringSplit[5],10);if(isNaN(year)||isNaN(month)||isNaN(day)||isNaN(hour)||isNaN(minute)||isNaN(second)){return NaN}else{let generatedDate;if(dateTimeString.indexOf("Z")>0){generatedDate=new Date(Date.UTC(year,month-1,day,hour,minute,second));if(year==generatedDate.getUTCFullYear()&&month==generatedDate.getUTCMonth()+1&&day==generatedDate.getUTCDate()&&hour==generatedDate.getUTCHours()&&minute==generatedDate.getUTCMinutes()&&second==generatedDate.getUTCSeconds()){return generatedDate}else{return NaN}}else{generatedDate=new Date(year,month-1,day,hour,minute,second);if(year==generatedDate.getFullYear()&&month==generatedDate.getMonth()+1&&day==generatedDate.getDate()&&hour==generatedDate.getHours()&&minute==generatedDate.getMinutes()&&second==generatedDate.getSeconds()){return generatedDate}else{return NaN}}}};function CronPattern(pattern,timezone){this.pattern=pattern;this.timezone=timezone;this.seconds=Array(60).fill(0);this.minutes=Array(60).fill(0);this.hours=Array(24).fill(0);this.days=Array(31).fill(0);this.months=Array(12).fill(0);this.daysOfWeek=Array(8).fill(0);this.lastDayOfMonth=false;this.starDayOfMonth=false;this.starDayOfWeek=false;this.parse()}CronPattern.prototype.parse=function(){if(!(typeof this.pattern==="string"||this.pattern.constructor===String)){throw new TypeError("CronPattern: Pattern has to be of type string.")}const parts=this.pattern.trim().replace(/\s+/g," ").split(" ");if(parts.length<5||parts.length>6){throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exacly five or six space separated parts required.")}if(parts.length===5){parts.unshift("0")}if(parts[3].indexOf("L")>=0){parts[3]=parts[3].replace("L","");this.lastDayOfMonth=true}if(parts[3].toUpperCase()=="*"){this.starDayOfMonth=true}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);if(parts[5].toUpperCase()=="*"){this.starDayOfWeek=true}let initDate=new CronDate(new Date,this.timezone).getDate(true);parts[0]=parts[0].replace("?",initDate.getSeconds());parts[1]=parts[1].replace("?",initDate.getMinutes());parts[2]=parts[2].replace("?",initDate.getHours());parts[3]=parts[3].replace("?",initDate.getDate());parts[4]=parts[4].replace("?",initDate.getMonth()+1);parts[5]=parts[5].replace("?",initDate.getDay());this.throwAtIllegalCharacters(parts);this.partToArray("seconds",parts[0],0);this.partToArray("minutes",parts[1],0);this.partToArray("hours",parts[2],0);this.partToArray("days",parts[3],-1);this.partToArray("months",parts[4],-1);this.partToArray("daysOfWeek",parts[5],0);if(this.daysOfWeek[7]){this.daysOfWeek[0]=1}};CronPattern.prototype.partToArray=function(type,conf,valueIndexOffset,recursed){const arr=this[type];if(conf==="*"){for(let i=0;i<arr.length;i++){arr[i]=1}return}const split=conf.split(",");if(split.length>1){for(let i=0;i<split.length;i++){this.partToArray(type,split[i],valueIndexOffset,true)}}else if(conf.indexOf("-")!==-1&&conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRangeWithStepping(conf,type,valueIndexOffset)}else if(conf.indexOf("-")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRange(conf,type,valueIndexOffset)}else if(conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleStepping(conf,type,valueIndexOffset)}else if(conf!==""){this.handleNumber(conf,type,valueIndexOffset)}};CronPattern.prototype.throwAtIllegalCharacters=function(parts){const reValidCron=/[^/*0-9,-]+/;for(let i=0;i<parts.length;i++){if(reValidCron.test(parts[i])){throw new TypeError("CronPattern: configuration entry "+i+" ("+parts[i]+") contains illegal characters.")}}};CronPattern.prototype.handleNumber=function(conf,type,valueIndexOffset){const i=parseInt(conf,10)+valueIndexOffset;if(isNaN(i)){throw new TypeError("CronPattern: "+type+" is not a number: '"+conf+"'")}if(i<0||i>=this[type].length){throw new TypeError("CronPattern: "+type+" value out of range: '"+conf+"'")}this[type][i]=1};CronPattern.prototype.handleRangeWithStepping=function(conf,type,valueIndexOffset){const matches=conf.match(/^(\d+)-(\d+)\/(\d+)$/);if(matches===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+conf+"'");let[,lower,upper,steps]=matches;lower=parseInt(lower,10)+valueIndexOffset;upper=parseInt(upper,10)+valueIndexOffset;steps=parseInt(steps,10);if(isNaN(lower))throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(upper))throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");if(lower<0||upper>=this[type].length)throw new TypeError("CronPattern: Value out of range: '"+conf+"'");if(lower>upper)throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'");for(let i=lower;i<=upper;i+=steps){this[type][i]=1}};CronPattern.prototype.handleRange=function(conf,type,valueIndexOffset){const split=conf.split("-");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal range: '"+conf+"'")}const lower=parseInt(split[0],10)+valueIndexOffset,upper=parseInt(split[1],10)+valueIndexOffset;if(isNaN(lower)){throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)")}else if(isNaN(upper)){throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)")}if(lower<0||upper>=this[type].length){throw new TypeError("CronPattern: Value out of range: '"+conf+"'")}if(lower>upper){throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'")}for(let i=lower;i<=upper;i++){this[type][i]=1}};CronPattern.prototype.handleStepping=function(conf,type){const split=conf.split("/");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+conf+"'")}let start=0;if(split[0]!=="*"){start=parseInt(split[0],10)}const steps=parseInt(split[1],10);if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");for(let i=start;i<this[type].length;i+=steps){this[type][i]=1}};CronPattern.prototype.replaceAlphaDays=function(conf){return conf.replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")};CronPattern.prototype.replaceAlphaMonths=function(conf){return conf.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")};const maxDelay=Math.pow(2,32-1)-1;function Cron(pattern,options,func){if(!(this instanceof Cron)){return new Cron(pattern,options,func)}if(typeof options==="function"){func=options;options=void 0}this.options=CronOptions(options);this.once=void 0;this.pattern=void 0;if(pattern&&(pattern instanceof Date||typeof pattern==="string"&&pattern.indexOf(":")>0)){this.once=new CronDate(pattern,this.options.timezone)}else{this.pattern=new CronPattern(pattern,this.options.timezone)}if(func!==void 0){this.fn=func;this.schedule()}return this}Cron.prototype.next=function(prev){prev=new CronDate(prev,this.options.timezone);const next=this._next(prev);return next?next.getDate():null};Cron.prototype.enumerate=function(n,previous){let enumeration=[];while(n--&&(previous=this.next(previous))){enumeration.push(previous)}return enumeration};Cron.prototype.running=function(){const msLeft=this.msToNext(this.previousrun);const running=!this.options.paused&&this.fn!==void 0;return msLeft!==null&&running};Cron.prototype.previous=function(){return this.previousrun?this.previousrun.getDate():null};Cron.prototype.msToNext=function(prev){prev=new CronDate(prev,this.options.timezone);const next=this._next(prev);if(next){return next.getTime(true)-prev.getTime(true)}else{return null}};Cron.prototype.stop=function(){this.options.kill=true;if(this.currentTimeout){clearTimeout(this.currentTimeout)}};Cron.prototype.pause=function(){return(this.options.paused=true)&&!this.options.kill};Cron.prototype.resume=function(){return!(this.options.paused=false)&&!this.options.kill};Cron.prototype.schedule=function(func){if(func&&this.fn){throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.")}else if(func){this.fn=func}let waitMs=this.msToNext(this.previousrun);if(waitMs===null)return this;if(waitMs>maxDelay){waitMs=maxDelay}this.currentTimeout=setTimeout(()=>{if(waitMs!==maxDelay&&!this.options.paused){this.options.maxRuns--;if(this.options.catch){try{this.fn(this,this.options.context)}catch(_e){}}else{this.fn(this,this.options.context)}this.previousrun=new CronDate(void 0,this.options.timezone)}this.schedule()},waitMs);return this};Cron.prototype._next=function(prev){if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=this.options.startAt}const nextRun=this.once||new CronDate(prev,this.options.timezone).increment(this.pattern,this.options);if(this.once&&this.once.getTime(true)<=prev.getTime(true)){return null}else if(nextRun===null||this.options.maxRuns<=0||this.options.kill||this.options.stopAt&&nextRun.getTime(true)>=this.options.stopAt.getTime(true)){return null}else{return nextRun}};export{Cron,Cron as default};
|
|
1
|
+
function CronTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronOptions(options){if(options===void 0){options={}}options.legacyMode=options.legacyMode===void 0?false:options.legacyMode;options.paused=options.paused===void 0?false:options.paused;options.maxRuns=options.maxRuns===void 0?Infinity:options.maxRuns;options.catch=options.catch===void 0?false:options.catch;options.interval=options.interval===void 0?0:parseInt(options.interval);options.kill=false;if(options.startAt){options.startAt=new CronDate(options.startAt,options.timezone)}if(options.stopAt){options.stopAt=new CronDate(options.stopAt,options.timezone)}if(options.interval!==null){if(isNaN(options.interval)){throw new Error("CronOptions: Supplied value for interval is not a number")}else if(options.interval<0){throw new Error("CronOptions: Supplied value for interval can not be negative")}}return options}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){if(!isNaN(date)){this.fromDate(date)}else{throw new TypeError("CronDate: Invalid date passed as parameter to CronDate constructor")}}else if(date===void 0){this.fromDate(new Date)}else if(date&&typeof date==="string"){this.fromString(date)}else if(date instanceof CronDate){this.fromCronDate(date)}else{throw new TypeError("CronDate: Invalid type ("+typeof date+") passed as parameter to CronDate constructor")}}CronDate.prototype.fromDate=function(date){if(this.timezone){date=CronTZ(date,this.timezone)}this.milliseconds=date.getMilliseconds();this.seconds=date.getSeconds();this.minutes=date.getMinutes();this.hours=date.getHours();this.days=date.getDate();this.months=date.getMonth();this.years=date.getFullYear()};CronDate.prototype.fromCronDate=function(date){this.timezone=date.timezone;this.milliseconds=date.milliseconds;this.seconds=date.seconds;this.minutes=date.minutes;this.hours=date.hours;this.days=date.days;this.months=date.months;this.years=date.years};CronDate.prototype.apply=function(){const newDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);this.milliseconds=newDate.getMilliseconds();this.seconds=newDate.getSeconds();this.minutes=newDate.getMinutes();this.hours=newDate.getHours();this.days=newDate.getDate();this.months=newDate.getMonth();this.years=newDate.getFullYear()};CronDate.prototype.fromString=function(str){const parsedDate=this.parseISOLocal(str);if(isNaN(parsedDate)){throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.")}this.fromDate(parsedDate)};CronDate.prototype.increment=function(pattern,options,rerun){if(!rerun){if(options.interval>1){this.seconds+=options.interval}else{this.seconds+=1}}this.apply();this.milliseconds=0;const origTime=this.getTime(),findNext=(target,pattern,offset,override)=>{const startPos=override===void 0?this[target]+offset:0;for(let i=startPos;i<pattern[target].length;i++){let match=pattern[target][i];if(target==="days"){let targetDate=this.getDate(true);targetDate.setDate(i-offset);if(pattern.lastDayOfMonth){let targetDateCopy=new Date(targetDate);targetDateCopy.setDate(i-offset+1);if(targetDateCopy.getMonth()!==this.months){match=true}}const dowMatch=pattern.daysOfWeek[targetDate.getDay()];if(options.legacyMode){if(!pattern.starDayOfWeek&&pattern.starDayOfMonth){match=dowMatch}else if(!pattern.starDayOfWeek&&!pattern.starDayOfMonth){match=match||dowMatch}}else{match=match&&dowMatch}}if(match){this[target]=i-offset;return true}}return false},resetPrevious=offset=>{while(doing+offset>=0){findNext(toDo[doing+offset][0],pattern,toDo[doing+offset][2],0);doing--}};const toDo=[["seconds","minutes",0],["minutes","hours",0],["hours","days",0],["days","months",-1],["months","years",0]];let doing=0;while(doing<5){let currentValue=this[toDo[doing][0]];if(!findNext(toDo[doing][0],pattern,toDo[doing][2])){this[toDo[doing][1]]++;resetPrevious(0)}else if(currentValue!==this[toDo[doing][0]]){resetPrevious(-1)}if(this.years>=4e3){return null}doing++}this.default=false;if(origTime!=this.getTime()){this.apply();return this.increment(pattern,options,true)}else{return this}};CronDate.prototype.getDate=function(internal){const targetDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);if(internal||!this.timezone){return targetDate}else{const offset=CronTZ(targetDate,this.timezone).getTime()-targetDate.getTime();return new Date(targetDate.getTime()-offset)}};CronDate.prototype.getTime=function(internal){return this.getDate(internal).getTime()};CronDate.prototype.parseISOLocal=function(dateTimeString){const dateTimeStringSplit=dateTimeString.split(/\D/);if(dateTimeStringSplit.length<6){return NaN}const year=parseInt(dateTimeStringSplit[0],10),month=parseInt(dateTimeStringSplit[1],10),day=parseInt(dateTimeStringSplit[2],10),hour=parseInt(dateTimeStringSplit[3],10),minute=parseInt(dateTimeStringSplit[4],10),second=parseInt(dateTimeStringSplit[5],10);if(isNaN(year)||isNaN(month)||isNaN(day)||isNaN(hour)||isNaN(minute)||isNaN(second)){return NaN}else{let generatedDate;if(dateTimeString.indexOf("Z")>0){generatedDate=new Date(Date.UTC(year,month-1,day,hour,minute,second));if(year==generatedDate.getUTCFullYear()&&month==generatedDate.getUTCMonth()+1&&day==generatedDate.getUTCDate()&&hour==generatedDate.getUTCHours()&&minute==generatedDate.getUTCMinutes()&&second==generatedDate.getUTCSeconds()){return generatedDate}else{return NaN}}else{generatedDate=new Date(year,month-1,day,hour,minute,second);if(year==generatedDate.getFullYear()&&month==generatedDate.getMonth()+1&&day==generatedDate.getDate()&&hour==generatedDate.getHours()&&minute==generatedDate.getMinutes()&&second==generatedDate.getSeconds()){return generatedDate}else{return NaN}}}};function CronPattern(pattern,timezone){this.pattern=pattern;this.timezone=timezone;this.seconds=Array(60).fill(0);this.minutes=Array(60).fill(0);this.hours=Array(24).fill(0);this.days=Array(31).fill(0);this.months=Array(12).fill(0);this.daysOfWeek=Array(8).fill(0);this.lastDayOfMonth=false;this.starDayOfMonth=false;this.starDayOfWeek=false;this.parse()}CronPattern.prototype.parse=function(){if(!(typeof this.pattern==="string"||this.pattern.constructor===String)){throw new TypeError("CronPattern: Pattern has to be of type string.")}this.pattern=this.handleNicknames(this.pattern);const parts=this.pattern.trim().replace(/\s+/g," ").split(" ");if(parts.length<5||parts.length>6){throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exacly five or six space separated parts required.")}if(parts.length===5){parts.unshift("0")}if(parts[3].indexOf("L")>=0){parts[3]=parts[3].replace("L","");this.lastDayOfMonth=true}if(parts[3].toUpperCase()=="*"){this.starDayOfMonth=true}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);if(parts[5].toUpperCase()=="*"){this.starDayOfWeek=true}let initDate=new CronDate(new Date,this.timezone).getDate(true);parts[0]=parts[0].replace("?",initDate.getSeconds());parts[1]=parts[1].replace("?",initDate.getMinutes());parts[2]=parts[2].replace("?",initDate.getHours());parts[3]=parts[3].replace("?",initDate.getDate());parts[4]=parts[4].replace("?",initDate.getMonth()+1);parts[5]=parts[5].replace("?",initDate.getDay());this.throwAtIllegalCharacters(parts);this.partToArray("seconds",parts[0],0);this.partToArray("minutes",parts[1],0);this.partToArray("hours",parts[2],0);this.partToArray("days",parts[3],-1);this.partToArray("months",parts[4],-1);this.partToArray("daysOfWeek",parts[5],0);if(this.daysOfWeek[7]){this.daysOfWeek[0]=1}};CronPattern.prototype.partToArray=function(type,conf,valueIndexOffset,recursed){const arr=this[type];if(conf==="*"){for(let i=0;i<arr.length;i++){arr[i]=1}return}const split=conf.split(",");if(split.length>1){for(let i=0;i<split.length;i++){this.partToArray(type,split[i],valueIndexOffset,true)}}else if(conf.indexOf("-")!==-1&&conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRangeWithStepping(conf,type,valueIndexOffset)}else if(conf.indexOf("-")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleRange(conf,type,valueIndexOffset)}else if(conf.indexOf("/")!==-1){if(recursed)throw new Error("CronPattern: Range with stepping cannot coexist with ,");this.handleStepping(conf,type,valueIndexOffset)}else if(conf!==""){this.handleNumber(conf,type,valueIndexOffset)}};CronPattern.prototype.throwAtIllegalCharacters=function(parts){const reValidCron=/[^/*0-9,-]+/;for(let i=0;i<parts.length;i++){if(reValidCron.test(parts[i])){throw new TypeError("CronPattern: configuration entry "+i+" ("+parts[i]+") contains illegal characters.")}}};CronPattern.prototype.handleNumber=function(conf,type,valueIndexOffset){const i=parseInt(conf,10)+valueIndexOffset;if(isNaN(i)){throw new TypeError("CronPattern: "+type+" is not a number: '"+conf+"'")}if(i<0||i>=this[type].length){throw new TypeError("CronPattern: "+type+" value out of range: '"+conf+"'")}this[type][i]=1};CronPattern.prototype.handleRangeWithStepping=function(conf,type,valueIndexOffset){const matches=conf.match(/^(\d+)-(\d+)\/(\d+)$/);if(matches===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+conf+"'");let[,lower,upper,steps]=matches;lower=parseInt(lower,10)+valueIndexOffset;upper=parseInt(upper,10)+valueIndexOffset;steps=parseInt(steps,10);if(isNaN(lower))throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(upper))throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");if(lower<0||upper>=this[type].length)throw new TypeError("CronPattern: Value out of range: '"+conf+"'");if(lower>upper)throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'");for(let i=lower;i<=upper;i+=steps){this[type][i]=1}};CronPattern.prototype.handleRange=function(conf,type,valueIndexOffset){const split=conf.split("-");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal range: '"+conf+"'")}const lower=parseInt(split[0],10)+valueIndexOffset,upper=parseInt(split[1],10)+valueIndexOffset;if(isNaN(lower)){throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)")}else if(isNaN(upper)){throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)")}if(lower<0||upper>=this[type].length){throw new TypeError("CronPattern: Value out of range: '"+conf+"'")}if(lower>upper){throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'")}for(let i=lower;i<=upper;i++){this[type][i]=1}};CronPattern.prototype.handleStepping=function(conf,type){const split=conf.split("/");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+conf+"'")}let start=0;if(split[0]!=="*"){start=parseInt(split[0],10)}const steps=parseInt(split[1],10);if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");for(let i=start;i<this[type].length;i+=steps){this[type][i]=1}};CronPattern.prototype.replaceAlphaDays=function(conf){return conf.replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")};CronPattern.prototype.replaceAlphaMonths=function(conf){return conf.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")};CronPattern.prototype.handleNicknames=function(pattern){const cleanPattern=pattern.trim().toLowerCase();if(cleanPattern==="@yearly"||cleanPattern==="@annually"){return"0 0 1 1 *"}else if(cleanPattern==="@monthly"){return"0 0 1 * *"}else if(cleanPattern==="@weekly"){return"0 0 * * 0"}else if(cleanPattern==="@daily"){return"0 0 * * *"}else if(cleanPattern==="@hourly"){return"0 * * * *"}else{return pattern}};const maxDelay=Math.pow(2,32-1)-1;function Cron(pattern,options,func){if(!(this instanceof Cron)){return new Cron(pattern,options,func)}if(typeof options==="function"){func=options;options=void 0}this.options=CronOptions(options);this.once=void 0;this.pattern=void 0;if(pattern&&(pattern instanceof Date||typeof pattern==="string"&&pattern.indexOf(":")>0)){this.once=new CronDate(pattern,this.options.timezone)}else{this.pattern=new CronPattern(pattern,this.options.timezone)}if(func!==void 0){this.fn=func;this.schedule()}return this}Cron.prototype.next=function(prev){const next=this._next(prev);return next?next.getDate():null};Cron.prototype.enumerate=function(n,previous){const enumeration=[];while(n--&&(previous=this.next(previous))){enumeration.push(previous)}return enumeration};Cron.prototype.running=function(){const msLeft=this.msToNext(this.previousrun);const running=!this.options.paused&&this.fn!==void 0;return msLeft!==null&&running};Cron.prototype.previous=function(){return this.previousrun?this.previousrun.getDate():null};Cron.prototype.msToNext=function(prev){const next=this._next(prev);prev=new CronDate(prev,this.options.timezone);if(next){return next.getTime(true)-prev.getTime(true)}else{return null}};Cron.prototype.stop=function(){this.options.kill=true;if(this.currentTimeout){clearTimeout(this.currentTimeout)}};Cron.prototype.pause=function(){return(this.options.paused=true)&&!this.options.kill};Cron.prototype.resume=function(){return!(this.options.paused=false)&&!this.options.kill};Cron.prototype.schedule=function(func){if(func&&this.fn){throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.")}else if(func){this.fn=func}let waitMs=this.msToNext(this.previousrun);if(waitMs===null)return this;if(waitMs>maxDelay){waitMs=maxDelay}this.currentTimeout=setTimeout(()=>{if(waitMs!==maxDelay&&!this.options.paused){this.options.maxRuns--;if(this.options.catch){try{this.fn(this,this.options.context)}catch(_e){}}else{this.fn(this,this.options.context)}this.previousrun=new CronDate(void 0,this.options.timezone)}this.schedule()},waitMs);return this};Cron.prototype._next=function(prev){const hasPreviousRun=prev?true:false;prev=new CronDate(prev,this.options.timezone);if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=this.options.startAt}const nextRun=this.once||new CronDate(prev,this.options.timezone).increment(this.pattern,this.options,!hasPreviousRun);if(this.once&&this.once.getTime(true)<=prev.getTime(true)){return null}else if(nextRun===null||this.options.maxRuns<=0||this.options.kill||this.options.stopAt&&nextRun.getTime(true)>=this.options.stopAt.getTime(true)){return null}else{return nextRun}};export{Cron,Cron as default};
|
package/dist/croner.min.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dist/croner.mjs"],"names":["CronTZ","date","tzString","Date","toLocaleString","timeZone","CronOptions","options","legacyMode","paused","maxRuns","Infinity","catch","kill","startAt","CronDate","timezone","stopAt","this","isNaN","fromDate","TypeError","fromString","fromCronDate","prototype","milliseconds","getMilliseconds","seconds","getSeconds","minutes","getMinutes","hours","getHours","days","getDate","months","getMonth","years","getFullYear","apply","newDate","str","parsedDate","parseISOLocal","increment","pattern","rerun","origTime","getTime","findNext","target","offset","override","startPos","let","i","length","match","targetDate","setDate","lastDayOfMonth","targetDateCopy","dowMatch","daysOfWeek","getDay","starDayOfWeek","starDayOfMonth","resetPrevious","doing","toDo","currentValue","internal","dateTimeString","dateTimeStringSplit","split","NaN","year","parseInt","month","day","hour","minute","second","generatedDate","indexOf","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","CronPattern","Array","fill","parse","constructor","String","parts","trim","replace","unshift","toUpperCase","replaceAlphaMonths","replaceAlphaDays","initDate","throwAtIllegalCharacters","partToArray","type","conf","valueIndexOffset","recursed","arr","Error","handleRangeWithStepping","handleRange","handleStepping","handleNumber","reValidCron","test","matches","lower","upper","steps","start","maxDelay","Math","pow","Cron","func","once","fn","schedule","next","prev","_next","enumerate","n","previous","enumeration","push","running","msLeft","msToNext","previousrun","stop","currentTimeout","clearTimeout","pause","resume","waitMs","setTimeout","context","_e","nextRun"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["dist/croner.mjs"],"names":["CronTZ","date","tzString","Date","toLocaleString","timeZone","CronOptions","options","legacyMode","paused","maxRuns","Infinity","catch","interval","parseInt","kill","startAt","CronDate","timezone","stopAt","isNaN","Error","this","fromDate","TypeError","fromString","fromCronDate","prototype","milliseconds","getMilliseconds","seconds","getSeconds","minutes","getMinutes","hours","getHours","days","getDate","months","getMonth","years","getFullYear","apply","newDate","str","parsedDate","parseISOLocal","increment","pattern","rerun","origTime","getTime","findNext","target","offset","override","startPos","let","i","length","match","targetDate","setDate","lastDayOfMonth","targetDateCopy","dowMatch","daysOfWeek","getDay","starDayOfWeek","starDayOfMonth","resetPrevious","doing","toDo","currentValue","default","internal","dateTimeString","dateTimeStringSplit","split","NaN","year","month","day","hour","minute","second","generatedDate","indexOf","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","CronPattern","Array","fill","parse","constructor","String","handleNicknames","parts","trim","replace","unshift","toUpperCase","replaceAlphaMonths","replaceAlphaDays","initDate","throwAtIllegalCharacters","partToArray","type","conf","valueIndexOffset","recursed","arr","handleRangeWithStepping","handleRange","handleStepping","handleNumber","reValidCron","test","matches","lower","upper","steps","start","cleanPattern","toLowerCase","maxDelay","Math","pow","Cron","func","once","fn","schedule","next","prev","_next","enumerate","n","previous","enumeration","push","running","msLeft","msToNext","previousrun","stop","currentTimeout","clearTimeout","pause","resume","waitMs","setTimeout","context","_e","hasPreviousRun","nextRun"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "croner",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.3.0",
|
|
4
4
|
"description": "Trigger functions and/or evaluate cron expressions in JavaScript. No dependencies. Most features. All environmens.",
|
|
5
5
|
"author": "Hexagon <github.com/hexagon>",
|
|
6
6
|
"homepage": "https://hexagon.github.io/croner",
|
package/src/croner.js
CHANGED
|
@@ -99,7 +99,6 @@ function Cron (pattern, options, func) {
|
|
|
99
99
|
* @returns {Date | null} - Next run time
|
|
100
100
|
*/
|
|
101
101
|
Cron.prototype.next = function (prev) {
|
|
102
|
-
prev = new CronDate(prev, this.options.timezone);
|
|
103
102
|
const next = this._next(prev);
|
|
104
103
|
return next ? next.getDate() : null;
|
|
105
104
|
};
|
|
@@ -112,8 +111,7 @@ Cron.prototype.next = function (prev) {
|
|
|
112
111
|
* @returns {Date[]} - Next n run times
|
|
113
112
|
*/
|
|
114
113
|
Cron.prototype.enumerate = function (n, previous) {
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
const enumeration = [];
|
|
117
115
|
while(n-- && (previous = this.next(previous))) {
|
|
118
116
|
enumeration.push(previous);
|
|
119
117
|
}
|
|
@@ -147,12 +145,17 @@ Cron.prototype.previous = function () {
|
|
|
147
145
|
* Returns number of milliseconds to next run
|
|
148
146
|
* @public
|
|
149
147
|
*
|
|
150
|
-
* @param {Date} [prev] - Starting date, defaults to now
|
|
148
|
+
* @param {Date} [prev] - Starting date, defaults to now - minimum interval
|
|
151
149
|
* @returns {number | null}
|
|
152
150
|
*/
|
|
153
151
|
Cron.prototype.msToNext = function (prev) {
|
|
154
|
-
|
|
152
|
+
|
|
153
|
+
// Get next run time
|
|
155
154
|
const next = this._next(prev);
|
|
155
|
+
|
|
156
|
+
// Default previous for millisecond calculation
|
|
157
|
+
prev = new CronDate(prev, this.options.timezone);
|
|
158
|
+
|
|
156
159
|
if( next ) {
|
|
157
160
|
return (next.getTime(true) - prev.getTime(true));
|
|
158
161
|
} else {
|
|
@@ -237,6 +240,7 @@ Cron.prototype.schedule = function (func) {
|
|
|
237
240
|
this.fn(this, this.options.context);
|
|
238
241
|
}
|
|
239
242
|
|
|
243
|
+
// Set previous run to now
|
|
240
244
|
this.previousrun = new CronDate(void 0, this.options.timezone);
|
|
241
245
|
|
|
242
246
|
}
|
|
@@ -260,13 +264,19 @@ Cron.prototype.schedule = function (func) {
|
|
|
260
264
|
*/
|
|
261
265
|
Cron.prototype._next = function (prev) {
|
|
262
266
|
|
|
267
|
+
const hasPreviousRun = prev ? true : false;
|
|
268
|
+
|
|
269
|
+
// Default previous
|
|
270
|
+
prev = new CronDate(prev, this.options.timezone);
|
|
271
|
+
|
|
263
272
|
// Previous run should never be before startAt
|
|
264
273
|
if( this.options.startAt && prev && prev.getTime(true) < this.options.startAt.getTime(true) ) {
|
|
265
274
|
prev = this.options.startAt;
|
|
266
275
|
}
|
|
267
|
-
|
|
268
|
-
// Calculate next run according to pattern or one-off timestamp
|
|
269
|
-
const
|
|
276
|
+
|
|
277
|
+
// Calculate next run according to pattern or one-off timestamp, pass actual previous run to increment
|
|
278
|
+
const
|
|
279
|
+
nextRun = this.once || new CronDate(prev, this.options.timezone).increment(this.pattern, this.options, !hasPreviousRun);
|
|
270
280
|
|
|
271
281
|
if (this.once && this.once.getTime(true) <= prev.getTime(true)) {
|
|
272
282
|
return null;
|
package/src/date.js
CHANGED
|
@@ -7,7 +7,7 @@ import { CronOptions } from "./options.js"; // eslint-disable-line no-unused-var
|
|
|
7
7
|
*
|
|
8
8
|
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected
|
|
9
9
|
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format.
|
|
10
|
-
|
|
10
|
+
*/
|
|
11
11
|
function CronDate (date, timezone) {
|
|
12
12
|
|
|
13
13
|
this.timezone = timezone;
|
|
@@ -115,13 +115,20 @@ CronDate.prototype.fromString = function (str) {
|
|
|
115
115
|
* @return {CronDate|null} - Returns itself for chaining, or null if increment wasnt possible
|
|
116
116
|
*/
|
|
117
117
|
CronDate.prototype.increment = function (pattern, options, rerun) {
|
|
118
|
-
|
|
118
|
+
|
|
119
|
+
// Always add one second, or minimum interval
|
|
119
120
|
if (!rerun) {
|
|
120
|
-
|
|
121
|
+
if (options.interval > 1) {
|
|
122
|
+
this.seconds += options.interval;
|
|
123
|
+
} else {
|
|
124
|
+
this.seconds += 1;
|
|
125
|
+
}
|
|
121
126
|
}
|
|
122
127
|
|
|
123
|
-
this.
|
|
128
|
+
this.apply();
|
|
124
129
|
|
|
130
|
+
this.milliseconds = 0;
|
|
131
|
+
|
|
125
132
|
const
|
|
126
133
|
|
|
127
134
|
origTime = this.getTime(),
|
|
@@ -266,6 +273,7 @@ CronDate.prototype.increment = function (pattern, options, rerun) {
|
|
|
266
273
|
}
|
|
267
274
|
|
|
268
275
|
// If anything changed, recreate this CronDate and run again without incrementing
|
|
276
|
+
this.default = false;
|
|
269
277
|
if (origTime != this.getTime()) {
|
|
270
278
|
this.apply();
|
|
271
279
|
return this.increment(pattern, options, true);
|
package/src/options.js
CHANGED
|
@@ -6,6 +6,7 @@ import { CronDate } from "./date.js";
|
|
|
6
6
|
* @property {boolean} [kill] - Job is about to be killed or killed
|
|
7
7
|
* @property {boolean} [catch] - Continue exection even if a unhandled error is thrown by triggered function
|
|
8
8
|
* @property {number} [maxRuns] - Maximum nuber of executions
|
|
9
|
+
* @property {number} [interval] - Minimum interval between executions, in seconds
|
|
9
10
|
* @property {string | Date} [startAt] - When to start running
|
|
10
11
|
* @property {string | Date} [stopAt] - When to stop running
|
|
11
12
|
* @property {string} [timezone] - Time zone in Europe/Stockholm format
|
|
@@ -32,6 +33,7 @@ function CronOptions(options) {
|
|
|
32
33
|
options.paused = (options.paused === void 0) ? false : options.paused;
|
|
33
34
|
options.maxRuns = (options.maxRuns === void 0) ? Infinity : options.maxRuns;
|
|
34
35
|
options.catch = (options.catch === void 0) ? false : options.catch;
|
|
36
|
+
options.interval = (options.interval === void 0) ? 0 : parseInt(options.interval);
|
|
35
37
|
options.kill = false;
|
|
36
38
|
|
|
37
39
|
// startAt is set, validate it
|
|
@@ -40,7 +42,16 @@ function CronOptions(options) {
|
|
|
40
42
|
}
|
|
41
43
|
if( options.stopAt ) {
|
|
42
44
|
options.stopAt = new CronDate(options.stopAt, options.timezone);
|
|
43
|
-
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Validate interval
|
|
48
|
+
if (options.interval !== null) {
|
|
49
|
+
if (isNaN(options.interval)) {
|
|
50
|
+
throw new Error("CronOptions: Supplied value for interval is not a number");
|
|
51
|
+
} else if (options.interval < 0) {
|
|
52
|
+
throw new Error("CronOptions: Supplied value for interval can not be negative");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
44
55
|
|
|
45
56
|
return options;
|
|
46
57
|
|
package/src/pattern.js
CHANGED
|
@@ -51,6 +51,9 @@ CronPattern.prototype.parse = function () {
|
|
|
51
51
|
throw new TypeError("CronPattern: Pattern has to be of type string.");
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
// Handle @yearly, @monthly etc
|
|
55
|
+
this.pattern = this.handleNicknames(this.pattern);
|
|
56
|
+
|
|
54
57
|
// Split configuration on whitespace
|
|
55
58
|
const parts = this.pattern.trim().replace(/\s+/g, " ").split(" ");
|
|
56
59
|
|
|
@@ -350,4 +353,30 @@ CronPattern.prototype.replaceAlphaMonths = function (conf) {
|
|
|
350
353
|
.replace(/dec/gi, "12");
|
|
351
354
|
};
|
|
352
355
|
|
|
356
|
+
/**
|
|
357
|
+
* Replace nicknames with actual cron patterns
|
|
358
|
+
* @private
|
|
359
|
+
*
|
|
360
|
+
* @param {string} pattern - Pattern, may contain nicknames, or not
|
|
361
|
+
*
|
|
362
|
+
* @returns {string} - Pattern, with cron expression insted of nicknames
|
|
363
|
+
*/
|
|
364
|
+
CronPattern.prototype.handleNicknames = function (pattern) {
|
|
365
|
+
// Replace textual representations of pattern
|
|
366
|
+
const cleanPattern = pattern.trim().toLowerCase();
|
|
367
|
+
if (cleanPattern === "@yearly" || cleanPattern === "@annually") {
|
|
368
|
+
return "0 0 1 1 *";
|
|
369
|
+
} else if (cleanPattern === "@monthly") {
|
|
370
|
+
return "0 0 1 * *";
|
|
371
|
+
} else if (cleanPattern === "@weekly") {
|
|
372
|
+
return "0 0 * * 0";
|
|
373
|
+
} else if (cleanPattern === "@daily") {
|
|
374
|
+
return "0 0 * * *";
|
|
375
|
+
} else if (cleanPattern === "@hourly") {
|
|
376
|
+
return "0 * * * *";
|
|
377
|
+
} else {
|
|
378
|
+
return pattern;
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
|
|
353
382
|
export { CronPattern };
|
package/types/croner.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export class Cron {
|
|
|
58
58
|
* Returns number of milliseconds to next run
|
|
59
59
|
* @public
|
|
60
60
|
*
|
|
61
|
-
* @param {Date} [prev] - Starting date, defaults to now
|
|
61
|
+
* @param {Date} [prev] - Starting date, defaults to now - minimum interval
|
|
62
62
|
* @returns {number | null}
|
|
63
63
|
*/
|
|
64
64
|
public msToNext(prev?: Date): number | null;
|
package/types/date.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected
|
|
6
6
|
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format.
|
|
7
|
-
|
|
7
|
+
*/
|
|
8
8
|
export function CronDate(date?: any, timezone?: string): void;
|
|
9
9
|
export class CronDate {
|
|
10
10
|
/**
|
|
@@ -13,7 +13,7 @@ export class CronDate {
|
|
|
13
13
|
*
|
|
14
14
|
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected
|
|
15
15
|
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format.
|
|
16
|
-
|
|
16
|
+
*/
|
|
17
17
|
constructor(date?: any, timezone?: string);
|
|
18
18
|
timezone: string;
|
|
19
19
|
private fromDate;
|
|
@@ -37,6 +37,7 @@ export class CronDate {
|
|
|
37
37
|
* @return {CronDate|null} - Returns itself for chaining, or null if increment wasnt possible
|
|
38
38
|
*/
|
|
39
39
|
public increment(pattern: string, options: CronOptions, rerun?: boolean): CronDate | null;
|
|
40
|
+
default: boolean;
|
|
40
41
|
/**
|
|
41
42
|
* Convert current state back to a javascript Date()
|
|
42
43
|
* @public
|
package/types/options.d.ts
CHANGED
|
@@ -18,6 +18,10 @@ export type CronOptions = {
|
|
|
18
18
|
* - Maximum nuber of executions
|
|
19
19
|
*/
|
|
20
20
|
maxRuns?: number;
|
|
21
|
+
/**
|
|
22
|
+
* - Minimum interval between executions, in seconds
|
|
23
|
+
*/
|
|
24
|
+
interval?: number;
|
|
21
25
|
/**
|
|
22
26
|
* - When to start running
|
|
23
27
|
*/
|
|
@@ -45,6 +49,7 @@ export type CronOptions = {
|
|
|
45
49
|
* @property {boolean} [kill] - Job is about to be killed or killed
|
|
46
50
|
* @property {boolean} [catch] - Continue exection even if a unhandled error is thrown by triggered function
|
|
47
51
|
* @property {number} [maxRuns] - Maximum nuber of executions
|
|
52
|
+
* @property {number} [interval] - Minimum interval between executions, in seconds
|
|
48
53
|
* @property {string | Date} [startAt] - When to start running
|
|
49
54
|
* @property {string | Date} [stopAt] - When to stop running
|
|
50
55
|
* @property {string} [timezone] - Time zone in Europe/Stockholm format
|