qrono 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/qrono.cjs +1 -1
- package/dist/qrono.cjs.map +1 -1
- package/dist/qrono.js +56 -50
- package/dist/qrono.js.map +1 -1
- package/dist/qrono.min.js +1 -1
- package/dist/qrono.min.js.map +1 -1
- package/package.json +1 -1
- package/src/qrono.js +7 -5
package/dist/qrono.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var nt=Object.defineProperty;var x=Object.getOwnPropertySymbols;var ot=Object.prototype.hasOwnProperty,it=Object.prototype.propertyIsEnumerable;var L=(t,e,n)=>e in t?nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,U=(t,e)=>{for(var n in e||(e={}))ot.call(e,n)&&L(t,n,e[n]);if(x)for(var n of x(e))it.call(e,n)&&L(t,n,e[n]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const rt=new Date(1915,0,1,12,0,0,0),Y=7,B=24,A=60,C=A*B,z=60,st=z*A,at=st*B,Q=1e3,ut=z*Q,H=at*Q,q=1,Z=2,I=3,T=4,G=5,K=6,V=7;function S(t,...e){return e.flat().some(t.hasOwnProperty,t)}function $(t){return Object.entries(t).filter(([,e])=>!ct(e)).map(([e])=>e)}function m(t){return t!==void 0}function ct(t){return t instanceof Function}function ft(t){return typeof t=="string"||t instanceof String}function F(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function J(t){return!Number.isNaN(t.getTime())}function N(t){return S(t,["year","month","day","hour","minute","second","millisecond"])}function X(t,e,n){const f=e.getTime(),s=new Date(f);if(t)return s;const i=new Date(f);i.setDate(e.getDate()+1);const u=new Date(f);u.setDate(e.getDate()-1);const y=i.getTimezoneOffset()-u.getTimezoneOffset();if(y===0)return s;const h=new Date(new Date(f).setUTCMinutes(e.getUTCMinutes()+y));return n?h:h.getHours()!==e.getHours()||h.getMinutes()!==e.getMinutes()?s:h}const k=o;o.date=r;const g={localtime:!1,interpretAsDst:!0};for(const t of $(g))o[t]=function(e){return m(e)?(g[t]=e,this):g[t]};o.context=function(t){if(m(t)){for(const e of $(g))if(S(t,e))return g[e]=t[e],this}return U({},g)};o.asUtc=function(){return g.localtime=!1,this};o.asLocaltime=function(){return g.localtime=!0,this};Object.assign(o,{monday:q,tuesday:Z,wednesday:I,thursday:T,friday:G,saturday:K,sunday:V});const a=Symbol("Qrono.internal");function o(...t){var s;if(!new.target)return new o(...t);const e={nativeDate:null,localtime:!1,interpretAsDst:!1,set:dt,parse:pt,valid:ht,context:lt,getNative:yt};if(this[a]=e,e.context(g),t[0]instanceof o){const i=t.shift();for(const u of $(e))e[u]=i[u]()}F(t[0])&&!N(t[0])&&e.context(t.shift());const n=t[0],f=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(ft(n))e.parse(n);else if(F(n)){if(!N(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");e.set(n)}else if(Number.isFinite(n)&&!Number.isFinite(f))e.nativeDate=new Date(n);else if(Number.isFinite(n)||Array.isArray(n)){const i=t.flat().filter(u=>Number.isSafeInteger(u));if(i.length!==t.flat().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 ht(){return J(this.nativeDate)}function lt(t){if(t){for(const e of $(g))S(t,e)&&(this[e]=t[e]);return this}}function yt(t){return this.nativeDate[`get${this.localtime?"":"UTC"}${t}`]()}function dt(t){var n,f,s,i,u,y,h,c,D,M,v,E,P,R,W,j;const e=U({},t);if(e.month=e.month&&e.month-1,this.localtime){const d=!S(t,"hour","minute","second","millisecond"),b=d?!0:this.interpretAsDst,w=(n=this.nativeDate)!=null?n:new Date(0,0),O=new Date(rt.getTime()),p={year:(f=e.year)!=null?f:w.getFullYear(),month:(s=e.month)!=null?s:w.getMonth(),day:(i=e.day)!=null?i:w.getDate(),hour:(u=e.hour)!=null?u:d?0:w.getHours(),minute:(y=e.minute)!=null?y:d?0:w.getMinutes(),second:(h=e.second)!=null?h:d?0:w.getSeconds(),millisecond:(c=e.millisecond)!=null?c:d?0:w.getMilliseconds()};O.setFullYear(p.year,p.month,p.day),O.setHours(p.hour,p.minute,p.second,p.millisecond);const et=p.year*1e8+p.month*1e6+p.day*1e4+p.hour*100+p.minute<O.getFullYear()*1e8+O.getMonth()*1e6+O.getDate()*1e4+O.getHours()*100+O.getMinutes();this.nativeDate=X(b,O,et)}else{const d=(D=this.nativeDate)!=null?D:new Date(0),b=new Date(0);b.setUTCFullYear((M=e.year)!=null?M:d.getUTCFullYear(),(v=e.month)!=null?v:d.getUTCMonth(),(E=e.day)!=null?E:d.getUTCDate()),b.setUTCHours((P=e.hour)!=null?P:d.getUTCHours(),(R=e.minute)!=null?R:d.getUTCMinutes(),(W=e.second)!=null?W:d.getUTCSeconds(),(j=e.millisecond)!=null?j:d.getUTCMilliseconds()),this.nativeDate=b}return this}const mt=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 pt(t){var c;const e=t.trim().toUpperCase(),n=e.match(mt);if(!n)throw RangeError(`Failed to parse '${t}'. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);const f=n[4]!==void 0,[s,i,u,y]=[+n[1],+n[2]||1,+n[3]||1,n[8]],h=new Date(e);if(!J(h))throw RangeError(`Failed to parse '${t}' by Date. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);return y?this.nativeDate=h:f?this.set({year:s,month:i,day:u,hour:+n[4]||0,minute:+n[5]||0,second:+n[6]||0,millisecond:+((c=n[7])==null?void 0:c.padStart(3,"0"))||0}):this.set({year:s,month:i,day:u}),this}o.prototype.toString=function(){if(this[a].localtime){const t=this[a].nativeDate,e=-t.getTimezoneOffset(),n=Math.abs(e);return`${String(t.getFullYear()).padStart(4,"0")}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}T${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}.${String(t.getMilliseconds()).padStart(3,"0")}${(e>=0?"+":"-")+String(Math.trunc(n/A)).padStart(2,"0")+":"+String(n%A).padStart(2,"0")}`}return this[a].nativeDate.toISOString()};o.prototype.valueOf=function(){return this[a].nativeDate.valueOf()};o.prototype.clone=function(...t){return new o(this,...t)};o.prototype.context=function(t){return m(t)?this.clone(t):{localtime:this[a].localtime,interpretAsDst:this[a].interpretAsDst}};o.prototype.nativeDate=function(){return new Date(this[a].nativeDate.getTime())};o.prototype.offset=function(){return this[a].localtime?-this[a].nativeDate.getTimezoneOffset():0};o.prototype.localtime=function(t){return m(t)?this.clone({localtime:t}):this[a].localtime};o.prototype.interpretAsDst=function(t){return m(t)?this.clone({interpretAsDst:t}):this[a].interpretAsDst};o.prototype.valid=function(){return this[a].valid()};o.prototype.numeric=function(){return this[a].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 r(this.clone(...t))};o.prototype.asUtc=function(){return this.clone({localtime:!1})};o.prototype.asLocaltime=function(){return this.clone({localtime:!0})};o.prototype.year=function(t){return m(t)?this.clone({year:t}):this[a].getNative("FullYear")};o.prototype.month=function(t){return m(t)?this.clone({month:t}):this[a].getNative("Month")+1};o.prototype.day=function(t){return m(t)?this.clone({day:t}):this[a].getNative("Date")};o.prototype.hour=function(t){return m(t)?this.clone({hour:t}):this[a].getNative("Hours")};o.prototype.minute=function(t){return m(t)?this.clone({minute:t}):this[a].getNative("Minutes")};o.prototype.second=function(t){return m(t)?this.clone({second:t}):this[a].getNative("Seconds")};o.prototype.millisecond=function(t){return m(t)?this.clone({millisecond:t}):this[a].getNative("Milliseconds")};o.prototype.dayOfWeek=function(){return 1+(this[a].getNative("Day")-1+Y)%Y};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()+T),n=e.startOfYear(),f=n.dayOfWeek()===T?n:n.day(1+(T-n.dayOfWeek()+Y)%Y);return 1+Math.ceil((e-f)/Y)};o.prototype.yearOfWeek=function(){const t=this.toDate();return t.day(t.day()-t.dayOfWeek()+T).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[a].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(){return this[a].localtime?this.offset()===Math.max(...[3,6,9,12].map(t=>this.month(t).offset())):!1};o.prototype.isDstTransitionDay=function(){return this[a].localtime?this.minutesInDay()!==C:!1};o.prototype.minutesInDay=function(){if(!this[a].localtime)return C;const t=this.context({interpretAsDst:!0}).startOfDay(),e=t.plus({day:1}).startOfDay();return t.day()===e.day()?C:(e-t)/ut};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()===T||e.dayOfWeek()===I?53:52};o.prototype.startOfYear=function(){return this.clone({month:1,day:1,hour:0,minute:0,second:0,millisecond:0})};o.prototype.startOfMonth=function(){return this.clone({day:1,hour:0,minute:0,second:0,millisecond:0})};o.prototype.startOfDay=function(){const t=this.clone({interpretAsDst:!0},{hour:0,minute:0,second:0,millisecond:0}).numeric();return this.clone(t)};o.prototype.startOfHour=function(){return this.clone({minute:0,second:0,millisecond:0})};o.prototype.startOfMinute=function(){return this.clone({second:0,millisecond:0})};o.prototype.startOfSecond=function(){return this.clone({millisecond:0})};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 _.call(this,1,...t)};o.prototype.minus=function(...t){return _.call(this,-1,...t)};function _(t,...e){var y,h;const n=e[0],f=e[1];if(Number.isFinite(n)&&!Number.isFinite(f))return this.clone(this.numeric()+n);let s=null;if(F(n)){if(!N(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 c=e.flat().filter(D=>Number.isSafeInteger(D));if(c.length!==e.flat().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(),u=this[a].localtime?"":"UTC";if(S(s,"year")||S(s,"month")){const c=this.year()+t*((y=s.year)!=null?y:0),D=this.month()+t*((h=s.month)!=null?h:0),M=new Date(i.getTime());M[`set${u}FullYear`](c,D,0);const v=M[`get${u}Date`]();v<this.day()?i[`set${u}FullYear`](c,M[`get${u}Month`](),v):i[`set${u}FullYear`](c,D-1)}S(s,"day")&&i[`set${u}Date`](i[`get${u}Date`]()+t*s.day);for(const[c,D]of[["hour","Hours"],["minute","Minutes"],["second","Seconds"],["millisecond","Milliseconds"]])!S(s,c)||s[c]==null||i[`setUTC${D}`](i[`getUTC${D}`]()+t*s[c]);return this.clone(X(this[a].interpretAsDst,i,!1))}const l=Symbol("QronoDate.internal");function r(...t){if(!new.target)return new r(...t);const e={datetime:null};this[l]=e;let n=null;t[0]instanceof r?n=t.shift().toDatetime():t[0]instanceof o&&(n=t.shift());const f=t[0],s=t[1];return Number.isFinite(f)&&!Number.isFinite(s)&&(t[0]=Math.floor(f)*H),n?n=n.clone(...t):n=k(...t),e.datetime=n.startOfDay(),this}r.prototype.toString=function(){return this[l].datetime.toString().substring(0,10)};r.prototype.valueOf=function(){return this[l].datetime/H};r.prototype.valid=function(){return this[l].datetime.valid()};r.prototype.clone=function(...t){return new r(this,...t)};r.prototype.toDatetime=function(){return k(this[l].datetime.toArray())};r.prototype.numeric=function(){return this[l].datetime.numeric()/H};r.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day()}};r.prototype.toArray=function(){return[this.year(),this.month(),this.day()]};r.prototype.startOfYear=function(){return new r(this[l].datetime.startOfYear())};r.prototype.startOfMonth=function(){return new r(this[l].datetime.startOfMonth())};r.prototype.startOfDay=function(){return this[l].datetime.clone()};for(const t of["year","month","day"])r.prototype[t]=function(e){return m(e)?new r(this[l].datetime[t](e)):this[l].datetime[t]()};for(const t of["dayOfWeek","dayOfYear","weekOfYear","yearOfWeek","isLeapYear","daysInMonth","daysInYear","weeksInYear"])r.prototype[t]=function(){return this[l].datetime[t]()};for(const t of["minutesInDay","hasDstInYear","isDstTransitionDay"])r.prototype[t]=function(){return k({interpretAsDst:!0},this[l].datetime.toArray().slice(0,3))[t]()};r.prototype.endOfYear=function(){return this.clone({month:12,day:31})};r.prototype.endOfMonth=function(){return this.clone({day:this.daysInMonth()})};r.prototype.isSame=function(t){return+this==+t};r.prototype.isBefore=function(t){return this<t};r.prototype.isAfter=function(t){return this>t};r.prototype.isSameOrBefore=function(t){return this<=t};r.prototype.isSameOrAfter=function(t){return this>=t};r.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t};r.prototype.plus=function(...t){return tt.call(this,1,...t)};r.prototype.minus=function(...t){return tt.call(this,-1,...t)};function tt(t,...e){var u,y,h;const n=e[0],f=e[1],s=this[l].datetime;if(Number.isFinite(n)&&!Number.isFinite(f))return s.plus({day:t*n}).toDate();let i=null;if(F(n)&&N(n))i={year:t*((u=n.year)!=null?u:0),month:t*((y=n.month)!=null?y:0),day:t*((h=n.day)!=null?h:0)};else if(Number.isFinite(n)){if(e.length>3)throw RangeError("Too many arguments");i={year:t*n,month:t*f,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.friday=G;exports.monday=q;exports.qrono=k;exports.saturday=K;exports.sunday=V;exports.thursday=T;exports.tuesday=Z;exports.wednesday=I;
|
|
1
|
+
"use strict";var et=Object.defineProperty;var x=Object.getOwnPropertySymbols;var nt=Object.prototype.hasOwnProperty,ot=Object.prototype.propertyIsEnumerable;var L=(t,e,n)=>e in t?et(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,U=(t,e)=>{for(var n in e||(e={}))nt.call(e,n)&&L(t,n,e[n]);if(x)for(var n of x(e))ot.call(e,n)&&L(t,n,e[n]);return t};Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const it=new Date(1915,0,1,12,0,0,0),Y=7,B=24,A=60,C=A*B,z=60,rt=z*A,st=rt*B,Q=1e3,at=z*Q,H=st*Q,q=1,Z=2,I=3,M=4,G=5,K=6,V=7;function S(t,...e){return e.flat().some(t.hasOwnProperty,t)}function $(t){return Object.entries(t).filter(([,e])=>!ut(e)).map(([e])=>e)}function m(t){return t!==void 0}function ut(t){return t instanceof Function}function ct(t){return typeof t=="string"||t instanceof String}function F(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function _(t){return!Number.isNaN(t.getTime())}function N(t){return S(t,["year","month","day","hour","minute","second","millisecond"])}function ft(t,e,n){const f=e.getTime(),s=new Date(f);if(t)return s;const i=new Date(f);i.setDate(e.getDate()+1);const u=new Date(f);u.setDate(e.getDate()-1);const y=i.getTimezoneOffset()-u.getTimezoneOffset();if(y===0)return s;const h=new Date(new Date(f).setUTCMinutes(e.getUTCMinutes()+y));return n?h:h.getHours()!==e.getHours()||h.getMinutes()!==e.getMinutes()?s:h}const k=o;o.date=r;const g={localtime:!1,interpretAsDst:!0};for(const t of $(g))o[t]=function(e){return m(e)?(g[t]=e,this):g[t]};o.context=function(t){if(m(t)){for(const e of $(g))S(t,e)&&(g[e]=t[e]);return this}return U({},g)};o.asUtc=function(){return g.localtime=!1,this};o.asLocaltime=function(){return g.localtime=!0,this};Object.assign(o,{monday:q,tuesday:Z,wednesday:I,thursday:M,friday:G,saturday:K,sunday:V});const a=Symbol("Qrono.internal");function o(...t){var s;if(!new.target)return new o(...t);const e={nativeDate:null,localtime:!1,interpretAsDst:!1,set:dt,parse:pt,valid:ht,context:lt,getNative:yt};if(this[a]=e,e.context(g),t[0]instanceof o){const i=t.shift();for(const u of $(e))e[u]=i[u]()}F(t[0])&&!N(t[0])&&e.context(t.shift());const n=t[0],f=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(ct(n))e.parse(n);else if(F(n)){if(!N(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");e.set(n)}else if(Number.isFinite(n)&&!Number.isFinite(f))e.nativeDate=new Date(n);else if(Number.isFinite(n)||Array.isArray(n)){const i=t.flat().filter(u=>Number.isSafeInteger(u));if(i.length!==t.flat().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 ht(){return _(this.nativeDate)}function lt(t){if(t){for(const e of $(g))S(t,e)&&(this[e]=t[e]);return this}}function yt(t){return this.nativeDate[`get${this.localtime?"":"UTC"}${t}`]()}function dt(t){var n,f,s,i,u,y,h,c,D,T,v,E,P,R,W,j;const e=U({},t);if(e.month=e.month&&e.month-1,this.localtime){const d=!S(t,"hour","minute","second","millisecond"),b=d?!0:this.interpretAsDst,w=(n=this.nativeDate)!=null?n:new Date(0,0),O=new Date(it.getTime()),p={year:(f=e.year)!=null?f:w.getFullYear(),month:(s=e.month)!=null?s:w.getMonth(),day:(i=e.day)!=null?i:w.getDate(),hour:(u=e.hour)!=null?u:d?0:w.getHours(),minute:(y=e.minute)!=null?y:d?0:w.getMinutes(),second:(h=e.second)!=null?h:d?0:w.getSeconds(),millisecond:(c=e.millisecond)!=null?c:d?0:w.getMilliseconds()};O.setFullYear(p.year,p.month,p.day),O.setHours(p.hour,p.minute,p.second,p.millisecond);const tt=p.year*1e8+p.month*1e6+p.day*1e4+p.hour*100+p.minute<O.getFullYear()*1e8+O.getMonth()*1e6+O.getDate()*1e4+O.getHours()*100+O.getMinutes();this.nativeDate=ft(b,O,tt)}else{const d=(D=this.nativeDate)!=null?D:new Date(0),b=new Date(0);b.setUTCFullYear((T=e.year)!=null?T:d.getUTCFullYear(),(v=e.month)!=null?v:d.getUTCMonth(),(E=e.day)!=null?E:d.getUTCDate()),b.setUTCHours((P=e.hour)!=null?P:d.getUTCHours(),(R=e.minute)!=null?R:d.getUTCMinutes(),(W=e.second)!=null?W:d.getUTCSeconds(),(j=e.millisecond)!=null?j:d.getUTCMilliseconds()),this.nativeDate=b}return this}const mt=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 pt(t){var c;const e=t.trim().toUpperCase(),n=e.match(mt);if(!n)throw RangeError(`Failed to parse '${t}'. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);const f=n[4]!==void 0,[s,i,u,y]=[+n[1],+n[2]||1,+n[3]||1,n[8]],h=new Date(e);if(!_(h))throw RangeError(`Failed to parse '${t}' by Date. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);return y?this.nativeDate=h:f?this.set({year:s,month:i,day:u,hour:+n[4]||0,minute:+n[5]||0,second:+n[6]||0,millisecond:+((c=n[7])==null?void 0:c.padStart(3,"0"))||0}):this.set({year:s,month:i,day:u}),this}o.prototype.toString=function(){if(this[a].localtime){const t=this[a].nativeDate,e=-t.getTimezoneOffset(),n=Math.abs(e);return`${String(t.getFullYear()).padStart(4,"0")}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}T${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}.${String(t.getMilliseconds()).padStart(3,"0")}${(e>=0?"+":"-")+String(Math.trunc(n/A)).padStart(2,"0")+":"+String(n%A).padStart(2,"0")}`}return this[a].nativeDate.toISOString()};o.prototype.valueOf=function(){return this[a].nativeDate.valueOf()};o.prototype.clone=function(...t){return new o(this,...t)};o.prototype.context=function(t){return m(t)?this.clone(t):{localtime:this[a].localtime,interpretAsDst:this[a].interpretAsDst}};o.prototype.nativeDate=function(){return new Date(this[a].nativeDate.getTime())};o.prototype.offset=function(){return this[a].localtime?-this[a].nativeDate.getTimezoneOffset():0};o.prototype.localtime=function(t){return m(t)?this.clone({localtime:t}):this[a].localtime};o.prototype.interpretAsDst=function(t){return m(t)?this.clone({interpretAsDst:t}):this[a].interpretAsDst};o.prototype.valid=function(){return this[a].valid()};o.prototype.numeric=function(){return this[a].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 r(this.clone(...t))};o.prototype.asUtc=function(){return this.clone({localtime:!1})};o.prototype.asLocaltime=function(){return this.clone({localtime:!0})};o.prototype.year=function(t){return m(t)?this.clone({year:t}):this[a].getNative("FullYear")};o.prototype.month=function(t){return m(t)?this.clone({month:t}):this[a].getNative("Month")+1};o.prototype.day=function(t){return m(t)?this.clone({day:t}):this[a].getNative("Date")};o.prototype.hour=function(t){return m(t)?this.clone({hour:t}):this[a].getNative("Hours")};o.prototype.minute=function(t){return m(t)?this.clone({minute:t}):this[a].getNative("Minutes")};o.prototype.second=function(t){return m(t)?this.clone({second:t}):this[a].getNative("Seconds")};o.prototype.millisecond=function(t){return m(t)?this.clone({millisecond:t}):this[a].getNative("Milliseconds")};o.prototype.dayOfWeek=function(){return 1+(this[a].getNative("Day")-1+Y)%Y};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(),f=n.dayOfWeek()===M?n:n.day(1+(M-n.dayOfWeek()+Y)%Y);return 1+Math.ceil((e-f)/Y)};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[a].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[a].localtime)return!1;const t=Array.from({length:12},(f,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[a].localtime?this.minutesInDay()!==C:!1};o.prototype.minutesInDay=function(){if(!this[a].localtime)return C;const t=this.context({interpretAsDst:!0}).startOfDay(),e=t.plus({day:1}).startOfDay();return t.day()===e.day()?C:(e-t)/at};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()===I?53:52};o.prototype.startOfYear=function(){return this.clone({month:1,day:1,hour:0,minute:0,second:0,millisecond:0})};o.prototype.startOfMonth=function(){return this.clone({day:1,hour:0,minute:0,second:0,millisecond:0})};o.prototype.startOfDay=function(){const t=this.clone({interpretAsDst:!0},{hour:0,minute:0,second:0,millisecond:0}).numeric();return this.clone(t)};o.prototype.startOfHour=function(){return this.clone({minute:0,second:0,millisecond:0})};o.prototype.startOfMinute=function(){return this.clone({second:0,millisecond:0})};o.prototype.startOfSecond=function(){return this.clone({millisecond:0})};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 J.call(this,1,...t)};o.prototype.minus=function(...t){return J.call(this,-1,...t)};function J(t,...e){var y,h;const n=e[0],f=e[1];if(Number.isFinite(n)&&!Number.isFinite(f))return this.clone(this.numeric()+n);let s=null;if(F(n)){if(!N(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 c=e.flat().filter(D=>Number.isSafeInteger(D));if(c.length!==e.flat().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(),u=this[a].localtime?"":"UTC";if(S(s,"year")||S(s,"month")){const c=this.year()+t*((y=s.year)!=null?y:0),D=this.month()+t*((h=s.month)!=null?h:0),T=new Date(i.getTime());T[`set${u}FullYear`](c,D,0);const v=T[`get${u}Date`]();v<this.day()?i[`set${u}FullYear`](c,T[`get${u}Month`](),v):i[`set${u}FullYear`](c,D-1)}S(s,"day")&&i[`set${u}Date`](i[`get${u}Date`]()+t*s.day);for(const[c,D]of[["hour","Hours"],["minute","Minutes"],["second","Seconds"],["millisecond","Milliseconds"]])!S(s,c)||s[c]==null||i[`setUTC${D}`](i[`getUTC${D}`]()+t*s[c]);return this.clone(i)}const l=Symbol("QronoDate.internal");function r(...t){if(!new.target)return new r(...t);const e={datetime:null};this[l]=e;let n=null;t[0]instanceof r?n=t.shift().toDatetime():t[0]instanceof o&&(n=t.shift());const f=t[0],s=t[1];return Number.isFinite(f)&&!Number.isFinite(s)&&(t[0]=Math.floor(f)*H),n?n=n.clone(...t):n=k(...t),e.datetime=n.startOfDay(),this}r.prototype.toString=function(){return this[l].datetime.toString().substring(0,10)};r.prototype.valueOf=function(){return this[l].datetime/H};r.prototype.valid=function(){return this[l].datetime.valid()};r.prototype.clone=function(...t){return new r(this,...t)};r.prototype.toDatetime=function(){return k(this[l].datetime.toArray())};r.prototype.numeric=function(){return this[l].datetime.numeric()/H};r.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day()}};r.prototype.toArray=function(){return[this.year(),this.month(),this.day()]};r.prototype.startOfYear=function(){return new r(this[l].datetime.startOfYear())};r.prototype.startOfMonth=function(){return new r(this[l].datetime.startOfMonth())};r.prototype.startOfDay=function(){return this[l].datetime.clone()};for(const t of["year","month","day"])r.prototype[t]=function(e){return m(e)?new r(this[l].datetime[t](e)):this[l].datetime[t]()};for(const t of["dayOfWeek","dayOfYear","weekOfYear","yearOfWeek","isLeapYear","daysInMonth","daysInYear","weeksInYear"])r.prototype[t]=function(){return this[l].datetime[t]()};for(const t of["minutesInDay","hasDstInYear","isDstTransitionDay"])r.prototype[t]=function(){return k({interpretAsDst:!0},this[l].datetime.toArray().slice(0,3))[t]()};r.prototype.endOfYear=function(){return this.clone({month:12,day:31})};r.prototype.endOfMonth=function(){return this.clone({day:this.daysInMonth()})};r.prototype.isSame=function(t){return+this==+t};r.prototype.isBefore=function(t){return this<t};r.prototype.isAfter=function(t){return this>t};r.prototype.isSameOrBefore=function(t){return this<=t};r.prototype.isSameOrAfter=function(t){return this>=t};r.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t};r.prototype.plus=function(...t){return X.call(this,1,...t)};r.prototype.minus=function(...t){return X.call(this,-1,...t)};function X(t,...e){var u,y,h;const n=e[0],f=e[1],s=this[l].datetime;if(Number.isFinite(n)&&!Number.isFinite(f))return s.plus({day:t*n}).toDate();let i=null;if(F(n)&&N(n))i={year:t*((u=n.year)!=null?u:0),month:t*((y=n.month)!=null?y:0),day:t*((h=n.day)!=null?h:0)};else if(Number.isFinite(n)){if(e.length>3)throw RangeError("Too many arguments");i={year:t*n,month:t*f,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.friday=G;exports.monday=q;exports.qrono=k;exports.saturday=K;exports.sunday=V;exports.thursday=M;exports.tuesday=Z;exports.wednesday=I;
|
|
2
2
|
//# sourceMappingURL=qrono.cjs.map
|
package/dist/qrono.cjs.map
CHANGED
|
@@ -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 const monday = 1\nexport const tuesday = 2\nexport const wednesday = 3\nexport const thursday = 4\nexport const friday = 5\nexport const saturday = 6\nexport const sunday = 7\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\n/**\n * Resolve a local time that falls on or near a DST transition boundary.\n *\n * Handles two distinct cases that arise when constructing a local Date:\n *\n * GAP (spring-forward, isGap = true):\n * A range of local times is skipped entirely. JavaScript automatically advances\n * the time to the next valid moment (post-transition / DST side), adding the gap\n * size to the UTC timestamp. The caller detects a gap by comparing the constructed\n * Date's local fields against the originally requested values.\n * - interpretAsDst = true → accept JS's forward-shift as-is (DST side)\n * - interpretAsDst = false → shift UTC back by the gap size (pre-transition side)\n *\n * OVERLAP (fall-back, isGap = false):\n * A range of local times occurs twice. JavaScript always picks the DST side\n * (first occurrence). If the time is not actually in an overlap, the adjustment\n * will not preserve the original local fields and the original Date is returned.\n * - interpretAsDst = true → accept JS's DST-side interpretation as-is\n * - interpretAsDst = false → shift UTC by the offset difference (standard-time side)\n *\n * In both cases the UTC adjustment uses the same formula:\n * adjustedUTC = date.getTime() + adjust * millisecondsPerMinute\n * where adjust = nextDay.timezoneOffset - prevDay.timezoneOffset.\n * For a gap the adjust is negative (offsets decrease going forward),\n * so subtracting it moves UTC backward to the pre-transition side.\n * For an overlap the adjust is also negative in the same direction,\n * and the same subtraction moves to the standard-time side.\n *\n * @param {boolean} interpretAsDst\n * @param {Date} date - The Date constructed from the requested local fields.\n * @param {boolean} isGap - true if the requested time fell in a DST gap (spring-forward).\n * @returns {Date}\n */\nexport function resolveDstTime(interpretAsDst, date, isGap) {\n const numeric = date.getTime()\n const original = new Date(numeric)\n if (interpretAsDst) {\n return original\n }\n const nextDay = new Date(numeric)\n nextDay.setDate(date.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(date.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n if (adjust === 0) {\n return original\n }\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(date.getUTCMinutes() + adjust)\n )\n if (isGap) {\n return adjustedUTC\n }\n // For an overlap, verify the candidate preserves the original local fields.\n // If it does not, the time is not actually in an overlap — return as-is.\n if (\n adjustedUTC.getHours() !== date.getHours() ||\n adjustedUTC.getMinutes() !== date.getMinutes()\n ) {\n return original\n }\n return adjustedUTC\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n resolveDstTime,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\nexport {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers'\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n interpretAsDst: true,\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 return this\n }\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\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('Qrono.internal')\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 interpretAsDst: false,\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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 dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const interpretAsDst = dateOnly ? true : this.interpretAsDst\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 // 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 this.nativeDate = resolveDstTime(interpretAsDst, newDate, isGap)\n } else {\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 }\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// -----------------------------------------------------------------------------\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 `${String(t.getFullYear()).padStart(4, '0')}-${String(\n t.getMonth() + 1\n ).padStart(2, '0')}-${String(t.getDate()).padStart(2, '0')}T${String(\n t.getHours()\n ).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}:${String(\n t.getSeconds()\n ).padStart(2, '0')}.${String(t.getMilliseconds()).padStart(3, '0')}${\n (offset >= 0 ? '+' : '-') +\n String(Math.trunc(offsetAbs / minutesPerHour)).padStart(2, '0') +\n ':' +\n String(offsetAbs % minutesPerHour).padStart(2, '0')\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 interpretAsDst: this[internal].interpretAsDst,\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.interpretAsDst = function (arg) {\n return given(arg)\n ? this.clone({ interpretAsDst: arg })\n : this[internal].interpretAsDst\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\nQrono.prototype.year = function (value) {\n return given(value)\n ? this.clone({ year: value })\n : this[internal].getNative('FullYear')\n}\n\nQrono.prototype.month = function (value) {\n return given(value)\n ? this.clone({ month: value })\n : this[internal].getNative('Month') + 1\n}\n\nQrono.prototype.day = function (value) {\n return given(value)\n ? this.clone({ day: value })\n : this[internal].getNative('Date')\n}\n\nQrono.prototype.hour = function (value) {\n return given(value)\n ? this.clone({ hour: value })\n : this[internal].getNative('Hours')\n}\n\nQrono.prototype.minute = function (value) {\n return given(value)\n ? this.clone({ minute: value })\n : this[internal].getNative('Minutes')\n}\n\nQrono.prototype.second = function (value) {\n return given(value)\n ? this.clone({ second: value })\n : this[internal].getNative('Seconds')\n}\n\nQrono.prototype.millisecond = function (value) {\n return given(value)\n ? this.clone({ millisecond: value })\n : this[internal].getNative('Milliseconds')\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 return (\n this.offset() ===\n Math.max(...[3, 6, 9, 12].map(month => this.month(month).offset()))\n )\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({ interpretAsDst: true }).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\nQrono.prototype.startOfYear = function () {\n return this.clone({\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n })\n}\n\nQrono.prototype.startOfMonth = function () {\n return this.clone({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { interpretAsDst: true },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.startOfHour = function () {\n return this.clone({ minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfMinute = function () {\n return this.clone({ second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfSecond = function () {\n return this.clone({ millisecond: 0 })\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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(resolveDstTime(this[internal].interpretAsDst, date, false))\n}\n\n// -----------------------------------------------------------------------------\n// QronoDate Class\n// -----------------------------------------------------------------------------\nconst internalDate = Symbol('QronoDate.internal')\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 { interpretAsDst: true },\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","monday","tuesday","wednesday","thursday","friday","saturday","sunday","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","resolveDstTime","interpretAsDst","isGap","numeric","original","nextDay","prevDay","adjust","adjustedUTC","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","internal","args","self","set","parse","valid","getNative","source","first","second","_a","values","v","name","dateOnly","baseDate","newDate","requested","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","parsePattern","str","text","hasTime","year","month","day","offset","native","offsetAbs","theThursday","startOfYear","firstThursday","currentOffset","startOfDay","days","endOfYear","endOfLastYear","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","field","method","plusDate","datetime"],"mappings":"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"}
|
|
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 const monday = 1\nexport const tuesday = 2\nexport const wednesday = 3\nexport const thursday = 4\nexport const friday = 5\nexport const saturday = 6\nexport const sunday = 7\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\n/**\n * Resolve a local time that falls on or near a DST transition boundary.\n *\n * Handles two distinct cases that arise when constructing a local Date:\n *\n * GAP (spring-forward, isGap = true):\n * A range of local times is skipped entirely. JavaScript automatically advances\n * the time to the next valid moment (post-transition / DST side), adding the gap\n * size to the UTC timestamp. The caller detects a gap by comparing the constructed\n * Date's local fields against the originally requested values.\n * - interpretAsDst = true → accept JS's forward-shift as-is (DST side)\n * - interpretAsDst = false → shift UTC back by the gap size (pre-transition side)\n *\n * OVERLAP (fall-back, isGap = false):\n * A range of local times occurs twice. JavaScript always picks the DST side\n * (first occurrence). If the time is not actually in an overlap, the adjustment\n * will not preserve the original local fields and the original Date is returned.\n * - interpretAsDst = true → accept JS's DST-side interpretation as-is\n * - interpretAsDst = false → shift UTC by the offset difference (standard-time side)\n *\n * In both cases the UTC adjustment uses the same formula:\n * adjustedUTC = date.getTime() + adjust * millisecondsPerMinute\n * where adjust = nextDay.timezoneOffset - prevDay.timezoneOffset.\n * For a gap the adjust is negative (offsets decrease going forward),\n * so subtracting it moves UTC backward to the pre-transition side.\n * For an overlap the adjust is also negative in the same direction,\n * and the same subtraction moves to the standard-time side.\n *\n * @param {boolean} interpretAsDst\n * @param {Date} date - The Date constructed from the requested local fields.\n * @param {boolean} isGap - true if the requested time fell in a DST gap (spring-forward).\n * @returns {Date}\n */\nexport function resolveDstTime(interpretAsDst, date, isGap) {\n const numeric = date.getTime()\n const original = new Date(numeric)\n if (interpretAsDst) {\n return original\n }\n const nextDay = new Date(numeric)\n nextDay.setDate(date.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(date.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n if (adjust === 0) {\n return original\n }\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(date.getUTCMinutes() + adjust)\n )\n if (isGap) {\n return adjustedUTC\n }\n // For an overlap, verify the candidate preserves the original local fields.\n // If it does not, the time is not actually in an overlap — return as-is.\n if (\n adjustedUTC.getHours() !== date.getHours() ||\n adjustedUTC.getMinutes() !== date.getMinutes()\n ) {\n return original\n }\n return adjustedUTC\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n resolveDstTime,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\nexport {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers'\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n interpretAsDst: true,\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\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('Qrono.internal')\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 interpretAsDst: false,\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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 dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const interpretAsDst = dateOnly ? true : this.interpretAsDst\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 // 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 this.nativeDate = resolveDstTime(interpretAsDst, newDate, isGap)\n } else {\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 }\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// -----------------------------------------------------------------------------\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 `${String(t.getFullYear()).padStart(4, '0')}-${String(\n t.getMonth() + 1\n ).padStart(2, '0')}-${String(t.getDate()).padStart(2, '0')}T${String(\n t.getHours()\n ).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}:${String(\n t.getSeconds()\n ).padStart(2, '0')}.${String(t.getMilliseconds()).padStart(3, '0')}${\n (offset >= 0 ? '+' : '-') +\n String(Math.trunc(offsetAbs / minutesPerHour)).padStart(2, '0') +\n ':' +\n String(offsetAbs % minutesPerHour).padStart(2, '0')\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 interpretAsDst: this[internal].interpretAsDst,\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.interpretAsDst = function (arg) {\n return given(arg)\n ? this.clone({ interpretAsDst: arg })\n : this[internal].interpretAsDst\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\nQrono.prototype.year = function (value) {\n return given(value)\n ? this.clone({ year: value })\n : this[internal].getNative('FullYear')\n}\n\nQrono.prototype.month = function (value) {\n return given(value)\n ? this.clone({ month: value })\n : this[internal].getNative('Month') + 1\n}\n\nQrono.prototype.day = function (value) {\n return given(value)\n ? this.clone({ day: value })\n : this[internal].getNative('Date')\n}\n\nQrono.prototype.hour = function (value) {\n return given(value)\n ? this.clone({ hour: value })\n : this[internal].getNative('Hours')\n}\n\nQrono.prototype.minute = function (value) {\n return given(value)\n ? this.clone({ minute: value })\n : this[internal].getNative('Minutes')\n}\n\nQrono.prototype.second = function (value) {\n return given(value)\n ? this.clone({ second: value })\n : this[internal].getNative('Seconds')\n}\n\nQrono.prototype.millisecond = function (value) {\n return given(value)\n ? this.clone({ millisecond: value })\n : this[internal].getNative('Milliseconds')\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({ interpretAsDst: true }).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\nQrono.prototype.startOfYear = function () {\n return this.clone({\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n })\n}\n\nQrono.prototype.startOfMonth = function () {\n return this.clone({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { interpretAsDst: true },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.startOfHour = function () {\n return this.clone({ minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfMinute = function () {\n return this.clone({ second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfSecond = function () {\n return this.clone({ millisecond: 0 })\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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('QronoDate.internal')\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 { interpretAsDst: true },\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","monday","tuesday","wednesday","thursday","friday","saturday","sunday","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","resolveDstTime","interpretAsDst","isGap","numeric","original","nextDay","prevDay","adjust","adjustedUTC","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","internal","args","self","set","parse","valid","getNative","source","first","second","_a","values","v","name","dateOnly","baseDate","newDate","requested","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","parsePattern","str","text","hasTime","year","month","day","offset","native","offsetAbs","theThursday","startOfYear","firstThursday","currentOffset","offsets","_","index","minOffset","maxOffset","startOfDay","days","endOfYear","endOfLastYear","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","field","method","plusDate","datetime"],"mappings":"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"}
|
package/dist/qrono.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
var
|
|
1
|
+
var V = Object.defineProperty;
|
|
2
|
+
var x = Object.getOwnPropertySymbols;
|
|
3
|
+
var _ = Object.prototype.hasOwnProperty, J = Object.prototype.propertyIsEnumerable;
|
|
4
|
+
var j = (t, e, n) => e in t ? V(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, k = (t, e) => {
|
|
5
5
|
for (var n in e || (e = {}))
|
|
6
|
-
|
|
7
|
-
if (
|
|
8
|
-
for (var n of
|
|
9
|
-
|
|
6
|
+
_.call(e, n) && j(t, n, e[n]);
|
|
7
|
+
if (x)
|
|
8
|
+
for (var n of x(e))
|
|
9
|
+
J.call(e, n) && j(t, n, e[n]);
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
const
|
|
12
|
+
const X = new Date(1915, 0, 1, 12, 0, 0, 0), b = 7, L = 24, A = 60, U = A * L, B = 60, tt = B * A, et = tt * L, z = 1e3, nt = B * z, C = et * z, ot = 1, it = 2, Q = 3, T = 4, rt = 5, st = 6, at = 7;
|
|
13
13
|
function S(t, ...e) {
|
|
14
14
|
return e.flat().some(t.hasOwnProperty, t);
|
|
15
15
|
}
|
|
16
16
|
function $(t) {
|
|
17
|
-
return Object.entries(t).filter(([, e]) => !
|
|
17
|
+
return Object.entries(t).filter(([, e]) => !ut(e)).map(([e]) => e);
|
|
18
18
|
}
|
|
19
19
|
function d(t) {
|
|
20
20
|
return t !== void 0;
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function ut(t) {
|
|
23
23
|
return t instanceof Function;
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function ct(t) {
|
|
26
26
|
return typeof t == "string" || t instanceof String;
|
|
27
27
|
}
|
|
28
28
|
function F(t) {
|
|
@@ -42,7 +42,7 @@ function N(t) {
|
|
|
42
42
|
"millisecond"
|
|
43
43
|
]);
|
|
44
44
|
}
|
|
45
|
-
function
|
|
45
|
+
function ft(t, e, n) {
|
|
46
46
|
const f = e.getTime(), s = new Date(f);
|
|
47
47
|
if (t)
|
|
48
48
|
return s;
|
|
@@ -71,8 +71,8 @@ for (const t of $(g))
|
|
|
71
71
|
o.context = function(t) {
|
|
72
72
|
if (d(t)) {
|
|
73
73
|
for (const e of $(g))
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
S(t, e) && (g[e] = t[e]);
|
|
75
|
+
return this;
|
|
76
76
|
}
|
|
77
77
|
return k({}, g);
|
|
78
78
|
};
|
|
@@ -83,13 +83,13 @@ o.asLocaltime = function() {
|
|
|
83
83
|
return g.localtime = !0, this;
|
|
84
84
|
};
|
|
85
85
|
Object.assign(o, {
|
|
86
|
-
monday:
|
|
87
|
-
tuesday:
|
|
86
|
+
monday: ot,
|
|
87
|
+
tuesday: it,
|
|
88
88
|
wednesday: Q,
|
|
89
|
-
thursday:
|
|
90
|
-
friday:
|
|
91
|
-
saturday:
|
|
92
|
-
sunday:
|
|
89
|
+
thursday: T,
|
|
90
|
+
friday: rt,
|
|
91
|
+
saturday: st,
|
|
92
|
+
sunday: at
|
|
93
93
|
});
|
|
94
94
|
const a = /* @__PURE__ */ Symbol("Qrono.internal");
|
|
95
95
|
function o(...t) {
|
|
@@ -119,7 +119,7 @@ function o(...t) {
|
|
|
119
119
|
(s = e.nativeDate) != null || (e.nativeDate = /* @__PURE__ */ new Date());
|
|
120
120
|
else if (n instanceof Date)
|
|
121
121
|
e.nativeDate = new Date(n.getTime());
|
|
122
|
-
else if (
|
|
122
|
+
else if (ct(n))
|
|
123
123
|
e.parse(n);
|
|
124
124
|
else if (F(n)) {
|
|
125
125
|
if (!N(n))
|
|
@@ -162,10 +162,10 @@ function yt(t) {
|
|
|
162
162
|
return this.nativeDate[`get${this.localtime ? "" : "UTC"}${t}`]();
|
|
163
163
|
}
|
|
164
164
|
function mt(t) {
|
|
165
|
-
var n, f, s, i, u, y, h, c, D,
|
|
165
|
+
var n, f, s, i, u, y, h, c, D, M, v, I, E, P, R, W;
|
|
166
166
|
const e = k({}, t);
|
|
167
167
|
if (e.month = e.month && e.month - 1, this.localtime) {
|
|
168
|
-
const m = !S(t, "hour", "minute", "second", "millisecond"), Y = m ? !0 : this.interpretAsDst, w = (n = this.nativeDate) != null ? n : new Date(0, 0), O = new Date(
|
|
168
|
+
const m = !S(t, "hour", "minute", "second", "millisecond"), Y = m ? !0 : this.interpretAsDst, w = (n = this.nativeDate) != null ? n : new Date(0, 0), O = new Date(X.getTime()), p = {
|
|
169
169
|
year: (f = e.year) != null ? f : w.getFullYear(),
|
|
170
170
|
month: (s = e.month) != null ? s : w.getMonth(),
|
|
171
171
|
day: (i = e.day) != null ? i : w.getDate(),
|
|
@@ -180,12 +180,12 @@ function mt(t) {
|
|
|
180
180
|
p.second,
|
|
181
181
|
p.millisecond
|
|
182
182
|
);
|
|
183
|
-
const
|
|
184
|
-
this.nativeDate =
|
|
183
|
+
const K = p.year * 1e8 + p.month * 1e6 + p.day * 1e4 + p.hour * 100 + p.minute < O.getFullYear() * 1e8 + O.getMonth() * 1e6 + O.getDate() * 1e4 + O.getHours() * 100 + O.getMinutes();
|
|
184
|
+
this.nativeDate = ft(Y, O, K);
|
|
185
185
|
} else {
|
|
186
186
|
const m = (D = this.nativeDate) != null ? D : /* @__PURE__ */ new Date(0), Y = /* @__PURE__ */ new Date(0);
|
|
187
187
|
Y.setUTCFullYear(
|
|
188
|
-
(
|
|
188
|
+
(M = e.year) != null ? M : m.getUTCFullYear(),
|
|
189
189
|
(v = e.month) != null ? v : m.getUTCMonth(),
|
|
190
190
|
(I = e.day) != null ? I : m.getUTCDate()
|
|
191
191
|
), Y.setUTCHours(
|
|
@@ -331,14 +331,14 @@ o.prototype.dayOfYear = function() {
|
|
|
331
331
|
return 1 + t - t.startOfYear();
|
|
332
332
|
};
|
|
333
333
|
o.prototype.weekOfYear = function() {
|
|
334
|
-
const t = this.toDate(), e = t.day(t.day() - t.dayOfWeek() +
|
|
335
|
-
1 + (
|
|
334
|
+
const t = this.toDate(), e = t.day(t.day() - t.dayOfWeek() + T), n = e.startOfYear(), f = n.dayOfWeek() === T ? n : n.day(
|
|
335
|
+
1 + (T - n.dayOfWeek() + b) % b
|
|
336
336
|
);
|
|
337
337
|
return 1 + Math.ceil((e - f) / b);
|
|
338
338
|
};
|
|
339
339
|
o.prototype.yearOfWeek = function() {
|
|
340
340
|
const t = this.toDate();
|
|
341
|
-
return t.day(t.day() - t.dayOfWeek() +
|
|
341
|
+
return t.day(t.day() - t.dayOfWeek() + T).year();
|
|
342
342
|
};
|
|
343
343
|
o.prototype.isLeapYear = function() {
|
|
344
344
|
const t = this.year();
|
|
@@ -351,7 +351,13 @@ o.prototype.hasDstInYear = function() {
|
|
|
351
351
|
return [3, 6, 9, 12].map((e) => this.month(e).offset()).some((e) => e !== t);
|
|
352
352
|
};
|
|
353
353
|
o.prototype.isInDst = function() {
|
|
354
|
-
|
|
354
|
+
if (!this[a].localtime)
|
|
355
|
+
return !1;
|
|
356
|
+
const t = Array.from(
|
|
357
|
+
{ length: 12 },
|
|
358
|
+
(f, s) => this.month(s + 1).offset()
|
|
359
|
+
), e = Math.min(...t), n = Math.max(...t);
|
|
360
|
+
return e !== n && this.offset() === n;
|
|
355
361
|
};
|
|
356
362
|
o.prototype.isDstTransitionDay = function() {
|
|
357
363
|
return this[a].localtime ? this.minutesInDay() !== U : !1;
|
|
@@ -360,7 +366,7 @@ o.prototype.minutesInDay = function() {
|
|
|
360
366
|
if (!this[a].localtime)
|
|
361
367
|
return U;
|
|
362
368
|
const t = this.context({ interpretAsDst: !0 }).startOfDay(), e = t.plus({ day: 1 }).startOfDay();
|
|
363
|
-
return t.day() === e.day() ? U : (e - t) /
|
|
369
|
+
return t.day() === e.day() ? U : (e - t) / nt;
|
|
364
370
|
};
|
|
365
371
|
o.prototype.daysInMonth = function() {
|
|
366
372
|
const t = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], e = this.month();
|
|
@@ -371,7 +377,7 @@ o.prototype.daysInYear = function() {
|
|
|
371
377
|
};
|
|
372
378
|
o.prototype.weeksInYear = function() {
|
|
373
379
|
const t = this.toDate({ month: 12, day: 31 }), e = t.minus({ year: 1 });
|
|
374
|
-
return t.dayOfWeek() ===
|
|
380
|
+
return t.dayOfWeek() === T || e.dayOfWeek() === Q ? 53 : 52;
|
|
375
381
|
};
|
|
376
382
|
o.prototype.startOfYear = function() {
|
|
377
383
|
return this.clone({
|
|
@@ -421,12 +427,12 @@ o.prototype.isBetween = function(t, e) {
|
|
|
421
427
|
return t <= this && this <= e || e <= this && this <= t;
|
|
422
428
|
};
|
|
423
429
|
o.prototype.plus = function(...t) {
|
|
424
|
-
return
|
|
430
|
+
return q.call(this, 1, ...t);
|
|
425
431
|
};
|
|
426
432
|
o.prototype.minus = function(...t) {
|
|
427
|
-
return
|
|
433
|
+
return q.call(this, -1, ...t);
|
|
428
434
|
};
|
|
429
|
-
function
|
|
435
|
+
function q(t, ...e) {
|
|
430
436
|
var y, h;
|
|
431
437
|
const n = e[0], f = e[1];
|
|
432
438
|
if (Number.isFinite(n) && !Number.isFinite(f))
|
|
@@ -457,10 +463,10 @@ function G(t, ...e) {
|
|
|
457
463
|
throw TypeError();
|
|
458
464
|
const i = this.nativeDate(), u = this[a].localtime ? "" : "UTC";
|
|
459
465
|
if (S(s, "year") || S(s, "month")) {
|
|
460
|
-
const c = this.year() + t * ((y = s.year) != null ? y : 0), D = this.month() + t * ((h = s.month) != null ? h : 0),
|
|
461
|
-
|
|
462
|
-
const v =
|
|
463
|
-
v < this.day() ? i[`set${u}FullYear`](c,
|
|
466
|
+
const c = this.year() + t * ((y = s.year) != null ? y : 0), D = this.month() + t * ((h = s.month) != null ? h : 0), M = new Date(i.getTime());
|
|
467
|
+
M[`set${u}FullYear`](c, D, 0);
|
|
468
|
+
const v = M[`get${u}Date`]();
|
|
469
|
+
v < this.day() ? i[`set${u}FullYear`](c, M[`get${u}Month`](), v) : i[`set${u}FullYear`](c, D - 1);
|
|
464
470
|
}
|
|
465
471
|
S(s, "day") && i[`set${u}Date`](i[`get${u}Date`]() + t * s.day);
|
|
466
472
|
for (const [c, D] of [
|
|
@@ -472,7 +478,7 @@ function G(t, ...e) {
|
|
|
472
478
|
!S(s, c) || s[c] == null || i[`setUTC${D}`](
|
|
473
479
|
i[`getUTC${D}`]() + t * s[c]
|
|
474
480
|
);
|
|
475
|
-
return this.clone(
|
|
481
|
+
return this.clone(i);
|
|
476
482
|
}
|
|
477
483
|
const l = /* @__PURE__ */ Symbol("QronoDate.internal");
|
|
478
484
|
function r(...t) {
|
|
@@ -571,12 +577,12 @@ r.prototype.isBetween = function(t, e) {
|
|
|
571
577
|
return t <= this && this <= e || e <= this && this <= t;
|
|
572
578
|
};
|
|
573
579
|
r.prototype.plus = function(...t) {
|
|
574
|
-
return
|
|
580
|
+
return G.call(this, 1, ...t);
|
|
575
581
|
};
|
|
576
582
|
r.prototype.minus = function(...t) {
|
|
577
|
-
return
|
|
583
|
+
return G.call(this, -1, ...t);
|
|
578
584
|
};
|
|
579
|
-
function
|
|
585
|
+
function G(t, ...e) {
|
|
580
586
|
var u, y, h;
|
|
581
587
|
const n = e[0], f = e[1], s = this[l].datetime;
|
|
582
588
|
if (Number.isFinite(n) && !Number.isFinite(f))
|
|
@@ -605,13 +611,13 @@ function K(t, ...e) {
|
|
|
605
611
|
return s.plus(i).toDate();
|
|
606
612
|
}
|
|
607
613
|
export {
|
|
608
|
-
|
|
609
|
-
|
|
614
|
+
rt as friday,
|
|
615
|
+
ot as monday,
|
|
610
616
|
H as qrono,
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
617
|
+
st as saturday,
|
|
618
|
+
at as sunday,
|
|
619
|
+
T as thursday,
|
|
620
|
+
it as tuesday,
|
|
615
621
|
Q as wednesday
|
|
616
622
|
};
|
|
617
623
|
//# sourceMappingURL=qrono.js.map
|
package/dist/qrono.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qrono.js","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 const monday = 1\nexport const tuesday = 2\nexport const wednesday = 3\nexport const thursday = 4\nexport const friday = 5\nexport const saturday = 6\nexport const sunday = 7\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\n/**\n * Resolve a local time that falls on or near a DST transition boundary.\n *\n * Handles two distinct cases that arise when constructing a local Date:\n *\n * GAP (spring-forward, isGap = true):\n * A range of local times is skipped entirely. JavaScript automatically advances\n * the time to the next valid moment (post-transition / DST side), adding the gap\n * size to the UTC timestamp. The caller detects a gap by comparing the constructed\n * Date's local fields against the originally requested values.\n * - interpretAsDst = true → accept JS's forward-shift as-is (DST side)\n * - interpretAsDst = false → shift UTC back by the gap size (pre-transition side)\n *\n * OVERLAP (fall-back, isGap = false):\n * A range of local times occurs twice. JavaScript always picks the DST side\n * (first occurrence). If the time is not actually in an overlap, the adjustment\n * will not preserve the original local fields and the original Date is returned.\n * - interpretAsDst = true → accept JS's DST-side interpretation as-is\n * - interpretAsDst = false → shift UTC by the offset difference (standard-time side)\n *\n * In both cases the UTC adjustment uses the same formula:\n * adjustedUTC = date.getTime() + adjust * millisecondsPerMinute\n * where adjust = nextDay.timezoneOffset - prevDay.timezoneOffset.\n * For a gap the adjust is negative (offsets decrease going forward),\n * so subtracting it moves UTC backward to the pre-transition side.\n * For an overlap the adjust is also negative in the same direction,\n * and the same subtraction moves to the standard-time side.\n *\n * @param {boolean} interpretAsDst\n * @param {Date} date - The Date constructed from the requested local fields.\n * @param {boolean} isGap - true if the requested time fell in a DST gap (spring-forward).\n * @returns {Date}\n */\nexport function resolveDstTime(interpretAsDst, date, isGap) {\n const numeric = date.getTime()\n const original = new Date(numeric)\n if (interpretAsDst) {\n return original\n }\n const nextDay = new Date(numeric)\n nextDay.setDate(date.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(date.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n if (adjust === 0) {\n return original\n }\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(date.getUTCMinutes() + adjust)\n )\n if (isGap) {\n return adjustedUTC\n }\n // For an overlap, verify the candidate preserves the original local fields.\n // If it does not, the time is not actually in an overlap — return as-is.\n if (\n adjustedUTC.getHours() !== date.getHours() ||\n adjustedUTC.getMinutes() !== date.getMinutes()\n ) {\n return original\n }\n return adjustedUTC\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n resolveDstTime,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\nexport {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers'\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n interpretAsDst: true,\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 return this\n }\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\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('Qrono.internal')\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 interpretAsDst: false,\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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 dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const interpretAsDst = dateOnly ? true : this.interpretAsDst\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 // 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 this.nativeDate = resolveDstTime(interpretAsDst, newDate, isGap)\n } else {\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 }\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// -----------------------------------------------------------------------------\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 `${String(t.getFullYear()).padStart(4, '0')}-${String(\n t.getMonth() + 1\n ).padStart(2, '0')}-${String(t.getDate()).padStart(2, '0')}T${String(\n t.getHours()\n ).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}:${String(\n t.getSeconds()\n ).padStart(2, '0')}.${String(t.getMilliseconds()).padStart(3, '0')}${\n (offset >= 0 ? '+' : '-') +\n String(Math.trunc(offsetAbs / minutesPerHour)).padStart(2, '0') +\n ':' +\n String(offsetAbs % minutesPerHour).padStart(2, '0')\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 interpretAsDst: this[internal].interpretAsDst,\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.interpretAsDst = function (arg) {\n return given(arg)\n ? this.clone({ interpretAsDst: arg })\n : this[internal].interpretAsDst\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\nQrono.prototype.year = function (value) {\n return given(value)\n ? this.clone({ year: value })\n : this[internal].getNative('FullYear')\n}\n\nQrono.prototype.month = function (value) {\n return given(value)\n ? this.clone({ month: value })\n : this[internal].getNative('Month') + 1\n}\n\nQrono.prototype.day = function (value) {\n return given(value)\n ? this.clone({ day: value })\n : this[internal].getNative('Date')\n}\n\nQrono.prototype.hour = function (value) {\n return given(value)\n ? this.clone({ hour: value })\n : this[internal].getNative('Hours')\n}\n\nQrono.prototype.minute = function (value) {\n return given(value)\n ? this.clone({ minute: value })\n : this[internal].getNative('Minutes')\n}\n\nQrono.prototype.second = function (value) {\n return given(value)\n ? this.clone({ second: value })\n : this[internal].getNative('Seconds')\n}\n\nQrono.prototype.millisecond = function (value) {\n return given(value)\n ? this.clone({ millisecond: value })\n : this[internal].getNative('Milliseconds')\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 return (\n this.offset() ===\n Math.max(...[3, 6, 9, 12].map(month => this.month(month).offset()))\n )\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({ interpretAsDst: true }).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\nQrono.prototype.startOfYear = function () {\n return this.clone({\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n })\n}\n\nQrono.prototype.startOfMonth = function () {\n return this.clone({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { interpretAsDst: true },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.startOfHour = function () {\n return this.clone({ minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfMinute = function () {\n return this.clone({ second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfSecond = function () {\n return this.clone({ millisecond: 0 })\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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(resolveDstTime(this[internal].interpretAsDst, date, false))\n}\n\n// -----------------------------------------------------------------------------\n// QronoDate Class\n// -----------------------------------------------------------------------------\nconst internalDate = Symbol('QronoDate.internal')\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 { interpretAsDst: true },\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","monday","tuesday","wednesday","thursday","friday","saturday","sunday","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","resolveDstTime","interpretAsDst","isGap","numeric","original","nextDay","prevDay","adjust","adjustedUTC","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","internal","args","_a","self","set","parse","valid","getNative","source","first","second","values","v","name","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","dateOnly","baseDate","newDate","requested","parsePattern","str","text","hasTime","year","month","day","offset","native","offsetAbs","theThursday","startOfYear","firstThursday","currentOffset","startOfDay","days","endOfYear","endOfLastYear","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","field","method","plusDate","datetime"],"mappings":";;;;;;;;;;;AAYO,MAAMA,KAAkB,IAAI,KAAK,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAElDC,IAAc,GACdC,IAAc,IAEdC,IAAiB,IACjBC,IAAgBD,IAAiBD,GAEjCG,IAAmB,IACnBC,KAAiBD,IAAmBF,GACpCI,KAAgBD,KAAiBJ,GAEjCM,IAAwB,KACxBC,KAAwBJ,IAAmBG,GAE3CE,IAAqBH,KAAgBC,GAGrCG,KAAS,GACTC,KAAU,GACVC,IAAY,GACZC,IAAW,GACXC,KAAS,GACTC,KAAW,GACXC,KAAS;AAEf,SAASC,EAAIC,MAAWC,GAAM;AACnC,SAAOA,EAAK,KAAI,EAAG,KAAKD,EAAO,gBAAgBA,CAAM;AACvD;AAEO,SAASE,EAAOF,GAAQ;AAC7B,SAAO,OAAO,QAAQA,CAAM,EACzB,OAAO,CAAC,CAAA,EAAGG,CAAK,MAAM,CAACC,GAAWD,CAAK,CAAC,EACxC,IAAI,CAAC,CAACE,CAAG,MAAMA,CAAG;AACvB;AAEO,SAASC,EAAMC,GAAK;AACzB,SAAOA,MAAQ;AACjB;AAEO,SAASH,GAAWI,GAAG;AAC5B,SAAOA,aAAa;AACtB;AAEO,SAASC,GAASD,GAAG;AAC1B,SAAO,OAAOA,KAAM,YAAYA,aAAa;AAC/C;AAEO,SAASE,EAASF,GAAG;AAC1B,SAAOA,MAAM,QAAQ,OAAOA,KAAM,YAAYA,EAAE,gBAAgB;AAClE;AAEO,SAASG,EAAYC,GAAM;AAChC,SAAO,CAAC,OAAO,MAAMA,EAAK,QAAO,CAAE;AACrC;AAUO,SAASC,EAAiBb,GAAQ;AACvC,SAAOD,EAAIC,GAAQ;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAG;AACH;AAmCO,SAASc,EAAeC,GAAgBH,GAAMI,GAAO;AAC1D,QAAMC,IAAUL,EAAK,QAAO,GACtBM,IAAW,IAAI,KAAKD,CAAO;AACjC,MAAIF;AACF,WAAOG;AAET,QAAMC,IAAU,IAAI,KAAKF,CAAO;AAChC,EAAAE,EAAQ,QAAQP,EAAK,QAAO,IAAK,CAAC;AAClC,QAAMQ,IAAU,IAAI,KAAKH,CAAO;AAChC,EAAAG,EAAQ,QAAQR,EAAK,QAAO,IAAK,CAAC;AAClC,QAAMS,IAASF,EAAQ,kBAAiB,IAAKC,EAAQ,kBAAiB;AACtE,MAAIC,MAAW;AACb,WAAOH;AAET,QAAMI,IAAc,IAAI;AAAA,IACtB,IAAI,KAAKL,CAAO,EAAE,cAAcL,EAAK,cAAa,IAAKS,CAAM;AAAA,EACjE;AACE,SAAIL,IACKM,IAKPA,EAAY,SAAQ,MAAOV,EAAK,SAAQ,KACxCU,EAAY,iBAAiBV,EAAK,WAAU,IAErCM,IAEFI;AACT;AC1HK,MAACC,IAAQC;AAiBdA,EAAM,OAAOC;AAGb,MAAMC,IAAiB;AAAA,EACrB,WAAW;AAAA,EACX,gBAAgB;AAClB;AAEA,WAAWrB,KAAOH,EAAOwB,CAAc;AACrC,EAAAF,EAAMnB,CAAG,IAAI,SAAUE,GAAK;AAC1B,WAAID,EAAMC,CAAG,KACXmB,EAAerB,CAAG,IAAIE,GACf,QAEFmB,EAAerB,CAAG;AAAA,EAC3B;AAGFmB,EAAM,UAAU,SAAUG,GAAS;AACjC,MAAIrB,EAAMqB,CAAO;AACf,eAAWtB,KAAOH,EAAOwB,CAAc;AACrC,UAAK3B,EAAI4B,GAAStB,CAAG;AAGrB,eAAAqB,EAAerB,CAAG,IAAIsB,EAAQtB,CAAG,GAC1B;AAAA;AAGX,SAAOuB,EAAA,IAAKF;AACd;AAEAF,EAAM,QAAQ,WAAY;AACxB,SAAAE,EAAe,YAAY,IACpB;AACT;AAEAF,EAAM,cAAc,WAAY;AAC9B,SAAAE,EAAe,YAAY,IACpB;AACT;AAEA,OAAO,OAAOF,GAAO;AAAA,EACnB,QAAAhC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AACF,CAAC;AAKD,MAAM+B,IAAW,uBAAO,gBAAgB;AAExC,SAASL,KAASM,GAAM;ADnGxB,MAAAC;ACoGE,MAAI,CAAC;AACH,WAAO,IAAIP,EAAM,GAAGM,CAAI;AAE1B,QAAME,IAAO;AAAA;AAAA,IAEX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,gBAAgB;AAAA;AAAA,IAEhB,KAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAR;AAAA,IACA,WAAAS;AAAA,EACJ;AAKE,MAJA,KAAKP,CAAQ,IAAIG,GAGjBA,EAAK,QAAQN,CAAc,GACvBI,EAAK,CAAC,aAAaN,GAAO;AAC5B,UAAMa,IAASP,EAAK,MAAK;AACzB,eAAWzB,KAAOH,EAAO8B,CAAI;AAC3B,MAAAA,EAAK3B,CAAG,IAAIgC,EAAOhC,CAAG,EAAC;AAAA,EAE3B;AACA,EAAIK,EAASoB,EAAK,CAAC,CAAC,KAAK,CAACjB,EAAiBiB,EAAK,CAAC,CAAC,KAChDE,EAAK,QAAQF,EAAK,MAAK,CAAE;AAE3B,QAAMQ,IAAQR,EAAK,CAAC,GACdS,IAAST,EAAK,CAAC;AACrB,MAAIQ,KAAS;AACX,KAAAP,IAAAC,EAAK,eAAL,SAAAA,EAAK,aAAe,oBAAI,KAAI;AAAA,WACnBM,aAAiB;AAC1B,IAAAN,EAAK,aAAa,IAAI,KAAKM,EAAM,QAAO,CAAE;AAAA,WACjC7B,GAAS6B,CAAK;AACvB,IAAAN,EAAK,MAAMM,CAAK;AAAA,WACP5B,EAAS4B,CAAK,GAAG;AAC1B,QAAI,CAACzB,EAAiByB,CAAK;AACzB,YAAM;AAAA,QACJ;AAAA,MAER;AAEI,IAAAN,EAAK,IAAIM,CAAK;AAAA,EAChB,WAAW,OAAO,SAASA,CAAK,KAAK,CAAC,OAAO,SAASC,CAAM;AAC1D,IAAAP,EAAK,aAAa,IAAI,KAAKM,CAAK;AAAA,WACvB,OAAO,SAASA,CAAK,KAAK,MAAM,QAAQA,CAAK,GAAG;AACzD,UAAME,IAASV,EAAK,KAAI,EAAG,OAAO,CAAAW,MAAK,OAAO,cAAcA,CAAC,CAAC;AAC9D,QAAID,EAAO,WAAWV,EAAK,KAAI,EAAG;AAChC,YAAM,WAAW,yBAAyB;AAE5C,QAAIU,EAAO,SAAS;AAClB,YAAM,WAAW,kBAAkB;AAErC,IAAAR,EAAK,IAAI;AAAA,MACP,MAAMQ,EAAO,CAAC;AAAA,MACd,OAAOA,EAAO,CAAC;AAAA,MACf,KAAKA,EAAO,CAAC;AAAA,MACb,MAAMA,EAAO,CAAC;AAAA,MACd,QAAQA,EAAO,CAAC;AAAA,MAChB,QAAQA,EAAO,CAAC;AAAA,MAChB,aAAaA,EAAO,CAAC;AAAA,IAC3B,CAAK;AAAA,EACH;AACE,UAAM,UAAU,oBAAoBV,CAAI,EAAE;AAE5C,SAAO;AACT;AAKA,SAASK,KAAQ;AACf,SAAOxB,EAAY,KAAK,UAAU;AACpC;AAEA,SAASgB,GAAQA,GAAS;AACxB,MAAKA,GAGL;AAAA,eAAWtB,KAAOH,EAAOwB,CAAc;AACrC,MAAI3B,EAAI4B,GAAStB,CAAG,MAClB,KAAKA,CAAG,IAAIsB,EAAQtB,CAAG;AAG3B,WAAO;AAAA;AACT;AAEA,SAAS+B,GAAUM,GAAM;AACvB,SAAO,KAAK,WAAW,MAAM,KAAK,YAAY,KAAK,KAAK,GAAGA,CAAI,EAAE,EAAC;AACpE;AAEA,SAAST,GAAIO,GAAQ;ADhMrB,MAAAT,GAAAY,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC;ACiME,QAAM3B,IAAOF,EAAA,IAAKY;AAElB,MADAV,EAAK,QAAQA,EAAK,SAASA,EAAK,QAAQ,GACpC,KAAK,WAAW;AAClB,UAAM4B,IAAW,CAAC3D,EAAIyC,GAAQ,QAAQ,UAAU,UAAU,aAAa,GACjEzB,IAAiB2C,IAAW,KAAO,KAAK,gBACxCC,KAAW5B,IAAA,KAAK,eAAL,OAAAA,IAAmB,IAAI,KAAK,GAAG,CAAC,GAC3C6B,IAAU,IAAI,KAAK/E,GAAgB,QAAO,CAAE,GAC5CgF,IAAY;AAAA,MAChB,OAAMlB,IAAAb,EAAK,SAAL,OAAAa,IAAagB,EAAS,YAAW;AAAA,MACvC,QAAOf,IAAAd,EAAK,UAAL,OAAAc,IAAce,EAAS,SAAQ;AAAA,MACtC,MAAKd,IAAAf,EAAK,QAAL,OAAAe,IAAYc,EAAS,QAAO;AAAA,MACjC,OAAMb,IAAAhB,EAAK,SAAL,OAAAgB,IAAcY,IAAW,IAAIC,EAAS;MAC5C,SAAQZ,IAAAjB,EAAK,WAAL,OAAAiB,IAAgBW,IAAW,IAAIC,EAAS;MAChD,SAAQX,IAAAlB,EAAK,WAAL,OAAAkB,IAAgBU,IAAW,IAAIC,EAAS;MAChD,cACEV,IAAAnB,EAAK,gBAAL,OAAAmB,IAAqBS,IAAW,IAAIC,EAAS,gBAAe;AAAA,IACpE;AACI,IAAAC,EAAQ,YAAYC,EAAU,MAAMA,EAAU,OAAOA,EAAU,GAAG,GAClED,EAAQ;AAAA,MACNC,EAAU;AAAA,MACVA,EAAU;AAAA,MACVA,EAAU;AAAA,MACVA,EAAU;AAAA,IAChB;AAGI,UAAM7C,IACJ6C,EAAU,OAAO,MACfA,EAAU,QAAQ,MAClBA,EAAU,MAAM,MAChBA,EAAU,OAAO,MACjBA,EAAU,SACZD,EAAQ,YAAW,IAAK,MACtBA,EAAQ,SAAQ,IAAK,MACrBA,EAAQ,QAAO,IAAK,MACpBA,EAAQ,SAAQ,IAAK,MACrBA,EAAQ,WAAU;AACtB,SAAK,aAAa9C,EAAeC,GAAgB6C,GAAS5C,CAAK;AAAA,EACjE,OAAO;AACL,UAAM2C,KAAWT,IAAA,KAAK,eAAL,OAAAA,IAAmB,oBAAI,KAAK,CAAC,GACxCU,IAAU,oBAAI,KAAK,CAAC;AAC1B,IAAAA,EAAQ;AAAA,OACNT,IAAArB,EAAK,SAAL,OAAAqB,IAAaQ,EAAS,eAAc;AAAA,OACpCP,IAAAtB,EAAK,UAAL,OAAAsB,IAAcO,EAAS,YAAW;AAAA,OAClCN,IAAAvB,EAAK,QAAL,OAAAuB,IAAYM,EAAS,WAAU;AAAA,IACrC,GACIC,EAAQ;AAAA,OACNN,IAAAxB,EAAK,SAAL,OAAAwB,IAAaK,EAAS,YAAW;AAAA,OACjCJ,IAAAzB,EAAK,WAAL,OAAAyB,IAAeI,EAAS,cAAa;AAAA,OACrCH,IAAA1B,EAAK,WAAL,OAAA0B,IAAeG,EAAS,cAAa;AAAA,OACrCF,IAAA3B,EAAK,gBAAL,OAAA2B,IAAoBE,EAAS,mBAAkB;AAAA,IACrD,GACI,KAAK,aAAaC;AAAA,EACpB;AACA,SAAO;AACT;AAEA,MAAME,KAAe,IAAI;AAAA;AAAA,EAEvB;AAKF;AAEA,SAAS5B,GAAM6B,GAAK;ADnQpB,MAAAhC;ACoQE,QAAMiC,IAAOD,EAAI,KAAI,EAAG,YAAW,GAC7BvB,IAASwB,EAAK,MAAMF,EAAY;AACtC,MAAI,CAACtB;AACH,UAAM;AAAA,MACJ,oBAAoBuB,CAAG;AAAA,IAE7B;AAEE,QAAME,IAAUzB,EAAO,CAAC,MAAM,QACxB,CAAC0B,GAAMC,GAAOC,GAAKC,CAAM,IAAI;AAAA,IACjC,CAAC7B,EAAO,CAAC;AAAA,IACT,CAACA,EAAO,CAAC,KAAK;AAAA,IACd,CAACA,EAAO,CAAC,KAAK;AAAA,IACdA,EAAO,CAAC;AAAA,EACZ,GACQ8B,IAAS,IAAI,KAAKN,CAAI;AAC5B,MAAI,CAACrD,EAAY2D,CAAM;AACrB,UAAM;AAAA,MACJ,oBAAoBP,CAAG;AAAA,IAE7B;AAEE,SAAIM,IACF,KAAK,aAAaC,IACTL,IACT,KAAK,IAAI;AAAA,IACP,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,KAAAC;AAAA,IACA,MAAM,CAAC5B,EAAO,CAAC,KAAK;AAAA,IACpB,QAAQ,CAACA,EAAO,CAAC,KAAK;AAAA,IACtB,QAAQ,CAACA,EAAO,CAAC,KAAK;AAAA,IACtB,aAAa,GAACT,IAAAS,EAAO,CAAC,MAAR,gBAAAT,EAAW,SAAS,GAAG,SAAQ;AAAA,EACnD,CAAK,IAED,KAAK,IAAI,EAAE,MAAAmC,GAAM,OAAAC,GAAO,KAAAC,EAAG,CAAE,GAExB;AACT;AAMA5C,EAAM,UAAU,WAAW,WAAY;AACrC,MAAI,KAAKK,CAAQ,EAAE,WAAW;AAC5B,UAAM,IAAI,KAAKA,CAAQ,EAAE,YACnBwC,IAAS,CAAC,EAAE,kBAAiB,GAC7BE,IAAY,KAAK,IAAIF,CAAM;AACjC,WAAO,GAAG,OAAO,EAAE,YAAW,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI;AAAA,MACpD,EAAE,SAAQ,IAAK;AAAA,IACrB,EAAM,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,QAAO,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI;AAAA,MAC5D,EAAE,SAAQ;AAAA,IAChB,EAAM,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,WAAU,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI;AAAA,MAC/D,EAAE,WAAU;AAAA,IAClB,EAAM,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,gBAAe,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAC/DA,KAAU,IAAI,MAAM,OACrB,OAAO,KAAK,MAAME,IAAYvF,CAAc,CAAC,EAAE,SAAS,GAAG,GAAG,IAC9D,MACA,OAAOuF,IAAYvF,CAAc,EAAE,SAAS,GAAG,GAAG,CACxD;AAAA,EACE;AACA,SAAO,KAAK6C,CAAQ,EAAE,WAAW,YAAW;AAC9C;AAEAL,EAAM,UAAU,UAAU,WAAY;AACpC,SAAO,KAAKK,CAAQ,EAAE,WAAW,QAAO;AAC1C;AAEAL,EAAM,UAAU,QAAQ,YAAaM,GAAM;AACzC,SAAO,IAAIN,EAAM,MAAM,GAAGM,CAAI;AAChC;AAEAN,EAAM,UAAU,UAAU,SAAUG,GAAS;AAC3C,SAAOrB,EAAMqB,CAAO,IAChB,KAAK,MAAMA,CAAO,IAClB;AAAA,IACE,WAAW,KAAKE,CAAQ,EAAE;AAAA,IAC1B,gBAAgB,KAAKA,CAAQ,EAAE;AAAA,EACvC;AACA;AAEAL,EAAM,UAAU,aAAa,WAAY;AACvC,SAAO,IAAI,KAAK,KAAKK,CAAQ,EAAE,WAAW,QAAO,CAAE;AACrD;AAEAL,EAAM,UAAU,SAAS,WAAY;AACnC,SAAO,KAAKK,CAAQ,EAAE,YAClB,CAAC,KAAKA,CAAQ,EAAE,WAAW,kBAAiB,IAC5C;AACN;AAEAL,EAAM,UAAU,YAAY,SAAUjB,GAAK;AACzC,SAAOD,EAAMC,CAAG,IAAI,KAAK,MAAM,EAAE,WAAWA,EAAG,CAAE,IAAI,KAAKsB,CAAQ,EAAE;AACtE;AAEAL,EAAM,UAAU,iBAAiB,SAAUjB,GAAK;AAC9C,SAAOD,EAAMC,CAAG,IACZ,KAAK,MAAM,EAAE,gBAAgBA,EAAG,CAAE,IAClC,KAAKsB,CAAQ,EAAE;AACrB;AAEAL,EAAM,UAAU,QAAQ,WAAY;AAClC,SAAO,KAAKK,CAAQ,EAAE,MAAK;AAC7B;AAGAL,EAAM,UAAU,UAAU,WAAY;AACpC,SAAO,KAAKK,CAAQ,EAAE,WAAW,QAAO;AAC1C;AAEAL,EAAM,UAAU,WAAW,WAAY;AACrC,SAAO;AAAA,IACL,MAAM,KAAK,KAAI;AAAA,IACf,OAAO,KAAK,MAAK;AAAA,IACjB,KAAK,KAAK,IAAG;AAAA,IACb,MAAM,KAAK,KAAI;AAAA,IACf,QAAQ,KAAK,OAAM;AAAA,IACnB,QAAQ,KAAK,OAAM;AAAA,IACnB,aAAa,KAAK,YAAW;AAAA,EACjC;AACA;AAEAA,EAAM,UAAU,UAAU,WAAY;AACpC,SAAO;AAAA,IACL,KAAK,KAAI;AAAA,IACT,KAAK,MAAK;AAAA,IACV,KAAK,IAAG;AAAA,IACR,KAAK,KAAI;AAAA,IACT,KAAK,OAAM;AAAA,IACX,KAAK,OAAM;AAAA,IACX,KAAK,YAAW;AAAA,EACpB;AACA;AAEAA,EAAM,UAAU,SAAS,YAAaM,GAAM;AAC1C,SAAO,IAAIL,EAAU,KAAK,MAAM,GAAGK,CAAI,CAAC;AAC1C;AAGAN,EAAM,UAAU,QAAQ,WAAY;AAClC,SAAO,KAAK,MAAM,EAAE,WAAW,GAAK,CAAE;AACxC;AAEAA,EAAM,UAAU,cAAc,WAAY;AACxC,SAAO,KAAK,MAAM,EAAE,WAAW,GAAI,CAAE;AACvC;AAGAA,EAAM,UAAU,OAAO,SAAUrB,GAAO;AACtC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,MAAMA,EAAK,CAAE,IAC1B,KAAK0B,CAAQ,EAAE,UAAU,UAAU;AACzC;AAEAL,EAAM,UAAU,QAAQ,SAAUrB,GAAO;AACvC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,OAAOA,EAAK,CAAE,IAC3B,KAAK0B,CAAQ,EAAE,UAAU,OAAO,IAAI;AAC1C;AAEAL,EAAM,UAAU,MAAM,SAAUrB,GAAO;AACrC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,KAAKA,EAAK,CAAE,IACzB,KAAK0B,CAAQ,EAAE,UAAU,MAAM;AACrC;AAEAL,EAAM,UAAU,OAAO,SAAUrB,GAAO;AACtC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,MAAMA,EAAK,CAAE,IAC1B,KAAK0B,CAAQ,EAAE,UAAU,OAAO;AACtC;AAEAL,EAAM,UAAU,SAAS,SAAUrB,GAAO;AACxC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,QAAQA,EAAK,CAAE,IAC5B,KAAK0B,CAAQ,EAAE,UAAU,SAAS;AACxC;AAEAL,EAAM,UAAU,SAAS,SAAUrB,GAAO;AACxC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,QAAQA,EAAK,CAAE,IAC5B,KAAK0B,CAAQ,EAAE,UAAU,SAAS;AACxC;AAEAL,EAAM,UAAU,cAAc,SAAUrB,GAAO;AAC7C,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,aAAaA,EAAK,CAAE,IACjC,KAAK0B,CAAQ,EAAE,UAAU,cAAc;AAC7C;AAGAL,EAAM,UAAU,YAAY,WAAY;AACtC,SAAO,KAAM,KAAKK,CAAQ,EAAE,UAAU,KAAK,IAAI,IAAI/C,KAAeA;AACpE;AAEA0C,EAAM,UAAU,YAAY,WAAY;AACtC,QAAMZ,IAAO,KAAK,OAAM;AACxB,SAAO,IAAIA,IAAOA,EAAK,YAAW;AACpC;AAEAY,EAAM,UAAU,aAAa,WAAY;AACvC,QAAMZ,IAAO,KAAK,OAAM,GAClB4D,IAAc5D,EAAK,IAAIA,EAAK,QAAQA,EAAK,UAAS,IAAKjB,CAAQ,GAC/D8E,IAAcD,EAAY,YAAW,GACrCE,IACJD,EAAY,UAAS,MAAO9E,IACxB8E,IACAA,EAAY;AAAA,IACV,KAAM9E,IAAW8E,EAAY,UAAS,IAAK3F,KAAeA;AAAA,EACpE;AACE,SAAO,IAAI,KAAK,MAAM0F,IAAcE,KAAiB5F,CAAW;AAClE;AAEA0C,EAAM,UAAU,aAAa,WAAY;AACvC,QAAMZ,IAAO,KAAK,OAAM;AACxB,SAAOA,EAAK,IAAIA,EAAK,IAAG,IAAKA,EAAK,UAAS,IAAKjB,CAAQ,EAAE,KAAI;AAChE;AAEA6B,EAAM,UAAU,aAAa,WAAY;AACvC,QAAM0C,IAAO,KAAK,KAAI;AACtB,SAAOA,IAAO,MAAM,MAAMA,IAAO,QAAQ,KAAKA,IAAO,QAAQ;AAC/D;AAEA1C,EAAM,UAAU,eAAe,WAAY;AACzC,MAAI,CAAC,KAAKK,CAAQ,EAAE;AAClB,WAAO;AAET,QAAM8C,IAAgB,KAAK,OAAM;AACjC,SAAO,CAAC,GAAG,GAAG,GAAG,EAAE,EAChB,IAAI,CAAAR,MAAS,KAAK,MAAMA,CAAK,EAAE,OAAM,CAAE,EACvC,KAAK,CAAAE,MAAUA,MAAWM,CAAa;AAC5C;AAEAnD,EAAM,UAAU,UAAU,WAAY;AACpC,SAAK,KAAKK,CAAQ,EAAE,YAIlB,KAAK,OAAM,MACX,KAAK,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,CAAAsC,MAAS,KAAK,MAAMA,CAAK,EAAE,OAAM,CAAE,CAAC,IAJ3D;AAMX;AAEA3C,EAAM,UAAU,qBAAqB,WAAY;AAC/C,SAAK,KAAKK,CAAQ,EAAE,YAGb,KAAK,mBAAmB5C,IAFtB;AAGX;AAEAuC,EAAM,UAAU,eAAe,WAAY;AACzC,MAAI,CAAC,KAAKK,CAAQ,EAAE;AAClB,WAAO5C;AAET,QAAM2F,IAAa,KAAK,QAAQ,EAAE,gBAAgB,GAAI,CAAE,EAAE,WAAU,GAC9DzD,IAAUyD,EAAW,KAAK,EAAE,KAAK,EAAC,CAAE,EAAE,WAAU;AACtD,SAAIA,EAAW,IAAG,MAAOzD,EAAQ,IAAG,IAC3BlC,KAEDkC,IAAUyD,KAActF;AAClC;AAEAkC,EAAM,UAAU,cAAc,WAAY;AACxC,QAAMqD,IAAO,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,GACtDV,IAAQ,KAAK,MAAK;AACxB,SAAOU,EAAKV,IAAQ,CAAC,KAAK,KAAK,WAAU,KAAMA,MAAU,IAAI,IAAI;AACnE;AAEA3C,EAAM,UAAU,aAAa,WAAY;AACvC,SAAO,KAAK,WAAU,IAAK,MAAM;AACnC;AAEAA,EAAM,UAAU,cAAc,WAAY;AACxC,QAAMsD,IAAY,KAAK,OAAO,EAAE,OAAO,IAAI,KAAK,GAAE,CAAE,GAC9CC,IAAgBD,EAAU,MAAM,EAAE,MAAM,EAAC,CAAE;AACjD,SACEA,EAAU,UAAS,MAAOnF,KAC1BoF,EAAc,UAAS,MAAOrF,IAEvB,KAEF;AACT;AAEA8B,EAAM,UAAU,cAAc,WAAY;AACxC,SAAO,KAAK,MAAM;AAAA,IAChB,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,aAAa;AAAA,EACjB,CAAG;AACH;AAEAA,EAAM,UAAU,eAAe,WAAY;AACzC,SAAO,KAAK,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,EAAC,CAAE;AAC7E;AAEAA,EAAM,UAAU,aAAa,WAAY;AACvC,QAAMwD,IAAY,KAAK;AAAA,IACrB,EAAE,gBAAgB,GAAI;AAAA,IACtB,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,EAAC;AAAA,EACnD,EAAI,QAAO;AACT,SAAO,KAAK,MAAMA,CAAS;AAC7B;AAEAxD,EAAM,UAAU,cAAc,WAAY;AACxC,SAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,EAAC,CAAE;AAC5D;AAEAA,EAAM,UAAU,gBAAgB,WAAY;AAC1C,SAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,aAAa,EAAC,CAAE;AACjD;AAEAA,EAAM,UAAU,gBAAgB,WAAY;AAC1C,SAAO,KAAK,MAAM,EAAE,aAAa,EAAC,CAAE;AACtC;AAEAA,EAAM,UAAU,SAAS,SAAUyD,GAAS;AAC1C,SAAO,CAAC,QAAS,CAACA;AACpB;AACAzD,EAAM,UAAU,WAAW,SAAUyD,GAAS;AAC5C,SAAO,OAAOA;AAChB;AACAzD,EAAM,UAAU,UAAU,SAAUyD,GAAS;AAC3C,SAAO,OAAOA;AAChB;AACAzD,EAAM,UAAU,iBAAiB,SAAUyD,GAAS;AAClD,SAAO,QAAQA;AACjB;AACAzD,EAAM,UAAU,gBAAgB,SAAUyD,GAAS;AACjD,SAAO,QAAQA;AACjB;AACAzD,EAAM,UAAU,YAAY,SAAUhB,GAAG0E,GAAG;AAC1C,SAAQ1E,KAAK,QAAQ,QAAQ0E,KAAOA,KAAK,QAAQ,QAAQ1E;AAC3D;AAGAgB,EAAM,UAAU,OAAO,YAAaM,GAAM;AACxC,SAAOqD,EAAK,KAAK,MAAM,GAAG,GAAGrD,CAAI;AACnC;AAEAN,EAAM,UAAU,QAAQ,YAAaM,GAAM;AACzC,SAAOqD,EAAK,KAAK,MAAM,IAAI,GAAGrD,CAAI;AACpC;AAEA,SAASqD,EAAKC,MAAStD,GAAM;ADhmB7B,MAAAC,GAAAY;ACimBE,QAAM0C,IAAOvD,EAAK,CAAC,GACbwD,IAAOxD,EAAK,CAAC;AACnB,MAAI,OAAO,SAASuD,CAAI,KAAK,CAAC,OAAO,SAASC,CAAI;AAChD,WAAO,KAAK,MAAM,KAAK,QAAO,IAAKD,CAAI;AAEzC,MAAIE,IAAa;AACjB,MAAI7E,EAAS2E,CAAI,GAAG;AAClB,QAAI,CAACxE,EAAiBwE,CAAI;AACxB,YAAM;AAAA,QACJ;AAAA,MAER;AAEI,IAAAE,IAAaF;AAAA,EACf,WAAW,OAAO,SAASA,CAAI,KAAK,MAAM,QAAQA,CAAI,GAAG;AACvD,UAAM7C,IAASV,EAAK,KAAI,EAAG,OAAO,CAAAW,MAAK,OAAO,cAAcA,CAAC,CAAC;AAC9D,QAAID,EAAO,WAAWV,EAAK,KAAI,EAAG;AAChC,YAAM,WAAW,yBAAyB;AAE5C,QAAIU,EAAO,SAAS;AAClB,YAAM,WAAW,kBAAkB;AAErC,IAAA+C,IAAa;AAAA,MACX,MAAM/C,EAAO,CAAC;AAAA,MACd,OAAOA,EAAO,CAAC;AAAA,MACf,KAAKA,EAAO,CAAC;AAAA,MACb,MAAMA,EAAO,CAAC;AAAA,MACd,QAAQA,EAAO,CAAC;AAAA,MAChB,QAAQA,EAAO,CAAC;AAAA,MAChB,aAAaA,EAAO,CAAC;AAAA,IAC3B;AAAA,EACE;AACE,UAAM,UAAS;AAEjB,QAAM5B,IAAO,KAAK,WAAU,GACtB4E,IAAM,KAAK3D,CAAQ,EAAE,YAAY,KAAK;AAC5C,MAAI9B,EAAIwF,GAAY,MAAM,KAAKxF,EAAIwF,GAAY,OAAO,GAAG;AACvD,UAAMrB,IAAO,KAAK,KAAI,IAAKkB,MAAQrD,IAAAwD,EAAW,SAAX,OAAAxD,IAAmB,IAChDoC,IAAQ,KAAK,MAAK,IAAKiB,MAAQzC,IAAA4C,EAAW,UAAX,OAAA5C,IAAoB,IACnD8C,IAAa,IAAI,KAAK7E,EAAK,QAAO,CAAE;AAC1C,IAAA6E,EAAW,MAAMD,CAAG,UAAU,EAAEtB,GAAMC,GAAO,CAAC;AAC9C,UAAMuB,IAAUD,EAAW,MAAMD,CAAG,MAAM,EAAC;AAC3C,IAAIE,IAAU,KAAK,QACjB9E,EAAK,MAAM4E,CAAG,UAAU,EAAEtB,GAAMuB,EAAW,MAAMD,CAAG,OAAO,EAAC,GAAIE,CAAO,IAEvE9E,EAAK,MAAM4E,CAAG,UAAU,EAAEtB,GAAMC,IAAQ,CAAC;AAAA,EAE7C;AACA,EAAIpE,EAAIwF,GAAY,KAAK,KACvB3E,EAAK,MAAM4E,CAAG,MAAM,EAAE5E,EAAK,MAAM4E,CAAG,MAAM,EAAC,IAAKJ,IAAOG,EAAW,GAAG;AAEvE,aAAW,CAAClF,GAAKsF,CAAS,KAAK;AAAA,IAC7B,CAAC,QAAQ,OAAO;AAAA,IAChB,CAAC,UAAU,SAAS;AAAA,IACpB,CAAC,UAAU,SAAS;AAAA,IACpB,CAAC,eAAe,cAAc;AAAA,EAClC;AACI,IAAI,CAAC5F,EAAIwF,GAAYlF,CAAG,KAAKkF,EAAWlF,CAAG,KAAK,QAGhDO,EAAK,SAAS+E,CAAS,EAAE;AAAA,MACvB/E,EAAK,SAAS+E,CAAS,EAAE,MAAMP,IAAOG,EAAWlF,CAAG;AAAA,IAC1D;AAEE,SAAO,KAAK,MAAMS,EAAe,KAAKe,CAAQ,EAAE,gBAAgBjB,GAAM,EAAK,CAAC;AAC9E;AAKA,MAAMgF,IAAe,uBAAO,oBAAoB;AAEhD,SAASnE,KAAaK,GAAM;AAC1B,MAAI,CAAC;AACH,WAAO,IAAIL,EAAU,GAAGK,CAAI;AAE9B,QAAME,IAAO,EAAE,UAAU,KAAI;AAC7B,OAAK4D,CAAY,IAAI5D;AACrB,MAAIK,IAAS;AACb,EAAIP,EAAK,CAAC,aAAaL,IACrBY,IAASP,EAAK,MAAK,EAAG,WAAU,IACvBA,EAAK,CAAC,aAAaN,MAC5Ba,IAASP,EAAK,MAAK;AAErB,QAAMQ,IAAQR,EAAK,CAAC,GACdS,IAAST,EAAK,CAAC;AACrB,SAAI,OAAO,SAASQ,CAAK,KAAK,CAAC,OAAO,SAASC,CAAM,MACnDT,EAAK,CAAC,IAAI,KAAK,MAAMQ,CAAK,IAAI/C,IAE5B8C,IACFA,IAASA,EAAO,MAAM,GAAGP,CAAI,IAE7BO,IAASd,EAAM,GAAGO,CAAI,GAExBE,EAAK,WAAWK,EAAO,WAAU,GAC1B;AACT;AAEAZ,EAAU,UAAU,WAAW,WAAY;AACzC,SAAO,KAAKmE,CAAY,EAAE,SAAS,WAAW,UAAU,GAAG,EAAE;AAC/D;AAEAnE,EAAU,UAAU,UAAU,WAAY;AACxC,SAAO,KAAKmE,CAAY,EAAE,WAAWrG;AACvC;AAEAkC,EAAU,UAAU,QAAQ,WAAY;AACtC,SAAO,KAAKmE,CAAY,EAAE,SAAS,MAAK;AAC1C;AAEAnE,EAAU,UAAU,QAAQ,YAAaK,GAAM;AAC7C,SAAO,IAAIL,EAAU,MAAM,GAAGK,CAAI;AACpC;AAEAL,EAAU,UAAU,aAAa,WAAY;AAC3C,SAAOF,EAAM,KAAKqE,CAAY,EAAE,SAAS,QAAO,CAAE;AACpD;AAEAnE,EAAU,UAAU,UAAU,WAAY;AACxC,SAAO,KAAKmE,CAAY,EAAE,SAAS,QAAO,IAAKrG;AACjD;AAEAkC,EAAU,UAAU,WAAW,WAAY;AACzC,SAAO;AAAA,IACL,MAAM,KAAK,KAAI;AAAA,IACf,OAAO,KAAK,MAAK;AAAA,IACjB,KAAK,KAAK,IAAG;AAAA,EACjB;AACA;AAEAA,EAAU,UAAU,UAAU,WAAY;AACxC,SAAO,CAAC,KAAK,KAAI,GAAI,KAAK,MAAK,GAAI,KAAK,IAAG,CAAE;AAC/C;AAEAA,EAAU,UAAU,cAAc,WAAY;AAC5C,SAAO,IAAIA,EAAU,KAAKmE,CAAY,EAAE,SAAS,YAAW,CAAE;AAChE;AAEAnE,EAAU,UAAU,eAAe,WAAY;AAC7C,SAAO,IAAIA,EAAU,KAAKmE,CAAY,EAAE,SAAS,aAAY,CAAE;AACjE;AAEAnE,EAAU,UAAU,aAAa,WAAY;AAC3C,SAAO,KAAKmE,CAAY,EAAE,SAAS,MAAK;AAC1C;AACA,WAAWC,KAAS,CAAC,QAAQ,SAAS,KAAK;AACzC,EAAApE,EAAU,UAAUoE,CAAK,IAAI,SAAU1F,GAAO;AAC5C,WAAIG,EAAMH,CAAK,IACN,IAAIsB,EAAU,KAAKmE,CAAY,EAAE,SAASC,CAAK,EAAE1F,CAAK,CAAC,IAEzD,KAAKyF,CAAY,EAAE,SAASC,CAAK,EAAC;AAAA,EAC3C;AAEF,WAAWC,KAAU;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACE,EAAArE,EAAU,UAAUqE,CAAM,IAAI,WAAY;AACxC,WAAO,KAAKF,CAAY,EAAE,SAASE,CAAM,EAAC;AAAA,EAC5C;AAEF,WAAWA,KAAU,CAAC,gBAAgB,gBAAgB,oBAAoB;AACxE,EAAArE,EAAU,UAAUqE,CAAM,IAAI,WAAY;AACxC,WAAOvE;AAAA,MACL,EAAE,gBAAgB,GAAI;AAAA,MACtB,KAAKqE,CAAY,EAAE,SAAS,QAAO,EAAG,MAAM,GAAG,CAAC;AAAA,IACtD,EAAME,CAAM,EAAC;AAAA,EACX;AAGFrE,EAAU,UAAU,YAAY,WAAY;AAC1C,SAAO,KAAK,MAAM,EAAE,OAAO,IAAI,KAAK,GAAE,CAAE;AAC1C;AAEAA,EAAU,UAAU,aAAa,WAAY;AAC3C,SAAO,KAAK,MAAM,EAAE,KAAK,KAAK,YAAW,EAAE,CAAE;AAC/C;AAEAA,EAAU,UAAU,SAAS,SAAUwD,GAAS;AAC9C,SAAO,CAAC,QAAS,CAACA;AACpB;AACAxD,EAAU,UAAU,WAAW,SAAUwD,GAAS;AAChD,SAAO,OAAOA;AAChB;AACAxD,EAAU,UAAU,UAAU,SAAUwD,GAAS;AAC/C,SAAO,OAAOA;AAChB;AACAxD,EAAU,UAAU,iBAAiB,SAAUwD,GAAS;AACtD,SAAO,QAAQA;AACjB;AACAxD,EAAU,UAAU,gBAAgB,SAAUwD,GAAS;AACrD,SAAO,QAAQA;AACjB;AACAxD,EAAU,UAAU,YAAY,SAAUjB,GAAG0E,GAAG;AAC9C,SAAQ1E,KAAK,QAAQ,QAAQ0E,KAAOA,KAAK,QAAQ,QAAQ1E;AAC3D;AAEAiB,EAAU,UAAU,OAAO,YAAaK,GAAM;AAC5C,SAAOiE,EAAS,KAAK,MAAM,GAAG,GAAGjE,CAAI;AACvC;AAEAL,EAAU,UAAU,QAAQ,YAAaK,GAAM;AAC7C,SAAOiE,EAAS,KAAK,MAAM,IAAI,GAAGjE,CAAI;AACxC;AAEA,SAASiE,EAASX,MAAStD,GAAM;ADpzBjC,MAAAC,GAAAY,GAAAC;ACqzBE,QAAMyC,IAAOvD,EAAK,CAAC,GACbwD,IAAOxD,EAAK,CAAC,GACbkE,IAAW,KAAKJ,CAAY,EAAE;AACpC,MAAI,OAAO,SAASP,CAAI,KAAK,CAAC,OAAO,SAASC,CAAI;AAChD,WAAOU,EAAS,KAAK,EAAE,KAAKZ,IAAOC,EAAI,CAAE,EAAE,OAAM;AAEnD,MAAIE,IAAa;AACjB,MAAI7E,EAAS2E,CAAI,KAAKxE,EAAiBwE,CAAI;AACzC,IAAAE,IAAa;AAAA,MACX,MAAMH,MAAQrD,IAAAsD,EAAK,SAAL,OAAAtD,IAAa;AAAA,MAC3B,OAAOqD,MAAQzC,IAAA0C,EAAK,UAAL,OAAA1C,IAAc;AAAA,MAC7B,KAAKyC,MAAQxC,IAAAyC,EAAK,QAAL,OAAAzC,IAAY;AAAA,IAC/B;AAAA,WACa,OAAO,SAASyC,CAAI,GAAG;AAChC,QAAIvD,EAAK,SAAS;AAChB,YAAM,WAAW,oBAAoB;AAEvC,IAAAyD,IAAa,EAAE,MAAMH,IAAOC,GAAM,OAAOD,IAAOE,GAAM,KAAKF,IAAO,KAAI;AAAA,EACxE,WAAW,MAAM,QAAQC,CAAI,GAAG;AAC9B,QAAIA,EAAK,SAAS;AAChB,YAAM,WAAW,mBAAmB;AAEtC,IAAAE,IAAa;AAAA,MACX,MAAMH,IAAOC,EAAK,CAAC;AAAA,MACnB,OAAOD,IAAOC,EAAK,CAAC;AAAA,MACpB,KAAKD,IAAOC,EAAK,CAAC;AAAA,IACxB;AAAA,EACE;AACE,UAAM,UAAS;AAEjB,SAAOW,EAAS,KAAKT,CAAU,EAAE,OAAM;AACzC;"}
|
|
1
|
+
{"version":3,"file":"qrono.js","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 const monday = 1\nexport const tuesday = 2\nexport const wednesday = 3\nexport const thursday = 4\nexport const friday = 5\nexport const saturday = 6\nexport const sunday = 7\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\n/**\n * Resolve a local time that falls on or near a DST transition boundary.\n *\n * Handles two distinct cases that arise when constructing a local Date:\n *\n * GAP (spring-forward, isGap = true):\n * A range of local times is skipped entirely. JavaScript automatically advances\n * the time to the next valid moment (post-transition / DST side), adding the gap\n * size to the UTC timestamp. The caller detects a gap by comparing the constructed\n * Date's local fields against the originally requested values.\n * - interpretAsDst = true → accept JS's forward-shift as-is (DST side)\n * - interpretAsDst = false → shift UTC back by the gap size (pre-transition side)\n *\n * OVERLAP (fall-back, isGap = false):\n * A range of local times occurs twice. JavaScript always picks the DST side\n * (first occurrence). If the time is not actually in an overlap, the adjustment\n * will not preserve the original local fields and the original Date is returned.\n * - interpretAsDst = true → accept JS's DST-side interpretation as-is\n * - interpretAsDst = false → shift UTC by the offset difference (standard-time side)\n *\n * In both cases the UTC adjustment uses the same formula:\n * adjustedUTC = date.getTime() + adjust * millisecondsPerMinute\n * where adjust = nextDay.timezoneOffset - prevDay.timezoneOffset.\n * For a gap the adjust is negative (offsets decrease going forward),\n * so subtracting it moves UTC backward to the pre-transition side.\n * For an overlap the adjust is also negative in the same direction,\n * and the same subtraction moves to the standard-time side.\n *\n * @param {boolean} interpretAsDst\n * @param {Date} date - The Date constructed from the requested local fields.\n * @param {boolean} isGap - true if the requested time fell in a DST gap (spring-forward).\n * @returns {Date}\n */\nexport function resolveDstTime(interpretAsDst, date, isGap) {\n const numeric = date.getTime()\n const original = new Date(numeric)\n if (interpretAsDst) {\n return original\n }\n const nextDay = new Date(numeric)\n nextDay.setDate(date.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(date.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n if (adjust === 0) {\n return original\n }\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(date.getUTCMinutes() + adjust)\n )\n if (isGap) {\n return adjustedUTC\n }\n // For an overlap, verify the candidate preserves the original local fields.\n // If it does not, the time is not actually in an overlap — return as-is.\n if (\n adjustedUTC.getHours() !== date.getHours() ||\n adjustedUTC.getMinutes() !== date.getMinutes()\n ) {\n return original\n }\n return adjustedUTC\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n resolveDstTime,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\nexport {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers'\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n interpretAsDst: true,\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\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('Qrono.internal')\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 interpretAsDst: false,\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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 dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const interpretAsDst = dateOnly ? true : this.interpretAsDst\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 // 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 this.nativeDate = resolveDstTime(interpretAsDst, newDate, isGap)\n } else {\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 }\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// -----------------------------------------------------------------------------\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 `${String(t.getFullYear()).padStart(4, '0')}-${String(\n t.getMonth() + 1\n ).padStart(2, '0')}-${String(t.getDate()).padStart(2, '0')}T${String(\n t.getHours()\n ).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}:${String(\n t.getSeconds()\n ).padStart(2, '0')}.${String(t.getMilliseconds()).padStart(3, '0')}${\n (offset >= 0 ? '+' : '-') +\n String(Math.trunc(offsetAbs / minutesPerHour)).padStart(2, '0') +\n ':' +\n String(offsetAbs % minutesPerHour).padStart(2, '0')\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 interpretAsDst: this[internal].interpretAsDst,\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.interpretAsDst = function (arg) {\n return given(arg)\n ? this.clone({ interpretAsDst: arg })\n : this[internal].interpretAsDst\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\nQrono.prototype.year = function (value) {\n return given(value)\n ? this.clone({ year: value })\n : this[internal].getNative('FullYear')\n}\n\nQrono.prototype.month = function (value) {\n return given(value)\n ? this.clone({ month: value })\n : this[internal].getNative('Month') + 1\n}\n\nQrono.prototype.day = function (value) {\n return given(value)\n ? this.clone({ day: value })\n : this[internal].getNative('Date')\n}\n\nQrono.prototype.hour = function (value) {\n return given(value)\n ? this.clone({ hour: value })\n : this[internal].getNative('Hours')\n}\n\nQrono.prototype.minute = function (value) {\n return given(value)\n ? this.clone({ minute: value })\n : this[internal].getNative('Minutes')\n}\n\nQrono.prototype.second = function (value) {\n return given(value)\n ? this.clone({ second: value })\n : this[internal].getNative('Seconds')\n}\n\nQrono.prototype.millisecond = function (value) {\n return given(value)\n ? this.clone({ millisecond: value })\n : this[internal].getNative('Milliseconds')\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({ interpretAsDst: true }).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\nQrono.prototype.startOfYear = function () {\n return this.clone({\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n })\n}\n\nQrono.prototype.startOfMonth = function () {\n return this.clone({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { interpretAsDst: true },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.startOfHour = function () {\n return this.clone({ minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfMinute = function () {\n return this.clone({ second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfSecond = function () {\n return this.clone({ millisecond: 0 })\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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('QronoDate.internal')\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 { interpretAsDst: true },\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","monday","tuesday","wednesday","thursday","friday","saturday","sunday","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","resolveDstTime","interpretAsDst","isGap","numeric","original","nextDay","prevDay","adjust","adjustedUTC","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","internal","args","_a","self","set","parse","valid","getNative","source","first","second","values","v","name","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","dateOnly","baseDate","newDate","requested","parsePattern","str","text","hasTime","year","month","day","offset","native","offsetAbs","theThursday","startOfYear","firstThursday","currentOffset","offsets","_","index","minOffset","maxOffset","startOfDay","days","endOfYear","endOfLastYear","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","field","method","plusDate","datetime"],"mappings":";;;;;;;;;;;AAYO,MAAMA,IAAkB,IAAI,KAAK,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAElDC,IAAc,GACdC,IAAc,IAEdC,IAAiB,IACjBC,IAAgBD,IAAiBD,GAEjCG,IAAmB,IACnBC,KAAiBD,IAAmBF,GACpCI,KAAgBD,KAAiBJ,GAEjCM,IAAwB,KACxBC,KAAwBJ,IAAmBG,GAE3CE,IAAqBH,KAAgBC,GAGrCG,KAAS,GACTC,KAAU,GACVC,IAAY,GACZC,IAAW,GACXC,KAAS,GACTC,KAAW,GACXC,KAAS;AAEf,SAASC,EAAIC,MAAWC,GAAM;AACnC,SAAOA,EAAK,KAAI,EAAG,KAAKD,EAAO,gBAAgBA,CAAM;AACvD;AAEO,SAASE,EAAOF,GAAQ;AAC7B,SAAO,OAAO,QAAQA,CAAM,EACzB,OAAO,CAAC,CAAA,EAAGG,CAAK,MAAM,CAACC,GAAWD,CAAK,CAAC,EACxC,IAAI,CAAC,CAACE,CAAG,MAAMA,CAAG;AACvB;AAEO,SAASC,EAAMC,GAAK;AACzB,SAAOA,MAAQ;AACjB;AAEO,SAASH,GAAWI,GAAG;AAC5B,SAAOA,aAAa;AACtB;AAEO,SAASC,GAASD,GAAG;AAC1B,SAAO,OAAOA,KAAM,YAAYA,aAAa;AAC/C;AAEO,SAASE,EAASF,GAAG;AAC1B,SAAOA,MAAM,QAAQ,OAAOA,KAAM,YAAYA,EAAE,gBAAgB;AAClE;AAEO,SAASG,EAAYC,GAAM;AAChC,SAAO,CAAC,OAAO,MAAMA,EAAK,QAAO,CAAE;AACrC;AAUO,SAASC,EAAiBb,GAAQ;AACvC,SAAOD,EAAIC,GAAQ;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAG;AACH;AAmCO,SAASc,GAAeC,GAAgBH,GAAMI,GAAO;AAC1D,QAAMC,IAAUL,EAAK,QAAO,GACtBM,IAAW,IAAI,KAAKD,CAAO;AACjC,MAAIF;AACF,WAAOG;AAET,QAAMC,IAAU,IAAI,KAAKF,CAAO;AAChC,EAAAE,EAAQ,QAAQP,EAAK,QAAO,IAAK,CAAC;AAClC,QAAMQ,IAAU,IAAI,KAAKH,CAAO;AAChC,EAAAG,EAAQ,QAAQR,EAAK,QAAO,IAAK,CAAC;AAClC,QAAMS,IAASF,EAAQ,kBAAiB,IAAKC,EAAQ,kBAAiB;AACtE,MAAIC,MAAW;AACb,WAAOH;AAET,QAAMI,IAAc,IAAI;AAAA,IACtB,IAAI,KAAKL,CAAO,EAAE,cAAcL,EAAK,cAAa,IAAKS,CAAM;AAAA,EACjE;AACE,SAAIL,IACKM,IAKPA,EAAY,SAAQ,MAAOV,EAAK,SAAQ,KACxCU,EAAY,iBAAiBV,EAAK,WAAU,IAErCM,IAEFI;AACT;AC1HK,MAACC,IAAQC;AAiBdA,EAAM,OAAOC;AAGb,MAAMC,IAAiB;AAAA,EACrB,WAAW;AAAA,EACX,gBAAgB;AAClB;AAEA,WAAWrB,KAAOH,EAAOwB,CAAc;AACrC,EAAAF,EAAMnB,CAAG,IAAI,SAAUE,GAAK;AAC1B,WAAID,EAAMC,CAAG,KACXmB,EAAerB,CAAG,IAAIE,GACf,QAEFmB,EAAerB,CAAG;AAAA,EAC3B;AAGFmB,EAAM,UAAU,SAAUG,GAAS;AACjC,MAAIrB,EAAMqB,CAAO,GAAG;AAClB,eAAWtB,KAAOH,EAAOwB,CAAc;AACrC,MAAK3B,EAAI4B,GAAStB,CAAG,MAGrBqB,EAAerB,CAAG,IAAIsB,EAAQtB,CAAG;AAEnC,WAAO;AAAA,EACT;AACA,SAAOuB,EAAA,IAAKF;AACd;AAEAF,EAAM,QAAQ,WAAY;AACxB,SAAAE,EAAe,YAAY,IACpB;AACT;AAEAF,EAAM,cAAc,WAAY;AAC9B,SAAAE,EAAe,YAAY,IACpB;AACT;AAEA,OAAO,OAAOF,GAAO;AAAA,EACnB,QAAAhC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AACF,CAAC;AAKD,MAAM+B,IAAW,uBAAO,gBAAgB;AAExC,SAASL,KAASM,GAAM;ADnGxB,MAAAC;ACoGE,MAAI,CAAC;AACH,WAAO,IAAIP,EAAM,GAAGM,CAAI;AAE1B,QAAME,IAAO;AAAA;AAAA,IAEX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,gBAAgB;AAAA;AAAA,IAEhB,KAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAR;AAAA,IACA,WAAAS;AAAA,EACJ;AAKE,MAJA,KAAKP,CAAQ,IAAIG,GAGjBA,EAAK,QAAQN,CAAc,GACvBI,EAAK,CAAC,aAAaN,GAAO;AAC5B,UAAMa,IAASP,EAAK,MAAK;AACzB,eAAWzB,KAAOH,EAAO8B,CAAI;AAC3B,MAAAA,EAAK3B,CAAG,IAAIgC,EAAOhC,CAAG,EAAC;AAAA,EAE3B;AACA,EAAIK,EAASoB,EAAK,CAAC,CAAC,KAAK,CAACjB,EAAiBiB,EAAK,CAAC,CAAC,KAChDE,EAAK,QAAQF,EAAK,MAAK,CAAE;AAE3B,QAAMQ,IAAQR,EAAK,CAAC,GACdS,IAAST,EAAK,CAAC;AACrB,MAAIQ,KAAS;AACX,KAAAP,IAAAC,EAAK,eAAL,SAAAA,EAAK,aAAe,oBAAI,KAAI;AAAA,WACnBM,aAAiB;AAC1B,IAAAN,EAAK,aAAa,IAAI,KAAKM,EAAM,QAAO,CAAE;AAAA,WACjC7B,GAAS6B,CAAK;AACvB,IAAAN,EAAK,MAAMM,CAAK;AAAA,WACP5B,EAAS4B,CAAK,GAAG;AAC1B,QAAI,CAACzB,EAAiByB,CAAK;AACzB,YAAM;AAAA,QACJ;AAAA,MAER;AAEI,IAAAN,EAAK,IAAIM,CAAK;AAAA,EAChB,WAAW,OAAO,SAASA,CAAK,KAAK,CAAC,OAAO,SAASC,CAAM;AAC1D,IAAAP,EAAK,aAAa,IAAI,KAAKM,CAAK;AAAA,WACvB,OAAO,SAASA,CAAK,KAAK,MAAM,QAAQA,CAAK,GAAG;AACzD,UAAME,IAASV,EAAK,KAAI,EAAG,OAAO,CAAAW,MAAK,OAAO,cAAcA,CAAC,CAAC;AAC9D,QAAID,EAAO,WAAWV,EAAK,KAAI,EAAG;AAChC,YAAM,WAAW,yBAAyB;AAE5C,QAAIU,EAAO,SAAS;AAClB,YAAM,WAAW,kBAAkB;AAErC,IAAAR,EAAK,IAAI;AAAA,MACP,MAAMQ,EAAO,CAAC;AAAA,MACd,OAAOA,EAAO,CAAC;AAAA,MACf,KAAKA,EAAO,CAAC;AAAA,MACb,MAAMA,EAAO,CAAC;AAAA,MACd,QAAQA,EAAO,CAAC;AAAA,MAChB,QAAQA,EAAO,CAAC;AAAA,MAChB,aAAaA,EAAO,CAAC;AAAA,IAC3B,CAAK;AAAA,EACH;AACE,UAAM,UAAU,oBAAoBV,CAAI,EAAE;AAE5C,SAAO;AACT;AAKA,SAASK,KAAQ;AACf,SAAOxB,EAAY,KAAK,UAAU;AACpC;AAEA,SAASgB,GAAQA,GAAS;AACxB,MAAKA,GAGL;AAAA,eAAWtB,KAAOH,EAAOwB,CAAc;AACrC,MAAI3B,EAAI4B,GAAStB,CAAG,MAClB,KAAKA,CAAG,IAAIsB,EAAQtB,CAAG;AAG3B,WAAO;AAAA;AACT;AAEA,SAAS+B,GAAUM,GAAM;AACvB,SAAO,KAAK,WAAW,MAAM,KAAK,YAAY,KAAK,KAAK,GAAGA,CAAI,EAAE,EAAC;AACpE;AAEA,SAAST,GAAIO,GAAQ;ADhMrB,MAAAT,GAAAY,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC;ACiME,QAAM3B,IAAOF,EAAA,IAAKY;AAElB,MADAV,EAAK,QAAQA,EAAK,SAASA,EAAK,QAAQ,GACpC,KAAK,WAAW;AAClB,UAAM4B,IAAW,CAAC3D,EAAIyC,GAAQ,QAAQ,UAAU,UAAU,aAAa,GACjEzB,IAAiB2C,IAAW,KAAO,KAAK,gBACxCC,KAAW5B,IAAA,KAAK,eAAL,OAAAA,IAAmB,IAAI,KAAK,GAAG,CAAC,GAC3C6B,IAAU,IAAI,KAAK/E,EAAgB,QAAO,CAAE,GAC5CgF,IAAY;AAAA,MAChB,OAAMlB,IAAAb,EAAK,SAAL,OAAAa,IAAagB,EAAS,YAAW;AAAA,MACvC,QAAOf,IAAAd,EAAK,UAAL,OAAAc,IAAce,EAAS,SAAQ;AAAA,MACtC,MAAKd,IAAAf,EAAK,QAAL,OAAAe,IAAYc,EAAS,QAAO;AAAA,MACjC,OAAMb,IAAAhB,EAAK,SAAL,OAAAgB,IAAcY,IAAW,IAAIC,EAAS;MAC5C,SAAQZ,IAAAjB,EAAK,WAAL,OAAAiB,IAAgBW,IAAW,IAAIC,EAAS;MAChD,SAAQX,IAAAlB,EAAK,WAAL,OAAAkB,IAAgBU,IAAW,IAAIC,EAAS;MAChD,cACEV,IAAAnB,EAAK,gBAAL,OAAAmB,IAAqBS,IAAW,IAAIC,EAAS,gBAAe;AAAA,IACpE;AACI,IAAAC,EAAQ,YAAYC,EAAU,MAAMA,EAAU,OAAOA,EAAU,GAAG,GAClED,EAAQ;AAAA,MACNC,EAAU;AAAA,MACVA,EAAU;AAAA,MACVA,EAAU;AAAA,MACVA,EAAU;AAAA,IAChB;AAGI,UAAM7C,IACJ6C,EAAU,OAAO,MACfA,EAAU,QAAQ,MAClBA,EAAU,MAAM,MAChBA,EAAU,OAAO,MACjBA,EAAU,SACZD,EAAQ,YAAW,IAAK,MACtBA,EAAQ,SAAQ,IAAK,MACrBA,EAAQ,QAAO,IAAK,MACpBA,EAAQ,SAAQ,IAAK,MACrBA,EAAQ,WAAU;AACtB,SAAK,aAAa9C,GAAeC,GAAgB6C,GAAS5C,CAAK;AAAA,EACjE,OAAO;AACL,UAAM2C,KAAWT,IAAA,KAAK,eAAL,OAAAA,IAAmB,oBAAI,KAAK,CAAC,GACxCU,IAAU,oBAAI,KAAK,CAAC;AAC1B,IAAAA,EAAQ;AAAA,OACNT,IAAArB,EAAK,SAAL,OAAAqB,IAAaQ,EAAS,eAAc;AAAA,OACpCP,IAAAtB,EAAK,UAAL,OAAAsB,IAAcO,EAAS,YAAW;AAAA,OAClCN,IAAAvB,EAAK,QAAL,OAAAuB,IAAYM,EAAS,WAAU;AAAA,IACrC,GACIC,EAAQ;AAAA,OACNN,IAAAxB,EAAK,SAAL,OAAAwB,IAAaK,EAAS,YAAW;AAAA,OACjCJ,IAAAzB,EAAK,WAAL,OAAAyB,IAAeI,EAAS,cAAa;AAAA,OACrCH,IAAA1B,EAAK,WAAL,OAAA0B,IAAeG,EAAS,cAAa;AAAA,OACrCF,IAAA3B,EAAK,gBAAL,OAAA2B,IAAoBE,EAAS,mBAAkB;AAAA,IACrD,GACI,KAAK,aAAaC;AAAA,EACpB;AACA,SAAO;AACT;AAEA,MAAME,KAAe,IAAI;AAAA;AAAA,EAEvB;AAKF;AAEA,SAAS5B,GAAM6B,GAAK;ADnQpB,MAAAhC;ACoQE,QAAMiC,IAAOD,EAAI,KAAI,EAAG,YAAW,GAC7BvB,IAASwB,EAAK,MAAMF,EAAY;AACtC,MAAI,CAACtB;AACH,UAAM;AAAA,MACJ,oBAAoBuB,CAAG;AAAA,IAE7B;AAEE,QAAME,IAAUzB,EAAO,CAAC,MAAM,QACxB,CAAC0B,GAAMC,GAAOC,GAAKC,CAAM,IAAI;AAAA,IACjC,CAAC7B,EAAO,CAAC;AAAA,IACT,CAACA,EAAO,CAAC,KAAK;AAAA,IACd,CAACA,EAAO,CAAC,KAAK;AAAA,IACdA,EAAO,CAAC;AAAA,EACZ,GACQ8B,IAAS,IAAI,KAAKN,CAAI;AAC5B,MAAI,CAACrD,EAAY2D,CAAM;AACrB,UAAM;AAAA,MACJ,oBAAoBP,CAAG;AAAA,IAE7B;AAEE,SAAIM,IACF,KAAK,aAAaC,IACTL,IACT,KAAK,IAAI;AAAA,IACP,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,KAAAC;AAAA,IACA,MAAM,CAAC5B,EAAO,CAAC,KAAK;AAAA,IACpB,QAAQ,CAACA,EAAO,CAAC,KAAK;AAAA,IACtB,QAAQ,CAACA,EAAO,CAAC,KAAK;AAAA,IACtB,aAAa,GAACT,IAAAS,EAAO,CAAC,MAAR,gBAAAT,EAAW,SAAS,GAAG,SAAQ;AAAA,EACnD,CAAK,IAED,KAAK,IAAI,EAAE,MAAAmC,GAAM,OAAAC,GAAO,KAAAC,EAAG,CAAE,GAExB;AACT;AAMA5C,EAAM,UAAU,WAAW,WAAY;AACrC,MAAI,KAAKK,CAAQ,EAAE,WAAW;AAC5B,UAAM,IAAI,KAAKA,CAAQ,EAAE,YACnBwC,IAAS,CAAC,EAAE,kBAAiB,GAC7BE,IAAY,KAAK,IAAIF,CAAM;AACjC,WAAO,GAAG,OAAO,EAAE,YAAW,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI;AAAA,MACpD,EAAE,SAAQ,IAAK;AAAA,IACrB,EAAM,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,QAAO,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI;AAAA,MAC5D,EAAE,SAAQ;AAAA,IAChB,EAAM,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,WAAU,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI;AAAA,MAC/D,EAAE,WAAU;AAAA,IAClB,EAAM,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,gBAAe,CAAE,EAAE,SAAS,GAAG,GAAG,CAAC,IAC/DA,KAAU,IAAI,MAAM,OACrB,OAAO,KAAK,MAAME,IAAYvF,CAAc,CAAC,EAAE,SAAS,GAAG,GAAG,IAC9D,MACA,OAAOuF,IAAYvF,CAAc,EAAE,SAAS,GAAG,GAAG,CACxD;AAAA,EACE;AACA,SAAO,KAAK6C,CAAQ,EAAE,WAAW,YAAW;AAC9C;AAEAL,EAAM,UAAU,UAAU,WAAY;AACpC,SAAO,KAAKK,CAAQ,EAAE,WAAW,QAAO;AAC1C;AAEAL,EAAM,UAAU,QAAQ,YAAaM,GAAM;AACzC,SAAO,IAAIN,EAAM,MAAM,GAAGM,CAAI;AAChC;AAEAN,EAAM,UAAU,UAAU,SAAUG,GAAS;AAC3C,SAAOrB,EAAMqB,CAAO,IAChB,KAAK,MAAMA,CAAO,IAClB;AAAA,IACE,WAAW,KAAKE,CAAQ,EAAE;AAAA,IAC1B,gBAAgB,KAAKA,CAAQ,EAAE;AAAA,EACvC;AACA;AAEAL,EAAM,UAAU,aAAa,WAAY;AACvC,SAAO,IAAI,KAAK,KAAKK,CAAQ,EAAE,WAAW,QAAO,CAAE;AACrD;AAEAL,EAAM,UAAU,SAAS,WAAY;AACnC,SAAO,KAAKK,CAAQ,EAAE,YAClB,CAAC,KAAKA,CAAQ,EAAE,WAAW,kBAAiB,IAC5C;AACN;AAEAL,EAAM,UAAU,YAAY,SAAUjB,GAAK;AACzC,SAAOD,EAAMC,CAAG,IAAI,KAAK,MAAM,EAAE,WAAWA,EAAG,CAAE,IAAI,KAAKsB,CAAQ,EAAE;AACtE;AAEAL,EAAM,UAAU,iBAAiB,SAAUjB,GAAK;AAC9C,SAAOD,EAAMC,CAAG,IACZ,KAAK,MAAM,EAAE,gBAAgBA,EAAG,CAAE,IAClC,KAAKsB,CAAQ,EAAE;AACrB;AAEAL,EAAM,UAAU,QAAQ,WAAY;AAClC,SAAO,KAAKK,CAAQ,EAAE,MAAK;AAC7B;AAGAL,EAAM,UAAU,UAAU,WAAY;AACpC,SAAO,KAAKK,CAAQ,EAAE,WAAW,QAAO;AAC1C;AAEAL,EAAM,UAAU,WAAW,WAAY;AACrC,SAAO;AAAA,IACL,MAAM,KAAK,KAAI;AAAA,IACf,OAAO,KAAK,MAAK;AAAA,IACjB,KAAK,KAAK,IAAG;AAAA,IACb,MAAM,KAAK,KAAI;AAAA,IACf,QAAQ,KAAK,OAAM;AAAA,IACnB,QAAQ,KAAK,OAAM;AAAA,IACnB,aAAa,KAAK,YAAW;AAAA,EACjC;AACA;AAEAA,EAAM,UAAU,UAAU,WAAY;AACpC,SAAO;AAAA,IACL,KAAK,KAAI;AAAA,IACT,KAAK,MAAK;AAAA,IACV,KAAK,IAAG;AAAA,IACR,KAAK,KAAI;AAAA,IACT,KAAK,OAAM;AAAA,IACX,KAAK,OAAM;AAAA,IACX,KAAK,YAAW;AAAA,EACpB;AACA;AAEAA,EAAM,UAAU,SAAS,YAAaM,GAAM;AAC1C,SAAO,IAAIL,EAAU,KAAK,MAAM,GAAGK,CAAI,CAAC;AAC1C;AAGAN,EAAM,UAAU,QAAQ,WAAY;AAClC,SAAO,KAAK,MAAM,EAAE,WAAW,GAAK,CAAE;AACxC;AAEAA,EAAM,UAAU,cAAc,WAAY;AACxC,SAAO,KAAK,MAAM,EAAE,WAAW,GAAI,CAAE;AACvC;AAGAA,EAAM,UAAU,OAAO,SAAUrB,GAAO;AACtC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,MAAMA,EAAK,CAAE,IAC1B,KAAK0B,CAAQ,EAAE,UAAU,UAAU;AACzC;AAEAL,EAAM,UAAU,QAAQ,SAAUrB,GAAO;AACvC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,OAAOA,EAAK,CAAE,IAC3B,KAAK0B,CAAQ,EAAE,UAAU,OAAO,IAAI;AAC1C;AAEAL,EAAM,UAAU,MAAM,SAAUrB,GAAO;AACrC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,KAAKA,EAAK,CAAE,IACzB,KAAK0B,CAAQ,EAAE,UAAU,MAAM;AACrC;AAEAL,EAAM,UAAU,OAAO,SAAUrB,GAAO;AACtC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,MAAMA,EAAK,CAAE,IAC1B,KAAK0B,CAAQ,EAAE,UAAU,OAAO;AACtC;AAEAL,EAAM,UAAU,SAAS,SAAUrB,GAAO;AACxC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,QAAQA,EAAK,CAAE,IAC5B,KAAK0B,CAAQ,EAAE,UAAU,SAAS;AACxC;AAEAL,EAAM,UAAU,SAAS,SAAUrB,GAAO;AACxC,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,QAAQA,EAAK,CAAE,IAC5B,KAAK0B,CAAQ,EAAE,UAAU,SAAS;AACxC;AAEAL,EAAM,UAAU,cAAc,SAAUrB,GAAO;AAC7C,SAAOG,EAAMH,CAAK,IACd,KAAK,MAAM,EAAE,aAAaA,EAAK,CAAE,IACjC,KAAK0B,CAAQ,EAAE,UAAU,cAAc;AAC7C;AAGAL,EAAM,UAAU,YAAY,WAAY;AACtC,SAAO,KAAM,KAAKK,CAAQ,EAAE,UAAU,KAAK,IAAI,IAAI/C,KAAeA;AACpE;AAEA0C,EAAM,UAAU,YAAY,WAAY;AACtC,QAAMZ,IAAO,KAAK,OAAM;AACxB,SAAO,IAAIA,IAAOA,EAAK,YAAW;AACpC;AAEAY,EAAM,UAAU,aAAa,WAAY;AACvC,QAAMZ,IAAO,KAAK,OAAM,GAClB4D,IAAc5D,EAAK,IAAIA,EAAK,QAAQA,EAAK,UAAS,IAAKjB,CAAQ,GAC/D8E,IAAcD,EAAY,YAAW,GACrCE,IACJD,EAAY,UAAS,MAAO9E,IACxB8E,IACAA,EAAY;AAAA,IACV,KAAM9E,IAAW8E,EAAY,UAAS,IAAK3F,KAAeA;AAAA,EACpE;AACE,SAAO,IAAI,KAAK,MAAM0F,IAAcE,KAAiB5F,CAAW;AAClE;AAEA0C,EAAM,UAAU,aAAa,WAAY;AACvC,QAAMZ,IAAO,KAAK,OAAM;AACxB,SAAOA,EAAK,IAAIA,EAAK,IAAG,IAAKA,EAAK,UAAS,IAAKjB,CAAQ,EAAE,KAAI;AAChE;AAEA6B,EAAM,UAAU,aAAa,WAAY;AACvC,QAAM0C,IAAO,KAAK,KAAI;AACtB,SAAOA,IAAO,MAAM,MAAMA,IAAO,QAAQ,KAAKA,IAAO,QAAQ;AAC/D;AAEA1C,EAAM,UAAU,eAAe,WAAY;AACzC,MAAI,CAAC,KAAKK,CAAQ,EAAE;AAClB,WAAO;AAET,QAAM8C,IAAgB,KAAK,OAAM;AACjC,SAAO,CAAC,GAAG,GAAG,GAAG,EAAE,EAChB,IAAI,CAAAR,MAAS,KAAK,MAAMA,CAAK,EAAE,OAAM,CAAE,EACvC,KAAK,CAAAE,MAAUA,MAAWM,CAAa;AAC5C;AAEAnD,EAAM,UAAU,UAAU,WAAY;AACpC,MAAI,CAAC,KAAKK,CAAQ,EAAE;AAClB,WAAO;AAET,QAAM+C,IAAU,MAAM;AAAA,IAAK,EAAE,QAAQ,GAAE;AAAA,IAAI,CAACC,GAAGC,MAC7C,KAAK,MAAMA,IAAQ,CAAC,EAAE,OAAM;AAAA,EAChC,GACQC,IAAY,KAAK,IAAI,GAAGH,CAAO,GAC/BI,IAAY,KAAK,IAAI,GAAGJ,CAAO;AACrC,SAAOG,MAAcC,KAAa,KAAK,OAAM,MAAOA;AACtD;AAEAxD,EAAM,UAAU,qBAAqB,WAAY;AAC/C,SAAK,KAAKK,CAAQ,EAAE,YAGb,KAAK,mBAAmB5C,IAFtB;AAGX;AAEAuC,EAAM,UAAU,eAAe,WAAY;AACzC,MAAI,CAAC,KAAKK,CAAQ,EAAE;AAClB,WAAO5C;AAET,QAAMgG,IAAa,KAAK,QAAQ,EAAE,gBAAgB,GAAI,CAAE,EAAE,WAAU,GAC9D9D,IAAU8D,EAAW,KAAK,EAAE,KAAK,EAAC,CAAE,EAAE,WAAU;AACtD,SAAIA,EAAW,IAAG,MAAO9D,EAAQ,IAAG,IAC3BlC,KAEDkC,IAAU8D,KAAc3F;AAClC;AAEAkC,EAAM,UAAU,cAAc,WAAY;AACxC,QAAM0D,IAAO,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,GACtDf,IAAQ,KAAK,MAAK;AACxB,SAAOe,EAAKf,IAAQ,CAAC,KAAK,KAAK,WAAU,KAAMA,MAAU,IAAI,IAAI;AACnE;AAEA3C,EAAM,UAAU,aAAa,WAAY;AACvC,SAAO,KAAK,WAAU,IAAK,MAAM;AACnC;AAEAA,EAAM,UAAU,cAAc,WAAY;AACxC,QAAM2D,IAAY,KAAK,OAAO,EAAE,OAAO,IAAI,KAAK,GAAE,CAAE,GAC9CC,IAAgBD,EAAU,MAAM,EAAE,MAAM,EAAC,CAAE;AACjD,SACEA,EAAU,UAAS,MAAOxF,KAC1ByF,EAAc,UAAS,MAAO1F,IAEvB,KAEF;AACT;AAEA8B,EAAM,UAAU,cAAc,WAAY;AACxC,SAAO,KAAK,MAAM;AAAA,IAChB,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,aAAa;AAAA,EACjB,CAAG;AACH;AAEAA,EAAM,UAAU,eAAe,WAAY;AACzC,SAAO,KAAK,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,EAAC,CAAE;AAC7E;AAEAA,EAAM,UAAU,aAAa,WAAY;AACvC,QAAM6D,IAAY,KAAK;AAAA,IACrB,EAAE,gBAAgB,GAAI;AAAA,IACtB,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,EAAC;AAAA,EACnD,EAAI,QAAO;AACT,SAAO,KAAK,MAAMA,CAAS;AAC7B;AAEA7D,EAAM,UAAU,cAAc,WAAY;AACxC,SAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,EAAC,CAAE;AAC5D;AAEAA,EAAM,UAAU,gBAAgB,WAAY;AAC1C,SAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,aAAa,EAAC,CAAE;AACjD;AAEAA,EAAM,UAAU,gBAAgB,WAAY;AAC1C,SAAO,KAAK,MAAM,EAAE,aAAa,EAAC,CAAE;AACtC;AAEAA,EAAM,UAAU,SAAS,SAAU8D,GAAS;AAC1C,SAAO,CAAC,QAAS,CAACA;AACpB;AACA9D,EAAM,UAAU,WAAW,SAAU8D,GAAS;AAC5C,SAAO,OAAOA;AAChB;AACA9D,EAAM,UAAU,UAAU,SAAU8D,GAAS;AAC3C,SAAO,OAAOA;AAChB;AACA9D,EAAM,UAAU,iBAAiB,SAAU8D,GAAS;AAClD,SAAO,QAAQA;AACjB;AACA9D,EAAM,UAAU,gBAAgB,SAAU8D,GAAS;AACjD,SAAO,QAAQA;AACjB;AACA9D,EAAM,UAAU,YAAY,SAAUhB,GAAG+E,GAAG;AAC1C,SAAQ/E,KAAK,QAAQ,QAAQ+E,KAAOA,KAAK,QAAQ,QAAQ/E;AAC3D;AAGAgB,EAAM,UAAU,OAAO,YAAaM,GAAM;AACxC,SAAO0D,EAAK,KAAK,MAAM,GAAG,GAAG1D,CAAI;AACnC;AAEAN,EAAM,UAAU,QAAQ,YAAaM,GAAM;AACzC,SAAO0D,EAAK,KAAK,MAAM,IAAI,GAAG1D,CAAI;AACpC;AAEA,SAAS0D,EAAKC,MAAS3D,GAAM;ADlmB7B,MAAAC,GAAAY;ACmmBE,QAAM+C,IAAO5D,EAAK,CAAC,GACb6D,IAAO7D,EAAK,CAAC;AACnB,MAAI,OAAO,SAAS4D,CAAI,KAAK,CAAC,OAAO,SAASC,CAAI;AAChD,WAAO,KAAK,MAAM,KAAK,QAAO,IAAKD,CAAI;AAEzC,MAAIE,IAAa;AACjB,MAAIlF,EAASgF,CAAI,GAAG;AAClB,QAAI,CAAC7E,EAAiB6E,CAAI;AACxB,YAAM;AAAA,QACJ;AAAA,MAER;AAEI,IAAAE,IAAaF;AAAA,EACf,WAAW,OAAO,SAASA,CAAI,KAAK,MAAM,QAAQA,CAAI,GAAG;AACvD,UAAMlD,IAASV,EAAK,KAAI,EAAG,OAAO,CAAAW,MAAK,OAAO,cAAcA,CAAC,CAAC;AAC9D,QAAID,EAAO,WAAWV,EAAK,KAAI,EAAG;AAChC,YAAM,WAAW,yBAAyB;AAE5C,QAAIU,EAAO,SAAS;AAClB,YAAM,WAAW,kBAAkB;AAErC,IAAAoD,IAAa;AAAA,MACX,MAAMpD,EAAO,CAAC;AAAA,MACd,OAAOA,EAAO,CAAC;AAAA,MACf,KAAKA,EAAO,CAAC;AAAA,MACb,MAAMA,EAAO,CAAC;AAAA,MACd,QAAQA,EAAO,CAAC;AAAA,MAChB,QAAQA,EAAO,CAAC;AAAA,MAChB,aAAaA,EAAO,CAAC;AAAA,IAC3B;AAAA,EACE;AACE,UAAM,UAAS;AAEjB,QAAM5B,IAAO,KAAK,WAAU,GACtBiF,IAAM,KAAKhE,CAAQ,EAAE,YAAY,KAAK;AAC5C,MAAI9B,EAAI6F,GAAY,MAAM,KAAK7F,EAAI6F,GAAY,OAAO,GAAG;AACvD,UAAM1B,IAAO,KAAK,KAAI,IAAKuB,MAAQ1D,IAAA6D,EAAW,SAAX,OAAA7D,IAAmB,IAChDoC,IAAQ,KAAK,MAAK,IAAKsB,MAAQ9C,IAAAiD,EAAW,UAAX,OAAAjD,IAAoB,IACnDmD,IAAa,IAAI,KAAKlF,EAAK,QAAO,CAAE;AAC1C,IAAAkF,EAAW,MAAMD,CAAG,UAAU,EAAE3B,GAAMC,GAAO,CAAC;AAC9C,UAAM4B,IAAUD,EAAW,MAAMD,CAAG,MAAM,EAAC;AAC3C,IAAIE,IAAU,KAAK,QACjBnF,EAAK,MAAMiF,CAAG,UAAU,EAAE3B,GAAM4B,EAAW,MAAMD,CAAG,OAAO,EAAC,GAAIE,CAAO,IAEvEnF,EAAK,MAAMiF,CAAG,UAAU,EAAE3B,GAAMC,IAAQ,CAAC;AAAA,EAE7C;AACA,EAAIpE,EAAI6F,GAAY,KAAK,KACvBhF,EAAK,MAAMiF,CAAG,MAAM,EAAEjF,EAAK,MAAMiF,CAAG,MAAM,EAAC,IAAKJ,IAAOG,EAAW,GAAG;AAEvE,aAAW,CAACvF,GAAK2F,CAAS,KAAK;AAAA,IAC7B,CAAC,QAAQ,OAAO;AAAA,IAChB,CAAC,UAAU,SAAS;AAAA,IACpB,CAAC,UAAU,SAAS;AAAA,IACpB,CAAC,eAAe,cAAc;AAAA,EAClC;AACI,IAAI,CAACjG,EAAI6F,GAAYvF,CAAG,KAAKuF,EAAWvF,CAAG,KAAK,QAGhDO,EAAK,SAASoF,CAAS,EAAE;AAAA,MACvBpF,EAAK,SAASoF,CAAS,EAAE,MAAMP,IAAOG,EAAWvF,CAAG;AAAA,IAC1D;AAEE,SAAO,KAAK,MAAMO,CAAI;AACxB;AAKA,MAAMqF,IAAe,uBAAO,oBAAoB;AAEhD,SAASxE,KAAaK,GAAM;AAC1B,MAAI,CAAC;AACH,WAAO,IAAIL,EAAU,GAAGK,CAAI;AAE9B,QAAME,IAAO,EAAE,UAAU,KAAI;AAC7B,OAAKiE,CAAY,IAAIjE;AACrB,MAAIK,IAAS;AACb,EAAIP,EAAK,CAAC,aAAaL,IACrBY,IAASP,EAAK,MAAK,EAAG,WAAU,IACvBA,EAAK,CAAC,aAAaN,MAC5Ba,IAASP,EAAK,MAAK;AAErB,QAAMQ,IAAQR,EAAK,CAAC,GACdS,IAAST,EAAK,CAAC;AACrB,SAAI,OAAO,SAASQ,CAAK,KAAK,CAAC,OAAO,SAASC,CAAM,MACnDT,EAAK,CAAC,IAAI,KAAK,MAAMQ,CAAK,IAAI/C,IAE5B8C,IACFA,IAASA,EAAO,MAAM,GAAGP,CAAI,IAE7BO,IAASd,EAAM,GAAGO,CAAI,GAExBE,EAAK,WAAWK,EAAO,WAAU,GAC1B;AACT;AAEAZ,EAAU,UAAU,WAAW,WAAY;AACzC,SAAO,KAAKwE,CAAY,EAAE,SAAS,WAAW,UAAU,GAAG,EAAE;AAC/D;AAEAxE,EAAU,UAAU,UAAU,WAAY;AACxC,SAAO,KAAKwE,CAAY,EAAE,WAAW1G;AACvC;AAEAkC,EAAU,UAAU,QAAQ,WAAY;AACtC,SAAO,KAAKwE,CAAY,EAAE,SAAS,MAAK;AAC1C;AAEAxE,EAAU,UAAU,QAAQ,YAAaK,GAAM;AAC7C,SAAO,IAAIL,EAAU,MAAM,GAAGK,CAAI;AACpC;AAEAL,EAAU,UAAU,aAAa,WAAY;AAC3C,SAAOF,EAAM,KAAK0E,CAAY,EAAE,SAAS,QAAO,CAAE;AACpD;AAEAxE,EAAU,UAAU,UAAU,WAAY;AACxC,SAAO,KAAKwE,CAAY,EAAE,SAAS,QAAO,IAAK1G;AACjD;AAEAkC,EAAU,UAAU,WAAW,WAAY;AACzC,SAAO;AAAA,IACL,MAAM,KAAK,KAAI;AAAA,IACf,OAAO,KAAK,MAAK;AAAA,IACjB,KAAK,KAAK,IAAG;AAAA,EACjB;AACA;AAEAA,EAAU,UAAU,UAAU,WAAY;AACxC,SAAO,CAAC,KAAK,KAAI,GAAI,KAAK,MAAK,GAAI,KAAK,IAAG,CAAE;AAC/C;AAEAA,EAAU,UAAU,cAAc,WAAY;AAC5C,SAAO,IAAIA,EAAU,KAAKwE,CAAY,EAAE,SAAS,YAAW,CAAE;AAChE;AAEAxE,EAAU,UAAU,eAAe,WAAY;AAC7C,SAAO,IAAIA,EAAU,KAAKwE,CAAY,EAAE,SAAS,aAAY,CAAE;AACjE;AAEAxE,EAAU,UAAU,aAAa,WAAY;AAC3C,SAAO,KAAKwE,CAAY,EAAE,SAAS,MAAK;AAC1C;AACA,WAAWC,KAAS,CAAC,QAAQ,SAAS,KAAK;AACzC,EAAAzE,EAAU,UAAUyE,CAAK,IAAI,SAAU/F,GAAO;AAC5C,WAAIG,EAAMH,CAAK,IACN,IAAIsB,EAAU,KAAKwE,CAAY,EAAE,SAASC,CAAK,EAAE/F,CAAK,CAAC,IAEzD,KAAK8F,CAAY,EAAE,SAASC,CAAK,EAAC;AAAA,EAC3C;AAEF,WAAWC,KAAU;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACE,EAAA1E,EAAU,UAAU0E,CAAM,IAAI,WAAY;AACxC,WAAO,KAAKF,CAAY,EAAE,SAASE,CAAM,EAAC;AAAA,EAC5C;AAEF,WAAWA,KAAU,CAAC,gBAAgB,gBAAgB,oBAAoB;AACxE,EAAA1E,EAAU,UAAU0E,CAAM,IAAI,WAAY;AACxC,WAAO5E;AAAA,MACL,EAAE,gBAAgB,GAAI;AAAA,MACtB,KAAK0E,CAAY,EAAE,SAAS,QAAO,EAAG,MAAM,GAAG,CAAC;AAAA,IACtD,EAAME,CAAM,EAAC;AAAA,EACX;AAGF1E,EAAU,UAAU,YAAY,WAAY;AAC1C,SAAO,KAAK,MAAM,EAAE,OAAO,IAAI,KAAK,GAAE,CAAE;AAC1C;AAEAA,EAAU,UAAU,aAAa,WAAY;AAC3C,SAAO,KAAK,MAAM,EAAE,KAAK,KAAK,YAAW,EAAE,CAAE;AAC/C;AAEAA,EAAU,UAAU,SAAS,SAAU6D,GAAS;AAC9C,SAAO,CAAC,QAAS,CAACA;AACpB;AACA7D,EAAU,UAAU,WAAW,SAAU6D,GAAS;AAChD,SAAO,OAAOA;AAChB;AACA7D,EAAU,UAAU,UAAU,SAAU6D,GAAS;AAC/C,SAAO,OAAOA;AAChB;AACA7D,EAAU,UAAU,iBAAiB,SAAU6D,GAAS;AACtD,SAAO,QAAQA;AACjB;AACA7D,EAAU,UAAU,gBAAgB,SAAU6D,GAAS;AACrD,SAAO,QAAQA;AACjB;AACA7D,EAAU,UAAU,YAAY,SAAUjB,GAAG+E,GAAG;AAC9C,SAAQ/E,KAAK,QAAQ,QAAQ+E,KAAOA,KAAK,QAAQ,QAAQ/E;AAC3D;AAEAiB,EAAU,UAAU,OAAO,YAAaK,GAAM;AAC5C,SAAOsE,EAAS,KAAK,MAAM,GAAG,GAAGtE,CAAI;AACvC;AAEAL,EAAU,UAAU,QAAQ,YAAaK,GAAM;AAC7C,SAAOsE,EAAS,KAAK,MAAM,IAAI,GAAGtE,CAAI;AACxC;AAEA,SAASsE,EAASX,MAAS3D,GAAM;ADtzBjC,MAAAC,GAAAY,GAAAC;ACuzBE,QAAM8C,IAAO5D,EAAK,CAAC,GACb6D,IAAO7D,EAAK,CAAC,GACbuE,IAAW,KAAKJ,CAAY,EAAE;AACpC,MAAI,OAAO,SAASP,CAAI,KAAK,CAAC,OAAO,SAASC,CAAI;AAChD,WAAOU,EAAS,KAAK,EAAE,KAAKZ,IAAOC,EAAI,CAAE,EAAE,OAAM;AAEnD,MAAIE,IAAa;AACjB,MAAIlF,EAASgF,CAAI,KAAK7E,EAAiB6E,CAAI;AACzC,IAAAE,IAAa;AAAA,MACX,MAAMH,MAAQ1D,IAAA2D,EAAK,SAAL,OAAA3D,IAAa;AAAA,MAC3B,OAAO0D,MAAQ9C,IAAA+C,EAAK,UAAL,OAAA/C,IAAc;AAAA,MAC7B,KAAK8C,MAAQ7C,IAAA8C,EAAK,QAAL,OAAA9C,IAAY;AAAA,IAC/B;AAAA,WACa,OAAO,SAAS8C,CAAI,GAAG;AAChC,QAAI5D,EAAK,SAAS;AAChB,YAAM,WAAW,oBAAoB;AAEvC,IAAA8D,IAAa,EAAE,MAAMH,IAAOC,GAAM,OAAOD,IAAOE,GAAM,KAAKF,IAAO,KAAI;AAAA,EACxE,WAAW,MAAM,QAAQC,CAAI,GAAG;AAC9B,QAAIA,EAAK,SAAS;AAChB,YAAM,WAAW,mBAAmB;AAEtC,IAAAE,IAAa;AAAA,MACX,MAAMH,IAAOC,EAAK,CAAC;AAAA,MACnB,OAAOD,IAAOC,EAAK,CAAC;AAAA,MACpB,KAAKD,IAAOC,EAAK,CAAC;AAAA,IACxB;AAAA,EACE;AACE,UAAM,UAAS;AAEjB,SAAOW,EAAS,KAAKT,CAAU,EAAE,OAAM;AACzC;"}
|
package/dist/qrono.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Qrono=(function(h){"use strict";var dt=Object.defineProperty;var et=Object.getOwnPropertySymbols;var mt=Object.prototype.hasOwnProperty,pt=Object.prototype.propertyIsEnumerable;var nt=(h,g,l)=>g in h?dt(h,g,{enumerable:!0,configurable:!0,writable:!0,value:l}):h[g]=l,P=(h,g)=>{for(var l in g||(g={}))mt.call(g,l)&&nt(h,l,g[l]);if(et)for(var l of et(g))pt.call(g,l)&&nt(h,l,g[l]);return h};const g=new Date(1915,0,1,12,0,0,0),l=7,R=24,N=60,H=N*R,W=60,ot=W*N*R,j=1e3,it=W*j,I=ot*j,L=1,B=2,E=3,v=4,Q=5,z=6,q=7;function T(t,...e){return e.flat().some(t.hasOwnProperty,t)}function $(t){return Object.entries(t).filter(([,e])=>!rt(e)).map(([e])=>e)}function m(t){return t!==void 0}function rt(t){return t instanceof Function}function st(t){return typeof t=="string"||t instanceof String}function k(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function Z(t){return!Number.isNaN(t.getTime())}function U(t){return T(t,["year","month","day","hour","minute","second","millisecond"])}function G(t,e,n){const f=e.getTime(),s=new Date(f);if(t)return s;const i=new Date(f);i.setDate(e.getDate()+1);const u=new Date(f);u.setDate(e.getDate()-1);const p=i.getTimezoneOffset()-u.getTimezoneOffset();if(p===0)return s;const y=new Date(new Date(f).setUTCMinutes(e.getUTCMinutes()+p));return n?y:y.getHours()!==e.getHours()||y.getMinutes()!==e.getMinutes()?s:y}const C=o;o.date=r;const S={localtime:!1,interpretAsDst:!0};for(const t of $(S))o[t]=function(e){return m(e)?(S[t]=e,this):S[t]};o.context=function(t){if(m(t)){for(const e of $(S))if(T(t,e))return S[e]=t[e],this}return P({},S)},o.asUtc=function(){return S.localtime=!1,this},o.asLocaltime=function(){return S.localtime=!0,this},Object.assign(o,{monday:L,tuesday:B,wednesday:E,thursday:v,friday:Q,saturday:z,sunday:q});const a=Symbol("Qrono.internal");function o(...t){var s;if(!new.target)return new o(...t);const e={nativeDate:null,localtime:!1,interpretAsDst:!1,set:ft,parse:lt,valid:at,context:ut,getNative:ct};if(this[a]=e,e.context(S),t[0]instanceof o){const i=t.shift();for(const u of $(e))e[u]=i[u]()}k(t[0])&&!U(t[0])&&e.context(t.shift());const n=t[0],f=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(st(n))e.parse(n);else if(k(n)){if(!U(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");e.set(n)}else if(Number.isFinite(n)&&!Number.isFinite(f))e.nativeDate=new Date(n);else if(Number.isFinite(n)||Array.isArray(n)){const i=t.flat().filter(u=>Number.isSafeInteger(u));if(i.length!==t.flat().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 at(){return Z(this.nativeDate)}function ut(t){if(t){for(const e of $(S))T(t,e)&&(this[e]=t[e]);return this}}function ct(t){return this.nativeDate[`get${this.localtime?"":"UTC"}${t}`]()}function ft(t){var n,f,s,i,u,p,y,c,w,Y,A,J,X,_,x,tt;const e=P({},t);if(e.month=e.month&&e.month-1,this.localtime){const D=!T(t,"hour","minute","second","millisecond"),F=D?!0:this.interpretAsDst,b=(n=this.nativeDate)!=null?n:new Date(0,0),M=new Date(g.getTime()),O={year:(f=e.year)!=null?f:b.getFullYear(),month:(s=e.month)!=null?s:b.getMonth(),day:(i=e.day)!=null?i:b.getDate(),hour:(u=e.hour)!=null?u:D?0:b.getHours(),minute:(p=e.minute)!=null?p:D?0:b.getMinutes(),second:(y=e.second)!=null?y:D?0:b.getSeconds(),millisecond:(c=e.millisecond)!=null?c:D?0:b.getMilliseconds()};M.setFullYear(O.year,O.month,O.day),M.setHours(O.hour,O.minute,O.second,O.millisecond);const yt=O.year*1e8+O.month*1e6+O.day*1e4+O.hour*100+O.minute<M.getFullYear()*1e8+M.getMonth()*1e6+M.getDate()*1e4+M.getHours()*100+M.getMinutes();this.nativeDate=G(F,M,yt)}else{const D=(w=this.nativeDate)!=null?w:new Date(0),F=new Date(0);F.setUTCFullYear((Y=e.year)!=null?Y:D.getUTCFullYear(),(A=e.month)!=null?A:D.getUTCMonth(),(J=e.day)!=null?J:D.getUTCDate()),F.setUTCHours((X=e.hour)!=null?X:D.getUTCHours(),(_=e.minute)!=null?_:D.getUTCMinutes(),(x=e.second)!=null?x:D.getUTCSeconds(),(tt=e.millisecond)!=null?tt:D.getUTCMilliseconds()),this.nativeDate=F}return this}const ht=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 lt(t){var c;const e=t.trim().toUpperCase(),n=e.match(ht);if(!n)throw RangeError(`Failed to parse '${t}'. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);const f=n[4]!==void 0,[s,i,u,p]=[+n[1],+n[2]||1,+n[3]||1,n[8]],y=new Date(e);if(!Z(y))throw RangeError(`Failed to parse '${t}' by Date. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);return p?this.nativeDate=y:f?this.set({year:s,month:i,day:u,hour:+n[4]||0,minute:+n[5]||0,second:+n[6]||0,millisecond:+((c=n[7])==null?void 0:c.padStart(3,"0"))||0}):this.set({year:s,month:i,day:u}),this}o.prototype.toString=function(){if(this[a].localtime){const t=this[a].nativeDate,e=-t.getTimezoneOffset(),n=Math.abs(e);return`${String(t.getFullYear()).padStart(4,"0")}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}T${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}.${String(t.getMilliseconds()).padStart(3,"0")}${(e>=0?"+":"-")+String(Math.trunc(n/N)).padStart(2,"0")+":"+String(n%N).padStart(2,"0")}`}return this[a].nativeDate.toISOString()},o.prototype.valueOf=function(){return this[a].nativeDate.valueOf()},o.prototype.clone=function(...t){return new o(this,...t)},o.prototype.context=function(t){return m(t)?this.clone(t):{localtime:this[a].localtime,interpretAsDst:this[a].interpretAsDst}},o.prototype.nativeDate=function(){return new Date(this[a].nativeDate.getTime())},o.prototype.offset=function(){return this[a].localtime?-this[a].nativeDate.getTimezoneOffset():0},o.prototype.localtime=function(t){return m(t)?this.clone({localtime:t}):this[a].localtime},o.prototype.interpretAsDst=function(t){return m(t)?this.clone({interpretAsDst:t}):this[a].interpretAsDst},o.prototype.valid=function(){return this[a].valid()},o.prototype.numeric=function(){return this[a].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 r(this.clone(...t))},o.prototype.asUtc=function(){return this.clone({localtime:!1})},o.prototype.asLocaltime=function(){return this.clone({localtime:!0})},o.prototype.year=function(t){return m(t)?this.clone({year:t}):this[a].getNative("FullYear")},o.prototype.month=function(t){return m(t)?this.clone({month:t}):this[a].getNative("Month")+1},o.prototype.day=function(t){return m(t)?this.clone({day:t}):this[a].getNative("Date")},o.prototype.hour=function(t){return m(t)?this.clone({hour:t}):this[a].getNative("Hours")},o.prototype.minute=function(t){return m(t)?this.clone({minute:t}):this[a].getNative("Minutes")},o.prototype.second=function(t){return m(t)?this.clone({second:t}):this[a].getNative("Seconds")},o.prototype.millisecond=function(t){return m(t)?this.clone({millisecond:t}):this[a].getNative("Milliseconds")},o.prototype.dayOfWeek=function(){return 1+(this[a].getNative("Day")-1+l)%l},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()+v),n=e.startOfYear(),f=n.dayOfWeek()===v?n:n.day(1+(v-n.dayOfWeek()+l)%l);return 1+Math.ceil((e-f)/l)},o.prototype.yearOfWeek=function(){const t=this.toDate();return t.day(t.day()-t.dayOfWeek()+v).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[a].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(){return this[a].localtime?this.offset()===Math.max(...[3,6,9,12].map(t=>this.month(t).offset())):!1},o.prototype.isDstTransitionDay=function(){return this[a].localtime?this.minutesInDay()!==H:!1},o.prototype.minutesInDay=function(){if(!this[a].localtime)return H;const t=this.context({interpretAsDst:!0}).startOfDay(),e=t.plus({day:1}).startOfDay();return t.day()===e.day()?H:(e-t)/it},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()===v||e.dayOfWeek()===E?53:52},o.prototype.startOfYear=function(){return this.clone({month:1,day:1,hour:0,minute:0,second:0,millisecond:0})},o.prototype.startOfMonth=function(){return this.clone({day:1,hour:0,minute:0,second:0,millisecond:0})},o.prototype.startOfDay=function(){const t=this.clone({interpretAsDst:!0},{hour:0,minute:0,second:0,millisecond:0}).numeric();return this.clone(t)},o.prototype.startOfHour=function(){return this.clone({minute:0,second:0,millisecond:0})},o.prototype.startOfMinute=function(){return this.clone({second:0,millisecond:0})},o.prototype.startOfSecond=function(){return this.clone({millisecond:0})},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 K.call(this,1,...t)},o.prototype.minus=function(...t){return K.call(this,-1,...t)};function K(t,...e){var p,y;const n=e[0],f=e[1];if(Number.isFinite(n)&&!Number.isFinite(f))return this.clone(this.numeric()+n);let s=null;if(k(n)){if(!U(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 c=e.flat().filter(w=>Number.isSafeInteger(w));if(c.length!==e.flat().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(),u=this[a].localtime?"":"UTC";if(T(s,"year")||T(s,"month")){const c=this.year()+t*((p=s.year)!=null?p:0),w=this.month()+t*((y=s.month)!=null?y:0),Y=new Date(i.getTime());Y[`set${u}FullYear`](c,w,0);const A=Y[`get${u}Date`]();A<this.day()?i[`set${u}FullYear`](c,Y[`get${u}Month`](),A):i[`set${u}FullYear`](c,w-1)}T(s,"day")&&i[`set${u}Date`](i[`get${u}Date`]()+t*s.day);for(const[c,w]of[["hour","Hours"],["minute","Minutes"],["second","Seconds"],["millisecond","Milliseconds"]])!T(s,c)||s[c]==null||i[`setUTC${w}`](i[`getUTC${w}`]()+t*s[c]);return this.clone(G(this[a].interpretAsDst,i,!1))}const d=Symbol("QronoDate.internal");function r(...t){if(!new.target)return new r(...t);const e={datetime:null};this[d]=e;let n=null;t[0]instanceof r?n=t.shift().toDatetime():t[0]instanceof o&&(n=t.shift());const f=t[0],s=t[1];return Number.isFinite(f)&&!Number.isFinite(s)&&(t[0]=Math.floor(f)*I),n?n=n.clone(...t):n=C(...t),e.datetime=n.startOfDay(),this}r.prototype.toString=function(){return this[d].datetime.toString().substring(0,10)},r.prototype.valueOf=function(){return this[d].datetime/I},r.prototype.valid=function(){return this[d].datetime.valid()},r.prototype.clone=function(...t){return new r(this,...t)},r.prototype.toDatetime=function(){return C(this[d].datetime.toArray())},r.prototype.numeric=function(){return this[d].datetime.numeric()/I},r.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day()}},r.prototype.toArray=function(){return[this.year(),this.month(),this.day()]},r.prototype.startOfYear=function(){return new r(this[d].datetime.startOfYear())},r.prototype.startOfMonth=function(){return new r(this[d].datetime.startOfMonth())},r.prototype.startOfDay=function(){return this[d].datetime.clone()};for(const t of["year","month","day"])r.prototype[t]=function(e){return m(e)?new r(this[d].datetime[t](e)):this[d].datetime[t]()};for(const t of["dayOfWeek","dayOfYear","weekOfYear","yearOfWeek","isLeapYear","daysInMonth","daysInYear","weeksInYear"])r.prototype[t]=function(){return this[d].datetime[t]()};for(const t of["minutesInDay","hasDstInYear","isDstTransitionDay"])r.prototype[t]=function(){return C({interpretAsDst:!0},this[d].datetime.toArray().slice(0,3))[t]()};r.prototype.endOfYear=function(){return this.clone({month:12,day:31})},r.prototype.endOfMonth=function(){return this.clone({day:this.daysInMonth()})},r.prototype.isSame=function(t){return+this==+t},r.prototype.isBefore=function(t){return this<t},r.prototype.isAfter=function(t){return this>t},r.prototype.isSameOrBefore=function(t){return this<=t},r.prototype.isSameOrAfter=function(t){return this>=t},r.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t},r.prototype.plus=function(...t){return V.call(this,1,...t)},r.prototype.minus=function(...t){return V.call(this,-1,...t)};function V(t,...e){var u,p,y;const n=e[0],f=e[1],s=this[d].datetime;if(Number.isFinite(n)&&!Number.isFinite(f))return s.plus({day:t*n}).toDate();let i=null;if(k(n)&&U(n))i={year:t*((u=n.year)!=null?u:0),month:t*((p=n.month)!=null?p:0),day:t*((y=n.day)!=null?y:0)};else if(Number.isFinite(n)){if(e.length>3)throw RangeError("Too many arguments");i={year:t*n,month:t*f,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()}return h.friday=Q,h.monday=L,h.qrono=C,h.saturday=z,h.sunday=q,h.thursday=v,h.tuesday=B,h.wednesday=E,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"}),h})({});
|
|
1
|
+
var Qrono=(function(h){"use strict";var dt=Object.defineProperty;var tt=Object.getOwnPropertySymbols;var mt=Object.prototype.hasOwnProperty,pt=Object.prototype.propertyIsEnumerable;var et=(h,g,l)=>g in h?dt(h,g,{enumerable:!0,configurable:!0,writable:!0,value:l}):h[g]=l,P=(h,g)=>{for(var l in g||(g={}))mt.call(g,l)&&et(h,l,g[l]);if(tt)for(var l of tt(g))pt.call(g,l)&&et(h,l,g[l]);return h};const g=new Date(1915,0,1,12,0,0,0),l=7,R=24,N=60,H=N*R,W=60,nt=W*N*R,j=1e3,ot=W*j,I=nt*j,L=1,B=2,E=3,v=4,Q=5,z=6,q=7;function M(t,...e){return e.flat().some(t.hasOwnProperty,t)}function $(t){return Object.entries(t).filter(([,e])=>!it(e)).map(([e])=>e)}function m(t){return t!==void 0}function it(t){return t instanceof Function}function rt(t){return typeof t=="string"||t instanceof String}function k(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function Z(t){return!Number.isNaN(t.getTime())}function U(t){return M(t,["year","month","day","hour","minute","second","millisecond"])}function st(t,e,n){const f=e.getTime(),s=new Date(f);if(t)return s;const i=new Date(f);i.setDate(e.getDate()+1);const u=new Date(f);u.setDate(e.getDate()-1);const p=i.getTimezoneOffset()-u.getTimezoneOffset();if(p===0)return s;const y=new Date(new Date(f).setUTCMinutes(e.getUTCMinutes()+p));return n?y:y.getHours()!==e.getHours()||y.getMinutes()!==e.getMinutes()?s:y}const C=o;o.date=r;const S={localtime:!1,interpretAsDst:!0};for(const t of $(S))o[t]=function(e){return m(e)?(S[t]=e,this):S[t]};o.context=function(t){if(m(t)){for(const e of $(S))M(t,e)&&(S[e]=t[e]);return this}return P({},S)},o.asUtc=function(){return S.localtime=!1,this},o.asLocaltime=function(){return S.localtime=!0,this},Object.assign(o,{monday:L,tuesday:B,wednesday:E,thursday:v,friday:Q,saturday:z,sunday:q});const a=Symbol("Qrono.internal");function o(...t){var s;if(!new.target)return new o(...t);const e={nativeDate:null,localtime:!1,interpretAsDst:!1,set:ft,parse:lt,valid:at,context:ut,getNative:ct};if(this[a]=e,e.context(S),t[0]instanceof o){const i=t.shift();for(const u of $(e))e[u]=i[u]()}k(t[0])&&!U(t[0])&&e.context(t.shift());const n=t[0],f=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(rt(n))e.parse(n);else if(k(n)){if(!U(n))throw RangeError("Missing time field (year, minute, day, hour, minute, second or millisecond)");e.set(n)}else if(Number.isFinite(n)&&!Number.isFinite(f))e.nativeDate=new Date(n);else if(Number.isFinite(n)||Array.isArray(n)){const i=t.flat().filter(u=>Number.isSafeInteger(u));if(i.length!==t.flat().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 at(){return Z(this.nativeDate)}function ut(t){if(t){for(const e of $(S))M(t,e)&&(this[e]=t[e]);return this}}function ct(t){return this.nativeDate[`get${this.localtime?"":"UTC"}${t}`]()}function ft(t){var n,f,s,i,u,p,y,c,w,Y,A,V,_,J,X,x;const e=P({},t);if(e.month=e.month&&e.month-1,this.localtime){const D=!M(t,"hour","minute","second","millisecond"),F=D?!0:this.interpretAsDst,b=(n=this.nativeDate)!=null?n:new Date(0,0),T=new Date(g.getTime()),O={year:(f=e.year)!=null?f:b.getFullYear(),month:(s=e.month)!=null?s:b.getMonth(),day:(i=e.day)!=null?i:b.getDate(),hour:(u=e.hour)!=null?u:D?0:b.getHours(),minute:(p=e.minute)!=null?p:D?0:b.getMinutes(),second:(y=e.second)!=null?y:D?0:b.getSeconds(),millisecond:(c=e.millisecond)!=null?c:D?0:b.getMilliseconds()};T.setFullYear(O.year,O.month,O.day),T.setHours(O.hour,O.minute,O.second,O.millisecond);const yt=O.year*1e8+O.month*1e6+O.day*1e4+O.hour*100+O.minute<T.getFullYear()*1e8+T.getMonth()*1e6+T.getDate()*1e4+T.getHours()*100+T.getMinutes();this.nativeDate=st(F,T,yt)}else{const D=(w=this.nativeDate)!=null?w:new Date(0),F=new Date(0);F.setUTCFullYear((Y=e.year)!=null?Y:D.getUTCFullYear(),(A=e.month)!=null?A:D.getUTCMonth(),(V=e.day)!=null?V:D.getUTCDate()),F.setUTCHours((_=e.hour)!=null?_:D.getUTCHours(),(J=e.minute)!=null?J:D.getUTCMinutes(),(X=e.second)!=null?X:D.getUTCSeconds(),(x=e.millisecond)!=null?x:D.getUTCMilliseconds()),this.nativeDate=F}return this}const ht=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 lt(t){var c;const e=t.trim().toUpperCase(),n=e.match(ht);if(!n)throw RangeError(`Failed to parse '${t}'. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);const f=n[4]!==void 0,[s,i,u,p]=[+n[1],+n[2]||1,+n[3]||1,n[8]],y=new Date(e);if(!Z(y))throw RangeError(`Failed to parse '${t}' by Date. Should be yyyy[[-|/]MM[[-|/]DD]][(T| )HH:mm[:ss[(.|:)SSS]]][Z|(+|-)hh:mm]`);return p?this.nativeDate=y:f?this.set({year:s,month:i,day:u,hour:+n[4]||0,minute:+n[5]||0,second:+n[6]||0,millisecond:+((c=n[7])==null?void 0:c.padStart(3,"0"))||0}):this.set({year:s,month:i,day:u}),this}o.prototype.toString=function(){if(this[a].localtime){const t=this[a].nativeDate,e=-t.getTimezoneOffset(),n=Math.abs(e);return`${String(t.getFullYear()).padStart(4,"0")}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}T${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}.${String(t.getMilliseconds()).padStart(3,"0")}${(e>=0?"+":"-")+String(Math.trunc(n/N)).padStart(2,"0")+":"+String(n%N).padStart(2,"0")}`}return this[a].nativeDate.toISOString()},o.prototype.valueOf=function(){return this[a].nativeDate.valueOf()},o.prototype.clone=function(...t){return new o(this,...t)},o.prototype.context=function(t){return m(t)?this.clone(t):{localtime:this[a].localtime,interpretAsDst:this[a].interpretAsDst}},o.prototype.nativeDate=function(){return new Date(this[a].nativeDate.getTime())},o.prototype.offset=function(){return this[a].localtime?-this[a].nativeDate.getTimezoneOffset():0},o.prototype.localtime=function(t){return m(t)?this.clone({localtime:t}):this[a].localtime},o.prototype.interpretAsDst=function(t){return m(t)?this.clone({interpretAsDst:t}):this[a].interpretAsDst},o.prototype.valid=function(){return this[a].valid()},o.prototype.numeric=function(){return this[a].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 r(this.clone(...t))},o.prototype.asUtc=function(){return this.clone({localtime:!1})},o.prototype.asLocaltime=function(){return this.clone({localtime:!0})},o.prototype.year=function(t){return m(t)?this.clone({year:t}):this[a].getNative("FullYear")},o.prototype.month=function(t){return m(t)?this.clone({month:t}):this[a].getNative("Month")+1},o.prototype.day=function(t){return m(t)?this.clone({day:t}):this[a].getNative("Date")},o.prototype.hour=function(t){return m(t)?this.clone({hour:t}):this[a].getNative("Hours")},o.prototype.minute=function(t){return m(t)?this.clone({minute:t}):this[a].getNative("Minutes")},o.prototype.second=function(t){return m(t)?this.clone({second:t}):this[a].getNative("Seconds")},o.prototype.millisecond=function(t){return m(t)?this.clone({millisecond:t}):this[a].getNative("Milliseconds")},o.prototype.dayOfWeek=function(){return 1+(this[a].getNative("Day")-1+l)%l},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()+v),n=e.startOfYear(),f=n.dayOfWeek()===v?n:n.day(1+(v-n.dayOfWeek()+l)%l);return 1+Math.ceil((e-f)/l)},o.prototype.yearOfWeek=function(){const t=this.toDate();return t.day(t.day()-t.dayOfWeek()+v).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[a].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[a].localtime)return!1;const t=Array.from({length:12},(f,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[a].localtime?this.minutesInDay()!==H:!1},o.prototype.minutesInDay=function(){if(!this[a].localtime)return H;const t=this.context({interpretAsDst:!0}).startOfDay(),e=t.plus({day:1}).startOfDay();return t.day()===e.day()?H:(e-t)/ot},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()===v||e.dayOfWeek()===E?53:52},o.prototype.startOfYear=function(){return this.clone({month:1,day:1,hour:0,minute:0,second:0,millisecond:0})},o.prototype.startOfMonth=function(){return this.clone({day:1,hour:0,minute:0,second:0,millisecond:0})},o.prototype.startOfDay=function(){const t=this.clone({interpretAsDst:!0},{hour:0,minute:0,second:0,millisecond:0}).numeric();return this.clone(t)},o.prototype.startOfHour=function(){return this.clone({minute:0,second:0,millisecond:0})},o.prototype.startOfMinute=function(){return this.clone({second:0,millisecond:0})},o.prototype.startOfSecond=function(){return this.clone({millisecond:0})},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 G.call(this,1,...t)},o.prototype.minus=function(...t){return G.call(this,-1,...t)};function G(t,...e){var p,y;const n=e[0],f=e[1];if(Number.isFinite(n)&&!Number.isFinite(f))return this.clone(this.numeric()+n);let s=null;if(k(n)){if(!U(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 c=e.flat().filter(w=>Number.isSafeInteger(w));if(c.length!==e.flat().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(),u=this[a].localtime?"":"UTC";if(M(s,"year")||M(s,"month")){const c=this.year()+t*((p=s.year)!=null?p:0),w=this.month()+t*((y=s.month)!=null?y:0),Y=new Date(i.getTime());Y[`set${u}FullYear`](c,w,0);const A=Y[`get${u}Date`]();A<this.day()?i[`set${u}FullYear`](c,Y[`get${u}Month`](),A):i[`set${u}FullYear`](c,w-1)}M(s,"day")&&i[`set${u}Date`](i[`get${u}Date`]()+t*s.day);for(const[c,w]of[["hour","Hours"],["minute","Minutes"],["second","Seconds"],["millisecond","Milliseconds"]])!M(s,c)||s[c]==null||i[`setUTC${w}`](i[`getUTC${w}`]()+t*s[c]);return this.clone(i)}const d=Symbol("QronoDate.internal");function r(...t){if(!new.target)return new r(...t);const e={datetime:null};this[d]=e;let n=null;t[0]instanceof r?n=t.shift().toDatetime():t[0]instanceof o&&(n=t.shift());const f=t[0],s=t[1];return Number.isFinite(f)&&!Number.isFinite(s)&&(t[0]=Math.floor(f)*I),n?n=n.clone(...t):n=C(...t),e.datetime=n.startOfDay(),this}r.prototype.toString=function(){return this[d].datetime.toString().substring(0,10)},r.prototype.valueOf=function(){return this[d].datetime/I},r.prototype.valid=function(){return this[d].datetime.valid()},r.prototype.clone=function(...t){return new r(this,...t)},r.prototype.toDatetime=function(){return C(this[d].datetime.toArray())},r.prototype.numeric=function(){return this[d].datetime.numeric()/I},r.prototype.toObject=function(){return{year:this.year(),month:this.month(),day:this.day()}},r.prototype.toArray=function(){return[this.year(),this.month(),this.day()]},r.prototype.startOfYear=function(){return new r(this[d].datetime.startOfYear())},r.prototype.startOfMonth=function(){return new r(this[d].datetime.startOfMonth())},r.prototype.startOfDay=function(){return this[d].datetime.clone()};for(const t of["year","month","day"])r.prototype[t]=function(e){return m(e)?new r(this[d].datetime[t](e)):this[d].datetime[t]()};for(const t of["dayOfWeek","dayOfYear","weekOfYear","yearOfWeek","isLeapYear","daysInMonth","daysInYear","weeksInYear"])r.prototype[t]=function(){return this[d].datetime[t]()};for(const t of["minutesInDay","hasDstInYear","isDstTransitionDay"])r.prototype[t]=function(){return C({interpretAsDst:!0},this[d].datetime.toArray().slice(0,3))[t]()};r.prototype.endOfYear=function(){return this.clone({month:12,day:31})},r.prototype.endOfMonth=function(){return this.clone({day:this.daysInMonth()})},r.prototype.isSame=function(t){return+this==+t},r.prototype.isBefore=function(t){return this<t},r.prototype.isAfter=function(t){return this>t},r.prototype.isSameOrBefore=function(t){return this<=t},r.prototype.isSameOrAfter=function(t){return this>=t},r.prototype.isBetween=function(t,e){return t<=this&&this<=e||e<=this&&this<=t},r.prototype.plus=function(...t){return K.call(this,1,...t)},r.prototype.minus=function(...t){return K.call(this,-1,...t)};function K(t,...e){var u,p,y;const n=e[0],f=e[1],s=this[d].datetime;if(Number.isFinite(n)&&!Number.isFinite(f))return s.plus({day:t*n}).toDate();let i=null;if(k(n)&&U(n))i={year:t*((u=n.year)!=null?u:0),month:t*((p=n.month)!=null?p:0),day:t*((y=n.day)!=null?y:0)};else if(Number.isFinite(n)){if(e.length>3)throw RangeError("Too many arguments");i={year:t*n,month:t*f,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()}return h.friday=Q,h.monday=L,h.qrono=C,h.saturday=z,h.sunday=q,h.thursday=v,h.tuesday=B,h.wednesday=E,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"}),h})({});
|
|
2
2
|
//# sourceMappingURL=qrono.min.js.map
|
package/dist/qrono.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qrono.min.js","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 const monday = 1\nexport const tuesday = 2\nexport const wednesday = 3\nexport const thursday = 4\nexport const friday = 5\nexport const saturday = 6\nexport const sunday = 7\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\n/**\n * Resolve a local time that falls on or near a DST transition boundary.\n *\n * Handles two distinct cases that arise when constructing a local Date:\n *\n * GAP (spring-forward, isGap = true):\n * A range of local times is skipped entirely. JavaScript automatically advances\n * the time to the next valid moment (post-transition / DST side), adding the gap\n * size to the UTC timestamp. The caller detects a gap by comparing the constructed\n * Date's local fields against the originally requested values.\n * - interpretAsDst = true → accept JS's forward-shift as-is (DST side)\n * - interpretAsDst = false → shift UTC back by the gap size (pre-transition side)\n *\n * OVERLAP (fall-back, isGap = false):\n * A range of local times occurs twice. JavaScript always picks the DST side\n * (first occurrence). If the time is not actually in an overlap, the adjustment\n * will not preserve the original local fields and the original Date is returned.\n * - interpretAsDst = true → accept JS's DST-side interpretation as-is\n * - interpretAsDst = false → shift UTC by the offset difference (standard-time side)\n *\n * In both cases the UTC adjustment uses the same formula:\n * adjustedUTC = date.getTime() + adjust * millisecondsPerMinute\n * where adjust = nextDay.timezoneOffset - prevDay.timezoneOffset.\n * For a gap the adjust is negative (offsets decrease going forward),\n * so subtracting it moves UTC backward to the pre-transition side.\n * For an overlap the adjust is also negative in the same direction,\n * and the same subtraction moves to the standard-time side.\n *\n * @param {boolean} interpretAsDst\n * @param {Date} date - The Date constructed from the requested local fields.\n * @param {boolean} isGap - true if the requested time fell in a DST gap (spring-forward).\n * @returns {Date}\n */\nexport function resolveDstTime(interpretAsDst, date, isGap) {\n const numeric = date.getTime()\n const original = new Date(numeric)\n if (interpretAsDst) {\n return original\n }\n const nextDay = new Date(numeric)\n nextDay.setDate(date.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(date.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n if (adjust === 0) {\n return original\n }\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(date.getUTCMinutes() + adjust)\n )\n if (isGap) {\n return adjustedUTC\n }\n // For an overlap, verify the candidate preserves the original local fields.\n // If it does not, the time is not actually in an overlap — return as-is.\n if (\n adjustedUTC.getHours() !== date.getHours() ||\n adjustedUTC.getMinutes() !== date.getMinutes()\n ) {\n return original\n }\n return adjustedUTC\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n resolveDstTime,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\nexport {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers'\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n interpretAsDst: true,\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 return this\n }\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\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('Qrono.internal')\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 interpretAsDst: false,\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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 dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const interpretAsDst = dateOnly ? true : this.interpretAsDst\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 // 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 this.nativeDate = resolveDstTime(interpretAsDst, newDate, isGap)\n } else {\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 }\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// -----------------------------------------------------------------------------\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 `${String(t.getFullYear()).padStart(4, '0')}-${String(\n t.getMonth() + 1\n ).padStart(2, '0')}-${String(t.getDate()).padStart(2, '0')}T${String(\n t.getHours()\n ).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}:${String(\n t.getSeconds()\n ).padStart(2, '0')}.${String(t.getMilliseconds()).padStart(3, '0')}${\n (offset >= 0 ? '+' : '-') +\n String(Math.trunc(offsetAbs / minutesPerHour)).padStart(2, '0') +\n ':' +\n String(offsetAbs % minutesPerHour).padStart(2, '0')\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 interpretAsDst: this[internal].interpretAsDst,\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.interpretAsDst = function (arg) {\n return given(arg)\n ? this.clone({ interpretAsDst: arg })\n : this[internal].interpretAsDst\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\nQrono.prototype.year = function (value) {\n return given(value)\n ? this.clone({ year: value })\n : this[internal].getNative('FullYear')\n}\n\nQrono.prototype.month = function (value) {\n return given(value)\n ? this.clone({ month: value })\n : this[internal].getNative('Month') + 1\n}\n\nQrono.prototype.day = function (value) {\n return given(value)\n ? this.clone({ day: value })\n : this[internal].getNative('Date')\n}\n\nQrono.prototype.hour = function (value) {\n return given(value)\n ? this.clone({ hour: value })\n : this[internal].getNative('Hours')\n}\n\nQrono.prototype.minute = function (value) {\n return given(value)\n ? this.clone({ minute: value })\n : this[internal].getNative('Minutes')\n}\n\nQrono.prototype.second = function (value) {\n return given(value)\n ? this.clone({ second: value })\n : this[internal].getNative('Seconds')\n}\n\nQrono.prototype.millisecond = function (value) {\n return given(value)\n ? this.clone({ millisecond: value })\n : this[internal].getNative('Milliseconds')\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 return (\n this.offset() ===\n Math.max(...[3, 6, 9, 12].map(month => this.month(month).offset()))\n )\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({ interpretAsDst: true }).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\nQrono.prototype.startOfYear = function () {\n return this.clone({\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n })\n}\n\nQrono.prototype.startOfMonth = function () {\n return this.clone({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { interpretAsDst: true },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.startOfHour = function () {\n return this.clone({ minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfMinute = function () {\n return this.clone({ second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfSecond = function () {\n return this.clone({ millisecond: 0 })\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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(resolveDstTime(this[internal].interpretAsDst, date, false))\n}\n\n// -----------------------------------------------------------------------------\n// QronoDate Class\n// -----------------------------------------------------------------------------\nconst internalDate = Symbol('QronoDate.internal')\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 { interpretAsDst: true },\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","secondsPerDay","millisecondsPerSecond","millisecondsPerMinute","millisecondsPerDay","monday","tuesday","wednesday","thursday","friday","saturday","sunday","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","resolveDstTime","interpretAsDst","isGap","numeric","original","nextDay","prevDay","adjust","adjustedUTC","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","internal","args","self","set","parse","valid","getNative","source","first","second","_a","values","v","name","dateOnly","baseDate","newDate","requested","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","parsePattern","str","text","hasTime","year","month","day","offset","native","offsetAbs","theThursday","startOfYear","firstThursday","currentOffset","startOfDay","days","endOfYear","endOfLastYear","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","field","method","plusDate","datetime"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"qrono.min.js","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 const monday = 1\nexport const tuesday = 2\nexport const wednesday = 3\nexport const thursday = 4\nexport const friday = 5\nexport const saturday = 6\nexport const sunday = 7\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\n/**\n * Resolve a local time that falls on or near a DST transition boundary.\n *\n * Handles two distinct cases that arise when constructing a local Date:\n *\n * GAP (spring-forward, isGap = true):\n * A range of local times is skipped entirely. JavaScript automatically advances\n * the time to the next valid moment (post-transition / DST side), adding the gap\n * size to the UTC timestamp. The caller detects a gap by comparing the constructed\n * Date's local fields against the originally requested values.\n * - interpretAsDst = true → accept JS's forward-shift as-is (DST side)\n * - interpretAsDst = false → shift UTC back by the gap size (pre-transition side)\n *\n * OVERLAP (fall-back, isGap = false):\n * A range of local times occurs twice. JavaScript always picks the DST side\n * (first occurrence). If the time is not actually in an overlap, the adjustment\n * will not preserve the original local fields and the original Date is returned.\n * - interpretAsDst = true → accept JS's DST-side interpretation as-is\n * - interpretAsDst = false → shift UTC by the offset difference (standard-time side)\n *\n * In both cases the UTC adjustment uses the same formula:\n * adjustedUTC = date.getTime() + adjust * millisecondsPerMinute\n * where adjust = nextDay.timezoneOffset - prevDay.timezoneOffset.\n * For a gap the adjust is negative (offsets decrease going forward),\n * so subtracting it moves UTC backward to the pre-transition side.\n * For an overlap the adjust is also negative in the same direction,\n * and the same subtraction moves to the standard-time side.\n *\n * @param {boolean} interpretAsDst\n * @param {Date} date - The Date constructed from the requested local fields.\n * @param {boolean} isGap - true if the requested time fell in a DST gap (spring-forward).\n * @returns {Date}\n */\nexport function resolveDstTime(interpretAsDst, date, isGap) {\n const numeric = date.getTime()\n const original = new Date(numeric)\n if (interpretAsDst) {\n return original\n }\n const nextDay = new Date(numeric)\n nextDay.setDate(date.getDate() + 1)\n const prevDay = new Date(numeric)\n prevDay.setDate(date.getDate() - 1)\n const adjust = nextDay.getTimezoneOffset() - prevDay.getTimezoneOffset()\n if (adjust === 0) {\n return original\n }\n const adjustedUTC = new Date(\n new Date(numeric).setUTCMinutes(date.getUTCMinutes() + adjust)\n )\n if (isGap) {\n return adjustedUTC\n }\n // For an overlap, verify the candidate preserves the original local fields.\n // If it does not, the time is not actually in an overlap — return as-is.\n if (\n adjustedUTC.getHours() !== date.getHours() ||\n adjustedUTC.getMinutes() !== date.getMinutes()\n ) {\n return original\n }\n return adjustedUTC\n}\n","/* @ts-self-types=\"../types/qrono.d.ts\" */\nimport {\n has,\n given,\n fields,\n isObject,\n isString,\n isValidDate,\n resolveDstTime,\n hasDatetimeField,\n initialSafeDate,\n daysPerWeek,\n minutesPerDay,\n minutesPerHour,\n millisecondsPerMinute,\n millisecondsPerDay,\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers.js'\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\nconst qrono = Qrono\n\nexport { qrono }\n\nexport {\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n} from './helpers'\n\n// -----------------------------------------------------------------------------\n// Static\n// -----------------------------------------------------------------------------\nQrono.date = QronoDate\n\n// NOTE Must be flat object for shallow cloning.\nconst defaultContext = {\n localtime: false,\n interpretAsDst: true,\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\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('Qrono.internal')\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 interpretAsDst: false,\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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 dateOnly = !has(values, 'hour', 'minute', 'second', 'millisecond')\n const interpretAsDst = dateOnly ? true : this.interpretAsDst\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 // 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 this.nativeDate = resolveDstTime(interpretAsDst, newDate, isGap)\n } else {\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 }\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// -----------------------------------------------------------------------------\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 `${String(t.getFullYear()).padStart(4, '0')}-${String(\n t.getMonth() + 1\n ).padStart(2, '0')}-${String(t.getDate()).padStart(2, '0')}T${String(\n t.getHours()\n ).padStart(2, '0')}:${String(t.getMinutes()).padStart(2, '0')}:${String(\n t.getSeconds()\n ).padStart(2, '0')}.${String(t.getMilliseconds()).padStart(3, '0')}${\n (offset >= 0 ? '+' : '-') +\n String(Math.trunc(offsetAbs / minutesPerHour)).padStart(2, '0') +\n ':' +\n String(offsetAbs % minutesPerHour).padStart(2, '0')\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 interpretAsDst: this[internal].interpretAsDst,\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.interpretAsDst = function (arg) {\n return given(arg)\n ? this.clone({ interpretAsDst: arg })\n : this[internal].interpretAsDst\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\nQrono.prototype.year = function (value) {\n return given(value)\n ? this.clone({ year: value })\n : this[internal].getNative('FullYear')\n}\n\nQrono.prototype.month = function (value) {\n return given(value)\n ? this.clone({ month: value })\n : this[internal].getNative('Month') + 1\n}\n\nQrono.prototype.day = function (value) {\n return given(value)\n ? this.clone({ day: value })\n : this[internal].getNative('Date')\n}\n\nQrono.prototype.hour = function (value) {\n return given(value)\n ? this.clone({ hour: value })\n : this[internal].getNative('Hours')\n}\n\nQrono.prototype.minute = function (value) {\n return given(value)\n ? this.clone({ minute: value })\n : this[internal].getNative('Minutes')\n}\n\nQrono.prototype.second = function (value) {\n return given(value)\n ? this.clone({ second: value })\n : this[internal].getNative('Seconds')\n}\n\nQrono.prototype.millisecond = function (value) {\n return given(value)\n ? this.clone({ millisecond: value })\n : this[internal].getNative('Milliseconds')\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({ interpretAsDst: true }).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\nQrono.prototype.startOfYear = function () {\n return this.clone({\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n })\n}\n\nQrono.prototype.startOfMonth = function () {\n return this.clone({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfDay = function () {\n const timestamp = this.clone(\n { interpretAsDst: true },\n { hour: 0, minute: 0, second: 0, millisecond: 0 }\n ).numeric()\n return this.clone(timestamp)\n}\n\nQrono.prototype.startOfHour = function () {\n return this.clone({ minute: 0, second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfMinute = function () {\n return this.clone({ second: 0, millisecond: 0 })\n}\n\nQrono.prototype.startOfSecond = function () {\n return this.clone({ millisecond: 0 })\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 values = args.flat().filter(v => Number.isSafeInteger(v))\n if (values.length !== args.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('QronoDate.internal')\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 { interpretAsDst: true },\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","secondsPerDay","millisecondsPerSecond","millisecondsPerMinute","millisecondsPerDay","monday","tuesday","wednesday","thursday","friday","saturday","sunday","has","object","keys","fields","value","isFunction","key","given","arg","a","isString","isObject","isValidDate","date","hasDatetimeField","resolveDstTime","interpretAsDst","isGap","numeric","original","nextDay","prevDay","adjust","adjustedUTC","qrono","Qrono","QronoDate","defaultContext","context","__spreadValues","internal","args","self","set","parse","valid","getNative","source","first","second","_a","values","v","name","dateOnly","baseDate","newDate","requested","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","parsePattern","str","text","hasTime","year","month","day","offset","native","offsetAbs","theThursday","startOfYear","firstThursday","currentOffset","offsets","_","index","minOffset","maxOffset","startOfDay","days","endOfYear","endOfLastYear","timestamp","another","b","plus","sign","arg0","arg1","timeFields","utc","endOfMonth","lastDay","nativeKey","internalDate","field","method","plusDate","datetime"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/qrono.js
CHANGED
|
@@ -68,8 +68,8 @@ Qrono.context = function (context) {
|
|
|
68
68
|
continue
|
|
69
69
|
}
|
|
70
70
|
defaultContext[key] = context[key]
|
|
71
|
-
return this
|
|
72
71
|
}
|
|
72
|
+
return this
|
|
73
73
|
}
|
|
74
74
|
return { ...defaultContext }
|
|
75
75
|
}
|
|
@@ -498,10 +498,12 @@ Qrono.prototype.isInDst = function () {
|
|
|
498
498
|
if (!this[internal].localtime) {
|
|
499
499
|
return false
|
|
500
500
|
}
|
|
501
|
-
|
|
502
|
-
this.offset()
|
|
503
|
-
Math.max(...[3, 6, 9, 12].map(month => this.month(month).offset()))
|
|
501
|
+
const offsets = Array.from({ length: 12 }, (_, index) =>
|
|
502
|
+
this.month(index + 1).offset()
|
|
504
503
|
)
|
|
504
|
+
const minOffset = Math.min(...offsets)
|
|
505
|
+
const maxOffset = Math.max(...offsets)
|
|
506
|
+
return minOffset !== maxOffset && this.offset() === maxOffset
|
|
505
507
|
}
|
|
506
508
|
|
|
507
509
|
Qrono.prototype.isDstTransitionDay = function () {
|
|
@@ -673,7 +675,7 @@ function plus(sign, ...args) {
|
|
|
673
675
|
date[`getUTC${nativeKey}`]() + sign * timeFields[key]
|
|
674
676
|
)
|
|
675
677
|
}
|
|
676
|
-
return this.clone(
|
|
678
|
+
return this.clone(date)
|
|
677
679
|
}
|
|
678
680
|
|
|
679
681
|
// -----------------------------------------------------------------------------
|