croner 11.0.0-dev.8 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/croner.cjs +1 -1
- package/dist/croner.d.cts +25 -3
- package/dist/croner.d.ts +25 -3
- package/dist/croner.js +1 -1
- package/dist/croner.umd.js +1 -1
- package/package.json +24 -4
package/README.md
CHANGED
|
@@ -73,13 +73,13 @@ const { Cron } = require("croner");
|
|
|
73
73
|
Using Deno
|
|
74
74
|
|
|
75
75
|
```typescript
|
|
76
|
-
import { Cron } from "jsr:@hexagon/croner@11.0.0
|
|
76
|
+
import { Cron } from "jsr:@hexagon/croner@11.0.0";
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
In a webpage using the UMD-module
|
|
80
80
|
|
|
81
81
|
```html
|
|
82
|
-
<script src="https://cdn.jsdelivr.net/npm/croner@11.0.0
|
|
82
|
+
<script src="https://cdn.jsdelivr.net/npm/croner@11.0.0/dist/croner.umd.js"></script>
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
## Documentation
|
|
@@ -97,7 +97,7 @@ Cron takes three arguments
|
|
|
97
97
|
// - First: Cron pattern, js date object (fire once), or ISO 8601 time string (fire once)
|
|
98
98
|
// - Second: Options (optional)
|
|
99
99
|
// - Third: Function run trigger (optional)
|
|
100
|
-
const job = new Cron("* * * * * *", { maxRuns: 1 }
|
|
100
|
+
const job = new Cron("* * * * * *", { maxRuns: 1 });
|
|
101
101
|
|
|
102
102
|
// If function is omitted in constructor, it can be scheduled later
|
|
103
103
|
job.schedule((job, /* optional */ context) => {});
|
|
@@ -150,8 +150,8 @@ job.name // Optional job name, populated if a name were passed to options
|
|
|
150
150
|
| maxRuns | Infinite | Number | |
|
|
151
151
|
| catch | false | Boolean\|Function | Catch unhandled errors in triggered function. Passing `true` will silently ignore errors. Passing a callback function will trigger this callback on error. |
|
|
152
152
|
| timezone | undefined | String | Timezone in Europe/Stockholm format |
|
|
153
|
-
| startAt | undefined | String
|
|
154
|
-
| stopAt | undefined | String
|
|
153
|
+
| startAt | undefined | String\|Date | Date, or ISO 8601 formatted datetime (2021-10-17T23:43:00)<br>in local time (according to the timezone or utcOffset option if passed). Inclusive, a run exactly at startAt is included (except when `interval` is set) |
|
|
154
|
+
| stopAt | undefined | String\|Date | Date, or ISO 8601 formatted datetime (2021-10-17T23:43:00)<br>in local time (according to the timezone or utcOffset option if passed). Exclusive, a run exactly at stopAt is not included |
|
|
155
155
|
| interval | 0 | Number | Minimum number of seconds between triggers. |
|
|
156
156
|
| paused | false | Boolean | If the job should be paused from start. |
|
|
157
157
|
| context | undefined | Any | Passed as the second parameter to triggered function |
|
package/dist/croner.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var O=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var B=(s,e)=>{for(var t in e)O(s,t,{get:e[t],enumerable:!0})},V=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $(e))!H.call(s,i)&&i!==t&&O(s,i,{get:()=>e[i],enumerable:!(r=Z(e,i))||r.enumerable});return s};var J=s=>V(O({},"__esModule",{value:!0}),s);var G={};B(G,{Cron:()=>E,CronDate:()=>f,CronIterator:()=>M,CronPattern:()=>T,scheduledJobs:()=>b});module.exports=J(G);function D(s){return Date.UTC(s.y,s.m-1,s.d,s.h,s.i,s.s)}function w(s,e){return s.y===e.y&&s.m===e.m&&s.d===e.d&&s.h===e.h&&s.i===e.i&&s.s===e.s}function N(s){let e=s.substring(9);return e.includes("Z")||e.includes("+")||e.includes("-")}function K(s,e){let t=new Date(Date.parse(s));if(isNaN(t))throw new Error("Invalid ISO8601 passed to timezone parser.");return N(s)?y(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),"Etc/UTC"):y(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e)}function v(s,e,t){return R(K(s,e),t)}function R(s,e){let t=_(s);if(t.kind==="single")return t.date;if(t.kind==="ambiguous")return t.earlier;if(e)throw new Error("Invalid date passed to fromTZ()");return t.after}function _(s){let e=D(s),t=a=>P(new Date(a),s.tz),r=e-t(e),i=g(new Date(r),s.tz);if(w(i,s)){let a=D(i)-r,o=r-(t(r-U)-a);if(o<r&&w(g(new Date(o),s.tz),s))return{kind:"ambiguous",earlier:new Date(o),later:new Date(r)};let u=r+(a-t(r+U));return u>r&&w(g(new Date(u),s.tz),s)?{kind:"ambiguous",earlier:new Date(r),later:new Date(u)}:{kind:"single",date:new Date(r)}}let n=e-(D(i)-r);return w(g(new Date(n),s.tz),s)?{kind:"single",date:new Date(n)}:{kind:"gap",before:new Date(Math.min(r,n)),after:new Date(Math.max(r,n))}}var U=3*36e5;function P(s,e){return D(g(s,e))-(s.getTime()-s.getUTCMilliseconds())}function k(s,e,t){let r=P(new Date(s),t);for(;e-s>1e3;){let i=s+Math.floor((e-s)/2e3)*1e3;P(new Date(i),t)===r?s=i:e=i}return e}function W(s,e){let t=_(g(new Date(s),e));if(t.kind==="ambiguous")return s<t.later.getTime()?"earlier":"later"}var S=new Map;function g(s,e){if(e===void 0)return y(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds());let t=S.get(e),r;try{t||(t=new Intl.DateTimeFormat("en-US",{timeZone:e,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),S.set(e,t)),r=t.formatToParts(s)}catch(n){let a=n instanceof Error?n.message:String(n);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let i={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let n of r)(n.type==="year"||n.type==="month"||n.type==="day"||n.type==="hour"||n.type==="minute"||n.type==="second")&&(i[n.type]=parseInt(n.value,10));if(isNaN(i.year)||isNaN(i.month)||isNaN(i.day)||isNaN(i.hour)||isNaN(i.minute)||isNaN(i.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(i)}`);return i.hour===24&&(i.hour=0),{y:i.year,m:i.month,d:i.day,h:i.hour,i:i.minute,s:i.second,tz:e}}function y(s,e,t,r,i,n,a){return{y:s,m:e,d:t,h:r,i,s:n,tz:a}}var A=[1,2,4,8,16],T=class s{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;isFixedTime;constructor(e,t,r){this.pattern=e,this.timezone=t,this.mode=r?.mode??"auto",this.alternativeWeekdays=r?.alternativeWeekdays??!1,this.sloppyRanges=r?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.isFixedTime=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let n;switch(this.mode){case"5-part":n=5;break;case"6-part":n=6;break;case"7-part":n=7;break;case"5-or-6-parts":n=[5,6];break;case"6-or-7-parts":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let o=Array.isArray(n)?n.join(" or "):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${o} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),this.pattern.indexOf("?")>=0)for(let n=0;n<e.length;n++)e[n]=e[n].replace(/\?/g,"*");if(e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlpha(e[4],s.MONTH_NAMES)),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlpha(e[5],s.DAY_NAMES_QUARTZ):this.replaceAlpha(e[5],s.DAY_NAMES)),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let r=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],r,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7]);let i=(n,a)=>!n.includes("*")&&!n.includes("/")&&a.filter(o=>o).length===1;this.isFixedTime=i(e[0],this.second)&&i(e[1],this.minute)&&i(e[2],this.hour)}partToArray(e,t,r,i){let n=this[e];if(t===""&&!(e==="day"&&(this.lastDayOfMonth||this.lastWeekday)))throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return n.fill(i);let a=t.split(",");if(a.length>1)for(let o of a)this.partToArray(e,o,r,i);else t.includes("-")&&t.includes("/")?this.handleRangeWithStepping(t,e,r,i):t.includes("-")?this.handleRange(t,e,r,i):t.includes("/")?this.handleStepping(t,e,r,i):t!==""&&this.handleNumber(t,e,r,i)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,r,i){let n=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(n[0],10)+r;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,n[1]||i)}setPart(e,t,r){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,r);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=r}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,r,i,n){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+n+"'");if(r!==void 0){if(r===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(r>this[i].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[i].length+")")}}handleRangeWithStepping(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let n=this.extractNth(e,t),a=n[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,u,l]=a,c=parseInt(o,10)+r,d=parseInt(u,10)+r,m=parseInt(l,10);this.validateNotNaN(c,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(d,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(m,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(c,d,m,t,e);for(let p=c;p<=d;p+=m)this.setPart(t,p,n[1]||i)}extractNth(e,t){let r=e,i;if(r.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");i=r.split("#")[1],r=r.split("#")[0]}else if(r.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");i="L",r=r.slice(0,-1)}return[r,i]}handleRange(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let n=this.extractNth(e,t),a=n[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+r,u=parseInt(a[1],10)+r;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(u,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,u,void 0,t,e);for(let l=o;l<=u;l++)this.setPart(t,l,n[1]||i)}handleStepping(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let n=this.extractNth(e,t),a=n[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+r);let u=parseInt(a[1],10);this.validateNotNaN(u,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,u,t,e);for(let l=o;l<this[t].length;l+=u)t==="year"&&l===0||this.setPart(t,l,n[1]||i)}replaceAlpha(e,t){let r=e;for(let[i,n]of Object.entries(t))r=r.replace(new RegExp(i,"gi"),n);return r}static DAY_NAMES={"-sun":"-7",sun:"0",mon:"1",tue:"2",wed:"3",thu:"4",fri:"5",sat:"6"};static DAY_NAMES_QUARTZ={sun:"1",mon:"2",tue:"3",wed:"4",thu:"5",fri:"6",sat:"7"};static MONTH_NAMES={jan:"1",feb:"2",mar:"3",apr:"4",may:"5",jun:"6",jul:"7",aug:"8",sep:"9",oct:"10",nov:"11",dec:"12"};static NICKNAME_MAP={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"};handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return s.NICKNAME_MAP[t]||e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|A[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}};var Q=[31,28,31,30,31,30,31,31,30,31,30,31],h=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],f=class s{tz;instantMs;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(e==null)this.fromDate(new Date);else if(e&&typeof e=="string")this.fromString(e);else if(e instanceof s)this.fromCronDate(e);else throw new TypeError("CronDate: Invalid type ("+typeof e+") passed to CronDate constructor")}getLastDayOfMonth(e,t){return t!==1?Q[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let r=this.getLastDayOfMonth(e,t),n=new Date(Date.UTC(e,t,r)).getUTCDay();return n===0?r-2:n===6?r-1:r}getNearestWeekday(e,t,r){let i=this.getLastDayOfMonth(e,t);if(r>i)return-1;let a=new Date(Date.UTC(e,t,r)).getUTCDay();return a===0?r===i?r-2:r+1:a===6?r===1?r+2:r-1:r}isNthWeekdayOfMonth(e,t,r,i){let a=new Date(Date.UTC(e,t,r)).getUTCDay(),o=0;for(let u=1;u<=r;u++)new Date(Date.UTC(e,t,u)).getUTCDay()===a&&o++;if(i&63&&A[o-1]&i)return!0;if(i&32){let u=this.getLastDayOfMonth(e,t);for(let l=r+1;l<=u;l++)if(new Date(Date.UTC(e,t,l)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y,this.instantMs=e.getTime()-this.ms}catch(t){let r=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${r}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear(),this.instantMs=e.getTime()-this.ms}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms,this.instantMs=e.instantMs}apply(){if(this.month>11||this.month<0||this.day>this.getLastDayOfMonth(this.year,this.month)||this.day<1||this.hour>23||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(0);return e.setUTCFullYear(this.year,this.month,this.day),e.setUTCHours(this.hour,this.minute,this.second,this.ms),this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz=="number"){if(N(e))return this.fromDate(v(e));let t=v(e,"Etc/UTC");this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(v(e,this.tz))}findNext(e,t,r,i){return this._findMatch(e,t,r,i,1)}_matchDayValue(e,t,r,i){let n=e;if(!n){for(let a=0;a<r.nearestWeekdays.length;a++)if(r.nearestWeekdays[a]){let o=this.getNearestWeekday(this.year,this.month,a+1);if(o!==-1&&o===t){n=1;break}}}if(r.lastWeekday){let a=this.getLastWeekday(this.year,this.month);t===a&&(n=1)}if(r.lastDayOfMonth){let a=this.getLastDayOfMonth(this.year,this.month);t===a&&(n=1)}if(!r.starDOW){let a=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),o=r.dayOfWeek[(a+(t-1))%7];o&&o&63&&(o=this.isNthWeekdayOfMonth(this.year,this.month,t,o)?1:0),r.useAndLogic?n=n&&o:!i.domAndDow&&!r.starDOM?n=n||o:n=n&&o}return n}_findMatch(e,t,r,i,n){let a=this[t],o=this[t]+i,u=n===1?l=>l<r[t].length:l=>l>=0;for(let l=o;u(l);l+=n){let c=r[t][l];if(t==="day"&&(c=this._matchDayValue(c,l-i,r,e)),c)return this[t]=l-i,a!==this[t]?2:1}return 3}recurse(e,t,r){let i=this.year,n=r;for(;typeof n=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;n=this.recurseStep(e,t,n)}return n}recurseStep(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let n=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){n=a;break}if(n===-1)return null;this.year=n,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let i=this.findNext(t,h[r][0],e,h[r][2]);if(i>1){let n=r+1;for(;n<h.length;)this[h[n][0]]=-h[n][2],n++;if(i===3){if(this[h[r][1]]++,this[h[r][0]]=-h[r][2],this.apply(),r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return 0}else if(this.apply())return r-1}return r+=1,r>=h.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:r}increment(e,t,r){return this.instantMs=void 0,this.second+=t.interval!==void 0&&t.interval>1&&r?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.instantMs=void 0,this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0)}recurseBackward(e,t,r){let i=this.year,n=r;for(;typeof n=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;n=this.recurseBackwardStep(e,t,n)}return n}recurseBackwardStep(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let n=-1;for(let a=this.year-1;a>=0;a--)if(e.year[a]===1){n=a;break}if(n===-1)return null;this.year=n,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,h[r][0],e,h[r][2]);if(i>1){let n=r+1;for(;n<h.length;){let a=h[n][0],o=h[n][2],u=this.getMaxPatternValue(a,e,o);this[a]=u,n++}if(i===3){if(this[h[r][1]]--,r===0){let u=this.getLastDayOfMonth(this.year,this.month);this.day>u&&(this.day=u)}if(r===1)if(this.day<=0)this.day=1;else{let u=this.year,l=this.month;for(;l<0;)l+=12,u--;for(;l>11;)l-=12,u++;let c=this.getLastDayOfMonth(u,l);this.day>c&&(this.day=c)}this.apply();let a=h[r][0],o=h[r][2];if(this[a]=this.getMaxPatternValue(a,e,o),this.apply(),r===0){let u=h[1][2],l=this.getMaxPatternValue("day",e,u);l!==this.day&&(this.day=l,this.hour=this.getMaxPatternValue("hour",e,h[2][2]),this.minute=this.getMaxPatternValue("minute",e,h[3][2]),this.second=this.getMaxPatternValue("second",e,h[4][2]))}if(r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return 0}else if(this.apply())return r-1}return r+=1,r>=h.length?this:this.year<0?null:r}getMaxPatternValue(e,t,r){let i=t[e].length-1-r;for(let n=t[e].length-1;n>=0;n--)if(t[e][n]){i=n-r;break}if(e==="day"){let n=this.getLastDayOfMonth(this.year,this.month);return t.lastDayOfMonth||!t.starDOW?n:Math.min(i,n)}return i}findPrevious(e,t,r,i){return this._findMatch(e,t,r,i,-1)}getDate(e){return!e&&this.instantMs!==void 0&&typeof this.tz!="number"?new Date(this.instantMs+(this.tz===void 0?this.ms:0)):e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):R(y(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let r=0;r<h.length;r++){let i=h[r][0],n=h[r][2],a=this[i];if(a+n<0||a+n>=e[i].length)return!1;let o=e[i][a+n];if(i==="day"&&(o=this._matchDayValue(o,a,e,t)),!o)return!1}return!0}};function L(s){s===void 0&&(s={}),delete s.name,s.legacyMode!==void 0&&s.domAndDow===void 0?s.domAndDow=!s.legacyMode:s.domAndDow===void 0&&(s.domAndDow=!1),s.legacyMode=!s.domAndDow;let e=(r,i)=>r===void 0?i:r;if(s.paused=e(s.paused,!1),s.maxRuns=e(s.maxRuns,1/0),s.catch=e(s.catch,!1),s.unref=e(s.unref,!1),s.mode=e(s.mode,"auto"),s.alternativeWeekdays=e(s.alternativeWeekdays,!1),s.sloppyRanges=e(s.sloppyRanges,!1),s.allowPast=e(s.allowPast,!1),s.interval=s.interval===void 0?0:parseInt(s.interval.toString(),10),s.utcOffset=s.utcOffset===void 0?void 0:parseInt(s.utcOffset.toString(),10),s.dayOffset=s.dayOffset===void 0?0:parseInt(s.dayOffset.toString(),10),!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(s.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");s.timezone===""&&(s.timezone=void 0);let t=s.timezone??s.utcOffset;if(s.startAt&&(s.startAt=I(new f(s.startAt,t))),s.stopAt&&(s.stopAt=I(new f(s.stopAt,t))),s.interval!==null){if(isNaN(s.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(s.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(s.utcOffset!==void 0){if(isNaN(s.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(s.utcOffset<-870||s.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(s.utcOffset!==void 0&&s.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(s.unref!==!0&&s.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(s.dayOffset!==void 0&&s.dayOffset!==0&&isNaN(s.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return s}function I(s){return s.ms?(s.ms=0,new f(new Date(s.getTime()+1e3),s.tz)):s}function C(s){return typeof s=="function"}function F(s){return C(s)}function Y(s){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(s):s&&typeof s.unref<"u"&&s.unref()}var x=1440*60*1e3,j=30*1e3,b=[],E=class{name;options;_states;fn;getTz(){return this.options.timezone??this.options.utcOffset}applyDayOffset(e){let t=this._offsetMs();return t?new Date(e.getTime()+t):e}_offsetMs(){return(this.options.dayOffset??0)*x}get _startAt(){return this.options.startAt}get _stopAt(){return this.options.stopAt}_nextTarget(e,t){let r=this._offsetMs(),i=this._next(this._shift(e),new Date(t.getTime()-r),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return i?this.applyDayOffset(i.getDate(!1)):null}_previousTarget(e,t){let r=this._previous(this._shift(e??t),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return r?this.applyDayOffset(r.getDate(!1)):null}_shift(e){if(e!=null)return new f(new Date(this._toMs(e)-this._offsetMs()),this.getTz())}constructor(e,t,r){let i,n;if(C(t))n=t;else if(typeof t=="object")i=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(C(r))n=r;else if(typeof r=="object")i=r;else if(r!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=i?.name,this.options=L(i),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:i?i.maxRuns:void 0,paused:i?i.paused:!1,pattern:new T("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new f(e,this.getTz()):this._states.pattern=new T(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(b.find(o=>o.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");b.push(this)}return n!==void 0&&F(n)&&(this.fn=n,this.schedule()),this}nextRun(e){return this._nextTarget(e,new Date)}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let r=t||this._states.currentRun||void 0;return this._enumerateRuns(e,r,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}enumerate(e){return new M(this,e)}_enumerateRuns(e,t,r){let i=[],n=new Date,a=t;for(;e-- >0;){let o=r==="next"?this._nextTarget(a,n):this._previousTarget(a,n);if(!o)break;i.push(o),a=o}return i}match(e){if(this._states.once){let r=new f(e,this.getTz());r.ms=0;let i=new f(this._states.once,this.getTz());return i.ms=0,r.getTime()===i.getTime()}let t=new f(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){return!this._states.paused&&!this._states.kill&&this.fn!==void 0&&this._nextTarget(this._states.currentRun,new Date)!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=new Date,r=this._nextTarget(e,t);return r?r.getTime()-this._toMs(e??t):null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=b.indexOf(this);e>=0&&b.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){return this._schedule(e)}_schedule(e,t){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let r=t??new Date,i=this._nextTarget(void 0,r),n=i?i.getTime()-r.getTime():null,a=this._states.currentRun;a&&a.getTime()>r.getTime()&&(a=void 0);let o=this._nextTarget(a,r);return n===null||isNaN(n)||o===null?this:(n>j&&(n=j),n<0&&(n=this._states.paused?1e3:0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(o),n),this._states.currentTimeout&&this.options.unref&&Y(this._states.currentTimeout),this)}async _trigger(e=new Date){this._states.blocking=!0,this._states.currentRun=new f(e,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(C(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new f(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,r=!this._states.paused&&t.getTime()>=e.getTime(),i=this._states.blocking&&this.options.protect;r&&!i?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger(t)):r&&i&&C(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this._schedule(void 0,r?void 0:t)}_next(e,t,r){let i=r?r.startAt:this._startAt,n=r?r.stopAt:this._stopAt,a=!!e,o=!!(e||this._states.currentRun),u=!1;!e&&i&&this.options.interval&&(e=this._calculatePreviousRun(i,t),e&&(o=!0),u=!e);let l=e??t??new Date,c=this._toMs(l);e=new f(l,this.getTz()),i&&c<i.getTime()&&(e=u?i:new f(new Date(i.getTime()-1e3),this.getTz()),c=e.getTime());let d=this._states.once||new f(e,this.getTz());if(!u&&d!==this._states.once&&(d=this._findOccurrence(e,c,1,o)),this._states.once){let m=this._states.once.getTime(),p=c-m;if(i&&m<i.getTime()||this._states.currentRun&&this.applyDayOffset(this._states.once.getDate()).getTime()<=this._states.currentRun.getTime()||(a?p>=0:p>1e3&&!this.options.allowPast))return null}return d===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||n&&d.getTime()>=n.getTime()?null:d}_previous(e,t){let r=this._toMs(e??new Date);if(t.stopAt&&r>t.stopAt.getTime()&&(r=t.stopAt.getTime()),this._states.once)return this._states.once.getTime()<r?this._states.once:null;let i=this._findOccurrence(new f(new Date(r),this.getTz()),r,-1);return i===null||t.startAt&&i.getTime()<t.startAt.getTime()?null:i}_toMs(e){return e instanceof Date?e.getTime():new f(e,this.getTz()).getTime()}_findOccurrence(e,t,r,i=!1){let n=this._walk(e,t,r,i),a=this.getTz();if(this._states.pattern.isFixedTime&&r===1||typeof a=="number"||W(t,a)!==(r===1?"earlier":"later"))return n;let o=Math.floor(t/1e3)*1e3,u=r===1?k(o,o+x,a):k(o-x,o,a)-1e3;if(n&&(u-n.getTime())*r>0)return n;let l=this._walk(new f(new Date(u),a),u-r,r,!1,!0);return!n||!l?n??l:(n.getTime()-l.getTime())*r>0?l:n}_walk(e,t,r,i,n=!1){let a=this._states.pattern,o=(l,c)=>r===1?l.increment(a,this.options,c):l.decrement(a,this.options),u=new f(e,this.getTz());for((!n||!u.match(a,this.options))&&(u=o(u,i));u;){let l=this._runAt(u,t,r);if(l)return new f(l,this.getTz());u=o(u,!1)}return null}_runAt(e,t,r){let i=m=>(m.getTime()-t)*r>0,n=e.tz;if(typeof n=="number"){let m=e.getDate();return i(m)?m:null}let a=y(e.year,e.month+1,e.day,e.hour,e.minute,e.second,n),o=_(a),u=this._states.pattern.isFixedTime;if(o.kind==="single")return i(o.date)?o.date:null;if(o.kind==="ambiguous"){let{earlier:m,later:p}=o;return(u?[m]:r===1?[m,p]:[p,m]).find(i)??null}if(!u)return null;let l=new Date(k(o.before.getTime(),o.after.getTime(),n)),c=g(l,n);return c.y===a.y&&c.m===a.m&&c.d===a.d&&i(l)?l:null}_calculatePreviousRun(e,t){let r=new f(t,this.getTz()).getTime();if(e.getTime()>r)return;let i=this.options.interval*1e3,n=e;for(;n.getTime()+i<=r;){let a=new f(n,this.getTz()).increment(this._states.pattern,this.options,!0);if(a===null)break;n=a}return n}},M=class{cron;cursor;now;done;initialMaxRuns;remainingRuns;constructor(e,t){this.cron=e,this.initialMaxRuns=e.options.maxRuns??1/0,this.reset(t)}next(){if(this.done||this.remainingRuns<=0)return this.done=!0,{value:void 0,done:!0};let e=this.cron._nextTarget(this.cursor,this.now);return e===null?(this.done=!0,{value:void 0,done:!0}):(this.cursor=e,this.remainingRuns--,{value:e,done:!1})}peek(){return this.done||this.remainingRuns<=0?null:this.cron._nextTarget(this.cursor,this.now)}reset(e){this.cursor=e instanceof Date?new Date(e.getTime()):e??void 0,this.now=new Date,this.done=!1,this.remainingRuns=this.initialMaxRuns}[Symbol.iterator](){return this}};0&&(module.exports={Cron,CronDate,CronIterator,CronPattern,scheduledJobs});
|
|
1
|
+
var O=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var B=(i,e)=>{for(var t in e)O(i,t,{get:e[t],enumerable:!0})},V=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of $(e))!H.call(i,s)&&s!==t&&O(i,s,{get:()=>e[s],enumerable:!(n=Z(e,s))||n.enumerable});return i};var J=i=>V(O({},"__esModule",{value:!0}),i);var G={};B(G,{Cron:()=>E,CronDate:()=>l,CronIterator:()=>M,CronPattern:()=>T,scheduledJobs:()=>C});module.exports=J(G);function D(i){return Date.UTC(i.y,i.m-1,i.d,i.h,i.i,i.s)}function w(i,e){return i.y===e.y&&i.m===e.m&&i.d===e.d&&i.h===e.h&&i.i===e.i&&i.s===e.s}function R(i){let e=i.substring(9);return e.includes("Z")||e.includes("+")||e.includes("-")}function K(i,e){let t=new Date(Date.parse(i));if(isNaN(t))throw new Error("Invalid ISO8601 passed to timezone parser.");return R(i)?{tp:y(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),"Etc/UTC"),ms:t.getUTCMilliseconds()}:{tp:y(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e),ms:t.getMilliseconds()}}function v(i,e,t){let{tp:n,ms:s}=K(i,e);return new Date(N(n,t).getTime()+s)}function N(i,e){let t=_(i);if(t.kind==="single")return t.date;if(t.kind==="ambiguous")return t.earlier;if(e)throw new Error("Invalid date passed to fromTZ()");return t.after}function _(i){let e=D(i),t=a=>P(new Date(a),i.tz),n=e-t(e),s=g(new Date(n),i.tz);if(w(s,i)){let a=D(s)-n,o=n-(t(n-U)-a);if(o<n&&w(g(new Date(o),i.tz),i))return{kind:"ambiguous",earlier:new Date(o),later:new Date(n)};let u=n+(a-t(n+U));return u>n&&w(g(new Date(u),i.tz),i)?{kind:"ambiguous",earlier:new Date(n),later:new Date(u)}:{kind:"single",date:new Date(n)}}let r=e-(D(s)-n);return w(g(new Date(r),i.tz),i)?{kind:"single",date:new Date(r)}:{kind:"gap",before:new Date(Math.min(n,r)),after:new Date(Math.max(n,r))}}var U=3*36e5;function P(i,e){return D(g(i,e))-(i.getTime()-i.getUTCMilliseconds())}function k(i,e,t){let n=P(new Date(i),t);for(;e-i>1e3;){let s=i+Math.floor((e-i)/2e3)*1e3;P(new Date(s),t)===n?i=s:e=s}return e}function W(i,e){let t=_(g(new Date(i),e));if(t.kind==="ambiguous")return i<t.later.getTime()?"earlier":"later"}var S=new Map;function g(i,e){if(e===void 0)return y(i.getFullYear(),i.getMonth()+1,i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds());let t=S.get(e),n;try{t||(t=new Intl.DateTimeFormat("en-US",{timeZone:e,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),S.set(e,t)),n=t.formatToParts(i)}catch(r){let a=r instanceof Error?r.message:String(r);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let s={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let r of n)(r.type==="year"||r.type==="month"||r.type==="day"||r.type==="hour"||r.type==="minute"||r.type==="second")&&(s[r.type]=parseInt(r.value,10));if(isNaN(s.year)||isNaN(s.month)||isNaN(s.day)||isNaN(s.hour)||isNaN(s.minute)||isNaN(s.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(s)}`);return s.hour===24&&(s.hour=0),{y:s.year,m:s.month,d:s.day,h:s.hour,i:s.minute,s:s.second,tz:e}}function y(i,e,t,n,s,r,a){return{y:i,m:e,d:t,h:n,i:s,s:r,tz:a}}var A=[1,2,4,8,16],T=class i{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;isFixedTime;constructor(e,t,n){this.pattern=e,this.timezone=t,this.mode=n?.mode??"auto",this.alternativeWeekdays=n?.alternativeWeekdays??!1,this.sloppyRanges=n?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.isFixedTime=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let r;switch(this.mode){case"5-part":r=5;break;case"6-part":r=6;break;case"7-part":r=7;break;case"5-or-6-parts":r=[5,6];break;case"6-or-7-parts":r=[6,7];break;default:r=0}if(!(Array.isArray(r)?r.includes(t):t===r)){let o=Array.isArray(r)?r.join(" or "):r.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${o} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),this.pattern.indexOf("?")>=0)for(let r=0;r<e.length;r++)e[r]=e[r].replace(/\?/g,"*");if(e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlpha(e[4],i.MONTH_NAMES)),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlpha(e[5],i.DAY_NAMES_QUARTZ):this.replaceAlpha(e[5],i.DAY_NAMES)),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let n=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],n,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7]);let s=(r,a)=>!r.includes("*")&&!r.includes("/")&&a.filter(o=>o).length===1;this.isFixedTime=s(e[0],this.second)&&s(e[1],this.minute)&&s(e[2],this.hour)}partToArray(e,t,n,s){let r=this[e];if(t===""&&!(e==="day"&&(this.lastDayOfMonth||this.lastWeekday)))throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return r.fill(s);let a=t.split(",");if(a.length>1)for(let o of a)this.partToArray(e,o,n,s);else t.includes("-")&&t.includes("/")?this.handleRangeWithStepping(t,e,n,s):t.includes("-")?this.handleRange(t,e,n,s):t.includes("/")?this.handleStepping(t,e,n,s):t!==""&&this.handleNumber(t,e,n,s)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,n,s){let r=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(r[0],10)+n;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,r[1]||s)}setPart(e,t,n){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,n);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=n}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,n,s,r){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+r+"'");if(n!==void 0){if(n===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(n>this[s].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[s].length+")")}}handleRangeWithStepping(e,t,n,s){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let r=this.extractNth(e,t),a=r[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,u,h]=a,c=parseInt(o,10)+n,d=parseInt(u,10)+n,m=parseInt(h,10);this.validateNotNaN(c,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(d,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(m,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(c,d,m,t,e);for(let p=c;p<=d;p+=m)this.setPart(t,p,r[1]||s)}extractNth(e,t){let n=e,s;if(n.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");s=n.split("#")[1],n=n.split("#")[0]}else if(n.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");s="L",n=n.slice(0,-1)}return[n,s]}handleRange(e,t,n,s){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let r=this.extractNth(e,t),a=r[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+n,u=parseInt(a[1],10)+n;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(u,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,u,void 0,t,e);for(let h=o;h<=u;h++)this.setPart(t,h,r[1]||s)}handleStepping(e,t,n,s){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let r=this.extractNth(e,t),a=r[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+n);let u=parseInt(a[1],10);this.validateNotNaN(u,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,u,t,e);for(let h=o;h<this[t].length;h+=u)t==="year"&&h===0||this.setPart(t,h,r[1]||s)}replaceAlpha(e,t){let n=e;for(let[s,r]of Object.entries(t))n=n.replace(new RegExp(s,"gi"),r);return n}static DAY_NAMES={"-sun":"-7",sun:"0",mon:"1",tue:"2",wed:"3",thu:"4",fri:"5",sat:"6"};static DAY_NAMES_QUARTZ={sun:"1",mon:"2",tue:"3",wed:"4",thu:"5",fri:"6",sat:"7"};static MONTH_NAMES={jan:"1",feb:"2",mar:"3",apr:"4",may:"5",jun:"6",jul:"7",aug:"8",sep:"9",oct:"10",nov:"11",dec:"12"};static NICKNAME_MAP={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"};handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return i.NICKNAME_MAP[t]||e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|A[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}};var Q=[31,28,31,30,31,30,31,31,30,31,30,31],f=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],l=class i{tz;instantMs;instantFields;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(e==null)this.fromDate(new Date);else if(e&&typeof e=="string")this.fromString(e);else if(e instanceof i)this.fromCronDate(e);else throw new TypeError("CronDate: Invalid type ("+typeof e+") passed to CronDate constructor")}getLastDayOfMonth(e,t){return t!==1?Q[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let n=this.getLastDayOfMonth(e,t),r=new Date(Date.UTC(e,t,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(e,t,n){let s=this.getLastDayOfMonth(e,t);if(n>s)return-1;let a=new Date(Date.UTC(e,t,n)).getUTCDay();return a===0?n===s?n-2:n+1:a===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(e,t,n,s){let a=new Date(Date.UTC(e,t,n)).getUTCDay(),o=0;for(let u=1;u<=n;u++)new Date(Date.UTC(e,t,u)).getUTCDay()===a&&o++;if(s&63&&A[o-1]&s)return!0;if(s&32){let u=this.getLastDayOfMonth(e,t);for(let h=n+1;h<=u;h++)if(new Date(Date.UTC(e,t,h)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y,this.cacheInstant(e.getTime()-this.ms)}catch(t){let n=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${n}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear(),this.cacheInstant(e.getTime()-this.ms)}cacheInstant(e){this.instantMs=e;let{year:t,month:n,day:s,hour:r,minute:a,second:o}=this;this.instantFields=[t,n,s,r,a,o,this.tz]}cachedInstant(){let e=this.instantFields;if(!(e===void 0||e[6]!==this.tz)&&!(e[5]!==this.second||e[4]!==this.minute||e[3]!==this.hour)&&!(e[2]!==this.day||e[1]!==this.month||e[0]!==this.year))return this.instantMs}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms,this.instantMs=e.instantMs,this.instantFields=e.instantFields}apply(){if(this.month>11||this.month<0||this.day>this.getLastDayOfMonth(this.year,this.month)||this.day<1||this.hour>23||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(0);return e.setUTCFullYear(this.year,this.month,this.day),e.setUTCHours(this.hour,this.minute,this.second,this.ms),this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz=="number"){if(R(e))return this.fromDate(v(e));let t=v(e,"Etc/UTC");this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(v(e,this.tz))}findNext(e,t,n,s){return this._findMatch(e,t,n,s,1)}_matchDayValue(e,t,n,s){let r=e;if(!r){for(let a=0;a<n.nearestWeekdays.length;a++)if(n.nearestWeekdays[a]){let o=this.getNearestWeekday(this.year,this.month,a+1);if(o!==-1&&o===t){r=1;break}}}if(n.lastWeekday){let a=this.getLastWeekday(this.year,this.month);t===a&&(r=1)}if(n.lastDayOfMonth){let a=this.getLastDayOfMonth(this.year,this.month);t===a&&(r=1)}if(!n.starDOW){let a=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),o=n.dayOfWeek[(a+(t-1))%7];o&&o&63&&(o=this.isNthWeekdayOfMonth(this.year,this.month,t,o)?1:0),n.useAndLogic?r=r&&o:!s.domAndDow&&!n.starDOM?r=r||o:r=r&&o}return r}_findMatch(e,t,n,s,r){let a=this[t],o=this[t]+s,u=r===1?h=>h<n[t].length:h=>h>=0;for(let h=o;u(h);h+=r){let c=n[t][h];if(t==="day"&&(c=this._matchDayValue(c,h-s,n,e)),c)return this[t]=h-s,a!==this[t]?2:1}return 3}recurse(e,t,n){let s=this.year,r=n;for(;typeof r=="number";){if(e.starYear&&Math.abs(this.year-s)>400)return null;r=this.recurseStep(e,t,r)}return r}recurseStep(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let r=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){r=a;break}if(r===-1)return null;this.year=r,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let s=this.findNext(t,f[n][0],e,f[n][2]);if(s>1){let r=n+1;for(;r<f.length;)this[f[r][0]]=-f[r][2],r++;if(s===3){if(this[f[n][1]]++,this[f[n][0]]=-f[n][2],this.apply(),n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return 0}else if(this.apply())return n-1}return n+=1,n>=f.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:n}increment(e,t,n){return this.instantMs=void 0,this.instantFields=void 0,this.second+=t.interval!==void 0&&t.interval>1&&n?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.instantMs=void 0,this.instantFields=void 0,this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0)}recurseBackward(e,t,n){let s=this.year,r=n;for(;typeof r=="number";){if(e.starYear&&Math.abs(this.year-s)>400)return null;r=this.recurseBackwardStep(e,t,r)}return r}recurseBackwardStep(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let r=-1;for(let a=this.year-1;a>=0;a--)if(e.year[a]===1){r=a;break}if(r===-1)return null;this.year=r,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let s=this.findPrevious(t,f[n][0],e,f[n][2]);if(s>1){let r=n+1;for(;r<f.length;){let a=f[r][0],o=f[r][2],u=this.getMaxPatternValue(a,e,o);this[a]=u,r++}if(s===3){if(this[f[n][1]]--,n===0){let u=this.getLastDayOfMonth(this.year,this.month);this.day>u&&(this.day=u)}if(n===1)if(this.day<=0)this.day=1;else{let u=this.year,h=this.month;for(;h<0;)h+=12,u--;for(;h>11;)h-=12,u++;let c=this.getLastDayOfMonth(u,h);this.day>c&&(this.day=c)}this.apply();let a=f[n][0],o=f[n][2];if(this[a]=this.getMaxPatternValue(a,e,o),this.apply(),n===0){let u=f[1][2],h=this.getMaxPatternValue("day",e,u);h!==this.day&&(this.day=h,this.hour=this.getMaxPatternValue("hour",e,f[2][2]),this.minute=this.getMaxPatternValue("minute",e,f[3][2]),this.second=this.getMaxPatternValue("second",e,f[4][2]))}if(n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return 0}else if(this.apply())return n-1}return n+=1,n>=f.length?this:this.year<0?null:n}getMaxPatternValue(e,t,n){let s=t[e].length-1-n;for(let r=t[e].length-1;r>=0;r--)if(t[e][r]){s=r-n;break}if(e==="day"){let r=this.getLastDayOfMonth(this.year,this.month);return t.lastDayOfMonth||!t.starDOW?r:Math.min(s,r)}return s}findPrevious(e,t,n,s){return this._findMatch(e,t,n,s,-1)}getDate(e){if(!e&&typeof this.tz!="number"){let t=this.cachedInstant();if(t!==void 0)return new Date(t+(this.tz===void 0?this.ms:0))}return e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):N(y(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let n=0;n<f.length;n++){let s=f[n][0],r=f[n][2],a=this[s];if(a+r<0||a+r>=e[s].length)return!1;let o=e[s][a+r];if(s==="day"&&(o=this._matchDayValue(o,a,e,t)),!o)return!1}return!0}};function F(i){i===void 0&&(i={}),delete i.name,i.legacyMode!==void 0&&i.domAndDow===void 0?i.domAndDow=!i.legacyMode:i.domAndDow===void 0&&(i.domAndDow=!1),i.legacyMode=!i.domAndDow;let e=(n,s)=>n===void 0?s:n;if(i.paused=e(i.paused,!1),i.maxRuns=e(i.maxRuns,1/0),i.catch=e(i.catch,!1),i.unref=e(i.unref,!1),i.mode=e(i.mode,"auto"),i.alternativeWeekdays=e(i.alternativeWeekdays,!1),i.sloppyRanges=e(i.sloppyRanges,!1),i.allowPast=e(i.allowPast,!1),i.interval=i.interval===void 0?0:parseInt(i.interval.toString(),10),i.utcOffset=i.utcOffset===void 0?void 0:parseInt(i.utcOffset.toString(),10),i.dayOffset=i.dayOffset===void 0?0:parseInt(i.dayOffset.toString(),10),!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(i.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");i.timezone===""&&(i.timezone=void 0);let t=i.timezone??i.utcOffset;if(i.startAt&&(i.startAt=z(new l(i.startAt,t))),i.stopAt&&(i.stopAt=z(new l(i.stopAt,t))),i.interval!==null){if(isNaN(i.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(i.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(i.utcOffset!==void 0){if(isNaN(i.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(i.utcOffset<-870||i.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(i.utcOffset!==void 0&&i.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(i.unref!==!0&&i.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(i.dayOffset!==void 0&&i.dayOffset!==0&&isNaN(i.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return i}function z(i){return i.ms?(i.ms=0,new l(new Date(i.getTime()+1e3),i.tz)):i}function b(i){return typeof i=="function"}function L(i){return b(i)}function Y(i){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(i):i&&typeof i.unref<"u"&&i.unref()}var x=1440*60*1e3,j=30*1e3,C=[],E=class{name;options;_states;fn;_startAtRoundingMs=0;getTz(){return this.options.timezone??this.options.utcOffset}applyDayOffset(e){let t=this._offsetMs();return t?new Date(e.getTime()+t):e}_offsetMs(){return(this.options.dayOffset??0)*x}get _startAt(){return this.options.startAt}get _stopAt(){return this.options.stopAt}_nextTarget(e,t){let n=this._offsetMs(),s=this._next(this._shift(e),new Date(t.getTime()-n),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return s?this.applyDayOffset(s.getDate(!1)):null}_previousTarget(e,t){let n=this._previous(this._shift(e??t),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return n?this.applyDayOffset(n.getDate(!1)):null}_shift(e){if(e!=null)return new l(new Date(this._toMs(e)-this._offsetMs()),this.getTz())}constructor(e,t,n){let s,r;if(b(t))r=t;else if(typeof t=="object")s=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(b(n))r=n;else if(typeof n=="object")s=n;else if(n!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");this.name=s?.name;let a=s?.startAt;if(this.options=F(s),a&&this._startAt&&(this._startAtRoundingMs=this._startAt.getTime()-new l(a,this.getTz()).getTime()),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:s?s.maxRuns:void 0,paused:s?s.paused:!1,pattern:new T("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new l(e,this.getTz()):this._states.pattern=new T(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(C.find(u=>u.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");C.push(this)}return r!==void 0&&L(r)&&(this.fn=r,this.schedule()),this}nextRun(e){return this._nextTarget(e,new Date)}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let n=t||this._states.currentRun||void 0;return this._enumerateRuns(e,n,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}enumerate(e){return new M(this,e)}_enumerateRuns(e,t,n){let s=[],r=new Date,a=t;for(;e-- >0;){let o=n==="next"?this._nextTarget(a,r):this._previousTarget(a,r);if(!o)break;s.push(o),a=o}return s}match(e){if(this._states.once){let n=new l(e,this.getTz());n.ms=0;let s=new l(this._states.once,this.getTz());return s.ms=0,n.getTime()===s.getTime()}let t=new l(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){return!this._states.paused&&!this._states.kill&&this.fn!==void 0&&this._nextTarget(this._states.currentRun,new Date)!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=new Date,n=this._nextTarget(e,t);return n?n.getTime()-this._toMs(e??t):null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=C.indexOf(this);e>=0&&C.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){return this._schedule(e)}_schedule(e,t){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let n=t??new Date,s=this._nextTarget(void 0,n),r=s?s.getTime()-n.getTime():null,a=this._states.currentRun;a&&a.getTime()>n.getTime()&&(a=void 0);let o=this._nextTarget(a,n);return r===null||isNaN(r)||o===null?this:(r>j&&(r=j),r<0&&(r=this._states.paused?1e3:0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(o),r),this._states.currentTimeout&&this.options.unref&&Y(this._states.currentTimeout),this)}async _trigger(e=new Date){this._states.blocking=!0,this._states.currentRun=new l(e,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(b(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new l(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,n=!this._states.paused&&t.getTime()>=e.getTime(),s=this._states.blocking&&this.options.protect;n&&!s?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger(t)):n&&s&&b(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this._schedule(void 0,n?void 0:t)}_next(e,t,n){let s=n?n.startAt:this._startAt,r=n?n.stopAt:this._stopAt,a=!!e,o=!!(e||this._states.currentRun),u=!1;!e&&s&&this.options.interval&&(e=this._calculatePreviousRun(s,t),e&&(o=!0),u=!e);let h=e??t??new Date,c=this._toMs(h);e=new l(h,this.getTz()),s&&c<s.getTime()&&(e=u?s:new l(new Date(s.getTime()-1e3),this.getTz()),c=e.getTime());let d=this._states.once||new l(e,this.getTz());if(!u&&d!==this._states.once&&(d=this._findOccurrence(e,c,1,o)),this._states.once){let m=this._states.once.getTime(),p=c-m;if(s&&m<s.getTime()-this._startAtRoundingMs||this._states.currentRun&&this.applyDayOffset(this._states.once.getDate()).getTime()<=this._states.currentRun.getTime()||(a?p>=0:p>1e3&&!this.options.allowPast))return null}return d===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||r&&d.getTime()>=r.getTime()?null:d}_previous(e,t){let n=this._toMs(e??new Date);if(t.stopAt&&n>t.stopAt.getTime()&&(n=t.stopAt.getTime()),this._states.once)return this._states.once.getTime()<n?this._states.once:null;let s=this._findOccurrence(new l(new Date(n),this.getTz()),n,-1);return s===null||t.startAt&&s.getTime()<t.startAt.getTime()?null:s}_toMs(e){return e instanceof Date?e.getTime():new l(e,this.getTz()).getTime()}_findOccurrence(e,t,n,s=!1){let r=this._walk(e,t,n,s),a=this.getTz();if(this._states.pattern.isFixedTime&&n===1||typeof a=="number"||W(t,a)!==(n===1?"earlier":"later"))return r;let o=Math.floor(t/1e3)*1e3,u=n===1?k(o,o+x,a):k(o-x,o,a)-1e3;if(r&&(u-r.getTime())*n>0)return r;let h=this._walk(new l(new Date(u),a),u-n,n,!1,!0);return!r||!h?r??h:(r.getTime()-h.getTime())*n>0?h:r}_walk(e,t,n,s,r=!1){let a=this._states.pattern,o=(h,c)=>n===1?h.increment(a,this.options,c):h.decrement(a,this.options),u=new l(e,this.getTz());for((!r||!u.match(a,this.options))&&(u=o(u,s));u;){let h=this._runAt(u,t,n);if(h)return new l(h,this.getTz());u=o(u,!1)}return null}_runAt(e,t,n){let s=m=>(m.getTime()-t)*n>0,r=e.tz;if(typeof r=="number"){let m=e.getDate();return s(m)?m:null}let a=y(e.year,e.month+1,e.day,e.hour,e.minute,e.second,r),o=_(a),u=this._states.pattern.isFixedTime;if(o.kind==="single")return s(o.date)?o.date:null;if(o.kind==="ambiguous"){let{earlier:m,later:p}=o;return(u?[m]:n===1?[m,p]:[p,m]).find(s)??null}if(!u)return null;let h=new Date(k(o.before.getTime(),o.after.getTime(),r)),c=g(h,r);return c.y===a.y&&c.m===a.m&&c.d===a.d&&s(h)?h:null}_calculatePreviousRun(e,t){let n=new l(t,this.getTz()).getTime();if(e.getTime()>n)return;let s=this.options.interval*1e3,r=e;for(;r.getTime()+s<=n;){let a=new l(r,this.getTz()).increment(this._states.pattern,this.options,!0);if(a===null)break;r=a}return r}},M=class{cron;cursor;now;done;initialMaxRuns;remainingRuns;constructor(e,t){this.cron=e,this.initialMaxRuns=e.runsLeft()??1/0,this.reset(t)}next(){if(this.done||this.remainingRuns<=0)return this.done=!0,{value:void 0,done:!0};let e=this.cron._nextTarget(this.cursor,this.now);return e===null?(this.done=!0,{value:void 0,done:!0}):(this.cursor=e,this.remainingRuns--,{value:e,done:!1})}peek(){return this.done||this.remainingRuns<=0?null:this.cron._nextTarget(this.cursor,this.now)}reset(e){this.cursor=e instanceof Date?new Date(e.getTime()):e??void 0,this.now=new Date,this.done=!1,this.remainingRuns=this.initialMaxRuns}[Symbol.iterator](){return this}};0&&(module.exports={Cron,CronDate,CronIterator,CronPattern,scheduledJobs});
|
package/dist/croner.d.cts
CHANGED
|
@@ -195,7 +195,7 @@ interface CronOptions<T = undefined> {
|
|
|
195
195
|
maxRuns?: number;
|
|
196
196
|
/**
|
|
197
197
|
* The minimum interval between job executions, in seconds.
|
|
198
|
-
* @default
|
|
198
|
+
* @default 0
|
|
199
199
|
*/
|
|
200
200
|
interval?: number;
|
|
201
201
|
/**
|
|
@@ -206,7 +206,8 @@ interface CronOptions<T = undefined> {
|
|
|
206
206
|
protect?: boolean | ProtectCallbackFn;
|
|
207
207
|
/**
|
|
208
208
|
* The date and time at which the job should start running. Inclusive, a run exactly at startAt
|
|
209
|
-
* is included. Strings are read in the timezone or UTC offset of
|
|
209
|
+
* is included, except when `interval` is set. Strings are read in the timezone or UTC offset of
|
|
210
|
+
* the job.
|
|
210
211
|
*/
|
|
211
212
|
startAt?: string | Date | CronDate<T>;
|
|
212
213
|
/**
|
|
@@ -296,6 +297,11 @@ declare class CronDate<T = undefined> {
|
|
|
296
297
|
* A local time that occurs twice (DST fall back) then keeps the occurrence it was created from.
|
|
297
298
|
*/
|
|
298
299
|
private instantMs?;
|
|
300
|
+
/**
|
|
301
|
+
* The fields (and timezone) `instantMs` was cached for. The fields are public and can be changed
|
|
302
|
+
* directly, so `instantMs` is only used while they still match.
|
|
303
|
+
*/
|
|
304
|
+
private instantFields?;
|
|
299
305
|
/**
|
|
300
306
|
* Current milliseconds
|
|
301
307
|
* @type {number}
|
|
@@ -375,6 +381,14 @@ declare class CronDate<T = undefined> {
|
|
|
375
381
|
* Sets internals using a Date
|
|
376
382
|
*/
|
|
377
383
|
private fromDate;
|
|
384
|
+
/**
|
|
385
|
+
* Remember the instant the current fields were created from
|
|
386
|
+
*/
|
|
387
|
+
private cacheInstant;
|
|
388
|
+
/**
|
|
389
|
+
* The cached instant, or undefined if there is none or the fields have changed since caching
|
|
390
|
+
*/
|
|
391
|
+
private cachedInstant;
|
|
378
392
|
/**
|
|
379
393
|
* Sets internals by deep copying another CronDate
|
|
380
394
|
*
|
|
@@ -564,6 +578,11 @@ declare class Cron<T = undefined> {
|
|
|
564
578
|
options: CronOptions<T>;
|
|
565
579
|
private _states;
|
|
566
580
|
private fn?;
|
|
581
|
+
/**
|
|
582
|
+
* How far startAt was moved forward to a whole second, in milliseconds. A one-off date is an
|
|
583
|
+
* exact instant, so it is compared with startAt as given.
|
|
584
|
+
*/
|
|
585
|
+
private _startAtRoundingMs;
|
|
567
586
|
/**
|
|
568
587
|
* Internal helper to get the timezone or UTC offset for date operations.
|
|
569
588
|
* Reduces duplication of `this.options.timezone || this.options.utcOffset` throughout the codebase.
|
|
@@ -633,7 +652,10 @@ declare class Cron<T = undefined> {
|
|
|
633
652
|
* Returns a {@link CronIterator} that implements both the ECMAScript Iterator and
|
|
634
653
|
* Iterable protocols, enabling `for...of` loops and destructuring assignment.
|
|
635
654
|
*
|
|
636
|
-
*
|
|
655
|
+
* The iterator yields runs strictly after the given start date. A run exactly at the start date
|
|
656
|
+
* is not included, unlike the inclusive `startAt` option.
|
|
657
|
+
*
|
|
658
|
+
* @param startAt - Optional. The date to start iterating from (exclusive). Defaults to now.
|
|
637
659
|
* @returns A new CronIterator instance
|
|
638
660
|
*/
|
|
639
661
|
enumerate(startAt?: Date | string | null): CronIterator<T>;
|
package/dist/croner.d.ts
CHANGED
|
@@ -195,7 +195,7 @@ interface CronOptions<T = undefined> {
|
|
|
195
195
|
maxRuns?: number;
|
|
196
196
|
/**
|
|
197
197
|
* The minimum interval between job executions, in seconds.
|
|
198
|
-
* @default
|
|
198
|
+
* @default 0
|
|
199
199
|
*/
|
|
200
200
|
interval?: number;
|
|
201
201
|
/**
|
|
@@ -206,7 +206,8 @@ interface CronOptions<T = undefined> {
|
|
|
206
206
|
protect?: boolean | ProtectCallbackFn;
|
|
207
207
|
/**
|
|
208
208
|
* The date and time at which the job should start running. Inclusive, a run exactly at startAt
|
|
209
|
-
* is included. Strings are read in the timezone or UTC offset of
|
|
209
|
+
* is included, except when `interval` is set. Strings are read in the timezone or UTC offset of
|
|
210
|
+
* the job.
|
|
210
211
|
*/
|
|
211
212
|
startAt?: string | Date | CronDate<T>;
|
|
212
213
|
/**
|
|
@@ -296,6 +297,11 @@ declare class CronDate<T = undefined> {
|
|
|
296
297
|
* A local time that occurs twice (DST fall back) then keeps the occurrence it was created from.
|
|
297
298
|
*/
|
|
298
299
|
private instantMs?;
|
|
300
|
+
/**
|
|
301
|
+
* The fields (and timezone) `instantMs` was cached for. The fields are public and can be changed
|
|
302
|
+
* directly, so `instantMs` is only used while they still match.
|
|
303
|
+
*/
|
|
304
|
+
private instantFields?;
|
|
299
305
|
/**
|
|
300
306
|
* Current milliseconds
|
|
301
307
|
* @type {number}
|
|
@@ -375,6 +381,14 @@ declare class CronDate<T = undefined> {
|
|
|
375
381
|
* Sets internals using a Date
|
|
376
382
|
*/
|
|
377
383
|
private fromDate;
|
|
384
|
+
/**
|
|
385
|
+
* Remember the instant the current fields were created from
|
|
386
|
+
*/
|
|
387
|
+
private cacheInstant;
|
|
388
|
+
/**
|
|
389
|
+
* The cached instant, or undefined if there is none or the fields have changed since caching
|
|
390
|
+
*/
|
|
391
|
+
private cachedInstant;
|
|
378
392
|
/**
|
|
379
393
|
* Sets internals by deep copying another CronDate
|
|
380
394
|
*
|
|
@@ -564,6 +578,11 @@ declare class Cron<T = undefined> {
|
|
|
564
578
|
options: CronOptions<T>;
|
|
565
579
|
private _states;
|
|
566
580
|
private fn?;
|
|
581
|
+
/**
|
|
582
|
+
* How far startAt was moved forward to a whole second, in milliseconds. A one-off date is an
|
|
583
|
+
* exact instant, so it is compared with startAt as given.
|
|
584
|
+
*/
|
|
585
|
+
private _startAtRoundingMs;
|
|
567
586
|
/**
|
|
568
587
|
* Internal helper to get the timezone or UTC offset for date operations.
|
|
569
588
|
* Reduces duplication of `this.options.timezone || this.options.utcOffset` throughout the codebase.
|
|
@@ -633,7 +652,10 @@ declare class Cron<T = undefined> {
|
|
|
633
652
|
* Returns a {@link CronIterator} that implements both the ECMAScript Iterator and
|
|
634
653
|
* Iterable protocols, enabling `for...of` loops and destructuring assignment.
|
|
635
654
|
*
|
|
636
|
-
*
|
|
655
|
+
* The iterator yields runs strictly after the given start date. A run exactly at the start date
|
|
656
|
+
* is not included, unlike the inclusive `startAt` option.
|
|
657
|
+
*
|
|
658
|
+
* @param startAt - Optional. The date to start iterating from (exclusive). Defaults to now.
|
|
637
659
|
* @returns A new CronIterator instance
|
|
638
660
|
*/
|
|
639
661
|
enumerate(startAt?: Date | string | null): CronIterator<T>;
|
package/dist/croner.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function w(s){return Date.UTC(s.y,s.m-1,s.d,s.h,s.i,s.s)}function b(s,e){return s.y===e.y&&s.m===e.m&&s.d===e.d&&s.h===e.h&&s.i===e.i&&s.s===e.s}function O(s){let e=s.substring(9);return e.includes("Z")||e.includes("+")||e.includes("-")}function j(s,e){let t=new Date(Date.parse(s));if(isNaN(t))throw new Error("Invalid ISO8601 passed to timezone parser.");return O(s)?y(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),"Etc/UTC"):y(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e)}function D(s,e,t){return P(j(s,e),t)}function P(s,e){let t=v(s);if(t.kind==="single")return t.date;if(t.kind==="ambiguous")return t.earlier;if(e)throw new Error("Invalid date passed to fromTZ()");return t.after}function v(s){let e=w(s),t=a=>M(new Date(a),s.tz),r=e-t(e),i=g(new Date(r),s.tz);if(b(i,s)){let a=w(i)-r,o=r-(t(r-x)-a);if(o<r&&b(g(new Date(o),s.tz),s))return{kind:"ambiguous",earlier:new Date(o),later:new Date(r)};let u=r+(a-t(r+x));return u>r&&b(g(new Date(u),s.tz),s)?{kind:"ambiguous",earlier:new Date(r),later:new Date(u)}:{kind:"single",date:new Date(r)}}let n=e-(w(i)-r);return b(g(new Date(n),s.tz),s)?{kind:"single",date:new Date(n)}:{kind:"gap",before:new Date(Math.min(r,n)),after:new Date(Math.max(r,n))}}var x=3*36e5;function M(s,e){return w(g(s,e))-(s.getTime()-s.getUTCMilliseconds())}function _(s,e,t){let r=M(new Date(s),t);for(;e-s>1e3;){let i=s+Math.floor((e-s)/2e3)*1e3;M(new Date(i),t)===r?s=i:e=i}return e}function U(s,e){let t=v(g(new Date(s),e));if(t.kind==="ambiguous")return s<t.later.getTime()?"earlier":"later"}var E=new Map;function g(s,e){if(e===void 0)return y(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds());let t=E.get(e),r;try{t||(t=new Intl.DateTimeFormat("en-US",{timeZone:e,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),E.set(e,t)),r=t.formatToParts(s)}catch(n){let a=n instanceof Error?n.message:String(n);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let i={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let n of r)(n.type==="year"||n.type==="month"||n.type==="day"||n.type==="hour"||n.type==="minute"||n.type==="second")&&(i[n.type]=parseInt(n.value,10));if(isNaN(i.year)||isNaN(i.month)||isNaN(i.day)||isNaN(i.hour)||isNaN(i.minute)||isNaN(i.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(i)}`);return i.hour===24&&(i.hour=0),{y:i.year,m:i.month,d:i.day,h:i.hour,i:i.minute,s:i.second,tz:e}}function y(s,e,t,r,i,n,a){return{y:s,m:e,d:t,h:r,i,s:n,tz:a}}var N=[1,2,4,8,16],C=class s{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;isFixedTime;constructor(e,t,r){this.pattern=e,this.timezone=t,this.mode=r?.mode??"auto",this.alternativeWeekdays=r?.alternativeWeekdays??!1,this.sloppyRanges=r?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.isFixedTime=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let n;switch(this.mode){case"5-part":n=5;break;case"6-part":n=6;break;case"7-part":n=7;break;case"5-or-6-parts":n=[5,6];break;case"6-or-7-parts":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let o=Array.isArray(n)?n.join(" or "):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${o} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),this.pattern.indexOf("?")>=0)for(let n=0;n<e.length;n++)e[n]=e[n].replace(/\?/g,"*");if(e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlpha(e[4],s.MONTH_NAMES)),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlpha(e[5],s.DAY_NAMES_QUARTZ):this.replaceAlpha(e[5],s.DAY_NAMES)),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let r=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],r,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7]);let i=(n,a)=>!n.includes("*")&&!n.includes("/")&&a.filter(o=>o).length===1;this.isFixedTime=i(e[0],this.second)&&i(e[1],this.minute)&&i(e[2],this.hour)}partToArray(e,t,r,i){let n=this[e];if(t===""&&!(e==="day"&&(this.lastDayOfMonth||this.lastWeekday)))throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return n.fill(i);let a=t.split(",");if(a.length>1)for(let o of a)this.partToArray(e,o,r,i);else t.includes("-")&&t.includes("/")?this.handleRangeWithStepping(t,e,r,i):t.includes("-")?this.handleRange(t,e,r,i):t.includes("/")?this.handleStepping(t,e,r,i):t!==""&&this.handleNumber(t,e,r,i)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,r,i){let n=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(n[0],10)+r;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,n[1]||i)}setPart(e,t,r){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,r);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=r}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,r,i,n){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+n+"'");if(r!==void 0){if(r===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(r>this[i].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[i].length+")")}}handleRangeWithStepping(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let n=this.extractNth(e,t),a=n[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,u,l]=a,c=parseInt(o,10)+r,d=parseInt(u,10)+r,m=parseInt(l,10);this.validateNotNaN(c,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(d,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(m,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(c,d,m,t,e);for(let p=c;p<=d;p+=m)this.setPart(t,p,n[1]||i)}extractNth(e,t){let r=e,i;if(r.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");i=r.split("#")[1],r=r.split("#")[0]}else if(r.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");i="L",r=r.slice(0,-1)}return[r,i]}handleRange(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let n=this.extractNth(e,t),a=n[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+r,u=parseInt(a[1],10)+r;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(u,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,u,void 0,t,e);for(let l=o;l<=u;l++)this.setPart(t,l,n[1]||i)}handleStepping(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let n=this.extractNth(e,t),a=n[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+r);let u=parseInt(a[1],10);this.validateNotNaN(u,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,u,t,e);for(let l=o;l<this[t].length;l+=u)t==="year"&&l===0||this.setPart(t,l,n[1]||i)}replaceAlpha(e,t){let r=e;for(let[i,n]of Object.entries(t))r=r.replace(new RegExp(i,"gi"),n);return r}static DAY_NAMES={"-sun":"-7",sun:"0",mon:"1",tue:"2",wed:"3",thu:"4",fri:"5",sat:"6"};static DAY_NAMES_QUARTZ={sun:"1",mon:"2",tue:"3",wed:"4",thu:"5",fri:"6",sat:"7"};static MONTH_NAMES={jan:"1",feb:"2",mar:"3",apr:"4",may:"5",jun:"6",jul:"7",aug:"8",sep:"9",oct:"10",nov:"11",dec:"12"};static NICKNAME_MAP={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"};handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return s.NICKNAME_MAP[t]||e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|N[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}};var $=[31,28,31,30,31,30,31,31,30,31,30,31],h=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],f=class s{tz;instantMs;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(e==null)this.fromDate(new Date);else if(e&&typeof e=="string")this.fromString(e);else if(e instanceof s)this.fromCronDate(e);else throw new TypeError("CronDate: Invalid type ("+typeof e+") passed to CronDate constructor")}getLastDayOfMonth(e,t){return t!==1?$[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let r=this.getLastDayOfMonth(e,t),n=new Date(Date.UTC(e,t,r)).getUTCDay();return n===0?r-2:n===6?r-1:r}getNearestWeekday(e,t,r){let i=this.getLastDayOfMonth(e,t);if(r>i)return-1;let a=new Date(Date.UTC(e,t,r)).getUTCDay();return a===0?r===i?r-2:r+1:a===6?r===1?r+2:r-1:r}isNthWeekdayOfMonth(e,t,r,i){let a=new Date(Date.UTC(e,t,r)).getUTCDay(),o=0;for(let u=1;u<=r;u++)new Date(Date.UTC(e,t,u)).getUTCDay()===a&&o++;if(i&63&&N[o-1]&i)return!0;if(i&32){let u=this.getLastDayOfMonth(e,t);for(let l=r+1;l<=u;l++)if(new Date(Date.UTC(e,t,l)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y,this.instantMs=e.getTime()-this.ms}catch(t){let r=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${r}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear(),this.instantMs=e.getTime()-this.ms}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms,this.instantMs=e.instantMs}apply(){if(this.month>11||this.month<0||this.day>this.getLastDayOfMonth(this.year,this.month)||this.day<1||this.hour>23||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(0);return e.setUTCFullYear(this.year,this.month,this.day),e.setUTCHours(this.hour,this.minute,this.second,this.ms),this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz=="number"){if(O(e))return this.fromDate(D(e));let t=D(e,"Etc/UTC");this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(D(e,this.tz))}findNext(e,t,r,i){return this._findMatch(e,t,r,i,1)}_matchDayValue(e,t,r,i){let n=e;if(!n){for(let a=0;a<r.nearestWeekdays.length;a++)if(r.nearestWeekdays[a]){let o=this.getNearestWeekday(this.year,this.month,a+1);if(o!==-1&&o===t){n=1;break}}}if(r.lastWeekday){let a=this.getLastWeekday(this.year,this.month);t===a&&(n=1)}if(r.lastDayOfMonth){let a=this.getLastDayOfMonth(this.year,this.month);t===a&&(n=1)}if(!r.starDOW){let a=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),o=r.dayOfWeek[(a+(t-1))%7];o&&o&63&&(o=this.isNthWeekdayOfMonth(this.year,this.month,t,o)?1:0),r.useAndLogic?n=n&&o:!i.domAndDow&&!r.starDOM?n=n||o:n=n&&o}return n}_findMatch(e,t,r,i,n){let a=this[t],o=this[t]+i,u=n===1?l=>l<r[t].length:l=>l>=0;for(let l=o;u(l);l+=n){let c=r[t][l];if(t==="day"&&(c=this._matchDayValue(c,l-i,r,e)),c)return this[t]=l-i,a!==this[t]?2:1}return 3}recurse(e,t,r){let i=this.year,n=r;for(;typeof n=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;n=this.recurseStep(e,t,n)}return n}recurseStep(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let n=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){n=a;break}if(n===-1)return null;this.year=n,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let i=this.findNext(t,h[r][0],e,h[r][2]);if(i>1){let n=r+1;for(;n<h.length;)this[h[n][0]]=-h[n][2],n++;if(i===3){if(this[h[r][1]]++,this[h[r][0]]=-h[r][2],this.apply(),r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return 0}else if(this.apply())return r-1}return r+=1,r>=h.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:r}increment(e,t,r){return this.instantMs=void 0,this.second+=t.interval!==void 0&&t.interval>1&&r?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.instantMs=void 0,this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0)}recurseBackward(e,t,r){let i=this.year,n=r;for(;typeof n=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;n=this.recurseBackwardStep(e,t,n)}return n}recurseBackwardStep(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let n=-1;for(let a=this.year-1;a>=0;a--)if(e.year[a]===1){n=a;break}if(n===-1)return null;this.year=n,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,h[r][0],e,h[r][2]);if(i>1){let n=r+1;for(;n<h.length;){let a=h[n][0],o=h[n][2],u=this.getMaxPatternValue(a,e,o);this[a]=u,n++}if(i===3){if(this[h[r][1]]--,r===0){let u=this.getLastDayOfMonth(this.year,this.month);this.day>u&&(this.day=u)}if(r===1)if(this.day<=0)this.day=1;else{let u=this.year,l=this.month;for(;l<0;)l+=12,u--;for(;l>11;)l-=12,u++;let c=this.getLastDayOfMonth(u,l);this.day>c&&(this.day=c)}this.apply();let a=h[r][0],o=h[r][2];if(this[a]=this.getMaxPatternValue(a,e,o),this.apply(),r===0){let u=h[1][2],l=this.getMaxPatternValue("day",e,u);l!==this.day&&(this.day=l,this.hour=this.getMaxPatternValue("hour",e,h[2][2]),this.minute=this.getMaxPatternValue("minute",e,h[3][2]),this.second=this.getMaxPatternValue("second",e,h[4][2]))}if(r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return 0}else if(this.apply())return r-1}return r+=1,r>=h.length?this:this.year<0?null:r}getMaxPatternValue(e,t,r){let i=t[e].length-1-r;for(let n=t[e].length-1;n>=0;n--)if(t[e][n]){i=n-r;break}if(e==="day"){let n=this.getLastDayOfMonth(this.year,this.month);return t.lastDayOfMonth||!t.starDOW?n:Math.min(i,n)}return i}findPrevious(e,t,r,i){return this._findMatch(e,t,r,i,-1)}getDate(e){return!e&&this.instantMs!==void 0&&typeof this.tz!="number"?new Date(this.instantMs+(this.tz===void 0?this.ms:0)):e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):P(y(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let r=0;r<h.length;r++){let i=h[r][0],n=h[r][2],a=this[i];if(a+n<0||a+n>=e[i].length)return!1;let o=e[i][a+n];if(i==="day"&&(o=this._matchDayValue(o,a,e,t)),!o)return!1}return!0}};function z(s){s===void 0&&(s={}),delete s.name,s.legacyMode!==void 0&&s.domAndDow===void 0?s.domAndDow=!s.legacyMode:s.domAndDow===void 0&&(s.domAndDow=!1),s.legacyMode=!s.domAndDow;let e=(r,i)=>r===void 0?i:r;if(s.paused=e(s.paused,!1),s.maxRuns=e(s.maxRuns,1/0),s.catch=e(s.catch,!1),s.unref=e(s.unref,!1),s.mode=e(s.mode,"auto"),s.alternativeWeekdays=e(s.alternativeWeekdays,!1),s.sloppyRanges=e(s.sloppyRanges,!1),s.allowPast=e(s.allowPast,!1),s.interval=s.interval===void 0?0:parseInt(s.interval.toString(),10),s.utcOffset=s.utcOffset===void 0?void 0:parseInt(s.utcOffset.toString(),10),s.dayOffset=s.dayOffset===void 0?0:parseInt(s.dayOffset.toString(),10),!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(s.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");s.timezone===""&&(s.timezone=void 0);let t=s.timezone??s.utcOffset;if(s.startAt&&(s.startAt=W(new f(s.startAt,t))),s.stopAt&&(s.stopAt=W(new f(s.stopAt,t))),s.interval!==null){if(isNaN(s.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(s.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(s.utcOffset!==void 0){if(isNaN(s.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(s.utcOffset<-870||s.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(s.utcOffset!==void 0&&s.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(s.unref!==!0&&s.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(s.dayOffset!==void 0&&s.dayOffset!==0&&isNaN(s.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return s}function W(s){return s.ms?(s.ms=0,new f(new Date(s.getTime()+1e3),s.tz)):s}function T(s){return typeof s=="function"}function I(s){return T(s)}function L(s){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(s):s&&typeof s.unref<"u"&&s.unref()}var R=1440*60*1e3,F=30*1e3,k=[],Y=class{name;options;_states;fn;getTz(){return this.options.timezone??this.options.utcOffset}applyDayOffset(e){let t=this._offsetMs();return t?new Date(e.getTime()+t):e}_offsetMs(){return(this.options.dayOffset??0)*R}get _startAt(){return this.options.startAt}get _stopAt(){return this.options.stopAt}_nextTarget(e,t){let r=this._offsetMs(),i=this._next(this._shift(e),new Date(t.getTime()-r),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return i?this.applyDayOffset(i.getDate(!1)):null}_previousTarget(e,t){let r=this._previous(this._shift(e??t),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return r?this.applyDayOffset(r.getDate(!1)):null}_shift(e){if(e!=null)return new f(new Date(this._toMs(e)-this._offsetMs()),this.getTz())}constructor(e,t,r){let i,n;if(T(t))n=t;else if(typeof t=="object")i=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(T(r))n=r;else if(typeof r=="object")i=r;else if(r!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=i?.name,this.options=z(i),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:i?i.maxRuns:void 0,paused:i?i.paused:!1,pattern:new C("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new f(e,this.getTz()):this._states.pattern=new C(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(k.find(o=>o.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");k.push(this)}return n!==void 0&&I(n)&&(this.fn=n,this.schedule()),this}nextRun(e){return this._nextTarget(e,new Date)}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let r=t||this._states.currentRun||void 0;return this._enumerateRuns(e,r,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}enumerate(e){return new A(this,e)}_enumerateRuns(e,t,r){let i=[],n=new Date,a=t;for(;e-- >0;){let o=r==="next"?this._nextTarget(a,n):this._previousTarget(a,n);if(!o)break;i.push(o),a=o}return i}match(e){if(this._states.once){let r=new f(e,this.getTz());r.ms=0;let i=new f(this._states.once,this.getTz());return i.ms=0,r.getTime()===i.getTime()}let t=new f(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){return!this._states.paused&&!this._states.kill&&this.fn!==void 0&&this._nextTarget(this._states.currentRun,new Date)!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=new Date,r=this._nextTarget(e,t);return r?r.getTime()-this._toMs(e??t):null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=k.indexOf(this);e>=0&&k.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){return this._schedule(e)}_schedule(e,t){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let r=t??new Date,i=this._nextTarget(void 0,r),n=i?i.getTime()-r.getTime():null,a=this._states.currentRun;a&&a.getTime()>r.getTime()&&(a=void 0);let o=this._nextTarget(a,r);return n===null||isNaN(n)||o===null?this:(n>F&&(n=F),n<0&&(n=this._states.paused?1e3:0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(o),n),this._states.currentTimeout&&this.options.unref&&L(this._states.currentTimeout),this)}async _trigger(e=new Date){this._states.blocking=!0,this._states.currentRun=new f(e,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(T(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new f(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,r=!this._states.paused&&t.getTime()>=e.getTime(),i=this._states.blocking&&this.options.protect;r&&!i?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger(t)):r&&i&&T(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this._schedule(void 0,r?void 0:t)}_next(e,t,r){let i=r?r.startAt:this._startAt,n=r?r.stopAt:this._stopAt,a=!!e,o=!!(e||this._states.currentRun),u=!1;!e&&i&&this.options.interval&&(e=this._calculatePreviousRun(i,t),e&&(o=!0),u=!e);let l=e??t??new Date,c=this._toMs(l);e=new f(l,this.getTz()),i&&c<i.getTime()&&(e=u?i:new f(new Date(i.getTime()-1e3),this.getTz()),c=e.getTime());let d=this._states.once||new f(e,this.getTz());if(!u&&d!==this._states.once&&(d=this._findOccurrence(e,c,1,o)),this._states.once){let m=this._states.once.getTime(),p=c-m;if(i&&m<i.getTime()||this._states.currentRun&&this.applyDayOffset(this._states.once.getDate()).getTime()<=this._states.currentRun.getTime()||(a?p>=0:p>1e3&&!this.options.allowPast))return null}return d===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||n&&d.getTime()>=n.getTime()?null:d}_previous(e,t){let r=this._toMs(e??new Date);if(t.stopAt&&r>t.stopAt.getTime()&&(r=t.stopAt.getTime()),this._states.once)return this._states.once.getTime()<r?this._states.once:null;let i=this._findOccurrence(new f(new Date(r),this.getTz()),r,-1);return i===null||t.startAt&&i.getTime()<t.startAt.getTime()?null:i}_toMs(e){return e instanceof Date?e.getTime():new f(e,this.getTz()).getTime()}_findOccurrence(e,t,r,i=!1){let n=this._walk(e,t,r,i),a=this.getTz();if(this._states.pattern.isFixedTime&&r===1||typeof a=="number"||U(t,a)!==(r===1?"earlier":"later"))return n;let o=Math.floor(t/1e3)*1e3,u=r===1?_(o,o+R,a):_(o-R,o,a)-1e3;if(n&&(u-n.getTime())*r>0)return n;let l=this._walk(new f(new Date(u),a),u-r,r,!1,!0);return!n||!l?n??l:(n.getTime()-l.getTime())*r>0?l:n}_walk(e,t,r,i,n=!1){let a=this._states.pattern,o=(l,c)=>r===1?l.increment(a,this.options,c):l.decrement(a,this.options),u=new f(e,this.getTz());for((!n||!u.match(a,this.options))&&(u=o(u,i));u;){let l=this._runAt(u,t,r);if(l)return new f(l,this.getTz());u=o(u,!1)}return null}_runAt(e,t,r){let i=m=>(m.getTime()-t)*r>0,n=e.tz;if(typeof n=="number"){let m=e.getDate();return i(m)?m:null}let a=y(e.year,e.month+1,e.day,e.hour,e.minute,e.second,n),o=v(a),u=this._states.pattern.isFixedTime;if(o.kind==="single")return i(o.date)?o.date:null;if(o.kind==="ambiguous"){let{earlier:m,later:p}=o;return(u?[m]:r===1?[m,p]:[p,m]).find(i)??null}if(!u)return null;let l=new Date(_(o.before.getTime(),o.after.getTime(),n)),c=g(l,n);return c.y===a.y&&c.m===a.m&&c.d===a.d&&i(l)?l:null}_calculatePreviousRun(e,t){let r=new f(t,this.getTz()).getTime();if(e.getTime()>r)return;let i=this.options.interval*1e3,n=e;for(;n.getTime()+i<=r;){let a=new f(n,this.getTz()).increment(this._states.pattern,this.options,!0);if(a===null)break;n=a}return n}},A=class{cron;cursor;now;done;initialMaxRuns;remainingRuns;constructor(e,t){this.cron=e,this.initialMaxRuns=e.options.maxRuns??1/0,this.reset(t)}next(){if(this.done||this.remainingRuns<=0)return this.done=!0,{value:void 0,done:!0};let e=this.cron._nextTarget(this.cursor,this.now);return e===null?(this.done=!0,{value:void 0,done:!0}):(this.cursor=e,this.remainingRuns--,{value:e,done:!1})}peek(){return this.done||this.remainingRuns<=0?null:this.cron._nextTarget(this.cursor,this.now)}reset(e){this.cursor=e instanceof Date?new Date(e.getTime()):e??void 0,this.now=new Date,this.done=!1,this.remainingRuns=this.initialMaxRuns}[Symbol.iterator](){return this}};export{Y as Cron,f as CronDate,A as CronIterator,C as CronPattern,k as scheduledJobs};
|
|
1
|
+
function w(i){return Date.UTC(i.y,i.m-1,i.d,i.h,i.i,i.s)}function C(i,e){return i.y===e.y&&i.m===e.m&&i.d===e.d&&i.h===e.h&&i.i===e.i&&i.s===e.s}function O(i){let e=i.substring(9);return e.includes("Z")||e.includes("+")||e.includes("-")}function j(i,e){let t=new Date(Date.parse(i));if(isNaN(t))throw new Error("Invalid ISO8601 passed to timezone parser.");return O(i)?{tp:y(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),"Etc/UTC"),ms:t.getUTCMilliseconds()}:{tp:y(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e),ms:t.getMilliseconds()}}function D(i,e,t){let{tp:n,ms:s}=j(i,e);return new Date(P(n,t).getTime()+s)}function P(i,e){let t=v(i);if(t.kind==="single")return t.date;if(t.kind==="ambiguous")return t.earlier;if(e)throw new Error("Invalid date passed to fromTZ()");return t.after}function v(i){let e=w(i),t=a=>M(new Date(a),i.tz),n=e-t(e),s=g(new Date(n),i.tz);if(C(s,i)){let a=w(s)-n,o=n-(t(n-x)-a);if(o<n&&C(g(new Date(o),i.tz),i))return{kind:"ambiguous",earlier:new Date(o),later:new Date(n)};let u=n+(a-t(n+x));return u>n&&C(g(new Date(u),i.tz),i)?{kind:"ambiguous",earlier:new Date(n),later:new Date(u)}:{kind:"single",date:new Date(n)}}let r=e-(w(s)-n);return C(g(new Date(r),i.tz),i)?{kind:"single",date:new Date(r)}:{kind:"gap",before:new Date(Math.min(n,r)),after:new Date(Math.max(n,r))}}var x=3*36e5;function M(i,e){return w(g(i,e))-(i.getTime()-i.getUTCMilliseconds())}function _(i,e,t){let n=M(new Date(i),t);for(;e-i>1e3;){let s=i+Math.floor((e-i)/2e3)*1e3;M(new Date(s),t)===n?i=s:e=s}return e}function U(i,e){let t=v(g(new Date(i),e));if(t.kind==="ambiguous")return i<t.later.getTime()?"earlier":"later"}var E=new Map;function g(i,e){if(e===void 0)return y(i.getFullYear(),i.getMonth()+1,i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds());let t=E.get(e),n;try{t||(t=new Intl.DateTimeFormat("en-US",{timeZone:e,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),E.set(e,t)),n=t.formatToParts(i)}catch(r){let a=r instanceof Error?r.message:String(r);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let s={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let r of n)(r.type==="year"||r.type==="month"||r.type==="day"||r.type==="hour"||r.type==="minute"||r.type==="second")&&(s[r.type]=parseInt(r.value,10));if(isNaN(s.year)||isNaN(s.month)||isNaN(s.day)||isNaN(s.hour)||isNaN(s.minute)||isNaN(s.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(s)}`);return s.hour===24&&(s.hour=0),{y:s.year,m:s.month,d:s.day,h:s.hour,i:s.minute,s:s.second,tz:e}}function y(i,e,t,n,s,r,a){return{y:i,m:e,d:t,h:n,i:s,s:r,tz:a}}var R=[1,2,4,8,16],b=class i{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;isFixedTime;constructor(e,t,n){this.pattern=e,this.timezone=t,this.mode=n?.mode??"auto",this.alternativeWeekdays=n?.alternativeWeekdays??!1,this.sloppyRanges=n?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.isFixedTime=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let r;switch(this.mode){case"5-part":r=5;break;case"6-part":r=6;break;case"7-part":r=7;break;case"5-or-6-parts":r=[5,6];break;case"6-or-7-parts":r=[6,7];break;default:r=0}if(!(Array.isArray(r)?r.includes(t):t===r)){let o=Array.isArray(r)?r.join(" or "):r.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${o} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),this.pattern.indexOf("?")>=0)for(let r=0;r<e.length;r++)e[r]=e[r].replace(/\?/g,"*");if(e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlpha(e[4],i.MONTH_NAMES)),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlpha(e[5],i.DAY_NAMES_QUARTZ):this.replaceAlpha(e[5],i.DAY_NAMES)),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let n=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],n,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7]);let s=(r,a)=>!r.includes("*")&&!r.includes("/")&&a.filter(o=>o).length===1;this.isFixedTime=s(e[0],this.second)&&s(e[1],this.minute)&&s(e[2],this.hour)}partToArray(e,t,n,s){let r=this[e];if(t===""&&!(e==="day"&&(this.lastDayOfMonth||this.lastWeekday)))throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return r.fill(s);let a=t.split(",");if(a.length>1)for(let o of a)this.partToArray(e,o,n,s);else t.includes("-")&&t.includes("/")?this.handleRangeWithStepping(t,e,n,s):t.includes("-")?this.handleRange(t,e,n,s):t.includes("/")?this.handleStepping(t,e,n,s):t!==""&&this.handleNumber(t,e,n,s)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,n,s){let r=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(r[0],10)+n;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,r[1]||s)}setPart(e,t,n){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,n);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=n}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,n,s,r){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+r+"'");if(n!==void 0){if(n===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(n>this[s].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[s].length+")")}}handleRangeWithStepping(e,t,n,s){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let r=this.extractNth(e,t),a=r[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,u,h]=a,c=parseInt(o,10)+n,d=parseInt(u,10)+n,m=parseInt(h,10);this.validateNotNaN(c,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(d,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(m,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(c,d,m,t,e);for(let p=c;p<=d;p+=m)this.setPart(t,p,r[1]||s)}extractNth(e,t){let n=e,s;if(n.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");s=n.split("#")[1],n=n.split("#")[0]}else if(n.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");s="L",n=n.slice(0,-1)}return[n,s]}handleRange(e,t,n,s){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let r=this.extractNth(e,t),a=r[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+n,u=parseInt(a[1],10)+n;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(u,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,u,void 0,t,e);for(let h=o;h<=u;h++)this.setPart(t,h,r[1]||s)}handleStepping(e,t,n,s){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let r=this.extractNth(e,t),a=r[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+n);let u=parseInt(a[1],10);this.validateNotNaN(u,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,u,t,e);for(let h=o;h<this[t].length;h+=u)t==="year"&&h===0||this.setPart(t,h,r[1]||s)}replaceAlpha(e,t){let n=e;for(let[s,r]of Object.entries(t))n=n.replace(new RegExp(s,"gi"),r);return n}static DAY_NAMES={"-sun":"-7",sun:"0",mon:"1",tue:"2",wed:"3",thu:"4",fri:"5",sat:"6"};static DAY_NAMES_QUARTZ={sun:"1",mon:"2",tue:"3",wed:"4",thu:"5",fri:"6",sat:"7"};static MONTH_NAMES={jan:"1",feb:"2",mar:"3",apr:"4",may:"5",jun:"6",jul:"7",aug:"8",sep:"9",oct:"10",nov:"11",dec:"12"};static NICKNAME_MAP={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"};handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return i.NICKNAME_MAP[t]||e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|R[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}};var $=[31,28,31,30,31,30,31,31,30,31,30,31],l=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],f=class i{tz;instantMs;instantFields;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(e==null)this.fromDate(new Date);else if(e&&typeof e=="string")this.fromString(e);else if(e instanceof i)this.fromCronDate(e);else throw new TypeError("CronDate: Invalid type ("+typeof e+") passed to CronDate constructor")}getLastDayOfMonth(e,t){return t!==1?$[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let n=this.getLastDayOfMonth(e,t),r=new Date(Date.UTC(e,t,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(e,t,n){let s=this.getLastDayOfMonth(e,t);if(n>s)return-1;let a=new Date(Date.UTC(e,t,n)).getUTCDay();return a===0?n===s?n-2:n+1:a===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(e,t,n,s){let a=new Date(Date.UTC(e,t,n)).getUTCDay(),o=0;for(let u=1;u<=n;u++)new Date(Date.UTC(e,t,u)).getUTCDay()===a&&o++;if(s&63&&R[o-1]&s)return!0;if(s&32){let u=this.getLastDayOfMonth(e,t);for(let h=n+1;h<=u;h++)if(new Date(Date.UTC(e,t,h)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y,this.cacheInstant(e.getTime()-this.ms)}catch(t){let n=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${n}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear(),this.cacheInstant(e.getTime()-this.ms)}cacheInstant(e){this.instantMs=e;let{year:t,month:n,day:s,hour:r,minute:a,second:o}=this;this.instantFields=[t,n,s,r,a,o,this.tz]}cachedInstant(){let e=this.instantFields;if(!(e===void 0||e[6]!==this.tz)&&!(e[5]!==this.second||e[4]!==this.minute||e[3]!==this.hour)&&!(e[2]!==this.day||e[1]!==this.month||e[0]!==this.year))return this.instantMs}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms,this.instantMs=e.instantMs,this.instantFields=e.instantFields}apply(){if(this.month>11||this.month<0||this.day>this.getLastDayOfMonth(this.year,this.month)||this.day<1||this.hour>23||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(0);return e.setUTCFullYear(this.year,this.month,this.day),e.setUTCHours(this.hour,this.minute,this.second,this.ms),this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz=="number"){if(O(e))return this.fromDate(D(e));let t=D(e,"Etc/UTC");this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(D(e,this.tz))}findNext(e,t,n,s){return this._findMatch(e,t,n,s,1)}_matchDayValue(e,t,n,s){let r=e;if(!r){for(let a=0;a<n.nearestWeekdays.length;a++)if(n.nearestWeekdays[a]){let o=this.getNearestWeekday(this.year,this.month,a+1);if(o!==-1&&o===t){r=1;break}}}if(n.lastWeekday){let a=this.getLastWeekday(this.year,this.month);t===a&&(r=1)}if(n.lastDayOfMonth){let a=this.getLastDayOfMonth(this.year,this.month);t===a&&(r=1)}if(!n.starDOW){let a=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),o=n.dayOfWeek[(a+(t-1))%7];o&&o&63&&(o=this.isNthWeekdayOfMonth(this.year,this.month,t,o)?1:0),n.useAndLogic?r=r&&o:!s.domAndDow&&!n.starDOM?r=r||o:r=r&&o}return r}_findMatch(e,t,n,s,r){let a=this[t],o=this[t]+s,u=r===1?h=>h<n[t].length:h=>h>=0;for(let h=o;u(h);h+=r){let c=n[t][h];if(t==="day"&&(c=this._matchDayValue(c,h-s,n,e)),c)return this[t]=h-s,a!==this[t]?2:1}return 3}recurse(e,t,n){let s=this.year,r=n;for(;typeof r=="number";){if(e.starYear&&Math.abs(this.year-s)>400)return null;r=this.recurseStep(e,t,r)}return r}recurseStep(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let r=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){r=a;break}if(r===-1)return null;this.year=r,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let s=this.findNext(t,l[n][0],e,l[n][2]);if(s>1){let r=n+1;for(;r<l.length;)this[l[r][0]]=-l[r][2],r++;if(s===3){if(this[l[n][1]]++,this[l[n][0]]=-l[n][2],this.apply(),n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return 0}else if(this.apply())return n-1}return n+=1,n>=l.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:n}increment(e,t,n){return this.instantMs=void 0,this.instantFields=void 0,this.second+=t.interval!==void 0&&t.interval>1&&n?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.instantMs=void 0,this.instantFields=void 0,this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0)}recurseBackward(e,t,n){let s=this.year,r=n;for(;typeof r=="number";){if(e.starYear&&Math.abs(this.year-s)>400)return null;r=this.recurseBackwardStep(e,t,r)}return r}recurseBackwardStep(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let r=-1;for(let a=this.year-1;a>=0;a--)if(e.year[a]===1){r=a;break}if(r===-1)return null;this.year=r,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let s=this.findPrevious(t,l[n][0],e,l[n][2]);if(s>1){let r=n+1;for(;r<l.length;){let a=l[r][0],o=l[r][2],u=this.getMaxPatternValue(a,e,o);this[a]=u,r++}if(s===3){if(this[l[n][1]]--,n===0){let u=this.getLastDayOfMonth(this.year,this.month);this.day>u&&(this.day=u)}if(n===1)if(this.day<=0)this.day=1;else{let u=this.year,h=this.month;for(;h<0;)h+=12,u--;for(;h>11;)h-=12,u++;let c=this.getLastDayOfMonth(u,h);this.day>c&&(this.day=c)}this.apply();let a=l[n][0],o=l[n][2];if(this[a]=this.getMaxPatternValue(a,e,o),this.apply(),n===0){let u=l[1][2],h=this.getMaxPatternValue("day",e,u);h!==this.day&&(this.day=h,this.hour=this.getMaxPatternValue("hour",e,l[2][2]),this.minute=this.getMaxPatternValue("minute",e,l[3][2]),this.second=this.getMaxPatternValue("second",e,l[4][2]))}if(n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return 0}else if(this.apply())return n-1}return n+=1,n>=l.length?this:this.year<0?null:n}getMaxPatternValue(e,t,n){let s=t[e].length-1-n;for(let r=t[e].length-1;r>=0;r--)if(t[e][r]){s=r-n;break}if(e==="day"){let r=this.getLastDayOfMonth(this.year,this.month);return t.lastDayOfMonth||!t.starDOW?r:Math.min(s,r)}return s}findPrevious(e,t,n,s){return this._findMatch(e,t,n,s,-1)}getDate(e){if(!e&&typeof this.tz!="number"){let t=this.cachedInstant();if(t!==void 0)return new Date(t+(this.tz===void 0?this.ms:0))}return e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):P(y(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let n=0;n<l.length;n++){let s=l[n][0],r=l[n][2],a=this[s];if(a+r<0||a+r>=e[s].length)return!1;let o=e[s][a+r];if(s==="day"&&(o=this._matchDayValue(o,a,e,t)),!o)return!1}return!0}};function I(i){i===void 0&&(i={}),delete i.name,i.legacyMode!==void 0&&i.domAndDow===void 0?i.domAndDow=!i.legacyMode:i.domAndDow===void 0&&(i.domAndDow=!1),i.legacyMode=!i.domAndDow;let e=(n,s)=>n===void 0?s:n;if(i.paused=e(i.paused,!1),i.maxRuns=e(i.maxRuns,1/0),i.catch=e(i.catch,!1),i.unref=e(i.unref,!1),i.mode=e(i.mode,"auto"),i.alternativeWeekdays=e(i.alternativeWeekdays,!1),i.sloppyRanges=e(i.sloppyRanges,!1),i.allowPast=e(i.allowPast,!1),i.interval=i.interval===void 0?0:parseInt(i.interval.toString(),10),i.utcOffset=i.utcOffset===void 0?void 0:parseInt(i.utcOffset.toString(),10),i.dayOffset=i.dayOffset===void 0?0:parseInt(i.dayOffset.toString(),10),!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(i.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");i.timezone===""&&(i.timezone=void 0);let t=i.timezone??i.utcOffset;if(i.startAt&&(i.startAt=W(new f(i.startAt,t))),i.stopAt&&(i.stopAt=W(new f(i.stopAt,t))),i.interval!==null){if(isNaN(i.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(i.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(i.utcOffset!==void 0){if(isNaN(i.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(i.utcOffset<-870||i.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(i.utcOffset!==void 0&&i.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(i.unref!==!0&&i.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(i.dayOffset!==void 0&&i.dayOffset!==0&&isNaN(i.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return i}function W(i){return i.ms?(i.ms=0,new f(new Date(i.getTime()+1e3),i.tz)):i}function T(i){return typeof i=="function"}function z(i){return T(i)}function F(i){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(i):i&&typeof i.unref<"u"&&i.unref()}var N=1440*60*1e3,L=30*1e3,k=[],Y=class{name;options;_states;fn;_startAtRoundingMs=0;getTz(){return this.options.timezone??this.options.utcOffset}applyDayOffset(e){let t=this._offsetMs();return t?new Date(e.getTime()+t):e}_offsetMs(){return(this.options.dayOffset??0)*N}get _startAt(){return this.options.startAt}get _stopAt(){return this.options.stopAt}_nextTarget(e,t){let n=this._offsetMs(),s=this._next(this._shift(e),new Date(t.getTime()-n),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return s?this.applyDayOffset(s.getDate(!1)):null}_previousTarget(e,t){let n=this._previous(this._shift(e??t),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return n?this.applyDayOffset(n.getDate(!1)):null}_shift(e){if(e!=null)return new f(new Date(this._toMs(e)-this._offsetMs()),this.getTz())}constructor(e,t,n){let s,r;if(T(t))r=t;else if(typeof t=="object")s=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(T(n))r=n;else if(typeof n=="object")s=n;else if(n!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");this.name=s?.name;let a=s?.startAt;if(this.options=I(s),a&&this._startAt&&(this._startAtRoundingMs=this._startAt.getTime()-new f(a,this.getTz()).getTime()),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:s?s.maxRuns:void 0,paused:s?s.paused:!1,pattern:new b("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new f(e,this.getTz()):this._states.pattern=new b(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(k.find(u=>u.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");k.push(this)}return r!==void 0&&z(r)&&(this.fn=r,this.schedule()),this}nextRun(e){return this._nextTarget(e,new Date)}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let n=t||this._states.currentRun||void 0;return this._enumerateRuns(e,n,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}enumerate(e){return new A(this,e)}_enumerateRuns(e,t,n){let s=[],r=new Date,a=t;for(;e-- >0;){let o=n==="next"?this._nextTarget(a,r):this._previousTarget(a,r);if(!o)break;s.push(o),a=o}return s}match(e){if(this._states.once){let n=new f(e,this.getTz());n.ms=0;let s=new f(this._states.once,this.getTz());return s.ms=0,n.getTime()===s.getTime()}let t=new f(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){return!this._states.paused&&!this._states.kill&&this.fn!==void 0&&this._nextTarget(this._states.currentRun,new Date)!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=new Date,n=this._nextTarget(e,t);return n?n.getTime()-this._toMs(e??t):null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=k.indexOf(this);e>=0&&k.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){return this._schedule(e)}_schedule(e,t){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let n=t??new Date,s=this._nextTarget(void 0,n),r=s?s.getTime()-n.getTime():null,a=this._states.currentRun;a&&a.getTime()>n.getTime()&&(a=void 0);let o=this._nextTarget(a,n);return r===null||isNaN(r)||o===null?this:(r>L&&(r=L),r<0&&(r=this._states.paused?1e3:0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(o),r),this._states.currentTimeout&&this.options.unref&&F(this._states.currentTimeout),this)}async _trigger(e=new Date){this._states.blocking=!0,this._states.currentRun=new f(e,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(T(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new f(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,n=!this._states.paused&&t.getTime()>=e.getTime(),s=this._states.blocking&&this.options.protect;n&&!s?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger(t)):n&&s&&T(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this._schedule(void 0,n?void 0:t)}_next(e,t,n){let s=n?n.startAt:this._startAt,r=n?n.stopAt:this._stopAt,a=!!e,o=!!(e||this._states.currentRun),u=!1;!e&&s&&this.options.interval&&(e=this._calculatePreviousRun(s,t),e&&(o=!0),u=!e);let h=e??t??new Date,c=this._toMs(h);e=new f(h,this.getTz()),s&&c<s.getTime()&&(e=u?s:new f(new Date(s.getTime()-1e3),this.getTz()),c=e.getTime());let d=this._states.once||new f(e,this.getTz());if(!u&&d!==this._states.once&&(d=this._findOccurrence(e,c,1,o)),this._states.once){let m=this._states.once.getTime(),p=c-m;if(s&&m<s.getTime()-this._startAtRoundingMs||this._states.currentRun&&this.applyDayOffset(this._states.once.getDate()).getTime()<=this._states.currentRun.getTime()||(a?p>=0:p>1e3&&!this.options.allowPast))return null}return d===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||r&&d.getTime()>=r.getTime()?null:d}_previous(e,t){let n=this._toMs(e??new Date);if(t.stopAt&&n>t.stopAt.getTime()&&(n=t.stopAt.getTime()),this._states.once)return this._states.once.getTime()<n?this._states.once:null;let s=this._findOccurrence(new f(new Date(n),this.getTz()),n,-1);return s===null||t.startAt&&s.getTime()<t.startAt.getTime()?null:s}_toMs(e){return e instanceof Date?e.getTime():new f(e,this.getTz()).getTime()}_findOccurrence(e,t,n,s=!1){let r=this._walk(e,t,n,s),a=this.getTz();if(this._states.pattern.isFixedTime&&n===1||typeof a=="number"||U(t,a)!==(n===1?"earlier":"later"))return r;let o=Math.floor(t/1e3)*1e3,u=n===1?_(o,o+N,a):_(o-N,o,a)-1e3;if(r&&(u-r.getTime())*n>0)return r;let h=this._walk(new f(new Date(u),a),u-n,n,!1,!0);return!r||!h?r??h:(r.getTime()-h.getTime())*n>0?h:r}_walk(e,t,n,s,r=!1){let a=this._states.pattern,o=(h,c)=>n===1?h.increment(a,this.options,c):h.decrement(a,this.options),u=new f(e,this.getTz());for((!r||!u.match(a,this.options))&&(u=o(u,s));u;){let h=this._runAt(u,t,n);if(h)return new f(h,this.getTz());u=o(u,!1)}return null}_runAt(e,t,n){let s=m=>(m.getTime()-t)*n>0,r=e.tz;if(typeof r=="number"){let m=e.getDate();return s(m)?m:null}let a=y(e.year,e.month+1,e.day,e.hour,e.minute,e.second,r),o=v(a),u=this._states.pattern.isFixedTime;if(o.kind==="single")return s(o.date)?o.date:null;if(o.kind==="ambiguous"){let{earlier:m,later:p}=o;return(u?[m]:n===1?[m,p]:[p,m]).find(s)??null}if(!u)return null;let h=new Date(_(o.before.getTime(),o.after.getTime(),r)),c=g(h,r);return c.y===a.y&&c.m===a.m&&c.d===a.d&&s(h)?h:null}_calculatePreviousRun(e,t){let n=new f(t,this.getTz()).getTime();if(e.getTime()>n)return;let s=this.options.interval*1e3,r=e;for(;r.getTime()+s<=n;){let a=new f(r,this.getTz()).increment(this._states.pattern,this.options,!0);if(a===null)break;r=a}return r}},A=class{cron;cursor;now;done;initialMaxRuns;remainingRuns;constructor(e,t){this.cron=e,this.initialMaxRuns=e.runsLeft()??1/0,this.reset(t)}next(){if(this.done||this.remainingRuns<=0)return this.done=!0,{value:void 0,done:!0};let e=this.cron._nextTarget(this.cursor,this.now);return e===null?(this.done=!0,{value:void 0,done:!0}):(this.cursor=e,this.remainingRuns--,{value:e,done:!1})}peek(){return this.done||this.remainingRuns<=0?null:this.cron._nextTarget(this.cursor,this.now)}reset(e){this.cursor=e instanceof Date?new Date(e.getTime()):e??void 0,this.now=new Date,this.done=!1,this.remainingRuns=this.initialMaxRuns}[Symbol.iterator](){return this}};export{Y as Cron,f as CronDate,A as CronIterator,b as CronPattern,k as scheduledJobs};
|
package/dist/croner.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Cron=(()=>{var T=(s,e,t)=>()=>{if(t)throw t[0];try{return s&&(e=s(s=0)),e}catch(r){throw t=[r],r}};var q=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};function D(s){return Date.UTC(s.y,s.m-1,s.d,s.h,s.i,s.s)}function w(s,e){return s.y===e.y&&s.m===e.m&&s.d===e.d&&s.h===e.h&&s.i===e.i&&s.s===e.s}function N(s){let e=s.substring(9);return e.includes("Z")||e.includes("+")||e.includes("-")}function Q(s,e){let t=new Date(Date.parse(s));if(isNaN(t))throw new Error("Invalid ISO8601 passed to timezone parser.");return N(s)?y(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),"Etc/UTC"):y(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e)}function v(s,e,t){return R(Q(s,e),t)}function R(s,e){let t=_(s);if(t.kind==="single")return t.date;if(t.kind==="ambiguous")return t.earlier;if(e)throw new Error("Invalid date passed to fromTZ()");return t.after}function _(s){let e=D(s),t=a=>P(new Date(a),s.tz),r=e-t(e),i=g(new Date(r),s.tz);if(w(i,s)){let a=D(i)-r,o=r-(t(r-z)-a);if(o<r&&w(g(new Date(o),s.tz),s))return{kind:"ambiguous",earlier:new Date(o),later:new Date(r)};let u=r+(a-t(r+z));return u>r&&w(g(new Date(u),s.tz),s)?{kind:"ambiguous",earlier:new Date(r),later:new Date(u)}:{kind:"single",date:new Date(r)}}let n=e-(D(i)-r);return w(g(new Date(n),s.tz),s)?{kind:"single",date:new Date(n)}:{kind:"gap",before:new Date(Math.min(r,n)),after:new Date(Math.max(r,n))}}function P(s,e){return D(g(s,e))-(s.getTime()-s.getUTCMilliseconds())}function k(s,e,t){let r=P(new Date(s),t);for(;e-s>1e3;){let i=s+Math.floor((e-s)/2e3)*1e3;P(new Date(i),t)===r?s=i:e=i}return e}function L(s,e){let t=_(g(new Date(s),e));if(t.kind==="ambiguous")return s<t.later.getTime()?"earlier":"later"}function g(s,e){if(e===void 0)return y(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds());let t=I.get(e),r;try{t||(t=new Intl.DateTimeFormat("en-US",{timeZone:e,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),I.set(e,t)),r=t.formatToParts(s)}catch(n){let a=n instanceof Error?n.message:String(n);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let i={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let n of r)(n.type==="year"||n.type==="month"||n.type==="day"||n.type==="hour"||n.type==="minute"||n.type==="second")&&(i[n.type]=parseInt(n.value,10));if(isNaN(i.year)||isNaN(i.month)||isNaN(i.day)||isNaN(i.hour)||isNaN(i.minute)||isNaN(i.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(i)}`);return i.hour===24&&(i.hour=0),{y:i.year,m:i.month,d:i.day,h:i.hour,i:i.minute,s:i.second,tz:e}}function y(s,e,t,r,i,n,a){return{y:s,m:e,d:t,h:r,i,s:n,tz:a}}var z,I,A=T(()=>{z=3*36e5;I=new Map});var x,b,E=T(()=>{x=[1,2,4,8,16],b=class s{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;isFixedTime;constructor(e,t,r){this.pattern=e,this.timezone=t,this.mode=r?.mode??"auto",this.alternativeWeekdays=r?.alternativeWeekdays??!1,this.sloppyRanges=r?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.isFixedTime=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let n;switch(this.mode){case"5-part":n=5;break;case"6-part":n=6;break;case"7-part":n=7;break;case"5-or-6-parts":n=[5,6];break;case"6-or-7-parts":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let o=Array.isArray(n)?n.join(" or "):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${o} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),this.pattern.indexOf("?")>=0)for(let n=0;n<e.length;n++)e[n]=e[n].replace(/\?/g,"*");if(e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlpha(e[4],s.MONTH_NAMES)),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlpha(e[5],s.DAY_NAMES_QUARTZ):this.replaceAlpha(e[5],s.DAY_NAMES)),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let r=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],r,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7]);let i=(n,a)=>!n.includes("*")&&!n.includes("/")&&a.filter(o=>o).length===1;this.isFixedTime=i(e[0],this.second)&&i(e[1],this.minute)&&i(e[2],this.hour)}partToArray(e,t,r,i){let n=this[e];if(t===""&&!(e==="day"&&(this.lastDayOfMonth||this.lastWeekday)))throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return n.fill(i);let a=t.split(",");if(a.length>1)for(let o of a)this.partToArray(e,o,r,i);else t.includes("-")&&t.includes("/")?this.handleRangeWithStepping(t,e,r,i):t.includes("-")?this.handleRange(t,e,r,i):t.includes("/")?this.handleStepping(t,e,r,i):t!==""&&this.handleNumber(t,e,r,i)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,r,i){let n=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(n[0],10)+r;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,n[1]||i)}setPart(e,t,r){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,r);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=r}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,r,i,n){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+n+"'");if(r!==void 0){if(r===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(r>this[i].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[i].length+")")}}handleRangeWithStepping(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let n=this.extractNth(e,t),a=n[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,u,l]=a,c=parseInt(o,10)+r,d=parseInt(u,10)+r,m=parseInt(l,10);this.validateNotNaN(c,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(d,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(m,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(c,d,m,t,e);for(let p=c;p<=d;p+=m)this.setPart(t,p,n[1]||i)}extractNth(e,t){let r=e,i;if(r.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");i=r.split("#")[1],r=r.split("#")[0]}else if(r.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");i="L",r=r.slice(0,-1)}return[r,i]}handleRange(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let n=this.extractNth(e,t),a=n[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+r,u=parseInt(a[1],10)+r;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(u,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,u,void 0,t,e);for(let l=o;l<=u;l++)this.setPart(t,l,n[1]||i)}handleStepping(e,t,r,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let n=this.extractNth(e,t),a=n[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+r);let u=parseInt(a[1],10);this.validateNotNaN(u,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,u,t,e);for(let l=o;l<this[t].length;l+=u)t==="year"&&l===0||this.setPart(t,l,n[1]||i)}replaceAlpha(e,t){let r=e;for(let[i,n]of Object.entries(t))r=r.replace(new RegExp(i,"gi"),n);return r}static DAY_NAMES={"-sun":"-7",sun:"0",mon:"1",tue:"2",wed:"3",thu:"4",fri:"5",sat:"6"};static DAY_NAMES_QUARTZ={sun:"1",mon:"2",tue:"3",wed:"4",thu:"5",fri:"6",sat:"7"};static MONTH_NAMES={jan:"1",feb:"2",mar:"3",apr:"4",may:"5",jun:"6",jul:"7",aug:"8",sep:"9",oct:"10",nov:"11",dec:"12"};static NICKNAME_MAP={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"};handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return s.NICKNAME_MAP[t]||e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|x[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}}});var X,h,f,U=T(()=>{A();E();X=[31,28,31,30,31,30,31,31,30,31,30,31],h=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],f=class s{tz;instantMs;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(e==null)this.fromDate(new Date);else if(e&&typeof e=="string")this.fromString(e);else if(e instanceof s)this.fromCronDate(e);else throw new TypeError("CronDate: Invalid type ("+typeof e+") passed to CronDate constructor")}getLastDayOfMonth(e,t){return t!==1?X[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let r=this.getLastDayOfMonth(e,t),n=new Date(Date.UTC(e,t,r)).getUTCDay();return n===0?r-2:n===6?r-1:r}getNearestWeekday(e,t,r){let i=this.getLastDayOfMonth(e,t);if(r>i)return-1;let a=new Date(Date.UTC(e,t,r)).getUTCDay();return a===0?r===i?r-2:r+1:a===6?r===1?r+2:r-1:r}isNthWeekdayOfMonth(e,t,r,i){let a=new Date(Date.UTC(e,t,r)).getUTCDay(),o=0;for(let u=1;u<=r;u++)new Date(Date.UTC(e,t,u)).getUTCDay()===a&&o++;if(i&63&&x[o-1]&i)return!0;if(i&32){let u=this.getLastDayOfMonth(e,t);for(let l=r+1;l<=u;l++)if(new Date(Date.UTC(e,t,l)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y,this.instantMs=e.getTime()-this.ms}catch(t){let r=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${r}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear(),this.instantMs=e.getTime()-this.ms}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms,this.instantMs=e.instantMs}apply(){if(this.month>11||this.month<0||this.day>this.getLastDayOfMonth(this.year,this.month)||this.day<1||this.hour>23||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(0);return e.setUTCFullYear(this.year,this.month,this.day),e.setUTCHours(this.hour,this.minute,this.second,this.ms),this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz=="number"){if(N(e))return this.fromDate(v(e));let t=v(e,"Etc/UTC");this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(v(e,this.tz))}findNext(e,t,r,i){return this._findMatch(e,t,r,i,1)}_matchDayValue(e,t,r,i){let n=e;if(!n){for(let a=0;a<r.nearestWeekdays.length;a++)if(r.nearestWeekdays[a]){let o=this.getNearestWeekday(this.year,this.month,a+1);if(o!==-1&&o===t){n=1;break}}}if(r.lastWeekday){let a=this.getLastWeekday(this.year,this.month);t===a&&(n=1)}if(r.lastDayOfMonth){let a=this.getLastDayOfMonth(this.year,this.month);t===a&&(n=1)}if(!r.starDOW){let a=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),o=r.dayOfWeek[(a+(t-1))%7];o&&o&63&&(o=this.isNthWeekdayOfMonth(this.year,this.month,t,o)?1:0),r.useAndLogic?n=n&&o:!i.domAndDow&&!r.starDOM?n=n||o:n=n&&o}return n}_findMatch(e,t,r,i,n){let a=this[t],o=this[t]+i,u=n===1?l=>l<r[t].length:l=>l>=0;for(let l=o;u(l);l+=n){let c=r[t][l];if(t==="day"&&(c=this._matchDayValue(c,l-i,r,e)),c)return this[t]=l-i,a!==this[t]?2:1}return 3}recurse(e,t,r){let i=this.year,n=r;for(;typeof n=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;n=this.recurseStep(e,t,n)}return n}recurseStep(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let n=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){n=a;break}if(n===-1)return null;this.year=n,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let i=this.findNext(t,h[r][0],e,h[r][2]);if(i>1){let n=r+1;for(;n<h.length;)this[h[n][0]]=-h[n][2],n++;if(i===3){if(this[h[r][1]]++,this[h[r][0]]=-h[r][2],this.apply(),r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return 0}else if(this.apply())return r-1}return r+=1,r>=h.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:r}increment(e,t,r){return this.instantMs=void 0,this.second+=t.interval!==void 0&&t.interval>1&&r?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.instantMs=void 0,this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0)}recurseBackward(e,t,r){let i=this.year,n=r;for(;typeof n=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;n=this.recurseBackwardStep(e,t,n)}return n}recurseBackwardStep(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let n=-1;for(let a=this.year-1;a>=0;a--)if(e.year[a]===1){n=a;break}if(n===-1)return null;this.year=n,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,h[r][0],e,h[r][2]);if(i>1){let n=r+1;for(;n<h.length;){let a=h[n][0],o=h[n][2],u=this.getMaxPatternValue(a,e,o);this[a]=u,n++}if(i===3){if(this[h[r][1]]--,r===0){let u=this.getLastDayOfMonth(this.year,this.month);this.day>u&&(this.day=u)}if(r===1)if(this.day<=0)this.day=1;else{let u=this.year,l=this.month;for(;l<0;)l+=12,u--;for(;l>11;)l-=12,u++;let c=this.getLastDayOfMonth(u,l);this.day>c&&(this.day=c)}this.apply();let a=h[r][0],o=h[r][2];if(this[a]=this.getMaxPatternValue(a,e,o),this.apply(),r===0){let u=h[1][2],l=this.getMaxPatternValue("day",e,u);l!==this.day&&(this.day=l,this.hour=this.getMaxPatternValue("hour",e,h[2][2]),this.minute=this.getMaxPatternValue("minute",e,h[3][2]),this.second=this.getMaxPatternValue("second",e,h[4][2]))}if(r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return 0}else if(this.apply())return r-1}return r+=1,r>=h.length?this:this.year<0?null:r}getMaxPatternValue(e,t,r){let i=t[e].length-1-r;for(let n=t[e].length-1;n>=0;n--)if(t[e][n]){i=n-r;break}if(e==="day"){let n=this.getLastDayOfMonth(this.year,this.month);return t.lastDayOfMonth||!t.starDOW?n:Math.min(i,n)}return i}findPrevious(e,t,r,i){return this._findMatch(e,t,r,i,-1)}getDate(e){return!e&&this.instantMs!==void 0&&typeof this.tz!="number"?new Date(this.instantMs+(this.tz===void 0?this.ms:0)):e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):R(y(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let r=0;r<h.length;r++){let i=h[r][0],n=h[r][2],a=this[i];if(a+n<0||a+n>=e[i].length)return!1;let o=e[i][a+n];if(i==="day"&&(o=this._matchDayValue(o,a,e,t)),!o)return!1}return!0}}});function j(s){s===void 0&&(s={}),delete s.name,s.legacyMode!==void 0&&s.domAndDow===void 0?s.domAndDow=!s.legacyMode:s.domAndDow===void 0&&(s.domAndDow=!1),s.legacyMode=!s.domAndDow;let e=(r,i)=>r===void 0?i:r;if(s.paused=e(s.paused,!1),s.maxRuns=e(s.maxRuns,1/0),s.catch=e(s.catch,!1),s.unref=e(s.unref,!1),s.mode=e(s.mode,"auto"),s.alternativeWeekdays=e(s.alternativeWeekdays,!1),s.sloppyRanges=e(s.sloppyRanges,!1),s.allowPast=e(s.allowPast,!1),s.interval=s.interval===void 0?0:parseInt(s.interval.toString(),10),s.utcOffset=s.utcOffset===void 0?void 0:parseInt(s.utcOffset.toString(),10),s.dayOffset=s.dayOffset===void 0?0:parseInt(s.dayOffset.toString(),10),!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(s.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");s.timezone===""&&(s.timezone=void 0);let t=s.timezone??s.utcOffset;if(s.startAt&&(s.startAt=Y(new f(s.startAt,t))),s.stopAt&&(s.stopAt=Y(new f(s.stopAt,t))),s.interval!==null){if(isNaN(s.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(s.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(s.utcOffset!==void 0){if(isNaN(s.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(s.utcOffset<-870||s.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(s.utcOffset!==void 0&&s.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(s.unref!==!0&&s.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(s.dayOffset!==void 0&&s.dayOffset!==0&&isNaN(s.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return s}function Y(s){return s.ms?(s.ms=0,new f(new Date(s.getTime()+1e3),s.tz)):s}var Z=T(()=>{U()});function C(s){return typeof s=="function"}function $(s){return C(s)}function H(s){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(s):s&&typeof s.unref<"u"&&s.unref()}var B=T(()=>{});var S,V,M,O,W,J=T(()=>{U();E();Z();B();A();S=1440*60*1e3,V=30*1e3,M=[],O=class{name;options;_states;fn;getTz(){return this.options.timezone??this.options.utcOffset}applyDayOffset(e){let t=this._offsetMs();return t?new Date(e.getTime()+t):e}_offsetMs(){return(this.options.dayOffset??0)*S}get _startAt(){return this.options.startAt}get _stopAt(){return this.options.stopAt}_nextTarget(e,t){let r=this._offsetMs(),i=this._next(this._shift(e),new Date(t.getTime()-r),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return i?this.applyDayOffset(i.getDate(!1)):null}_previousTarget(e,t){let r=this._previous(this._shift(e??t),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return r?this.applyDayOffset(r.getDate(!1)):null}_shift(e){if(e!=null)return new f(new Date(this._toMs(e)-this._offsetMs()),this.getTz())}constructor(e,t,r){let i,n;if(C(t))n=t;else if(typeof t=="object")i=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(C(r))n=r;else if(typeof r=="object")i=r;else if(r!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=i?.name,this.options=j(i),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:i?i.maxRuns:void 0,paused:i?i.paused:!1,pattern:new b("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new f(e,this.getTz()):this._states.pattern=new b(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(M.find(o=>o.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");M.push(this)}return n!==void 0&&$(n)&&(this.fn=n,this.schedule()),this}nextRun(e){return this._nextTarget(e,new Date)}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let r=t||this._states.currentRun||void 0;return this._enumerateRuns(e,r,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}enumerate(e){return new W(this,e)}_enumerateRuns(e,t,r){let i=[],n=new Date,a=t;for(;e-- >0;){let o=r==="next"?this._nextTarget(a,n):this._previousTarget(a,n);if(!o)break;i.push(o),a=o}return i}match(e){if(this._states.once){let r=new f(e,this.getTz());r.ms=0;let i=new f(this._states.once,this.getTz());return i.ms=0,r.getTime()===i.getTime()}let t=new f(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){return!this._states.paused&&!this._states.kill&&this.fn!==void 0&&this._nextTarget(this._states.currentRun,new Date)!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=new Date,r=this._nextTarget(e,t);return r?r.getTime()-this._toMs(e??t):null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=M.indexOf(this);e>=0&&M.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){return this._schedule(e)}_schedule(e,t){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let r=t??new Date,i=this._nextTarget(void 0,r),n=i?i.getTime()-r.getTime():null,a=this._states.currentRun;a&&a.getTime()>r.getTime()&&(a=void 0);let o=this._nextTarget(a,r);return n===null||isNaN(n)||o===null?this:(n>V&&(n=V),n<0&&(n=this._states.paused?1e3:0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(o),n),this._states.currentTimeout&&this.options.unref&&H(this._states.currentTimeout),this)}async _trigger(e=new Date){this._states.blocking=!0,this._states.currentRun=new f(e,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(C(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new f(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,r=!this._states.paused&&t.getTime()>=e.getTime(),i=this._states.blocking&&this.options.protect;r&&!i?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger(t)):r&&i&&C(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this._schedule(void 0,r?void 0:t)}_next(e,t,r){let i=r?r.startAt:this._startAt,n=r?r.stopAt:this._stopAt,a=!!e,o=!!(e||this._states.currentRun),u=!1;!e&&i&&this.options.interval&&(e=this._calculatePreviousRun(i,t),e&&(o=!0),u=!e);let l=e??t??new Date,c=this._toMs(l);e=new f(l,this.getTz()),i&&c<i.getTime()&&(e=u?i:new f(new Date(i.getTime()-1e3),this.getTz()),c=e.getTime());let d=this._states.once||new f(e,this.getTz());if(!u&&d!==this._states.once&&(d=this._findOccurrence(e,c,1,o)),this._states.once){let m=this._states.once.getTime(),p=c-m;if(i&&m<i.getTime()||this._states.currentRun&&this.applyDayOffset(this._states.once.getDate()).getTime()<=this._states.currentRun.getTime()||(a?p>=0:p>1e3&&!this.options.allowPast))return null}return d===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||n&&d.getTime()>=n.getTime()?null:d}_previous(e,t){let r=this._toMs(e??new Date);if(t.stopAt&&r>t.stopAt.getTime()&&(r=t.stopAt.getTime()),this._states.once)return this._states.once.getTime()<r?this._states.once:null;let i=this._findOccurrence(new f(new Date(r),this.getTz()),r,-1);return i===null||t.startAt&&i.getTime()<t.startAt.getTime()?null:i}_toMs(e){return e instanceof Date?e.getTime():new f(e,this.getTz()).getTime()}_findOccurrence(e,t,r,i=!1){let n=this._walk(e,t,r,i),a=this.getTz();if(this._states.pattern.isFixedTime&&r===1||typeof a=="number"||L(t,a)!==(r===1?"earlier":"later"))return n;let o=Math.floor(t/1e3)*1e3,u=r===1?k(o,o+S,a):k(o-S,o,a)-1e3;if(n&&(u-n.getTime())*r>0)return n;let l=this._walk(new f(new Date(u),a),u-r,r,!1,!0);return!n||!l?n??l:(n.getTime()-l.getTime())*r>0?l:n}_walk(e,t,r,i,n=!1){let a=this._states.pattern,o=(l,c)=>r===1?l.increment(a,this.options,c):l.decrement(a,this.options),u=new f(e,this.getTz());for((!n||!u.match(a,this.options))&&(u=o(u,i));u;){let l=this._runAt(u,t,r);if(l)return new f(l,this.getTz());u=o(u,!1)}return null}_runAt(e,t,r){let i=m=>(m.getTime()-t)*r>0,n=e.tz;if(typeof n=="number"){let m=e.getDate();return i(m)?m:null}let a=y(e.year,e.month+1,e.day,e.hour,e.minute,e.second,n),o=_(a),u=this._states.pattern.isFixedTime;if(o.kind==="single")return i(o.date)?o.date:null;if(o.kind==="ambiguous"){let{earlier:m,later:p}=o;return(u?[m]:r===1?[m,p]:[p,m]).find(i)??null}if(!u)return null;let l=new Date(k(o.before.getTime(),o.after.getTime(),n)),c=g(l,n);return c.y===a.y&&c.m===a.m&&c.d===a.d&&i(l)?l:null}_calculatePreviousRun(e,t){let r=new f(t,this.getTz()).getTime();if(e.getTime()>r)return;let i=this.options.interval*1e3,n=e;for(;n.getTime()+i<=r;){let a=new f(n,this.getTz()).increment(this._states.pattern,this.options,!0);if(a===null)break;n=a}return n}},W=class{cron;cursor;now;done;initialMaxRuns;remainingRuns;constructor(e,t){this.cron=e,this.initialMaxRuns=e.options.maxRuns??1/0,this.reset(t)}next(){if(this.done||this.remainingRuns<=0)return this.done=!0,{value:void 0,done:!0};let e=this.cron._nextTarget(this.cursor,this.now);return e===null?(this.done=!0,{value:void 0,done:!0}):(this.cursor=e,this.remainingRuns--,{value:e,done:!1})}peek(){return this.done||this.remainingRuns<=0?null:this.cron._nextTarget(this.cursor,this.now)}reset(e){this.cursor=e instanceof Date?new Date(e.getTime()):e??void 0,this.now=new Date,this.done=!1,this.remainingRuns=this.initialMaxRuns}[Symbol.iterator](){return this}}});var ee=q((Te,K)=>{J();K.exports=O});return ee();})();
|
|
1
|
+
var Cron=(()=>{var T=(s,e,t)=>()=>{if(t)throw t[0];try{return s&&(e=s(s=0)),e}catch(n){throw t=[n],n}};var q=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};function D(s){return Date.UTC(s.y,s.m-1,s.d,s.h,s.i,s.s)}function w(s,e){return s.y===e.y&&s.m===e.m&&s.d===e.d&&s.h===e.h&&s.i===e.i&&s.s===e.s}function R(s){let e=s.substring(9);return e.includes("Z")||e.includes("+")||e.includes("-")}function Q(s,e){let t=new Date(Date.parse(s));if(isNaN(t))throw new Error("Invalid ISO8601 passed to timezone parser.");return R(s)?{tp:y(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),"Etc/UTC"),ms:t.getUTCMilliseconds()}:{tp:y(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e),ms:t.getMilliseconds()}}function v(s,e,t){let{tp:n,ms:i}=Q(s,e);return new Date(N(n,t).getTime()+i)}function N(s,e){let t=_(s);if(t.kind==="single")return t.date;if(t.kind==="ambiguous")return t.earlier;if(e)throw new Error("Invalid date passed to fromTZ()");return t.after}function _(s){let e=D(s),t=a=>P(new Date(a),s.tz),n=e-t(e),i=g(new Date(n),s.tz);if(w(i,s)){let a=D(i)-n,o=n-(t(n-I)-a);if(o<n&&w(g(new Date(o),s.tz),s))return{kind:"ambiguous",earlier:new Date(o),later:new Date(n)};let u=n+(a-t(n+I));return u>n&&w(g(new Date(u),s.tz),s)?{kind:"ambiguous",earlier:new Date(n),later:new Date(u)}:{kind:"single",date:new Date(n)}}let r=e-(D(i)-n);return w(g(new Date(r),s.tz),s)?{kind:"single",date:new Date(r)}:{kind:"gap",before:new Date(Math.min(n,r)),after:new Date(Math.max(n,r))}}function P(s,e){return D(g(s,e))-(s.getTime()-s.getUTCMilliseconds())}function k(s,e,t){let n=P(new Date(s),t);for(;e-s>1e3;){let i=s+Math.floor((e-s)/2e3)*1e3;P(new Date(i),t)===n?s=i:e=i}return e}function F(s,e){let t=_(g(new Date(s),e));if(t.kind==="ambiguous")return s<t.later.getTime()?"earlier":"later"}function g(s,e){if(e===void 0)return y(s.getFullYear(),s.getMonth()+1,s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds());let t=z.get(e),n;try{t||(t=new Intl.DateTimeFormat("en-US",{timeZone:e,year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hour12:!1}),z.set(e,t)),n=t.formatToParts(s)}catch(r){let a=r instanceof Error?r.message:String(r);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let i={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let r of n)(r.type==="year"||r.type==="month"||r.type==="day"||r.type==="hour"||r.type==="minute"||r.type==="second")&&(i[r.type]=parseInt(r.value,10));if(isNaN(i.year)||isNaN(i.month)||isNaN(i.day)||isNaN(i.hour)||isNaN(i.minute)||isNaN(i.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(i)}`);return i.hour===24&&(i.hour=0),{y:i.year,m:i.month,d:i.day,h:i.hour,i:i.minute,s:i.second,tz:e}}function y(s,e,t,n,i,r,a){return{y:s,m:e,d:t,h:n,i,s:r,tz:a}}var I,z,A=T(()=>{I=3*36e5;z=new Map});var x,b,E=T(()=>{x=[1,2,4,8,16],b=class s{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;isFixedTime;constructor(e,t,n){this.pattern=e,this.timezone=t,this.mode=n?.mode??"auto",this.alternativeWeekdays=n?.alternativeWeekdays??!1,this.sloppyRanges=n?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.isFixedTime=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw new TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[""],t=e.length;if(e.length<5||e.length>7)throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five, six, or seven space separated parts are required.");if(this.mode!=="auto"){let r;switch(this.mode){case"5-part":r=5;break;case"6-part":r=6;break;case"7-part":r=7;break;case"5-or-6-parts":r=[5,6];break;case"6-or-7-parts":r=[6,7];break;default:r=0}if(!(Array.isArray(r)?r.includes(t):t===r)){let o=Array.isArray(r)?r.join(" or "):r.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${o} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift("0"),e.length===6&&e.push("*"),this.pattern.indexOf("?")>=0)for(let r=0;r<e.length;r++)e[r]=e[r].replace(/\?/g,"*");if(e[3].toUpperCase()==="LW"?(this.lastWeekday=!0,e[3]=""):e[3].toUpperCase().indexOf("L")>=0&&(e[3]=e[3].replace(/L/gi,""),this.lastDayOfMonth=!0),e[3]=="*"&&(this.starDOM=!0),e[6]=="*"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlpha(e[4],s.MONTH_NAMES)),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlpha(e[5],s.DAY_NAMES_QUARTZ):this.replaceAlpha(e[5],s.DAY_NAMES)),e[5].startsWith("+")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===""))throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");switch(e[5]=="*"&&(this.starDOW=!0),this.mode){case"5-part":e[0]="0",e[6]="*";break;case"6-part":e[6]="*";break;case"5-or-6-parts":e[6]="*";break;case"6-or-7-parts":break;case"7-part":case"auto":break}this.throwAtIllegalCharacters(e),this.partToArray("second",e[0],0,1),this.partToArray("minute",e[1],0,1),this.partToArray("hour",e[2],0,1),this.partToArray("day",e[3],-1,1),this.partToArray("month",e[4],-1,1);let n=this.alternativeWeekdays?-1:0;this.partToArray("dayOfWeek",e[5],n,63),this.partToArray("year",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7]);let i=(r,a)=>!r.includes("*")&&!r.includes("/")&&a.filter(o=>o).length===1;this.isFixedTime=i(e[0],this.second)&&i(e[1],this.minute)&&i(e[2],this.hour)}partToArray(e,t,n,i){let r=this[e];if(t===""&&!(e==="day"&&(this.lastDayOfMonth||this.lastWeekday)))throw new TypeError("CronPattern: configuration entry "+e+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return r.fill(i);let a=t.split(",");if(a.length>1)for(let o of a)this.partToArray(e,o,n,i);else t.includes("-")&&t.includes("/")?this.handleRangeWithStepping(t,e,n,i):t.includes("-")?this.handleRange(t,e,n,i):t.includes("/")?this.handleStepping(t,e,n,i):t!==""&&this.handleNumber(t,e,n,i)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw new TypeError("CronPattern: configuration entry "+t+" ("+e[t]+") contains illegal characters.")}handleNumber(e,t,n,i){let r=this.extractNth(e,t),a=e.toUpperCase().includes("W");if(t!=="day"&&a)throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");a&&(t="nearestWeekdays");let o=parseInt(r[0],10)+n;if(isNaN(o))throw new TypeError("CronPattern: "+t+" is not a number: '"+e+"'");this.setPart(t,o,r[1]||i)}setPart(e,t,n){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError("CronPattern: Invalid part specified: "+e);if(e==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw new RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,n);return}if(e==="second"||e==="minute"){if(t<0||t>=60)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="hour"){if(t<0||t>=24)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="day"||e==="nearestWeekdays"){if(t<0||t>=31)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="month"){if(t<0||t>=12)throw new RangeError("CronPattern: Invalid value for "+e+": "+t)}else if(e==="year"&&(t<1||t>=1e4))throw new RangeError("CronPattern: Invalid value for "+e+": "+t+" (supported range: 1-9999)");this[e][t]=n}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,n,i,r){if(e>t)throw new TypeError("CronPattern: From value is larger than to value: '"+r+"'");if(n!==void 0){if(n===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(n>this[i].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[i].length+")")}}handleRangeWithStepping(e,t,n,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");let r=this.extractNth(e,t),a=r[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '"+e+"'");let[,o,u,h]=a,c=parseInt(o,10)+n,d=parseInt(u,10)+n,m=parseInt(h,10);this.validateNotNaN(c,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(d,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateNotNaN(m,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(c,d,m,t,e);for(let p=c;p<=d;p+=m)this.setPart(t,p,r[1]||i)}extractNth(e,t){let n=e,i;if(n.includes("#")){if(t!=="dayOfWeek")throw new Error("CronPattern: nth (#) only allowed in day-of-week field");i=n.split("#")[1],n=n.split("#")[0]}else if(n.toUpperCase().endsWith("L")){if(t!=="dayOfWeek")throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");i="L",n=n.slice(0,-1)}return[n,i]}handleRange(e,t,n,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");let r=this.extractNth(e,t),a=r[0].split("-");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal range: '"+e+"'");let o=parseInt(a[0],10)+n,u=parseInt(a[1],10)+n;this.validateNotNaN(o,"CronPattern: Syntax error, illegal lower range (NaN)"),this.validateNotNaN(u,"CronPattern: Syntax error, illegal upper range (NaN)"),this.validateRange(o,u,void 0,t,e);for(let h=o;h<=u;h++)this.setPart(t,h,r[1]||i)}handleStepping(e,t,n,i){if(e.toUpperCase().includes("W"))throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");let r=this.extractNth(e,t),a=r[0].split("/");if(a.length!==2)throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+e+"'");if(this.sloppyRanges)a[0]===""&&(a[0]="*");else{if(a[0]==="")throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");if(a[0]!=="*")throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('"+e+"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.")}let o=0;a[0]!=="*"&&(o=parseInt(a[0],10)+n);let u=parseInt(a[1],10);this.validateNotNaN(u,"CronPattern: Syntax error, illegal stepping: (NaN)"),this.validateRange(0,this[t].length-1,u,t,e);for(let h=o;h<this[t].length;h+=u)t==="year"&&h===0||this.setPart(t,h,r[1]||i)}replaceAlpha(e,t){let n=e;for(let[i,r]of Object.entries(t))n=n.replace(new RegExp(i,"gi"),r);return n}static DAY_NAMES={"-sun":"-7",sun:"0",mon:"1",tue:"2",wed:"3",thu:"4",fri:"5",sat:"6"};static DAY_NAMES_QUARTZ={sun:"1",mon:"2",tue:"3",wed:"4",thu:"5",fri:"6",sat:"7"};static MONTH_NAMES={jan:"1",feb:"2",mar:"3",apr:"4",may:"5",jun:"6",jul:"7",aug:"8",sep:"9",oct:"10",nov:"11",dec:"12"};static NICKNAME_MAP={"@yearly":"0 0 1 1 *","@annually":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"};handleNicknames(e){let t=e.trim().toLowerCase();if(t==="@reboot")throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");return s.NICKNAME_MAP[t]||e}setNthWeekdayOfMonth(e,t){if(typeof t!="number"&&t.toUpperCase()==="L")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|x[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}}});var X,l,f,U=T(()=>{A();E();X=[31,28,31,30,31,30,31,31,30,31,30,31],l=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]],f=class s{tz;instantMs;instantFields;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");else if(e==null)this.fromDate(new Date);else if(e&&typeof e=="string")this.fromString(e);else if(e instanceof s)this.fromCronDate(e);else throw new TypeError("CronDate: Invalid type ("+typeof e+") passed to CronDate constructor")}getLastDayOfMonth(e,t){return t!==1?X[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let n=this.getLastDayOfMonth(e,t),r=new Date(Date.UTC(e,t,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(e,t,n){let i=this.getLastDayOfMonth(e,t);if(n>i)return-1;let a=new Date(Date.UTC(e,t,n)).getUTCDay();return a===0?n===i?n-2:n+1:a===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(e,t,n,i){let a=new Date(Date.UTC(e,t,n)).getUTCDay(),o=0;for(let u=1;u<=n;u++)new Date(Date.UTC(e,t,u)).getUTCDay()===a&&o++;if(i&63&&x[o-1]&i)return!0;if(i&32){let u=this.getLastDayOfMonth(e,t);for(let h=n+1;h<=u;h++)if(new Date(Date.UTC(e,t,h)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y,this.cacheInstant(e.getTime()-this.ms)}catch(t){let n=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${n}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear(),this.cacheInstant(e.getTime()-this.ms)}cacheInstant(e){this.instantMs=e;let{year:t,month:n,day:i,hour:r,minute:a,second:o}=this;this.instantFields=[t,n,i,r,a,o,this.tz]}cachedInstant(){let e=this.instantFields;if(!(e===void 0||e[6]!==this.tz)&&!(e[5]!==this.second||e[4]!==this.minute||e[3]!==this.hour)&&!(e[2]!==this.day||e[1]!==this.month||e[0]!==this.year))return this.instantMs}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms,this.instantMs=e.instantMs,this.instantFields=e.instantFields}apply(){if(this.month>11||this.month<0||this.day>this.getLastDayOfMonth(this.year,this.month)||this.day<1||this.hour>23||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(0);return e.setUTCFullYear(this.year,this.month,this.day),e.setUTCHours(this.hour,this.minute,this.second,this.ms),this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz=="number"){if(R(e))return this.fromDate(v(e));let t=v(e,"Etc/UTC");this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(v(e,this.tz))}findNext(e,t,n,i){return this._findMatch(e,t,n,i,1)}_matchDayValue(e,t,n,i){let r=e;if(!r){for(let a=0;a<n.nearestWeekdays.length;a++)if(n.nearestWeekdays[a]){let o=this.getNearestWeekday(this.year,this.month,a+1);if(o!==-1&&o===t){r=1;break}}}if(n.lastWeekday){let a=this.getLastWeekday(this.year,this.month);t===a&&(r=1)}if(n.lastDayOfMonth){let a=this.getLastDayOfMonth(this.year,this.month);t===a&&(r=1)}if(!n.starDOW){let a=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),o=n.dayOfWeek[(a+(t-1))%7];o&&o&63&&(o=this.isNthWeekdayOfMonth(this.year,this.month,t,o)?1:0),n.useAndLogic?r=r&&o:!i.domAndDow&&!n.starDOM?r=r||o:r=r&&o}return r}_findMatch(e,t,n,i,r){let a=this[t],o=this[t]+i,u=r===1?h=>h<n[t].length:h=>h>=0;for(let h=o;u(h);h+=r){let c=n[t][h];if(t==="day"&&(c=this._matchDayValue(c,h-i,n,e)),c)return this[t]=h-i,a!==this[t]?2:1}return 3}recurse(e,t,n){let i=this.year,r=n;for(;typeof r=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;r=this.recurseStep(e,t,r)}return r}recurseStep(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let r=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){r=a;break}if(r===-1)return null;this.year=r,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let i=this.findNext(t,l[n][0],e,l[n][2]);if(i>1){let r=n+1;for(;r<l.length;)this[l[r][0]]=-l[r][2],r++;if(i===3){if(this[l[n][1]]++,this[l[n][0]]=-l[n][2],this.apply(),n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return 0}else if(this.apply())return n-1}return n+=1,n>=l.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:n}increment(e,t,n){return this.instantMs=void 0,this.instantFields=void 0,this.second+=t.interval!==void 0&&t.interval>1&&n?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.instantMs=void 0,this.instantFields=void 0,this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0)}recurseBackward(e,t,n){let i=this.year,r=n;for(;typeof r=="number";){if(e.starYear&&Math.abs(this.year-i)>400)return null;r=this.recurseBackwardStep(e,t,r)}return r}recurseBackwardStep(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let r=-1;for(let a=this.year-1;a>=0;a--)if(e.year[a]===1){r=a;break}if(r===-1)return null;this.year=r,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,l[n][0],e,l[n][2]);if(i>1){let r=n+1;for(;r<l.length;){let a=l[r][0],o=l[r][2],u=this.getMaxPatternValue(a,e,o);this[a]=u,r++}if(i===3){if(this[l[n][1]]--,n===0){let u=this.getLastDayOfMonth(this.year,this.month);this.day>u&&(this.day=u)}if(n===1)if(this.day<=0)this.day=1;else{let u=this.year,h=this.month;for(;h<0;)h+=12,u--;for(;h>11;)h-=12,u++;let c=this.getLastDayOfMonth(u,h);this.day>c&&(this.day=c)}this.apply();let a=l[n][0],o=l[n][2];if(this[a]=this.getMaxPatternValue(a,e,o),this.apply(),n===0){let u=l[1][2],h=this.getMaxPatternValue("day",e,u);h!==this.day&&(this.day=h,this.hour=this.getMaxPatternValue("hour",e,l[2][2]),this.minute=this.getMaxPatternValue("minute",e,l[3][2]),this.second=this.getMaxPatternValue("second",e,l[4][2]))}if(n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return 0}else if(this.apply())return n-1}return n+=1,n>=l.length?this:this.year<0?null:n}getMaxPatternValue(e,t,n){let i=t[e].length-1-n;for(let r=t[e].length-1;r>=0;r--)if(t[e][r]){i=r-n;break}if(e==="day"){let r=this.getLastDayOfMonth(this.year,this.month);return t.lastDayOfMonth||!t.starDOW?r:Math.min(i,r)}return i}findPrevious(e,t,n,i){return this._findMatch(e,t,n,i,-1)}getDate(e){if(!e&&typeof this.tz!="number"){let t=this.cachedInstant();if(t!==void 0)return new Date(t+(this.tz===void 0?this.ms:0))}return e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):N(y(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let n=0;n<l.length;n++){let i=l[n][0],r=l[n][2],a=this[i];if(a+r<0||a+r>=e[i].length)return!1;let o=e[i][a+r];if(i==="day"&&(o=this._matchDayValue(o,a,e,t)),!o)return!1}return!0}}});function j(s){s===void 0&&(s={}),delete s.name,s.legacyMode!==void 0&&s.domAndDow===void 0?s.domAndDow=!s.legacyMode:s.domAndDow===void 0&&(s.domAndDow=!1),s.legacyMode=!s.domAndDow;let e=(n,i)=>n===void 0?i:n;if(s.paused=e(s.paused,!1),s.maxRuns=e(s.maxRuns,1/0),s.catch=e(s.catch,!1),s.unref=e(s.unref,!1),s.mode=e(s.mode,"auto"),s.alternativeWeekdays=e(s.alternativeWeekdays,!1),s.sloppyRanges=e(s.sloppyRanges,!1),s.allowPast=e(s.allowPast,!1),s.interval=s.interval===void 0?0:parseInt(s.interval.toString(),10),s.utcOffset=s.utcOffset===void 0?void 0:parseInt(s.utcOffset.toString(),10),s.dayOffset=s.dayOffset===void 0?0:parseInt(s.dayOffset.toString(),10),!["auto","5-part","6-part","7-part","5-or-6-parts","6-or-7-parts"].includes(s.mode))throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");s.timezone===""&&(s.timezone=void 0);let t=s.timezone??s.utcOffset;if(s.startAt&&(s.startAt=Y(new f(s.startAt,t))),s.stopAt&&(s.stopAt=Y(new f(s.stopAt,t))),s.interval!==null){if(isNaN(s.interval))throw new Error("CronOptions: Supplied value for interval is not a number");if(s.interval<0)throw new Error("CronOptions: Supplied value for interval can not be negative")}if(s.utcOffset!==void 0){if(isNaN(s.utcOffset))throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(s.utcOffset<-870||s.utcOffset>870)throw new Error("CronOptions: utcOffset out of bounds.");if(s.utcOffset!==void 0&&s.timezone)throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(s.unref!==!0&&s.unref!==!1)throw new Error("CronOptions: Unref should be either true, false or undefined(false).");if(s.dayOffset!==void 0&&s.dayOffset!==0&&isNaN(s.dayOffset))throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");return s}function Y(s){return s.ms?(s.ms=0,new f(new Date(s.getTime()+1e3),s.tz)):s}var Z=T(()=>{U()});function C(s){return typeof s=="function"}function $(s){return C(s)}function H(s){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(s):s&&typeof s.unref<"u"&&s.unref()}var B=T(()=>{});var S,V,M,O,W,J=T(()=>{U();E();Z();B();A();S=1440*60*1e3,V=30*1e3,M=[],O=class{name;options;_states;fn;_startAtRoundingMs=0;getTz(){return this.options.timezone??this.options.utcOffset}applyDayOffset(e){let t=this._offsetMs();return t?new Date(e.getTime()+t):e}_offsetMs(){return(this.options.dayOffset??0)*S}get _startAt(){return this.options.startAt}get _stopAt(){return this.options.stopAt}_nextTarget(e,t){let n=this._offsetMs(),i=this._next(this._shift(e),new Date(t.getTime()-n),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return i?this.applyDayOffset(i.getDate(!1)):null}_previousTarget(e,t){let n=this._previous(this._shift(e??t),{startAt:this._shift(this._startAt),stopAt:this._shift(this._stopAt)});return n?this.applyDayOffset(n.getDate(!1)):null}_shift(e){if(e!=null)return new f(new Date(this._toMs(e)-this._offsetMs()),this.getTz())}constructor(e,t,n){let i,r;if(C(t))r=t;else if(typeof t=="object")i=t;else if(t!==void 0)throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(C(n))r=n;else if(typeof n=="object")i=n;else if(n!==void 0)throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");this.name=i?.name;let a=i?.startAt;if(this.options=j(i),a&&this._startAt&&(this._startAtRoundingMs=this._startAt.getTime()-new f(a,this.getTz()).getTime()),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:i?i.maxRuns:void 0,paused:i?i.paused:!1,pattern:new b("* * * * *",void 0,{mode:"auto"})},e&&(e instanceof Date||typeof e=="string"&&e.indexOf(":")>0)?this._states.once=new f(e,this.getTz()):this._states.pattern=new b(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(M.find(u=>u.name===this.name))throw new Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");M.push(this)}return r!==void 0&&$(r)&&(this.fn=r,this.schedule()),this}nextRun(e){return this._nextTarget(e,new Date)}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let n=t||this._states.currentRun||void 0;return this._enumerateRuns(e,n,"next")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,"previous")}enumerate(e){return new W(this,e)}_enumerateRuns(e,t,n){let i=[],r=new Date,a=t;for(;e-- >0;){let o=n==="next"?this._nextTarget(a,r):this._previousTarget(a,r);if(!o)break;i.push(o),a=o}return i}match(e){if(this._states.once){let n=new f(e,this.getTz());n.ms=0;let i=new f(this._states.once,this.getTz());return i.ms=0,n.getTime()===i.getTime()}let t=new f(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){return!this._states.paused&&!this._states.kill&&this.fn!==void 0&&this._nextTarget(this._states.currentRun,new Date)!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=new Date,n=this._nextTarget(e,t);return n?n.getTime()-this._toMs(e??t):null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=M.indexOf(this);e>=0&&M.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){return this._schedule(e)}_schedule(e,t){if(e&&this.fn)throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");e&&(this.fn=e);let n=t??new Date,i=this._nextTarget(void 0,n),r=i?i.getTime()-n.getTime():null,a=this._states.currentRun;a&&a.getTime()>n.getTime()&&(a=void 0);let o=this._nextTarget(a,n);return r===null||isNaN(r)||o===null?this:(r>V&&(r=V),r<0&&(r=this._states.paused?1e3:0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(o),r),this._states.currentTimeout&&this.options.unref&&H(this._states.currentTimeout),this)}async _trigger(e=new Date){this._states.blocking=!0,this._states.currentRun=new f(e,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(C(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new f(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,n=!this._states.paused&&t.getTime()>=e.getTime(),i=this._states.blocking&&this.options.protect;n&&!i?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger(t)):n&&i&&C(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this._schedule(void 0,n?void 0:t)}_next(e,t,n){let i=n?n.startAt:this._startAt,r=n?n.stopAt:this._stopAt,a=!!e,o=!!(e||this._states.currentRun),u=!1;!e&&i&&this.options.interval&&(e=this._calculatePreviousRun(i,t),e&&(o=!0),u=!e);let h=e??t??new Date,c=this._toMs(h);e=new f(h,this.getTz()),i&&c<i.getTime()&&(e=u?i:new f(new Date(i.getTime()-1e3),this.getTz()),c=e.getTime());let d=this._states.once||new f(e,this.getTz());if(!u&&d!==this._states.once&&(d=this._findOccurrence(e,c,1,o)),this._states.once){let m=this._states.once.getTime(),p=c-m;if(i&&m<i.getTime()-this._startAtRoundingMs||this._states.currentRun&&this.applyDayOffset(this._states.once.getDate()).getTime()<=this._states.currentRun.getTime()||(a?p>=0:p>1e3&&!this.options.allowPast))return null}return d===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||r&&d.getTime()>=r.getTime()?null:d}_previous(e,t){let n=this._toMs(e??new Date);if(t.stopAt&&n>t.stopAt.getTime()&&(n=t.stopAt.getTime()),this._states.once)return this._states.once.getTime()<n?this._states.once:null;let i=this._findOccurrence(new f(new Date(n),this.getTz()),n,-1);return i===null||t.startAt&&i.getTime()<t.startAt.getTime()?null:i}_toMs(e){return e instanceof Date?e.getTime():new f(e,this.getTz()).getTime()}_findOccurrence(e,t,n,i=!1){let r=this._walk(e,t,n,i),a=this.getTz();if(this._states.pattern.isFixedTime&&n===1||typeof a=="number"||F(t,a)!==(n===1?"earlier":"later"))return r;let o=Math.floor(t/1e3)*1e3,u=n===1?k(o,o+S,a):k(o-S,o,a)-1e3;if(r&&(u-r.getTime())*n>0)return r;let h=this._walk(new f(new Date(u),a),u-n,n,!1,!0);return!r||!h?r??h:(r.getTime()-h.getTime())*n>0?h:r}_walk(e,t,n,i,r=!1){let a=this._states.pattern,o=(h,c)=>n===1?h.increment(a,this.options,c):h.decrement(a,this.options),u=new f(e,this.getTz());for((!r||!u.match(a,this.options))&&(u=o(u,i));u;){let h=this._runAt(u,t,n);if(h)return new f(h,this.getTz());u=o(u,!1)}return null}_runAt(e,t,n){let i=m=>(m.getTime()-t)*n>0,r=e.tz;if(typeof r=="number"){let m=e.getDate();return i(m)?m:null}let a=y(e.year,e.month+1,e.day,e.hour,e.minute,e.second,r),o=_(a),u=this._states.pattern.isFixedTime;if(o.kind==="single")return i(o.date)?o.date:null;if(o.kind==="ambiguous"){let{earlier:m,later:p}=o;return(u?[m]:n===1?[m,p]:[p,m]).find(i)??null}if(!u)return null;let h=new Date(k(o.before.getTime(),o.after.getTime(),r)),c=g(h,r);return c.y===a.y&&c.m===a.m&&c.d===a.d&&i(h)?h:null}_calculatePreviousRun(e,t){let n=new f(t,this.getTz()).getTime();if(e.getTime()>n)return;let i=this.options.interval*1e3,r=e;for(;r.getTime()+i<=n;){let a=new f(r,this.getTz()).increment(this._states.pattern,this.options,!0);if(a===null)break;r=a}return r}},W=class{cron;cursor;now;done;initialMaxRuns;remainingRuns;constructor(e,t){this.cron=e,this.initialMaxRuns=e.runsLeft()??1/0,this.reset(t)}next(){if(this.done||this.remainingRuns<=0)return this.done=!0,{value:void 0,done:!0};let e=this.cron._nextTarget(this.cursor,this.now);return e===null?(this.done=!0,{value:void 0,done:!0}):(this.cursor=e,this.remainingRuns--,{value:e,done:!1})}peek(){return this.done||this.remainingRuns<=0?null:this.cron._nextTarget(this.cursor,this.now)}reset(e){this.cursor=e instanceof Date?new Date(e.getTime()):e??void 0,this.now=new Date,this.done=!1,this.remainingRuns=this.initialMaxRuns}[Symbol.iterator](){return this}}});var ee=q((Te,K)=>{J();K.exports=O});return ee();})();
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "croner",
|
|
3
|
+
"version": "11.0.0",
|
|
3
4
|
"description": "Trigger functions and/or evaluate cron expressions in JavaScript. No dependencies. Most features. All environments.",
|
|
4
5
|
"author": "Hexagon <github.com/hexagon>",
|
|
5
6
|
"homepage": "https://croner.56k.guru",
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
},
|
|
24
25
|
{
|
|
25
26
|
"type": "github",
|
|
26
|
-
"url": "https://github.com/sponsors/
|
|
27
|
+
"url": "https://github.com/sponsors/hexagon"
|
|
27
28
|
}
|
|
28
29
|
],
|
|
29
30
|
"files": [
|
|
@@ -68,6 +69,25 @@
|
|
|
68
69
|
"browser": "./dist/croner.umd.js"
|
|
69
70
|
}
|
|
70
71
|
},
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
"scripts": {
|
|
73
|
+
"test": "tsx --test test/*.test.ts",
|
|
74
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
75
|
+
"pre-commit": "npm run typecheck && npm test",
|
|
76
|
+
"build:clean": "tsx build/build.ts clean",
|
|
77
|
+
"build:dist": "tsx build/build.ts build",
|
|
78
|
+
"build": "npm run build:clean && npm run check-version && npm run typecheck && npm test && npm run build:dist",
|
|
79
|
+
"check-version": "tsx build/build.ts check-version",
|
|
80
|
+
"version": "tsx build/build.ts sync-version && git add deno.json"
|
|
81
|
+
},
|
|
82
|
+
"devDependencies": {
|
|
83
|
+
"@cross/test": "npm:@jsr/cross__test@~0.0.14",
|
|
84
|
+
"@std/assert": "npm:@jsr/std__assert@~1.0.6",
|
|
85
|
+
"@typescript/typescript6": "~6.0.2",
|
|
86
|
+
"esbuild": "0.28.2",
|
|
87
|
+
"rollup": "~4.65.0",
|
|
88
|
+
"rollup-plugin-dts": "~6.5.1",
|
|
89
|
+
"tsx": "^4.20.0",
|
|
90
|
+
"typescript": "~7.0.0"
|
|
91
|
+
},
|
|
92
|
+
"license": "MIT"
|
|
93
|
+
}
|