UNPKG

decentralized-internet

Version:

An NPM library of programs to create decentralized web and distributed computing projects

1 lines 2.7 kB
"use strict";const Any=require("./any"),Ref=require("./ref"),Hoek=require("hoek"),Moment=require("moment"),internals={isoDate:/^(?:\d{4}(?!\d{2}\b))(?:(-?)(?:(?:0[1-9]|1[0-2])(?:\1(?:[12]\d|0[1-9]|3[01]))?|W(?:[0-4]\d|5[0-2])(?:-?[1-7])?|(?:00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[1-6])))(?![T]$|[T][\d]+Z$)(?:[T\s](?:(?:(?:[01]\d|2[0-3])(?:(:?)[0-5]\d)?|24\:?00)(?:[.,]\d+(?!:))?)(?:\2[0-5]\d(?:[.,]\d+)?)?(?:[Z]|(?:[+-])(?:[01]\d|2[0-3])(?::?[0-5]\d)?)?)?)?$/};internals.invalidDate=new Date(""),internals.isIsoDate=(()=>{const t=internals.isoDate.toString();return e=>e&&e.toString()===t})(),internals.Date=class extends Any{constructor(){super(),this._type="date"}_base(t,e,a){const r={value:a.convert&&internals.Date.toDate(t,this._flags.format,this._flags.timestamp,this._flags.multiplier)||t};if(r.value instanceof Date&&!isNaN(r.value.getTime()))r.errors=null;else if(a.convert){let t,s=null;internals.isIsoDate(this._flags.format)?t="isoDate":this._flags.timestamp?t="timestamp."+this._flags.timestamp:this._flags.format?(t="format",s={format:this._flags.format}):t="base",r.errors=this.createError("date."+t,s,e,a)}else r.errors=this.createError("date.strict",null,e,a);return r}static toDate(t,e,a,r){if(t instanceof Date)return t;if("string"==typeof t||"number"==typeof t&&!isNaN(t)&&isFinite(t)){let s;if("string"==typeof t&&/^[+-]?\d+(\.\d+)?$/.test(t)&&(t=parseFloat(t)),s=e?internals.isIsoDate(e)?e.test(t)?new Date(t):internals.invalidDate:(s=Moment(t,e,!0)).isValid()?s.toDate():internals.invalidDate:a&&r?new Date(t*r):new Date(t),!isNaN(s.getTime()))return s}return null}format(t){Hoek.assert("string"==typeof t||Array.isArray(t)&&t.every(t=>"string"==typeof t),"Invalid format.");const e=this.clone();return e._flags.format=t,e}iso(){const t=this.clone();return t._flags.format=internals.isoDate,t}timestamp(t){t=t||"javascript";const e=["javascript","unix"];Hoek.assert(-1!==e.indexOf(t),'"type" must be one of "'+e.join('", "')+'"');const a=this.clone();return a._flags.timestamp=t,a._flags.multiplier="unix"===t?1e3:1,a}_isIsoDate(t){return internals.isoDate.test(t)}},internals.compare=function(t,e){return function(a){const r="now"===a,s=Ref.isRef(a);return r||s||(a=internals.Date.toDate(a)),Hoek.assert(a,"Invalid date format"),this._test(t,a,function(n,i,o){let l;if(r)l=Date.now();else if(s){if(!(l=internals.Date.toDate(a(i.parent,o))))return this.createError("date.ref",{ref:a.key},i,o);l=l.getTime()}else l=a.getTime();return e(n.getTime(),l)?n:this.createError("date."+t,{limit:new Date(l)},i,o)})}},internals.Date.prototype.min=internals.compare("min",(t,e)=>t>=e),internals.Date.prototype.max=internals.compare("max",(t,e)=>t<=e),module.exports=new internals.Date;