Comparing version 4.0.66 to 4.0.67
@@ -1,1 +0,1 @@ | ||
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.Cron=factory())})(this,function(){"use strict";function convertTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){this.fromDate(date)}else if(date===void 0){this.fromDate(new Date)}else if(date&&typeof date==="string"){this.fromString(date)}else if(date instanceof CronDate){this.fromCronDate(date)}else{throw new TypeError("CronDate: Invalid type ("+typeof date+") passed as parameter to CronDate constructor")}}CronDate.prototype.fromDate=function(date,fromLocal){if(this.timezone){let originalUTCms=date.getTime(),convertedDate=convertTZ(date,this.timezone);if(!fromLocal){date=convertedDate}this.UTCmsOffset=convertedDate.getTime()-originalUTCms}else{this.UTCmsOffset=0}this.milliseconds=date.getMilliseconds();this.seconds=date.getSeconds();this.minutes=date.getMinutes();this.hours=date.getHours();this.days=date.getDate();this.months=date.getMonth();this.years=date.getFullYear()};CronDate.prototype.fromCronDate=function(date){this.UTCmsOffset=date.UTCmsOffset;this.timezone=date.timezone;let newDate=new Date(date.years,date.months,date.days,date.hours,date.minutes,date.seconds,date.milliseconds);this.milliseconds=newDate.getMilliseconds();this.seconds=newDate.getSeconds();this.minutes=newDate.getMinutes();this.hours=newDate.getHours();this.days=newDate.getDate();this.months=newDate.getMonth();this.years=newDate.getFullYear()};CronDate.prototype.fromString=function(str){let parsedDateUTCms=this.parseISOLocal(str);if(isNaN(parsedDateUTCms)){throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.")}this.fromDate(new Date(parsedDateUTCms),true)};CronDate.prototype.increment=function(pattern,rerun){if(!rerun){this.seconds+=1}let origTime=this.getTime();this.milliseconds=0;let self=this,findNext=function(target,pattern,offset,override){let startPos=override===void 0?self[target]+offset:0+offset;for(let i=startPos;i<pattern[target].length;i++){if(pattern[target][i]){self[target]=i-offset;return true}}return false},resetPrevious=function(){while(doing>=0){findNext(toDo[doing][0],pattern,toDo[doing][2],0);doing--}};let toDo=[["seconds","minutes",0],["minutes","hours",0],["hours","days",0],["days","months",-1],["months","years",0]],doing=0;while(doing<5){if(!findNext(toDo[doing][0],pattern,toDo[doing][2])){this[toDo[doing][1]]++;resetPrevious()}doing++}while(!pattern.daysOfWeek[this.getDate(true).getDay()]){this.days+=1;doing=2;resetPrevious()}if(origTime!=self.getTime()){self=new CronDate(self);if(this.years>=4e3){return null}else{return self.increment(pattern,true)}}else{return this}};CronDate.prototype.getDate=function(internal){let offset=internal?0:this.UTCmsOffset;return new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds-offset)};CronDate.prototype.getTime=function(internal){let offset=internal?0:this.UTCmsOffset;return new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds-offset).getTime()};CronDate.prototype.parseISOLocal=function(s){let b=s.split(/\D/);if(b.length<6){return NaN}let year=parseInt(b[0],10),month=parseInt(b[1],10),day=parseInt(b[2],10),hour=parseInt(b[3],10),minute=parseInt(b[4],10),second=parseInt(b[5],10);if(isNaN(year)||isNaN(month)||isNaN(day)||isNaN(hour)||isNaN(minute)||isNaN(second)){return NaN}else{return new Date(year,month-1,day,hour,minute,second)}};function CronPattern(pattern){this.pattern=pattern;this.seconds=Array(60).fill(0);this.minutes=Array(60).fill(0);this.hours=Array(24).fill(0);this.days=Array(31).fill(0);this.months=Array(12).fill(0);this.daysOfWeek=Array(8).fill(0);this.parse()}CronPattern.prototype.parse=function(){if(!(typeof this.pattern==="string"||this.pattern.constructor===String)){throw new TypeError("CronPattern: Pattern has to be of type string.")}let parts=this.pattern.trim().replace(/\s+/g," ").split(" ");if(parts.length<5||parts.length>6){throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exacly five or six space separated parts required.")}if(parts.length===5){parts.unshift("0")}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);this.throwAtIllegalCharacters(parts);this.partToArray("seconds",parts[0],0);this.partToArray("minutes",parts[1],0);this.partToArray("hours",parts[2],0);this.partToArray("days",parts[3],-1);this.partToArray("months",parts[4],-1);this.partToArray("daysOfWeek",parts[5],0);if(this.daysOfWeek[7]){this.daysOfWeek[0]=1}};CronPattern.prototype.partToArray=function(type,conf,valueIndexOffset){let i,split,arr=this[type];if(conf==="*"){for(i=0;i<arr.length;i++){arr[i]=1}return}split=conf.split(",");if(split.length>1){for(i=0;i<split.length;i++){this.partToArray(type,split[i],valueIndexOffset)}}else if(conf.indexOf("-")!==-1){this.handleRange(conf,type,valueIndexOffset)}else if(conf.indexOf("/")!==-1){this.handleStepping(conf,type,valueIndexOffset)}else{this.handleNumber(conf,type,valueIndexOffset)}};CronPattern.prototype.throwAtIllegalCharacters=function(parts){let reValidCron=/[^/*0-9,-]+/;for(let i=0;i<parts.length;i++){if(reValidCron.test(parts[i])){throw new TypeError("CronPattern: configuration entry "+i+" ("+parts[i]+") contains illegal characters.")}}};CronPattern.prototype.handleNumber=function(conf,type,valueIndexOffset){let i=parseInt(conf,10)+valueIndexOffset;if(i<0||i>=this[type].length){throw new TypeError("CronPattern: "+type+" value out of range: '"+conf+"'")}this[type][i]=1};CronPattern.prototype.handleRange=function(conf,type,valueIndexOffset){let split=conf.split("-");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal range: '"+conf+"'")}let lower=parseInt(split[0],10)+valueIndexOffset,upper=parseInt(split[1],10)+valueIndexOffset;if(isNaN(lower)){throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)")}else if(isNaN(upper)){throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)")}if(lower<0||upper>=this[type].length){throw new TypeError("CronPattern: Value out of range: '"+conf+"'")}if(lower>upper){throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'")}for(let i=lower;i<=upper;i++){this[type][i+valueIndexOffset]=1}};CronPattern.prototype.handleStepping=function(conf,type,valueIndexOffset){let split=conf.split("/");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+conf+"'")}if(split[0]!=="*"){throw new TypeError("CronPattern: Syntax error, left part of / needs to be * : '"+conf+"'")}let steps=parseInt(split[1],10);if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");for(let i=0;i<this[type].length;i+=steps){this[type][i+valueIndexOffset]=1}};CronPattern.prototype.replaceAlphaDays=function(conf){return conf.replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")};CronPattern.prototype.replaceAlphaMonths=function(conf){return conf.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")};const maxDelay=Math.pow(2,32-1)-1;function Cron(pattern,options,fn){let self=this;if(!(this instanceof Cron)){return new Cron(pattern,options,fn)}self.pattern=new CronPattern(pattern);if(typeof options==="function"){fn=options;options=void 0}this.options=this.processOptions(options);if(fn!==void 0){this.fn=fn;this.schedule()}return this}Cron.prototype.processOptions=function(options){if(options===void 0){options={}}options.paused=options.paused===void 0?false:options.paused;options.maxRuns=options.maxRuns===void 0?Infinity:options.maxRuns;options.kill=false;if(options.startAt){options.startAt=new CronDate(options.startAt,options.timezone)}if(options.stopAt){options.stopAt=new CronDate(options.stopAt,options.timezone)}return options};Cron.prototype.next=function(prev){prev=new CronDate(prev,this.options.timezone);let next=this._next(prev);return next?next.getDate():null};Cron.prototype.running=function(){let msLeft=this.msToNext(this.previousrun);let running=!this.options.paused&&this.fn!==void 0;return msLeft!==null&&running};Cron.prototype.previous=function(){return this.previousrun?this.previousrun.getDate():null};Cron.prototype._next=function(prev){if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=new CronDate(this.options.startAt,this.options.timezone)}let nextRun=new CronDate(prev,this.options.timezone).increment(this.pattern);if(nextRun===null||this.options.maxRuns<=0||this.options.kill||this.options.stopAt&&nextRun.getTime(true)>=this.options.stopAt.getTime(true)){return null}else{return nextRun}};Cron.prototype.msToNext=function(prev){prev=new CronDate(prev,this.options.timezone);let next=this._next(prev);if(next){return next.getTime(true)-prev.getTime(true)}else{return null}};Cron.prototype.stop=function(){this.options.kill=true;if(this.currentTimeout){clearTimeout(this.currentTimeout)}};Cron.prototype.pause=function(){return(this.options.paused=true)&&!this.options.kill};Cron.prototype.resume=function(){return!(this.options.paused=false)&&!this.options.kill};Cron.prototype.schedule=function(func){let self=this,waitMs=this.msToNext(self.previousrun),_maxDelay=self.maxDelay||maxDelay;if(waitMs>_maxDelay){waitMs=_maxDelay}if(func){self.fn=func}if(waitMs!==null){self.currentTimeout=setTimeout(function(){if(waitMs!==_maxDelay){if(!self.options.paused){self.options.maxRuns--;self.fn()}self.previousrun=new CronDate(void 0,self.options.timezone)}self.schedule()},waitMs)}return this};return Cron}); | ||
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.Cron=factory())})(this,function(){"use strict";function convertTZ(date,tzString){return new Date(date.toLocaleString("en-US",{timeZone:tzString}))}function CronDate(date,timezone){this.timezone=timezone;if(date&&date instanceof Date){this.fromDate(date)}else if(date===void 0){this.fromDate(new Date)}else if(date&&typeof date==="string"){this.fromString(date)}else if(date instanceof CronDate){this.fromCronDate(date)}else{throw new TypeError("CronDate: Invalid type ("+typeof date+") passed as parameter to CronDate constructor")}}CronDate.prototype.fromDate=function(date,fromLocal){if(this.timezone&&!fromLocal){date=convertTZ(date,this.timezone)}this.milliseconds=date.getMilliseconds();this.seconds=date.getSeconds();this.minutes=date.getMinutes();this.hours=date.getHours();this.days=date.getDate();this.months=date.getMonth();this.years=date.getFullYear()};CronDate.prototype.fromCronDate=function(date){this.timezone=date.timezone;let newDate=new Date(date.years,date.months,date.days,date.hours,date.minutes,date.seconds,date.milliseconds);this.milliseconds=newDate.getMilliseconds();this.seconds=newDate.getSeconds();this.minutes=newDate.getMinutes();this.hours=newDate.getHours();this.days=newDate.getDate();this.months=newDate.getMonth();this.years=newDate.getFullYear()};CronDate.prototype.fromString=function(str){let parsedDateUTCms=this.parseISOLocal(str);if(isNaN(parsedDateUTCms)){throw new TypeError("CronDate: Provided string value for CronDate could not be parsed as date.")}this.fromDate(new Date(parsedDateUTCms),true)};CronDate.prototype.increment=function(pattern,rerun){if(!rerun){this.seconds+=1}let origTime=this.getTime();this.milliseconds=0;let self=this,findNext=function(target,pattern,offset,override){let startPos=override===void 0?self[target]+offset:0+offset;for(let i=startPos;i<pattern[target].length;i++){if(pattern[target][i]){self[target]=i-offset;return true}}return false},resetPrevious=function(){while(doing>=0){findNext(toDo[doing][0],pattern,toDo[doing][2],0);doing--}};let toDo=[["seconds","minutes",0],["minutes","hours",0],["hours","days",0],["days","months",-1],["months","years",0]],doing=0;while(doing<5){if(!findNext(toDo[doing][0],pattern,toDo[doing][2])){this[toDo[doing][1]]++;resetPrevious()}doing++}while(!pattern.daysOfWeek[this.getDate(true).getDay()]){this.days+=1;doing=2;resetPrevious()}if(origTime!=self.getTime()){self=new CronDate(self);if(this.years>=4e3){return null}else{return self.increment(pattern,true)}}else{return this}};CronDate.prototype.getDate=function(internal){let targetDate=new Date(this.years,this.months,this.days,this.hours,this.minutes,this.seconds,this.milliseconds);if(internal||!this.timezone){return targetDate}else{let offset=convertTZ(targetDate,this.timezone).getTime()-targetDate.getTime();return new Date(targetDate.getTime()-offset)}};CronDate.prototype.getTime=function(internal){return this.getDate(internal).getTime()};CronDate.prototype.parseISOLocal=function(s){let b=s.split(/\D/);if(b.length<6){return NaN}let year=parseInt(b[0],10),month=parseInt(b[1],10),day=parseInt(b[2],10),hour=parseInt(b[3],10),minute=parseInt(b[4],10),second=parseInt(b[5],10);if(isNaN(year)||isNaN(month)||isNaN(day)||isNaN(hour)||isNaN(minute)||isNaN(second)){return NaN}else{return new Date(year,month-1,day,hour,minute,second)}};function CronPattern(pattern){this.pattern=pattern;this.seconds=Array(60).fill(0);this.minutes=Array(60).fill(0);this.hours=Array(24).fill(0);this.days=Array(31).fill(0);this.months=Array(12).fill(0);this.daysOfWeek=Array(8).fill(0);this.parse()}CronPattern.prototype.parse=function(){if(!(typeof this.pattern==="string"||this.pattern.constructor===String)){throw new TypeError("CronPattern: Pattern has to be of type string.")}let parts=this.pattern.trim().replace(/\s+/g," ").split(" ");if(parts.length<5||parts.length>6){throw new TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exacly five or six space separated parts required.")}if(parts.length===5){parts.unshift("0")}parts[4]=this.replaceAlphaMonths(parts[4]);parts[5]=this.replaceAlphaDays(parts[5]);this.throwAtIllegalCharacters(parts);this.partToArray("seconds",parts[0],0);this.partToArray("minutes",parts[1],0);this.partToArray("hours",parts[2],0);this.partToArray("days",parts[3],-1);this.partToArray("months",parts[4],-1);this.partToArray("daysOfWeek",parts[5],0);if(this.daysOfWeek[7]){this.daysOfWeek[0]=1}};CronPattern.prototype.partToArray=function(type,conf,valueIndexOffset){let i,split,arr=this[type];if(conf==="*"){for(i=0;i<arr.length;i++){arr[i]=1}return}split=conf.split(",");if(split.length>1){for(i=0;i<split.length;i++){this.partToArray(type,split[i],valueIndexOffset)}}else if(conf.indexOf("-")!==-1){this.handleRange(conf,type,valueIndexOffset)}else if(conf.indexOf("/")!==-1){this.handleStepping(conf,type,valueIndexOffset)}else{this.handleNumber(conf,type,valueIndexOffset)}};CronPattern.prototype.throwAtIllegalCharacters=function(parts){let reValidCron=/[^/*0-9,-]+/;for(let i=0;i<parts.length;i++){if(reValidCron.test(parts[i])){throw new TypeError("CronPattern: configuration entry "+i+" ("+parts[i]+") contains illegal characters.")}}};CronPattern.prototype.handleNumber=function(conf,type,valueIndexOffset){let i=parseInt(conf,10)+valueIndexOffset;if(i<0||i>=this[type].length){throw new TypeError("CronPattern: "+type+" value out of range: '"+conf+"'")}this[type][i]=1};CronPattern.prototype.handleRange=function(conf,type,valueIndexOffset){let split=conf.split("-");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal range: '"+conf+"'")}let lower=parseInt(split[0],10)+valueIndexOffset,upper=parseInt(split[1],10)+valueIndexOffset;if(isNaN(lower)){throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)")}else if(isNaN(upper)){throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)")}if(lower<0||upper>=this[type].length){throw new TypeError("CronPattern: Value out of range: '"+conf+"'")}if(lower>upper){throw new TypeError("CronPattern: From value is larger than to value: '"+conf+"'")}for(let i=lower;i<=upper;i++){this[type][i+valueIndexOffset]=1}};CronPattern.prototype.handleStepping=function(conf,type,valueIndexOffset){let split=conf.split("/");if(split.length!==2){throw new TypeError("CronPattern: Syntax error, illegal stepping: '"+conf+"'")}if(split[0]!=="*"){throw new TypeError("CronPattern: Syntax error, left part of / needs to be * : '"+conf+"'")}let steps=parseInt(split[1],10);if(isNaN(steps))throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(steps===0)throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");if(steps>this[type].length)throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[type].length+")");for(let i=0;i<this[type].length;i+=steps){this[type][i+valueIndexOffset]=1}};CronPattern.prototype.replaceAlphaDays=function(conf){return conf.replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")};CronPattern.prototype.replaceAlphaMonths=function(conf){return conf.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")};const maxDelay=Math.pow(2,32-1)-1;function Cron(pattern,options,func){let self=this;if(!(this instanceof Cron)){return new Cron(pattern,options,func)}self.pattern=new CronPattern(pattern);if(typeof options==="function"){func=options;options=void 0}this.options=this.processOptions(options);if(func!==void 0){this.fn=func;this.schedule()}return this}Cron.prototype.processOptions=function(options){if(options===void 0){options={}}options.paused=options.paused===void 0?false:options.paused;options.maxRuns=options.maxRuns===void 0?Infinity:options.maxRuns;options.kill=false;if(options.startAt){options.startAt=new CronDate(options.startAt,options.timezone)}if(options.stopAt){options.stopAt=new CronDate(options.stopAt,options.timezone)}return options};Cron.prototype.next=function(prev){prev=new CronDate(prev,this.options.timezone);let next=this._next(prev);return next?next.getDate():null};Cron.prototype.running=function(){let msLeft=this.msToNext(this.previousrun);let running=!this.options.paused&&this.fn!==void 0;return msLeft!==null&&running};Cron.prototype.previous=function(){return this.previousrun?this.previousrun.getDate():null};Cron.prototype._next=function(prev){if(this.options.startAt&&prev&&prev.getTime(true)<this.options.startAt.getTime(true)){prev=new CronDate(this.options.startAt,this.options.timezone)}let nextRun=new CronDate(prev,this.options.timezone).increment(this.pattern);if(nextRun===null||this.options.maxRuns<=0||this.options.kill||this.options.stopAt&&nextRun.getTime(true)>=this.options.stopAt.getTime(true)){return null}else{return nextRun}};Cron.prototype.msToNext=function(prev){prev=new CronDate(prev,this.options.timezone);let next=this._next(prev);if(next){return next.getTime(true)-prev.getTime(true)}else{return null}};Cron.prototype.stop=function(){this.options.kill=true;if(this.currentTimeout){clearTimeout(this.currentTimeout)}};Cron.prototype.pause=function(){return(this.options.paused=true)&&!this.options.kill};Cron.prototype.resume=function(){return!(this.options.paused=false)&&!this.options.kill};Cron.prototype.schedule=function(func){let self=this,waitMs=this.msToNext(self.previousrun),_maxDelay=self.maxDelay||maxDelay;if(waitMs>_maxDelay){waitMs=_maxDelay}if(func){self.fn=func}if(waitMs!==null){self.currentTimeout=setTimeout(function(){if(waitMs!==_maxDelay){if(!self.options.paused){self.options.maxRuns--;self.fn()}self.previousrun=new CronDate(void 0,self.options.timezone)}self.schedule()},waitMs)}return this};return Cron}); |
{ | ||
"name": "croner", | ||
"version": "4.0.66", | ||
"version": "4.0.67", | ||
"description": "Trigger functions in javascript using Cron syntax. No deps. All features.", | ||
@@ -5,0 +5,0 @@ "author": "Hexagon <github.com/hexagon>", |
@@ -16,3 +16,3 @@ <p align="center"> | ||
* Works in browsers as standalone, UMD or ES-module. | ||
* **Experimental feature:** Schedule in other timezones than default | ||
* **Experimental feature:** Schedule in specific target timezones | ||
* Includes [TypeScript](https://www.typescriptlang.org/) typings | ||
@@ -78,5 +78,10 @@ | ||
``` | ||
## Documentation | ||
## Signature | ||
Full documentation available at [hexagon.github.io/croner](https://hexagon.github.io/croner/Cron.html). | ||
The short version: | ||
### Signature | ||
Cron takes three arguments | ||
@@ -107,3 +112,3 @@ | ||
### Options | ||
#### Options | ||
@@ -118,3 +123,3 @@ | Key | Default value | Data type | Remarks | | ||
### Pattern | ||
#### Pattern | ||
@@ -144,5 +149,5 @@ ```javascript | ||
## Examples | ||
### Examples | ||
### Expressions | ||
#### Expressions | ||
```javascript | ||
@@ -156,3 +161,3 @@ // Run a function according to pattern | ||
### Find dates | ||
#### Find dates | ||
```javascript | ||
@@ -169,3 +174,3 @@ // Find next month | ||
### With options | ||
#### With options | ||
```javascript | ||
@@ -187,3 +192,3 @@ | ||
### Job controls | ||
#### Job controls | ||
```javascript | ||
@@ -190,0 +195,0 @@ let job = Cron('* * * * * *', () => { |
@@ -38,4 +38,4 @@ /* ------------------------------------------------------------------------------------ | ||
* @property {number} [maxRuns] - Maximum nuber of executions | ||
* @property {string | Date} [startAt] - When to start running | ||
* @property {string | Date} [stopAt] - When to stop running | ||
* @property {string | date} [startAt] - When to start running | ||
* @property {string | date} [stopAt] - When to stop running | ||
* @property {string} [timezone] - Time zone in Europe/Stockholm format | ||
@@ -62,6 +62,6 @@ */ | ||
* @param {CronOptions} [options] - Options | ||
* @param {Function} [fn] - Function to be run each iteration of pattern | ||
* @param {Function} [func] - Function to be run each iteration of pattern | ||
* @returns {Cron} | ||
*/ | ||
function Cron (pattern, options, fn) { | ||
function Cron (pattern, options, func) { | ||
let self = this; | ||
@@ -71,3 +71,3 @@ | ||
if( !(this instanceof Cron) ) { | ||
return new Cron(pattern, options, fn); | ||
return new Cron(pattern, options, func); | ||
} | ||
@@ -80,3 +80,3 @@ | ||
if( typeof options === "function" ) { | ||
fn = options; | ||
func = options; | ||
options = void 0; | ||
@@ -91,4 +91,4 @@ } | ||
*/ | ||
if( fn !== void 0 ) { | ||
this.fn = fn; | ||
if( func !== void 0 ) { | ||
this.fn = func; | ||
this.schedule(); | ||
@@ -134,4 +134,4 @@ } | ||
* | ||
* @param {Date} [prev] - Input pattern | ||
* @returns {Date | null} - Next run time | ||
* @param {date} [prev] - Input pattern | ||
* @returns {date | null} - Next run time | ||
*/ | ||
@@ -148,3 +148,3 @@ Cron.prototype.next = function (prev) { | ||
* | ||
* @returns {Boolean} - Running or not | ||
* @returns {boolean} - Running or not | ||
*/ | ||
@@ -161,3 +161,3 @@ Cron.prototype.running = function () { | ||
* | ||
* @returns {Date | null} - Previous run time | ||
* @returns {date | null} - Previous run time | ||
*/ | ||
@@ -201,3 +201,3 @@ Cron.prototype.previous = function () { | ||
* | ||
* @param {CronDate | null} [prev=new CronDate()] - Starting date, defaults to now | ||
* @param {date} [prev] - Starting date, defaults to now | ||
* @returns {number | null} | ||
@@ -204,0 +204,0 @@ */ |
@@ -6,4 +6,4 @@ import convertTZ from "./timezone.js"; | ||
* | ||
* @param {date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected | ||
* @param {string} [timezone] - String representation of timezone in Europe/Stockholm format. | ||
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected | ||
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format. | ||
*/ | ||
@@ -32,17 +32,8 @@ function CronDate (date, timezone) { | ||
* @param {date} date - Input date | ||
* @param {boolean} [fromLocal] - Input date already in target timezone | ||
* @param {boolean} fromLocal - Target already in local time | ||
*/ | ||
CronDate.prototype.fromDate = function (date, fromLocal) { | ||
// This is the only way in for a pure date object, so this is where timezone should be applied | ||
if (this.timezone) { | ||
let originalUTCms = date.getTime(), | ||
convertedDate = convertTZ(date, this.timezone); | ||
if (!fromLocal) { | ||
date = convertedDate; | ||
} | ||
this.UTCmsOffset = convertedDate.getTime() - originalUTCms; | ||
} else { | ||
this.UTCmsOffset = 0; | ||
if (this.timezone && !fromLocal) { | ||
date = convertTZ(date, this.timezone); | ||
} | ||
@@ -57,3 +48,2 @@ | ||
this.years = date.getFullYear(); | ||
}; | ||
@@ -69,3 +59,2 @@ | ||
this.UTCmsOffset = date.UTCmsOffset; | ||
this.timezone = date.timezone; | ||
@@ -234,4 +223,9 @@ | ||
CronDate.prototype.getDate = function (internal) { | ||
let offset = internal ? 0 : this.UTCmsOffset; | ||
return new Date(this.years, this.months, this.days, this.hours, this.minutes, this.seconds, this.milliseconds-offset); | ||
let targetDate = new Date(this.years, this.months, this.days, this.hours, this.minutes, this.seconds, this.milliseconds); | ||
if (internal || !this.timezone) { | ||
return targetDate; | ||
} else { | ||
let offset = convertTZ(targetDate, this.timezone).getTime()-targetDate.getTime(); | ||
return new Date(targetDate.getTime()-offset); | ||
} | ||
}; | ||
@@ -247,4 +241,3 @@ | ||
CronDate.prototype.getTime = function (internal) { | ||
let offset = internal ? 0 : this.UTCmsOffset; | ||
return new Date(this.years, this.months, this.days, this.hours, this.minutes, this.seconds, this.milliseconds-offset).getTime(); | ||
return this.getDate(internal).getTime(); | ||
}; | ||
@@ -251,0 +244,0 @@ |
@@ -21,7 +21,7 @@ export default Cron; | ||
*/ | ||
startAt?: string | Date; | ||
startAt?: string | any; | ||
/** | ||
* - When to stop running | ||
*/ | ||
stopAt?: string | Date; | ||
stopAt?: string | any; | ||
/** | ||
@@ -38,6 +38,6 @@ * - Time zone in Europe/Stockholm format | ||
* @param {CronOptions} [options] - Options | ||
* @param {Function} [fn] - Function to be run each iteration of pattern | ||
* @param {Function} [func] - Function to be run each iteration of pattern | ||
* @returns {Cron} | ||
*/ | ||
export function Cron(pattern: string, options?: CronOptions, fn?: Function): Cron; | ||
export function Cron(pattern: string, options?: CronOptions, func?: Function): Cron; | ||
export class Cron { | ||
@@ -50,6 +50,6 @@ /** | ||
* @param {CronOptions} [options] - Options | ||
* @param {Function} [fn] - Function to be run each iteration of pattern | ||
* @param {Function} [func] - Function to be run each iteration of pattern | ||
* @returns {Cron} | ||
*/ | ||
constructor(pattern: string, options?: CronOptions, fn?: Function); | ||
constructor(pattern: string, options?: CronOptions, func?: Function); | ||
/** @type {CronPattern} */ | ||
@@ -64,6 +64,6 @@ pattern: CronPattern; | ||
* | ||
* @param {Date} [prev] - Input pattern | ||
* @returns {Date | null} - Next run time | ||
* @param {date} [prev] - Input pattern | ||
* @returns {date | null} - Next run time | ||
*/ | ||
next(prev?: Date): Date | null; | ||
next(prev?: any): any | null; | ||
/** | ||
@@ -73,3 +73,3 @@ * Is running? | ||
* | ||
* @returns {Boolean} - Running or not | ||
* @returns {boolean} - Running or not | ||
*/ | ||
@@ -81,5 +81,5 @@ public running(): boolean; | ||
* | ||
* @returns {Date | null} - Previous run time | ||
* @returns {date | null} - Previous run time | ||
*/ | ||
public previous(): Date | null; | ||
public previous(): any | null; | ||
private _next; | ||
@@ -90,6 +90,6 @@ /** | ||
* | ||
* @param {CronDate | null} [prev=new CronDate()] - Starting date, defaults to now | ||
* @param {date} [prev] - Starting date, defaults to now | ||
* @returns {number | null} | ||
*/ | ||
public msToNext(prev?: CronDate | null): number | null; | ||
public msToNext(prev?: any): number | null; | ||
/** | ||
@@ -124,2 +124,1 @@ * Stop execution | ||
import { CronPattern } from "./pattern.js"; | ||
import { CronDate } from "./date.js"; |
@@ -5,4 +5,4 @@ /** | ||
* | ||
* @param {date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected | ||
* @param {string} [timezone] - String representation of timezone in Europe/Stockholm format. | ||
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected | ||
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format. | ||
*/ | ||
@@ -15,4 +15,4 @@ export function CronDate(date?: any, timezone?: string): void; | ||
* | ||
* @param {date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected | ||
* @param {string} [timezone] - String representation of timezone in Europe/Stockholm format. | ||
* @param {CronDate|date|string} [date] - Input date, if using string representation ISO 8001 (2015-11-24T19:40:00) local timezone is expected | ||
* @param {string} [timezone] - String representation of target timezone in Europe/Stockholm format. | ||
*/ | ||
@@ -22,3 +22,2 @@ constructor(date?: any, timezone?: string); | ||
private fromDate; | ||
UTCmsOffset: any; | ||
milliseconds: any; | ||
@@ -25,0 +24,0 @@ seconds: any; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
202
109333
1688