qrono 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@ import { qrono } from 'qrono'
14
14
  // UTC-first
15
15
  const now = qrono().toString() // '2027-01-23T12:34:56:789Z'
16
16
  // DST overlap (occurs twice) of Europe/London
17
- qrono.asLocaltime()
17
+ qrono.context({ localtime: true })
18
18
  const t = '2019-10-27T01:30:00'
19
19
  qrono(t) // 01:30 +00:00 Same as JavaScript's `Date`
20
20
  qrono({ disambiguation: 'earlier' }, t) // 01:30 +00:00
@@ -172,7 +172,6 @@ Visit [official website<sup> ↗</sup>](https://qronojs.dev/) for complete docum
172
172
  - [qrono.date(...args)](https://qronojs.dev/api/#qrono-date) <sub><img src="https://img.shields.io/badge/static-lightsteelblue" height="14"></sub> <sup>7 overloads</sup>
173
173
  - Conversion
174
174
  - [.toString()](https://qronojs.dev/api/#tostring) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
175
- - [.numeric()](https://qronojs.dev/api/#numeric) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
176
175
  - [.valueOf()](https://qronojs.dev/api/#valueof) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
177
176
  - [.toArray()](https://qronojs.dev/api/#toarray) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
178
177
  - [.toObject()](https://qronojs.dev/api/#toobject) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
@@ -198,14 +197,7 @@ Visit [official website<sup> ↗</sup>](https://qronojs.dev/) for complete docum
198
197
  - [.offset()](https://qronojs.dev/api/#offset) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
199
198
  - Context
200
199
  - [qrono.context()](https://qronojs.dev/api/#default-context) <sub><img src="https://img.shields.io/badge/static-lightsteelblue" height="14"></sub> <sup>2 overloads</sup>
201
- - [qrono.asUtc()](https://qronojs.dev/api/#default-asutc) <sub><img src="https://img.shields.io/badge/static-lightsteelblue" height="14"></sub>
202
- - [qrono.asLocaltime()](https://qronojs.dev/api/#default-aslocaltime) <sub><img src="https://img.shields.io/badge/static-lightsteelblue" height="14"></sub>
203
- - [qrono.localtime()](https://qronojs.dev/api/#default-localtime) <sub><img src="https://img.shields.io/badge/static-lightsteelblue" height="14"></sub> <sup>2 overloads</sup>
204
200
  - [.context()](https://qronojs.dev/api/#context) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sup>2 overloads</sup>
205
- - [.localtime()](https://qronojs.dev/api/#localtime) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sup>2 overloads</sup>
206
- - [.disambiguation()](https://qronojs.dev/api/#disambiguation) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
207
- - [.asUtc()](https://qronojs.dev/api/#asutc) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
208
- - [.asLocaltime()](https://qronojs.dev/api/#aslocaltime) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
209
201
  - Calculation
210
202
  - [.plus(duration)](https://qronojs.dev/api/#plus) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sup>4 overloads</sup> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub> <sup>4 overloads</sup>
211
203
  - [.minus(duration)](https://qronojs.dev/api/#minus) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sup>4 overloads</sup> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub> <sup>4 overloads</sup>
@@ -220,7 +212,7 @@ Visit [official website<sup> ↗</sup>](https://qronojs.dev/) for complete docum
220
212
  - Time Unit Boundary
221
213
  - [.startOfYear()](https://qronojs.dev/api/#startofyear) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
222
214
  - [.startOfMonth()](https://qronojs.dev/api/#startofmonth) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
223
- - [.startOfDay()](https://qronojs.dev/api/#startofday) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub> <sub><img src="https://img.shields.io/badge/QronoDate-darkseagreen" height="14"></sub>
215
+ - [.startOfDay()](https://qronojs.dev/api/#startofday) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
224
216
  - [.startOfHour()](https://qronojs.dev/api/#startofhour) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
225
217
  - [.startOfMinute()](https://qronojs.dev/api/#startofminute) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
226
218
  - [.startOfSecond()](https://qronojs.dev/api/#startofsecond) <sub><img src="https://img.shields.io/badge/Qrono-cornflowerblue" height="14"></sub>
@@ -278,17 +270,16 @@ time.second(0) // => returns new Qrono instance
278
270
  // UTC as default
279
271
  qrono('2022-12-31 15:23:11.321').toString() // => "2022-12-31T15:23:11.321Z"
280
272
  // set default to local time
281
- qrono.asLocaltime()
273
+ qrono.context({ localtime: true })
282
274
  qrono('2022-12-31 15:23:11.321').toString() // => "2022-12-31T15:23:11.321-04:00"
283
- qrono('2022-12-31 15:23:11.321').asUtc().hour() // => 11 as UTC
275
+ qrono('2022-12-31 15:23:11.321').context({ localtime: false }).hour() // => 11 as UTC
284
276
  qrono('2022-12-31 15:23:11.321').hour() // => 15 as local time
285
277
  ```
286
278
 
287
279
  ### Conversion
288
280
 
289
281
  ```js
290
- qrono('2000-01-01').numeric() // => 946,684,800,000 milliseconds from UNIX epoch
291
- === +qrono('2000-01-01') // => true
282
+ +qrono('2000-01-01') // => 946,684,800,000 milliseconds from UNIX epoch
292
283
  const time = qrono('2000-01-02 03:04:05.006')
293
284
  time.toObject() // => { year: 2000, month: 1, day: 2, hour: 3, minute: 4, second: 5, millisecond: 6 }
294
285
  time.toArray() // => [2000, 1, 2, 3, 4, 5, 6]
@@ -334,7 +325,7 @@ time.weeksInYear() // => 52
334
325
  time.weekOfYear() // => 52
335
326
  time.yearOfWeek() // => 1999
336
327
  // Daylight saving time stuff that is meaningful in case of local time
337
- const localtime = time.asLocaltime()
328
+ const localtime = time.context({ localtime: true })
338
329
  localtime.hasDstInYear()
339
330
  localtime.isInDst()
340
331
  localtime.isDstTransitionDay()
@@ -350,7 +341,7 @@ Methods of `QronoDate` are almost compatible with those of `Qrono`.
350
341
  ```js
351
342
  qrono.date('2000-01-02').toString() // => "2000-01-02"
352
343
  qrono('2000-01-02 23:04:05.006').toDate() // => QronoDate instance 2000-01-02
353
- qrono.date('2000-01-02').numeric() // => 10958 days from UNIX epoch
344
+ +qrono.date('2000-01-02') // => 10958 days from UNIX epoch
354
345
  ```
355
346
 
356
347
  ## License 🌏
package/dist/qrono.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var rt=Object.defineProperty;var K=Object.getOwnPropertySymbols;var st=Object.prototype.hasOwnProperty,at=Object.prototype.propertyIsEnumerable;var V=(t,e,n)=>e in t?rt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,N=(t,e)=>{for(var n in e||(e={}))st.call(e,n)&&V(t,n,e[n]);if(K)for(var n of K(e))at.call(e,n)&&V(t,n,e[n]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ut=new Date(1915,0,1,12,0,0,0),T=7,_=24,v=60,U=v*_,J=60,ct=J*v,ft=ct*_,X=1e3,lt=J*X,C=ft*X;function D(t,...e){return e.flat().some(t.hasOwnProperty,t)}function F(t){return Object.entries(t).filter(([,e])=>!ht(e)).map(([e])=>e)}function w(t){return t!==void 0}function ht(t){return t instanceof Function}function mt(t){return typeof t=="string"||t instanceof String}function S(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function tt(t){return!Number.isNaN(t.getTime())}function Y(t){return D(t,["year","month","day","hour","minute","second","millisecond"])}const $=o;o.date=a;const d={localtime:!1,disambiguation:"compatible"};for(const t of F(d))o[t]=function(e){return w(e)?(d[t]=e,this):d[t]};o.context=function(t){if(w(t)){for(const e of F(d))D(t,e)&&(d[e]=t[e]);return this}return N({},d)};o.asUtc=function(){return d.localtime=!1,this};o.asLocaltime=function(){return d.localtime=!0,this};const yt=1,dt=2,et=3,M=4,pt=5,Dt=6,gt=7;Object.assign(o,{monday:yt,tuesday:dt,wednesday:et,thursday:M,friday:pt,saturday:Dt,sunday:gt});const c=Symbol();function o(...t){var s;if(!new.target)return new o(...t);const e={nativeDate:null,localtime:!1,disambiguation:"compatible",set:Mt,parse:vt,valid:Ot,context:wt,getNative:bt};if(this[c]=e,e.context(d),t[0]instanceof o){const r=t.shift();for(const i of F(e))e[i]=r[i]()}S(t[0])&&!Y(t[0])&&e.context(t.shift());const n=t[0],u=t[1];if(n==null)(s=e.nativeDate)!=null||(e.nativeDate=new Date);else if(n instanceof Date)e.nativeDate=new Date(n.getTime());else if(mt(n))e.parse(n);else if(S(n)){if(!Y(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");e.set(n)}else if(Number.isFinite(n)&&!Number.isFinite(u))e.nativeDate=new Date(n);else if(Number.isFinite(n)||Array.isArray(n)){const r=t.flat(),i=r.filter(m=>Number.isSafeInteger(m));if(i.length!==r.length)throw RangeError("Should be safe integers");if(i.length>7)throw RangeError("Too many numbers");e.set({year:i[0],month:i[1],day:i[2],hour:i[3],minute:i[4],second:i[5],millisecond:i[6]})}else throw TypeError(`Invalid argument ${t}`);return this}function Ot(){return tt(this.nativeDate)}function wt(t){if(t){for(const e of F(d))D(t,e)&&(this[e]=t[e]);return this}}function bt(t){return this.nativeDate[`get${this.localtime?"":"UTC"}${t}`]()}function Mt(t){var A,H,I,E,P,R,W,j,x,L,B,q,z,Z,Q,G;const e=N({},t);if(e.month=e.month&&e.month-1,!this.localtime){const O=(A=this.nativeDate)!=null?A:new Date(0),k=new Date(0);return k.setUTCFullYear((H=e.year)!=null?H:O.getUTCFullYear(),(I=e.month)!=null?I:O.getUTCMonth(),(E=e.day)!=null?E:O.getUTCDate()),k.setUTCHours((P=e.hour)!=null?P:O.getUTCHours(),(R=e.minute)!=null?R:O.getUTCMinutes(),(W=e.second)!=null?W:O.getUTCSeconds(),(j=e.millisecond)!=null?j:O.getUTCMilliseconds()),this.nativeDate=k,this}const n=!D(t,"hour","minute","second","millisecond"),u=n?"later":this.disambiguation,s=(x=this.nativeDate)!=null?x:new Date(0,0),r=new Date(ut.getTime()),i={year:(L=e.year)!=null?L:s.getFullYear(),month:(B=e.month)!=null?B:s.getMonth(),day:(q=e.day)!=null?q:s.getDate(),hour:(z=e.hour)!=null?z:n?0:s.getHours(),minute:(Z=e.minute)!=null?Z:n?0:s.getMinutes(),second:(Q=e.second)!=null?Q:n?0:s.getSeconds(),millisecond:(G=e.millisecond)!=null?G:n?0:s.getMilliseconds()};r.setFullYear(i.year,i.month,i.day),r.setHours(i.hour,i.minute,i.second,i.millisecond);const m=r.getTime(),y=new Date(m);y.setDate(r.getDate()+1);const l=new Date(m);l.setDate(r.getDate()-1);const f=y.getTimezoneOffset()-l.getTimezoneOffset();if(u==="compatible"||f===0)return this.nativeDate=r,this;const g=i.year*1e8+i.month*1e6+i.day*1e4+i.hour*100+i.minute<r.getFullYear()*1e8+r.getMonth()*1e6+r.getDate()*1e4+r.getHours()*100+r.getMinutes(),b=new Date(new Date(m).setUTCMinutes(r.getUTCMinutes()+f)),it=b.getHours()===r.getHours()&&b.getMinutes()===r.getMinutes();if(!g&&!it)return this.nativeDate=r,this;if(u==="reject")throw new RangeError(`Requested local time ${i} is ambiguous.`);return this.nativeDate=u==="later"?r:b,this}const Tt=new RegExp("^(\\d{4})(?:[-/]?([0-2]?\\d)(?:[-/]?([0-3]?\\d))?)?(?:[T\\s]([0-2]?\\d)(?::([0-5]?\\d)?(?::([0-6]?\\d)?(?:[.:](\\d{1,3})?\\d*)?)?)?)?(Z|[-+]\\d{2}:?\\d{2})?$");function vt(t){var l;const e=t.trim().toUpperCase(),n=e.match(Tt);if(!n)throw RangeError(`Failed to parse '${t}'. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);const u=n[4]!==void 0,[s,r,i,m]=[+n[1],+n[2]||1,+n[3]||1,n[8]],y=new Date(e);if(!tt(y))throw RangeError(`Failed to parse '${t}' by Date. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);return m?this.nativeDate=y:u?this.set({year:s,month:r,day:i,hour:+n[4]||0,minute:+n[5]||0,second:+n[6]||0,millisecond:+((l=n[7])==null?void 0:l.padStart(3,"0"))||0}):this.set({year:s,month:r,day:i}),this}const p=(t,e)=>String(t).padStart(e,"0");o.prototype.toString=function(){if(this[c].localtime){const t=this[c].nativeDate,e=-t.getTimezoneOffset(),n=Math.abs(e);return`${p(t.getFullYear(),4)}-${p(t.getMonth()+1,2)}-${p(t.getDate(),2)}T${p(t.getHours(),2)}:${p(t.getMinutes(),2)}:${p(t.getSeconds(),2)}.${p(t.getMilliseconds(),3)}${e>=0?"+":"-"}${p(Math.trunc(n/v),2)}:${p(n%v,2)}`}return this[c].nativeDate.toISOString()};o.prototype.valueOf=function(){return this[c].nativeDate.valueOf()};o.prototype.clone=function(...t){return new o(this,...t)};o.prototype.context=function(t){return w(t)?this.clone(t):{localtime:this[c].localtime,disambiguation:this[c].disambiguation}};o.prototype.nativeDate=function(){return new Date(this[c].nativeDate.getTime())};o.prototype.offset=function(){return this[c].localtime?-this[c].nativeDate.getTimezoneOffset():0};o.prototype.localtime=function(t){return w(t)?this.clone({localtime:t}):this[c].localtime};o.prototype.disambiguation=function(t){return w(t)?this.clone({disambiguation:t}):this[c].disambiguation};o.prototype.valid=function(){return this[c].valid()};o.prototype.numeric=function(){return this[c].nativeDate.getTime()};o.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day(),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond()}};o.prototype.toArray=function(){return[this.year(),this.month(),this.day(),this.hour(),this.minute(),this.second(),this.millisecond()]};o.prototype.toDate=function(...t){return new a(this.clone(...t))};o.prototype.asUtc=function(){return this.clone({localtime:!1})};o.prototype.asLocaltime=function(){return this.clone({localtime:!0})};for(const[t,e,n]of[["year","FullYear",0],["month","Month",1],["day","Date",0],["hour","Hours",0],["minute","Minutes",0],["second","Seconds",0],["millisecond","Milliseconds",0]])o.prototype[t]=function(u){return w(u)?this.clone({[t]:u}):this[c].getNative(e)+n};o.prototype.dayOfWeek=function(){return 1+(this[c].getNative("Day")-1+T)%T};o.prototype.dayOfYear=function(){const t=this.toDate();return 1+t-t.startOfYear()};o.prototype.weekOfYear=function(){const t=this.toDate(),e=t.day(t.day()-t.dayOfWeek()+M),n=e.startOfYear(),u=n.dayOfWeek()===M?n:n.day(1+(M-n.dayOfWeek()+T)%T);return 1+Math.ceil((e-u)/T)};o.prototype.yearOfWeek=function(){const t=this.toDate();return t.day(t.day()-t.dayOfWeek()+M).year()};o.prototype.isLeapYear=function(){const t=this.year();return t%4===0&&(t%100!==0||t%400===0)};o.prototype.hasDstInYear=function(){if(!this[c].localtime)return!1;const t=this.offset();return[3,6,9,12].map(e=>this.month(e).offset()).some(e=>e!==t)};o.prototype.isInDst=function(){if(!this[c].localtime)return!1;const t=Array.from({length:12},(u,s)=>this.month(s+1).offset()),e=Math.min(...t),n=Math.max(...t);return e!==n&&this.offset()===n};o.prototype.isDstTransitionDay=function(){return this[c].localtime?this.minutesInDay()!==U:!1};o.prototype.minutesInDay=function(){if(!this[c].localtime)return U;const t=this.context({disambiguation:"later"}).startOfDay(),e=t.plus({day:1}).startOfDay();return t.day()===e.day()?U:(e-t)/lt};o.prototype.daysInMonth=function(){const t=[31,28,31,30,31,30,31,31,30,31,30,31],e=this.month();return t[e-1]+(this.isLeapYear()&&e===2?1:0)};o.prototype.daysInYear=function(){return this.isLeapYear()?366:365};o.prototype.weeksInYear=function(){const t=this.toDate({month:12,day:31}),e=t.minus({year:1});return t.dayOfWeek()===M||e.dayOfWeek()===et?53:52};for(const[t,e]of[["Year",{month:1,day:1,hour:0,minute:0,second:0,millisecond:0}],["Month",{day:1,hour:0,minute:0,second:0,millisecond:0}],["Hour",{minute:0,second:0,millisecond:0}],["Minute",{second:0,millisecond:0}],["Second",{millisecond:0}]])o.prototype[`startOf${t}`]=function(){return this.clone(e)};o.prototype.startOfDay=function(){const t=this.clone({disambiguation:"later"},{hour:0,minute:0,second:0,millisecond:0}).numeric();return this.clone(t)};o.prototype.isSame=function(t){return+this==+t};o.prototype.isBefore=function(t){return this<t};o.prototype.isAfter=function(t){return this>t};o.prototype.isSameOrBefore=function(t){return this<=t};o.prototype.isSameOrAfter=function(t){return this>=t};o.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t};o.prototype.plus=function(...t){return nt.call(this,1,...t)};o.prototype.minus=function(...t){return nt.call(this,-1,...t)};function nt(t,...e){var m,y;const n=e[0],u=e[1];if(Number.isFinite(n)&&!Number.isFinite(u))return this.clone(this.numeric()+n);let s=null;if(S(n)){if(!Y(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");s=n}else if(Number.isFinite(n)||Array.isArray(n)){const l=e.flat(),f=l.filter(g=>Number.isSafeInteger(g));if(f.length!==l.length)throw RangeError("Should be safe integers");if(f.length>7)throw RangeError("Too many numbers");s={year:f[0],month:f[1],day:f[2],hour:f[3],minute:f[4],second:f[5],millisecond:f[6]}}else throw TypeError();const r=this.nativeDate(),i=this[c].localtime?"":"UTC";if(D(s,"year")||D(s,"month")){const l=this.year()+t*((m=s.year)!=null?m:0),f=this.month()+t*((y=s.month)!=null?y:0),g=new Date(r.getTime());g[`set${i}FullYear`](l,f,0);const b=g[`get${i}Date`]();b<this.day()?r[`set${i}FullYear`](l,g[`get${i}Month`](),b):r[`set${i}FullYear`](l,f-1)}D(s,"day")&&r[`set${i}Date`](r[`get${i}Date`]()+t*s.day);for(const[l,f]of[["hour","Hours"],["minute","Minutes"],["second","Seconds"],["millisecond","Milliseconds"]])!D(s,l)||s[l]==null||r[`setUTC${f}`](r[`getUTC${f}`]()+t*s[l]);return this.clone(r)}const h=Symbol();function a(...t){if(!new.target)return new a(...t);const e={datetime:null};this[h]=e;let n=null;t[0]instanceof a?n=t.shift().toDatetime():t[0]instanceof o&&(n=t.shift());const u=t[0],s=t[1];return Number.isFinite(u)&&!Number.isFinite(s)&&(t[0]=Math.floor(u)*C),n?n=n.clone(...t):n=$(...t),e.datetime=n.startOfDay(),this}a.prototype.toString=function(){return this[h].datetime.toString().substring(0,10)};a.prototype.valueOf=function(){return this[h].datetime/C};a.prototype.valid=function(){return this[h].datetime.valid()};a.prototype.clone=function(...t){return new a(this,...t)};a.prototype.toDatetime=function(){return $(this[h].datetime.toArray())};a.prototype.numeric=function(){return this[h].datetime.numeric()/C};a.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day()}};a.prototype.toArray=function(){return[this.year(),this.month(),this.day()]};a.prototype.startOfYear=function(){return new a(this[h].datetime.startOfYear())};a.prototype.startOfMonth=function(){return new a(this[h].datetime.startOfMonth())};a.prototype.startOfDay=function(){return this[h].datetime.clone()};for(const t of["year","month","day"])a.prototype[t]=function(e){return w(e)?new a(this[h].datetime[t](e)):this[h].datetime[t]()};for(const t of["dayOfWeek","dayOfYear","weekOfYear","yearOfWeek","isLeapYear","daysInMonth","daysInYear","weeksInYear"])a.prototype[t]=function(){return this[h].datetime[t]()};for(const t of["minutesInDay","hasDstInYear","isDstTransitionDay"])a.prototype[t]=function(){return $({disambiguation:"later"},this[h].datetime.toArray().slice(0,3))[t]()};a.prototype.endOfYear=function(){return this.clone({month:12,day:31})};a.prototype.endOfMonth=function(){return this.clone({day:this.daysInMonth()})};a.prototype.isSame=function(t){return+this==+t};a.prototype.isBefore=function(t){return this<t};a.prototype.isAfter=function(t){return this>t};a.prototype.isSameOrBefore=function(t){return this<=t};a.prototype.isSameOrAfter=function(t){return this>=t};a.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t};a.prototype.plus=function(...t){return ot.call(this,1,...t)};a.prototype.minus=function(...t){return ot.call(this,-1,...t)};function ot(t,...e){var i,m,y;const n=e[0],u=e[1],s=this[h].datetime;if(Number.isFinite(n)&&!Number.isFinite(u))return s.plus({day:t*n}).toDate();let r=null;if(S(n)&&Y(n))r={year:t*((i=n.year)!=null?i:0),month:t*((m=n.month)!=null?m:0),day:t*((y=n.day)!=null?y:0)};else if(Number.isFinite(n)){if(e.length>3)throw RangeError("Too many arguments");r={year:t*n,month:t*u,day:t*arg2}}else if(Array.isArray(n)){if(n.length>3)throw RangeError("Too many elements");r={year:t*n[0],month:t*n[1],day:t*n[2]}}else throw TypeError();return s.plus(r).toDate()}exports.qrono=$;
1
+ "use strict";var rt=Object.defineProperty;var Q=Object.getOwnPropertySymbols;var st=Object.prototype.hasOwnProperty,at=Object.prototype.propertyIsEnumerable;var G=(t,e,n)=>e in t?rt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,N=(t,e)=>{for(var n in e||(e={}))st.call(e,n)&&G(t,n,e[n]);if(Q)for(var n of Q(e))at.call(e,n)&&G(t,n,e[n]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ut=new Date(1915,0,1,12,0,0,0),b=7,K=24,v=60,k=v*K,V=60,ct=V*v,ft=ct*K,_=1e3,ht=V*_,J=ft*_;function p(t,...e){return e.flat().some(t.hasOwnProperty,t)}function X(t){return Object.entries(t).filter(([,e])=>!lt(e)).map(([e])=>e)}function Y(t){return t!==void 0}function lt(t){return t instanceof Function}function yt(t){return typeof t=="string"||t instanceof String}function T(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function tt(t){return!Number.isNaN(t.getTime())}function S(t){return p(t,["year","month","day","hour","minute","second","millisecond"])}const F=o;o.date=a;const M={localtime:!1,disambiguation:"compatible"};o.context=function(t){if(Y(t)){for(const e of X(M))p(t,e)&&(M[e]=t[e]);return this}return N({},M)};const dt=1,mt=2,et=3,w=4,pt=5,Dt=6,gt=7;Object.assign(o,{monday:dt,tuesday:mt,wednesday:et,thursday:w,friday:pt,saturday:Dt,sunday:gt});const f=Symbol();function o(...t){var s;if(!new.target)return new o(...t);const e={nativeDate:null,localtime:!1,disambiguation:"compatible",set:Mt,parse:Tt,valid:Ot,context:wt,getNative:bt};if(this[f]=e,e.context(M),t[0]instanceof o){const i=t.shift();e.nativeDate=i.nativeDate(),e.context(i.context())}T(t[0])&&!S(t[0])&&e.context(t.shift());const n=t[0],u=t[1];if(n==null)(s=e.nativeDate)!=null||(e.nativeDate=new Date);else if(n instanceof Date)e.nativeDate=new Date(n.getTime());else if(yt(n))e.parse(n);else if(T(n)){if(!S(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");e.set(n)}else if(Number.isFinite(n)&&!Number.isFinite(u))e.nativeDate=new Date(n);else if(Number.isFinite(n)||Array.isArray(n)){const i=t.flat(),r=i.filter(l=>Number.isSafeInteger(l));if(r.length!==i.length)throw RangeError("Should be safe integers");if(r.length>7)throw RangeError("Too many numbers");e.set({year:r[0],month:r[1],day:r[2],hour:r[3],minute:r[4],second:r[5],millisecond:r[6]})}else throw TypeError(`Invalid argument ${t}`);return this}function Ot(){return tt(this.nativeDate)}function wt(t){if(t){for(const e of X(M))p(t,e)&&(this[e]=t[e]);return this}}function bt(t){return this.nativeDate[`get${this.localtime?"":"UTC"}${t}`]()}function Mt(t){var C,A,H,I,U,E,P,R,W,j,x,B,L,q,z,Z;const e=N({},t);if(e.month=e.month&&e.month-1,!this.localtime){const g=(C=this.nativeDate)!=null?C:new Date(0),$=new Date(0);return $.setUTCFullYear((A=e.year)!=null?A:g.getUTCFullYear(),(H=e.month)!=null?H:g.getUTCMonth(),(I=e.day)!=null?I:g.getUTCDate()),$.setUTCHours((U=e.hour)!=null?U:g.getUTCHours(),(E=e.minute)!=null?E:g.getUTCMinutes(),(P=e.second)!=null?P:g.getUTCSeconds(),(R=e.millisecond)!=null?R:g.getUTCMilliseconds()),this.nativeDate=$,this}const n=!p(t,"hour","minute","second","millisecond"),u=n?"later":this.disambiguation,s=(W=this.nativeDate)!=null?W:new Date(0,0),i=new Date(ut.getTime()),r={year:(j=e.year)!=null?j:s.getFullYear(),month:(x=e.month)!=null?x:s.getMonth(),day:(B=e.day)!=null?B:s.getDate(),hour:(L=e.hour)!=null?L:n?0:s.getHours(),minute:(q=e.minute)!=null?q:n?0:s.getMinutes(),second:(z=e.second)!=null?z:n?0:s.getSeconds(),millisecond:(Z=e.millisecond)!=null?Z:n?0:s.getMilliseconds()};i.setFullYear(r.year,r.month,r.day),i.setHours(r.hour,r.minute,r.second,r.millisecond);const l=i.getTime(),d=new Date(l);d.setDate(i.getDate()+1);const h=new Date(l);h.setDate(i.getDate()-1);const c=d.getTimezoneOffset()-h.getTimezoneOffset();if(u==="compatible"||c===0)return this.nativeDate=i,this;const D=r.year*1e8+r.month*1e6+r.day*1e4+r.hour*100+r.minute<i.getFullYear()*1e8+i.getMonth()*1e6+i.getDate()*1e4+i.getHours()*100+i.getMinutes(),O=new Date(new Date(l).setUTCMinutes(i.getUTCMinutes()+c)),it=O.getHours()===i.getHours()&&O.getMinutes()===i.getMinutes();if(!D&&!it)return this.nativeDate=i,this;if(u==="reject")throw new RangeError(`Requested local time ${r} is ambiguous.`);return this.nativeDate=u==="later"?i:O,this}const vt=new RegExp("^(\\d{4})(?:[-/]?([0-2]?\\d)(?:[-/]?([0-3]?\\d))?)?(?:[T\\s]([0-2]?\\d)(?::([0-5]?\\d)?(?::([0-6]?\\d)?(?:[.:](\\d{1,3})?\\d*)?)?)?)?(Z|[-+]\\d{2}:?\\d{2})?$");function Tt(t){var h;const e=t.trim().toUpperCase(),n=e.match(vt);if(!n)throw RangeError(`Failed to parse '${t}'. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);const u=n[4]!==void 0,[s,i,r,l]=[+n[1],+n[2]||1,+n[3]||1,n[8]],d=new Date(e);if(!tt(d))throw RangeError(`Failed to parse '${t}' by Date. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);return l?this.nativeDate=d:u?this.set({year:s,month:i,day:r,hour:+n[4]||0,minute:+n[5]||0,second:+n[6]||0,millisecond:+((h=n[7])==null?void 0:h.padStart(3,"0"))||0}):this.set({year:s,month:i,day:r}),this}const m=(t,e)=>String(t).padStart(e,"0");o.prototype.toString=function(){if(this[f].localtime){const t=this[f].nativeDate,e=-t.getTimezoneOffset(),n=Math.abs(e);return`${m(t.getFullYear(),4)}-${m(t.getMonth()+1,2)}-${m(t.getDate(),2)}T${m(t.getHours(),2)}:${m(t.getMinutes(),2)}:${m(t.getSeconds(),2)}.${m(t.getMilliseconds(),3)}${e>=0?"+":"-"}${m(Math.trunc(n/v),2)}:${m(n%v,2)}`}return this[f].nativeDate.toISOString()};o.prototype.valueOf=function(){return this[f].nativeDate.valueOf()};o.prototype.clone=function(...t){return new o(this,...t)};o.prototype.context=function(t){return Y(t)?this.clone(t):{localtime:this[f].localtime,disambiguation:this[f].disambiguation}};o.prototype.nativeDate=function(){return new Date(this[f].nativeDate.getTime())};o.prototype.offset=function(){return this[f].localtime?-this[f].nativeDate.getTimezoneOffset():0};o.prototype.valid=function(){return this[f].valid()};o.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day(),hour:this.hour(),minute:this.minute(),second:this.second(),millisecond:this.millisecond()}};o.prototype.toArray=function(){return[this.year(),this.month(),this.day(),this.hour(),this.minute(),this.second(),this.millisecond()]};o.prototype.toDate=function(...t){return new a(this.clone(...t))};for(const[t,e,n]of[["year","FullYear",0],["month","Month",1],["day","Date",0],["hour","Hours",0],["minute","Minutes",0],["second","Seconds",0],["millisecond","Milliseconds",0]])o.prototype[t]=function(u){return Y(u)?this.clone({[t]:u}):this[f].getNative(e)+n};o.prototype.dayOfWeek=function(){return 1+(this[f].getNative("Day")-1+b)%b};o.prototype.dayOfYear=function(){const t=this.toDate();return 1+t-t.startOfYear()};o.prototype.weekOfYear=function(){const t=this.toDate(),e=t.day(t.day()-t.dayOfWeek()+w),n=e.startOfYear(),u=n.dayOfWeek()===w?n:n.day(1+(w-n.dayOfWeek()+b)%b);return 1+Math.ceil((e-u)/b)};o.prototype.yearOfWeek=function(){const t=this.toDate();return t.day(t.day()-t.dayOfWeek()+w).year()};o.prototype.isLeapYear=function(){const t=this.year();return t%4===0&&(t%100!==0||t%400===0)};o.prototype.hasDstInYear=function(){if(!this[f].localtime)return!1;const t=this.offset();return[3,6,9,12].map(e=>this.month(e).offset()).some(e=>e!==t)};o.prototype.isInDst=function(){if(!this[f].localtime)return!1;const t=Array.from({length:12},(u,s)=>this.month(s+1).offset()),e=Math.min(...t),n=Math.max(...t);return e!==n&&this.offset()===n};o.prototype.isDstTransitionDay=function(){return this[f].localtime?this.minutesInDay()!==k:!1};o.prototype.minutesInDay=function(){if(!this[f].localtime)return k;const t=this.context({disambiguation:"later"}).startOfDay(),e=t.plus({day:1}).startOfDay();return t.day()===e.day()?k:(e-t)/ht};o.prototype.daysInMonth=function(){const t=[31,28,31,30,31,30,31,31,30,31,30,31],e=this.month();return t[e-1]+(this.isLeapYear()&&e===2?1:0)};o.prototype.daysInYear=function(){return this.isLeapYear()?366:365};o.prototype.weeksInYear=function(){const t=this.toDate({month:12,day:31}),e=t.minus({year:1});return t.dayOfWeek()===w||e.dayOfWeek()===et?53:52};for(const[t,e]of[["Year",{month:1,day:1,hour:0,minute:0,second:0,millisecond:0}],["Month",{day:1,hour:0,minute:0,second:0,millisecond:0}],["Hour",{minute:0,second:0,millisecond:0}],["Minute",{second:0,millisecond:0}],["Second",{millisecond:0}]])o.prototype[`startOf${t}`]=function(){return this.clone(e)};o.prototype.startOfDay=function(){const t=this.clone({disambiguation:"later"},{hour:0,minute:0,second:0,millisecond:0}).valueOf();return this.clone(t)};o.prototype.isSame=function(t){return+this==+t};o.prototype.isBefore=function(t){return this<t};o.prototype.isAfter=function(t){return this>t};o.prototype.isSameOrBefore=function(t){return this<=t};o.prototype.isSameOrAfter=function(t){return this>=t};o.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t};o.prototype.plus=function(...t){return nt.call(this,1,...t)};o.prototype.minus=function(...t){return nt.call(this,-1,...t)};function nt(t,...e){var l,d;const n=e[0],u=e[1];if(Number.isFinite(n)&&!Number.isFinite(u))return this.clone(this.valueOf()+n);let s=null;if(T(n)){if(!S(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");s=n}else if(Number.isFinite(n)||Array.isArray(n)){const h=e.flat(),c=h.filter(D=>Number.isSafeInteger(D));if(c.length!==h.length)throw RangeError("Should be safe integers");if(c.length>7)throw RangeError("Too many numbers");s={year:c[0],month:c[1],day:c[2],hour:c[3],minute:c[4],second:c[5],millisecond:c[6]}}else throw TypeError();const i=this.nativeDate(),r=this[f].localtime?"":"UTC";if(p(s,"year")||p(s,"month")){const h=this.year()+t*((l=s.year)!=null?l:0),c=this.month()+t*((d=s.month)!=null?d:0),D=new Date(i.getTime());D[`set${r}FullYear`](h,c,0);const O=D[`get${r}Date`]();O<this.day()?i[`set${r}FullYear`](h,D[`get${r}Month`](),O):i[`set${r}FullYear`](h,c-1)}p(s,"day")&&i[`set${r}Date`](i[`get${r}Date`]()+t*s.day);for(const[h,c]of[["hour","Hours"],["minute","Minutes"],["second","Seconds"],["millisecond","Milliseconds"]])!p(s,h)||s[h]==null||i[`setUTC${c}`](i[`getUTC${c}`]()+t*s[h]);return this.clone(i)}const y=Symbol();function a(...t){if(!new.target)return new a(...t);const e={datetime:null};this[y]=e;let n=null;t[0]instanceof a?n=t.shift().toDatetime():t[0]instanceof o&&(n=t.shift());const u=t[0],s=t[1];return Number.isFinite(u)&&!Number.isFinite(s)&&(t[0]=Math.floor(u)*J),n?n=n.clone(...t):n=F(...t),e.datetime=n.startOfDay(),this}a.prototype.toString=function(){return this[y].datetime.toString().substring(0,10)};a.prototype.valueOf=function(){return this[y].datetime/J};a.prototype.valid=function(){return this[y].datetime.valid()};a.prototype.clone=function(...t){return new a(this,...t)};a.prototype.toDatetime=function(){return F(this[y].datetime.toArray())};a.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day()}};a.prototype.toArray=function(){return[this.year(),this.month(),this.day()]};a.prototype.startOfYear=function(){return new a(this[y].datetime.startOfYear())};a.prototype.startOfMonth=function(){return new a(this[y].datetime.startOfMonth())};for(const t of["year","month","day"])a.prototype[t]=function(e){return Y(e)?new a(this[y].datetime[t](e)):this[y].datetime[t]()};for(const t of["dayOfWeek","dayOfYear","weekOfYear","yearOfWeek","isLeapYear","daysInMonth","daysInYear","weeksInYear"])a.prototype[t]=function(){return this[y].datetime[t]()};for(const t of["minutesInDay","hasDstInYear","isDstTransitionDay"])a.prototype[t]=function(){return F({disambiguation:"later"},this[y].datetime.toArray().slice(0,3))[t]()};a.prototype.endOfYear=function(){return this.clone({month:12,day:31})};a.prototype.endOfMonth=function(){return this.clone({day:this.daysInMonth()})};a.prototype.isSame=function(t){return+this==+t};a.prototype.isBefore=function(t){return this<t};a.prototype.isAfter=function(t){return this>t};a.prototype.isSameOrBefore=function(t){return this<=t};a.prototype.isSameOrAfter=function(t){return this>=t};a.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t};a.prototype.plus=function(...t){return ot.call(this,1,...t)};a.prototype.minus=function(...t){return ot.call(this,-1,...t)};function ot(t,...e){var r,l,d;const n=e[0],u=e[1],s=this[y].datetime;if(Number.isFinite(n)&&!Number.isFinite(u))return s.plus({day:t*n}).toDate();let i=null;if(T(n)&&S(n))i={year:t*((r=n.year)!=null?r:0),month:t*((l=n.month)!=null?l:0),day:t*((d=n.day)!=null?d:0)};else if(Number.isFinite(n)){if(e.length>3)throw RangeError("Too many arguments");i={year:t*n,month:t*u,day:t*arg2}}else if(Array.isArray(n)){if(n.length>3)throw RangeError("Too many elements");i={year:t*n[0],month:t*n[1],day:t*n[2]}}else throw TypeError();return s.plus(i).toDate()}exports.qrono=F;
2
2
  //# sourceMappingURL=qrono.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"qrono.cjs","sources":["../src/helpers.js","../src/qrono.js"],"sourcesContent":["export const epoch = new Date(0)\n\n/**\n * When creating or updating a local time, both `Date.setFullYear` and `Date.setHours` are used.\n * Noon is used as the initial reference point to avoid the time after `setFullYear`\n * from falling into an ambiguous DST period. Historically, DST transitions in all countries\n * have been scheduled around midnight, and it should be the same in the future.\n * The reason for selecting 1915 as the initial value is as follows.\n * Since DST was first established in 1916, the initial value should be set to a year prior to that.\n * If a year too far in the past is chosen, it may correspond to a period when time zones were not yet\n * precisely defined in some regions, which could result in unexpected timezone offsets.\n */\nexport const initialSafeDate = new Date(1915, 0, 1, 12, 0, 0, 0)\n\nexport const daysPerWeek = 7\nexport const hoursPerDay = 24\nexport const hoursPerWeek = hoursPerDay * daysPerWeek\nexport const minutesPerHour = 60\nexport const minutesPerDay = minutesPerHour * hoursPerDay\nexport const minutesPerWeek = minutesPerDay * daysPerWeek\nexport const secondsPerMinute = 60\nexport const secondsPerHour = secondsPerMinute * minutesPerHour\nexport const secondsPerDay = secondsPerHour * hoursPerDay\nexport const secondsPerWeek = secondsPerDay * daysPerWeek\nexport const millisecondsPerSecond = 1000\nexport const millisecondsPerMinute = secondsPerMinute * millisecondsPerSecond\nexport const millisecondsPerHour = secondsPerHour * millisecondsPerSecond\nexport const millisecondsPerDay = secondsPerDay * millisecondsPerSecond\nexport const millisecondsPerWeek = secondsPerWeek * millisecondsPerSecond\n\nexport function has(object, ...keys) {\n return keys.flat().some(object.hasOwnProperty, object)\n}\n\nexport function fields(object) {\n return Object.entries(object)\n .filter(([, value]) => !isFunction(value))\n .map(([key]) => key)\n}\n\nexport function given(arg) {\n return arg !== undefined\n}\n\nexport function isFunction(a) {\n return a instanceof Function\n}\n\nexport function isString(a) {\n return typeof a === 'string' || a instanceof String\n}\n\nexport function isObject(a) {\n return a !== null && typeof a === 'object' && a.constructor === Object\n}\n\nexport function isValidDate(date) {\n return !Number.isNaN(date.getTime())\n}\n\nexport function hasDateField(object) {\n return has(object, ['year', 'month', 'day'])\n}\n\nexport function hasTimeField(object) {\n return has(object, ['hour', 'minute', 'second', 'millisecond'])\n}\n\nexport function hasDatetimeField(object) {\n return has(object, [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ])\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n disambiguation: 'compatible',\n}\n\nfor (const key of fields(defaultContext)) {\n Qrono[key] = function (arg) {\n if (given(arg)) {\n defaultContext[key] = arg\n return this\n }\n return defaultContext[key]\n }\n}\n\nQrono.context = function (context) {\n if (given(context)) {\n for (const key of fields(defaultContext)) {\n if (!has(context, key)) {\n continue\n }\n defaultContext[key] = context[key]\n }\n return this\n }\n return { ...defaultContext }\n}\n\nQrono.asUtc = function () {\n defaultContext.localtime = false\n return this\n}\n\nQrono.asLocaltime = function () {\n defaultContext.localtime = true\n return this\n}\n\nconst monday = 1\nconst tuesday = 2\nconst wednesday = 3\nconst thursday = 4\nconst friday = 5\nconst saturday = 6\nconst sunday = 7\n\nObject.assign(Qrono, {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n})\n\n// -----------------------------------------------------------------------------\n// Constructor\n// -----------------------------------------------------------------------------\nconst internal = Symbol()\n\nfunction Qrono(...args) {\n if (!new.target) {\n return new Qrono(...args)\n }\n const self = {\n // properties\n nativeDate: null,\n localtime: false,\n disambiguation: 'compatible',\n // methods\n set,\n parse,\n valid,\n context,\n getNative,\n }\n this[internal] = self\n\n // Construction\n self.context(defaultContext)\n if (args[0] instanceof Qrono) {\n const source = args.shift()\n for (const key of fields(self)) {\n self[key] = source[key]()\n }\n }\n if (isObject(args[0]) && !hasDatetimeField(args[0])) {\n self.context(args.shift())\n }\n const first = args[0]\n const second = args[1]\n if (first == null) {\n self.nativeDate ??= new Date()\n } else if (first instanceof Date) {\n self.nativeDate = new Date(first.getTime())\n } else if (isString(first)) {\n self.parse(first)\n } else if (isObject(first)) {\n if (!hasDatetimeField(first)) {\n throw RangeError(\n 'Missing time field' +\n ' (year, minute, day, hour, minute, second or millisecond)'\n )\n }\n self.set(first)\n } else if (Number.isFinite(first) && !Number.isFinite(second)) {\n self.nativeDate = new Date(first)\n } else if (Number.isFinite(first) || Array.isArray(first)) {\n const flat = args.flat()\n const values = flat.filter(v => Number.isSafeInteger(v))\n if (values.length !== flat.length) {\n throw RangeError('Should be safe integers')\n }\n if (values.length > 7) {\n throw RangeError('Too many numbers')\n }\n self.set({\n year: values[0],\n month: values[1],\n day: values[2],\n hour: values[3],\n minute: values[4],\n second: values[5],\n millisecond: values[6],\n })\n } else {\n throw TypeError(`Invalid argument ${args}`)\n }\n return this\n}\n\n// -----------------------------------------------------------------------------\n// Private methods\n// -----------------------------------------------------------------------------\nfunction valid() {\n return isValidDate(this.nativeDate)\n}\n\nfunction context(context) {\n if (!context) {\n return\n }\n for (const key of fields(defaultContext)) {\n if (has(context, key)) {\n this[key] = context[key]\n }\n }\n return this\n}\n\nfunction getNative(name) {\n return this.nativeDate[`get${this.localtime ? '' : 'UTC'}${name}`]()\n}\n\nfunction set(values) {\n const args = { ...values }\n args.month = args.month && args.month - 1\n if (!this.localtime) {\n const baseDate = this.nativeDate ?? new Date(0)\n const newDate = new Date(0)\n newDate.setUTCFullYear(\n args.year ?? baseDate.getUTCFullYear(),\n args.month ?? baseDate.getUTCMonth(),\n args.day ?? baseDate.getUTCDate()\n )\n newDate.setUTCHours(\n args.hour ?? baseDate.getUTCHours(),\n args.minute ?? baseDate.getUTCMinutes(),\n args.second ?? baseDate.getUTCSeconds(),\n args.millisecond ?? baseDate.getUTCMilliseconds()\n )\n this.nativeDate = newDate\n return this\n }\n const dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const disambig = dateOnly ? 'later' : this.disambiguation\n const baseDate = this.nativeDate ?? new Date(0, 0)\n const newDate = new Date(initialSafeDate.getTime())\n const requested = {\n year: args.year ?? baseDate.getFullYear(),\n month: args.month ?? baseDate.getMonth(),\n day: args.day ?? baseDate.getDate(),\n hour: args.hour ?? (dateOnly ? 0 : baseDate.getHours()),\n minute: args.minute ?? (dateOnly ? 0 : baseDate.getMinutes()),\n second: args.second ?? (dateOnly ? 0 : baseDate.getSeconds()),\n millisecond:\n args.millisecond ?? (dateOnly ? 0 : baseDate.getMilliseconds()),\n }\n newDate.setFullYear(requested.year, requested.month, requested.day)\n newDate.setHours(\n requested.hour,\n requested.minute,\n requested.second,\n requested.millisecond\n )\n // Compute the offset-delta between the day before and after.\n const numeric = newDate.getTime()\n const nextDay = new Date(numeric)\n nextDay.setDate(newDate.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(newDate.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n // No DST transition nearby — nothing to resolve.\n if (disambig === 'compatible' || adjust === 0) {\n this.nativeDate = newDate\n return this\n }\n // Detect whether the constructed Date landed in a DST gap (missing time).\n // In a gap, JavaScript silently shifts the time forward.\n const isGap =\n requested.year * 1e8 +\n requested.month * 1e6 +\n requested.day * 1e4 +\n requested.hour * 1e2 +\n requested.minute <\n newDate.getFullYear() * 1e8 +\n newDate.getMonth() * 1e6 +\n newDate.getDate() * 1e4 +\n newDate.getHours() * 1e2 +\n newDate.getMinutes()\n // Compute the standard-time candidate.\n // Verify the candidate actually preserves the original local fields.\n // If it doesn't, the time isn't truly in an overlap.\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(newDate.getUTCMinutes() + adjust)\n )\n const isOverlap =\n adjustedUTC.getHours() === newDate.getHours() &&\n adjustedUTC.getMinutes() === newDate.getMinutes()\n if (!isGap && !isOverlap) {\n this.nativeDate = newDate\n return this\n }\n if (disambig === 'reject') {\n throw new RangeError(`Requested local time ${requested} is ambiguous.`)\n }\n this.nativeDate = disambig === 'later' ? newDate : adjustedUTC\n return this\n}\n\nconst parsePattern = new RegExp(\n // yyyy[[-|/]MM[[-|/]DD]]\n '^(\\\\d{4})(?:[-/]?([0-2]?\\\\d)(?:[-/]?([0-3]?\\\\d))?)?' +\n // [(T| )HH[:]mm[[:]ss[(.|:)SSS]]]\n '(?:[T\\\\s]([0-2]?\\\\d)(?::([0-5]?\\\\d)?(?::([0-6]?\\\\d)?(?:[.:](\\\\d{1,3})?\\\\d*)?)?)?)?' +\n // [Z|(+|-)hh:mm]\n '(Z|[-+]\\\\d{2}:?\\\\d{2})?$'\n)\n\nfunction parse(str) {\n const text = str.trim().toUpperCase()\n const values = text.match(parsePattern)\n if (!values) {\n throw RangeError(\n `Failed to parse '${str}'.` +\n ' Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]'\n )\n }\n const hasTime = values[4] !== undefined\n const [year, month, day, offset] = [\n +values[1],\n +values[2] || 1,\n +values[3] || 1,\n values[8],\n ]\n const native = new Date(text)\n if (!isValidDate(native)) {\n throw RangeError(\n `Failed to parse '${str}' by Date.` +\n ' Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]'\n )\n }\n if (offset) {\n this.nativeDate = native\n } else if (hasTime) {\n this.set({\n year,\n month,\n day,\n hour: +values[4] || 0,\n minute: +values[5] || 0,\n second: +values[6] || 0,\n millisecond: +values[7]?.padStart(3, '0') || 0,\n })\n } else {\n this.set({ year, month, day })\n }\n return this\n}\n\n// -----------------------------------------------------------------------------\n// Public methods\n// -----------------------------------------------------------------------------\nconst p = (v, n) => String(v).padStart(n, '0')\n\n// Basic\nQrono.prototype.toString = function () {\n if (this[internal].localtime) {\n const t = this[internal].nativeDate\n const offset = -t.getTimezoneOffset()\n const offsetAbs = Math.abs(offset)\n return (\n `${p(t.getFullYear(), 4)}-` +\n `${p(t.getMonth() + 1, 2)}-` +\n `${p(t.getDate(), 2)}T` +\n `${p(t.getHours(), 2)}:` +\n `${p(t.getMinutes(), 2)}:` +\n `${p(t.getSeconds(), 2)}.` +\n `${p(t.getMilliseconds(), 3)}` +\n `${offset >= 0 ? '+' : '-'}` +\n `${p(Math.trunc(offsetAbs / minutesPerHour), 2)}:` +\n `${p(offsetAbs % minutesPerHour, 2)}`\n )\n }\n return this[internal].nativeDate.toISOString()\n}\n\nQrono.prototype.valueOf = function () {\n return this[internal].nativeDate.valueOf()\n}\n\nQrono.prototype.clone = function (...args) {\n return new Qrono(this, ...args)\n}\n\nQrono.prototype.context = function (context) {\n return given(context)\n ? this.clone(context)\n : {\n localtime: this[internal].localtime,\n disambiguation: this[internal].disambiguation,\n }\n}\n\nQrono.prototype.nativeDate = function () {\n return new Date(this[internal].nativeDate.getTime())\n}\n\nQrono.prototype.offset = function () {\n return this[internal].localtime\n ? -this[internal].nativeDate.getTimezoneOffset()\n : 0\n}\n\nQrono.prototype.localtime = function (arg) {\n return given(arg) ? this.clone({ localtime: arg }) : this[internal].localtime\n}\n\nQrono.prototype.disambiguation = function (arg) {\n return given(arg)\n ? this.clone({ disambiguation: arg })\n : this[internal].disambiguation\n}\n\nQrono.prototype.valid = function () {\n return this[internal].valid()\n}\n\n// Transform\nQrono.prototype.numeric = function () {\n return this[internal].nativeDate.getTime()\n}\n\nQrono.prototype.toObject = function () {\n return {\n year: this.year(),\n month: this.month(),\n day: this.day(),\n hour: this.hour(),\n minute: this.minute(),\n second: this.second(),\n millisecond: this.millisecond(),\n }\n}\n\nQrono.prototype.toArray = function () {\n return [\n this.year(),\n this.month(),\n this.day(),\n this.hour(),\n this.minute(),\n this.second(),\n this.millisecond(),\n ]\n}\n\nQrono.prototype.toDate = function (...args) {\n return new QronoDate(this.clone(...args))\n}\n\n// Context\nQrono.prototype.asUtc = function () {\n return this.clone({ localtime: false })\n}\n\nQrono.prototype.asLocaltime = function () {\n return this.clone({ localtime: true })\n}\n\n// Accessor\nfor (const [field, native, offset] of [\n ['year', 'FullYear', 0],\n ['month', 'Month', 1],\n ['day', 'Date', 0],\n ['hour', 'Hours', 0],\n ['minute', 'Minutes', 0],\n ['second', 'Seconds', 0],\n ['millisecond', 'Milliseconds', 0],\n]) {\n Qrono.prototype[field] = function (value) {\n return given(value)\n ? this.clone({ [field]: value })\n : this[internal].getNative(native) + offset\n }\n}\n\n// Getter\nQrono.prototype.dayOfWeek = function () {\n return 1 + ((this[internal].getNative('Day') - 1 + daysPerWeek) % daysPerWeek)\n}\n\nQrono.prototype.dayOfYear = function () {\n const date = this.toDate()\n return 1 + date - date.startOfYear()\n}\n\nQrono.prototype.weekOfYear = function () {\n const date = this.toDate()\n const theThursday = date.day(date.day() - date.dayOfWeek() + thursday)\n const startOfYear = theThursday.startOfYear()\n const firstThursday =\n startOfYear.dayOfWeek() === thursday\n ? startOfYear\n : startOfYear.day(\n 1 + ((thursday - startOfYear.dayOfWeek() + daysPerWeek) % daysPerWeek)\n )\n return 1 + Math.ceil((theThursday - firstThursday) / daysPerWeek)\n}\n\nQrono.prototype.yearOfWeek = function () {\n const date = this.toDate()\n return date.day(date.day() - date.dayOfWeek() + thursday).year()\n}\n\nQrono.prototype.isLeapYear = function () {\n const year = this.year()\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nQrono.prototype.hasDstInYear = function () {\n if (!this[internal].localtime) {\n return false\n }\n const currentOffset = this.offset()\n return [3, 6, 9, 12]\n .map(month => this.month(month).offset())\n .some(offset => offset !== currentOffset)\n}\n\nQrono.prototype.isInDst = function () {\n if (!this[internal].localtime) {\n return false\n }\n const offsets = Array.from({ length: 12 }, (_, index) =>\n this.month(index + 1).offset()\n )\n const minOffset = Math.min(...offsets)\n const maxOffset = Math.max(...offsets)\n return minOffset !== maxOffset && this.offset() === maxOffset\n}\n\nQrono.prototype.isDstTransitionDay = function () {\n if (!this[internal].localtime) {\n return false\n }\n return this.minutesInDay() !== minutesPerDay\n}\n\nQrono.prototype.minutesInDay = function () {\n if (!this[internal].localtime) {\n return minutesPerDay\n }\n const startOfDay = this.context({ disambiguation: 'later' }).startOfDay()\n const nextDay = startOfDay.plus({ day: 1 }).startOfDay()\n if (startOfDay.day() === nextDay.day()) {\n return minutesPerDay\n }\n return (nextDay - startOfDay) / millisecondsPerMinute\n}\n\nQrono.prototype.daysInMonth = function () {\n const days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n const month = this.month()\n return days[month - 1] + (this.isLeapYear() && month === 2 ? 1 : 0)\n}\n\nQrono.prototype.daysInYear = function () {\n return this.isLeapYear() ? 366 : 365\n}\n\nQrono.prototype.weeksInYear = function () {\n const endOfYear = this.toDate({ month: 12, day: 31 })\n const endOfLastYear = endOfYear.minus({ year: 1 })\n if (\n endOfYear.dayOfWeek() === thursday ||\n endOfLastYear.dayOfWeek() === wednesday\n ) {\n return 53\n }\n return 52\n}\n\nfor (const [name, cloneArg] of [\n ['Year', { month: 1, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }],\n ['Month', { day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }],\n ['Hour', { minute: 0, second: 0, millisecond: 0 }],\n ['Minute', { second: 0, millisecond: 0 }],\n ['Second', { millisecond: 0 }],\n]) {\n Qrono.prototype[`startOf${name}`] = function () {\n return this.clone(cloneArg)\n }\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { disambiguation: 'later' },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.isSame = function (another) {\n return +this === +another\n}\nQrono.prototype.isBefore = function (another) {\n return this < another\n}\nQrono.prototype.isAfter = function (another) {\n return this > another\n}\nQrono.prototype.isSameOrBefore = function (another) {\n return this <= another\n}\nQrono.prototype.isSameOrAfter = function (another) {\n return this >= another\n}\nQrono.prototype.isBetween = function (a, b) {\n return (a <= this && this <= b) || (b <= this && this <= a)\n}\n\n// Calculation\nQrono.prototype.plus = function (...args) {\n return plus.call(this, 1, ...args)\n}\n\nQrono.prototype.minus = function (...args) {\n return plus.call(this, -1, ...args)\n}\n\nfunction plus(sign, ...args) {\n const arg0 = args[0]\n const arg1 = args[1]\n if (Number.isFinite(arg0) && !Number.isFinite(arg1)) {\n return this.clone(this.numeric() + arg0)\n }\n let timeFields = null\n if (isObject(arg0)) {\n if (!hasDatetimeField(arg0)) {\n throw RangeError(\n 'Missing time field' +\n ' (year, minute, day, hour, minute, second or millisecond)'\n )\n }\n timeFields = arg0\n } else if (Number.isFinite(arg0) || Array.isArray(arg0)) {\n const flat = args.flat()\n const values = flat.filter(v => Number.isSafeInteger(v))\n if (values.length !== flat.length) {\n throw RangeError('Should be safe integers')\n }\n if (values.length > 7) {\n throw RangeError('Too many numbers')\n }\n timeFields = {\n year: values[0],\n month: values[1],\n day: values[2],\n hour: values[3],\n minute: values[4],\n second: values[5],\n millisecond: values[6],\n }\n } else {\n throw TypeError()\n }\n const date = this.nativeDate()\n const utc = this[internal].localtime ? '' : 'UTC'\n if (has(timeFields, 'year') || has(timeFields, 'month')) {\n const year = this.year() + sign * (timeFields.year ?? 0)\n const month = this.month() + sign * (timeFields.month ?? 0)\n const endOfMonth = new Date(date.getTime())\n endOfMonth[`set${utc}FullYear`](year, month, 0)\n const lastDay = endOfMonth[`get${utc}Date`]()\n if (lastDay < this.day()) {\n date[`set${utc}FullYear`](year, endOfMonth[`get${utc}Month`](), lastDay)\n } else {\n date[`set${utc}FullYear`](year, month - 1)\n }\n }\n if (has(timeFields, 'day')) {\n date[`set${utc}Date`](date[`get${utc}Date`]() + sign * timeFields.day)\n }\n for (const [key, nativeKey] of [\n ['hour', 'Hours'],\n ['minute', 'Minutes'],\n ['second', 'Seconds'],\n ['millisecond', 'Milliseconds'],\n ]) {\n if (!has(timeFields, key) || timeFields[key] == null) {\n continue\n }\n date[`setUTC${nativeKey}`](\n date[`getUTC${nativeKey}`]() + sign * timeFields[key]\n )\n }\n return this.clone(date)\n}\n\n// -----------------------------------------------------------------------------\n// QronoDate Class\n// -----------------------------------------------------------------------------\nconst internalDate = Symbol()\n\nfunction QronoDate(...args) {\n if (!new.target) {\n return new QronoDate(...args)\n }\n const self = { datetime: null }\n this[internalDate] = self\n let source = null\n if (args[0] instanceof QronoDate) {\n source = args.shift().toDatetime()\n } else if (args[0] instanceof Qrono) {\n source = args.shift()\n }\n const first = args[0]\n const second = args[1]\n if (Number.isFinite(first) && !Number.isFinite(second)) {\n args[0] = Math.floor(first) * millisecondsPerDay\n }\n if (source) {\n source = source.clone(...args)\n } else {\n source = qrono(...args)\n }\n self.datetime = source.startOfDay()\n return this\n}\n\nQronoDate.prototype.toString = function () {\n return this[internalDate].datetime.toString().substring(0, 10)\n}\n\nQronoDate.prototype.valueOf = function () {\n return this[internalDate].datetime / millisecondsPerDay\n}\n\nQronoDate.prototype.valid = function () {\n return this[internalDate].datetime.valid()\n}\n\nQronoDate.prototype.clone = function (...args) {\n return new QronoDate(this, ...args)\n}\n\nQronoDate.prototype.toDatetime = function () {\n return qrono(this[internalDate].datetime.toArray())\n}\n\nQronoDate.prototype.numeric = function () {\n return this[internalDate].datetime.numeric() / millisecondsPerDay\n}\n\nQronoDate.prototype.toObject = function () {\n return {\n year: this.year(),\n month: this.month(),\n day: this.day(),\n }\n}\n\nQronoDate.prototype.toArray = function () {\n return [this.year(), this.month(), this.day()]\n}\n\nQronoDate.prototype.startOfYear = function () {\n return new QronoDate(this[internalDate].datetime.startOfYear())\n}\n\nQronoDate.prototype.startOfMonth = function () {\n return new QronoDate(this[internalDate].datetime.startOfMonth())\n}\n\nQronoDate.prototype.startOfDay = function () {\n return this[internalDate].datetime.clone()\n}\nfor (const field of ['year', 'month', 'day']) {\n QronoDate.prototype[field] = function (value) {\n if (given(value)) {\n return new QronoDate(this[internalDate].datetime[field](value))\n }\n return this[internalDate].datetime[field]()\n }\n}\nfor (const method of [\n 'dayOfWeek',\n 'dayOfYear',\n 'weekOfYear',\n 'yearOfWeek',\n 'isLeapYear',\n 'daysInMonth',\n 'daysInYear',\n 'weeksInYear',\n]) {\n QronoDate.prototype[method] = function () {\n return this[internalDate].datetime[method]()\n }\n}\nfor (const method of ['minutesInDay', 'hasDstInYear', 'isDstTransitionDay']) {\n QronoDate.prototype[method] = function () {\n return qrono(\n { disambiguation: 'later' },\n this[internalDate].datetime.toArray().slice(0, 3)\n )[method]()\n }\n}\n\nQronoDate.prototype.endOfYear = function () {\n return this.clone({ month: 12, day: 31 })\n}\n\nQronoDate.prototype.endOfMonth = function () {\n return this.clone({ day: this.daysInMonth() })\n}\n\nQronoDate.prototype.isSame = function (another) {\n return +this === +another\n}\nQronoDate.prototype.isBefore = function (another) {\n return this < another\n}\nQronoDate.prototype.isAfter = function (another) {\n return this > another\n}\nQronoDate.prototype.isSameOrBefore = function (another) {\n return this <= another\n}\nQronoDate.prototype.isSameOrAfter = function (another) {\n return this >= another\n}\nQronoDate.prototype.isBetween = function (a, b) {\n return (a <= this && this <= b) || (b <= this && this <= a)\n}\n\nQronoDate.prototype.plus = function (...args) {\n return plusDate.call(this, 1, ...args)\n}\n\nQronoDate.prototype.minus = function (...args) {\n return plusDate.call(this, -1, ...args)\n}\n\nfunction plusDate(sign, ...args) {\n const arg0 = args[0]\n const arg1 = args[1]\n const datetime = this[internalDate].datetime\n if (Number.isFinite(arg0) && !Number.isFinite(arg1)) {\n return datetime.plus({ day: sign * arg0 }).toDate()\n }\n let timeFields = null\n if (isObject(arg0) && hasDatetimeField(arg0)) {\n timeFields = {\n year: sign * (arg0.year ?? 0),\n month: sign * (arg0.month ?? 0),\n day: sign * (arg0.day ?? 0),\n }\n } else if (Number.isFinite(arg0)) {\n if (args.length > 3) {\n throw RangeError('Too many arguments')\n }\n timeFields = { year: sign * arg0, month: sign * arg1, day: sign * arg2 }\n } else if (Array.isArray(arg0)) {\n if (arg0.length > 3) {\n throw RangeError('Too many elements')\n }\n timeFields = {\n year: sign * arg0[0],\n month: sign * arg0[1],\n day: sign * arg0[2],\n }\n } else {\n throw TypeError()\n }\n return datetime.plus(timeFields).toDate()\n}\n"],"names":["initialSafeDate","daysPerWeek","hoursPerDay","minutesPerHour","minutesPerDay","secondsPerMinute","secondsPerHour","secondsPerDay","millisecondsPerSecond","millisecondsPerMinute","millisecondsPerDay","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","monday","tuesday","wednesday","thursday","friday","saturday","sunday","internal","args","self","set","parse","valid","getNative","source","first","second","_a","flat","values","v","name","baseDate","newDate","_b","_c","_d","_e","_f","_g","_h","dateOnly","disambig","_i","requested","_j","_k","_l","_m","_n","_o","_p","numeric","nextDay","prevDay","adjust","isGap","adjustedUTC","isOverlap","parsePattern","str","text","hasTime","year","month","day","offset","native","n","offsetAbs","field","theThursday","startOfYear","firstThursday","currentOffset","offsets","_","index","minOffset","maxOffset","startOfDay","days","endOfYear","endOfLastYear","cloneArg","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","method","plusDate","datetime"],"mappings":"+aAYO,MAAMA,GAAkB,IAAI,KAAK,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,CAAC,EAElDC,EAAc,EACdC,EAAc,GAEdC,EAAiB,GACjBC,EAAgBD,EAAiBD,EAEjCG,EAAmB,GACnBC,GAAiBD,EAAmBF,EACpCI,GAAgBD,GAAiBJ,EAEjCM,EAAwB,IACxBC,GAAwBJ,EAAmBG,EAE3CE,EAAqBH,GAAgBC,EAG3C,SAASG,EAAIC,KAAWC,EAAM,CACnC,OAAOA,EAAK,KAAI,EAAG,KAAKD,EAAO,eAAgBA,CAAM,CACvD,CAEO,SAASE,EAAOF,EAAQ,CAC7B,OAAO,OAAO,QAAQA,CAAM,EACzB,OAAO,CAAC,CAAA,CAAGG,CAAK,IAAM,CAACC,GAAWD,CAAK,CAAC,EACxC,IAAI,CAAC,CAACE,CAAG,IAAMA,CAAG,CACvB,CAEO,SAASC,EAAMC,EAAK,CACzB,OAAOA,IAAQ,MACjB,CAEO,SAASH,GAAWI,EAAG,CAC5B,OAAOA,aAAa,QACtB,CAEO,SAASC,GAASD,EAAG,CAC1B,OAAO,OAAOA,GAAM,UAAYA,aAAa,MAC/C,CAEO,SAASE,EAASF,EAAG,CAC1B,OAAOA,IAAM,MAAQ,OAAOA,GAAM,UAAYA,EAAE,cAAgB,MAClE,CAEO,SAASG,GAAYC,EAAM,CAChC,MAAO,CAAC,OAAO,MAAMA,EAAK,QAAO,CAAE,CACrC,CAUO,SAASC,EAAiBb,EAAQ,CACvC,OAAOD,EAAIC,EAAQ,CACjB,OACA,QACA,MACA,OACA,SACA,SACA,aACJ,CAAG,CACH,CC1DK,MAACc,EAAQC,EAOdA,EAAM,KAAOC,EAGb,MAAMC,EAAiB,CACrB,UAAW,GACX,eAAgB,YAClB,EAEA,UAAWZ,KAAOH,EAAOe,CAAc,EACrCF,EAAMV,CAAG,EAAI,SAAUE,EAAK,CAC1B,OAAID,EAAMC,CAAG,GACXU,EAAeZ,CAAG,EAAIE,EACf,MAEFU,EAAeZ,CAAG,CAC3B,EAGFU,EAAM,QAAU,SAAUG,EAAS,CACjC,GAAIZ,EAAMY,CAAO,EAAG,CAClB,UAAWb,KAAOH,EAAOe,CAAc,EAChClB,EAAImB,EAASb,CAAG,IAGrBY,EAAeZ,CAAG,EAAIa,EAAQb,CAAG,GAEnC,OAAO,IACT,CACA,OAAOc,EAAA,GAAKF,EACd,EAEAF,EAAM,MAAQ,UAAY,CACxB,OAAAE,EAAe,UAAY,GACpB,IACT,EAEAF,EAAM,YAAc,UAAY,CAC9B,OAAAE,EAAe,UAAY,GACpB,IACT,EAEA,MAAMG,GAAS,EACTC,GAAU,EACVC,GAAY,EACZC,EAAW,EACXC,GAAS,EACTC,GAAW,EACXC,GAAS,EAEf,OAAO,OAAOX,EAAO,CACnB,OAAAK,GACA,QAAAC,GACA,UAAAC,GACA,SAAAC,EACA,OAAAC,GACA,SAAAC,GACA,OAAAC,EACF,CAAC,EAKD,MAAMC,EAAW,OAAM,EAEvB,SAASZ,KAASa,EAAM,OACtB,GAAI,CAAC,WACH,OAAO,IAAIb,EAAM,GAAGa,CAAI,EAE1B,MAAMC,EAAO,CAEX,WAAY,KACZ,UAAW,GACX,eAAgB,aAEhB,IAAAC,GACA,MAAAC,GACA,MAAAC,GACA,QAAAd,GACA,UAAAe,EACJ,EAKE,GAJA,KAAKN,CAAQ,EAAIE,EAGjBA,EAAK,QAAQZ,CAAc,EACvBW,EAAK,CAAC,YAAab,EAAO,CAC5B,MAAMmB,EAASN,EAAK,MAAK,EACzB,UAAWvB,KAAOH,EAAO2B,CAAI,EAC3BA,EAAKxB,CAAG,EAAI6B,EAAO7B,CAAG,EAAC,CAE3B,CACIK,EAASkB,EAAK,CAAC,CAAC,GAAK,CAACf,EAAiBe,EAAK,CAAC,CAAC,GAChDC,EAAK,QAAQD,EAAK,MAAK,CAAE,EAE3B,MAAMO,EAAQP,EAAK,CAAC,EACdQ,EAASR,EAAK,CAAC,EACrB,GAAIO,GAAS,MACXE,EAAAR,EAAK,aAAL,OAAAA,EAAK,WAAe,IAAI,cACfM,aAAiB,KAC1BN,EAAK,WAAa,IAAI,KAAKM,EAAM,QAAO,CAAE,UACjC1B,GAAS0B,CAAK,EACvBN,EAAK,MAAMM,CAAK,UACPzB,EAASyB,CAAK,EAAG,CAC1B,GAAI,CAACtB,EAAiBsB,CAAK,EACzB,MAAM,WACJ,6EAER,EAEIN,EAAK,IAAIM,CAAK,CAChB,SAAW,OAAO,SAASA,CAAK,GAAK,CAAC,OAAO,SAASC,CAAM,EAC1DP,EAAK,WAAa,IAAI,KAAKM,CAAK,UACvB,OAAO,SAASA,CAAK,GAAK,MAAM,QAAQA,CAAK,EAAG,CACzD,MAAMG,EAAOV,EAAK,KAAI,EAChBW,EAASD,EAAK,OAAOE,GAAK,OAAO,cAAcA,CAAC,CAAC,EACvD,GAAID,EAAO,SAAWD,EAAK,OACzB,MAAM,WAAW,yBAAyB,EAE5C,GAAIC,EAAO,OAAS,EAClB,MAAM,WAAW,kBAAkB,EAErCV,EAAK,IAAI,CACP,KAAMU,EAAO,CAAC,EACd,MAAOA,EAAO,CAAC,EACf,IAAKA,EAAO,CAAC,EACb,KAAMA,EAAO,CAAC,EACd,OAAQA,EAAO,CAAC,EAChB,OAAQA,EAAO,CAAC,EAChB,YAAaA,EAAO,CAAC,CAC3B,CAAK,CACH,KACE,OAAM,UAAU,oBAAoBX,CAAI,EAAE,EAE5C,OAAO,IACT,CAKA,SAASI,IAAQ,CACf,OAAOrB,GAAY,KAAK,UAAU,CACpC,CAEA,SAASO,GAAQA,EAAS,CACxB,GAAKA,EAGL,WAAWb,KAAOH,EAAOe,CAAc,EACjClB,EAAImB,EAASb,CAAG,IAClB,KAAKA,CAAG,EAAIa,EAAQb,CAAG,GAG3B,OAAO,KACT,CAEA,SAAS4B,GAAUQ,EAAM,CACvB,OAAO,KAAK,WAAW,MAAM,KAAK,UAAY,GAAK,KAAK,GAAGA,CAAI,EAAE,EAAC,CACpE,CAEA,SAASX,GAAIS,EAAQ,qCACnB,MAAMX,EAAOT,EAAA,GAAKoB,GAElB,GADAX,EAAK,MAAQA,EAAK,OAASA,EAAK,MAAQ,EACpC,CAAC,KAAK,UAAW,CACnB,MAAMc,GAAWL,EAAA,KAAK,aAAL,KAAAA,EAAmB,IAAI,KAAK,CAAC,EACxCM,EAAU,IAAI,KAAK,CAAC,EAC1B,OAAAA,EAAQ,gBACNC,EAAAhB,EAAK,OAAL,KAAAgB,EAAaF,EAAS,eAAc,GACpCG,EAAAjB,EAAK,QAAL,KAAAiB,EAAcH,EAAS,YAAW,GAClCI,EAAAlB,EAAK,MAAL,KAAAkB,EAAYJ,EAAS,WAAU,CACrC,EACIC,EAAQ,aACNI,EAAAnB,EAAK,OAAL,KAAAmB,EAAaL,EAAS,YAAW,GACjCM,EAAApB,EAAK,SAAL,KAAAoB,EAAeN,EAAS,cAAa,GACrCO,EAAArB,EAAK,SAAL,KAAAqB,EAAeP,EAAS,cAAa,GACrCQ,EAAAtB,EAAK,cAAL,KAAAsB,EAAoBR,EAAS,mBAAkB,CACrD,EACI,KAAK,WAAaC,EACX,IACT,CACA,MAAMQ,EAAW,CAACpD,EAAIwC,EAAQ,OAAQ,SAAU,SAAU,aAAa,EACjEa,EAAWD,EAAW,QAAU,KAAK,eACrCT,GAAWW,EAAA,KAAK,aAAL,KAAAA,EAAmB,IAAI,KAAK,EAAG,CAAC,EAC3CV,EAAU,IAAI,KAAKvD,GAAgB,QAAO,CAAE,EAC5CkE,EAAY,CAChB,MAAMC,EAAA3B,EAAK,OAAL,KAAA2B,EAAab,EAAS,YAAW,EACvC,OAAOc,EAAA5B,EAAK,QAAL,KAAA4B,EAAcd,EAAS,SAAQ,EACtC,KAAKe,EAAA7B,EAAK,MAAL,KAAA6B,EAAYf,EAAS,QAAO,EACjC,MAAMgB,EAAA9B,EAAK,OAAL,KAAA8B,EAAcP,EAAW,EAAIT,EAAS,WAC5C,QAAQiB,EAAA/B,EAAK,SAAL,KAAA+B,EAAgBR,EAAW,EAAIT,EAAS,aAChD,QAAQkB,EAAAhC,EAAK,SAAL,KAAAgC,EAAgBT,EAAW,EAAIT,EAAS,aAChD,aACEmB,EAAAjC,EAAK,cAAL,KAAAiC,EAAqBV,EAAW,EAAIT,EAAS,gBAAe,CAClE,EACEC,EAAQ,YAAYW,EAAU,KAAMA,EAAU,MAAOA,EAAU,GAAG,EAClEX,EAAQ,SACNW,EAAU,KACVA,EAAU,OACVA,EAAU,OACVA,EAAU,WACd,EAEE,MAAMQ,EAAUnB,EAAQ,QAAO,EACzBoB,EAAU,IAAI,KAAKD,CAAO,EAChCC,EAAQ,QAAQpB,EAAQ,QAAO,EAAK,CAAC,EACrC,MAAMqB,EAAU,IAAI,KAAKF,CAAO,EAChCE,EAAQ,QAAQrB,EAAQ,QAAO,EAAK,CAAC,EACrC,MAAMsB,EAASF,EAAQ,kBAAiB,EAAKC,EAAQ,kBAAiB,EAEtE,GAAIZ,IAAa,cAAgBa,IAAW,EAC1C,YAAK,WAAatB,EACX,KAIT,MAAMuB,EACJZ,EAAU,KAAO,IACfA,EAAU,MAAQ,IAClBA,EAAU,IAAM,IAChBA,EAAU,KAAO,IACjBA,EAAU,OACZX,EAAQ,YAAW,EAAK,IACtBA,EAAQ,SAAQ,EAAK,IACrBA,EAAQ,QAAO,EAAK,IACpBA,EAAQ,SAAQ,EAAK,IACrBA,EAAQ,WAAU,EAIhBwB,EAAc,IAAI,KACtB,IAAI,KAAKL,CAAO,EAAE,cAAcnB,EAAQ,cAAa,EAAKsB,CAAM,CACpE,EACQG,GACJD,EAAY,SAAQ,IAAOxB,EAAQ,SAAQ,GAC3CwB,EAAY,eAAiBxB,EAAQ,WAAU,EACjD,GAAI,CAACuB,GAAS,CAACE,GACb,YAAK,WAAazB,EACX,KAET,GAAIS,IAAa,SACf,MAAM,IAAI,WAAW,wBAAwBE,CAAS,gBAAgB,EAExE,YAAK,WAAaF,IAAa,QAAUT,EAAUwB,EAC5C,IACT,CAEA,MAAME,GAAe,IAAI,OAEvB,+JAKF,EAEA,SAAStC,GAAMuC,EAAK,OAClB,MAAMC,EAAOD,EAAI,KAAI,EAAG,YAAW,EAC7B/B,EAASgC,EAAK,MAAMF,EAAY,EACtC,GAAI,CAAC9B,EACH,MAAM,WACJ,oBAAoB+B,CAAG,8EAE7B,EAEE,MAAME,EAAUjC,EAAO,CAAC,IAAM,OACxB,CAACkC,EAAMC,EAAOC,EAAKC,CAAM,EAAI,CACjC,CAACrC,EAAO,CAAC,EACT,CAACA,EAAO,CAAC,GAAK,EACd,CAACA,EAAO,CAAC,GAAK,EACdA,EAAO,CAAC,CACZ,EACQsC,EAAS,IAAI,KAAKN,CAAI,EAC5B,GAAI,CAAC5D,GAAYkE,CAAM,EACrB,MAAM,WACJ,oBAAoBP,CAAG,sFAE7B,EAEE,OAAIM,EACF,KAAK,WAAaC,EACTL,EACT,KAAK,IAAI,CACP,KAAAC,EACA,MAAAC,EACA,IAAAC,EACA,KAAM,CAACpC,EAAO,CAAC,GAAK,EACpB,OAAQ,CAACA,EAAO,CAAC,GAAK,EACtB,OAAQ,CAACA,EAAO,CAAC,GAAK,EACtB,YAAa,GAACF,EAAAE,EAAO,CAAC,IAAR,YAAAF,EAAW,SAAS,EAAG,OAAQ,CACnD,CAAK,EAED,KAAK,IAAI,CAAE,KAAAoC,EAAM,MAAAC,EAAO,IAAAC,CAAG,CAAE,EAExB,IACT,CAKA,MAAM,EAAI,CAACnC,EAAGsC,IAAM,OAAOtC,CAAC,EAAE,SAASsC,EAAG,GAAG,EAG7C/D,EAAM,UAAU,SAAW,UAAY,CACrC,GAAI,KAAKY,CAAQ,EAAE,UAAW,CAC5B,MAAM,EAAI,KAAKA,CAAQ,EAAE,WACnBiD,EAAS,CAAC,EAAE,kBAAiB,EAC7BG,EAAY,KAAK,IAAIH,CAAM,EACjC,MACE,GAAG,EAAE,EAAE,YAAW,EAAI,CAAC,CAAC,IACrB,EAAE,EAAE,SAAQ,EAAK,EAAG,CAAC,CAAC,IACtB,EAAE,EAAE,QAAO,EAAI,CAAC,CAAC,IACjB,EAAE,EAAE,SAAQ,EAAI,CAAC,CAAC,IAClB,EAAE,EAAE,WAAU,EAAI,CAAC,CAAC,IACpB,EAAE,EAAE,WAAU,EAAI,CAAC,CAAC,IACpB,EAAE,EAAE,gBAAe,EAAI,CAAC,CAAC,GACzBA,GAAU,EAAI,IAAM,GAAG,GACvB,EAAE,KAAK,MAAMG,EAAYxF,CAAc,EAAG,CAAC,CAAC,IAC5C,EAAEwF,EAAYxF,EAAgB,CAAC,CAAC,EAEvC,CACA,OAAO,KAAKoC,CAAQ,EAAE,WAAW,YAAW,CAC9C,EAEAZ,EAAM,UAAU,QAAU,UAAY,CACpC,OAAO,KAAKY,CAAQ,EAAE,WAAW,QAAO,CAC1C,EAEAZ,EAAM,UAAU,MAAQ,YAAaa,EAAM,CACzC,OAAO,IAAIb,EAAM,KAAM,GAAGa,CAAI,CAChC,EAEAb,EAAM,UAAU,QAAU,SAAUG,EAAS,CAC3C,OAAOZ,EAAMY,CAAO,EAChB,KAAK,MAAMA,CAAO,EAClB,CACE,UAAW,KAAKS,CAAQ,EAAE,UAC1B,eAAgB,KAAKA,CAAQ,EAAE,cACvC,CACA,EAEAZ,EAAM,UAAU,WAAa,UAAY,CACvC,OAAO,IAAI,KAAK,KAAKY,CAAQ,EAAE,WAAW,QAAO,CAAE,CACrD,EAEAZ,EAAM,UAAU,OAAS,UAAY,CACnC,OAAO,KAAKY,CAAQ,EAAE,UAClB,CAAC,KAAKA,CAAQ,EAAE,WAAW,kBAAiB,EAC5C,CACN,EAEAZ,EAAM,UAAU,UAAY,SAAUR,EAAK,CACzC,OAAOD,EAAMC,CAAG,EAAI,KAAK,MAAM,CAAE,UAAWA,CAAG,CAAE,EAAI,KAAKoB,CAAQ,EAAE,SACtE,EAEAZ,EAAM,UAAU,eAAiB,SAAUR,EAAK,CAC9C,OAAOD,EAAMC,CAAG,EACZ,KAAK,MAAM,CAAE,eAAgBA,CAAG,CAAE,EAClC,KAAKoB,CAAQ,EAAE,cACrB,EAEAZ,EAAM,UAAU,MAAQ,UAAY,CAClC,OAAO,KAAKY,CAAQ,EAAE,MAAK,CAC7B,EAGAZ,EAAM,UAAU,QAAU,UAAY,CACpC,OAAO,KAAKY,CAAQ,EAAE,WAAW,QAAO,CAC1C,EAEAZ,EAAM,UAAU,SAAW,UAAY,CACrC,MAAO,CACL,KAAM,KAAK,KAAI,EACf,MAAO,KAAK,MAAK,EACjB,IAAK,KAAK,IAAG,EACb,KAAM,KAAK,KAAI,EACf,OAAQ,KAAK,OAAM,EACnB,OAAQ,KAAK,OAAM,EACnB,YAAa,KAAK,YAAW,CACjC,CACA,EAEAA,EAAM,UAAU,QAAU,UAAY,CACpC,MAAO,CACL,KAAK,KAAI,EACT,KAAK,MAAK,EACV,KAAK,IAAG,EACR,KAAK,KAAI,EACT,KAAK,OAAM,EACX,KAAK,OAAM,EACX,KAAK,YAAW,CACpB,CACA,EAEAA,EAAM,UAAU,OAAS,YAAaa,EAAM,CAC1C,OAAO,IAAIZ,EAAU,KAAK,MAAM,GAAGY,CAAI,CAAC,CAC1C,EAGAb,EAAM,UAAU,MAAQ,UAAY,CAClC,OAAO,KAAK,MAAM,CAAE,UAAW,EAAK,CAAE,CACxC,EAEAA,EAAM,UAAU,YAAc,UAAY,CACxC,OAAO,KAAK,MAAM,CAAE,UAAW,EAAI,CAAE,CACvC,EAGA,SAAW,CAACiE,EAAOH,EAAQD,CAAM,GAAK,CACpC,CAAC,OAAQ,WAAY,CAAC,EACtB,CAAC,QAAS,QAAS,CAAC,EACpB,CAAC,MAAO,OAAQ,CAAC,EACjB,CAAC,OAAQ,QAAS,CAAC,EACnB,CAAC,SAAU,UAAW,CAAC,EACvB,CAAC,SAAU,UAAW,CAAC,EACvB,CAAC,cAAe,eAAgB,CAAC,CACnC,EACE7D,EAAM,UAAUiE,CAAK,EAAI,SAAU7E,EAAO,CACxC,OAAOG,EAAMH,CAAK,EACd,KAAK,MAAM,CAAE,CAAC6E,CAAK,EAAG7E,CAAK,CAAE,EAC7B,KAAKwB,CAAQ,EAAE,UAAUkD,CAAM,EAAID,CACzC,EAIF7D,EAAM,UAAU,UAAY,UAAY,CACtC,MAAO,IAAM,KAAKY,CAAQ,EAAE,UAAU,KAAK,EAAI,EAAItC,GAAeA,CACpE,EAEA0B,EAAM,UAAU,UAAY,UAAY,CACtC,MAAMH,EAAO,KAAK,OAAM,EACxB,MAAO,GAAIA,EAAOA,EAAK,YAAW,CACpC,EAEAG,EAAM,UAAU,WAAa,UAAY,CACvC,MAAMH,EAAO,KAAK,OAAM,EAClBqE,EAAcrE,EAAK,IAAIA,EAAK,MAAQA,EAAK,UAAS,EAAKW,CAAQ,EAC/D2D,EAAcD,EAAY,YAAW,EACrCE,EACJD,EAAY,UAAS,IAAO3D,EACxB2D,EACAA,EAAY,IACV,GAAM3D,EAAW2D,EAAY,UAAS,EAAK7F,GAAeA,CACpE,EACE,MAAO,GAAI,KAAK,MAAM4F,EAAcE,GAAiB9F,CAAW,CAClE,EAEA0B,EAAM,UAAU,WAAa,UAAY,CACvC,MAAMH,EAAO,KAAK,OAAM,EACxB,OAAOA,EAAK,IAAIA,EAAK,IAAG,EAAKA,EAAK,UAAS,EAAKW,CAAQ,EAAE,KAAI,CAChE,EAEAR,EAAM,UAAU,WAAa,UAAY,CACvC,MAAM0D,EAAO,KAAK,KAAI,EACtB,OAAOA,EAAO,IAAM,IAAMA,EAAO,MAAQ,GAAKA,EAAO,MAAQ,EAC/D,EAEA1D,EAAM,UAAU,aAAe,UAAY,CACzC,GAAI,CAAC,KAAKY,CAAQ,EAAE,UAClB,MAAO,GAET,MAAMyD,EAAgB,KAAK,OAAM,EACjC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAE,EAChB,IAAIV,GAAS,KAAK,MAAMA,CAAK,EAAE,OAAM,CAAE,EACvC,KAAKE,GAAUA,IAAWQ,CAAa,CAC5C,EAEArE,EAAM,UAAU,QAAU,UAAY,CACpC,GAAI,CAAC,KAAKY,CAAQ,EAAE,UAClB,MAAO,GAET,MAAM0D,EAAU,MAAM,KAAK,CAAE,OAAQ,EAAE,EAAI,CAACC,EAAGC,IAC7C,KAAK,MAAMA,EAAQ,CAAC,EAAE,OAAM,CAChC,EACQC,EAAY,KAAK,IAAI,GAAGH,CAAO,EAC/BI,EAAY,KAAK,IAAI,GAAGJ,CAAO,EACrC,OAAOG,IAAcC,GAAa,KAAK,OAAM,IAAOA,CACtD,EAEA1E,EAAM,UAAU,mBAAqB,UAAY,CAC/C,OAAK,KAAKY,CAAQ,EAAE,UAGb,KAAK,iBAAmBnC,EAFtB,EAGX,EAEAuB,EAAM,UAAU,aAAe,UAAY,CACzC,GAAI,CAAC,KAAKY,CAAQ,EAAE,UAClB,OAAOnC,EAET,MAAMkG,EAAa,KAAK,QAAQ,CAAE,eAAgB,OAAO,CAAE,EAAE,WAAU,EACjE3B,EAAU2B,EAAW,KAAK,CAAE,IAAK,CAAC,CAAE,EAAE,WAAU,EACtD,OAAIA,EAAW,IAAG,IAAO3B,EAAQ,IAAG,EAC3BvE,GAEDuE,EAAU2B,GAAc7F,EAClC,EAEAkB,EAAM,UAAU,YAAc,UAAY,CACxC,MAAM4E,EAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACtDjB,EAAQ,KAAK,MAAK,EACxB,OAAOiB,EAAKjB,EAAQ,CAAC,GAAK,KAAK,WAAU,GAAMA,IAAU,EAAI,EAAI,EACnE,EAEA3D,EAAM,UAAU,WAAa,UAAY,CACvC,OAAO,KAAK,WAAU,EAAK,IAAM,GACnC,EAEAA,EAAM,UAAU,YAAc,UAAY,CACxC,MAAM6E,EAAY,KAAK,OAAO,CAAE,MAAO,GAAI,IAAK,EAAE,CAAE,EAC9CC,EAAgBD,EAAU,MAAM,CAAE,KAAM,CAAC,CAAE,EACjD,OACEA,EAAU,UAAS,IAAOrE,GAC1BsE,EAAc,UAAS,IAAOvE,GAEvB,GAEF,EACT,EAEA,SAAW,CAACmB,EAAMqD,CAAQ,GAAK,CAC7B,CAAC,OAAQ,CAAE,MAAO,EAAG,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,OAAQ,EAAG,YAAa,CAAC,CAAE,EAC5E,CAAC,QAAS,CAAE,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,OAAQ,EAAG,YAAa,CAAC,CAAE,EACnE,CAAC,OAAQ,CAAE,OAAQ,EAAG,OAAQ,EAAG,YAAa,EAAG,EACjD,CAAC,SAAU,CAAE,OAAQ,EAAG,YAAa,CAAC,CAAE,EACxC,CAAC,SAAU,CAAE,YAAa,EAAG,CAC/B,EACE/E,EAAM,UAAU,UAAU0B,CAAI,EAAE,EAAI,UAAY,CAC9C,OAAO,KAAK,MAAMqD,CAAQ,CAC5B,EAGF/E,EAAM,UAAU,WAAa,UAAY,CACvC,MAAMgF,EAAY,KAAK,MACrB,CAAE,eAAgB,OAAO,EACzB,CAAE,KAAM,EAAG,OAAQ,EAAG,OAAQ,EAAG,YAAa,CAAC,CACnD,EAAI,QAAO,EACT,OAAO,KAAK,MAAMA,CAAS,CAC7B,EAEAhF,EAAM,UAAU,OAAS,SAAUiF,EAAS,CAC1C,MAAO,CAAC,MAAS,CAACA,CACpB,EACAjF,EAAM,UAAU,SAAW,SAAUiF,EAAS,CAC5C,OAAO,KAAOA,CAChB,EACAjF,EAAM,UAAU,QAAU,SAAUiF,EAAS,CAC3C,OAAO,KAAOA,CAChB,EACAjF,EAAM,UAAU,eAAiB,SAAUiF,EAAS,CAClD,OAAO,MAAQA,CACjB,EACAjF,EAAM,UAAU,cAAgB,SAAUiF,EAAS,CACjD,OAAO,MAAQA,CACjB,EACAjF,EAAM,UAAU,UAAY,SAAUP,EAAGyF,EAAG,CAC1C,OAAQzF,GAAK,MAAQ,MAAQyF,GAAOA,GAAK,MAAQ,MAAQzF,CAC3D,EAGAO,EAAM,UAAU,KAAO,YAAaa,EAAM,CACxC,OAAOsE,GAAK,KAAK,KAAM,EAAG,GAAGtE,CAAI,CACnC,EAEAb,EAAM,UAAU,MAAQ,YAAaa,EAAM,CACzC,OAAOsE,GAAK,KAAK,KAAM,GAAI,GAAGtE,CAAI,CACpC,EAEA,SAASsE,GAAKC,KAASvE,EAAM,SAC3B,MAAMwE,EAAOxE,EAAK,CAAC,EACbyE,EAAOzE,EAAK,CAAC,EACnB,GAAI,OAAO,SAASwE,CAAI,GAAK,CAAC,OAAO,SAASC,CAAI,EAChD,OAAO,KAAK,MAAM,KAAK,QAAO,EAAKD,CAAI,EAEzC,IAAIE,EAAa,KACjB,GAAI5F,EAAS0F,CAAI,EAAG,CAClB,GAAI,CAACvF,EAAiBuF,CAAI,EACxB,MAAM,WACJ,6EAER,EAEIE,EAAaF,CACf,SAAW,OAAO,SAASA,CAAI,GAAK,MAAM,QAAQA,CAAI,EAAG,CACvD,MAAM9D,EAAOV,EAAK,KAAI,EAChBW,EAASD,EAAK,OAAOE,GAAK,OAAO,cAAcA,CAAC,CAAC,EACvD,GAAID,EAAO,SAAWD,EAAK,OACzB,MAAM,WAAW,yBAAyB,EAE5C,GAAIC,EAAO,OAAS,EAClB,MAAM,WAAW,kBAAkB,EAErC+D,EAAa,CACX,KAAM/D,EAAO,CAAC,EACd,MAAOA,EAAO,CAAC,EACf,IAAKA,EAAO,CAAC,EACb,KAAMA,EAAO,CAAC,EACd,OAAQA,EAAO,CAAC,EAChB,OAAQA,EAAO,CAAC,EAChB,YAAaA,EAAO,CAAC,CAC3B,CACE,KACE,OAAM,UAAS,EAEjB,MAAM3B,EAAO,KAAK,WAAU,EACtB2F,EAAM,KAAK5E,CAAQ,EAAE,UAAY,GAAK,MAC5C,GAAI5B,EAAIuG,EAAY,MAAM,GAAKvG,EAAIuG,EAAY,OAAO,EAAG,CACvD,MAAM7B,EAAO,KAAK,KAAI,EAAK0B,IAAQ9D,EAAAiE,EAAW,OAAX,KAAAjE,EAAmB,GAChDqC,EAAQ,KAAK,MAAK,EAAKyB,IAAQvD,EAAA0D,EAAW,QAAX,KAAA1D,EAAoB,GACnD4D,EAAa,IAAI,KAAK5F,EAAK,QAAO,CAAE,EAC1C4F,EAAW,MAAMD,CAAG,UAAU,EAAE9B,EAAMC,EAAO,CAAC,EAC9C,MAAM+B,EAAUD,EAAW,MAAMD,CAAG,MAAM,EAAC,EACvCE,EAAU,KAAK,MACjB7F,EAAK,MAAM2F,CAAG,UAAU,EAAE9B,EAAM+B,EAAW,MAAMD,CAAG,OAAO,EAAC,EAAIE,CAAO,EAEvE7F,EAAK,MAAM2F,CAAG,UAAU,EAAE9B,EAAMC,EAAQ,CAAC,CAE7C,CACI3E,EAAIuG,EAAY,KAAK,GACvB1F,EAAK,MAAM2F,CAAG,MAAM,EAAE3F,EAAK,MAAM2F,CAAG,MAAM,EAAC,EAAKJ,EAAOG,EAAW,GAAG,EAEvE,SAAW,CAACjG,EAAKqG,CAAS,GAAK,CAC7B,CAAC,OAAQ,OAAO,EAChB,CAAC,SAAU,SAAS,EACpB,CAAC,SAAU,SAAS,EACpB,CAAC,cAAe,cAAc,CAClC,EACQ,CAAC3G,EAAIuG,EAAYjG,CAAG,GAAKiG,EAAWjG,CAAG,GAAK,MAGhDO,EAAK,SAAS8F,CAAS,EAAE,EACvB9F,EAAK,SAAS8F,CAAS,EAAE,IAAMP,EAAOG,EAAWjG,CAAG,CAC1D,EAEE,OAAO,KAAK,MAAMO,CAAI,CACxB,CAKA,MAAM+F,EAAe,OAAM,EAE3B,SAAS3F,KAAaY,EAAM,CAC1B,GAAI,CAAC,WACH,OAAO,IAAIZ,EAAU,GAAGY,CAAI,EAE9B,MAAMC,EAAO,CAAE,SAAU,IAAI,EAC7B,KAAK8E,CAAY,EAAI9E,EACrB,IAAIK,EAAS,KACTN,EAAK,CAAC,YAAaZ,EACrBkB,EAASN,EAAK,MAAK,EAAG,WAAU,EACvBA,EAAK,CAAC,YAAab,IAC5BmB,EAASN,EAAK,MAAK,GAErB,MAAMO,EAAQP,EAAK,CAAC,EACdQ,EAASR,EAAK,CAAC,EACrB,OAAI,OAAO,SAASO,CAAK,GAAK,CAAC,OAAO,SAASC,CAAM,IACnDR,EAAK,CAAC,EAAI,KAAK,MAAMO,CAAK,EAAIrC,GAE5BoC,EACFA,EAASA,EAAO,MAAM,GAAGN,CAAI,EAE7BM,EAASpB,EAAM,GAAGc,CAAI,EAExBC,EAAK,SAAWK,EAAO,WAAU,EAC1B,IACT,CAEAlB,EAAU,UAAU,SAAW,UAAY,CACzC,OAAO,KAAK2F,CAAY,EAAE,SAAS,WAAW,UAAU,EAAG,EAAE,CAC/D,EAEA3F,EAAU,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK2F,CAAY,EAAE,SAAW7G,CACvC,EAEAkB,EAAU,UAAU,MAAQ,UAAY,CACtC,OAAO,KAAK2F,CAAY,EAAE,SAAS,MAAK,CAC1C,EAEA3F,EAAU,UAAU,MAAQ,YAAaY,EAAM,CAC7C,OAAO,IAAIZ,EAAU,KAAM,GAAGY,CAAI,CACpC,EAEAZ,EAAU,UAAU,WAAa,UAAY,CAC3C,OAAOF,EAAM,KAAK6F,CAAY,EAAE,SAAS,QAAO,CAAE,CACpD,EAEA3F,EAAU,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK2F,CAAY,EAAE,SAAS,QAAO,EAAK7G,CACjD,EAEAkB,EAAU,UAAU,SAAW,UAAY,CACzC,MAAO,CACL,KAAM,KAAK,KAAI,EACf,MAAO,KAAK,MAAK,EACjB,IAAK,KAAK,IAAG,CACjB,CACA,EAEAA,EAAU,UAAU,QAAU,UAAY,CACxC,MAAO,CAAC,KAAK,KAAI,EAAI,KAAK,MAAK,EAAI,KAAK,IAAG,CAAE,CAC/C,EAEAA,EAAU,UAAU,YAAc,UAAY,CAC5C,OAAO,IAAIA,EAAU,KAAK2F,CAAY,EAAE,SAAS,YAAW,CAAE,CAChE,EAEA3F,EAAU,UAAU,aAAe,UAAY,CAC7C,OAAO,IAAIA,EAAU,KAAK2F,CAAY,EAAE,SAAS,aAAY,CAAE,CACjE,EAEA3F,EAAU,UAAU,WAAa,UAAY,CAC3C,OAAO,KAAK2F,CAAY,EAAE,SAAS,MAAK,CAC1C,EACA,UAAW3B,IAAS,CAAC,OAAQ,QAAS,KAAK,EACzChE,EAAU,UAAUgE,CAAK,EAAI,SAAU7E,EAAO,CAC5C,OAAIG,EAAMH,CAAK,EACN,IAAIa,EAAU,KAAK2F,CAAY,EAAE,SAAS3B,CAAK,EAAE7E,CAAK,CAAC,EAEzD,KAAKwG,CAAY,EAAE,SAAS3B,CAAK,EAAC,CAC3C,EAEF,UAAW4B,IAAU,CACnB,YACA,YACA,aACA,aACA,aACA,cACA,aACA,aACF,EACE5F,EAAU,UAAU4F,CAAM,EAAI,UAAY,CACxC,OAAO,KAAKD,CAAY,EAAE,SAASC,CAAM,EAAC,CAC5C,EAEF,UAAWA,IAAU,CAAC,eAAgB,eAAgB,oBAAoB,EACxE5F,EAAU,UAAU4F,CAAM,EAAI,UAAY,CACxC,OAAO9F,EACL,CAAE,eAAgB,OAAO,EACzB,KAAK6F,CAAY,EAAE,SAAS,QAAO,EAAG,MAAM,EAAG,CAAC,CACtD,EAAMC,CAAM,EAAC,CACX,EAGF5F,EAAU,UAAU,UAAY,UAAY,CAC1C,OAAO,KAAK,MAAM,CAAE,MAAO,GAAI,IAAK,EAAE,CAAE,CAC1C,EAEAA,EAAU,UAAU,WAAa,UAAY,CAC3C,OAAO,KAAK,MAAM,CAAE,IAAK,KAAK,YAAW,CAAE,CAAE,CAC/C,EAEAA,EAAU,UAAU,OAAS,SAAUgF,EAAS,CAC9C,MAAO,CAAC,MAAS,CAACA,CACpB,EACAhF,EAAU,UAAU,SAAW,SAAUgF,EAAS,CAChD,OAAO,KAAOA,CAChB,EACAhF,EAAU,UAAU,QAAU,SAAUgF,EAAS,CAC/C,OAAO,KAAOA,CAChB,EACAhF,EAAU,UAAU,eAAiB,SAAUgF,EAAS,CACtD,OAAO,MAAQA,CACjB,EACAhF,EAAU,UAAU,cAAgB,SAAUgF,EAAS,CACrD,OAAO,MAAQA,CACjB,EACAhF,EAAU,UAAU,UAAY,SAAUR,EAAGyF,EAAG,CAC9C,OAAQzF,GAAK,MAAQ,MAAQyF,GAAOA,GAAK,MAAQ,MAAQzF,CAC3D,EAEAQ,EAAU,UAAU,KAAO,YAAaY,EAAM,CAC5C,OAAOiF,GAAS,KAAK,KAAM,EAAG,GAAGjF,CAAI,CACvC,EAEAZ,EAAU,UAAU,MAAQ,YAAaY,EAAM,CAC7C,OAAOiF,GAAS,KAAK,KAAM,GAAI,GAAGjF,CAAI,CACxC,EAEA,SAASiF,GAASV,KAASvE,EAAM,WAC/B,MAAMwE,EAAOxE,EAAK,CAAC,EACbyE,EAAOzE,EAAK,CAAC,EACbkF,EAAW,KAAKH,CAAY,EAAE,SACpC,GAAI,OAAO,SAASP,CAAI,GAAK,CAAC,OAAO,SAASC,CAAI,EAChD,OAAOS,EAAS,KAAK,CAAE,IAAKX,EAAOC,CAAI,CAAE,EAAE,OAAM,EAEnD,IAAIE,EAAa,KACjB,GAAI5F,EAAS0F,CAAI,GAAKvF,EAAiBuF,CAAI,EACzCE,EAAa,CACX,KAAMH,IAAQ9D,EAAA+D,EAAK,OAAL,KAAA/D,EAAa,GAC3B,MAAO8D,IAAQvD,EAAAwD,EAAK,QAAL,KAAAxD,EAAc,GAC7B,IAAKuD,IAAQtD,EAAAuD,EAAK,MAAL,KAAAvD,EAAY,EAC/B,UACa,OAAO,SAASuD,CAAI,EAAG,CAChC,GAAIxE,EAAK,OAAS,EAChB,MAAM,WAAW,oBAAoB,EAEvC0E,EAAa,CAAE,KAAMH,EAAOC,EAAM,MAAOD,EAAOE,EAAM,IAAKF,EAAO,IAAI,CACxE,SAAW,MAAM,QAAQC,CAAI,EAAG,CAC9B,GAAIA,EAAK,OAAS,EAChB,MAAM,WAAW,mBAAmB,EAEtCE,EAAa,CACX,KAAMH,EAAOC,EAAK,CAAC,EACnB,MAAOD,EAAOC,EAAK,CAAC,EACpB,IAAKD,EAAOC,EAAK,CAAC,CACxB,CACE,KACE,OAAM,UAAS,EAEjB,OAAOU,EAAS,KAAKR,CAAU,EAAE,OAAM,CACzC"}
1
+ {"version":3,"file":"qrono.cjs","sources":["../src/helpers.js","../src/qrono.js"],"sourcesContent":["export const epoch = new Date(0)\n\n/**\n * When creating or updating a local time, both `Date.setFullYear` and `Date.setHours` are used.\n * Noon is used as the initial reference point to avoid the time after `setFullYear`\n * from falling into an ambiguous DST period. Historically, DST transitions in all countries\n * have been scheduled around midnight, and it should be the same in the future.\n * The reason for selecting 1915 as the initial value is as follows.\n * Since DST was first established in 1916, the initial value should be set to a year prior to that.\n * If a year too far in the past is chosen, it may correspond to a period when time zones were not yet\n * precisely defined in some regions, which could result in unexpected timezone offsets.\n */\nexport const initialSafeDate = new Date(1915, 0, 1, 12, 0, 0, 0)\n\nexport const daysPerWeek = 7\nexport const hoursPerDay = 24\nexport const hoursPerWeek = hoursPerDay * daysPerWeek\nexport const minutesPerHour = 60\nexport const minutesPerDay = minutesPerHour * hoursPerDay\nexport const minutesPerWeek = minutesPerDay * daysPerWeek\nexport const secondsPerMinute = 60\nexport const secondsPerHour = secondsPerMinute * minutesPerHour\nexport const secondsPerDay = secondsPerHour * hoursPerDay\nexport const secondsPerWeek = secondsPerDay * daysPerWeek\nexport const millisecondsPerSecond = 1000\nexport const millisecondsPerMinute = secondsPerMinute * millisecondsPerSecond\nexport const millisecondsPerHour = secondsPerHour * millisecondsPerSecond\nexport const millisecondsPerDay = secondsPerDay * millisecondsPerSecond\nexport const millisecondsPerWeek = secondsPerWeek * millisecondsPerSecond\n\nexport function has(object, ...keys) {\n return keys.flat().some(object.hasOwnProperty, object)\n}\n\nexport function fields(object) {\n return Object.entries(object)\n .filter(([, value]) => !isFunction(value))\n .map(([key]) => key)\n}\n\nexport function given(arg) {\n return arg !== undefined\n}\n\nexport function isFunction(a) {\n return a instanceof Function\n}\n\nexport function isString(a) {\n return typeof a === 'string' || a instanceof String\n}\n\nexport function isObject(a) {\n return a !== null && typeof a === 'object' && a.constructor === Object\n}\n\nexport function isValidDate(date) {\n return !Number.isNaN(date.getTime())\n}\n\nexport function hasDateField(object) {\n return has(object, ['year', 'month', 'day'])\n}\n\nexport function hasTimeField(object) {\n return has(object, ['hour', 'minute', 'second', 'millisecond'])\n}\n\nexport function hasDatetimeField(object) {\n return has(object, [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ])\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n disambiguation: 'compatible',\n}\n\nQrono.context = function (context) {\n if (given(context)) {\n for (const key of fields(defaultContext)) {\n if (!has(context, key)) {\n continue\n }\n defaultContext[key] = context[key]\n }\n return this\n }\n return { ...defaultContext }\n}\n\nconst monday = 1\nconst tuesday = 2\nconst wednesday = 3\nconst thursday = 4\nconst friday = 5\nconst saturday = 6\nconst sunday = 7\n\nObject.assign(Qrono, {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n})\n\n// -----------------------------------------------------------------------------\n// Constructor\n// -----------------------------------------------------------------------------\nconst internal = Symbol()\n\nfunction Qrono(...args) {\n if (!new.target) {\n return new Qrono(...args)\n }\n const self = {\n // properties\n nativeDate: null,\n localtime: false,\n disambiguation: 'compatible',\n // methods\n set,\n parse,\n valid,\n context,\n getNative,\n }\n this[internal] = self\n\n // Construction\n self.context(defaultContext)\n if (args[0] instanceof Qrono) {\n const source = args.shift()\n self.nativeDate = source.nativeDate()\n self.context(source.context())\n }\n if (isObject(args[0]) && !hasDatetimeField(args[0])) {\n self.context(args.shift())\n }\n const first = args[0]\n const second = args[1]\n if (first == null) {\n self.nativeDate ??= new Date()\n } else if (first instanceof Date) {\n self.nativeDate = new Date(first.getTime())\n } else if (isString(first)) {\n self.parse(first)\n } else if (isObject(first)) {\n if (!hasDatetimeField(first)) {\n throw RangeError(\n 'Missing time field' +\n ' (year, minute, day, hour, minute, second or millisecond)'\n )\n }\n self.set(first)\n } else if (Number.isFinite(first) && !Number.isFinite(second)) {\n self.nativeDate = new Date(first)\n } else if (Number.isFinite(first) || Array.isArray(first)) {\n const flat = args.flat()\n const values = flat.filter(v => Number.isSafeInteger(v))\n if (values.length !== flat.length) {\n throw RangeError('Should be safe integers')\n }\n if (values.length > 7) {\n throw RangeError('Too many numbers')\n }\n self.set({\n year: values[0],\n month: values[1],\n day: values[2],\n hour: values[3],\n minute: values[4],\n second: values[5],\n millisecond: values[6],\n })\n } else {\n throw TypeError(`Invalid argument ${args}`)\n }\n return this\n}\n\n// -----------------------------------------------------------------------------\n// Private methods\n// -----------------------------------------------------------------------------\nfunction valid() {\n return isValidDate(this.nativeDate)\n}\n\nfunction context(context) {\n if (!context) {\n return\n }\n for (const key of fields(defaultContext)) {\n if (has(context, key)) {\n this[key] = context[key]\n }\n }\n return this\n}\n\nfunction getNative(name) {\n return this.nativeDate[`get${this.localtime ? '' : 'UTC'}${name}`]()\n}\n\nfunction set(values) {\n const args = { ...values }\n args.month = args.month && args.month - 1\n if (!this.localtime) {\n const baseDate = this.nativeDate ?? new Date(0)\n const newDate = new Date(0)\n newDate.setUTCFullYear(\n args.year ?? baseDate.getUTCFullYear(),\n args.month ?? baseDate.getUTCMonth(),\n args.day ?? baseDate.getUTCDate()\n )\n newDate.setUTCHours(\n args.hour ?? baseDate.getUTCHours(),\n args.minute ?? baseDate.getUTCMinutes(),\n args.second ?? baseDate.getUTCSeconds(),\n args.millisecond ?? baseDate.getUTCMilliseconds()\n )\n this.nativeDate = newDate\n return this\n }\n const dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const disambig = dateOnly ? 'later' : this.disambiguation\n const baseDate = this.nativeDate ?? new Date(0, 0)\n const newDate = new Date(initialSafeDate.getTime())\n const requested = {\n year: args.year ?? baseDate.getFullYear(),\n month: args.month ?? baseDate.getMonth(),\n day: args.day ?? baseDate.getDate(),\n hour: args.hour ?? (dateOnly ? 0 : baseDate.getHours()),\n minute: args.minute ?? (dateOnly ? 0 : baseDate.getMinutes()),\n second: args.second ?? (dateOnly ? 0 : baseDate.getSeconds()),\n millisecond:\n args.millisecond ?? (dateOnly ? 0 : baseDate.getMilliseconds()),\n }\n newDate.setFullYear(requested.year, requested.month, requested.day)\n newDate.setHours(\n requested.hour,\n requested.minute,\n requested.second,\n requested.millisecond\n )\n // Compute the offset-delta between the day before and after.\n const numeric = newDate.getTime()\n const nextDay = new Date(numeric)\n nextDay.setDate(newDate.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(newDate.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n // No DST transition nearby — nothing to resolve.\n if (disambig === 'compatible' || adjust === 0) {\n this.nativeDate = newDate\n return this\n }\n // Detect whether the constructed Date landed in a DST gap (missing time).\n // In a gap, JavaScript silently shifts the time forward.\n const isGap =\n requested.year * 1e8 +\n requested.month * 1e6 +\n requested.day * 1e4 +\n requested.hour * 1e2 +\n requested.minute <\n newDate.getFullYear() * 1e8 +\n newDate.getMonth() * 1e6 +\n newDate.getDate() * 1e4 +\n newDate.getHours() * 1e2 +\n newDate.getMinutes()\n // Compute the standard-time candidate.\n // Verify the candidate actually preserves the original local fields.\n // If it doesn't, the time isn't truly in an overlap.\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(newDate.getUTCMinutes() + adjust)\n )\n const isOverlap =\n adjustedUTC.getHours() === newDate.getHours() &&\n adjustedUTC.getMinutes() === newDate.getMinutes()\n if (!isGap && !isOverlap) {\n this.nativeDate = newDate\n return this\n }\n if (disambig === 'reject') {\n throw new RangeError(`Requested local time ${requested} is ambiguous.`)\n }\n this.nativeDate = disambig === 'later' ? newDate : adjustedUTC\n return this\n}\n\nconst parsePattern = new RegExp(\n // yyyy[[-|/]MM[[-|/]DD]]\n '^(\\\\d{4})(?:[-/]?([0-2]?\\\\d)(?:[-/]?([0-3]?\\\\d))?)?' +\n // [(T| )HH[:]mm[[:]ss[(.|:)SSS]]]\n '(?:[T\\\\s]([0-2]?\\\\d)(?::([0-5]?\\\\d)?(?::([0-6]?\\\\d)?(?:[.:](\\\\d{1,3})?\\\\d*)?)?)?)?' +\n // [Z|(+|-)hh:mm]\n '(Z|[-+]\\\\d{2}:?\\\\d{2})?$'\n)\n\nfunction parse(str) {\n const text = str.trim().toUpperCase()\n const values = text.match(parsePattern)\n if (!values) {\n throw RangeError(\n `Failed to parse '${str}'.` +\n ' Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]'\n )\n }\n const hasTime = values[4] !== undefined\n const [year, month, day, offset] = [\n +values[1],\n +values[2] || 1,\n +values[3] || 1,\n values[8],\n ]\n const native = new Date(text)\n if (!isValidDate(native)) {\n throw RangeError(\n `Failed to parse '${str}' by Date.` +\n ' Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]'\n )\n }\n if (offset) {\n this.nativeDate = native\n } else if (hasTime) {\n this.set({\n year,\n month,\n day,\n hour: +values[4] || 0,\n minute: +values[5] || 0,\n second: +values[6] || 0,\n millisecond: +values[7]?.padStart(3, '0') || 0,\n })\n } else {\n this.set({ year, month, day })\n }\n return this\n}\n\n// -----------------------------------------------------------------------------\n// Public methods\n// -----------------------------------------------------------------------------\nconst p = (v, n) => String(v).padStart(n, '0')\n\n// Basic\nQrono.prototype.toString = function () {\n if (this[internal].localtime) {\n const t = this[internal].nativeDate\n const offset = -t.getTimezoneOffset()\n const offsetAbs = Math.abs(offset)\n return (\n `${p(t.getFullYear(), 4)}-` +\n `${p(t.getMonth() + 1, 2)}-` +\n `${p(t.getDate(), 2)}T` +\n `${p(t.getHours(), 2)}:` +\n `${p(t.getMinutes(), 2)}:` +\n `${p(t.getSeconds(), 2)}.` +\n `${p(t.getMilliseconds(), 3)}` +\n `${offset >= 0 ? '+' : '-'}` +\n `${p(Math.trunc(offsetAbs / minutesPerHour), 2)}:` +\n `${p(offsetAbs % minutesPerHour, 2)}`\n )\n }\n return this[internal].nativeDate.toISOString()\n}\n\nQrono.prototype.valueOf = function () {\n return this[internal].nativeDate.valueOf()\n}\n\nQrono.prototype.clone = function (...args) {\n return new Qrono(this, ...args)\n}\n\nQrono.prototype.context = function (context) {\n return given(context)\n ? this.clone(context)\n : {\n localtime: this[internal].localtime,\n disambiguation: this[internal].disambiguation,\n }\n}\n\nQrono.prototype.nativeDate = function () {\n return new Date(this[internal].nativeDate.getTime())\n}\n\nQrono.prototype.offset = function () {\n return this[internal].localtime\n ? -this[internal].nativeDate.getTimezoneOffset()\n : 0\n}\n\nQrono.prototype.valid = function () {\n return this[internal].valid()\n}\n\n// Transform\nQrono.prototype.toObject = function () {\n return {\n year: this.year(),\n month: this.month(),\n day: this.day(),\n hour: this.hour(),\n minute: this.minute(),\n second: this.second(),\n millisecond: this.millisecond(),\n }\n}\n\nQrono.prototype.toArray = function () {\n return [\n this.year(),\n this.month(),\n this.day(),\n this.hour(),\n this.minute(),\n this.second(),\n this.millisecond(),\n ]\n}\n\nQrono.prototype.toDate = function (...args) {\n return new QronoDate(this.clone(...args))\n}\n\n// Accessor\nfor (const [field, native, offset] of [\n ['year', 'FullYear', 0],\n ['month', 'Month', 1],\n ['day', 'Date', 0],\n ['hour', 'Hours', 0],\n ['minute', 'Minutes', 0],\n ['second', 'Seconds', 0],\n ['millisecond', 'Milliseconds', 0],\n]) {\n Qrono.prototype[field] = function (value) {\n return given(value)\n ? this.clone({ [field]: value })\n : this[internal].getNative(native) + offset\n }\n}\n\n// Getter\nQrono.prototype.dayOfWeek = function () {\n return 1 + ((this[internal].getNative('Day') - 1 + daysPerWeek) % daysPerWeek)\n}\n\nQrono.prototype.dayOfYear = function () {\n const date = this.toDate()\n return 1 + date - date.startOfYear()\n}\n\nQrono.prototype.weekOfYear = function () {\n const date = this.toDate()\n const theThursday = date.day(date.day() - date.dayOfWeek() + thursday)\n const startOfYear = theThursday.startOfYear()\n const firstThursday =\n startOfYear.dayOfWeek() === thursday\n ? startOfYear\n : startOfYear.day(\n 1 + ((thursday - startOfYear.dayOfWeek() + daysPerWeek) % daysPerWeek)\n )\n return 1 + Math.ceil((theThursday - firstThursday) / daysPerWeek)\n}\n\nQrono.prototype.yearOfWeek = function () {\n const date = this.toDate()\n return date.day(date.day() - date.dayOfWeek() + thursday).year()\n}\n\nQrono.prototype.isLeapYear = function () {\n const year = this.year()\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nQrono.prototype.hasDstInYear = function () {\n if (!this[internal].localtime) {\n return false\n }\n const currentOffset = this.offset()\n return [3, 6, 9, 12]\n .map(month => this.month(month).offset())\n .some(offset => offset !== currentOffset)\n}\n\nQrono.prototype.isInDst = function () {\n if (!this[internal].localtime) {\n return false\n }\n const offsets = Array.from({ length: 12 }, (_, index) =>\n this.month(index + 1).offset()\n )\n const minOffset = Math.min(...offsets)\n const maxOffset = Math.max(...offsets)\n return minOffset !== maxOffset && this.offset() === maxOffset\n}\n\nQrono.prototype.isDstTransitionDay = function () {\n if (!this[internal].localtime) {\n return false\n }\n return this.minutesInDay() !== minutesPerDay\n}\n\nQrono.prototype.minutesInDay = function () {\n if (!this[internal].localtime) {\n return minutesPerDay\n }\n const startOfDay = this.context({ disambiguation: 'later' }).startOfDay()\n const nextDay = startOfDay.plus({ day: 1 }).startOfDay()\n if (startOfDay.day() === nextDay.day()) {\n return minutesPerDay\n }\n return (nextDay - startOfDay) / millisecondsPerMinute\n}\n\nQrono.prototype.daysInMonth = function () {\n const days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n const month = this.month()\n return days[month - 1] + (this.isLeapYear() && month === 2 ? 1 : 0)\n}\n\nQrono.prototype.daysInYear = function () {\n return this.isLeapYear() ? 366 : 365\n}\n\nQrono.prototype.weeksInYear = function () {\n const endOfYear = this.toDate({ month: 12, day: 31 })\n const endOfLastYear = endOfYear.minus({ year: 1 })\n if (\n endOfYear.dayOfWeek() === thursday ||\n endOfLastYear.dayOfWeek() === wednesday\n ) {\n return 53\n }\n return 52\n}\n\nfor (const [name, cloneArg] of [\n ['Year', { month: 1, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }],\n ['Month', { day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }],\n ['Hour', { minute: 0, second: 0, millisecond: 0 }],\n ['Minute', { second: 0, millisecond: 0 }],\n ['Second', { millisecond: 0 }],\n]) {\n Qrono.prototype[`startOf${name}`] = function () {\n return this.clone(cloneArg)\n }\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { disambiguation: 'later' },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).valueOf()\n return this.clone(timestamp)\n}\n\nQrono.prototype.isSame = function (another) {\n return +this === +another\n}\nQrono.prototype.isBefore = function (another) {\n return this < another\n}\nQrono.prototype.isAfter = function (another) {\n return this > another\n}\nQrono.prototype.isSameOrBefore = function (another) {\n return this <= another\n}\nQrono.prototype.isSameOrAfter = function (another) {\n return this >= another\n}\nQrono.prototype.isBetween = function (a, b) {\n return (a <= this && this <= b) || (b <= this && this <= a)\n}\n\n// Calculation\nQrono.prototype.plus = function (...args) {\n return plus.call(this, 1, ...args)\n}\n\nQrono.prototype.minus = function (...args) {\n return plus.call(this, -1, ...args)\n}\n\nfunction plus(sign, ...args) {\n const arg0 = args[0]\n const arg1 = args[1]\n if (Number.isFinite(arg0) && !Number.isFinite(arg1)) {\n return this.clone(this.valueOf() + arg0)\n }\n let timeFields = null\n if (isObject(arg0)) {\n if (!hasDatetimeField(arg0)) {\n throw RangeError(\n 'Missing time field' +\n ' (year, minute, day, hour, minute, second or millisecond)'\n )\n }\n timeFields = arg0\n } else if (Number.isFinite(arg0) || Array.isArray(arg0)) {\n const flat = args.flat()\n const values = flat.filter(v => Number.isSafeInteger(v))\n if (values.length !== flat.length) {\n throw RangeError('Should be safe integers')\n }\n if (values.length > 7) {\n throw RangeError('Too many numbers')\n }\n timeFields = {\n year: values[0],\n month: values[1],\n day: values[2],\n hour: values[3],\n minute: values[4],\n second: values[5],\n millisecond: values[6],\n }\n } else {\n throw TypeError()\n }\n const date = this.nativeDate()\n const utc = this[internal].localtime ? '' : 'UTC'\n if (has(timeFields, 'year') || has(timeFields, 'month')) {\n const year = this.year() + sign * (timeFields.year ?? 0)\n const month = this.month() + sign * (timeFields.month ?? 0)\n const endOfMonth = new Date(date.getTime())\n endOfMonth[`set${utc}FullYear`](year, month, 0)\n const lastDay = endOfMonth[`get${utc}Date`]()\n if (lastDay < this.day()) {\n date[`set${utc}FullYear`](year, endOfMonth[`get${utc}Month`](), lastDay)\n } else {\n date[`set${utc}FullYear`](year, month - 1)\n }\n }\n if (has(timeFields, 'day')) {\n date[`set${utc}Date`](date[`get${utc}Date`]() + sign * timeFields.day)\n }\n for (const [key, nativeKey] of [\n ['hour', 'Hours'],\n ['minute', 'Minutes'],\n ['second', 'Seconds'],\n ['millisecond', 'Milliseconds'],\n ]) {\n if (!has(timeFields, key) || timeFields[key] == null) {\n continue\n }\n date[`setUTC${nativeKey}`](\n date[`getUTC${nativeKey}`]() + sign * timeFields[key]\n )\n }\n return this.clone(date)\n}\n\n// -----------------------------------------------------------------------------\n// QronoDate Class\n// -----------------------------------------------------------------------------\nconst internalDate = Symbol()\n\nfunction QronoDate(...args) {\n if (!new.target) {\n return new QronoDate(...args)\n }\n const self = { datetime: null }\n this[internalDate] = self\n let source = null\n if (args[0] instanceof QronoDate) {\n source = args.shift().toDatetime()\n } else if (args[0] instanceof Qrono) {\n source = args.shift()\n }\n const first = args[0]\n const second = args[1]\n if (Number.isFinite(first) && !Number.isFinite(second)) {\n args[0] = Math.floor(first) * millisecondsPerDay\n }\n if (source) {\n source = source.clone(...args)\n } else {\n source = qrono(...args)\n }\n self.datetime = source.startOfDay()\n return this\n}\n\nQronoDate.prototype.toString = function () {\n return this[internalDate].datetime.toString().substring(0, 10)\n}\n\nQronoDate.prototype.valueOf = function () {\n return this[internalDate].datetime / millisecondsPerDay\n}\n\nQronoDate.prototype.valid = function () {\n return this[internalDate].datetime.valid()\n}\n\nQronoDate.prototype.clone = function (...args) {\n return new QronoDate(this, ...args)\n}\n\nQronoDate.prototype.toDatetime = function () {\n return qrono(this[internalDate].datetime.toArray())\n}\n\nQronoDate.prototype.toObject = function () {\n return {\n year: this.year(),\n month: this.month(),\n day: this.day(),\n }\n}\n\nQronoDate.prototype.toArray = function () {\n return [this.year(), this.month(), this.day()]\n}\n\nQronoDate.prototype.startOfYear = function () {\n return new QronoDate(this[internalDate].datetime.startOfYear())\n}\n\nQronoDate.prototype.startOfMonth = function () {\n return new QronoDate(this[internalDate].datetime.startOfMonth())\n}\n\nfor (const field of ['year', 'month', 'day']) {\n QronoDate.prototype[field] = function (value) {\n if (given(value)) {\n return new QronoDate(this[internalDate].datetime[field](value))\n }\n return this[internalDate].datetime[field]()\n }\n}\nfor (const method of [\n 'dayOfWeek',\n 'dayOfYear',\n 'weekOfYear',\n 'yearOfWeek',\n 'isLeapYear',\n 'daysInMonth',\n 'daysInYear',\n 'weeksInYear',\n]) {\n QronoDate.prototype[method] = function () {\n return this[internalDate].datetime[method]()\n }\n}\nfor (const method of ['minutesInDay', 'hasDstInYear', 'isDstTransitionDay']) {\n QronoDate.prototype[method] = function () {\n return qrono(\n { disambiguation: 'later' },\n this[internalDate].datetime.toArray().slice(0, 3)\n )[method]()\n }\n}\n\nQronoDate.prototype.endOfYear = function () {\n return this.clone({ month: 12, day: 31 })\n}\n\nQronoDate.prototype.endOfMonth = function () {\n return this.clone({ day: this.daysInMonth() })\n}\n\nQronoDate.prototype.isSame = function (another) {\n return +this === +another\n}\nQronoDate.prototype.isBefore = function (another) {\n return this < another\n}\nQronoDate.prototype.isAfter = function (another) {\n return this > another\n}\nQronoDate.prototype.isSameOrBefore = function (another) {\n return this <= another\n}\nQronoDate.prototype.isSameOrAfter = function (another) {\n return this >= another\n}\nQronoDate.prototype.isBetween = function (a, b) {\n return (a <= this && this <= b) || (b <= this && this <= a)\n}\n\nQronoDate.prototype.plus = function (...args) {\n return plusDate.call(this, 1, ...args)\n}\n\nQronoDate.prototype.minus = function (...args) {\n return plusDate.call(this, -1, ...args)\n}\n\nfunction plusDate(sign, ...args) {\n const arg0 = args[0]\n const arg1 = args[1]\n const datetime = this[internalDate].datetime\n if (Number.isFinite(arg0) && !Number.isFinite(arg1)) {\n return datetime.plus({ day: sign * arg0 }).toDate()\n }\n let timeFields = null\n if (isObject(arg0) && hasDatetimeField(arg0)) {\n timeFields = {\n year: sign * (arg0.year ?? 0),\n month: sign * (arg0.month ?? 0),\n day: sign * (arg0.day ?? 0),\n }\n } else if (Number.isFinite(arg0)) {\n if (args.length > 3) {\n throw RangeError('Too many arguments')\n }\n timeFields = { year: sign * arg0, month: sign * arg1, day: sign * arg2 }\n } else if (Array.isArray(arg0)) {\n if (arg0.length > 3) {\n throw RangeError('Too many elements')\n }\n timeFields = {\n year: sign * arg0[0],\n month: sign * arg0[1],\n day: sign * arg0[2],\n }\n } else {\n throw TypeError()\n }\n return datetime.plus(timeFields).toDate()\n}\n"],"names":["initialSafeDate","daysPerWeek","hoursPerDay","minutesPerHour","minutesPerDay","secondsPerMinute","secondsPerHour","secondsPerDay","millisecondsPerSecond","millisecondsPerMinute","millisecondsPerDay","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","monday","tuesday","wednesday","thursday","friday","saturday","sunday","internal","args","self","set","parse","valid","getNative","source","first","second","_a","flat","values","v","name","baseDate","newDate","_b","_c","_d","_e","_f","_g","_h","dateOnly","disambig","_i","requested","_j","_k","_l","_m","_n","_o","_p","numeric","nextDay","prevDay","adjust","isGap","adjustedUTC","isOverlap","parsePattern","str","text","hasTime","year","month","day","offset","native","p","n","offsetAbs","field","theThursday","startOfYear","firstThursday","currentOffset","offsets","_","index","minOffset","maxOffset","startOfDay","days","endOfYear","endOfLastYear","cloneArg","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","method","plusDate","datetime"],"mappings":"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"}