croner 4.1.91 → 4.1.95

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/dist/croner.cjs CHANGED
@@ -16,9 +16,9 @@
16
16
  * (for example) will return local time in new york, but getUTCHours()
17
17
  * will return something irrelevant.
18
18
  *
19
- * @param {date} date - Input date
19
+ * @param {Date} date - Input date
20
20
  * @param {string} tzString - Timezone string in Europe/Stockholm format
21
- * @returns {date}
21
+ * @returns {Date}
22
22
  */
23
23
  function convertTZ(date, tzString) {
24
24
  return new Date(date.toLocaleString("en-US", {timeZone: tzString}));
@@ -34,7 +34,7 @@
34
34
  function CronDate (date, timezone) {
35
35
 
36
36
  this.timezone = timezone;
37
-
37
+
38
38
  if (date && date instanceof Date) {
39
39
  this.fromDate(date);
40
40
  } else if (date === void 0) {
@@ -53,11 +53,10 @@
53
53
  * @private
54
54
  *
55
55
  * @param {Date} date - Input date
56
- * @param {boolean} fromLocal - Target already in local time
57
56
  */
58
- CronDate.prototype.fromDate = function (date, fromLocal) {
57
+ CronDate.prototype.fromDate = function (date) {
59
58
 
60
- if (this.timezone && !fromLocal) {
59
+ if (this.timezone) {
61
60
  date = convertTZ(date, this.timezone);
62
61
  }
63
62
 
@@ -68,6 +67,7 @@
68
67
  this.days = date.getDate();
69
68
  this.months = date.getMonth();
70
69
  this.years = date.getFullYear();
70
+
71
71
  };
72
72
 
73
73
  /**
@@ -83,7 +83,7 @@
83
83
  this.minutes = date.minutes;
84
84
  this.hours = date.hours;
85
85
  this.days = date.days;
86
- this.months = date.months;
86
+ this.months = date.months;
87
87
  this.years = date.years;
88
88
  };
89
89
 
@@ -120,7 +120,7 @@
120
120
  throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.");
121
121
  }
122
122
 
123
- this.fromDate(parsedDate, true);
123
+ this.fromDate(parsedDate);
124
124
  };
125
125
 
126
126
  /**
@@ -158,9 +158,27 @@
158
158
  const startPos = (override === void 0) ? this[target] + offset : 0 + offset;
159
159
 
160
160
  for( let i = startPos; i < pattern[target].length; i++ ) {
161
- if( pattern[target][i] ) {
162
- this[target] = i-offset;
163
- return true;
161
+
162
+ // If pattern matches and, in case of days, weekday matches, go on
163
+ if( pattern[target][i] && (target !== "days" || (pattern.daysOfWeek[this.getDate(true).getDay()])) ) {
164
+
165
+ // Special handling for L (last day of month), when we are searching for days
166
+ if (target === "days" && pattern.lastDayOfMonth) {
167
+ let baseDate = this.getDate(true);
168
+
169
+ // Set days to one day after today, if month changes, then we are at the last day of the month
170
+ baseDate.setDate(i-offset+1);
171
+ if (baseDate.getMonth() !== this["months"]) {
172
+ this[target] = i-offset;
173
+ return true;
174
+ }
175
+
176
+ // Normal handling
177
+ } else {
178
+ this[target] = i-offset;
179
+ return true;
180
+ }
181
+
164
182
  }
165
183
  }
166
184
  return false;
@@ -227,7 +245,6 @@
227
245
 
228
246
  }
229
247
 
230
-
231
248
  // Bail out if an impossible pattern is used
232
249
  if (this.years >= 4000) {
233
250
  return null;
@@ -236,36 +253,7 @@
236
253
  // Gp down, seconds -> minutes -> hours -> days -> months -> year
237
254
  doing++;
238
255
  }
239
-
240
- // This is a special case for last day of month, increase days until days+1 changes month, stop, and re-evaluate
241
- if (pattern.lastDayOfMonth) {
242
- let baseDate = this.getDate(true),
243
- originalDays = this.days;
244
-
245
- // Set days to one day before the first of next month
246
- baseDate.setMonth(baseDate.getMonth()+1);
247
- baseDate.setDate(0);
248
- if (this.days < baseDate.getDate()) {
249
- this.days = baseDate.getDate();
250
- }
251
-
252
- // If day has changed, reset everything before days
253
- if (this.days !== originalDays) {
254
- doing = 2;
255
- resetPrevious();
256
- }
257
- }
258
256
 
259
- // This is a special case for weekday, as the user isn't able to combine date/month patterns
260
- // with weekday patterns, it's just to increment days until we get a match.
261
- while (!pattern.daysOfWeek[this.getDate(true).getDay()]) {
262
- this.days += 1;
263
-
264
- // Reset everything before days
265
- doing = 2;
266
- resetPrevious();
267
- }
268
-
269
257
  // If anything changed, recreate this CronDate and run again without incrementing
270
258
  if (origTime != this.getTime()) {
271
259
  this.apply();
@@ -332,7 +320,42 @@
332
320
  if( isNaN(year) || isNaN(month) || isNaN(day) || isNaN(hour) || isNaN(minute) || isNaN(second) ) {
333
321
  return NaN;
334
322
  } else {
335
- return new Date(year, month-1, day, hour, minute, second);
323
+ let generatedDate;
324
+
325
+ // Check for UTC flag
326
+ if ((dateTimeString.indexOf("Z") > 0)) {
327
+
328
+ // Handle date as UTC
329
+ generatedDate = new Date(Date.UTC(year, month-1, day, hour, minute, second));
330
+
331
+ // Check generated date
332
+ if (year == generatedDate.getUTCFullYear()
333
+ && month == generatedDate.getUTCMonth()+1
334
+ && day == generatedDate.getUTCDate()
335
+ && hour == generatedDate.getUTCHours()
336
+ && minute == generatedDate.getUTCMinutes()
337
+ && second == generatedDate.getUTCSeconds()) {
338
+ return generatedDate;
339
+ } else {
340
+ return NaN;
341
+ }
342
+ } else {
343
+
344
+ // Handle date as local time
345
+ generatedDate = new Date(year, month-1, day, hour, minute, second);
346
+
347
+ // Check generated date
348
+ if (year == generatedDate.getFullYear()
349
+ && month == generatedDate.getMonth()+1
350
+ && day == generatedDate.getDate()
351
+ && hour == generatedDate.getHours()
352
+ && minute == generatedDate.getMinutes()
353
+ && second == generatedDate.getSeconds()) {
354
+ return generatedDate;
355
+ } else {
356
+ return NaN;
357
+ }
358
+ }
336
359
  }
337
360
  };
338
361
 
@@ -701,38 +724,38 @@
701
724
  ------------------------------------------------------------------------------------ */
702
725
 
703
726
  /**
704
- * @typedef {Object} CronOptions - Cron scheduler options
705
- * @property {boolean} [paused] - Job is paused
706
- * @property {boolean} [kill] - Job is about to be killed or killed
707
- * @property {boolean} [catch] - Continue exection even if a unhandled error is thrown by triggered function
708
- * @property {number} [maxRuns] - Maximum nuber of executions
709
- * @property {string | Date} [startAt] - When to start running
710
- * @property {string | Date} [stopAt] - When to stop running
711
- * @property {string} [timezone] - Time zone in Europe/Stockholm format
712
- * @property {?} [context] - Used to pass any object to scheduled function
713
- */
714
-
727
+ * @typedef {Object} CronOptions - Cron scheduler options
728
+ * @property {boolean} [paused] - Job is paused
729
+ * @property {boolean} [kill] - Job is about to be killed or killed
730
+ * @property {boolean} [catch] - Continue exection even if a unhandled error is thrown by triggered function
731
+ * @property {number} [maxRuns] - Maximum nuber of executions
732
+ * @property {string | Date} [startAt] - When to start running
733
+ * @property {string | Date} [stopAt] - When to stop running
734
+ * @property {string} [timezone] - Time zone in Europe/Stockholm format
735
+ * @property {?} [context] - Used to pass any object to scheduled function
736
+ */
737
+
715
738
  /**
716
- * Many JS engines stores the delay as a 32-bit signed integer internally.
717
- * This causes an integer overflow when using delays larger than 2147483647,
718
- * resulting in the timeout being executed immediately.
719
- *
720
- * All JS engines implements an immediate execution of delays larger that a 32-bit
721
- * int to keep the behaviour concistent.
722
- *
723
- * @type {number}
724
- */
739
+ * Many JS engines stores the delay as a 32-bit signed integer internally.
740
+ * This causes an integer overflow when using delays larger than 2147483647,
741
+ * resulting in the timeout being executed immediately.
742
+ *
743
+ * All JS engines implements an immediate execution of delays larger that a 32-bit
744
+ * int to keep the behaviour concistent.
745
+ *
746
+ * @type {number}
747
+ */
725
748
  const maxDelay = Math.pow(2, 32 - 1) - 1;
726
749
 
727
750
  /**
728
- * Cron entrypoint
729
- *
730
- * @constructor
731
- * @param {string|date} pattern - Input pattern, input date, or input ISO 8601 time string
732
- * @param {CronOptions|Function} [options] - Options
733
- * @param {Function} [func] - Function to be run each iteration of pattern
734
- * @returns {Cron}
735
- */
751
+ * Cron entrypoint
752
+ *
753
+ * @constructor
754
+ * @param {string|Date} pattern - Input pattern, input date, or input ISO 8601 time string
755
+ * @param {CronOptions|Function} [options] - Options
756
+ * @param {Function} [func] - Function to be run each iteration of pattern
757
+ * @returns {Cron}
758
+ */
736
759
  function Cron (pattern, options, func) {
737
760
 
738
761
  // Optional "new" keyword
@@ -761,8 +784,8 @@
761
784
  }
762
785
 
763
786
  /**
764
- * Allow shorthand scheduling
765
- */
787
+ * Allow shorthand scheduling
788
+ */
766
789
  if( func !== void 0 ) {
767
790
  this.fn = func;
768
791
  this.schedule();
@@ -773,12 +796,12 @@
773
796
  }
774
797
 
775
798
  /**
776
- * Internal function that validates options, and sets defaults
777
- * @private
778
- *
779
- * @param {CronOptions} options
780
- * @returns {CronOptions}
781
- */
799
+ * Internal function that validates options, and sets defaults
800
+ * @private
801
+ *
802
+ * @param {CronOptions} options
803
+ * @returns {CronOptions}
804
+ */
782
805
  Cron.prototype.processOptions = function (options) {
783
806
 
784
807
  // If no options are passed, create empty object
@@ -804,11 +827,11 @@
804
827
  };
805
828
 
806
829
  /**
807
- * Find next runtime, based on supplied date. Strips milliseconds.
808
- *
809
- * @param {Date} [prev] - Date to start from
810
- * @returns {Date | null} - Next run time
811
- */
830
+ * Find next runtime, based on supplied date. Strips milliseconds.
831
+ *
832
+ * @param {Date|string} [prev] - Date to start from
833
+ * @returns {Date | null} - Next run time
834
+ */
812
835
  Cron.prototype.next = function (prev) {
813
836
  prev = new CronDate(prev, this.options.timezone);
814
837
  const next = this._next(prev);
@@ -816,33 +839,28 @@
816
839
  };
817
840
 
818
841
  /**
819
- * Find next n runs, based on supplied date. Strips milliseconds.
820
- *
821
- * @param {number} n - Number of runs to enumerate
822
- * @param {Date} [prev] - Date to start from
823
- * @returns {Date[]} - Next n run times
824
- */
842
+ * Find next n runs, based on supplied date. Strips milliseconds.
843
+ *
844
+ * @param {number} n - Number of runs to enumerate
845
+ * @param {Date|string} [previous] - Date to start from
846
+ * @returns {Date[]} - Next n run times
847
+ */
825
848
  Cron.prototype.enumerate = function (n, previous) {
826
849
  let enumeration = [];
827
850
 
828
- while(n--) {
829
- previous = this.next(previous);
830
- if (previous !== null) {
831
- enumeration.push(previous);
832
- } else {
833
- break;
834
- }
851
+ while(n-- && (previous = this.next(previous))) {
852
+ enumeration.push(previous);
835
853
  }
836
854
 
837
855
  return enumeration;
838
856
  };
839
857
 
840
858
  /**
841
- * Is running?
842
- * @public
843
- *
844
- * @returns {boolean} - Running or not
845
- */
859
+ * Is running?
860
+ * @public
861
+ *
862
+ * @returns {boolean} - Running or not
863
+ */
846
864
  Cron.prototype.running = function () {
847
865
  const msLeft = this.msToNext(this.previousrun);
848
866
  const running = !this.options.paused && this.fn !== void 0;
@@ -850,30 +868,30 @@
850
868
  };
851
869
 
852
870
  /**
853
- * Return previous run time
854
- * @public
855
- *
856
- * @returns {Date | null} - Previous run time
857
- */
871
+ * Return previous run time
872
+ * @public
873
+ *
874
+ * @returns {Date | null} - Previous run time
875
+ */
858
876
  Cron.prototype.previous = function () {
859
877
  return this.previousrun ? this.previousrun.getDate() : null;
860
878
  };
861
879
 
862
880
  /**
863
- * Internal version of next. Cron needs millseconds internally, hence _next.
864
- * @private
865
- *
866
- * @param {CronDate} prev - Input pattern
867
- * @returns {CronDate | null} - Next run time
868
- */
881
+ * Internal version of next. Cron needs millseconds internally, hence _next.
882
+ * @private
883
+ *
884
+ * @param {CronDate} prev - Input pattern
885
+ * @returns {CronDate | null} - Next run time
886
+ */
869
887
  Cron.prototype._next = function (prev) {
870
888
 
871
889
  // Previous run should never be before startAt
872
890
  if( this.options.startAt && prev && prev.getTime(true) < this.options.startAt.getTime(true) ) {
873
- prev = new CronDate(this.options.startAt, this.options.timezone);
891
+ prev = this.options.startAt;
874
892
  }
875
893
 
876
- // Calculate next run according to pattern or one-of
894
+ // Calculate next run according to pattern or one-off timestamp
877
895
  const nextRun = this.once || new CronDate(prev, this.options.timezone).increment(this.pattern);
878
896
 
879
897
  if (this.once && this.once.getTime(true) <= prev.getTime(true)) {
@@ -894,12 +912,12 @@
894
912
  };
895
913
 
896
914
  /**
897
- * Returns number of milliseconds to next run
898
- * @public
899
- *
900
- * @param {Date} [prev] - Starting date, defaults to now
901
- * @returns {number | null}
902
- */
915
+ * Returns number of milliseconds to next run
916
+ * @public
917
+ *
918
+ * @param {Date} [prev] - Starting date, defaults to now
919
+ * @returns {number | null}
920
+ */
903
921
  Cron.prototype.msToNext = function (prev) {
904
922
  prev = new CronDate(prev, this.options.timezone);
905
923
  const next = this._next(prev);
@@ -911,9 +929,9 @@
911
929
  };
912
930
 
913
931
  /**
914
- * Stop execution
915
- * @public
916
- */
932
+ * Stop execution
933
+ * @public
934
+ */
917
935
  Cron.prototype.stop = function () {
918
936
  this.options.kill = true;
919
937
  // Stop any awaiting call
@@ -923,32 +941,32 @@
923
941
  };
924
942
 
925
943
  /**
926
- * Pause executionR
927
- * @public
928
- *
929
- * @returns {boolean} - Wether pause was successful
930
- */
944
+ * Pause executionR
945
+ * @public
946
+ *
947
+ * @returns {boolean} - Wether pause was successful
948
+ */
931
949
  Cron.prototype.pause = function () {
932
950
  return (this.options.paused = true) && !this.options.kill;
933
951
  };
934
952
 
935
953
  /**
936
- * Pause execution
937
- * @public
938
- *
939
- * @returns {boolean} - Wether resume was successful
940
- */
954
+ * Pause execution
955
+ * @public
956
+ *
957
+ * @returns {boolean} - Wether resume was successful
958
+ */
941
959
  Cron.prototype.resume = function () {
942
960
  return !(this.options.paused = false) && !this.options.kill;
943
961
  };
944
962
 
945
963
  /**
946
- * Schedule a new job
947
- * @public
948
- *
949
- * @param {Function} func - Function to be run each iteration of pattern
950
- * @returns {Cron}
951
- */
964
+ * Schedule a new job
965
+ * @public
966
+ *
967
+ * @param {Function} func - Function to be run each iteration of pattern
968
+ * @returns {Cron}
969
+ */
952
970
  Cron.prototype.schedule = function (func) {
953
971
 
954
972
  // If a function is already scheduled, bail out
@@ -964,19 +982,15 @@
964
982
  let waitMs = this.msToNext(this.previousrun);
965
983
  if ( waitMs === null ) return this;
966
984
 
967
- // Prioritize context before closure,
968
- // to allow testing of maximum delay.
969
- const _maxDelay = this.maxDelay || maxDelay;
970
-
971
985
  // setTimeout cant handle more than Math.pow(2, 32 - 1) - 1 ms
972
- if( waitMs > _maxDelay ) {
973
- waitMs = _maxDelay;
986
+ if( waitMs > maxDelay ) {
987
+ waitMs = maxDelay;
974
988
  }
975
989
 
976
990
  // Ok, go!
977
- const go = () => {
991
+ this.currentTimeout = setTimeout(() => {
978
992
 
979
- if( waitMs !== _maxDelay && !this.options.paused ) {
993
+ if( waitMs !== maxDelay && !this.options.paused ) {
980
994
 
981
995
  this.options.maxRuns--;
982
996
 
@@ -998,9 +1012,7 @@
998
1012
  // Recurse
999
1013
  this.schedule();
1000
1014
 
1001
- };
1002
-
1003
- this.currentTimeout = setTimeout(go, waitMs );
1015
+ }, waitMs );
1004
1016
 
1005
1017
  return this;
1006
1018
 
@@ -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 convertTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){this.fromDate(date)}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,fromLocal){if(this.timezone&&!fromLocal){date=convertTZ(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,true)};CronDate.prototype.increment=function(pattern,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+offset;for(let i=startPos;i<pattern[target].length;i++){if(pattern[target][i]){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(pattern.lastDayOfMonth){let baseDate=this.getDate(true),originalDays=this.days;baseDate.setMonth(baseDate.getMonth()+1);baseDate.setDate(0);if(this.days<baseDate.getDate()){this.days=baseDate.getDate()}if(this.days!==originalDays){doing=2;resetPrevious()}}while(!pattern.daysOfWeek[this.getDate(true).getDay()]){this.days+=1;doing=2;resetPrevious()}if(origTime!=this.getTime()){this.apply();return this.increment(pattern,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=convertTZ(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{return new Date(year,month-1,day,hour,minute,second)}};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.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].toUpperCase()=="L"){parts[3]="28,29,30,31";this.lastDayOfMonth=true}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);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{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(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)+valueIndexOffset;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+valueIndexOffset]=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+valueIndexOffset]=1}};CronPattern.prototype.handleStepping=function(conf,type,valueIndexOffset){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+valueIndexOffset]=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=this.processOptions(options);if(pattern&&pattern instanceof Date){this.once=new CronDate(pattern,this.options.timezone)}else if(pattern&&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.processOptions=function(options){if(options===void 0){options={}}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};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);if(previous!==null){enumeration.push(previous)}else{break}}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._next=function(prev){if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=new CronDate(this.options.startAt,this.options.timezone)}const nextRun=this.once||new CronDate(prev,this.options.timezone).increment(this.pattern);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}};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;const _maxDelay=this.maxDelay||maxDelay;if(waitMs>_maxDelay){waitMs=_maxDelay}const go=()=>{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()};this.currentTimeout=setTimeout(go,waitMs);return this};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 convertTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){this.fromDate(date)}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=convertTZ(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,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+offset;for(let i=startPos;i<pattern[target].length;i++){if(pattern[target][i]&&(target!=="days"||pattern.daysOfWeek[this.getDate(true).getDay()])){if(target==="days"&&pattern.lastDayOfMonth){let baseDate=this.getDate(true);baseDate.setDate(i-offset+1);if(baseDate.getMonth()!==this["months"]){this[target]=i-offset;return true}}else{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,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=convertTZ(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.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].toUpperCase()=="L"){parts[3]="28,29,30,31";this.lastDayOfMonth=true}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);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{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(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)+valueIndexOffset;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+valueIndexOffset]=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+valueIndexOffset]=1}};CronPattern.prototype.handleStepping=function(conf,type,valueIndexOffset){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+valueIndexOffset]=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=this.processOptions(options);if(pattern&&pattern instanceof Date){this.once=new CronDate(pattern,this.options.timezone)}else if(pattern&&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.processOptions=function(options){if(options===void 0){options={}}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};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._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);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}};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};return Cron});
@@ -1 +1 @@
1
- {"version":3,"sources":["dist/croner.cjs"],"names":["global","factory","exports","module","define","amd","globalThis","self","Cron","this","convertTZ","date","tzString","Date","toLocaleString","timeZone","CronDate","timezone","fromDate","fromString","fromCronDate","TypeError","prototype","fromLocal","milliseconds","getMilliseconds","seconds","getSeconds","minutes","getMinutes","hours","getHours","days","getDate","months","getMonth","years","getFullYear","apply","newDate","str","parsedDate","parseISOLocal","isNaN","increment","pattern","rerun","origTime","getTime","findNext","target","offset","override","startPos","let","i","length","resetPrevious","doing","toDo","currentValue","lastDayOfMonth","baseDate","originalDays","setMonth","setDate","daysOfWeek","getDay","internal","targetDate","dateTimeString","dateTimeStringSplit","split","NaN","year","parseInt","month","day","hour","minute","second","CronPattern","Array","fill","parse","constructor","String","parts","trim","replace","unshift","toUpperCase","replaceAlphaMonths","replaceAlphaDays","initDate","throwAtIllegalCharacters","partToArray","type","conf","valueIndexOffset","recursed","arr","indexOf","Error","handleRangeWithStepping","handleRange","handleStepping","handleNumber","reValidCron","test","matches","match","lower","upper","steps","start","maxDelay","Math","pow","options","func","processOptions","once","fn","schedule","paused","maxRuns","Infinity","catch","kill","startAt","stopAt","next","prev","_next","enumerate","n","previous","enumeration","push","running","msLeft","msToNext","previousrun","nextRun","stop","currentTimeout","clearTimeout","pause","resume","waitMs","_maxDelay","go","context","_e","setTimeout"],"mappings":"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"}
1
+ {"version":3,"sources":["dist/croner.cjs"],"names":["global","factory","exports","module","define","amd","globalThis","self","Cron","this","convertTZ","date","tzString","Date","toLocaleString","timeZone","CronDate","timezone","fromDate","fromString","fromCronDate","TypeError","prototype","milliseconds","getMilliseconds","seconds","getSeconds","minutes","getMinutes","hours","getHours","days","getDate","months","getMonth","years","getFullYear","apply","newDate","str","parsedDate","parseISOLocal","isNaN","increment","pattern","rerun","origTime","getTime","findNext","target","offset","override","startPos","let","i","length","daysOfWeek","getDay","lastDayOfMonth","baseDate","setDate","resetPrevious","doing","toDo","currentValue","internal","targetDate","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","match","lower","upper","steps","start","maxDelay","Math","pow","options","func","processOptions","once","fn","schedule","paused","maxRuns","Infinity","catch","kill","startAt","stopAt","next","prev","_next","enumerate","n","previous","enumeration","push","running","msLeft","msToNext","previousrun","nextRun","stop","currentTimeout","clearTimeout","pause","resume","waitMs","setTimeout","context","_e"],"mappings":"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"}