cronli5 0.8.2 → 0.8.3

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/CHANGELOG.md CHANGED
@@ -6,6 +6,21 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.8.3]
10
+
11
+ ### Fixed
12
+
13
+ - **A stepped minute under a seconds wildcard now confines, not juxtaposes
14
+ (all languages).** `* 4/6 * * * *` rendered the seconds against an enumerated
15
+ minute list (en ":04, :10, …") or behind a comma that reads as two independent
16
+ cadences ("every second, every six minutes…" — es/de/fi/fr/pt/zh). A blind
17
+ panel of Claude Sonnet instances confirmed the comma is a genuine misread. Each
18
+ language now uses its single-minute confinement form plus the ordinal cadence —
19
+ e.g. en "every second during every sixth minute from four minutes past the
20
+ hour", es "cada segundo en cada sexto minuto…", zh "每小时从4分起每6分钟的每一秒".
21
+ The standalone cadence (`0 4/6`), single-minute confinement (`* 30`), and
22
+ 5-field patterns are unchanged.
23
+
9
24
  ## [0.8.2]
10
25
 
11
26
  ### Fixed
package/cronli5.min.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";(()=>{var vr={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6},Cr={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12},k={second:{cyclic:!0,max:59,min:0,top:59},minute:{cyclic:!0,max:59,min:0,top:59},hour:{cyclic:!0,max:23,min:0,top:23},date:{cyclic:!0,max:31,min:1,top:31},month:{cyclic:!0,max:12,min:1,numbers:Cr,top:12},weekday:{aliases:{L:"6"},cyclic:!0,max:7,min:0,numbers:vr,top:6},year:{max:9999,min:1970}},F=["second","minute","hour","date","month","weekday","year"],tn={"@annually":"0 0 1 1 *","@yearly":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"},U=6;function f(n,r){return(""+n).indexOf(r)!==-1}function G(n){return Array.from(new Set(n))}function L(n){return/^\d+$/.test(n)}function d(n,r){return L(n)?+n:r[n.toUpperCase()]}function Hn(n){return F.forEach(function(e){xr(n[e],k[e],e)}),n}function xr(n,r,e){typeof n!="string"&&typeof n!="number"&&Wn(n,e);let t=""+n;t!=="*"&&(e==="date"&&q(t)||e==="weekday"&&Q(t,r)||t.split(",").forEach(function(o){Pr(o,r)||Wn(o,e)}))}function q(n){if(n==="L"||n==="LW"||n==="WL")return!0;let r=/^L-(\d{1,2})$/.exec(n);if(r)return+r[1]>=1&&+r[1]<=30;let e=/^(\d{1,2})W$|^W(\d{1,2})$/.exec(n);if(e){let t=+(e[1]||e[2]);return t>=1&&t<=31}return!1}function Q(n,r){if(/L$/.test(n))return E(n.slice(0,-1),r);let e=n.split("#");return e.length===2?E(e[0],r)&&/^[1-5]$/.test(e[1]):!1}function Pr(n,r){return f(n,"/")?Mr(n,r):f(n,"-")?Ln(n,r):E(n,r)}function Mr(n,r){let e=n.split("/");return e.length!==2||!L(e[1])||+e[1]<1?!1:e[0]==="*"||E(e[0],r)||Ln(e[0],r,!0)}function Ln(n,r,e){let t=n.split("-");return t.length!==2||!E(t[0],r)||!E(t[1],r)?!1:r.cyclic&&!e?!0:d(t[0],r.numbers)<=d(t[1],r.numbers)}function E(n,r){return n==="*"?!1:L(n)?+n>=r.min&&+n<=r.max:r.numbers?n.toUpperCase()in r.numbers:!1}function Wn(n,r){throw new Error('`cronli5` was passed an invalid field value "'+n+'" for the '+r+" field.")}var Fr={hour:24,minute:60,second:60};function jn(n){F.forEach(function(e){let t=k[e].aliases,i=t&&t[""+n[e]];i&&(n[e]=i)})}function Dn(n){return F.forEach(function(e){let t=""+n[e];if(e==="date"&&q(t)||e==="weekday"&&Q(t,k[e])){n[e]=t;return}n[e]=Tr(t,e,k[e])}),n}function Tr(n,r,e){let t=""+n;if(t==="*")return t;let i=Fr[r],o=t.split(",").map(function(s){return Wr(Rn(jr(Dr(Rr(Er(Lr(s,e),e),e),e),e,i),e),e)}).join(",").split(",");return o.indexOf("*")!==-1?"*":G(o).sort(function(s,m){return En(s,e)-En(m,e)}).join(",")}function Wr(n,r){if(!r.numbers)return n;let e=n.split("/"),t=e[0].split("-").map(function(o){return Hr(o,r)}).join("-");return e.length===2?t+"/"+e[1]:t}function Hr(n,r){if(n==="*")return n;let e=d(n,r.numbers);return""+(e>r.top?r.min:e)}function Lr(n,r){let e=n.split("/");if(!r.cyclic||e.length!==2||+e[1]!=1)return n;let t=e[0];return f(t,"-")?t:t==="*"||d(t,r.numbers)===r.min?"*":t+"-"+r.top}function Er(n,r){let e=n.split("/");if(!r.cyclic||typeof r.top!="number"||e.length!==2||f(e[0],"-"))return n;let t=e[0];return(t==="*"?r.min:d(t,r.numbers))+ +e[1]<=r.top?n:t==="*"?""+r.min:t}function jr(n,r,e){let t=n.split("/");if(typeof e!="number"||t.length!==2||f(t[0],"-"))return n;let i=+t[1],o=t[0]==="*"?r.min:d(t[0]);if(e%i===0&&o<i)return n;let u=[];for(let s=o;s<=r.top;s+=i)u.push(s);return u.join(",")}function Dr(n,r){let e=n.split("/");return e.length!==2||!f(e[0],"-")?n:Rn(e[0],r)==="*"?"*/"+e[1]:n}function Rn(n,r){if(typeof r.top!="number"||f(n,"/")||!f(n,"-"))return n;let e=n.split("-"),t=d(e[0],r.numbers),i=d(e[1],r.numbers);if(t>i)return n;let o=r.top,u={};for(let s=t;s<=i;s+=1)u[s>o?r.min:s]=!0;for(let s=r.min;s<=o;s+=1)if(!u[s])return n;return"*"}function Rr(n,r){let e=n.split("/")[0];if(!f(e,"-"))return n;let t=e.split("-");return d(t[0],r.numbers)!==d(t[1],r.numbers)?n:t[0]}function En(n,r){let e=n.split("/")[0].split("-")[0];return e==="*"?r.min:d(e,r.numbers)}var Ar="`?` is a Quartz token \u2014 pass { quartz: true } to enable Quartz semantics.";function Un(n,r){if(!r){An(n.date),An(n.weekday);return}if(""+n.date=="?"&&(n.date="*"),""+n.weekday=="?"){n.weekday="*";return}n.weekday=Ur(""+n.weekday)}function An(n){if(""+n=="?")throw new Error(Ar)}function Ur(n){return n==="*"?n:n.split(",").map(qr).join(",")}function qr(n){let r=/(#\d+|L)$/.exec(n),e=r?r[0]:"",i=(e?n.slice(0,-e.length):n).split("/"),o=i[0].split("-").map(Qr).join("-");return(i.length===2?o+"/"+i[1]:o)+e}function Qr(n){if(!L(n))return n;if(n==="0")throw new Error('`cronli5` was passed an invalid Quartz day-of-week value "0"; Quartz numbers weekdays 1 (Sunday) through 7 (Saturday).');return""+(+n-1)}function qn(n,r){let e=n instanceof Array;if(n===null||typeof n>"u"||n===""||e&&n.length===0)throw new Error("`cronli5` expects a non-empty cron pattern as the first argument.");if(e)return Qn(n,r);if(typeof n=="object")return Vr(n);if(typeof n=="string")return Ir(n,r);throw new Error("`cronli5` was passed an unexpected type.")}function Qn(n,r){if(n.length>7)throw new Error("`cronli5` was passed a cron pattern with more than seven fields.");return!r.seconds&&n.length<(r.years?7:6)&&n.unshift("0"),{second:n[0]||"0",minute:n[1]||"*",hour:n[2]||"*",date:n[3]||"*",month:n[4]||"*",weekday:n[5]||"*",year:n[6]||"*"}}function Vr(n){if(!n.second&&!n.minute&&!n.hour)throw new Error("`cronli5` expects that any object being interpreted as a cron pattern have at least one of the following properties: `second`, `minute`, or `hour`");let r=typeof n.second<"u",e=typeof n.minute<"u",t=r?"*":"0",i=r||e?"*":"0";return{second:T(n.second,"0"),minute:T(n.minute,t),hour:T(n.hour,i),date:T(n.date,"*"),month:T(n.month,"*"),weekday:T(n.weekday,"*"),year:T(n.year,"*")}}function T(n,r){return typeof n>"u"?r:n}function Ir(n,r){let e=$r(n).split(/\s+/);return Qn(e,r)}function $r(n){let r=n.trim();if(r.charAt(0)!=="@")return n;let e=r.toLowerCase();if(Object.hasOwn(tn,e))return tn[e];throw new Error("`cronli5` does not recognize the macro `"+r+"`.")}function Vn(n){return n===0?7:n}function In(n){let r=n.flatMap(function(i){return i.kind==="step"?i.fires.map(function(u){return{kind:"single",value:""+u}}):[i]});function e(t){return t.kind==="range"?Vn(+t.bounds[0]):Vn(+t.value)}return r.map(function(i,o){return[i,o]}).sort(function(i,o){return e(i[0])-e(o[0])||i[1]-o[1]}).map(function(i){return i[0]})}function on(n){if(n.length<5)return null;let r=n[1]-n[0];if(r<2)return null;for(let e=2;e<n.length;e+=1)if(n[e]-n[e-1]!==r)return null;return{start:n[0],interval:r,last:n[n.length-1]}}function c(n,r){return n.analyses.segments[r]??[]}function O(n,r){return c(n,r)[0]}function Z(n){let r=[];for(let e of n){if(e.kind!=="single")return null;r.push(+e.value)}return r}function un(n){return n.start<n.interval&&24%n.interval===0}function Jr(n,r,e){return e-1-(e-1-n)%r}function sn(n,r){let{start:e,interval:t,last:i,cycle:o}=n,u=o%t===0&&i===Jr(e,t,o);return e===0&&u?r.bare():e<t&&u?r.offset():r.bounded()}function $n(n){if(n.length<2)return null;let r=n[1]-n[0];if(r<2)return null;for(let e=2;e<n.length;e+=1)if(n[e]-n[e-1]!==r)return null;return n[0]!==0&&n.length<5?null:{interval:r,last:n[n.length-1],start:n[0]}}function Jn(n){return n!=="*"&&!f(n,",")&&!f(n,"-")&&!f(n,"/")}function an(n){return f(n,"-")&&!f(n,",")&&!f(n,"/")}function Kr(n){return f(n,"/")&&!f(n,",")}function cn(n){return n!=="*"&&!f(n,"-")&&!f(n,"/")}function fn(n){return n!=="*"&&!an(n)&&!Kr(n)}function j(n){return n.indexOf("/")!==-1&&n.indexOf("-")===-1&&n.indexOf(",")===-1}function V(n,r,e){let t=[],i=n;for(;i<=e;)t.push(i),i+=r;return t}function Kn(n,r,e,t){let i=n.split("/"),o=+i[1];if(f(i[0],"-")){let s=i[0].split("-");return V(d(s[0],t),o,d(s[1],t))}let u=i[0]==="*"?r:d(i[0],t);return V(u,o,e)}function mn(n,r,e){let t=[];return n.split(",").forEach(function(o){if(f(o,"/"))t.push(...Kn(o,r,e));else if(f(o,"-")){let u=o.split("-");+u[0]<=+u[1]?t.push(...V(+u[0],1,+u[1])):(t.push(...V(+u[0],1,e)),t.push(...V(r,1,+u[1])))}else t.push(+o)}),G(t)}function Yr(n){return cn(n)?n.split(",").map(Number):[0]}function Gr(n){if(n==="*")return[0,59];if(an(n)){let r=n.split("-");if(+r[0]<=+r[1])return[+r[0],+r[1]]}return null}function Zr(n){return n==="*"?59:Math.max(...mn(n,0,59))}function Br(n){if(Jn(n)&&n!=="0")return+n}function Xr(n,r){return n==="*"?"wildcard":r==="date"&&q(n)||r==="weekday"&&Q(n,k.weekday)?"quartz":f(n,",")?"list":f(n,"/")?"step":f(n,"-")?"range":"single"}function _r(n,r,e){return r==="wildcard"||r==="quartz"?null:n.split(",").map(function(i){if(f(i,"/")){let o=i.split("/");return{fires:Kn(i,e.min,e.top,e.numbers),interval:+o[1],kind:"step",startToken:o[0]}}return f(i,"-")?{bounds:i.split("-"),kind:"range"}:{kind:"single",value:i}})}function Yn(n){let r={},e={};F.forEach(function(u){r[u]=Xr(n[u],u),e[u]=_r(n[u],r[u],k[u])});let i={analyses:{clockSecond:Br(n.second),lastMinuteFire:Zr(n.minute),minuteSpan:Gr(n.minute),segments:e},pattern:n,shapes:r};return{...i,plan:ne(i)}}function ne(n){let{analyses:r,pattern:e,shapes:t}=n;if(e.second!=="0"){let i=re(e,t,r);if(i)return i}return Gn(e,t,r)||Zn(e,t,r)}function re(n,r,e){let t=ee(n,r);return t||(n.hour==="*"&&r.minute==="single"&&n.second!=="*"?{kind:"secondsWithinMinute",singleSecond:r.second==="single"}:r.second==="single"&&cn(n.minute)&&fn(n.hour)?null:{kind:"composeSeconds",rest:Gn(n,r,e,!0)||Zn(n,r,e,!0)})}function ee(n,r){return n.minute!=="*"||n.hour!=="*"?null:n.second==="*"?{kind:"everySecond"}:r.second==="single"?{kind:"secondPastMinute"}:{kind:"standaloneSeconds"}}function Gn(n,r,e,t=!1){if(r.minute==="step")return{hours:ie(n,r,e),kind:"minuteFrequency"};if(r.hour==="single"&&e.minuteSpan)return{hour:+n.hour,kind:"minuteSpanInHour",span:e.minuteSpan};let i=oe(n,r);if(i)return i;let o=te(n,r);if(o)return o;if(n.hour==="*")return ue(n,r,t)}function ln(n){let[r,e]=n.split("/"),t=r==="*"?0:+r;return r.indexOf("-")===-1&&24%+e===0&&t<+e}function te(n,r){return r.hour!=="step"?null:n.minute==="*"?ln(n.hour)?{form:"wildcard",kind:"minuteSpanAcrossHourStep"}:{form:"wildcard",kind:"minutesAcrossHours",times:I(n.hour)}:r.minute==="range"?{form:"range",kind:"minuteSpanAcrossHourStep"}:r.minute==="list"&&ln(n.hour)?{form:"list",kind:"minuteSpanAcrossHourStep"}:null}function ie(n,r,e){if(r.hour==="list")return{kind:"during",times:I(n.hour)};if(r.hour==="range"){let t=n.hour.split("-");return{from:+t[0],kind:"window",last:e.lastMinuteFire,to:+t[1]}}return r.hour==="single"?{from:+n.hour,kind:"window",last:e.lastMinuteFire,to:+n.hour}:r.hour==="step"?ln(n.hour)?{kind:"step"}:{kind:"during",times:I(n.hour)}:{kind:"none"}}function oe(n,r){return fn(n.hour)?n.minute==="*"?{form:"wildcard",kind:"minutesAcrossHours",times:I(n.hour)}:r.minute==="range"||r.minute==="list"&&f(n.minute,"-")&&!f(n.minute,"/")?{form:r.minute==="range"?"range":"list",kind:"minutesAcrossHours",times:I(n.hour)}:null:null}function ue(n,r,e){if(r.minute==="range")return{kind:"rangeOfMinutes"};if(r.minute==="list")return{kind:"multipleMinutes"};if(n.minute==="*")return{kind:"everyMinute"};if(n.minute!=="0"||e)return{kind:"singleMinute"}}function Zn(n,r,e,t=!1){let i=t&&n.minute==="0";return r.hour==="range"&&!i?se(n,r,e):r.hour==="step"&&n.minute==="0"&&!t?{kind:"hourStep"}:n.hour==="*"&&!i?{kind:"everyHour"}:ae(n,e,i)}function se(n,r,e){let t=n.hour.split("-"),i="lead";return n.minute==="*"?i="wildcard":r.minute==="range"&&(i="range"),{boundMinute:r.minute==="range"||r.minute==="list"?null:e.lastMinuteFire,from:+t[0],kind:"hourRange",last:e.lastMinuteFire,minuteForm:i,to:+t[1]}}function ae(n,r,e=!1){let t=mn(n.hour,0,23),i=Yr(n.minute);if(!e&&t.length*i.length>U)return{fold:i.length===1,kind:"compactClockTimes",minute:i[0]};let o=[];return t.forEach(function(s){i.forEach(function(S){o.push({hour:s,minute:S,second:r.clockSecond})})}),{kind:"clockTimes",times:o}}function I(n){let r=mn(n,0,23);return r.length<=U?{fires:r,kind:"fires"}:{kind:"segments"}}function Bn(n,r){let e=qn(n,r);return Un(e,r.quartz),jn(e),Hn(e),Dn(e)}function v(n){return n=""+n,n.length<2?"0"+n:n}function Xn(n,r,e){return e.short?n:r[n]||n}function dn(n,{sep:r,pad:e,lean:t}){let i=e?v(n.hour):""+n.hour;return t&&!n.minute&&!n.second?i:i+r+v(n.minute)+(n.second?r+v(n.second):"")}var gn={gb:{am:"am",closeUp:!0,dayFirst:!0,midday:"midday",midnight:"midnight",ordinals:!1,pm:"pm",sep:".",serialComma:!1,through:" to "},us:{am:"a.m.",closeUp:!1,dayFirst:!1,midday:"noon",midnight:"midnight",ordinals:!1,pm:"p.m.",sep:":",serialComma:!0,through:" through ",untilWindow:!0},house:{am:"AM",closeUp:!1,dayFirst:!1,midday:"noon",midnight:"midnight",ordinals:!0,pm:"PM",sep:":",serialComma:!0,through:" - "}};function _n(n){return typeof n=="object"&&n!==null?{...gn.us,untilWindow:!1,...n}:gn[n==="uk"?"gb":n]||gn.us}var ce=["zero","one","two","three","four","five","six","seven","eight","nine","ten"],hn=["th","st","nd","rd"],fe=[null,["January","Jan"],["February","Feb"],["March","Mar"],["April","Apr"],["May","May"],["June","Jun"],["July","Jul"],["August","Aug"],["September","Sep"],["October","Oct"],["November","Nov"],["December","Dec"]],C=[["Sunday","Sun"],["Monday","Mon"],["Tuesday","Tue"],["Wednesday","Wed"],["Thursday","Thu"],["Friday","Fri"],["Saturday","Sat"]],le={SUN:C[0],MON:C[1],TUE:C[2],WED:C[3],THU:C[4],FRI:C[5],SAT:C[6]},me=[null,"first","second","third","fourth","fifth"];function de(n){return n=n||{},{ampm:typeof n.ampm=="boolean"?n.ampm:!0,lenient:!!n.lenient,quartz:!!n.quartz,seconds:!!n.seconds,short:!!n.short,style:_n(n.dialect),years:!!n.years}}function ge(n,r){let e=be(n,r);if(e!==null)return rr(e,n,r);let t=Ze(n,r)??er(n,n.plan,r),i=Y(n,r)?at(n,r):"";return rr(i+t,n,r)}function er(n,r,e){let t=Be[r.kind];return t(n,r,e)}function pn(n){return n==="step"||n==="range"||n==="list"}function he(n,r){if(!r.style.untilWindow||r.short||n.plan.kind!=="composeSeconds"||n.plan.rest.kind==="clockTimes"||Y(n,r))return!1;let{shapes:e}=n;return pn(e.second)&&pn(e.minute)&&pn(e.hour)}function pe(n,r){let e=On(n);if(e)return B(e,r);if(n.shapes.hour==="range"){let t=c(n,"hour").find(function(o){return o.kind==="range"});return A({continuous:!1,from:+t.bounds[0],throughMinute:0,to:+t.bounds[1]},r)}return"during the "+R(n,{minute:0,second:null},!1,r)+" hours"}function ye(n,r){return n.shapes.minute==="step"?X(O(n,"minute"),"minute","hour",r):n.shapes.minute==="range"?J(n.pattern.minute,r):H(c(n,"minute"),"minute","hour",r)??z(M(c(n,"minute"),r),"minute","hour",r)}function be(n,r){if(!he(n,r))return null;let e=pe(n,r),t=ye(n,r),i=P(n,"minute",r),o=e+", "+t+", and within each of those minutes, "+i,u=a(n,r).trim();return u?u+", "+o:o}function Se(n,r,e){return"every second"+a(n,e)}function ke(n,r,e){return D(n,e)+a(n,e)}function Oe(n,r,e){let t=n.pattern.second;return g(t,e)+" "+w(t,"second")+" past the minute, every minute"+a(n,e)}function Ne(n,r,e){let t=n.pattern.minute,i=g(t,e),o=w(t,"minute");if(r.singleSecond){let u=n.pattern.second;return i+" "+o+" and "+g(u,e)+" "+w(u,"second")+" past the hour, every hour"+a(n,e)}return D(n,e)+", "+i+" "+o+" past the hour, every hour"+a(n,e)}function ze(n,r,e){if(!(r.rest.kind==="clockTimes"||r.rest.kind==="compactClockTimes")||n.shapes.minute!=="single")return null;let i=+n.pattern.minute;return zn(n,i,e)??wn(n,i,e)}function we(n,r,e){return+r.times[0].minute==0&&n.shapes.minute==="single"?D(n,e)+" for one minute at "+Ce(n,r,e):D(n,e)+" of "+xe(n,r,e)}function ve(n,r,e){let t=ze(n,r,e);return t!==null?t:r.rest.kind==="clockTimes"&&(n.shapes.second==="wildcard"||n.shapes.second==="step")?we(n,r.rest,e):n.shapes.second==="wildcard"&&r.rest.kind==="minuteFrequency"&&r.rest.hours.kind==="none"&&n.pattern.minute==="*/2"?"every second of every other minute"+a(n,e):(r.rest.kind==="compactClockTimes"&&n.analyses.clockSecond?"":D(n,e)+", ")+er(n,r.rest,e)}function Ce(n,r,e){let t=r.times.map(function(u){return l({hour:u.hour,minute:0},e)}),i=_(n,Pn,e);return p(t,e)+(i&&", "+i)}function xe(n,r,e){let t=r.times.map(function(u){return l({hour:u.hour,minute:u.minute,second:u.second,explicit:!0},e)}),i=_(n,Pn,e);return p(t,e)+(i&&", "+i)}function D(n,r){return P(n,"minute",r)}function P(n,r,e){let t=n.pattern.second,i=n.shapes.second;if(t==="*")return"every second";if(i==="step")return X(O(n,"second"),"second",r,e);if(i==="range"){let o=t.split("-"),u=vn();return"every second from "+u(o[0])+h(e)+u(o[1])+" past the "+r}return i==="single"?"at "+g(t,e)+" "+w(t,"second")+" past the "+r:H(c(n,"second"),"second",r,e)??z(M(c(n,"second"),e),"second",r,e)}function Pe(n,r,e){return"every minute"+a(n,e)}function Me(n,r,e){let t=n.pattern.minute;return g(t,e)+" "+w(t,"minute")+" past the hour, every hour"+a(n,e)}function Fe(n,r,e){return J(n.pattern.minute,e)+a(n,e)}function Te(n,r,e){return(H(c(n,"minute"),"minute","hour",e)??z(M(c(n,"minute"),e),"minute","hour",e))+a(n,e)}function We(n,r,e){let t=X(O(n,"minute"),"minute","hour",e);if(r.hours.kind==="during"){let i=K(n,e);t+=i?", "+i:" during the "+$(n,r.hours.times,!1,e)+" hours"}else if(r.hours.kind==="window")t+=" "+A({continuous:!1,from:r.hours.from,throughMinute:r.hours.last,to:r.hours.to},e);else if(r.hours.kind==="step"){let i=Cn(t);t=i+(i===t?" ":", ")+kn(O(n,"hour"),e)}return t+a(n,e)}function He(n,r,e){return n.pattern.minute==="*"?"every minute of the "+l({hour:r.hour,minute:0},e)+" hour"+a(n,e):"every minute from "+l({hour:r.hour,minute:r.span[0]},e)+h(e)+l({hour:r.hour,minute:r.span[1]},e)+a(n,e)}function Le(n,r,e){let t=K(n,e);if(r.form==="wildcard")return t!==null?"every minute, "+t+a(n,e):"every minute during the "+$(n,r.times,!1,e)+" hours"+a(n,e);if(r.form==="range"){let u=J(n.pattern.minute,e);return t!==null?u+", "+t+a(n,e):et(r.times)?u+", at "+$(n,r.times,!0,e)+a(n,e):u+" during the "+$(n,r.times,!1,e)+" hours"+a(n,e)}let i=H(c(n,"minute"),"minute","hour",e)??z(M(c(n,"minute"),e),"minute","hour",e);if(t!==null)return i+", "+t+a(n,e);let o=$(n,r.times,!0,e);return i+", at "+o+a(n,e)}var tr={2:"other",3:"third",4:"fourth",6:"sixth",8:"eighth",12:"twelfth"};function kn(n,r){let e="during every "+tr[n.interval]+" hour",t=n.startToken==="*"?0:+n.startToken;return t===0?e:e+" starting at "+l({hour:t,minute:0},r)}function Ee(n,r,e){let t=O(n,"hour");if(r.form==="wildcard")return"every minute "+kn(t,e)+a(n,e);let i=Cn(r.form==="list"?H(c(n,"minute"),"minute","hour",e)??z(M(c(n,"minute"),e),"minute","hour",e):J(n.pattern.minute,e)),o=K(n,e);return i+", "+(o??cr(t,e))+a(n,e)}function J(n,r){let e=n.split("-"),t=vn();return"every minute from "+t(e[0])+h(r)+t(e[1])+" past the hour"}function je(n,r,e){return"every hour"+a(n,e)}function De(n,r,e){let t=Ue(Ae(r),e);return r.minuteForm==="wildcard"?"every minute "+t+a(n,e):r.minuteForm==="range"?J(n.pattern.minute,e)+", "+t+a(n,e):ir(n,e)+" "+t+a(n,e)}function ir(n,r){return n.pattern.minute==="0"?"every hour":H(c(n,"minute"),"minute","hour",r)??z(M(c(n,"minute"),r),"minute","hour",r)}function Re(n,r,e){let t=K(n,e);return t!==null?t+a(n,e):cr(O(n,"hour"),e)+a(n,e)}function Ae(n){let r=n.minuteForm==="wildcard",e=r?n.boundMinute??0:0;return{from:n.from,closeMinute:e,to:n.to,continuous:r}}function A(n,r){let{from:e,to:t,throughMinute:i,continuous:o}=n,u="from "+l({hour:e,minute:0},r);return r.style.untilWindow&&!r.short&&e!==t?o?u+" until "+l({hour:(t+1)%24,minute:0},r):u+h(r)+l({hour:t,minute:0},r):u+h(r)+l({hour:t,minute:i},r)}function Ue(n,r){return A({continuous:n.continuous,from:n.from,throughMinute:n.closeMinute,to:n.to},r)}function qe(n,r,e){if(n.shapes.minute==="single"){let o=+n.pattern.minute,u=zn(n,o,e)??wn(n,o,e);if(u!==null)return u}let t=xn(r.times),i=r.times.map(function(u){return l({hour:u.hour,minute:u.minute,second:u.second,plain:t},e)});return dr(n,e)+"at "+p(i,e)+or(n,e)}function or(n,r){return Y(n,r)?hr(n,r):""}function Qe(n,r,e){if(r.fold){let u=zn(n,+r.minute,e)??wn(n,+r.minute,e);if(u!==null)return u;if(c(n,"hour").some(function(y){return y.kind==="range"})&&!n.analyses.clockSecond)return Ve(n,r,e)+a(n,e);let m={minute:r.minute,second:n.analyses.clockSecond};return dr(n,e)+"at "+R(n,m,!0,e)+or(n,e)}let t=H(c(n,"minute"),"minute","hour",e)??z(M(c(n,"minute"),e),"minute","hour",e),i=K(n,e),o=i?Cn(t)+", "+i+a(n,e):t+", at "+R(n,{minute:0,second:null},!0,e)+a(n,e);return n.analyses.clockSecond?D(n,e)+", "+o:o}function Ve(n,r,e){let t=r.minute,i=[],o=ur(n).map(function(m){return l({hour:m,minute:t},e)});return c(n,"hour").forEach(function(m){m.kind==="range"&&i.push(A({continuous:!1,from:+m.bounds[0],throughMinute:t,to:+m.bounds[1]},e))}),ir(n,e)+" "+p(i,e)+sr(o,e)}function ur(n){let r=[];return c(n,"hour").forEach(function(t){t.kind==="step"?r.push(...t.fires):t.kind!=="range"&&r.push(+t.value)}),r}function sr(n,r){return n.length?" and at "+p(n,r):""}function W(n){return n==="*"||n.startsWith("*/")&&n.indexOf("-")===-1}function Ie(n,r){let{second:e,minute:t}=n.pattern;return W(e)?{secondLead:!0,text:P(n,"minute",r)}:e==="0"&&W(t)?{secondLead:!1,text:t==="*"?"every minute":X(O(n,"minute"),"minute","hour",r)}:null}function $e(n,r){let e=n.pattern.minute;if(e==="*")return"";if(W(e))return" of every other minute";let t=c(n,"minute");if(n.shapes.minute==="single")return" during minute :"+v(e);if(n.shapes.minute==="range"){let o=e.split("-");return" during minutes :"+v(o[0])+h(r)+":"+v(o[1])}let i=M(t,r).map(function(u){return":"+v(u)});return" during minutes "+p(i,r)}function Je(n,r){let e=n.pattern.hour;if(e==="*")return n.pattern.minute!=="*"&&!W(n.pattern.minute)?" of every hour":"";if(W(e))return e==="*/2"?" of every other hour":"";if(n.shapes.hour==="single"){let t=+e;return n.shapes.minute==="step"?" from "+l({hour:t,minute:0},r)+" until "+l({hour:(t+1)%24,minute:0},r):n.pattern.minute!=="*"&&!W(n.pattern.minute)?" at "+l({hour:t,minute:0},r):" of the "+l({hour:t,minute:0},r)+" hour"}if(n.shapes.hour==="range"){let t=e.split("-");return" "+A({continuous:n.pattern.minute==="*",from:+t[0],throughMinute:0,to:+t[1]},r)}return" during the "+R(n,{minute:0,second:null},!1,r)+" hours"}function Ke(n){if(n.shapes.hour!=="step")return!0;let r=O(n,"hour");return n.pattern.hour==="*/2"||r.startToken.indexOf("-")!==-1}function Ye(n){if(n.shapes.minute!=="list")return!1;let r=Z(c(n,"minute"));return r!==null&&on(r)!==null}function Ge(n,r){let{minute:e,hour:t}=n.pattern,i=W(e)&&e!=="*";return Ke(n)?r.secondLead?i?e==="*/2"&&n.shapes.hour!=="range":!(Ye(n)||n.shapes.minute==="list"&&n.shapes.hour==="list"):t==="*/2"?!0:n.shapes.hour==="single"&&e==="*/2":!1}function Ze(n,r){if(!r.style.untilWindow||r.short||n.pattern.minute==="*"&&n.pattern.hour==="*")return null;let e=Ie(n,r);if(!e||!Ge(n,e))return null;let t=e.secondLead?$e(n,r):"";return e.text+t+Je(n,r)+a(n,r)}var Be={clockTimes:qe,compactClockTimes:Qe,composeSeconds:ve,everyHour:je,everyMinute:Pe,everySecond:Se,hourRange:De,hourStep:Re,minuteFrequency:We,minuteSpanAcrossHourStep:Ee,minuteSpanInHour:He,minutesAcrossHours:Le,multipleMinutes:Te,rangeOfMinutes:Fe,secondPastMinute:Oe,secondsWithinMinute:Ne,singleMinute:Me,standaloneSeconds:ke};function ar(n,r){let{interval:e,start:t,last:i,cycle:o,unit:u,anchor:s}=n,m="every "+g(e,r)+" "+u+"s";return sn({start:t,interval:e,last:i,cycle:o},{bare:()=>m,offset:()=>m+" from "+g(t,r)+" "+w(t,u)+" past the "+s,bounded:()=>{let S=vn();return m+" from "+S(t)+h(r)+S(i)+" "+w(i,u)+" past the "+s}})}function H(n,r,e,t){let i=Z(n),o=i&&on(i);return o?ar({...o,cycle:60,unit:r,anchor:e},t):null}function X(n,r,e,t){if(n.startToken.indexOf("-")!==-1)return z(nr(n.fires,t),r,e,t);let i=n.startToken==="*"?0:+n.startToken;return i!==0&&n.fires.length<=3?z(nr(n.fires,t),r,e,t):ar({interval:n.interval,start:i,last:n.fires[n.fires.length-1],cycle:60,unit:r,anchor:e},t)}function cr(n,r){if(n.startToken.indexOf("-")!==-1)return"at "+yn(n.fires,r);let e=n.startToken==="*"?0:+n.startToken,t=n.interval;return e===0?"every "+g(t,r)+" hours":n.fires.length<=3?"at "+yn(n.fires,r):"every "+g(t,r)+" hours from "+l({hour:e,minute:0},r)}function B(n,r){let{start:e,interval:t,last:i}=n,o="every "+g(t,r)+" hours";return sn({start:e,interval:t,last:i,cycle:24},{bare:()=>o,offset:()=>o+" from "+l({hour:e,minute:0},r),bounded:()=>o+" from "+l({hour:e,minute:0},r)+h(r)+l({hour:i,minute:0},r)})}function K(n,r){let e=On(n);return!e||un(e)?null:B(e,r)}function On(n){let r=c(n,"hour");if(r.length===1&&r[0].kind==="step"){let t=r[0];if(t.fires.length<2)return null;let i=t.startToken==="*"?0:+t.startToken.split("-")[0];return{interval:t.interval,last:t.fires[t.fires.length-1],start:i}}let e=Z(r);return e&&$n(e)}function Nn(n){return n.pattern.second==="*"||n.shapes.second==="step"}function fr(n,r,e){if(r===0)return Nn(n)?P(n,"minute",e)+" for one minute":P(n,"hour",e);let t=g(r,e)+" "+w(r,"minute")+" past the hour";return n.pattern.second==="0"?t:P(n,"minute",e)+", "+t}function zn(n,r,e){let t=On(n);if(!t)return null;let i=(t.last-t.start)/t.interval+1;if(n.pattern.second==="0"&&i<=U&&un(t))return null;let o=r===0&&Nn(n)&&Xe(n);return o?P(n,"minute",e)+" for one minute "+kn(o,e)+a(n,e):r===0&&n.pattern.second==="0"?B(t,e)+a(n,e):fr(n,r,e)+", "+B(t,e)+a(n,e)}function Xe(n){let r=c(n,"hour"),e=r.length===1&&r[0];return!e||e.kind!=="step"||e.startToken.indexOf("-")!==-1||!(e.interval in tr)?null:e}function _e(n){return c(n,"hour").some(function(e){return e.kind==="range"})}function nt(n,r){let e=[],t=ur(n);c(n,"hour").forEach(function(s){s.kind==="range"&&e.push(A({continuous:!1,from:+s.bounds[0],throughMinute:0,to:+s.bounds[1]},r))});let i="every hour "+p(e,r),o=t.map(function(s){return l({hour:s,minute:0},r)});return i+sr(o,r)}function wn(n,r,e){return r!==0||!_e(n)||n.pattern.second==="0"?null:Nn(n)?P(n,"minute",e)+" for one minute during the "+R(n,{minute:0,second:null},!1,e)+" hours"+a(n,e):fr(n,r,e)+", "+nt(n,e)+a(n,e)}function vn(){return function(r){return""+r}}function lr(n,r){return n>1?function(t){return""+t}:function(t){return g(t,r)}}function nr(n,r){return n.map(lr(n.length,r))}function M(n,r){let e=n.reduce(function(o,u){return u.kind==="range"?o+1:o+(u.kind==="step"?u.fires.length:1)},0),t=lr(e,r);return n.flatMap(function(o){return o.kind==="range"?[t(o.bounds[0])+h(r)+t(o.bounds[1])]:o.kind==="step"?o.fires.map(t):[t(o.value)]})}function z(n,r,e,t){return"at "+p(n,t)+" "+r+"s past the "+e}function Cn(n){return n.replace(/ past the hour$/,"")}function rt(n,r,e){return(+n==0||+n==12)&&+r==0&&!(typeof e=="number"&&e>0)}function xn(n){let r=n.filter(function(t){return rt(t.hour,t.minute,t.second)});return r.length>0&&r.length<n.length}function yn(n,r){let e=xn(n.map(function(o){return{hour:o,minute:0}})),t=n.map(function(o){return l({hour:o,minute:0,plain:e},r)});return p(t,r)}function et(n){return n.kind==="fires"&&n.fires.length===1}function $(n,r,e,t){return r.kind==="fires"?yn(r.fires,t):R(n,{minute:0,second:null},e,t)}function tt(n){return n.kind==="range"?n.bounds:n.kind==="step"?n.fires:[n.value]}function R(n,r,e,t){let{minute:i,second:o}=r,u=c(n,"hour"),s=xn(u.flatMap(function(y){return tt(y).map(function(en){return{hour:+en,minute:i,second:o}})})),m=[];return u.forEach(function(y){y.kind==="step"?m.push(...y.fires.map(function(en){return l({hour:en,minute:i,second:o,plain:s},t)})):y.kind==="range"?m.push(l({hour:y.bounds[0],minute:i,second:o,plain:s},t)+h(t)+l({hour:y.bounds[1],minute:i,second:o,plain:s},t)):m.push(l({hour:y.value,minute:i,second:o,plain:s},t))}),p(it(m,u,e),t)}function it(n,r,e){let t=r.some(function(o){return o.kind==="range"});return!e||!t?n:n.map(function(o,u){return u===0?o:"at "+o})}function mr(n,r,e){if(n.length<=1)return n.join("");if(n.length===2)return n[0]+r+n[1];let t=e.style.serialComma?","+r:r;return n.slice(0,-1).join(", ")+t+n[n.length-1]}function p(n,r){return mr(n," and ",r)}function ot(n,r){return mr(n," or ",r)}var ut={all:"",month:"in ",recurringWeekday:!0,stepDate:"on ",weekday:"on "},Pn={all:"every day",month:"every day in ",recurringWeekday:!1,stepDate:"",weekday:"every "};function a(n,r){if(Y(n,r))return hr(n,r);let e=_(n,ut,r);return e&&" "+e}function dr(n,r){return Y(n,r)?"":_(n,Pn,r)+" "}function _(n,r,e){let t=n.pattern;if(t.date!=="*"&&t.weekday!=="*")return mt(n,e);if(t.date!=="*")return st(n,r,e);if(t.weekday!=="*"){let i=Mn(t.weekday,e);return i?bn(i,n,e):r.weekday+kr(n,r.recurringWeekday,e)+yr(n,e)}return t.month!=="*"?r.month+N(n,e):r.all}function st(n,r,e){let t=n.pattern,i=nn(t.date,e);return i?bn(i,n,e):j(t.date)?bn(r.stepDate+br(t.date),n,e):t.month!=="*"&&!gr(n)?"on the "+Sn(n,e)+yr(n,e):t.month!=="*"?"on "+pr(n,e):"on the "+Sn(n,e)}function gr(n){return!Sr(n.pattern.month)&&c(n,"month").every(function(e){return e.kind!=="range"})}function Y(n,r){return n.pattern.date!=="*"&&n.pattern.weekday!=="*"&&!!r.style.untilWindow&&!r.short}function hr(n,r){let e=[...ct(n,r),...ft(n,r)];return" whenever the day is "+ot(e,r)}function at(n,r){return n.pattern.month==="*"?"":"in "+N(n,r)+" "}function ct(n,r){let e=n.pattern.date,t=nn(e,r);if(t)return[t.replace(/^on /,"")];let i=lt(e);if(i)return[i];let o=[];return c(n,"date").forEach(function(s){s.kind==="range"?o.push("from the "+b(s.bounds[0])+h(r)+"the "+b(s.bounds[1])):s.kind==="step"?s.fires.forEach(function(S){o.push("the "+b(S))}):o.push("the "+b(s.value))}),o}function ft(n,r){let e=n.pattern.weekday,t=Mn(e,r);if(t)return[t.replace(/^on /,"")];let i=[];return c(n,"weekday").forEach(function(u){u.kind==="range"&&u.bounds[0]==="1"&&u.bounds[1]==="5"?i.push("a weekday"):u.kind==="range"?i.push("a "+x(u.bounds[0],r)+h(r)+"a "+x(u.bounds[1],r)):u.kind==="step"?u.fires.forEach(function(m){i.push("a "+x(m,r))}):i.push("a "+x(u.value,r))}),i}function lt(n){if(!j(n))return null;let[r,e]=n.split("/");return+e!=2?null:r==="*"||r==="1"?"an odd-numbered day":r==="2"?"an even-numbered day":null}function mt(n,r){let e=n.pattern,t=Mn(e.weekday,r)||"on "+kr(n,!1,r);return e.month!=="*"&&gr(n)&&!nn(e.date,r)&&!j(e.date)?"on "+pr(n,r)+" or "+t+" in "+N(n,r):dt(n,r)+" or "+t+gt(n,r)}function dt(n,r){let e=n.pattern,t=nn(e.date,r);return t||(j(e.date)?br(e.date):"on the "+Sn(n,r))}function gt(n,r){return n.pattern.month==="*"?"":", in "+N(n,r)}function nn(n,r){if(n==="L")return"on the last day of the month";if(n==="LW"||n==="WL")return"on the last weekday of the month";let e=/^L-(\d{1,2})$/.exec(n);if(e)return g(+e[1],r)+" "+w(e[1],"day")+" before the last day of the month";let t=/^(\d{1,2})W$|^W(\d{1,2})$/.exec(n);if(t)return"on the weekday nearest the "+b(t[1]||t[2])}function Mn(n,r){let e=n.split("#");if(e.length===2)return"on the "+me[+e[1]]+" "+x(e[0],r)+" of the month";if(/L$/.test(n))return"on the last "+x(n.slice(0,-1),r)+" of the month"}function pr(n,r){let e=N(n,r),t=rn(c(n,"date"),r.style.ordinals?b:ht,r);return r.style.dayFirst&&n.shapes.date==="single"&&n.shapes.month!=="single"?"the "+b(n.pattern.date)+" of "+e:r.style.dayFirst?t+" "+e:e+" "+t}function ht(n){return""+n}function yr(n,r){return n.pattern.month==="*"?"":" in "+N(n,r)}function bn(n,r,e){if(r.pattern.month==="*")return n;let t=n.indexOf(" of the month")!==-1;return t&&r.shapes.month==="range"?n.replace(" of the month"," of each month")+" from "+N(r,e):t&&(r.shapes.month==="single"||r.shapes.month==="step")?n.replace(" of the month","")+" in "+N(r,e):n+" in "+N(r,e)}function br(n){let r=n.split("/"),e=+r[1],t=r[0],o=(e===2?"every other":"every "+b(e))+" day of the month";return t!=="*"&&t!=="1"&&(o+=" from the "+b(t)),o}function Sn(n,r){return rn(c(n,"date"),b,r)}function N(n,r){let e=Sr(n.pattern.month);return e||rn(c(n,"month"),function(i){return kt(i,r)},r)}function Sr(n){if(!j(n))return null;let[r,e]=n.split("/");return+e!=2?null:r==="*"||r==="1"?"every odd-numbered month":r==="2"?"every even-numbered month":null}function kr(n,r,e){let t=In(c(n,"weekday")),i=t.some(function(s){return s.kind==="range"});return rn(t,r&&!i?function(s){return pt(s,e)}:function(s){return x(s,e)},e)}function pt(n,r){let e=x(n,r);return r.short?e:e+"s"}function rn(n,r,e){let t=[];return n.forEach(function(o){o.kind==="step"?t.push(...o.fires.map(r)):o.kind==="range"?t.push(o.bounds.map(r).join(h(e))):t.push(r(o.value))}),p(t,e)}function rr(n,r,e){let t=r.pattern.year;if(t==="*")return n;if(t.indexOf("/")!==-1)return n+", "+bt(t,e);let i=yt(t,e);if(t.indexOf("-")===-1&&t.indexOf(",")===-1&&r.pattern.date!=="*"&&n.indexOf(" at ")!==-1){let o=e.style.dayFirst?" ":", ";return n.replace(" at ",o+i+" at ")}return n+" in "+i}function yt(n,r){return n.indexOf(",")!==-1?p(n.split(","),r):n.indexOf("-")!==-1?n.split("-").join(h(r)):n}function bt(n,r){let e=n.split("/"),t=+e[1],i=e[0];if(t<=1)return"every year";let o=t===2?"every other year":"every "+g(t,r)+" years";return i!=="*"&&i!=="0"&&(o+=" from "+i),o}function l(n,r){let{hour:e,minute:t,plain:i,explicit:o}=n,u=typeof n.second=="number"&&n.second>0?n.second:0;return r.ampm?St({hour:e,minute:t,second:u,plain:i,explicit:o},r):dn({hour:e,minute:t,second:u},{pad:!0,sep:r.style.sep})}function St(n,r){let{hour:e,minute:t,second:i,plain:o,explicit:u}=n,s=r.style;if(!o&&!u&&+t==0&&!i){if(+e==0)return s.midnight;if(+e==12)return s.midday}return dn({hour:e%12||12,minute:t,second:i},{lean:!u,sep:s.sep})+(s.closeUp?"":" ")+(e<12?s.am:s.pm)}function g(n,r){return Xn(n,ce,r)}function w(n,r){return+n==1?r:r+"s"}function h(n){return n.short?"-":n.style.through}function b(n){let r=Math.abs(n),e=hn[r];return e||(r=(r%100-20)%10,e=hn[r]||hn[0]),n+e}function kt(n,r){let e=fe[+n];return e&&e[r.short?1:0]}function x(n,r){let e=n===7||n==="7"?0:n,t=C[e]||le[e];return t&&t[r.short?1:0]}var Ot={describe:ge,fallback:"an unrecognizable cron pattern",options:de,reboot:"at system startup",sentence:n=>"Runs "+n+(n.endsWith(".")?"":".")},Or=Ot;/**
1
+ "use strict";(()=>{var Cr={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6},xr={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12},N={second:{cyclic:!0,max:59,min:0,top:59},minute:{cyclic:!0,max:59,min:0,top:59},hour:{cyclic:!0,max:23,min:0,top:23},date:{cyclic:!0,max:31,min:1,top:31},month:{cyclic:!0,max:12,min:1,numbers:xr,top:12},weekday:{aliases:{L:"6"},cyclic:!0,max:7,min:0,numbers:Cr,top:6},year:{max:9999,min:1970}},M=["second","minute","hour","date","month","weekday","year"],sn={"@annually":"0 0 1 1 *","@yearly":"0 0 1 1 *","@monthly":"0 0 1 * *","@weekly":"0 0 * * 0","@daily":"0 0 * * *","@midnight":"0 0 * * *","@hourly":"0 * * * *"},U=6;function l(n,r){return(""+n).indexOf(r)!==-1}function Z(n){return Array.from(new Set(n))}function H(n){return/^\d+$/.test(n)}function d(n,r){return H(n)?+n:r[n.toUpperCase()]}function Hn(n){return M.forEach(function(e){Pr(n[e],N[e],e)}),n}function Pr(n,r,e){typeof n!="string"&&typeof n!="number"&&Wn(n,e);let t=""+n;t!=="*"&&(e==="date"&&q(t)||e==="weekday"&&Q(t,r)||t.split(",").forEach(function(o){Tr(o,r)||Wn(o,e)}))}function q(n){if(n==="L"||n==="LW"||n==="WL")return!0;let r=/^L-(\d{1,2})$/.exec(n);if(r)return+r[1]>=1&&+r[1]<=30;let e=/^(\d{1,2})W$|^W(\d{1,2})$/.exec(n);if(e){let t=+(e[1]||e[2]);return t>=1&&t<=31}return!1}function Q(n,r){if(/L$/.test(n))return L(n.slice(0,-1),r);let e=n.split("#");return e.length===2?L(e[0],r)&&/^[1-5]$/.test(e[1]):!1}function Tr(n,r){return l(n,"/")?Mr(n,r):l(n,"-")?Ln(n,r):L(n,r)}function Mr(n,r){let e=n.split("/");return e.length!==2||!H(e[1])||+e[1]<1?!1:e[0]==="*"||L(e[0],r)||Ln(e[0],r,!0)}function Ln(n,r,e){let t=n.split("-");return t.length!==2||!L(t[0],r)||!L(t[1],r)?!1:r.cyclic&&!e?!0:d(t[0],r.numbers)<=d(t[1],r.numbers)}function L(n,r){return n==="*"?!1:H(n)?+n>=r.min&&+n<=r.max:r.numbers?n.toUpperCase()in r.numbers:!1}function Wn(n,r){throw new Error('`cronli5` was passed an invalid field value "'+n+'" for the '+r+" field.")}var Fr={hour:24,minute:60,second:60};function jn(n){M.forEach(function(e){let t=N[e].aliases,i=t&&t[""+n[e]];i&&(n[e]=i)})}function Dn(n){return M.forEach(function(e){let t=""+n[e];if(e==="date"&&q(t)||e==="weekday"&&Q(t,N[e])){n[e]=t;return}n[e]=Wr(t,e,N[e])}),n}function Wr(n,r,e){let t=""+n;if(t==="*")return t;let i=Fr[r],o=t.split(",").map(function(s){return Hr(Rn(Dr(Rr(Ar(jr(Er(s,e),e),e),e),e,i),e),e)}).join(",").split(",");return o.indexOf("*")!==-1?"*":Z(o).sort(function(s,c){return En(s,e)-En(c,e)}).join(",")}function Hr(n,r){if(!r.numbers)return n;let e=n.split("/"),t=e[0].split("-").map(function(o){return Lr(o,r)}).join("-");return e.length===2?t+"/"+e[1]:t}function Lr(n,r){if(n==="*")return n;let e=d(n,r.numbers);return""+(e>r.top?r.min:e)}function Er(n,r){let e=n.split("/");if(!r.cyclic||e.length!==2||+e[1]!=1)return n;let t=e[0];return l(t,"-")?t:t==="*"||d(t,r.numbers)===r.min?"*":t+"-"+r.top}function jr(n,r){let e=n.split("/");if(!r.cyclic||typeof r.top!="number"||e.length!==2||l(e[0],"-"))return n;let t=e[0];return(t==="*"?r.min:d(t,r.numbers))+ +e[1]<=r.top?n:t==="*"?""+r.min:t}function Dr(n,r,e){let t=n.split("/");if(typeof e!="number"||t.length!==2||l(t[0],"-"))return n;let i=+t[1],o=t[0]==="*"?r.min:d(t[0]);if(e%i===0&&o<i)return n;let u=[];for(let s=o;s<=r.top;s+=i)u.push(s);return u.join(",")}function Rr(n,r){let e=n.split("/");return e.length!==2||!l(e[0],"-")?n:Rn(e[0],r)==="*"?"*/"+e[1]:n}function Rn(n,r){if(typeof r.top!="number"||l(n,"/")||!l(n,"-"))return n;let e=n.split("-"),t=d(e[0],r.numbers),i=d(e[1],r.numbers);if(t>i)return n;let o=r.top,u={};for(let s=t;s<=i;s+=1)u[s>o?r.min:s]=!0;for(let s=r.min;s<=o;s+=1)if(!u[s])return n;return"*"}function Ar(n,r){let e=n.split("/")[0];if(!l(e,"-"))return n;let t=e.split("-");return d(t[0],r.numbers)!==d(t[1],r.numbers)?n:t[0]}function En(n,r){let e=n.split("/")[0].split("-")[0];return e==="*"?r.min:d(e,r.numbers)}var Ur="`?` is a Quartz token \u2014 pass { quartz: true } to enable Quartz semantics.";function Un(n,r){if(!r){An(n.date),An(n.weekday);return}if(""+n.date=="?"&&(n.date="*"),""+n.weekday=="?"){n.weekday="*";return}n.weekday=qr(""+n.weekday)}function An(n){if(""+n=="?")throw new Error(Ur)}function qr(n){return n==="*"?n:n.split(",").map(Qr).join(",")}function Qr(n){let r=/(#\d+|L)$/.exec(n),e=r?r[0]:"",i=(e?n.slice(0,-e.length):n).split("/"),o=i[0].split("-").map(Vr).join("-");return(i.length===2?o+"/"+i[1]:o)+e}function Vr(n){if(!H(n))return n;if(n==="0")throw new Error('`cronli5` was passed an invalid Quartz day-of-week value "0"; Quartz numbers weekdays 1 (Sunday) through 7 (Saturday).');return""+(+n-1)}function qn(n,r){let e=n instanceof Array;if(n===null||typeof n>"u"||n===""||e&&n.length===0)throw new Error("`cronli5` expects a non-empty cron pattern as the first argument.");if(e)return Qn(n,r);if(typeof n=="object")return Ir(n);if(typeof n=="string")return $r(n,r);throw new Error("`cronli5` was passed an unexpected type.")}function Qn(n,r){if(n.length>7)throw new Error("`cronli5` was passed a cron pattern with more than seven fields.");return!r.seconds&&n.length<(r.years?7:6)&&n.unshift("0"),{second:n[0]||"0",minute:n[1]||"*",hour:n[2]||"*",date:n[3]||"*",month:n[4]||"*",weekday:n[5]||"*",year:n[6]||"*"}}function Ir(n){if(!n.second&&!n.minute&&!n.hour)throw new Error("`cronli5` expects that any object being interpreted as a cron pattern have at least one of the following properties: `second`, `minute`, or `hour`");let r=typeof n.second<"u",e=typeof n.minute<"u",t=r?"*":"0",i=r||e?"*":"0";return{second:F(n.second,"0"),minute:F(n.minute,t),hour:F(n.hour,i),date:F(n.date,"*"),month:F(n.month,"*"),weekday:F(n.weekday,"*"),year:F(n.year,"*")}}function F(n,r){return typeof n>"u"?r:n}function $r(n,r){let e=Jr(n).split(/\s+/);return Qn(e,r)}function Jr(n){let r=n.trim();if(r.charAt(0)!=="@")return n;let e=r.toLowerCase();if(Object.hasOwn(sn,e))return sn[e];throw new Error("`cronli5` does not recognize the macro `"+r+"`.")}function Vn(n){return n===0?7:n}function In(n){let r=n.flatMap(function(i){return i.kind==="step"?i.fires.map(function(u){return{kind:"single",value:""+u}}):[i]});function e(t){return t.kind==="range"?Vn(+t.bounds[0]):Vn(+t.value)}return r.map(function(i,o){return[i,o]}).sort(function(i,o){return e(i[0])-e(o[0])||i[1]-o[1]}).map(function(i){return i[0]})}function B(n){if(n.length<5)return null;let r=n[1]-n[0];if(r<2)return null;for(let e=2;e<n.length;e+=1)if(n[e]-n[e-1]!==r)return null;return{start:n[0],interval:r,last:n[n.length-1]}}function f(n,r){return n.analyses.segments[r]??[]}function k(n,r){return f(n,r)[0]}function V(n){let r=[];for(let e of n){if(e.kind!=="single")return null;r.push(+e.value)}return r}function an(n){return n.start<n.interval&&24%n.interval===0}function Kr(n,r,e){return e-1-(e-1-n)%r}function X(n,r){let{start:e,interval:t,last:i,cycle:o}=n,u=o%t===0&&i===Kr(e,t,o);return e===0&&u?r.bare():e<t&&u?r.offset():r.bounded()}function $n(n){if(n.length<2)return null;let r=n[1]-n[0];if(r<2)return null;for(let e=2;e<n.length;e+=1)if(n[e]-n[e-1]!==r)return null;return n[0]!==0&&n.length<5?null:{interval:r,last:n[n.length-1],start:n[0]}}function Jn(n){return n!=="*"&&!l(n,",")&&!l(n,"-")&&!l(n,"/")}function fn(n){return l(n,"-")&&!l(n,",")&&!l(n,"/")}function Yr(n){return l(n,"/")&&!l(n,",")}function ln(n){return n!=="*"&&!l(n,"-")&&!l(n,"/")}function mn(n){return n!=="*"&&!fn(n)&&!Yr(n)}function E(n){return n.indexOf("/")!==-1&&n.indexOf("-")===-1&&n.indexOf(",")===-1}function I(n,r,e){let t=[],i=n;for(;i<=e;)t.push(i),i+=r;return t}function Kn(n,r,e,t){let i=n.split("/"),o=+i[1];if(l(i[0],"-")){let s=i[0].split("-");return I(d(s[0],t),o,d(s[1],t))}let u=i[0]==="*"?r:d(i[0],t);return I(u,o,e)}function dn(n,r,e){let t=[];return n.split(",").forEach(function(o){if(l(o,"/"))t.push(...Kn(o,r,e));else if(l(o,"-")){let u=o.split("-");+u[0]<=+u[1]?t.push(...I(+u[0],1,+u[1])):(t.push(...I(+u[0],1,e)),t.push(...I(r,1,+u[1])))}else t.push(+o)}),Z(t)}function Gr(n){return ln(n)?n.split(",").map(Number):[0]}function Zr(n){if(n==="*")return[0,59];if(fn(n)){let r=n.split("-");if(+r[0]<=+r[1])return[+r[0],+r[1]]}return null}function Br(n){return n==="*"?59:Math.max(...dn(n,0,59))}function Xr(n){if(Jn(n)&&n!=="0")return+n}function _r(n,r){return n==="*"?"wildcard":r==="date"&&q(n)||r==="weekday"&&Q(n,N.weekday)?"quartz":l(n,",")?"list":l(n,"/")?"step":l(n,"-")?"range":"single"}function ne(n,r,e){return r==="wildcard"||r==="quartz"?null:n.split(",").map(function(i){if(l(i,"/")){let o=i.split("/");return{fires:Kn(i,e.min,e.top,e.numbers),interval:+o[1],kind:"step",startToken:o[0]}}return l(i,"-")?{bounds:i.split("-"),kind:"range"}:{kind:"single",value:i}})}function Yn(n){let r={},e={};M.forEach(function(u){r[u]=_r(n[u],u),e[u]=ne(n[u],r[u],N[u])});let i={analyses:{clockSecond:Xr(n.second),lastMinuteFire:Br(n.minute),minuteSpan:Zr(n.minute),segments:e},pattern:n,shapes:r};return{...i,plan:re(i)}}function re(n){let{analyses:r,pattern:e,shapes:t}=n;if(e.second!=="0"){let i=ee(e,t,r);if(i)return i}return Gn(e,t,r)||Zn(e,t,r)}function ee(n,r,e){let t=te(n,r);return t||(n.hour==="*"&&r.minute==="single"&&n.second!=="*"?{kind:"secondsWithinMinute",singleSecond:r.second==="single"}:r.second==="single"&&ln(n.minute)&&mn(n.hour)?null:{kind:"composeSeconds",rest:Gn(n,r,e,!0)||Zn(n,r,e,!0)})}function te(n,r){return n.minute!=="*"||n.hour!=="*"?null:n.second==="*"?{kind:"everySecond"}:r.second==="single"?{kind:"secondPastMinute"}:{kind:"standaloneSeconds"}}function Gn(n,r,e,t=!1){if(r.minute==="step")return{hours:oe(n,r,e),kind:"minuteFrequency"};if(r.hour==="single"&&e.minuteSpan)return{hour:+n.hour,kind:"minuteSpanInHour",span:e.minuteSpan};let i=ue(n,r);if(i)return i;let o=ie(n,r);if(o)return o;if(n.hour==="*")return se(n,r,t)}function cn(n){let[r,e]=n.split("/"),t=r==="*"?0:+r;return r.indexOf("-")===-1&&24%+e===0&&t<+e}function ie(n,r){return r.hour!=="step"?null:n.minute==="*"?cn(n.hour)?{form:"wildcard",kind:"minuteSpanAcrossHourStep"}:{form:"wildcard",kind:"minutesAcrossHours",times:$(n.hour)}:r.minute==="range"?{form:"range",kind:"minuteSpanAcrossHourStep"}:r.minute==="list"&&cn(n.hour)?{form:"list",kind:"minuteSpanAcrossHourStep"}:null}function oe(n,r,e){if(r.hour==="list")return{kind:"during",times:$(n.hour)};if(r.hour==="range"){let t=n.hour.split("-");return{from:+t[0],kind:"window",last:e.lastMinuteFire,to:+t[1]}}return r.hour==="single"?{from:+n.hour,kind:"window",last:e.lastMinuteFire,to:+n.hour}:r.hour==="step"?cn(n.hour)?{kind:"step"}:{kind:"during",times:$(n.hour)}:{kind:"none"}}function ue(n,r){return mn(n.hour)?n.minute==="*"?{form:"wildcard",kind:"minutesAcrossHours",times:$(n.hour)}:r.minute==="range"||r.minute==="list"&&l(n.minute,"-")&&!l(n.minute,"/")?{form:r.minute==="range"?"range":"list",kind:"minutesAcrossHours",times:$(n.hour)}:null:null}function se(n,r,e){if(r.minute==="range")return{kind:"rangeOfMinutes"};if(r.minute==="list")return{kind:"multipleMinutes"};if(n.minute==="*")return{kind:"everyMinute"};if(n.minute!=="0"||e)return{kind:"singleMinute"}}function Zn(n,r,e,t=!1){let i=t&&n.minute==="0";return r.hour==="range"&&!i?ae(n,r,e):r.hour==="step"&&n.minute==="0"&&!t?{kind:"hourStep"}:n.hour==="*"&&!i?{kind:"everyHour"}:fe(n,e,i)}function ae(n,r,e){let t=n.hour.split("-"),i="lead";return n.minute==="*"?i="wildcard":r.minute==="range"&&(i="range"),{boundMinute:r.minute==="range"||r.minute==="list"?null:e.lastMinuteFire,from:+t[0],kind:"hourRange",last:e.lastMinuteFire,minuteForm:i,to:+t[1]}}function fe(n,r,e=!1){let t=dn(n.hour,0,23),i=Gr(n.minute);if(!e&&t.length*i.length>U)return{fold:i.length===1,kind:"compactClockTimes",minute:i[0]};let o=[];return t.forEach(function(s){i.forEach(function(O){o.push({hour:s,minute:O,second:r.clockSecond})})}),{kind:"clockTimes",times:o}}function $(n){let r=dn(n,0,23);return r.length<=U?{fires:r,kind:"fires"}:{kind:"segments"}}function Bn(n,r){let e=qn(n,r);return Un(e,r.quartz),jn(e),Hn(e),Dn(e)}function v(n){return n=""+n,n.length<2?"0"+n:n}function Xn(n,r,e){return e.short?n:r[n]||n}function gn(n,{sep:r,pad:e,lean:t}){let i=e?v(n.hour):""+n.hour;return t&&!n.minute&&!n.second?i:i+r+v(n.minute)+(n.second?r+v(n.second):"")}var hn={gb:{am:"am",closeUp:!0,dayFirst:!0,midday:"midday",midnight:"midnight",ordinals:!1,pm:"pm",sep:".",serialComma:!1,through:" to "},us:{am:"a.m.",closeUp:!1,dayFirst:!1,midday:"noon",midnight:"midnight",ordinals:!1,pm:"p.m.",sep:":",serialComma:!0,through:" through ",untilWindow:!0},house:{am:"AM",closeUp:!1,dayFirst:!1,midday:"noon",midnight:"midnight",ordinals:!0,pm:"PM",sep:":",serialComma:!0,through:" - "}};function _n(n){return typeof n=="object"&&n!==null?{...hn.us,untilWindow:!1,...n}:hn[n==="uk"?"gb":n]||hn.us}var le=["zero","one","two","three","four","five","six","seven","eight","nine","ten"],pn=["th","st","nd","rd"],me=[null,["January","Jan"],["February","Feb"],["March","Mar"],["April","Apr"],["May","May"],["June","Jun"],["July","Jul"],["August","Aug"],["September","Sep"],["October","Oct"],["November","Nov"],["December","Dec"]],C=[["Sunday","Sun"],["Monday","Mon"],["Tuesday","Tue"],["Wednesday","Wed"],["Thursday","Thu"],["Friday","Fri"],["Saturday","Sat"]],ce={SUN:C[0],MON:C[1],TUE:C[2],WED:C[3],THU:C[4],FRI:C[5],SAT:C[6]},de=[null,"first","second","third","fourth","fifth"];function ge(n){return n=n||{},{ampm:typeof n.ampm=="boolean"?n.ampm:!0,lenient:!!n.lenient,quartz:!!n.quartz,seconds:!!n.seconds,short:!!n.short,style:_n(n.dialect),years:!!n.years}}function he(n,r){let e=Se(n,r);if(e!==null)return rr(e,n,r);let t=nt(n,r)??er(n,n.plan,r),i=G(n,r)?ct(n,r):"";return rr(i+t,n,r)}function er(n,r,e){let t=rt[r.kind];return t(n,r,e)}function bn(n){return n==="step"||n==="range"||n==="list"}function pe(n,r){if(!r.style.untilWindow||r.short||n.plan.kind!=="composeSeconds"||n.plan.rest.kind==="clockTimes"||G(n,r))return!1;let{shapes:e}=n;return bn(e.second)&&bn(e.minute)&&bn(e.hour)}function be(n,r){let e=Nn(n);if(e)return _(e,r);if(n.shapes.hour==="range"){let t=f(n,"hour").find(function(o){return o.kind==="range"});return A({continuous:!1,from:+t.bounds[0],throughMinute:0,to:+t.bounds[1]},r)}return"during the "+R(n,{minute:0,second:null},!1,r)+" hours"}function ye(n,r){return n.shapes.minute==="step"?nn(k(n,"minute"),"minute","hour",r):n.shapes.minute==="range"?K(n.pattern.minute,r):W(f(n,"minute"),"minute","hour",r)??w(T(f(n,"minute"),r),"minute","hour",r)}function Se(n,r){if(!pe(n,r))return null;let e=be(n,r),t=ye(n,r),i=P(n,"minute",r),o=e+", "+t+", and within each of those minutes, "+i,u=a(n,r).trim();return u?u+", "+o:o}function ke(n,r,e){return"every second"+a(n,e)}function Oe(n,r,e){return D(n,e)+a(n,e)}function Ne(n,r,e){let t=n.pattern.second;return g(t,e)+" "+y(t,"second")+" past the minute, every minute"+a(n,e)}function ze(n,r,e){let t=n.pattern.minute,i=g(t,e),o=y(t,"minute");if(r.singleSecond){let u=n.pattern.second;return i+" "+o+" and "+g(u,e)+" "+y(u,"second")+" past the hour, every hour"+a(n,e)}return D(n,e)+", "+i+" "+o+" past the hour, every hour"+a(n,e)}function we(n,r,e){if(!(r.rest.kind==="clockTimes"||r.rest.kind==="compactClockTimes")||n.shapes.minute!=="single")return null;let i=+n.pattern.minute;return wn(n,i,e)??vn(n,i,e)}function ve(n,r,e){return+r.times[0].minute==0&&n.shapes.minute==="single"?D(n,e)+" for one minute at "+xe(n,r,e):D(n,e)+" of "+Pe(n,r,e)}function Ce(n,r,e){let t=we(n,r,e);return t!==null?t:r.rest.kind==="clockTimes"&&(n.shapes.second==="wildcard"||n.shapes.second==="step")?ve(n,r.rest,e):n.shapes.second==="wildcard"&&r.rest.kind==="minuteFrequency"&&r.rest.hours.kind==="none"&&n.pattern.minute==="*/2"?"every second of every other minute"+a(n,e):(r.rest.kind==="compactClockTimes"&&n.analyses.clockSecond?"":D(n,e)+", ")+er(n,r.rest,e)}function xe(n,r,e){let t=r.times.map(function(u){return m({hour:u.hour,minute:0},e)}),i=en(n,Pn,e);return p(t,e)+(i&&", "+i)}function Pe(n,r,e){let t=r.times.map(function(u){return m({hour:u.hour,minute:u.minute,second:u.second,explicit:!0},e)}),i=en(n,Pn,e);return p(t,e)+(i&&", "+i)}function D(n,r){return P(n,"minute",r)}function P(n,r,e){let t=n.pattern.second,i=n.shapes.second;if(t==="*")return"every second";if(i==="step")return nn(k(n,"second"),"second",r,e);if(i==="range"){let o=t.split("-"),u=rn();return"every second from "+u(o[0])+h(e)+u(o[1])+" past the "+r}return i==="single"?"at "+g(t,e)+" "+y(t,"second")+" past the "+r:W(f(n,"second"),"second",r,e)??w(T(f(n,"second"),e),"second",r,e)}function Te(n,r,e){return"every minute"+a(n,e)}function Me(n,r,e){let t=n.pattern.minute;return g(t,e)+" "+y(t,"minute")+" past the hour, every hour"+a(n,e)}function Fe(n,r,e){return K(n.pattern.minute,e)+a(n,e)}function We(n,r,e){return(W(f(n,"minute"),"minute","hour",e)??w(T(f(n,"minute"),e),"minute","hour",e))+a(n,e)}function He(n,r,e){let t=nn(k(n,"minute"),"minute","hour",e);if(r.hours.kind==="during"){let i=Y(n,e);t+=i?", "+i:" during the "+J(n,r.hours.times,!1,e)+" hours"}else if(r.hours.kind==="window")t+=" "+A({continuous:!1,from:r.hours.from,throughMinute:r.hours.last,to:r.hours.to},e);else if(r.hours.kind==="step"){let i=Cn(t);t=i+(i===t?" ":", ")+On(k(n,"hour"),e)}return t+a(n,e)}function Le(n,r,e){return n.pattern.minute==="*"?"every minute of the "+m({hour:r.hour,minute:0},e)+" hour"+a(n,e):"every minute from "+m({hour:r.hour,minute:r.span[0]},e)+h(e)+m({hour:r.hour,minute:r.span[1]},e)+a(n,e)}function Ee(n,r,e){let t=Y(n,e);if(r.form==="wildcard")return t!==null?"every minute, "+t+a(n,e):"every minute during the "+J(n,r.times,!1,e)+" hours"+a(n,e);if(r.form==="range"){let u=K(n.pattern.minute,e);return t!==null?u+", "+t+a(n,e):ut(r.times)?u+", at "+J(n,r.times,!0,e)+a(n,e):u+" during the "+J(n,r.times,!1,e)+" hours"+a(n,e)}let i=W(f(n,"minute"),"minute","hour",e)??w(T(f(n,"minute"),e),"minute","hour",e);if(t!==null)return i+", "+t+a(n,e);let o=J(n,r.times,!0,e);return i+", at "+o+a(n,e)}var tr={2:"other",3:"third",4:"fourth",6:"sixth",8:"eighth",12:"twelfth"},je={2:"other",3:"third",4:"fourth",5:"fifth",6:"sixth",7:"seventh",8:"eighth",9:"ninth",10:"tenth",11:"eleventh",12:"twelfth",15:"fifteenth",20:"twentieth",30:"thirtieth"};function De(n){return je[n]??b(n)}function Re(n,r){let e=" during every "+De(n.interval)+" minute";return X({...n,cycle:60},{bare:()=>e,offset:()=>e+" from "+g(n.start,r)+" "+y(n.start,"minute")+" past the hour",bounded:()=>{let t=rn();return e+" from "+t(n.start)+h(r)+t(n.last)+" "+y(n.last,"minute")+" past the hour"}})}function ir(n){if(n.shapes.minute==="step"){let e=k(n,"minute"),t=e.startToken==="*"?0:+e.startToken;return{interval:e.interval,last:e.fires[e.fires.length-1],start:t}}let r=V(f(n,"minute"));return r&&B(r)}function On(n,r){let e="during every "+tr[n.interval]+" hour",t=n.startToken==="*"?0:+n.startToken;return t===0?e:e+" starting at "+m({hour:t,minute:0},r)}function Ae(n,r,e){let t=k(n,"hour");if(r.form==="wildcard")return"every minute "+On(t,e)+a(n,e);let i=Cn(r.form==="list"?W(f(n,"minute"),"minute","hour",e)??w(T(f(n,"minute"),e),"minute","hour",e):K(n.pattern.minute,e)),o=Y(n,e);return i+", "+(o??lr(t,e))+a(n,e)}function K(n,r){let e=n.split("-"),t=rn();return"every minute from "+t(e[0])+h(r)+t(e[1])+" past the hour"}function Ue(n,r,e){return"every hour"+a(n,e)}function qe(n,r,e){let t=Ie(Ve(r),e);return r.minuteForm==="wildcard"?"every minute "+t+a(n,e):r.minuteForm==="range"?K(n.pattern.minute,e)+", "+t+a(n,e):or(n,e)+" "+t+a(n,e)}function or(n,r){return n.pattern.minute==="0"?"every hour":W(f(n,"minute"),"minute","hour",r)??w(T(f(n,"minute"),r),"minute","hour",r)}function Qe(n,r,e){let t=Y(n,e);return t!==null?t+a(n,e):lr(k(n,"hour"),e)+a(n,e)}function Ve(n){let r=n.minuteForm==="wildcard",e=r?n.boundMinute??0:0;return{from:n.from,closeMinute:e,to:n.to,continuous:r}}function A(n,r){let{from:e,to:t,throughMinute:i,continuous:o}=n,u="from "+m({hour:e,minute:0},r);return r.style.untilWindow&&!r.short&&e!==t?o?u+" until "+m({hour:(t+1)%24,minute:0},r):u+h(r)+m({hour:t,minute:0},r):u+h(r)+m({hour:t,minute:i},r)}function Ie(n,r){return A({continuous:n.continuous,from:n.from,throughMinute:n.closeMinute,to:n.to},r)}function $e(n,r,e){if(n.shapes.minute==="single"){let o=+n.pattern.minute,u=wn(n,o,e)??vn(n,o,e);if(u!==null)return u}let t=xn(r.times),i=r.times.map(function(u){return m({hour:u.hour,minute:u.minute,second:u.second,plain:t},e)});return gr(n,e)+"at "+p(i,e)+ur(n,e)}function ur(n,r){return G(n,r)?pr(n,r):""}function Je(n,r,e){if(r.fold){let u=wn(n,+r.minute,e)??vn(n,+r.minute,e);if(u!==null)return u;if(f(n,"hour").some(function(S){return S.kind==="range"})&&!n.analyses.clockSecond)return Ke(n,r,e)+a(n,e);let c={minute:r.minute,second:n.analyses.clockSecond};return gr(n,e)+"at "+R(n,c,!0,e)+ur(n,e)}let t=W(f(n,"minute"),"minute","hour",e)??w(T(f(n,"minute"),e),"minute","hour",e),i=Y(n,e),o=i?Cn(t)+", "+i+a(n,e):t+", at "+R(n,{minute:0,second:null},!0,e)+a(n,e);return n.analyses.clockSecond?D(n,e)+", "+o:o}function Ke(n,r,e){let t=r.minute,i=[],o=sr(n).map(function(c){return m({hour:c,minute:t},e)});return f(n,"hour").forEach(function(c){c.kind==="range"&&i.push(A({continuous:!1,from:+c.bounds[0],throughMinute:t,to:+c.bounds[1]},e))}),or(n,e)+" "+p(i,e)+ar(o,e)}function sr(n){let r=[];return f(n,"hour").forEach(function(t){t.kind==="step"?r.push(...t.fires):t.kind!=="range"&&r.push(+t.value)}),r}function ar(n,r){return n.length?" and at "+p(n,r):""}function j(n){return n==="*"||n.startsWith("*/")&&n.indexOf("-")===-1}function Ye(n,r){let{second:e,minute:t}=n.pattern;return j(e)?{secondLead:!0,text:P(n,"minute",r)}:e==="0"&&j(t)?{secondLead:!1,text:t==="*"?"every minute":nn(k(n,"minute"),"minute","hour",r)}:null}function Ge(n,r){let e=n.pattern.minute;if(e==="*")return"";if(e==="*/2")return" of every other minute";let t=ir(n);if(t)return Re(t,r);let i=f(n,"minute");if(n.shapes.minute==="single")return" during minute :"+v(e);if(n.shapes.minute==="range"){let u=e.split("-");return" during minutes :"+v(u[0])+h(r)+":"+v(u[1])}let o=T(i,r).map(function(s){return":"+v(s)});return" during minutes "+p(o,r)}function Ze(n,r){let e=n.pattern.hour;if(e==="*")return n.pattern.minute!=="*"&&!j(n.pattern.minute)&&!ir(n)?" of every hour":"";if(j(e))return e==="*/2"?" of every other hour":"";if(n.shapes.hour==="single"){let t=+e;return n.shapes.minute==="step"?" from "+m({hour:t,minute:0},r)+" until "+m({hour:(t+1)%24,minute:0},r):n.pattern.minute!=="*"&&!j(n.pattern.minute)?" at "+m({hour:t,minute:0},r):" of the "+m({hour:t,minute:0},r)+" hour"}if(n.shapes.hour==="range"){let t=e.split("-");return" "+A({continuous:n.pattern.minute==="*",from:+t[0],throughMinute:0,to:+t[1]},r)}return" during the "+R(n,{minute:0,second:null},!1,r)+" hours"}function Be(n){if(n.shapes.hour!=="step")return!0;let r=k(n,"hour");return n.pattern.hour==="*/2"||r.startToken.indexOf("-")!==-1}function Xe(n){if(n.shapes.minute!=="list")return!1;let r=V(f(n,"minute"));return r!==null&&B(r)!==null}function _e(n,r){let{minute:e,hour:t}=n.pattern,i=j(e)&&e!=="*";return Be(n)?r.secondLead?i?e==="*/2"?n.shapes.hour!=="range":n.pattern.hour==="*":Xe(n)?n.pattern.hour==="*":!(n.shapes.minute==="list"&&n.shapes.hour==="list"):t==="*/2"?!0:n.shapes.hour==="single"&&e==="*/2":!1}function nt(n,r){if(!r.style.untilWindow||r.short||n.pattern.minute==="*"&&n.pattern.hour==="*")return null;let e=Ye(n,r);if(!e||!_e(n,e))return null;let t=e.secondLead?Ge(n,r):"";return e.text+t+Ze(n,r)+a(n,r)}var rt={clockTimes:$e,compactClockTimes:Je,composeSeconds:Ce,everyHour:Ue,everyMinute:Te,everySecond:ke,hourRange:qe,hourStep:Qe,minuteFrequency:He,minuteSpanAcrossHourStep:Ae,minuteSpanInHour:Le,minutesAcrossHours:Ee,multipleMinutes:We,rangeOfMinutes:Fe,secondPastMinute:Ne,secondsWithinMinute:ze,singleMinute:Me,standaloneSeconds:Oe};function fr(n,r){let{interval:e,start:t,last:i,cycle:o,unit:u,anchor:s}=n,c="every "+g(e,r)+" "+u+"s";return X({start:t,interval:e,last:i,cycle:o},{bare:()=>c,offset:()=>c+" from "+g(t,r)+" "+y(t,u)+" past the "+s,bounded:()=>{let O=rn();return c+" from "+O(t)+h(r)+O(i)+" "+y(i,u)+" past the "+s}})}function W(n,r,e,t){let i=V(n),o=i&&B(i);return o?fr({...o,cycle:60,unit:r,anchor:e},t):null}function nn(n,r,e,t){if(n.startToken.indexOf("-")!==-1)return w(nr(n.fires,t),r,e,t);let i=n.startToken==="*"?0:+n.startToken;return i!==0&&n.fires.length<=3?w(nr(n.fires,t),r,e,t):fr({interval:n.interval,start:i,last:n.fires[n.fires.length-1],cycle:60,unit:r,anchor:e},t)}function lr(n,r){if(n.startToken.indexOf("-")!==-1)return"at "+yn(n.fires,r);let e=n.startToken==="*"?0:+n.startToken,t=n.interval;return e===0?"every "+g(t,r)+" hours":n.fires.length<=3?"at "+yn(n.fires,r):"every "+g(t,r)+" hours from "+m({hour:e,minute:0},r)}function _(n,r){let{start:e,interval:t,last:i}=n,o="every "+g(t,r)+" hours";return X({start:e,interval:t,last:i,cycle:24},{bare:()=>o,offset:()=>o+" from "+m({hour:e,minute:0},r),bounded:()=>o+" from "+m({hour:e,minute:0},r)+h(r)+m({hour:i,minute:0},r)})}function Y(n,r){let e=Nn(n);return!e||an(e)?null:_(e,r)}function Nn(n){let r=f(n,"hour");if(r.length===1&&r[0].kind==="step"){let t=r[0];if(t.fires.length<2)return null;let i=t.startToken==="*"?0:+t.startToken.split("-")[0];return{interval:t.interval,last:t.fires[t.fires.length-1],start:i}}let e=V(r);return e&&$n(e)}function zn(n){return n.pattern.second==="*"||n.shapes.second==="step"}function mr(n,r,e){if(r===0)return zn(n)?P(n,"minute",e)+" for one minute":P(n,"hour",e);let t=g(r,e)+" "+y(r,"minute")+" past the hour";return n.pattern.second==="0"?t:P(n,"minute",e)+", "+t}function wn(n,r,e){let t=Nn(n);if(!t)return null;let i=(t.last-t.start)/t.interval+1;if(n.pattern.second==="0"&&i<=U&&an(t))return null;let o=r===0&&zn(n)&&et(n);return o?P(n,"minute",e)+" for one minute "+On(o,e)+a(n,e):r===0&&n.pattern.second==="0"?_(t,e)+a(n,e):mr(n,r,e)+", "+_(t,e)+a(n,e)}function et(n){let r=f(n,"hour"),e=r.length===1&&r[0];return!e||e.kind!=="step"||e.startToken.indexOf("-")!==-1||!(e.interval in tr)?null:e}function tt(n){return f(n,"hour").some(function(e){return e.kind==="range"})}function it(n,r){let e=[],t=sr(n);f(n,"hour").forEach(function(s){s.kind==="range"&&e.push(A({continuous:!1,from:+s.bounds[0],throughMinute:0,to:+s.bounds[1]},r))});let i="every hour "+p(e,r),o=t.map(function(s){return m({hour:s,minute:0},r)});return i+ar(o,r)}function vn(n,r,e){return r!==0||!tt(n)||n.pattern.second==="0"?null:zn(n)?P(n,"minute",e)+" for one minute during the "+R(n,{minute:0,second:null},!1,e)+" hours"+a(n,e):mr(n,r,e)+", "+it(n,e)+a(n,e)}function rn(){return function(r){return""+r}}function cr(n,r){return n>1?function(t){return""+t}:function(t){return g(t,r)}}function nr(n,r){return n.map(cr(n.length,r))}function T(n,r){let e=n.reduce(function(o,u){return u.kind==="range"?o+1:o+(u.kind==="step"?u.fires.length:1)},0),t=cr(e,r);return n.flatMap(function(o){return o.kind==="range"?[t(o.bounds[0])+h(r)+t(o.bounds[1])]:o.kind==="step"?o.fires.map(t):[t(o.value)]})}function w(n,r,e,t){return"at "+p(n,t)+" "+r+"s past the "+e}function Cn(n){return n.replace(/ past the hour$/,"")}function ot(n,r,e){return(+n==0||+n==12)&&+r==0&&!(typeof e=="number"&&e>0)}function xn(n){let r=n.filter(function(t){return ot(t.hour,t.minute,t.second)});return r.length>0&&r.length<n.length}function yn(n,r){let e=xn(n.map(function(o){return{hour:o,minute:0}})),t=n.map(function(o){return m({hour:o,minute:0,plain:e},r)});return p(t,r)}function ut(n){return n.kind==="fires"&&n.fires.length===1}function J(n,r,e,t){return r.kind==="fires"?yn(r.fires,t):R(n,{minute:0,second:null},e,t)}function st(n){return n.kind==="range"?n.bounds:n.kind==="step"?n.fires:[n.value]}function R(n,r,e,t){let{minute:i,second:o}=r,u=f(n,"hour"),s=xn(u.flatMap(function(S){return st(S).map(function(un){return{hour:+un,minute:i,second:o}})})),c=[];return u.forEach(function(S){S.kind==="step"?c.push(...S.fires.map(function(un){return m({hour:un,minute:i,second:o,plain:s},t)})):S.kind==="range"?c.push(m({hour:S.bounds[0],minute:i,second:o,plain:s},t)+h(t)+m({hour:S.bounds[1],minute:i,second:o,plain:s},t)):c.push(m({hour:S.value,minute:i,second:o,plain:s},t))}),p(at(c,u,e),t)}function at(n,r,e){let t=r.some(function(o){return o.kind==="range"});return!e||!t?n:n.map(function(o,u){return u===0?o:"at "+o})}function dr(n,r,e){if(n.length<=1)return n.join("");if(n.length===2)return n[0]+r+n[1];let t=e.style.serialComma?","+r:r;return n.slice(0,-1).join(", ")+t+n[n.length-1]}function p(n,r){return dr(n," and ",r)}function ft(n,r){return dr(n," or ",r)}var lt={all:"",month:"in ",recurringWeekday:!0,stepDate:"on ",weekday:"on "},Pn={all:"every day",month:"every day in ",recurringWeekday:!1,stepDate:"",weekday:"every "};function a(n,r){if(G(n,r))return pr(n,r);let e=en(n,lt,r);return e&&" "+e}function gr(n,r){return G(n,r)?"":en(n,Pn,r)+" "}function en(n,r,e){let t=n.pattern;if(t.date!=="*"&&t.weekday!=="*")return pt(n,e);if(t.date!=="*")return mt(n,r,e);if(t.weekday!=="*"){let i=Tn(t.weekday,e);return i?Sn(i,n,e):r.weekday+Or(n,r.recurringWeekday,e)+yr(n,e)}return t.month!=="*"?r.month+z(n,e):r.all}function mt(n,r,e){let t=n.pattern,i=tn(t.date,e);return i?Sn(i,n,e):E(t.date)?Sn(r.stepDate+Sr(t.date),n,e):t.month!=="*"&&!hr(n)?"on the "+kn(n,e)+yr(n,e):t.month!=="*"?"on "+br(n,e):"on the "+kn(n,e)}function hr(n){return!kr(n.pattern.month)&&f(n,"month").every(function(e){return e.kind!=="range"})}function G(n,r){return n.pattern.date!=="*"&&n.pattern.weekday!=="*"&&!!r.style.untilWindow&&!r.short}function pr(n,r){let e=[...dt(n,r),...gt(n,r)];return" whenever the day is "+ft(e,r)}function ct(n,r){return n.pattern.month==="*"?"":"in "+z(n,r)+" "}function dt(n,r){let e=n.pattern.date,t=tn(e,r);if(t)return[t.replace(/^on /,"")];let i=ht(e);if(i)return[i];let o=[];return f(n,"date").forEach(function(s){s.kind==="range"?o.push("from the "+b(s.bounds[0])+h(r)+"the "+b(s.bounds[1])):s.kind==="step"?s.fires.forEach(function(O){o.push("the "+b(O))}):o.push("the "+b(s.value))}),o}function gt(n,r){let e=n.pattern.weekday,t=Tn(e,r);if(t)return[t.replace(/^on /,"")];let i=[];return f(n,"weekday").forEach(function(u){u.kind==="range"&&u.bounds[0]==="1"&&u.bounds[1]==="5"?i.push("a weekday"):u.kind==="range"?i.push("a "+x(u.bounds[0],r)+h(r)+"a "+x(u.bounds[1],r)):u.kind==="step"?u.fires.forEach(function(c){i.push("a "+x(c,r))}):i.push("a "+x(u.value,r))}),i}function ht(n){if(!E(n))return null;let[r,e]=n.split("/");return+e!=2?null:r==="*"||r==="1"?"an odd-numbered day":r==="2"?"an even-numbered day":null}function pt(n,r){let e=n.pattern,t=Tn(e.weekday,r)||"on "+Or(n,!1,r);return e.month!=="*"&&hr(n)&&!tn(e.date,r)&&!E(e.date)?"on "+br(n,r)+" or "+t+" in "+z(n,r):bt(n,r)+" or "+t+yt(n,r)}function bt(n,r){let e=n.pattern,t=tn(e.date,r);return t||(E(e.date)?Sr(e.date):"on the "+kn(n,r))}function yt(n,r){return n.pattern.month==="*"?"":", in "+z(n,r)}function tn(n,r){if(n==="L")return"on the last day of the month";if(n==="LW"||n==="WL")return"on the last weekday of the month";let e=/^L-(\d{1,2})$/.exec(n);if(e)return g(+e[1],r)+" "+y(e[1],"day")+" before the last day of the month";let t=/^(\d{1,2})W$|^W(\d{1,2})$/.exec(n);if(t)return"on the weekday nearest the "+b(t[1]||t[2])}function Tn(n,r){let e=n.split("#");if(e.length===2)return"on the "+de[+e[1]]+" "+x(e[0],r)+" of the month";if(/L$/.test(n))return"on the last "+x(n.slice(0,-1),r)+" of the month"}function br(n,r){let e=z(n,r),t=on(f(n,"date"),r.style.ordinals?b:St,r);return r.style.dayFirst&&n.shapes.date==="single"&&n.shapes.month!=="single"?"the "+b(n.pattern.date)+" of "+e:r.style.dayFirst?t+" "+e:e+" "+t}function St(n){return""+n}function yr(n,r){return n.pattern.month==="*"?"":" in "+z(n,r)}function Sn(n,r,e){if(r.pattern.month==="*")return n;let t=n.indexOf(" of the month")!==-1;return t&&r.shapes.month==="range"?n.replace(" of the month"," of each month")+" from "+z(r,e):t&&(r.shapes.month==="single"||r.shapes.month==="step")?n.replace(" of the month","")+" in "+z(r,e):n+" in "+z(r,e)}function Sr(n){let r=n.split("/"),e=+r[1],t=r[0],o=(e===2?"every other":"every "+b(e))+" day of the month";return t!=="*"&&t!=="1"&&(o+=" from the "+b(t)),o}function kn(n,r){return on(f(n,"date"),b,r)}function z(n,r){let e=kr(n.pattern.month);return e||on(f(n,"month"),function(i){return wt(i,r)},r)}function kr(n){if(!E(n))return null;let[r,e]=n.split("/");return+e!=2?null:r==="*"||r==="1"?"every odd-numbered month":r==="2"?"every even-numbered month":null}function Or(n,r,e){let t=In(f(n,"weekday")),i=t.some(function(s){return s.kind==="range"});return on(t,r&&!i?function(s){return kt(s,e)}:function(s){return x(s,e)},e)}function kt(n,r){let e=x(n,r);return r.short?e:e+"s"}function on(n,r,e){let t=[];return n.forEach(function(o){o.kind==="step"?t.push(...o.fires.map(r)):o.kind==="range"?t.push(o.bounds.map(r).join(h(e))):t.push(r(o.value))}),p(t,e)}function rr(n,r,e){let t=r.pattern.year;if(t==="*")return n;if(t.indexOf("/")!==-1)return n+", "+Nt(t,e);let i=Ot(t,e);if(t.indexOf("-")===-1&&t.indexOf(",")===-1&&r.pattern.date!=="*"&&n.indexOf(" at ")!==-1){let o=e.style.dayFirst?" ":", ";return n.replace(" at ",o+i+" at ")}return n+" in "+i}function Ot(n,r){return n.indexOf(",")!==-1?p(n.split(","),r):n.indexOf("-")!==-1?n.split("-").join(h(r)):n}function Nt(n,r){let e=n.split("/"),t=+e[1],i=e[0];if(t<=1)return"every year";let o=t===2?"every other year":"every "+g(t,r)+" years";return i!=="*"&&i!=="0"&&(o+=" from "+i),o}function m(n,r){let{hour:e,minute:t,plain:i,explicit:o}=n,u=typeof n.second=="number"&&n.second>0?n.second:0;return r.ampm?zt({hour:e,minute:t,second:u,plain:i,explicit:o},r):gn({hour:e,minute:t,second:u},{pad:!0,sep:r.style.sep})}function zt(n,r){let{hour:e,minute:t,second:i,plain:o,explicit:u}=n,s=r.style;if(!o&&!u&&+t==0&&!i){if(+e==0)return s.midnight;if(+e==12)return s.midday}return gn({hour:e%12||12,minute:t,second:i},{lean:!u,sep:s.sep})+(s.closeUp?"":" ")+(e<12?s.am:s.pm)}function g(n,r){return Xn(n,le,r)}function y(n,r){return+n==1?r:r+"s"}function h(n){return n.short?"-":n.style.through}function b(n){let r=Math.abs(n),e=pn[r];return e||(r=(r%100-20)%10,e=pn[r]||pn[0]),n+e}function wt(n,r){let e=me[+n];return e&&e[r.short?1:0]}function x(n,r){let e=n===7||n==="7"?0:n,t=C[e]||ce[e];return t&&t[r.short?1:0]}var vt={describe:he,fallback:"an unrecognizable cron pattern",options:ge,reboot:"at system startup",sentence:n=>"Runs "+n+(n.endsWith(".")?"":".")},Nr=vt;/**
2
2
  * @license MIT, Copyright (c) 2026 Andrew Brož
3
- */function Fn(n,r){let e=r&&r.lang||Or,t=e.options(r);if(!t.lenient)return Nr(zr(n,e,t),e,r);try{return Nr(zr(n,e,t),e,r)}catch{return e.fallback}}function Nr(n,r,e){return e&&e.sentence?r.sentence(n):n}function zr(n,r,e){if(typeof n=="string"&&n.trim().toLowerCase()==="@reboot")return r.reboot;let t=Yn(Bn(n,e)),i=r.plan?r.plan(t,t.plan):t.plan;return r.describe({...t,plan:i},e)}function Nt(n,r){return Fn(n,{...r,sentence:!0})}function zt(n,r){return Fn(n,{...r,sentence:!1})}var wt=Object.assign(Fn,{sentence:Nt,fragment:zt}),Tn=wt;typeof globalThis<"u"&&Object.assign(globalThis,{cronli5:Tn});var yi=Tn;})();
3
+ */function Mn(n,r){let e=r&&r.lang||Nr,t=e.options(r);if(!t.lenient)return zr(wr(n,e,t),e,r);try{return zr(wr(n,e,t),e,r)}catch{return e.fallback}}function zr(n,r,e){return e&&e.sentence?r.sentence(n):n}function wr(n,r,e){if(typeof n=="string"&&n.trim().toLowerCase()==="@reboot")return r.reboot;let t=Yn(Bn(n,e)),i=r.plan?r.plan(t,t.plan):t.plan;return r.describe({...t,plan:i},e)}function Ct(n,r){return Mn(n,{...r,sentence:!0})}function xt(n,r){return Mn(n,{...r,sentence:!1})}var Pt=Object.assign(Mn,{sentence:Ct,fragment:xt}),Fn=Pt;typeof globalThis<"u"&&Object.assign(globalThis,{cronli5:Fn});var Oi=Fn;})();
package/dist/cronli5.cjs CHANGED
@@ -1340,6 +1340,45 @@ var stepOrdinals = {
1340
1340
  8: "eighth",
1341
1341
  12: "twelfth"
1342
1342
  };
1343
+ var spelledOrdinals = {
1344
+ 2: "other",
1345
+ 3: "third",
1346
+ 4: "fourth",
1347
+ 5: "fifth",
1348
+ 6: "sixth",
1349
+ 7: "seventh",
1350
+ 8: "eighth",
1351
+ 9: "ninth",
1352
+ 10: "tenth",
1353
+ 11: "eleventh",
1354
+ 12: "twelfth",
1355
+ 15: "fifteenth",
1356
+ 20: "twentieth",
1357
+ 30: "thirtieth"
1358
+ };
1359
+ function ordinalWord(interval) {
1360
+ return spelledOrdinals[interval] ?? getOrdinal(interval);
1361
+ }
1362
+ function minuteStrideConfinement(stride, opts) {
1363
+ const base = " during every " + ordinalWord(stride.interval) + " minute";
1364
+ return renderStride({ ...stride, cycle: 60 }, {
1365
+ bare: () => base,
1366
+ offset: () => base + " from " + getNumber(stride.start, opts) + " " + pluralize(stride.start, "minute") + " past the hour",
1367
+ bounded: () => {
1368
+ const num = seriesNumber();
1369
+ return base + " from " + num(stride.start) + through(opts) + num(stride.last) + " " + pluralize(stride.last, "minute") + " past the hour";
1370
+ }
1371
+ });
1372
+ }
1373
+ function minuteStride(schedule) {
1374
+ if (schedule.shapes.minute === "step") {
1375
+ const segment = stepSegment(schedule, "minute");
1376
+ const start = segment.startToken === "*" ? 0 : +segment.startToken;
1377
+ return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
1378
+ }
1379
+ const values = singleValues(segmentsOf(schedule, "minute"));
1380
+ return values && arithmeticStep(values);
1381
+ }
1343
1382
  function everyNthHour(segment, opts) {
1344
1383
  const base = "during every " + stepOrdinals[segment.interval] + " hour";
1345
1384
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -1545,9 +1584,13 @@ function minuteConfinement(schedule, opts) {
1545
1584
  if (minute === "*") {
1546
1585
  return "";
1547
1586
  }
1548
- if (isCadenceField(minute)) {
1587
+ if (minute === "*/2") {
1549
1588
  return " of every other minute";
1550
1589
  }
1590
+ const stride = minuteStride(schedule);
1591
+ if (stride) {
1592
+ return minuteStrideConfinement(stride, opts);
1593
+ }
1551
1594
  const segments = segmentsOf(schedule, "minute");
1552
1595
  if (schedule.shapes.minute === "single") {
1553
1596
  return " during minute :" + pad(minute);
@@ -1564,7 +1607,7 @@ function minuteConfinement(schedule, opts) {
1564
1607
  function hourConfinement(schedule, opts) {
1565
1608
  const hour = schedule.pattern.hour;
1566
1609
  if (hour === "*") {
1567
- const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute);
1610
+ const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute) && !minuteStride(schedule);
1568
1611
  return minutePinned ? " of every hour" : "";
1569
1612
  }
1570
1613
  if (isCadenceField(hour)) {
@@ -1613,9 +1656,12 @@ function confinementEligible(schedule, lead) {
1613
1656
  }
1614
1657
  if (lead.secondLead) {
1615
1658
  if (minuteStep) {
1616
- return minute === "*/2" && schedule.shapes.hour !== "range";
1659
+ return minute === "*/2" ? schedule.shapes.hour !== "range" : schedule.pattern.hour === "*";
1660
+ }
1661
+ if (isMinuteStride(schedule)) {
1662
+ return schedule.pattern.hour === "*";
1617
1663
  }
1618
- if (isMinuteStride(schedule) || schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1664
+ if (schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1619
1665
  return false;
1620
1666
  }
1621
1667
  return true;
package/dist/cronli5.js CHANGED
@@ -1314,6 +1314,45 @@ var stepOrdinals = {
1314
1314
  8: "eighth",
1315
1315
  12: "twelfth"
1316
1316
  };
1317
+ var spelledOrdinals = {
1318
+ 2: "other",
1319
+ 3: "third",
1320
+ 4: "fourth",
1321
+ 5: "fifth",
1322
+ 6: "sixth",
1323
+ 7: "seventh",
1324
+ 8: "eighth",
1325
+ 9: "ninth",
1326
+ 10: "tenth",
1327
+ 11: "eleventh",
1328
+ 12: "twelfth",
1329
+ 15: "fifteenth",
1330
+ 20: "twentieth",
1331
+ 30: "thirtieth"
1332
+ };
1333
+ function ordinalWord(interval) {
1334
+ return spelledOrdinals[interval] ?? getOrdinal(interval);
1335
+ }
1336
+ function minuteStrideConfinement(stride, opts) {
1337
+ const base = " during every " + ordinalWord(stride.interval) + " minute";
1338
+ return renderStride({ ...stride, cycle: 60 }, {
1339
+ bare: () => base,
1340
+ offset: () => base + " from " + getNumber(stride.start, opts) + " " + pluralize(stride.start, "minute") + " past the hour",
1341
+ bounded: () => {
1342
+ const num = seriesNumber();
1343
+ return base + " from " + num(stride.start) + through(opts) + num(stride.last) + " " + pluralize(stride.last, "minute") + " past the hour";
1344
+ }
1345
+ });
1346
+ }
1347
+ function minuteStride(schedule) {
1348
+ if (schedule.shapes.minute === "step") {
1349
+ const segment = stepSegment(schedule, "minute");
1350
+ const start = segment.startToken === "*" ? 0 : +segment.startToken;
1351
+ return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
1352
+ }
1353
+ const values = singleValues(segmentsOf(schedule, "minute"));
1354
+ return values && arithmeticStep(values);
1355
+ }
1317
1356
  function everyNthHour(segment, opts) {
1318
1357
  const base = "during every " + stepOrdinals[segment.interval] + " hour";
1319
1358
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -1519,9 +1558,13 @@ function minuteConfinement(schedule, opts) {
1519
1558
  if (minute === "*") {
1520
1559
  return "";
1521
1560
  }
1522
- if (isCadenceField(minute)) {
1561
+ if (minute === "*/2") {
1523
1562
  return " of every other minute";
1524
1563
  }
1564
+ const stride = minuteStride(schedule);
1565
+ if (stride) {
1566
+ return minuteStrideConfinement(stride, opts);
1567
+ }
1525
1568
  const segments = segmentsOf(schedule, "minute");
1526
1569
  if (schedule.shapes.minute === "single") {
1527
1570
  return " during minute :" + pad(minute);
@@ -1538,7 +1581,7 @@ function minuteConfinement(schedule, opts) {
1538
1581
  function hourConfinement(schedule, opts) {
1539
1582
  const hour = schedule.pattern.hour;
1540
1583
  if (hour === "*") {
1541
- const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute);
1584
+ const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute) && !minuteStride(schedule);
1542
1585
  return minutePinned ? " of every hour" : "";
1543
1586
  }
1544
1587
  if (isCadenceField(hour)) {
@@ -1587,9 +1630,12 @@ function confinementEligible(schedule, lead) {
1587
1630
  }
1588
1631
  if (lead.secondLead) {
1589
1632
  if (minuteStep) {
1590
- return minute === "*/2" && schedule.shapes.hour !== "range";
1633
+ return minute === "*/2" ? schedule.shapes.hour !== "range" : schedule.pattern.hour === "*";
1634
+ }
1635
+ if (isMinuteStride(schedule)) {
1636
+ return schedule.pattern.hour === "*";
1591
1637
  }
1592
- if (isMinuteStride(schedule) || schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1638
+ if (schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1593
1639
  return false;
1594
1640
  }
1595
1641
  return true;
package/dist/lang/de.cjs CHANGED
@@ -303,6 +303,20 @@ var stepOrdinals = {
303
303
  8: "achten",
304
304
  12: "zw\xF6lften"
305
305
  };
306
+ var minuteStepOrdinals = {
307
+ 3: "dritten",
308
+ 4: "vierten",
309
+ 5: "f\xFCnften",
310
+ 6: "sechsten",
311
+ 7: "siebten",
312
+ 8: "achten",
313
+ 9: "neunten",
314
+ 10: "zehnten",
315
+ 12: "zw\xF6lften",
316
+ 15: "f\xFCnfzehnten",
317
+ 20: "zwanzigsten",
318
+ 30: "drei\xDFigsten"
319
+ };
306
320
  function everyNthHour(segment) {
307
321
  const base = "in jeder " + stepOrdinals[segment.interval] + " Stunde";
308
322
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -555,6 +569,28 @@ function isEveryOtherMinuteSeconds(schedule, plan) {
555
569
  const minuteStep = stepSegment(schedule, "minute");
556
570
  return minuteStep.startToken === "*" && minuteStep.interval === 2;
557
571
  }
572
+ function minuteStride(schedule) {
573
+ if (schedule.shapes.minute === "step") {
574
+ const segment = stepSegment(schedule, "minute");
575
+ const start = segment.startToken === "*" ? 0 : +segment.startToken;
576
+ return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
577
+ }
578
+ const values = singleValues(segmentsOf(schedule, "minute"));
579
+ return values && arithmeticStep(values);
580
+ }
581
+ function minuteStepConfinement(schedule, stride) {
582
+ const ordinal = minuteStepOrdinals[stride.interval];
583
+ const head = ordinal ? "in jeder " + ordinal + " Minute" : "alle " + stride.interval + " Minuten";
584
+ const tail = renderStride({ ...stride, cycle: 60 }, {
585
+ bare: () => "",
586
+ offset: () => " ab Minute " + stride.start,
587
+ bounded: () => " von Minute " + stride.start + " bis " + stride.last
588
+ });
589
+ return secondsLead(schedule) + " " + head + tail + " jeder Stunde";
590
+ }
591
+ function isSteppedMinuteSeconds(schedule, plan) {
592
+ return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
593
+ }
558
594
  function renderComposeSeconds(schedule, plan, opts) {
559
595
  if ((plan.rest.kind === "clockTimes" || plan.rest.kind === "compactClockTimes") && schedule.shapes.minute === "single") {
560
596
  const minute = +schedule.pattern.minute;
@@ -566,6 +602,9 @@ function renderComposeSeconds(schedule, plan, opts) {
566
602
  if (composeSingleMinute(schedule, plan)) {
567
603
  return secondsLead(schedule) + " " + clockMinuteGenitive(plan.rest.times, opts.style.sep);
568
604
  }
605
+ if (isSteppedMinuteSeconds(schedule, plan)) {
606
+ return minuteStepConfinement(schedule, minuteStride(schedule));
607
+ }
569
608
  if (isEveryOtherMinuteSeconds(schedule, plan)) {
570
609
  return secondsLead(schedule) + " jeder zweiten Minute";
571
610
  }
package/dist/lang/de.js CHANGED
@@ -277,6 +277,20 @@ var stepOrdinals = {
277
277
  8: "achten",
278
278
  12: "zw\xF6lften"
279
279
  };
280
+ var minuteStepOrdinals = {
281
+ 3: "dritten",
282
+ 4: "vierten",
283
+ 5: "f\xFCnften",
284
+ 6: "sechsten",
285
+ 7: "siebten",
286
+ 8: "achten",
287
+ 9: "neunten",
288
+ 10: "zehnten",
289
+ 12: "zw\xF6lften",
290
+ 15: "f\xFCnfzehnten",
291
+ 20: "zwanzigsten",
292
+ 30: "drei\xDFigsten"
293
+ };
280
294
  function everyNthHour(segment) {
281
295
  const base = "in jeder " + stepOrdinals[segment.interval] + " Stunde";
282
296
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -529,6 +543,28 @@ function isEveryOtherMinuteSeconds(schedule, plan) {
529
543
  const minuteStep = stepSegment(schedule, "minute");
530
544
  return minuteStep.startToken === "*" && minuteStep.interval === 2;
531
545
  }
546
+ function minuteStride(schedule) {
547
+ if (schedule.shapes.minute === "step") {
548
+ const segment = stepSegment(schedule, "minute");
549
+ const start = segment.startToken === "*" ? 0 : +segment.startToken;
550
+ return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
551
+ }
552
+ const values = singleValues(segmentsOf(schedule, "minute"));
553
+ return values && arithmeticStep(values);
554
+ }
555
+ function minuteStepConfinement(schedule, stride) {
556
+ const ordinal = minuteStepOrdinals[stride.interval];
557
+ const head = ordinal ? "in jeder " + ordinal + " Minute" : "alle " + stride.interval + " Minuten";
558
+ const tail = renderStride({ ...stride, cycle: 60 }, {
559
+ bare: () => "",
560
+ offset: () => " ab Minute " + stride.start,
561
+ bounded: () => " von Minute " + stride.start + " bis " + stride.last
562
+ });
563
+ return secondsLead(schedule) + " " + head + tail + " jeder Stunde";
564
+ }
565
+ function isSteppedMinuteSeconds(schedule, plan) {
566
+ return (plan.rest.kind === "minuteFrequency" || plan.rest.kind === "multipleMinutes") && (schedule.shapes.second === "wildcard" || schedule.shapes.second === "step") && schedule.shapes.hour === "wildcard" && schedule.pattern.minute !== "*/2" && minuteStride(schedule) !== null;
567
+ }
532
568
  function renderComposeSeconds(schedule, plan, opts) {
533
569
  if ((plan.rest.kind === "clockTimes" || plan.rest.kind === "compactClockTimes") && schedule.shapes.minute === "single") {
534
570
  const minute = +schedule.pattern.minute;
@@ -540,6 +576,9 @@ function renderComposeSeconds(schedule, plan, opts) {
540
576
  if (composeSingleMinute(schedule, plan)) {
541
577
  return secondsLead(schedule) + " " + clockMinuteGenitive(plan.rest.times, opts.style.sep);
542
578
  }
579
+ if (isSteppedMinuteSeconds(schedule, plan)) {
580
+ return minuteStepConfinement(schedule, minuteStride(schedule));
581
+ }
543
582
  if (isEveryOtherMinuteSeconds(schedule, plan)) {
544
583
  return secondsLead(schedule) + " jeder zweiten Minute";
545
584
  }
package/dist/lang/en.cjs CHANGED
@@ -521,6 +521,45 @@ var stepOrdinals = {
521
521
  8: "eighth",
522
522
  12: "twelfth"
523
523
  };
524
+ var spelledOrdinals = {
525
+ 2: "other",
526
+ 3: "third",
527
+ 4: "fourth",
528
+ 5: "fifth",
529
+ 6: "sixth",
530
+ 7: "seventh",
531
+ 8: "eighth",
532
+ 9: "ninth",
533
+ 10: "tenth",
534
+ 11: "eleventh",
535
+ 12: "twelfth",
536
+ 15: "fifteenth",
537
+ 20: "twentieth",
538
+ 30: "thirtieth"
539
+ };
540
+ function ordinalWord(interval) {
541
+ return spelledOrdinals[interval] ?? getOrdinal(interval);
542
+ }
543
+ function minuteStrideConfinement(stride, opts) {
544
+ const base = " during every " + ordinalWord(stride.interval) + " minute";
545
+ return renderStride({ ...stride, cycle: 60 }, {
546
+ bare: () => base,
547
+ offset: () => base + " from " + getNumber(stride.start, opts) + " " + pluralize(stride.start, "minute") + " past the hour",
548
+ bounded: () => {
549
+ const num = seriesNumber();
550
+ return base + " from " + num(stride.start) + through(opts) + num(stride.last) + " " + pluralize(stride.last, "minute") + " past the hour";
551
+ }
552
+ });
553
+ }
554
+ function minuteStride(schedule) {
555
+ if (schedule.shapes.minute === "step") {
556
+ const segment = stepSegment(schedule, "minute");
557
+ const start = segment.startToken === "*" ? 0 : +segment.startToken;
558
+ return { interval: segment.interval, last: segment.fires[segment.fires.length - 1], start };
559
+ }
560
+ const values = singleValues(segmentsOf(schedule, "minute"));
561
+ return values && arithmeticStep(values);
562
+ }
524
563
  function everyNthHour(segment, opts) {
525
564
  const base = "during every " + stepOrdinals[segment.interval] + " hour";
526
565
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -726,9 +765,13 @@ function minuteConfinement(schedule, opts) {
726
765
  if (minute === "*") {
727
766
  return "";
728
767
  }
729
- if (isCadenceField(minute)) {
768
+ if (minute === "*/2") {
730
769
  return " of every other minute";
731
770
  }
771
+ const stride = minuteStride(schedule);
772
+ if (stride) {
773
+ return minuteStrideConfinement(stride, opts);
774
+ }
732
775
  const segments = segmentsOf(schedule, "minute");
733
776
  if (schedule.shapes.minute === "single") {
734
777
  return " during minute :" + pad(minute);
@@ -745,7 +788,7 @@ function minuteConfinement(schedule, opts) {
745
788
  function hourConfinement(schedule, opts) {
746
789
  const hour = schedule.pattern.hour;
747
790
  if (hour === "*") {
748
- const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute);
791
+ const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute) && !minuteStride(schedule);
749
792
  return minutePinned ? " of every hour" : "";
750
793
  }
751
794
  if (isCadenceField(hour)) {
@@ -794,9 +837,12 @@ function confinementEligible(schedule, lead) {
794
837
  }
795
838
  if (lead.secondLead) {
796
839
  if (minuteStep) {
797
- return minute === "*/2" && schedule.shapes.hour !== "range";
840
+ return minute === "*/2" ? schedule.shapes.hour !== "range" : schedule.pattern.hour === "*";
841
+ }
842
+ if (isMinuteStride(schedule)) {
843
+ return schedule.pattern.hour === "*";
798
844
  }
799
- if (isMinuteStride(schedule) || schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
845
+ if (schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
800
846
  return false;
801
847
  }
802
848
  return true;