bella-scheduler
Advanced tools
Comparing version 1.1.2 to 1.1.3
@@ -1,19 +0,2 @@ | ||
/** | ||
* bella-scheduler | ||
* v1.1.2 | ||
* built: Tue, 04 Oct 2016 01:52:10 GMT | ||
* git: https://github.com/ndaidong/bella-scheduler | ||
* author: @ndaidong | ||
* License: MIT | ||
**/ | ||
;var $jscomp={scope:{},checkStringArgs:function(b,g,e){if(null==b)throw new TypeError("The 'this' value for String.prototype."+e+" must not be null or undefined");if(g instanceof RegExp)throw new TypeError("First argument to String.prototype."+e+" must not be a regular expression");return b+""}}; | ||
$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(b,g,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");b!=Array.prototype&&b!=Object.prototype&&(b[g]=e.value)};$jscomp.getGlobal=function(b){return"undefined"!=typeof window&&window===b?b:"undefined"!=typeof global&&null!=global?global:b};$jscomp.global=$jscomp.getGlobal(this); | ||
$jscomp.polyfill=function(b,g,e,k){if(g){e=$jscomp.global;b=b.split(".");for(k=0;k<b.length-1;k++){var q=b[k];q in e||(e[q]={});e=e[q]}b=b[b.length-1];k=e[b];g=g(k);g!=k&&null!=g&&$jscomp.defineProperty(e,b,{configurable:!0,writable:!0,value:g})}}; | ||
$jscomp.polyfill("String.prototype.repeat",function(b){return b?b:function(b){var e=$jscomp.checkStringArgs(this,null,"repeat");if(0>b||1342177279<b)throw new RangeError("Invalid count value");b|=0;for(var g="";b;)if(b&1&&(g+=e),b>>>=1)e+=e;return g}},"es6-impl","es3"); | ||
(function(b,g){if("undefined"!==typeof module&&module.exports)module.exports=g();else{var e=window||{};e.define&&e.define.amd?e.define([],g):e.exports?e.exports=g():e[b]=g()}})("scheduler",function(){var b=function(a,f){if(!a||!f)return!1;var c=!0;void 0===a[f]&&(c=f in a);return c},g=function(){this.size=0;this.data={}};g.prototype.set=function(a,f){var c=this.data;b(c,a)||this.size++;c[a]=f;return this};g.prototype.get=function(a){return this.data[a]||null};g.prototype.all=function(){var a=this.data, | ||
f=[],c;for(c in a)void 0!==a[c]&&f.push(a[c]);return f};g.prototype.delete=function(a){var f=this.data;if(!b(f,a))return!1;f[a]=null;delete f[a];this.size--;return!0};var e=new g,k,q=function(a,f){for(var c=-1,b=0;b<a.length;b++)if(a[b]===f){c=b;break}return c},t=function(a,f){var c=a.match(/^(\d+)\s?(d|h|m|s)+$/i);if(c){a=0;f=(new Date).getTime()-f;if(c){var b=parseInt(c[1],10),c=c[2];"s"===c?a=1E3:"m"===c?a=6E4:"h"===c?a=36E5:"d"===c&&(a=864E5);a=a*b-f}else a=-1;return a}if(c=a.match(/^(sun|mon|tue|wed|thu|fri|sat)+\w*\s+(\d+)(:\d+)?(:\d+)?$/i)){var d= | ||
c,c="sun mon tue wed thu fri sat".split(" ");a=new Date;f=a.getDay();f=q(c[f],c);var b=d[1].toLowerCase(),e=q(b,c),g=b=c=0;d[2]&&(c=parseInt(d[2],10));d[3]&&(b=parseInt(d[3].replace(/\D/gi,""),10));d[4]&&(g=parseInt(d[4].replace(/\D/gi,""),10));a.setHours(c);a.setMinutes(b);a.setSeconds(g);var k=a.getTime(),d=(new Date).getTime(),p=a;if(e<f||d>k)a=new Date(a),a.setDate(a.getDate()+f+7-a.getDay()%7),p=a;p.setHours(c);p.setMinutes(b);p.setSeconds(g);return p.getTime()-d}if(c=a.match(/^(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\d+)$/i)){d= | ||
c;a="*"===d[1]?"*":parseInt(d[1],10);f="*"===d[2]?"*":parseInt(d[2],10);var c="*"===d[3]?"*":parseInt(d[3],10),b="*"===d[4]?"*":parseInt(d[4],10),g="*"===d[5]?"*":parseInt(d[5],10),n="*"===d[6]?"*":parseInt(d[6],10),l=new Date,h=l.getFullYear();if("*"!==a&&a<h)a=-1;else{var d=a,e=f,k=c,p=b,m=g;"*"===a&&(d=h);h=l.getMonth()+1;"*"===f&&(e=h);h=l.getDate();"*"===c&&(k=h);h=l.getHours();"*"===b&&(p=h);l=l.getMinutes();"*"===g&&(m=l);n=new Date(d,e-1,k,p,m,n);h=n.getTime();l=(new Date).getTime();h-=l; | ||
0>h&&"*"===g&&(n.setMinutes(m+1),h=n.getTime(),h-=l);0>h&&"*"===b&&(n.setHours(p+1),h=n.getTime(),h-=l);0>h&&"*"===c&&(n.setDate(k+1),h=n.getTime(),h-=l);0>h&&"*"===f&&(n.setMonth(e),h=n.getTime(),h-=l);0>h&&"*"===a&&(n.setFullYear(d+1),h=n.getTime(),h-=l);a=h}return a}return-1},u=function(a){a.fn();var b=a.id;if(!a.repeat)return e.delete(b);var c=(new Date).getTime();a.lastTick=c;e.set(b,a);return!0},r=function(){if(0<e.size){var a=2147483647,b=[];e.all().forEach(function(c){var f=c.id,d=t(c.time, | ||
c.lastTick);0>d?e.delete(f):0===d?(c.delay=0,b.push(c)):(c.delay=d,e.set(f,c),d<=a&&(a=d,f=[],f=b.concat(c),b=f.filter(function(b){return b.delay<=a})))});k&&clearTimeout(k);b.length&&(k=setTimeout(function(){b.map(u);setTimeout(r,1)},a))}},m=function(a,b,c){c=c?0:1;var f=(new Date).getTime(),d;for(d=[];10>d.length;)d.push(Math.random().toString(36).slice(2));d=d.join("");for(var g=d.length,k=Math.max(32,0),m="";m.length<k;)m+=d.charAt(Math.floor(Math.random()*g))||"";d=m;e.set(d,{id:d,fn:b,time:a, | ||
repeat:c,createdAt:f,lastTick:f,delay:0});r()};return{yearly:function(a,b){m("* "+a,b)},monthly:function(a,b){m("* * "+a,b)},daily:function(a,b){m("* * * "+a,b)},hourly:function(a,b){return m("* * * * "+a,b)},every:function(a,b){return m(a,b)},once:function(a,b){return m(a,b,1)}}}); | ||
// bella-scheduler@1.1.3, by @ndaidong - built on Fri, 18 Nov 2016 07:58:10 GMT - published under MIT license | ||
;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}};(function(name,factory){if(typeof module!=="undefined"&&module.exports){module.exports=factory()}else{var root=window||{};if(root.define&&root.define.amd){root.define([],factory)}else if(root.exports){root.exports=factory()}else{root[name]=factory()}}}("scheduler",function(){var MAX_TIMEOUT=2147483647;var isUndefined=function isUndefined(v){return v===undefined};var hasProperty=function hasProperty(ob,k){if(!ob||!k){return false}var r=true;if(isUndefined(ob[k])){r=k in ob}return r};var BellaMap=function(){function BellaMap(){_classCallCheck(this,BellaMap);this.size=0;this.data={}}_createClass(BellaMap,[{key:"set",value:function set(k,v){var d=this.data;if(!hasProperty(d,k)){this.size++}d[k]=v;return this}},{key:"get",value:function get(k){var d=this.data;return d[k]||null}},{key:"all",value:function all(){var d=this.data;var a=[];for(var k in d){if(!isUndefined(d[k])){a.push(d[k])}}return a}},{key:"delete",value:function _delete(k){var d=this.data;if(!hasProperty(d,k)){return false}d[k]=null;delete d[k];this.size--;return true}}]);return BellaMap}();var TaskList=new BellaMap;var checkTimer;var now=function now(){return new Date};var time=function time(){return now().getTime()};var getIndex=function getIndex(arr,item){var r=-1;for(var i=0;i<arr.length;i++){if(arr[i]===item){r=i;break}}return r};var createId=function createId(leng,prefix){var rn=function rn(){return Math.random().toString(36).slice(2)};var a=[];while(a.length<10){a.push(rn())}var r=a.join("");var t=r.length;var px=prefix||"";var ln=Math.max(leng||32,px.length);var s=px;while(s.length<ln){var k=Math.floor(Math.random()*t);s+=r.charAt(k)||""}return s};var getNextDay=function getNextDay(t,tday){var d=new Date(t);d.setDate(d.getDate()+tday+7-d.getDay()%7);return d};var getDT1=function getDT1(mat,lastTick){var delta=0;var passed=time()-lastTick;if(!mat){return-1}var v=parseInt(mat[1],10);var s=mat[2];if(s==="s"){delta=1e3}else if(s==="m"){delta=6e4}else if(s==="h"){delta=6e4*60}else if(s==="d"){delta=6e4*60*24}delta*=v;return delta-passed};var getDT2=function getDT2(mat){var wds="sun|mon|tue|wed|thu|fri|sat".split("|");var today=new Date;var wday=today.getDay();var awd=wds[wday];var awi=getIndex(awd,wds);var dd=mat[1].toLowerCase();var ddi=getIndex(dd,wds);var hh=0;var ii=0;var ss=0;if(mat[2]){hh=parseInt(mat[2],10)}if(mat[3]){ii=parseInt(mat[3].replace(/\D/gi,""),10)}if(mat[4]){ss=parseInt(mat[4].replace(/\D/gi,""),10)}today.setHours(hh);today.setMinutes(ii);today.setSeconds(ss);var ttime=today.getTime();var ctime=time();var nextDay=today;if(ddi<awi||ctime>ttime){nextDay=getNextDay(today,awi)}nextDay.setHours(hh);nextDay.setMinutes(ii);nextDay.setSeconds(ss);return nextDay.getTime()-ctime};var getDT3=function getDT3(mat){var yy=mat[1]==="*"?"*":parseInt(mat[1],10);var mm=mat[2]==="*"?"*":parseInt(mat[2],10);var dd=mat[3]==="*"?"*":parseInt(mat[3],10);var hh=mat[4]==="*"?"*":parseInt(mat[4],10);var ii=mat[5]==="*"?"*":parseInt(mat[5],10);var ss=mat[6]==="*"?"*":parseInt(mat[6],10);var today=new Date;var ayy=today.getFullYear();if(yy!=="*"&&yy<ayy){return-1}var tyy=yy;var tmm=mm;var tdd=dd;var thh=hh;var tii=ii;var tss=ss;if(yy==="*"){tyy=ayy}var amm=today.getMonth()+1;if(mm==="*"){tmm=amm}var add=today.getDate();if(dd==="*"){tdd=add}var ahh=today.getHours();if(hh==="*"){thh=ahh}var aii=today.getMinutes();if(ii==="*"){tii=aii}var gd=new Date(tyy,tmm-1,tdd,thh,tii,tss);var ttime=gd.getTime();var ctime=time();var delta=ttime-ctime;if(delta<0){if(ii==="*"){gd.setMinutes(tii+1);ttime=gd.getTime();delta=ttime-ctime}}if(delta<0){if(hh==="*"){gd.setHours(thh+1);ttime=gd.getTime();delta=ttime-ctime}}if(delta<0){if(dd==="*"){gd.setDate(tdd+1);ttime=gd.getTime();delta=ttime-ctime}}if(delta<0){if(mm==="*"){gd.setMonth(tmm);ttime=gd.getTime();delta=ttime-ctime}}if(delta<0){if(yy==="*"){gd.setFullYear(tyy+1);ttime=gd.getTime();delta=ttime-ctime}}return delta};var getDelayTime=function getDelayTime(pat,lastTick){var pt1=/^(\d+)\s?(d|h|m|s)+$/i;var pt2=/^(sun|mon|tue|wed|thu|fri|sat)+\w*\s+(\d+)(:\d+)?(:\d+)?$/i;var pt3=/^(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\d+)$/i;var mat=pat.match(pt1);if(mat){return getDT1(mat,lastTick)}mat=pat.match(pt2);if(mat){return getDT2(mat)}mat=pat.match(pt3);if(mat){return getDT3(mat)}return-1};var execute=function execute(task){task.fn();var id=task.id;if(!task.repeat){return TaskList.delete(id)}var t=time();task.lastTick=t;TaskList.set(id,task);return true};var updateTimer=function updateTimer(){if(TaskList.size>0){(function(){var minDelay=MAX_TIMEOUT;var candidates=[];TaskList.all().forEach(function(task){var id=task.id;var delay=getDelayTime(task.time,task.lastTick);if(delay<0){TaskList.delete(id)}else if(delay===0){task.delay=0;candidates.push(task)}else{task.delay=delay;TaskList.set(id,task);if(delay<=minDelay){minDelay=delay;var arr=[];arr=candidates.concat(task);candidates=arr.filter(function(item){return item.delay<=minDelay})}}});if(checkTimer){clearTimeout(checkTimer)}if(candidates.length){checkTimer=setTimeout(function(){candidates.map(execute);setTimeout(updateTimer,1)},minDelay)}}())}};var register=function register(t,fn,once){var rep=once?0:1;var n=time();var id=createId(32);var task={id:id,fn:fn,time:t,repeat:rep,createdAt:n,lastTick:n,delay:0};TaskList.set(id,task);updateTimer()};return{yearly:function yearly(t,fn){var pt="* "+t;register(pt,fn)},monthly:function monthly(t,fn){var pt="* * "+t;register(pt,fn)},daily:function daily(t,fn){var pt="* * * "+t;register(pt,fn)},hourly:function hourly(t,fn){var pt="* * * * "+t;return register(pt,fn)},every:function every(t,fn){return register(t,fn)},once:function once(t,fn){return register(t,fn,1)}}})); |
{ | ||
"version": "1.1.2", | ||
"version": "1.1.3", | ||
"name": "bella-scheduler", | ||
@@ -24,3 +24,3 @@ "description": "A useful helper for any javascript program", | ||
"coveralls": "npm test && cat ./coverage/lcov.info | coveralls", | ||
"build": "gccmin src dist/scheduler.min.js" | ||
"build": "gccmin" | ||
}, | ||
@@ -38,2 +38,8 @@ "devDependencies": { | ||
}, | ||
"gccmin": { | ||
"source": "src", | ||
"target": "dist", | ||
"filename": "scheduler", | ||
"globalVar": "scheduler" | ||
}, | ||
"keywords": [ | ||
@@ -40,0 +46,0 @@ "cron", |
@@ -23,8 +23,5 @@ bella-scheduler | ||
[scheduler.min.js](https://cdn.rawgit.com/ndaidong/bella-scheduler/master/dist/scheduler.min.js) | ||
- [scheduler.js](https://cdn.rawgit.com/ndaidong/bella-scheduler/master/dist/scheduler.js) | ||
- [scheduler.min.js](https://cdn.rawgit.com/ndaidong/bella-scheduler/master/dist/scheduler.min.js) | ||
``` | ||
<script type="text/javascript" src="https://cdn.rawgit.com/ndaidong/bella-scheduler/master/dist/scheduler.min.js"></script> | ||
``` | ||
- This library also supports ES6 Module, AMD and UMD style. | ||
@@ -31,0 +28,0 @@ |
648
src/main.js
@@ -6,396 +6,380 @@ /** | ||
((name, factory) => { | ||
if (typeof module !== 'undefined' && module.exports) { | ||
module.exports = factory(); | ||
} else { | ||
let root = window || {}; | ||
if (root.define && root.define.amd) { | ||
root.define([], factory); | ||
} else if (root.exports) { | ||
root.exports = factory(); | ||
} else { | ||
root[name] = factory(); | ||
} | ||
} | ||
})('scheduler', () => { | ||
const MAX_TIMEOUT = 2147483647; | ||
const MAX_TIMEOUT = 2147483647; | ||
var isUndefined = (v) => { | ||
return v === undefined; // eslint-disable-line no-undefined | ||
}; | ||
var isUndefined = (v) => { | ||
return v === undefined; // eslint-disable-line no-undefined | ||
}; | ||
var hasProperty = (ob, k) => { | ||
if (!ob || !k) { | ||
return false; | ||
} | ||
let r = true; | ||
if (isUndefined(ob[k])) { | ||
r = k in ob; | ||
} | ||
return r; | ||
}; | ||
var hasProperty = (ob, k) => { | ||
if (!ob || !k) { | ||
return false; | ||
} | ||
let r = true; | ||
if (isUndefined(ob[k])) { | ||
r = k in ob; | ||
} | ||
return r; | ||
}; | ||
class BellaMap { | ||
constructor() { | ||
this.size = 0; | ||
this.data = {}; | ||
} | ||
class BellaMap { | ||
constructor() { | ||
this.size = 0; | ||
this.data = {}; | ||
set(k, v) { | ||
let d = this.data; | ||
if (!hasProperty(d, k)) { | ||
this.size++; | ||
} | ||
d[k] = v; | ||
return this; | ||
} | ||
set(k, v) { | ||
let d = this.data; | ||
if (!hasProperty(d, k)) { | ||
this.size++; | ||
} | ||
d[k] = v; | ||
return this; | ||
} | ||
get(k) { | ||
let d = this.data; | ||
return d[k] || null; | ||
} | ||
get(k) { | ||
let d = this.data; | ||
return d[k] || null; | ||
} | ||
all() { | ||
let d = this.data; | ||
let a = []; | ||
for (let k in d) { | ||
if (!isUndefined(d[k])) { | ||
a.push(d[k]); | ||
} | ||
all() { | ||
let d = this.data; | ||
let a = []; | ||
for (let k in d) { | ||
if (!isUndefined(d[k])) { | ||
a.push(d[k]); | ||
} | ||
return a; | ||
} | ||
return a; | ||
} | ||
delete(k) { | ||
let d = this.data; | ||
if (!hasProperty(d, k)) { | ||
return false; | ||
} | ||
d[k] = null; | ||
delete d[k]; | ||
this.size--; | ||
return true; | ||
delete(k) { | ||
let d = this.data; | ||
if (!hasProperty(d, k)) { | ||
return false; | ||
} | ||
d[k] = null; | ||
delete d[k]; | ||
this.size--; | ||
return true; | ||
} | ||
} | ||
var TaskList = new BellaMap(); | ||
var checkTimer; | ||
var TaskList = new BellaMap(); | ||
var checkTimer; | ||
var now = () => { | ||
return new Date(); | ||
}; | ||
var now = () => { | ||
return new Date(); | ||
}; | ||
var time = () => { | ||
return now().getTime(); | ||
}; | ||
var time = () => { | ||
return now().getTime(); | ||
}; | ||
var getIndex = (arr, item) => { | ||
let r = -1; | ||
for (let i = 0; i < arr.length; i++) { | ||
if (arr[i] === item) { | ||
r = i; | ||
break; | ||
} | ||
var getIndex = (arr, item) => { | ||
let r = -1; | ||
for (let i = 0; i < arr.length; i++) { | ||
if (arr[i] === item) { | ||
r = i; | ||
break; | ||
} | ||
return r; | ||
}; | ||
} | ||
return r; | ||
}; | ||
var createId = (leng, prefix) => { | ||
let rn = () => { | ||
return Math.random().toString(36).slice(2); | ||
}; | ||
let a = []; | ||
while (a.length < 10) { | ||
a.push(rn()); | ||
} | ||
let r = a.join(''); | ||
let t = r.length; | ||
let px = prefix || ''; | ||
let ln = Math.max(leng || 32, px.length); | ||
let s = px; | ||
while (s.length < ln) { | ||
let k = Math.floor(Math.random() * t); | ||
s += r.charAt(k) || ''; | ||
} | ||
return s; | ||
var createId = (leng, prefix) => { | ||
let rn = () => { | ||
return Math.random().toString(36).slice(2); | ||
}; | ||
let a = []; | ||
while (a.length < 10) { | ||
a.push(rn()); | ||
} | ||
let r = a.join(''); | ||
let t = r.length; | ||
let px = prefix || ''; | ||
let ln = Math.max(leng || 32, px.length); | ||
let s = px; | ||
while (s.length < ln) { | ||
let k = Math.floor(Math.random() * t); | ||
s += r.charAt(k) || ''; | ||
} | ||
return s; | ||
}; | ||
var getNextDay = (t, tday) => { | ||
let d = new Date(t); | ||
d.setDate(d.getDate() + tday + 7 - d.getDay() % 7); | ||
return d; | ||
}; | ||
var getNextDay = (t, tday) => { | ||
let d = new Date(t); | ||
d.setDate(d.getDate() + tday + 7 - d.getDay() % 7); | ||
return d; | ||
}; | ||
var getDT1 = (mat, lastTick) => { | ||
var getDT1 = (mat, lastTick) => { | ||
let delta = 0; | ||
let passed = time() - lastTick; | ||
let delta = 0; | ||
let passed = time() - lastTick; | ||
if (!mat) { | ||
return -1; | ||
} | ||
let v = parseInt(mat[1], 10); | ||
let s = mat[2]; | ||
if (s === 's') { | ||
delta = 1000; | ||
} else if (s === 'm') { | ||
delta = 6e4; | ||
} else if (s === 'h') { | ||
delta = 6e4 * 60; | ||
} else if (s === 'd') { | ||
delta = 6e4 * 60 * 24; | ||
} | ||
delta *= v; | ||
return delta - passed; | ||
}; | ||
if (!mat) { | ||
return -1; | ||
} | ||
let v = parseInt(mat[1], 10); | ||
let s = mat[2]; | ||
if (s === 's') { | ||
delta = 1000; | ||
} else if (s === 'm') { | ||
delta = 6e4; | ||
} else if (s === 'h') { | ||
delta = 6e4 * 60; | ||
} else if (s === 'd') { | ||
delta = 6e4 * 60 * 24; | ||
} | ||
delta *= v; | ||
return delta - passed; | ||
}; | ||
var getDT2 = (mat) => { | ||
let wds = 'sun|mon|tue|wed|thu|fri|sat'.split('|'); | ||
let today = new Date(); | ||
let wday = today.getDay(); | ||
var getDT2 = (mat) => { | ||
let wds = 'sun|mon|tue|wed|thu|fri|sat'.split('|'); | ||
let today = new Date(); | ||
let wday = today.getDay(); | ||
let awd = wds[wday]; | ||
let awi = getIndex(awd, wds); | ||
let awd = wds[wday]; | ||
let awi = getIndex(awd, wds); | ||
let dd = mat[1].toLowerCase(); | ||
let ddi = getIndex(dd, wds); | ||
let dd = mat[1].toLowerCase(); | ||
let ddi = getIndex(dd, wds); | ||
let hh = 0; | ||
let ii = 0; | ||
let ss = 0; | ||
if (mat[2]) { | ||
hh = parseInt(mat[2], 10); | ||
} | ||
if (mat[3]) { | ||
ii = parseInt(mat[3].replace(/\D/gi, ''), 10); | ||
} | ||
if (mat[4]) { | ||
ss = parseInt(mat[4].replace(/\D/gi, ''), 10); | ||
} | ||
let hh = 0; | ||
let ii = 0; | ||
let ss = 0; | ||
if (mat[2]) { | ||
hh = parseInt(mat[2], 10); | ||
} | ||
if (mat[3]) { | ||
ii = parseInt(mat[3].replace(/\D/gi, ''), 10); | ||
} | ||
if (mat[4]) { | ||
ss = parseInt(mat[4].replace(/\D/gi, ''), 10); | ||
} | ||
today.setHours(hh); | ||
today.setMinutes(ii); | ||
today.setSeconds(ss); | ||
today.setHours(hh); | ||
today.setMinutes(ii); | ||
today.setSeconds(ss); | ||
let ttime = today.getTime(); | ||
let ctime = time(); | ||
let ttime = today.getTime(); | ||
let ctime = time(); | ||
let nextDay = today; | ||
if (ddi < awi || ctime > ttime) { | ||
nextDay = getNextDay(today, awi); | ||
} | ||
nextDay.setHours(hh); | ||
nextDay.setMinutes(ii); | ||
nextDay.setSeconds(ss); | ||
let nextDay = today; | ||
if (ddi < awi || ctime > ttime) { | ||
nextDay = getNextDay(today, awi); | ||
} | ||
nextDay.setHours(hh); | ||
nextDay.setMinutes(ii); | ||
nextDay.setSeconds(ss); | ||
return nextDay.getTime() - ctime; | ||
}; | ||
return nextDay.getTime() - ctime; | ||
}; | ||
var getDT3 = (mat) => { // eslint-disable-line complexity | ||
var getDT3 = (mat) => { // eslint-disable-line complexity | ||
let yy = mat[1] === '*' ? '*' : parseInt(mat[1], 10); | ||
let mm = mat[2] === '*' ? '*' : parseInt(mat[2], 10); | ||
let dd = mat[3] === '*' ? '*' : parseInt(mat[3], 10); | ||
let hh = mat[4] === '*' ? '*' : parseInt(mat[4], 10); | ||
let ii = mat[5] === '*' ? '*' : parseInt(mat[5], 10); | ||
let ss = mat[6] === '*' ? '*' : parseInt(mat[6], 10); | ||
let yy = mat[1] === '*' ? '*' : parseInt(mat[1], 10); | ||
let mm = mat[2] === '*' ? '*' : parseInt(mat[2], 10); | ||
let dd = mat[3] === '*' ? '*' : parseInt(mat[3], 10); | ||
let hh = mat[4] === '*' ? '*' : parseInt(mat[4], 10); | ||
let ii = mat[5] === '*' ? '*' : parseInt(mat[5], 10); | ||
let ss = mat[6] === '*' ? '*' : parseInt(mat[6], 10); | ||
let today = new Date(); | ||
let ayy = today.getFullYear(); | ||
let today = new Date(); | ||
let ayy = today.getFullYear(); | ||
if (yy !== '*' && yy < ayy) { | ||
return -1; | ||
} | ||
if (yy !== '*' && yy < ayy) { | ||
return -1; | ||
} | ||
let tyy = yy; | ||
let tmm = mm; | ||
let tdd = dd; | ||
let thh = hh; | ||
let tii = ii; | ||
let tss = ss; | ||
let tyy = yy; | ||
let tmm = mm; | ||
let tdd = dd; | ||
let thh = hh; | ||
let tii = ii; | ||
let tss = ss; | ||
if (yy === '*') { | ||
tyy = ayy; | ||
} | ||
if (yy === '*') { | ||
tyy = ayy; | ||
} | ||
let amm = today.getMonth() + 1; | ||
if (mm === '*') { | ||
tmm = amm; | ||
} | ||
let add = today.getDate(); | ||
if (dd === '*') { | ||
tdd = add; | ||
} | ||
let ahh = today.getHours(); | ||
if (hh === '*') { | ||
thh = ahh; | ||
} | ||
let aii = today.getMinutes(); | ||
if (ii === '*') { | ||
tii = aii; | ||
} | ||
let amm = today.getMonth() + 1; | ||
if (mm === '*') { | ||
tmm = amm; | ||
} | ||
let add = today.getDate(); | ||
if (dd === '*') { | ||
tdd = add; | ||
} | ||
let ahh = today.getHours(); | ||
if (hh === '*') { | ||
thh = ahh; | ||
} | ||
let aii = today.getMinutes(); | ||
if (ii === '*') { | ||
tii = aii; | ||
} | ||
let gd = new Date(tyy, tmm - 1, tdd, thh, tii, tss); | ||
let ttime = gd.getTime(); | ||
let ctime = time(); | ||
let delta = ttime - ctime; | ||
let gd = new Date(tyy, tmm - 1, tdd, thh, tii, tss); | ||
let ttime = gd.getTime(); | ||
let ctime = time(); | ||
let delta = ttime - ctime; | ||
if (delta < 0) { | ||
if (ii === '*') { | ||
gd.setMinutes(tii + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
if (delta < 0) { | ||
if (ii === '*') { | ||
gd.setMinutes(tii + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
if (delta < 0) { | ||
if (hh === '*') { | ||
gd.setHours(thh + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
} | ||
if (delta < 0) { | ||
if (hh === '*') { | ||
gd.setHours(thh + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
if (delta < 0) { | ||
if (dd === '*') { | ||
gd.setDate(tdd + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
} | ||
if (delta < 0) { | ||
if (dd === '*') { | ||
gd.setDate(tdd + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
} | ||
if (delta < 0) { | ||
if (mm === '*') { | ||
gd.setMonth(tmm); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
if (delta < 0) { | ||
if (mm === '*') { | ||
gd.setMonth(tmm); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
} | ||
if (delta < 0) { | ||
if (yy === '*') { | ||
gd.setFullYear(tyy + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
if (delta < 0) { | ||
if (yy === '*') { | ||
gd.setFullYear(tyy + 1); | ||
ttime = gd.getTime(); | ||
delta = ttime - ctime; | ||
} | ||
} | ||
return delta; | ||
}; | ||
return delta; | ||
}; | ||
var getDelayTime = (pat, lastTick) => { | ||
var getDelayTime = (pat, lastTick) => { | ||
let pt1 = /^(\d+)\s?(d|h|m|s)+$/i; | ||
let pt2 = /^(sun|mon|tue|wed|thu|fri|sat)+\w*\s+(\d+)(:\d+)?(:\d+)?$/i; | ||
let pt3 = /^(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\d+)$/i; | ||
let pt1 = /^(\d+)\s?(d|h|m|s)+$/i; | ||
let pt2 = /^(sun|mon|tue|wed|thu|fri|sat)+\w*\s+(\d+)(:\d+)?(:\d+)?$/i; | ||
let pt3 = /^(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\*|\d+)\s+(\d+)$/i; | ||
let mat = pat.match(pt1); | ||
if (mat) { | ||
return getDT1(mat, lastTick); | ||
} | ||
let mat = pat.match(pt1); | ||
if (mat) { | ||
return getDT1(mat, lastTick); | ||
} | ||
mat = pat.match(pt2); | ||
if (mat) { | ||
return getDT2(mat); | ||
} | ||
mat = pat.match(pt2); | ||
if (mat) { | ||
return getDT2(mat); | ||
} | ||
mat = pat.match(pt3); | ||
if (mat) { | ||
return getDT3(mat); | ||
} | ||
mat = pat.match(pt3); | ||
if (mat) { | ||
return getDT3(mat); | ||
} | ||
return -1; | ||
}; | ||
return -1; | ||
}; | ||
var execute = (task) => { | ||
task.fn(); | ||
let id = task.id; | ||
if (!task.repeat) { | ||
return TaskList.delete(id); | ||
} | ||
var execute = (task) => { | ||
task.fn(); | ||
let id = task.id; | ||
if (!task.repeat) { | ||
return TaskList.delete(id); | ||
} | ||
let t = time(); | ||
task.lastTick = t; | ||
TaskList.set(id, task); | ||
return true; | ||
}; | ||
let t = time(); | ||
task.lastTick = t; | ||
TaskList.set(id, task); | ||
return true; | ||
}; | ||
var updateTimer = () => { | ||
if (TaskList.size > 0) { | ||
let minDelay = MAX_TIMEOUT; | ||
let candidates = []; | ||
TaskList.all().forEach((task) => { | ||
let id = task.id; | ||
let delay = getDelayTime(task.time, task.lastTick); | ||
if (delay < 0) { | ||
TaskList.delete(id); | ||
} else if (delay === 0) { | ||
task.delay = 0; | ||
candidates.push(task); | ||
} else { | ||
task.delay = delay; | ||
TaskList.set(id, task); | ||
if (delay <= minDelay) { | ||
minDelay = delay; | ||
let arr = []; | ||
arr = candidates.concat(task); | ||
candidates = arr.filter((item) => { | ||
return item.delay <= minDelay; | ||
}); | ||
} | ||
var updateTimer = () => { | ||
if (TaskList.size > 0) { | ||
let minDelay = MAX_TIMEOUT; | ||
let candidates = []; | ||
TaskList.all().forEach((task) => { | ||
let id = task.id; | ||
let delay = getDelayTime(task.time, task.lastTick); | ||
if (delay < 0) { | ||
TaskList.delete(id); | ||
} else if (delay === 0) { | ||
task.delay = 0; | ||
candidates.push(task); | ||
} else { | ||
task.delay = delay; | ||
TaskList.set(id, task); | ||
if (delay <= minDelay) { | ||
minDelay = delay; | ||
let arr = []; | ||
arr = candidates.concat(task); | ||
candidates = arr.filter((item) => { | ||
return item.delay <= minDelay; | ||
}); | ||
} | ||
}); | ||
if (checkTimer) { | ||
clearTimeout(checkTimer); | ||
} | ||
if (candidates.length) { | ||
checkTimer = setTimeout(() => { | ||
candidates.map(execute); | ||
setTimeout(updateTimer, 1); | ||
}, minDelay); | ||
} | ||
}); | ||
if (checkTimer) { | ||
clearTimeout(checkTimer); | ||
} | ||
}; | ||
if (candidates.length) { | ||
checkTimer = setTimeout(() => { | ||
candidates.map(execute); | ||
setTimeout(updateTimer, 1); | ||
}, minDelay); | ||
} | ||
var register = (t, fn, once) => { | ||
let rep = once ? 0 : 1; | ||
let n = time(); | ||
let id = createId(32); | ||
let task = { | ||
id, | ||
fn, | ||
time: t, | ||
repeat: rep, | ||
createdAt: n, | ||
lastTick: n, | ||
delay: 0 | ||
}; | ||
TaskList.set(id, task); | ||
updateTimer(); | ||
} | ||
}; | ||
var register = (t, fn, once) => { | ||
let rep = once ? 0 : 1; | ||
let n = time(); | ||
let id = createId(32); | ||
let task = { | ||
id, | ||
fn, | ||
time: t, | ||
repeat: rep, | ||
createdAt: n, | ||
lastTick: n, | ||
delay: 0 | ||
}; | ||
TaskList.set(id, task); | ||
updateTimer(); | ||
}; | ||
return { | ||
yearly(t, fn) { | ||
let pt = '* ' + t; | ||
register(pt, fn); | ||
}, | ||
monthly(t, fn) { | ||
let pt = '* * ' + t; | ||
register(pt, fn); | ||
}, | ||
daily(t, fn) { | ||
let pt = '* * * ' + t; | ||
register(pt, fn); | ||
}, | ||
hourly(t, fn) { | ||
let pt = '* * * * ' + t; | ||
return register(pt, fn); | ||
}, | ||
every(t, fn) { | ||
return register(t, fn); | ||
}, | ||
once(t, fn) { | ||
return register(t, fn, 1); | ||
} | ||
}; | ||
}); | ||
module.exports = { | ||
yearly(t, fn) { | ||
let pt = '* ' + t; | ||
register(pt, fn); | ||
}, | ||
monthly(t, fn) { | ||
let pt = '* * ' + t; | ||
register(pt, fn); | ||
}, | ||
daily(t, fn) { | ||
let pt = '* * * ' + t; | ||
register(pt, fn); | ||
}, | ||
hourly(t, fn) { | ||
let pt = '* * * * ' + t; | ||
return register(pt, fn); | ||
}, | ||
every(t, fn) { | ||
return register(t, fn); | ||
}, | ||
once(t, fn) { | ||
return register(t, fn, 1); | ||
} | ||
}; |
/** | ||
* Check built-file to ensure it has been regenated | ||
* Check built-files to ensure they have been regenated correctly | ||
* @ndaidong | ||
@@ -10,6 +10,6 @@ */ | ||
var pkgFake = require('../../package.json'); | ||
var proFile = './dist/scheduler.min.js'; | ||
var proFile = './dist/scheduler.js'; | ||
var devFile = './dist/scheduler.min.js'; | ||
test('Testing minified result', (assert) => { | ||
test('Validate production output', (assert) => { | ||
assert.ok(fs.existsSync(proFile), 'Production file must be generated'); | ||
@@ -30,1 +30,18 @@ | ||
}); | ||
test('Validate development output', (assert) => { | ||
assert.ok(fs.existsSync(devFile), 'Development file must be generated'); | ||
let s = fs.readFileSync(devFile, 'utf8'); | ||
let a = s.split('\n'); | ||
assert.ok(s.length > 0 && a.length > 1, 'Development file must be not empty'); | ||
let cmt = a[0]; | ||
let pack = `${pkgFake.name}@${pkgFake.version}`; | ||
assert.ok(cmt.includes(pack), 'Package must be presented with name and version'); | ||
let author = `${pkgFake.author}`; | ||
assert.ok(cmt.includes(author), 'Package author must be correct'); | ||
let license = `${pkgFake.license}`; | ||
assert.ok(cmt.includes(license), 'Package license must be correct'); | ||
assert.end(); | ||
}); |
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
153146
17
850
119