cronli5 0.8.0 → 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,55 @@ 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
+
24
+ ## [0.8.2]
25
+
26
+ ### Fixed
27
+
28
+ - **Redundant hour scope under a stepped/ranged hour (all languages).** A minute
29
+ cadence under a restricted hour-step (e.g. `2/7 0/4`, `3/2 9-17/2`, `5/10 0/4`)
30
+ no longer asserts a generic every-hour scope alongside the hour clause
31
+ ("past the hour" / "de cada hora" / "de chaque heure" / "每小时" / "jeder
32
+ Stunde"). The hour clause is now the sole authority, so the description recovers
33
+ the hour step rather than reading as "every hour." Hour windows (`9-17`) and
34
+ lists keep their bound (they already round-trip). Now uniform across
35
+ en/es/de/fi/fr/pt/zh.
36
+ - **Dangling seconds clause (zh, de, fi).** For a single fixed minute, the
37
+ "every second" clause now binds to the timestamp instead of floating — zh
38
+ "0点2分**的**每一秒" (was an ungrammatical bare "每秒"), de "**der Minute** 0:02",
39
+ fi "minuutin 0.02 **aikana**" — matching their own minute-0 form and
40
+ en/es/fr/pt.
41
+
42
+ ## [0.8.1]
43
+
44
+ ### Changed
45
+
46
+ - **Docs: review panels are Claude Sonnet instances.** Every reference to a
47
+ review "panel" now reads unambiguously as a blind panel of Claude Sonnet model
48
+ instances — including the cRonstrue comparison's "preferred cronli5 on 81 of
49
+ 108" claim — with the human **beta → stable** graduation gate kept sharply
50
+ distinct (a fluent human, not a model). No confusion about human involvement.
51
+ - **Docs: the add-language workflow reframed.** A new language is always derived
52
+ from existing renderers — a same-family sibling is the fast path, otherwise
53
+ English (the universal anchor) plus typological neighbors for specific
54
+ mechanics. The blind from-scratch pipeline is the original experiment, retained
55
+ only as the clean-room `rewrite-test` soundness check — no longer presented as
56
+ a "no-sibling fallback".
57
+
9
58
  ## [0.8.0]
10
59
 
11
60
  ### Added
package/README.md CHANGED
@@ -246,8 +246,8 @@ model-validated → verified by a fluent human). A new language is usually built
246
246
  by **sibling-derivation** — deriving it from its nearest validated relative
247
247
  (porting that renderer and translating its reviewed corpus, then TDD to green) —
248
248
  and reaches **beta** once it passes the objective gates (round-trip, fuzz,
249
- OR-scope, the cRonstrue comparison) and a blind persona-panel review. It
250
- graduates to **stable** only on fluent-human review:
249
+ OR-scope, the cRonstrue comparison) and review by a blind panel of Claude
250
+ Sonnet instances. It graduates to **stable** only on review by a fluent human:
251
251
 
252
252
  <!-- BEGIN GENERATED: language-status -->
253
253
  | Language | Status |
@@ -323,13 +323,13 @@ pattern — `5,10 30 9 * * MON` — in every language:
323
323
  | Language | cronli5 | cRonstrue 3.14.0 |
324
324
  | --- | --- | --- |
325
325
  | English | at 5 and 10 seconds past the minute, every Monday at 9:30 a.m. | At 5 and 10 seconds past the minute, at 30 minutes past the hour, at 09:00 AM, only on Monday |
326
- | German | in den Sekunden 5 und 10, um 9:30 Uhr montags | Bei Sekunde 5 und 10, bei Minute 30, um 09:00, nur jeden Montag |
326
+ | German | montags in den Sekunden 5 und 10 der Minute 9:30 | Bei Sekunde 5 und 10, bei Minute 30, um 09:00, nur jeden Montag |
327
327
  | Spanish | los lunes, en los segundos 5 y 10 de las 09:30 | A los 5 y 10 segundos del minuto, a los 30 minutos de la hora, a las 09:00, sólo el lunes |
328
- | Finnish | 5 ja 10 sekunnin kohdalla, maanantaisin klo 9.30 | 5 ja 10 sekunnnin jälkeen, 30 minuuttia yli, klo 09:00, vain maanantai |
328
+ | Finnish | 5 ja 10 sekunnin kohdalla minuutin 9.30 aikana, maanantaisin | 5 ja 10 sekunnnin jälkeen, 30 minuuttia yli, klo 09:00, vain maanantai |
329
329
  | French | le lundi, aux secondes 5 et 10 de 9 h 30 | 5 et 10 secondes après la minute, 30 minutes après l'heure, 09:00, uniquement le lundi |
330
330
  | Portuguese | às segundas-feiras, nos segundos 5 e 10 das 09:30 | Aos 5 e 10 segundos do minuto, aos 30 minutos da hora, Às 09:00, somente de segunda-feira |
331
- | Chinese (Simplified) | 每周一,9点30分第5、10秒 | 在一分钟后的第 5 和 10 秒, 在整点后的第 30 分钟, 在上午 09:00, 仅星期一 |
332
- | Chinese (Traditional) | 每週一,9點30分第5、10秒 | 在一分鐘後的 5 和 10 秒, 在整點後的 30 分, 在 09:00, 僅在 星期一 |
331
+ | Chinese (Simplified) | 每周一,9点30分的第5、10秒 | 在一分钟后的第 5 和 10 秒, 在整点后的第 30 分钟, 在上午 09:00, 仅星期一 |
332
+ | Chinese (Traditional) | 每週一,9點30分的第5、10秒 | 在一分鐘後的 5 和 10 秒, 在整點後的 30 分, 在 09:00, 僅在 星期一 |
333
333
  <!-- END GENERATED: cronstrue-head-to-head -->
334
334
 
335
335
  See [docs/cronli5-vs-cronstrue.md](./docs/cronli5-vs-cronstrue.md) for
package/cronli5.min.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";(()=>{var wr={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6},vr={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:vr,top:12},weekday:{aliases:{L:"6"},cyclic:!0,max:7,min:0,numbers:wr,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 Wn(n){return F.forEach(function(e){Cr(n[e],k[e],e)}),n}function Cr(n,r,e){typeof n!="string"&&typeof n!="number"&&Tn(n,e);let t=""+n;t!=="*"&&(e==="date"&&q(t)||e==="weekday"&&Q(t,r)||t.split(",").forEach(function(o){xr(o,r)||Tn(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 xr(n,r){return f(n,"/")?Pr(n,r):f(n,"-")?Hn(n,r):E(n,r)}function Pr(n,r){let e=n.split("/");return e.length!==2||!L(e[1])||+e[1]<1?!1:e[0]==="*"||E(e[0],r)||Hn(e[0],r,!0)}function Hn(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 Tn(n,r){throw new Error('`cronli5` was passed an invalid field value "'+n+'" for the '+r+" field.")}var Mr={hour:24,minute:60,second:60};function En(n){F.forEach(function(e){let t=k[e].aliases,i=t&&t[""+n[e]];i&&(n[e]=i)})}function jn(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]=Fr(t,e,k[e])}),n}function Fr(n,r,e){let t=""+n;if(t==="*")return t;let i=Mr[r],o=t.split(",").map(function(s){return Tr(Dn(Er(jr(Dr(Lr(Hr(s,e),e),e),e),e,i),e),e)}).join(",").split(",");return o.indexOf("*")!==-1?"*":G(o).sort(function(s,m){return Ln(s,e)-Ln(m,e)}).join(",")}function Tr(n,r){if(!r.numbers)return n;let e=n.split("/"),t=e[0].split("-").map(function(o){return Wr(o,r)}).join("-");return e.length===2?t+"/"+e[1]:t}function Wr(n,r){if(n==="*")return n;let e=d(n,r.numbers);return""+(e>r.top?r.min:e)}function Hr(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 Lr(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 Er(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 jr(n,r){let e=n.split("/");return e.length!==2||!f(e[0],"-")?n:Dn(e[0],r)==="*"?"*/"+e[1]:n}function Dn(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 Dr(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 Ln(n,r){let e=n.split("/")[0].split("-")[0];return e==="*"?r.min:d(e,r.numbers)}var Rr="`?` is a Quartz token \u2014 pass { quartz: true } to enable Quartz semantics.";function An(n,r){if(!r){Rn(n.date),Rn(n.weekday);return}if(""+n.date=="?"&&(n.date="*"),""+n.weekday=="?"){n.weekday="*";return}n.weekday=Ar(""+n.weekday)}function Rn(n){if(""+n=="?")throw new Error(Rr)}function Ar(n){return n==="*"?n:n.split(",").map(Ur).join(",")}function Ur(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 Un(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 Qr(n);if(typeof n=="string")return Vr(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 Qr(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 Vr(n,r){let e=Ir(n).split(/\s+/);return qn(e,r)}function Ir(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 Qn(n){return n===0?7:n}function Vn(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"?Qn(+t.bounds[0]):Qn(+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 $r(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===$r(e,t,o);return e===0&&u?r.bare():e<t&&u?r.offset():r.bounded()}function In(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 $n(n){return n!=="*"&&!f(n,",")&&!f(n,"-")&&!f(n,"/")}function an(n){return f(n,"-")&&!f(n,",")&&!f(n,"/")}function Jr(n){return f(n,"/")&&!f(n,",")}function cn(n){return n!=="*"&&!f(n,"-")&&!f(n,"/")}function fn(n){return n!=="*"&&!an(n)&&!Jr(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 Jn(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(...Jn(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 Kr(n){return cn(n)?n.split(",").map(Number):[0]}function Yr(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 Gr(n){return n==="*"?59:Math.max(...mn(n,0,59))}function Zr(n){if($n(n)&&n!=="0")return+n}function Br(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 Xr(n,r,e){return r==="wildcard"||r==="quartz"?null:n.split(",").map(function(i){if(f(i,"/")){let o=i.split("/");return{fires:Jn(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 Kn(n){let r={},e={};F.forEach(function(u){r[u]=Br(n[u],u),e[u]=Xr(n[u],r[u],k[u])});let i={analyses:{clockSecond:Zr(n.second),lastMinuteFire:Gr(n.minute),minuteSpan:Yr(n.minute),segments:e},pattern:n,shapes:r};return{...i,plan:_r(i)}}function _r(n){let{analyses:r,pattern:e,shapes:t}=n;if(e.second!=="0"){let i=ne(e,t,r);if(i)return i}return Yn(e,t,r)||Gn(e,t,r)}function ne(n,r,e){let t=re(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:Yn(n,r,e,!0)||Gn(n,r,e,!0)})}function re(n,r){return n.minute!=="*"||n.hour!=="*"?null:n.second==="*"?{kind:"everySecond"}:r.second==="single"?{kind:"secondPastMinute"}:{kind:"standaloneSeconds"}}function Yn(n,r,e,t=!1){if(r.minute==="step")return{hours:te(n,r,e),kind:"minuteFrequency"};if(r.hour==="single"&&e.minuteSpan)return{hour:+n.hour,kind:"minuteSpanInHour",span:e.minuteSpan};let i=ie(n,r);if(i)return i;let o=ee(n,r);if(o)return o;if(n.hour==="*")return oe(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 ee(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 te(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 ie(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 oe(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 Gn(n,r,e,t=!1){let i=t&&n.minute==="0";return r.hour==="range"&&!i?ue(n,r,e):r.hour==="step"&&n.minute==="0"&&!t?{kind:"hourStep"}:n.hour==="*"&&!i?{kind:"everyHour"}:se(n,e,i)}function ue(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 se(n,r,e=!1){let t=mn(n.hour,0,23),i=Kr(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 Zn(n,r){let e=Un(n,r);return An(e,r.quartz),En(e),Wn(e),jn(e)}function v(n){return n=""+n,n.length<2?"0"+n:n}function Bn(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 Xn(n){return typeof n=="object"&&n!==null?{...gn.us,untilWindow:!1,...n}:gn[n==="uk"?"gb":n]||gn.us}var ae=["zero","one","two","three","four","five","six","seven","eight","nine","ten"],hn=["th","st","nd","rd"],ce=[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"]],fe={SUN:C[0],MON:C[1],TUE:C[2],WED:C[3],THU:C[4],FRI:C[5],SAT:C[6]},le=[null,"first","second","third","fourth","fifth"];function me(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:Xn(n.dialect),years:!!n.years}}function de(n,r){let e=ye(n,r);if(e!==null)return nr(e,n,r);let t=Ge(n,r)??rr(n,n.plan,r),i=Y(n,r)?st(n,r):"";return nr(i+t,n,r)}function rr(n,r,e){let t=Ze[r.kind];return t(n,r,e)}function pn(n){return n==="step"||n==="range"||n==="list"}function ge(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 he(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 pe(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 ye(n,r){if(!ge(n,r))return null;let e=he(n,r),t=pe(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 be(n,r,e){return"every second"+a(n,e)}function Se(n,r,e){return D(n,e)+a(n,e)}function ke(n,r,e){let t=n.pattern.second;return g(t,e)+" "+w(t,"second")+" past the minute, every minute"+a(n,e)}function Oe(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 Ne(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 ze(n,r,e){return+r.times[0].minute==0&&n.shapes.minute==="single"?D(n,e)+" for one minute at "+ve(n,r,e):D(n,e)+" of "+Ce(n,r,e)}function we(n,r,e){let t=Ne(n,r,e);return t!==null?t:r.rest.kind==="clockTimes"&&(n.shapes.second==="wildcard"||n.shapes.second==="step")?ze(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)+", ")+rr(n,r.rest,e)}function ve(n,r,e){let t=r.times.map(function(u){return l({hour:u.hour,minute:0},e)}),i=_(n,xn,e);return p(t,e)+(i&&", "+i)}function Ce(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,xn,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 xe(n,r,e){return"every minute"+a(n,e)}function Pe(n,r,e){let t=n.pattern.minute;return g(t,e)+" "+w(t,"minute")+" past the hour, every hour"+a(n,e)}function Me(n,r,e){return J(n.pattern.minute,e)+a(n,e)}function Fe(n,r,e){return(H(c(n,"minute"),"minute","hour",e)??z(M(c(n,"minute"),e),"minute","hour",e))+a(n,e)}function Te(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 r.hours.kind==="window"?t+=" "+A({continuous:!1,from:r.hours.from,throughMinute:r.hours.last,to:r.hours.to},e):r.hours.kind==="step"&&(t+=" "+kn(O(n,"hour"),e));return t+a(n,e)}function We(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 He(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):rt(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 er={2:"other",3:"third",4:"fourth",6:"sixth",8:"eighth",12:"twelfth"};function kn(n,r){let e="during every "+er[n.interval]+" hour",t=n.startToken==="*"?0:+n.startToken;return t===0?e:e+" starting at "+l({hour:t,minute:0},r)}function Le(n,r,e){let t=O(n,"hour");if(r.form==="wildcard")return"every minute "+kn(t,e)+a(n,e);let i=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??ar(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 Ee(n,r,e){return"every hour"+a(n,e)}function je(n,r,e){let t=Ae(Re(r),e);return r.minuteForm==="wildcard"?"every minute "+t+a(n,e):r.minuteForm==="range"?J(n.pattern.minute,e)+", "+t+a(n,e):tr(n,e)+" "+t+a(n,e)}function tr(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 De(n,r,e){let t=K(n,e);return t!==null?t+a(n,e):ar(O(n,"hour"),e)+a(n,e)}function Re(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 Ae(n,r){return A({continuous:n.continuous,from:n.from,throughMinute:n.closeMinute,to:n.to},r)}function Ue(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=Cn(r.times),i=r.times.map(function(u){return l({hour:u.hour,minute:u.minute,second:u.second,plain:t},e)});return mr(n,e)+"at "+p(i,e)+ir(n,e)}function ir(n,r){return Y(n,r)?gr(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 Qe(n,r,e)+a(n,e);let m={minute:r.minute,second:n.analyses.clockSecond};return mr(n,e)+"at "+R(n,m,!0,e)+ir(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?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 Qe(n,r,e){let t=r.minute,i=[],o=or(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))}),tr(n,e)+" "+p(i,e)+ur(o,e)}function or(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 ur(n,r){return n.length?" and at "+p(n,r):""}function W(n){return n==="*"||n.startsWith("*/")&&n.indexOf("-")===-1}function Ve(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 Ie(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 $e(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 Je(n){if(n.shapes.hour!=="step")return!0;let r=O(n,"hour");return n.pattern.hour==="*/2"||r.startToken.indexOf("-")!==-1}function Ke(n){if(n.shapes.minute!=="list")return!1;let r=Z(c(n,"minute"));return r!==null&&on(r)!==null}function Ye(n,r){let{minute:e,hour:t}=n.pattern,i=W(e)&&e!=="*";return Je(n)?r.secondLead?i?e==="*/2"&&n.shapes.hour!=="range":!(Ke(n)||n.shapes.minute==="list"&&n.shapes.hour==="list"):t==="*/2"?!0:n.shapes.hour==="single"&&e==="*/2":!1}function Ge(n,r){if(!r.style.untilWindow||r.short||n.pattern.minute==="*"&&n.pattern.hour==="*")return null;let e=Ve(n,r);if(!e||!Ye(n,e))return null;let t=e.secondLead?Ie(n,r):"";return e.text+t+$e(n,r)+a(n,r)}var Ze={clockTimes:Ue,compactClockTimes:qe,composeSeconds:we,everyHour:Ee,everyMinute:xe,everySecond:be,hourRange:je,hourStep:De,minuteFrequency:Te,minuteSpanAcrossHourStep:Le,minuteSpanInHour:We,minutesAcrossHours:He,multipleMinutes:Fe,rangeOfMinutes:Me,secondPastMinute:ke,secondsWithinMinute:Oe,singleMinute:Pe,standaloneSeconds:Se};function sr(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?sr({...o,cycle:60,unit:r,anchor:e},t):null}function X(n,r,e,t){if(n.startToken.indexOf("-")!==-1)return z(_n(n.fires,t),r,e,t);let i=n.startToken==="*"?0:+n.startToken;return i!==0&&n.fires.length<=3?z(_n(n.fires,t),r,e,t):sr({interval:n.interval,start:i,last:n.fires[n.fires.length-1],cycle:60,unit:r,anchor:e},t)}function ar(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&&In(e)}function Nn(n){return n.pattern.second==="*"||n.shapes.second==="step"}function cr(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)&&Be(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):cr(n,r,e)+", "+B(t,e)+a(n,e)}function Be(n){let r=c(n,"hour"),e=r.length===1&&r[0];return!e||e.kind!=="step"||e.startToken.indexOf("-")!==-1||!(e.interval in er)?null:e}function Xe(n){return c(n,"hour").some(function(e){return e.kind==="range"})}function _e(n,r){let e=[],t=or(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+ur(o,r)}function wn(n,r,e){return r!==0||!Xe(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):cr(n,r,e)+", "+_e(n,e)+a(n,e)}function vn(){return function(r){return""+r}}function fr(n,r){return n>1?function(t){return""+t}:function(t){return g(t,r)}}function _n(n,r){return n.map(fr(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=fr(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 nt(n,r,e){return(+n==0||+n==12)&&+r==0&&!(typeof e=="number"&&e>0)}function Cn(n){let r=n.filter(function(t){return nt(t.hour,t.minute,t.second)});return r.length>0&&r.length<n.length}function yn(n,r){let e=Cn(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 rt(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 et(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=Cn(u.flatMap(function(y){return et(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(tt(m,u,e),t)}function tt(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 lr(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 lr(n," and ",r)}function it(n,r){return lr(n," or ",r)}var ot={all:"",month:"in ",recurringWeekday:!0,stepDate:"on ",weekday:"on "},xn={all:"every day",month:"every day in ",recurringWeekday:!1,stepDate:"",weekday:"every "};function a(n,r){if(Y(n,r))return gr(n,r);let e=_(n,ot,r);return e&&" "+e}function mr(n,r){return Y(n,r)?"":_(n,xn,r)+" "}function _(n,r,e){let t=n.pattern;if(t.date!=="*"&&t.weekday!=="*")return lt(n,e);if(t.date!=="*")return ut(n,r,e);if(t.weekday!=="*"){let i=Pn(t.weekday,e);return i?bn(i,n,e):r.weekday+Sr(n,r.recurringWeekday,e)+pr(n,e)}return t.month!=="*"?r.month+N(n,e):r.all}function ut(n,r,e){let t=n.pattern,i=nn(t.date,e);return i?bn(i,n,e):j(t.date)?bn(r.stepDate+yr(t.date),n,e):t.month!=="*"&&!dr(n)?"on the "+Sn(n,e)+pr(n,e):t.month!=="*"?"on "+hr(n,e):"on the "+Sn(n,e)}function dr(n){return!br(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 gr(n,r){let e=[...at(n,r),...ct(n,r)];return" whenever the day is "+it(e,r)}function st(n,r){return n.pattern.month==="*"?"":"in "+N(n,r)+" "}function at(n,r){let e=n.pattern.date,t=nn(e,r);if(t)return[t.replace(/^on /,"")];let i=ft(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 ct(n,r){let e=n.pattern.weekday,t=Pn(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 ft(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 lt(n,r){let e=n.pattern,t=Pn(e.weekday,r)||"on "+Sr(n,!1,r);return e.month!=="*"&&dr(n)&&!nn(e.date,r)&&!j(e.date)?"on "+hr(n,r)+" or "+t+" in "+N(n,r):mt(n,r)+" or "+t+dt(n,r)}function mt(n,r){let e=n.pattern,t=nn(e.date,r);return t||(j(e.date)?yr(e.date):"on the "+Sn(n,r))}function dt(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 Pn(n,r){let e=n.split("#");if(e.length===2)return"on the "+le[+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 hr(n,r){let e=N(n,r),t=rn(c(n,"date"),r.style.ordinals?b:gt,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 gt(n){return""+n}function pr(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 yr(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=br(n.pattern.month);return e||rn(c(n,"month"),function(i){return St(i,r)},r)}function br(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 Sr(n,r,e){let t=Vn(c(n,"weekday")),i=t.some(function(s){return s.kind==="range"});return rn(t,r&&!i?function(s){return ht(s,e)}:function(s){return x(s,e)},e)}function ht(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 nr(n,r,e){let t=r.pattern.year;if(t==="*")return n;if(t.indexOf("/")!==-1)return n+", "+yt(t,e);let i=pt(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 pt(n,r){return n.indexOf(",")!==-1?p(n.split(","),r):n.indexOf("-")!==-1?n.split("-").join(h(r)):n}function yt(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?bt({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 bt(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 Bn(n,ae,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 St(n,r){let e=ce[+n];return e&&e[r.short?1:0]}function x(n,r){let e=n===7||n==="7"?0:n,t=C[e]||fe[e];return t&&t[r.short?1:0]}var kt={describe:de,fallback:"an unrecognizable cron pattern",options:me,reboot:"at system startup",sentence:n=>"Runs "+n+(n.endsWith(".")?"":".")},kr=kt;/**
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 Mn(n,r){let e=r&&r.lang||kr,t=e.options(r);if(!t.lenient)return Or(Nr(n,e,t),e,r);try{return Or(Nr(n,e,t),e,r)}catch{return e.fallback}}function Or(n,r,e){return e&&e.sentence?r.sentence(n):n}function Nr(n,r,e){if(typeof n=="string"&&n.trim().toLowerCase()==="@reboot")return r.reboot;let t=Kn(Zn(n,e)),i=r.plan?r.plan(t,t.plan):t.plan;return r.describe({...t,plan:i},e)}function Ot(n,r){return Mn(n,{...r,sentence:!0})}function Nt(n,r){return Mn(n,{...r,sentence:!1})}var zt=Object.assign(Mn,{sentence:Ot,fragment:Nt}),Fn=zt;typeof globalThis<"u"&&Object.assign(globalThis,{cronli5:Fn});var pi=Fn;})();
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
@@ -1286,7 +1286,8 @@ function renderMinuteFrequency(schedule, plan, opts) {
1286
1286
  to: plan.hours.to
1287
1287
  }, opts);
1288
1288
  } else if (plan.hours.kind === "step") {
1289
- phrase += " " + everyNthHour(stepSegment(schedule, "hour"), opts);
1289
+ const bound = withoutHourAnchor(phrase);
1290
+ phrase = bound + (bound === phrase ? " " : ", ") + everyNthHour(stepSegment(schedule, "hour"), opts);
1290
1291
  }
1291
1292
  return phrase + trailingQualifier(schedule, opts);
1292
1293
  }
@@ -1339,6 +1340,45 @@ var stepOrdinals = {
1339
1340
  8: "eighth",
1340
1341
  12: "twelfth"
1341
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
+ }
1342
1382
  function everyNthHour(segment, opts) {
1343
1383
  const base = "during every " + stepOrdinals[segment.interval] + " hour";
1344
1384
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -1349,7 +1389,7 @@ function renderMinuteSpanAcrossHourStep(schedule, plan, opts) {
1349
1389
  if (plan.form === "wildcard") {
1350
1390
  return "every minute " + everyNthHour(segment, opts) + trailingQualifier(schedule, opts);
1351
1391
  }
1352
- const lead = plan.form === "list" ? strideFromSegments(
1392
+ const lead = withoutHourAnchor(plan.form === "list" ? strideFromSegments(
1353
1393
  segmentsOf(schedule, "minute"),
1354
1394
  "minute",
1355
1395
  "hour",
@@ -1359,7 +1399,7 @@ function renderMinuteSpanAcrossHourStep(schedule, plan, opts) {
1359
1399
  "minute",
1360
1400
  "hour",
1361
1401
  opts
1362
- ) : minuteRangeLead(schedule.pattern.minute, opts);
1402
+ ) : minuteRangeLead(schedule.pattern.minute, opts));
1363
1403
  const cadence = unevenHourCadence(schedule, opts);
1364
1404
  return lead + ", " + (cadence ?? stepHours(segment, opts)) + trailingQualifier(schedule, opts);
1365
1405
  }
@@ -1478,7 +1518,7 @@ function renderCompactClockTimes(schedule, plan, opts) {
1478
1518
  )
1479
1519
  );
1480
1520
  const cadence = unevenHourCadence(schedule, opts);
1481
- const phrase = cadence ? minuteLead + ", " + cadence + trailingQualifier(schedule, opts) : minuteLead + ", at " + hourSegmentTimes(schedule, { minute: 0, second: null }, true, opts) + trailingQualifier(schedule, opts);
1521
+ const phrase = cadence ? withoutHourAnchor(minuteLead) + ", " + cadence + trailingQualifier(schedule, opts) : minuteLead + ", at " + hourSegmentTimes(schedule, { minute: 0, second: null }, true, opts) + trailingQualifier(schedule, opts);
1482
1522
  return schedule.analyses.clockSecond ? secondsLeadClause(schedule, opts) + ", " + phrase : phrase;
1483
1523
  }
1484
1524
  function foldedHourWindows(schedule, plan, opts) {
@@ -1544,9 +1584,13 @@ function minuteConfinement(schedule, opts) {
1544
1584
  if (minute === "*") {
1545
1585
  return "";
1546
1586
  }
1547
- if (isCadenceField(minute)) {
1587
+ if (minute === "*/2") {
1548
1588
  return " of every other minute";
1549
1589
  }
1590
+ const stride = minuteStride(schedule);
1591
+ if (stride) {
1592
+ return minuteStrideConfinement(stride, opts);
1593
+ }
1550
1594
  const segments = segmentsOf(schedule, "minute");
1551
1595
  if (schedule.shapes.minute === "single") {
1552
1596
  return " during minute :" + pad(minute);
@@ -1563,7 +1607,7 @@ function minuteConfinement(schedule, opts) {
1563
1607
  function hourConfinement(schedule, opts) {
1564
1608
  const hour = schedule.pattern.hour;
1565
1609
  if (hour === "*") {
1566
- const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute);
1610
+ const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute) && !minuteStride(schedule);
1567
1611
  return minutePinned ? " of every hour" : "";
1568
1612
  }
1569
1613
  if (isCadenceField(hour)) {
@@ -1612,9 +1656,12 @@ function confinementEligible(schedule, lead) {
1612
1656
  }
1613
1657
  if (lead.secondLead) {
1614
1658
  if (minuteStep) {
1615
- return minute === "*/2" && schedule.shapes.hour !== "range";
1659
+ return minute === "*/2" ? schedule.shapes.hour !== "range" : schedule.pattern.hour === "*";
1616
1660
  }
1617
- if (isMinuteStride(schedule) || schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1661
+ if (isMinuteStride(schedule)) {
1662
+ return schedule.pattern.hour === "*";
1663
+ }
1664
+ if (schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1618
1665
  return false;
1619
1666
  }
1620
1667
  return true;
@@ -1852,6 +1899,9 @@ function segmentWords(segments, opts) {
1852
1899
  function listPastThe(words, unit, anchor, opts) {
1853
1900
  return "at " + joinList(words, opts) + " " + unit + "s past the " + anchor;
1854
1901
  }
1902
+ function withoutHourAnchor(lead) {
1903
+ return lead.replace(/ past the hour$/, "");
1904
+ }
1855
1905
  function wordTime(hour, minute, second) {
1856
1906
  return (+hour === 0 || +hour === 12) && +minute === 0 && !(typeof second === "number" && second > 0);
1857
1907
  }
package/dist/cronli5.js CHANGED
@@ -1260,7 +1260,8 @@ function renderMinuteFrequency(schedule, plan, opts) {
1260
1260
  to: plan.hours.to
1261
1261
  }, opts);
1262
1262
  } else if (plan.hours.kind === "step") {
1263
- phrase += " " + everyNthHour(stepSegment(schedule, "hour"), opts);
1263
+ const bound = withoutHourAnchor(phrase);
1264
+ phrase = bound + (bound === phrase ? " " : ", ") + everyNthHour(stepSegment(schedule, "hour"), opts);
1264
1265
  }
1265
1266
  return phrase + trailingQualifier(schedule, opts);
1266
1267
  }
@@ -1313,6 +1314,45 @@ var stepOrdinals = {
1313
1314
  8: "eighth",
1314
1315
  12: "twelfth"
1315
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
+ }
1316
1356
  function everyNthHour(segment, opts) {
1317
1357
  const base = "during every " + stepOrdinals[segment.interval] + " hour";
1318
1358
  const start = segment.startToken === "*" ? 0 : +segment.startToken;
@@ -1323,7 +1363,7 @@ function renderMinuteSpanAcrossHourStep(schedule, plan, opts) {
1323
1363
  if (plan.form === "wildcard") {
1324
1364
  return "every minute " + everyNthHour(segment, opts) + trailingQualifier(schedule, opts);
1325
1365
  }
1326
- const lead = plan.form === "list" ? strideFromSegments(
1366
+ const lead = withoutHourAnchor(plan.form === "list" ? strideFromSegments(
1327
1367
  segmentsOf(schedule, "minute"),
1328
1368
  "minute",
1329
1369
  "hour",
@@ -1333,7 +1373,7 @@ function renderMinuteSpanAcrossHourStep(schedule, plan, opts) {
1333
1373
  "minute",
1334
1374
  "hour",
1335
1375
  opts
1336
- ) : minuteRangeLead(schedule.pattern.minute, opts);
1376
+ ) : minuteRangeLead(schedule.pattern.minute, opts));
1337
1377
  const cadence = unevenHourCadence(schedule, opts);
1338
1378
  return lead + ", " + (cadence ?? stepHours(segment, opts)) + trailingQualifier(schedule, opts);
1339
1379
  }
@@ -1452,7 +1492,7 @@ function renderCompactClockTimes(schedule, plan, opts) {
1452
1492
  )
1453
1493
  );
1454
1494
  const cadence = unevenHourCadence(schedule, opts);
1455
- const phrase = cadence ? minuteLead + ", " + cadence + trailingQualifier(schedule, opts) : minuteLead + ", at " + hourSegmentTimes(schedule, { minute: 0, second: null }, true, opts) + trailingQualifier(schedule, opts);
1495
+ const phrase = cadence ? withoutHourAnchor(minuteLead) + ", " + cadence + trailingQualifier(schedule, opts) : minuteLead + ", at " + hourSegmentTimes(schedule, { minute: 0, second: null }, true, opts) + trailingQualifier(schedule, opts);
1456
1496
  return schedule.analyses.clockSecond ? secondsLeadClause(schedule, opts) + ", " + phrase : phrase;
1457
1497
  }
1458
1498
  function foldedHourWindows(schedule, plan, opts) {
@@ -1518,9 +1558,13 @@ function minuteConfinement(schedule, opts) {
1518
1558
  if (minute === "*") {
1519
1559
  return "";
1520
1560
  }
1521
- if (isCadenceField(minute)) {
1561
+ if (minute === "*/2") {
1522
1562
  return " of every other minute";
1523
1563
  }
1564
+ const stride = minuteStride(schedule);
1565
+ if (stride) {
1566
+ return minuteStrideConfinement(stride, opts);
1567
+ }
1524
1568
  const segments = segmentsOf(schedule, "minute");
1525
1569
  if (schedule.shapes.minute === "single") {
1526
1570
  return " during minute :" + pad(minute);
@@ -1537,7 +1581,7 @@ function minuteConfinement(schedule, opts) {
1537
1581
  function hourConfinement(schedule, opts) {
1538
1582
  const hour = schedule.pattern.hour;
1539
1583
  if (hour === "*") {
1540
- const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute);
1584
+ const minutePinned = schedule.pattern.minute !== "*" && !isCadenceField(schedule.pattern.minute) && !minuteStride(schedule);
1541
1585
  return minutePinned ? " of every hour" : "";
1542
1586
  }
1543
1587
  if (isCadenceField(hour)) {
@@ -1586,9 +1630,12 @@ function confinementEligible(schedule, lead) {
1586
1630
  }
1587
1631
  if (lead.secondLead) {
1588
1632
  if (minuteStep) {
1589
- return minute === "*/2" && schedule.shapes.hour !== "range";
1633
+ return minute === "*/2" ? schedule.shapes.hour !== "range" : schedule.pattern.hour === "*";
1590
1634
  }
1591
- if (isMinuteStride(schedule) || schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1635
+ if (isMinuteStride(schedule)) {
1636
+ return schedule.pattern.hour === "*";
1637
+ }
1638
+ if (schedule.shapes.minute === "list" && schedule.shapes.hour === "list") {
1592
1639
  return false;
1593
1640
  }
1594
1641
  return true;
@@ -1826,6 +1873,9 @@ function segmentWords(segments, opts) {
1826
1873
  function listPastThe(words, unit, anchor, opts) {
1827
1874
  return "at " + joinList(words, opts) + " " + unit + "s past the " + anchor;
1828
1875
  }
1876
+ function withoutHourAnchor(lead) {
1877
+ return lead.replace(/ past the hour$/, "");
1878
+ }
1829
1879
  function wordTime(hour, minute, second) {
1830
1880
  return (+hour === 0 || +hour === 12) && +minute === 0 && !(typeof second === "number" && second > 0);
1831
1881
  }