UNPKG

gcl

Version:

码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现

1,239 lines (1,042 loc) 41.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Cron = undefined; var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _tool = require('../common/tool'); var _tool2 = _interopRequireDefault(_tool); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /// <summary> /// 用于分别获取年/月/星期/日/时/分/秒实现 /// </summary> var IDateTimePart = function () { function IDateTimePart(name) { (0, _classCallCheck3.default)(this, IDateTimePart); this.name = name; } (0, _createClass3.default)(IDateTimePart, [{ key: 'GetTime', value: function GetTime(time) {} }, { key: 'GetMaxDate', value: function GetMaxDate(time) {} }, { key: 'AddTime', value: function AddTime(time, data) {} }]); return IDateTimePart; }(); /// <summary> /// 年 /// </summary> //使用require('cron-parser')进行封装 var YearDateTimePart = function (_IDateTimePart) { (0, _inherits3.default)(YearDateTimePart, _IDateTimePart); function YearDateTimePart() { (0, _classCallCheck3.default)(this, YearDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (YearDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(YearDateTimePart)).call(this, 'YearDateTimePart')); } (0, _createClass3.default)(YearDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getFullYear(); } }, { key: 'GetMaxDate', value: function GetMaxDate(time) { return 10000; } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('y', data); } }]); return YearDateTimePart; }(IDateTimePart); /// <summary> /// 星期 /// </summary> var WeekDateTimePart = function (_IDateTimePart2) { (0, _inherits3.default)(WeekDateTimePart, _IDateTimePart2); function WeekDateTimePart() { (0, _classCallCheck3.default)(this, WeekDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (WeekDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(WeekDateTimePart)).call(this, 'WeekDateTimePart')); } (0, _createClass3.default)(WeekDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getDay(); } }, { key: 'GetMaxDate', value: function GetMaxDate(time) { //limit=new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate(); //return (limit - time.getDate() < 7) ? (limit - time.getDate() + GetTime(time)) : 6; return 7; } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('d', data); } }]); return WeekDateTimePart; }(IDateTimePart); /// <summary> /// 月 /// </summary> var MonthDateTimePart = function (_IDateTimePart3) { (0, _inherits3.default)(MonthDateTimePart, _IDateTimePart3); function MonthDateTimePart() { (0, _classCallCheck3.default)(this, MonthDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (MonthDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(MonthDateTimePart)).call(this, 'MonthDateTimePart')); } (0, _createClass3.default)(MonthDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getMonth() + 1; } }, { key: 'GetMaxDate', value: function GetMaxDate(time) { return 12; } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('m', data); } }]); return MonthDateTimePart; }(IDateTimePart); /// <summary> /// 日 /// </summary> var DayDateTimePart = function (_IDateTimePart4) { (0, _inherits3.default)(DayDateTimePart, _IDateTimePart4); function DayDateTimePart() { (0, _classCallCheck3.default)(this, DayDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (DayDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(DayDateTimePart)).call(this, 'DayDateTimePart')); } (0, _createClass3.default)(DayDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getDate(); } }, { key: 'GetMaxDate', value: function GetMaxDate() { var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); return new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate(); } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('d', data); } }]); return DayDateTimePart; }(IDateTimePart); /// <summary> /// 时 /// </summary> var HourDateTimePart = function (_IDateTimePart5) { (0, _inherits3.default)(HourDateTimePart, _IDateTimePart5); function HourDateTimePart() { (0, _classCallCheck3.default)(this, HourDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (HourDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(HourDateTimePart)).call(this, 'HourDateTimePart')); } (0, _createClass3.default)(HourDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getHours(); } }, { key: 'GetMaxDate', value: function GetMaxDate(time) { return 24; } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('h', data); } }]); return HourDateTimePart; }(IDateTimePart); /// <summary> /// 分 /// </summary> var MinuteDateTimePart = function (_IDateTimePart6) { (0, _inherits3.default)(MinuteDateTimePart, _IDateTimePart6); function MinuteDateTimePart() { (0, _classCallCheck3.default)(this, MinuteDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (MinuteDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(MinuteDateTimePart)).call(this, 'MinuteDateTimePart')); } (0, _createClass3.default)(MinuteDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getMinutes(); } }, { key: 'GetMaxDate', value: function GetMaxDate(time) { return 60; } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('n', data); } }]); return MinuteDateTimePart; }(IDateTimePart); /// <summary> /// 秒 /// </summary> var SecondDateTimePart = function (_IDateTimePart7) { (0, _inherits3.default)(SecondDateTimePart, _IDateTimePart7); function SecondDateTimePart() { (0, _classCallCheck3.default)(this, SecondDateTimePart); return (0, _possibleConstructorReturn3.default)(this, (SecondDateTimePart.__proto__ || (0, _getPrototypeOf2.default)(SecondDateTimePart)).call(this, 'SecondDateTimePart')); } (0, _createClass3.default)(SecondDateTimePart, [{ key: 'GetTime', value: function GetTime(time) { return time.getSeconds(); } }, { key: 'GetMaxDate', value: function GetMaxDate(time) { return 60; } }, { key: 'AddTime', value: function AddTime(time, data) { return time.add('s', data); } }]); return SecondDateTimePart; }(IDateTimePart); var DateTimeContainer = function () { function DateTimeContainer() { (0, _classCallCheck3.default)(this, DateTimeContainer); pri(this, { time: null }); } (0, _createClass3.default)(DateTimeContainer, [{ key: 'SetDateTime', value: function SetDateTime(time) { pri(this).__.time = time; } }, { key: 'GetDateTime', value: function GetDateTime() { return pri(this).__.time; } }]); return DateTimeContainer; }(); /** * 各种Cron标记的基类a,b:a或者b data a/b:a为底b的倍数 data a-b:从a到b data a#b:允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五星期日为1 注意这里DayOfWeek 中星期日为0 data aL:在日期和星期意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示周六,如果在day-of-week域中前面加上数字,它表示一个月的最后第几天,例如‘6L’就表示一个月的最后一个星期五 data aW:只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日 data aC: */ var CronNode = function () { function CronNode(nodeIdentify, par, dateTime) { (0, _classCallCheck3.default)(this, CronNode); pri(this, { //todo 正则待验证 ndeIdentify: new RegExp(nodeIdentify), parent: par, datePart: dateTime }); } (0, _createClass3.default)(CronNode, [{ key: 'Next', value: function Next(container) { var _pri = pri(this), _ = _pri._, __ = _pri.__; var changeValue = _.partRegen(container.GetDateTime(), __.datePart); if (changeValue != 0) container.SetDateTime(__.datePart.AddTime(container.GetDateTime(), changeValue)); //console.log(__.datePart.name, changeValue + ":" + container.GetDateTime().toString('yyyy MM dd HH mm ss')); //if ((parent != null && parent.Next(container)) || (parent == null && changeValue != 0)) { if (__.parent != null && __.parent.Next(container) && __.datePart.name != 'DayDateTimePart') { //特例处理Day和Week //清零 var changeFirst = this.partGetFirst(container.GetDateTime(), __.datePart); //console.log('first ' + __.datePart.name, changeFirst); container.SetDateTime(__.datePart.AddTime(container.GetDateTime(), changeFirst)); return true; } //console.log(__.datePart.name); return changeValue != 0; } }, { key: 'NodeIdentify', get: function get() { return pri(this).__.ndeIdentify; } }]); return CronNode; }(); var CommonCronNode = function (_CronNode) { (0, _inherits3.default)(CommonCronNode, _CronNode); function CommonCronNode(nodeIdentify, par, dateTime) { (0, _classCallCheck3.default)(this, CommonCronNode); return (0, _possibleConstructorReturn3.default)(this, (CommonCronNode.__proto__ || (0, _getPrototypeOf2.default)(CommonCronNode)).call(this, nodeIdentify, par, dateTime)); } (0, _createClass3.default)(CommonCronNode, [{ key: 'partRegen', value: function partRegen(time, part) { if (part.name == 'DayDateTimePart') return this.DayRegen(part.GetTime(time), part.GetMaxDate(time), part.GetMaxDate(time.add('m', 1)));else return this.Regen(part.GetTime(time), part.GetMaxDate(time)); } }, { key: 'partGetFirst', value: function partGetFirst(time, part) { if (part.name == 'DayDateTimePart') return this.DayGetFirst(part.GetTime(time), part.GetMaxDate(time), part.GetMaxDate(time.add('m', 1)));else return this.GetFirst(part.GetTime(time), part.GetMaxDate(time)); } /** * 29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用 * @param {*} time * @param {*} maxDate * @param {*} nextMaxDate */ }, { key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) {} /** * 29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用 * @param {*} time * @param {*} maxDate * @param {*} nextMaxDate */ }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) {} /** * 仅仅用于处理数字 * @param {*} time * @param {*} maxDate */ }, { key: 'Regen', value: function Regen(time, maxDate) {} /** * 仅仅用于处理数字 * @param {*} time * @param {*} maxDate */ }, { key: 'GetFirst', value: function GetFirst(time, maxDate) {} }]); return CommonCronNode; }(CronNode); /// <summary> /// 处理*号 /// </summary> var XCronNode = function (_CommonCronNode) { (0, _inherits3.default)(XCronNode, _CommonCronNode); function XCronNode(text, par, part) { (0, _classCallCheck3.default)(this, XCronNode); return (0, _possibleConstructorReturn3.default)(this, (XCronNode.__proto__ || (0, _getPrototypeOf2.default)(XCronNode)).call(this, "\\*", par, part)); } (0, _createClass3.default)(XCronNode, [{ key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) { return 0; } }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) { return 1 - time; } }, { key: 'Regen', value: function Regen(time, maxDate) { return 0; } }, { key: 'GetFirst', value: function GetFirst(time, maxDate) { return -1 * time; } }]); return XCronNode; }(CommonCronNode); /// <summary> /// 处理?号 /// </summary> var QCronNode = function (_CronNode2) { (0, _inherits3.default)(QCronNode, _CronNode2); function QCronNode(text, par, part) { (0, _classCallCheck3.default)(this, QCronNode); return (0, _possibleConstructorReturn3.default)(this, (QCronNode.__proto__ || (0, _getPrototypeOf2.default)(QCronNode)).call(this, "\\?", par, part)); } (0, _createClass3.default)(QCronNode, [{ key: 'partRegen', value: function partRegen(time, part) { return 0; } }, { key: 'partGetFirst', value: function partGetFirst(time, part) { return 0; } }]); return QCronNode; }(CronNode); /// <summary> /// 处理具体数字 /// 请注意星期中1-7需要改为0-6 /// </summary> var NCronNode = function (_CommonCronNode2) { (0, _inherits3.default)(NCronNode, _CommonCronNode2); function NCronNode(num, par, datePart) { (0, _classCallCheck3.default)(this, NCronNode); var _this11 = (0, _possibleConstructorReturn3.default)(this, (NCronNode.__proto__ || (0, _getPrototypeOf2.default)(NCronNode)).call(this, "\\d+", par, datePart)); var _pri2 = pri(_this11, { num: 0 }), _ = _pri2._, __ = _pri2.__; __.num = parseInt(num); if (datePart.name == 'WeekDateTimePart') __.num--; return _this11; } (0, _createClass3.default)(NCronNode, [{ key: 'Regen', value: function Regen(time, maxDate) { var _pri3 = pri(this), _ = _pri3._, __ = _pri3.__; return time > __.num ? maxDate - time + __.num : __.num - time; } }, { key: 'GetFirst', value: function GetFirst(time, maxDate) { var _pri4 = pri(this), _ = _pri4._, __ = _pri4.__; return __.num - time; } }, { key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) { var _pri5 = pri(this), _ = _pri5._, __ = _pri5.__; //29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用 return this.Regen(time, maxDate) + (time > __.num && __.num > nextMaxDate ? nextMaxDate : 0); } }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) { var _pri6 = pri(this), _ = _pri6._, __ = _pri6.__; if (__.num > maxDate) //说明本月无法设置 设置为下个月 return maxDate - time + __.num; return this.GetFirst(time, maxDate); } }]); return NCronNode; }(CommonCronNode); /// <summary> /// 处理逗号 /// </summary> var DCronNode = function (_CommonCronNode3) { (0, _inherits3.default)(DCronNode, _CommonCronNode3); function DCronNode(num, par, datePart) { (0, _classCallCheck3.default)(this, DCronNode); var _this12 = (0, _possibleConstructorReturn3.default)(this, (DCronNode.__proto__ || (0, _getPrototypeOf2.default)(DCronNode)).call(this, "\\d+[,\\d+]+", par, datePart)); var _pri7 = pri(_this12, { nums: [] }), _ = _pri7._, __ = _pri7.__; var _n = num.split(','); for (var w = 0; w < _n.length; w++) { if (datePart.name == 'WeekDateTimePart') __.nums[w] = parseInt(_n[w]) - 1;else __.nums[w] = parseInt(_n[w]); }__.nums.sort(function (l, r) { return l > r; }); return _this12; } (0, _createClass3.default)(DCronNode, [{ key: 'GetSmallNum', value: function GetSmallNum(time) { var _pri8 = pri(this), _ = _pri8._, __ = _pri8.__; if (time <= __.nums[0]) return 0; if (time >= __.nums[__.nums.length - 1]) return __.nums.length - 1; var l = 0, r = void 0, m = void 0; r = __.nums.length; while (r - l > 1) { m = parseInt((l + r) / 2); if (time >= __.nums[m]) l = m;else r = m; } return l; } }, { key: 'Regen', value: function Regen(time, maxDate) { var _pri9 = pri(this), _ = _pri9._, __ = _pri9.__; //当前数字已经大于最大的数 if (time > __.nums[__.nums.length - 1]) return maxDate - time + __.nums[0]; //maxDate - time + var order = _.GetSmallNum(time); return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time; } }, { key: 'GetFirst', value: function GetFirst(time, maxDate) { var _pri10 = pri(this), _ = _pri10._, __ = _pri10.__; return __.nums[0] - time; } }, { key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) { var _pri11 = pri(this), _ = _pri11._, __ = _pri11.__; if (time > __.nums[__.nums.length - 1]) { //说明下个月也无法设置 设置为下下个月 //29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用 return maxDate - time + __.nums[0] + (__.nums[0] > nextMaxDate ? nextMaxDate : 0); } var order = this.GetSmallNum(time); return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time; } }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) { var _pri12 = pri(this), _ = _pri12._, __ = _pri12.__; if (__.nums[0] > maxDate) //说明本月无法设置 设置为下个月 return maxDate - time + __.nums[0]; return this.GetFirst(time, maxDate); } }]); return DCronNode; }(CommonCronNode); /// <summary> /// -号 //todo /// </summary> var SCronNode = function (_CommonCronNode4) { (0, _inherits3.default)(SCronNode, _CommonCronNode4); function SCronNode(num, par, datePart) { (0, _classCallCheck3.default)(this, SCronNode); var _this13 = (0, _possibleConstructorReturn3.default)(this, (SCronNode.__proto__ || (0, _getPrototypeOf2.default)(SCronNode)).call(this, "\\d+-\\d+", par, datePart)); var _pri13 = pri(_this13, { nums: [] }), _ = _pri13._, __ = _pri13.__; var _n = num.split('-'); var l = parseInt(_n[0]); var r = parseInt(_n[1]); for (var w = 0; w < r - l + 1; w++) { if (datePart.name == 'WeekDateTimePart') __.nums[w] = w + l - 1;else __.nums[w] = w + l; }return _this13; } (0, _createClass3.default)(SCronNode, [{ key: 'GetSmallNum', value: function GetSmallNum(time) { var _pri14 = pri(this), _ = _pri14._, __ = _pri14.__; if (time <= __.nums[0]) return 0; if (time >= __.nums[__.nums.length - 1]) return __.nums.length - 1; var l = 0, r = void 0, m = void 0; r = __.nums.length; while (r - l > 1) { m = parseInt((l + r) / 2); if (time >= __.nums[m]) l = m;else r = m; } return l; } }, { key: 'Regen', value: function Regen(time, maxDate) { var _pri15 = pri(this), _ = _pri15._, __ = _pri15.__; //当前数字已经大于最大的数 if (time > __.nums[__.nums.length - 1]) return maxDate - time + __.nums[0]; var order = _.GetSmallNum(time); return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time; } }, { key: 'GetFirst', value: function GetFirst(time, maxDate) { var _pri16 = pri(this), _ = _pri16._, __ = _pri16.__; return __.nums[0] - time; } }, { key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) { var _pri17 = pri(this), _ = _pri17._, __ = _pri17.__; if (time > __.nums[__.nums.length - 1]) { //说明下个月也无法设置 设置为下下个月 //29,30,31号必然可以设置在本月或者下下个月 一般的这里的条件只对2月有用 return maxDate - time + __.nums[0] + (__.nums[0] > nextMaxDate ? nextMaxDate : 0); } var order = _.GetSmallNum(time); //当前数字已经大于最大的数 return time > __.nums[order] ? __.nums[order + 1] - time : __.nums[order] - time; } }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) { var _pri18 = pri(this), _ = _pri18._, __ = _pri18.__; if (__.nums[0] > maxDate) //说明本月无法设置 设置为下个月 return maxDate - time + __.nums[0]; return _.GetFirst(time, maxDate); } }]); return SCronNode; }(CommonCronNode); /// <summary> /// 除号 /// </summary> var PCronNode = function (_CommonCronNode5) { (0, _inherits3.default)(PCronNode, _CommonCronNode5); function PCronNode(num, par, part) { (0, _classCallCheck3.default)(this, PCronNode); var _this14 = (0, _possibleConstructorReturn3.default)(this, (PCronNode.__proto__ || (0, _getPrototypeOf2.default)(PCronNode)).call(this, "\\d+/\\d+", par, part)); var _pri19 = pri(_this14), _ = _pri19._, __ = _pri19.__; _.l = 0; _.r = 0; var _n = num.split('/'); _.l = parseInt(_n[0]); _.r = parseInt(_n[1]); if (part.name == 'WeekDateTimePart') { _.l--; } return _this14; } (0, _createClass3.default)(PCronNode, [{ key: 'GetBigNum', value: function GetBigNum(time) { var _pri20 = pri(this), _ = _pri20._, __ = _pri20.__; return (parseInt((time - _.l) / _.r) + 1) * _.r + _.l; } }, { key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) { var _pri21 = pri(this), _ = _pri21._, __ = _pri21.__; if (time > _.l && (time - _.l) % _.r == 0) return 0; var value = _.GetBigNum(time); if (value > maxDate) //如果下个月不能设置那么就设置到下下个月 return maxDate - time + _.l + (_.l > nextMaxDate ? nextMaxDate : 0);else return value - time; } }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) { var _pri22 = pri(this), _ = _pri22._, __ = _pri22.__; if (_.l > maxDate) //如果本月设置不了那么下个月肯定可以设置 return maxDate - time + _.l; return _.l - time; } }, { key: 'Regen', value: function Regen(time, maxDate) { var _pri23 = pri(this), _ = _pri23._, __ = _pri23.__; if (time >= _.l && (time - _.l) % _.r == 0) return 0; var value = _.GetBigNum(time); if (value > maxDate) return maxDate - time + _.l;else return value - time; } }, { key: 'GetFirst', value: function GetFirst(time, maxDate) { var _pri24 = pri(this), _ = _pri24._, __ = _pri24.__; return _.l - time; } }]); return PCronNode; }(CommonCronNode); /// <summary> /// #号 注意将1-7转为0-6 /// </summary> var ACronNode = function (_CronNode3) { (0, _inherits3.default)(ACronNode, _CronNode3); function ACronNode(num, par, part) { (0, _classCallCheck3.default)(this, ACronNode); var _this15 = (0, _possibleConstructorReturn3.default)(this, (ACronNode.__proto__ || (0, _getPrototypeOf2.default)(ACronNode)).call(this, "[1-7]#[1-5]", par, part)); var _pri25 = pri(_this15, { GetMaxDay: function GetMaxDay(time, part) { if (part.name == 'WeekDateTimePart') return new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate();else return part.GetMaxDate(time); } }), _ = _pri25._, __ = _pri25.__; _.l = 0; _.r = 0; var _n = num.split('#'); _.l = parseInt(_n[0]); _.r = parseInt(_n[1]); return _this15; } /// <summary> /// 得到第r个星期l是几号 /// </summary> /// <param name="time"></param> /// <param name="weekDay"></param> /// <returns></returns> (0, _createClass3.default)(ACronNode, [{ key: 'GetRightDay', value: function GetRightDay(time, weekDay) { var _pri26 = pri(this), _ = _pri26._, __ = _pri26.__; //firstDay=7- (time - weekDay-1) % 7; //if (firstDay == 7) // firstDay = 0; //firstDay = Math.Abs((time - weekDay - 1) % 7); var firstDay = ((1 - time + weekDay) % 7 + 7) % 7; return 7 * (this.r - 1) + 1 + _.l - firstDay + (this.l < firstDay ? 7 : 0); } }, { key: 'partRegen', value: function partRegen(time, part) { var _pri27 = pri(this), _ = _pri27._, __ = _pri27.__; var num = _.GetRightDay(time.getDate(), time.getDay()); var maxDate = __.GetMaxDay(time, part); //判断如果正确的时间还未发生 if (time.getDate() <= num && num <= maxDate) { return num - time.getDate(); } else { var value = 0; //判断如果正确的时间已经过期 while (time.getDate() > num || maxDate < num) { //下个月1号 var _t = maxDate - time.getDate() + 1; value += _t; time = time.add('d', _t); num = _.GetRightDay(time.getDate(), time.getDay()); maxDate = __.GetMaxDay(time, part); } return value + num - time.getDate(); } } }, { key: 'partGetFirst', value: function partGetFirst(time, part) { var _pri28 = pri(this), _ = _pri28._, __ = _pri28.__; var num = _.GetRightDay(time.getDate(), time.getDay()); var maxDate = __.GetMaxDay(time, part); if (time.getDate() <= num && num <= maxDate) { return time.getDate() - num; } else { var value = 0; while (time.getDate() > num || maxDate < num) { //下个月1号 var _t = maxDate - time.getDate() + 1; value += _t; time = time.add('d', _t); num = _.GetRightDay(time.getDate(), time.getDay()); maxDate = __.GetMaxDay(time, part); } return value + num - time.getDate(); } } }]); return ACronNode; }(CronNode); /// <summary> /// W号 /// </summary> var WCronNode = function (_CronNode4) { (0, _inherits3.default)(WCronNode, _CronNode4); function WCronNode() { var num = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var par = arguments[1]; var part = arguments[2]; (0, _classCallCheck3.default)(this, WCronNode); var _this16 = (0, _possibleConstructorReturn3.default)(this, (WCronNode.__proto__ || (0, _getPrototypeOf2.default)(WCronNode)).call(this, "(\\d+|L)W", par, part)); var _pri29 = pri(_this16), _ = _pri29._, __ = _pri29.__; _.l = 0; if (num.toUpperCaseCase() == "LW") _.l = 31;else _.l = parseInt(num.substr(0, num.length - 1)); return _this16; } /// <summary> /// 得到l日附近的工作日是几号 /// </summary> /// <param name="time"></param> /// <param name="weekDay"></param> /// <returns></returns> (0, _createClass3.default)(WCronNode, [{ key: 'GetRightDay', value: function GetRightDay(time, maxDate, weekDay) { //firstDay = 7 - (time - weekDay - 1) % 7; //if (firstDay == 7) // firstDay = 0; //return ((time-1)%7+firstDay)%7; var _pri30 = pri(this), _ = _pri30._, __ = _pri30.__; var _l = Math.min(_.l, maxDate); var r = ((_l - time + weekDay) % 7 + 7) % 7; if (r > 5) return _l - 1; if (r < 1) return _l + 1; return _l; } }, { key: 'partRegen', value: function partRegen(time, part) { var maxDate = part.GetMaxDate(time); var num = _.GetRightDay(time.getDate(), maxDate, time.getDay()); if (time.getDate() <= num && maxDate >= num) return num - time.getDate();else { return maxDate - time.getDate() + _.GetRightDay(1, part.GetMaxDate(time.add('m', 1)), ((1 + maxDate - time.getDate() + time.getDay()) % 7 + 7) % 7); } } }, { key: 'partGetFirst', value: function partGetFirst(time, part) { return this.GetRightDay(time.getDate(), part.GetMaxDate(time), time.getDay()) - time.getDate(); } }]); return WCronNode; }(CronNode); /// <summary> /// 处理最后几天,或者最后一个星期几的问题 /// </summary> var LCronNode = function (_CronNode5) { (0, _inherits3.default)(LCronNode, _CronNode5); function LCronNode(num, par, part) { (0, _classCallCheck3.default)(this, LCronNode); var _this17 = (0, _possibleConstructorReturn3.default)(this, (LCronNode.__proto__ || (0, _getPrototypeOf2.default)(LCronNode)).call(this, "\\d*L", par, part)); var _pri31 = pri(_this17, { GetMaxDay: function GetMaxDay(time, part) { if (part.name == 'WeekDateTimePart') return new Date(time.getFullYear(), time.getMonth() + 1, 1).add('d', -1).getDate();else return part.GetMaxDate(time); } }), _ = _pri31._, __ = _pri31.__; _.l = 0; if (num.length > 1) _.l = parseInt(num.substr(0, num.length - 1)); if (part.name == 'WeekDateTimePart' && _.l > 0) { _.l--; } return _this17; } /// <summary> /// 得到l日附近的工作日是几号 /// </summary> /// <param name="time"></param> /// <param name="weekDay"></param> /// <returns></returns> (0, _createClass3.default)(LCronNode, [{ key: 'GetRightDay', value: function GetRightDay(time, part) { var _pri32 = pri(this), _ = _pri32._, __ = _pri32.__; if (part.name == 'WeekDateTimePart') { var last = __.GetMaxDay(time, part); //得到最后一天是星期几 var lastDay = ((last - time.getDate() + time.getDay()) % 7 + 7) % 7; return last + _.l - lastDay - (_.l < lastDay ? 0 : 7); } else return part.GetMaxDate(time) - _.l; } }, { key: 'partRegen', value: function partRegen(time, part) { var _pri33 = pri(this), _ = _pri33._, __ = _pri33.__; var maxDate = __.GetMaxDay(time, part); var num = _.GetRightDay(time, part); if (time.getDate() <= num && maxDate >= num) return num - time.getDate();else return maxDate - time.getDate() + _.GetRightDay(time.add('m', 1), part); } }, { key: 'partGetFirst', value: function partGetFirst(time, part) { var _pri34 = pri(this), _ = _pri34._, __ = _pri34.__; var maxDate = __.GetMaxDay(time, part); var num = _.GetRightDay(time, part); if (time.getDate() <= num && maxDate >= num) return time.getDate() - num;else return maxDate - time.getDate() + _.GetRightDay(time.add('m', 1), part); } }]); return LCronNode; }(CronNode); /// <summary> /// 处理几号以后 或者星期几以后 /// </summary> var CCronNode = function (_CommonCronNode6) { (0, _inherits3.default)(CCronNode, _CommonCronNode6); function CCronNode(num, par, part) { (0, _classCallCheck3.default)(this, CCronNode); var _this18 = (0, _possibleConstructorReturn3.default)(this, (CCronNode.__proto__ || (0, _getPrototypeOf2.default)(CCronNode)).call(this, "\\d+C", par, part)); var _pri35 = pri(_this18), _ = _pri35._, __ = _pri35.__; _.l = 0; if (num.length > 1) _.l = parseInt(num.substr(0, num.length - 1)); if (part.name == 'WeekDateTimePart') { _.l--; } return _this18; } (0, _createClass3.default)(CCronNode, [{ key: 'DayRegen', value: function DayRegen(time, maxDate, nextMaxDate) { var _pri36 = pri(this), _ = _pri36._, __ = _pri36.__; if (time >= _.l) return 0;else return _.l - time + (_.l > maxDate ? maxDate : 0); } }, { key: 'DayGetFirst', value: function DayGetFirst(time, maxDate, nextMaxDate) { var _pri37 = pri(this), _ = _pri37._, __ = _pri37.__; return _.l - time; } }, { key: 'Regen', value: function Regen(time, maxDate) { var _pri38 = pri(this), _ = _pri38._, __ = _pri38.__; if (time >= _.l) return 0;else return _.l - time; } }, { key: 'GetFirst', value: function GetFirst(time, maxDate) { var _pri39 = pri(this), _ = _pri39._, __ = _pri39.__; return _.l - time; } }]); return CCronNode; }(CommonCronNode); var RegExpS = [new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[1-5]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[1-5]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[1-2]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^[\\*\\?]$)|(^{data}([-/]{data})?$)|(^{data}?[LWC]$)|(^{data}(,{data})+$)|(^LW$)", { data: "[1-3]?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "1?[0-9]" }), 'i'), new RegExp(_tool2.default.format("(^[\\*\\?]$)|(^{data}([-/#]{data})?$)|(^{data}?[LC]$)|(^{data}(,{data})+$)", { data: "[1-7]" }), 'i'), new RegExp(_tool2.default.format("(^\\*$)|(^{data}([-/]{data})?$)|(^{data}(,{data})+$)", { data: "[0-9]{4}" }), 'i')]; var FIELDLIMIT = [[0, 59], [0, 59], [0, 23], [1, 31], [1, 12], [1, 7], [1, 9999]]; var PARTS = [new SecondDateTimePart(), new MinuteDateTimePart(), new HourDateTimePart(), new DayDateTimePart(), new WeekDateTimePart(), new MonthDateTimePart(), new YearDateTimePart()]; var TYPES = [XCronNode, QCronNode, NCronNode, DCronNode, SCronNode, PCronNode, ACronNode, WCronNode, LCronNode, CCronNode]; var CRONRegExp = [new RegExp("^\\*$", 'gi'), new RegExp("^\\?$", 'gi'), new RegExp("^\\d+$", 'gi'), new RegExp("^\\d+[,\\d+]+$", 'gi'), new RegExp("^\\d+-\\d+$", 'gi'), new RegExp("^\\d+/\\d+$", 'gi'), new RegExp("^[1-7]#[1-5]$", 'gi'), new RegExp("^(\\d+|L)W$", 'gi'), new RegExp("^\\d*L$", 'gi'), new RegExp("^\\d+C$", 'gi')]; var CreateCronNode = function CreateCronNode(text, node, part) { for (var w = 0; w < CRONRegExp.length; w++) { CRONRegExp[w].lastIndex = 0; //每次调用test回调指针 if (CRONRegExp[w].test(text) ? true : false) return _tool2.default.create2(TYPES[w], [text, node, part]); } throw new Error(text + "没有找到合适的表示式元素!"); }; var NUMRegExp = new RegExp("\\d+", 'g'); var MatchCronExpression = function MatchCronExpression(text) { for (var w = 0; w < 7; w++) { if (!RegExpS[w].test(text[w])) throw new Error(_tool2.default.format("第{id}项不符合要求:{desc}", { id: w + 1, desc: text[w] })); var matchs = text[w].match(NUMRegExp) || []; for (var i = 0; i < matchs.length; i++) { var num = parseInt(matchs[i]); if (!(FIELDLIMIT[w][0] <= num & FIELDLIMIT[w][1] >= num)) throw new Error(_tool2.default.format("第{id}项超出范围:{desc}", { id: w + 1, desc: text[w] })); } } return true; }; /** * 使用require('cron-parser')进行克隆表达式封装 * @param {*} 克隆表达式 * @param {*} 当前时间 */ var Cron = exports.Cron = function () { function Cron(expression) { (0, _classCallCheck3.default)(this, Cron); var _pri40 = pri(this, { nodes: null }), _ = _pri40._, __ = _pri40.__; expression = expression.trim(); if (expression.split(' ').length < 7) expression += " *"; var exp = expression.toUpperCase().split(' '); MatchCronExpression(exp); //替换月与星期的位置 理顺嵌套关系! var _t = exp[5]; exp[5] = exp[4]; exp[4] = _t; for (var w = 6; w >= 0; w--) { __.nodes = CreateCronNode(exp[w], __.nodes, PARTS[w]); } } /* *(^\*$)|(^[1-5]?[0-9]([-/][1-5]?[0-9])?$)|(^[1-5]?[0-9](,[1-5]?[0-9])+$) (^\*$)|(^[1-5]?[0-9]([-/][1-5]?[0-9])?$)|(^[1-5]?[0-9](,[1-5]?[0-9])+$) (^\*$)|(^[1-2]?[0-9]([-/][1-2]?[0-9])?$)|(^[1-2]?[0-9](,[1-2]?[0-9])+$) (^[\*\?]$)|(^[1-3]?[0-9]([-/][1-3]?[0-9])?$)|(^[1-3]?[0-9]?[LWC]$)|(^[1-3]?[0-9](,[1-3]?[0-9])+$) (^\*$)|(^1?[0-9]([-/]1?[0-9])?$)|(^1?[0-9](,1?[0-9])+$) (^[\*\?]$)|(^[1-7]([-/#][1-7])?$)|(^[1-7]?[LC]$)|(^[1-7](,[1-7])+$) (^\*$)|(^[0-9]{4}([-/][0-9]{4})?$)|(^[0-9]{4}(,[0-9]{4})+$) FieldName = new String[] { "秒", "分", "小时", "日期", "月", "星期", "年" }; */ (0, _createClass3.default)(Cron, [{ key: 'next', value: function next() { var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); var _pri41 = pri(this), _ = _pri41._, __ = _pri41.__; var container = new DateTimeContainer(); container.SetDateTime(time.add('s', 1)); while (__.nodes.Next(container)) {} return container.GetDateTime(); } }]); return Cron; }(); exports.default = { Cron: Cron }; var pri = _tool2.default.pris(); //# sourceMappingURL=cron.js.map