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 +162 -150
- package/dist/croner.min.js +1 -1
- package/dist/croner.min.js.map +1 -1
- package/dist/croner.min.mjs +1 -1
- package/dist/croner.min.mjs.map +1 -1
- package/package.json +3 -2
- package/src/croner.js +97 -108
- package/src/date.js +63 -40
- package/src/timezone.js +2 -2
- package/types/croner.d.ts +64 -64
- package/types/timezone.d.ts +3 -3
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 {
|
|
19
|
+
* @param {Date} date - Input date
|
|
20
20
|
* @param {string} tzString - Timezone string in Europe/Stockholm format
|
|
21
|
-
* @returns {
|
|
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
|
|
57
|
+
CronDate.prototype.fromDate = function (date) {
|
|
59
58
|
|
|
60
|
-
if (this.timezone
|
|
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
|
|
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
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
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
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
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
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
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
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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
|
-
|
|
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
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
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
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
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
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
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
|
-
|
|
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
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
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
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
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
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
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 =
|
|
891
|
+
prev = this.options.startAt;
|
|
874
892
|
}
|
|
875
893
|
|
|
876
|
-
// Calculate next run according to pattern or one-
|
|
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
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
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
|
-
|
|
915
|
-
|
|
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
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
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
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
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
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
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 >
|
|
973
|
-
waitMs =
|
|
986
|
+
if( waitMs > maxDelay ) {
|
|
987
|
+
waitMs = maxDelay;
|
|
974
988
|
}
|
|
975
989
|
|
|
976
990
|
// Ok, go!
|
|
977
|
-
|
|
991
|
+
this.currentTimeout = setTimeout(() => {
|
|
978
992
|
|
|
979
|
-
if( waitMs !==
|
|
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
|
|
package/dist/croner.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.Cron=factory())})(this,function(){"use strict";function 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});
|
package/dist/croner.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dist/croner.cjs"],"names":["global","factory","exports","module","define","amd","globalThis","self","Cron","this","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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"}
|