croner 4.2.3 → 4.3.2

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 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("0 0 0 1 * *").next(),
262
- nextSunday = Cron("0 0 0 * * 7").next(),
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;
@@ -181,16 +192,24 @@
181
192
  * @param {string} pattern - The pattern used to increment current state
182
193
  * @param {CronOptions} options - Cron options used for incrementing
183
194
  * @param {boolean} [rerun=false] - If this is an internal incremental run
195
+ * @param {boolean} [hasPreviousRun] - If this run should adhere to minimum interval
184
196
  * @return {CronDate|null} - Returns itself for chaining, or null if increment wasnt possible
185
197
  */
186
- CronDate.prototype.increment = function (pattern, options, rerun) {
187
-
198
+ CronDate.prototype.increment = function (pattern, options, rerun, hasPreviousRun) {
199
+
200
+ // Always add one second, or minimum interval
188
201
  if (!rerun) {
189
- this.seconds += 1;
202
+ if (options.interval > 1 && hasPreviousRun) {
203
+ this.seconds += options.interval;
204
+ } else {
205
+ this.seconds += 1;
206
+ }
190
207
  }
191
208
 
192
- this.milliseconds = 0;
209
+ this.apply();
193
210
 
211
+ this.milliseconds = 0;
212
+
194
213
  const
195
214
 
196
215
  origTime = this.getTime(),
@@ -335,9 +354,10 @@
335
354
  }
336
355
 
337
356
  // If anything changed, recreate this CronDate and run again without incrementing
357
+ this.default = false;
338
358
  if (origTime != this.getTime()) {
339
359
  this.apply();
340
- return this.increment(pattern, options, true);
360
+ return this.increment(pattern, options, true, hasPreviousRun);
341
361
  } else {
342
362
  return this;
343
363
  }
@@ -490,6 +510,9 @@
490
510
  throw new TypeError("CronPattern: Pattern has to be of type string.");
491
511
  }
492
512
 
513
+ // Handle @yearly, @monthly etc
514
+ this.pattern = this.handleNicknames(this.pattern);
515
+
493
516
  // Split configuration on whitespace
494
517
  const parts = this.pattern.trim().replace(/\s+/g, " ").split(" ");
495
518
 
@@ -789,6 +812,32 @@
789
812
  .replace(/dec/gi, "12");
790
813
  };
791
814
 
815
+ /**
816
+ * Replace nicknames with actual cron patterns
817
+ * @private
818
+ *
819
+ * @param {string} pattern - Pattern, may contain nicknames, or not
820
+ *
821
+ * @returns {string} - Pattern, with cron expression insted of nicknames
822
+ */
823
+ CronPattern.prototype.handleNicknames = function (pattern) {
824
+ // Replace textual representations of pattern
825
+ const cleanPattern = pattern.trim().toLowerCase();
826
+ if (cleanPattern === "@yearly" || cleanPattern === "@annually") {
827
+ return "0 0 1 1 *";
828
+ } else if (cleanPattern === "@monthly") {
829
+ return "0 0 1 * *";
830
+ } else if (cleanPattern === "@weekly") {
831
+ return "0 0 * * 0";
832
+ } else if (cleanPattern === "@daily") {
833
+ return "0 0 * * *";
834
+ } else if (cleanPattern === "@hourly") {
835
+ return "0 * * * *";
836
+ } else {
837
+ return pattern;
838
+ }
839
+ };
840
+
792
841
  /* ------------------------------------------------------------------------------------
793
842
 
794
843
  Croner - MIT License - Hexagon <github.com/Hexagon>
@@ -883,11 +932,10 @@
883
932
  /**
884
933
  * Find next runtime, based on supplied date. Strips milliseconds.
885
934
  *
886
- * @param {Date|string} [prev] - Date to start from
935
+ * @param {CronDate|Date|string} [prev] - Date to start from
887
936
  * @returns {Date | null} - Next run time
888
937
  */
889
938
  Cron.prototype.next = function (prev) {
890
- prev = new CronDate(prev, this.options.timezone);
891
939
  const next = this._next(prev);
892
940
  return next ? next.getDate() : null;
893
941
  };
@@ -900,8 +948,7 @@
900
948
  * @returns {Date[]} - Next n run times
901
949
  */
902
950
  Cron.prototype.enumerate = function (n, previous) {
903
- let enumeration = [];
904
-
951
+ const enumeration = [];
905
952
  while(n-- && (previous = this.next(previous))) {
906
953
  enumeration.push(previous);
907
954
  }
@@ -935,12 +982,17 @@
935
982
  * Returns number of milliseconds to next run
936
983
  * @public
937
984
  *
938
- * @param {Date} [prev] - Starting date, defaults to now
985
+ * @param {CronDate|Date|string} [prev] - Starting date, defaults to now - minimum interval
939
986
  * @returns {number | null}
940
987
  */
941
988
  Cron.prototype.msToNext = function (prev) {
942
- prev = new CronDate(prev, this.options.timezone);
989
+
990
+ // Get next run time
943
991
  const next = this._next(prev);
992
+
993
+ // Default previous for millisecond calculation
994
+ prev = new CronDate(prev, this.options.timezone);
995
+
944
996
  if( next ) {
945
997
  return (next.getTime(true) - prev.getTime(true));
946
998
  } else {
@@ -1025,6 +1077,7 @@
1025
1077
  this.fn(this, this.options.context);
1026
1078
  }
1027
1079
 
1080
+ // Set previous run to now
1028
1081
  this.previousrun = new CronDate(void 0, this.options.timezone);
1029
1082
 
1030
1083
  }
@@ -1043,18 +1096,24 @@
1043
1096
  * Internal version of next. Cron needs millseconds internally, hence _next.
1044
1097
  * @private
1045
1098
  *
1046
- * @param {CronDate} prev - Input pattern
1099
+ * @param {CronDate|Date|string} prev - PreviousRun
1047
1100
  * @returns {CronDate | null} - Next run time
1048
1101
  */
1049
1102
  Cron.prototype._next = function (prev) {
1103
+
1104
+ const hasPreviousRun = (prev || this.previousrun) ? true : false;
1105
+
1106
+ // Ensure previous run is a CronDate
1107
+ prev = new CronDate(prev, this.options.timezone);
1050
1108
 
1051
1109
  // Previous run should never be before startAt
1052
1110
  if( this.options.startAt && prev && prev.getTime(true) < this.options.startAt.getTime(true) ) {
1053
1111
  prev = this.options.startAt;
1054
1112
  }
1055
-
1056
- // Calculate next run according to pattern or one-off timestamp
1057
- const nextRun = this.once || new CronDate(prev, this.options.timezone).increment(this.pattern, this.options);
1113
+
1114
+ // Calculate next run according to pattern or one-off timestamp, pass actual previous run to increment
1115
+ const
1116
+ nextRun = this.once || new CronDate(prev, this.options.timezone).increment(this.pattern, this.options, false, hasPreviousRun);
1058
1117
 
1059
1118
  if (this.once && this.once.getTime(true) <= prev.getTime(true)) {
1060
1119
  return null;
@@ -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,hasPreviousRun){if(!rerun){if(options.interval>1&&hasPreviousRun){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,hasPreviousRun)}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||this.previousrun?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,false,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});
@@ -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","hasPreviousRun","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","nextRun"],"mappings":"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"}
@@ -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,hasPreviousRun){if(!rerun){if(options.interval>1&&hasPreviousRun){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,hasPreviousRun)}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||this.previousrun?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,false,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};
@@ -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","hasPreviousRun","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","nextRun"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "croner",
3
- "version": "4.2.3",
3
+ "version": "4.3.2",
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",
@@ -38,11 +38,11 @@
38
38
  ],
39
39
  "scripts": {
40
40
  "test": "uvu test test.croner.js",
41
- "test:dist": "uvu test js && npm run test:ts",
41
+ "test:dist": "uvu test/node/js && npm run test:ts",
42
42
  "test:coverage": "c8 --include=src npm test",
43
43
  "test:lint": "eslint ./**/*.js ./**/*.cjs",
44
44
  "test:lint:fix": "eslint --fix ./**/*.js ./**/*.cjs",
45
- "test:ts": "tsc --noEmit ./test/ts/basics.ts",
45
+ "test:ts": "tsc --noEmit ./test/node/ts/basics.ts",
46
46
  "build": "npm update && npm run build:precleanup && npm run test:lint && npm run build:typings && npm run build:dist && npm run build:minify && npm run build:cleanup && npm run test:coverage && npm run test:dist",
47
47
  "build:ci": "npm run test:lint && npm run build:typings && npm run build:dist && npm run build:minify && npm run build:cleanup && npm run test:coverage && npm run test:dist",
48
48
  "build:precleanup": "(rm -rf types/* || del /Q types\\*) && (rm -rf dist/* || del /Q dist\\*)",
package/src/croner.js CHANGED
@@ -95,11 +95,10 @@ function Cron (pattern, options, func) {
95
95
  /**
96
96
  * Find next runtime, based on supplied date. Strips milliseconds.
97
97
  *
98
- * @param {Date|string} [prev] - Date to start from
98
+ * @param {CronDate|Date|string} [prev] - Date to start from
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
- let enumeration = [];
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 {CronDate|Date|string} [prev] - Starting date, defaults to now - minimum interval
151
149
  * @returns {number | null}
152
150
  */
153
151
  Cron.prototype.msToNext = function (prev) {
154
- prev = new CronDate(prev, this.options.timezone);
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
  }
@@ -255,18 +259,24 @@ Cron.prototype.schedule = function (func) {
255
259
  * Internal version of next. Cron needs millseconds internally, hence _next.
256
260
  * @private
257
261
  *
258
- * @param {CronDate} prev - Input pattern
262
+ * @param {CronDate|Date|string} prev - PreviousRun
259
263
  * @returns {CronDate | null} - Next run time
260
264
  */
261
265
  Cron.prototype._next = function (prev) {
266
+
267
+ const hasPreviousRun = (prev || this.previousrun) ? true : false;
268
+
269
+ // Ensure previous run is a CronDate
270
+ prev = new CronDate(prev, this.options.timezone);
262
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 nextRun = this.once || new CronDate(prev, this.options.timezone).increment(this.pattern, this.options);
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, false, 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;
@@ -112,16 +112,24 @@ CronDate.prototype.fromString = function (str) {
112
112
  * @param {string} pattern - The pattern used to increment current state
113
113
  * @param {CronOptions} options - Cron options used for incrementing
114
114
  * @param {boolean} [rerun=false] - If this is an internal incremental run
115
+ * @param {boolean} [hasPreviousRun] - If this run should adhere to minimum interval
115
116
  * @return {CronDate|null} - Returns itself for chaining, or null if increment wasnt possible
116
117
  */
117
- CronDate.prototype.increment = function (pattern, options, rerun) {
118
-
118
+ CronDate.prototype.increment = function (pattern, options, rerun, hasPreviousRun) {
119
+
120
+ // Always add one second, or minimum interval
119
121
  if (!rerun) {
120
- this.seconds += 1;
122
+ if (options.interval > 1 && hasPreviousRun) {
123
+ this.seconds += options.interval;
124
+ } else {
125
+ this.seconds += 1;
126
+ }
121
127
  }
122
128
 
123
- this.milliseconds = 0;
129
+ this.apply();
124
130
 
131
+ this.milliseconds = 0;
132
+
125
133
  const
126
134
 
127
135
  origTime = this.getTime(),
@@ -266,9 +274,10 @@ CronDate.prototype.increment = function (pattern, options, rerun) {
266
274
  }
267
275
 
268
276
  // If anything changed, recreate this CronDate and run again without incrementing
277
+ this.default = false;
269
278
  if (origTime != this.getTime()) {
270
279
  this.apply();
271
- return this.increment(pattern, options, true);
280
+ return this.increment(pattern, options, true, hasPreviousRun);
272
281
  } else {
273
282
  return this;
274
283
  }
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
@@ -28,10 +28,10 @@ export class Cron {
28
28
  /**
29
29
  * Find next runtime, based on supplied date. Strips milliseconds.
30
30
  *
31
- * @param {Date|string} [prev] - Date to start from
31
+ * @param {CronDate|Date|string} [prev] - Date to start from
32
32
  * @returns {Date | null} - Next run time
33
33
  */
34
- next(prev?: Date | string): Date | null;
34
+ next(prev?: CronDate | Date | string): Date | null;
35
35
  /**
36
36
  * Find next n runs, based on supplied date. Strips milliseconds.
37
37
  *
@@ -58,10 +58,10 @@ 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 {CronDate|Date|string} [prev] - Starting date, defaults to now - minimum interval
62
62
  * @returns {number | null}
63
63
  */
64
- public msToNext(prev?: Date): number | null;
64
+ public msToNext(prev?: CronDate | Date | string): number | null;
65
65
  /**
66
66
  * Stop execution
67
67
  * @public
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;
@@ -34,9 +34,11 @@ export class CronDate {
34
34
  * @param {string} pattern - The pattern used to increment current state
35
35
  * @param {CronOptions} options - Cron options used for incrementing
36
36
  * @param {boolean} [rerun=false] - If this is an internal incremental run
37
+ * @param {boolean} [hasPreviousRun] - If this run should adhere to minimum interval
37
38
  * @return {CronDate|null} - Returns itself for chaining, or null if increment wasnt possible
38
39
  */
39
- public increment(pattern: string, options: CronOptions, rerun?: boolean): CronDate | null;
40
+ public increment(pattern: string, options: CronOptions, rerun?: boolean, hasPreviousRun?: boolean): CronDate | null;
41
+ default: boolean;
40
42
  /**
41
43
  * Convert current state back to a javascript Date()
42
44
  * @public
@@ -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
@@ -68,4 +68,5 @@ export class CronPattern {
68
68
  private handleStepping;
69
69
  private replaceAlphaDays;
70
70
  private replaceAlphaMonths;
71
+ private handleNicknames;
71
72
  }