gcl
Version:
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
1,602 lines (1,461 loc) • 61.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SNOWID = exports.GUID = exports.xml = exports.decodeEmoji = exports.encodeEmoji = exports.applyCAE = exports.include = exports.SHA1PRNG = exports.xdcrypt_a1e = exports.xcrypt_a1e = exports.xdcryptiv = exports.xcryptiv = exports.xdcrypt = exports.xcrypt = exports.xverify = exports.xsign = exports.xhmac = exports.xhash = exports.md5 = exports.create = exports.create2 = exports.inherits = exports.merge = exports.getType = exports.toTJson = exports.json = exports.toJsonString = exports.decHtml = exports.encHtml = exports.formatPrice = exports.hash2 = exports.hash = exports.hashRandom = exports.random = exports.callback = exports.callback2 = exports.tnext = exports.next = exports.finalC = exports.forC = exports.each = exports.whileC = exports.once = exports.isArray = exports.watch = exports.tryC2 = exports.tryC = exports.tryF = exports.showEx = exports.showException = exports.sb = exports.format = exports.pris = exports.getValue = exports.isValid = exports.desc = exports.link = exports.prop = exports.environment = undefined;
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray");
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _stringify = require("babel-runtime/core-js/json/stringify");
var _stringify2 = _interopRequireDefault(_stringify);
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
var _typeof2 = require("babel-runtime/helpers/typeof");
var _typeof3 = _interopRequireDefault(_typeof2);
var _apply = require("babel-runtime/core-js/reflect/apply");
var _apply2 = _interopRequireDefault(_apply);
var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator");
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _promise = require("babel-runtime/core-js/promise");
var _promise2 = _interopRequireDefault(_promise);
var _symbol = require("babel-runtime/core-js/symbol");
var _symbol2 = _interopRequireDefault(_symbol);
var _util = require("util");
var _util2 = _interopRequireDefault(_util);
var _path = require("path");
var _crypto = require("crypto");
var _v = require("uuid/v4");
var _v2 = _interopRequireDefault(_v);
var _snowflakeId = require("snowflake-id");
var _snowflakeId2 = _interopRequireDefault(_snowflakeId);
var _decimal = require("decimal.js");
var _decimal2 = _interopRequireDefault(_decimal);
var _fastXmlParser = require("fast-xml-parser");
var _fastXmlParser2 = _interopRequireDefault(_fastXmlParser);
var _he = require("he");
var _he2 = _interopRequireDefault(_he);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/*
减少语句路径
少用pop,push 改为i++--操作和[length]=new
频繁new的对象改为inherit2方法 尽管inherit2方法无法私有对象
多用三元?少用if
多用空方法 少用if
除非必须 少用delete
使用 || 代替 getValue 或者3元
使用for if(i++>1) 判断是否为空
使用substr lastIndexOf 代替split
尽量使用原生方法(native)代替自己的方法
*/
var environment = exports.environment = {
os: process.cwd().indexOf("\\") >= 0 ? "windows" : "linux/unix",
splitChar: process.cwd().indexOf("\\") >= 0 ? "\\" : "/"
};
/**
* 采用代理模式给类和类内方法添加属性
* @param(调用时的原方法对象,键值,键值上的一个新值)
* @returns decorator
*/
var prop = exports.prop = function prop(target, k, v) {
target[k] = target[k] || [];
target[k].push(v);
};
/**
* 添加link属性用于连接方法需求
* @param (link)
*/
var link = exports.link = function link(url) {
return function (target) {
return prop(target, "link", url);
};
};
/**
* 添加多个desc属性用于动态显示方法描述
* @param (desc)
*/
var desc = exports.desc = function desc(des) {
return function (target) {
return prop(target, "desc", des);
};
};
/**
* 判断对象是否有效 含有 not in (null,undefined,'null','',\s+,0,false)
*/
var isValid = exports.isValid = function isValid(data) {
return !!data && (data.replace == undefined || data.replace(/\s/g, "").length > 0);
};
/**
* 三元表达式,简化 多数情况可以用默认值或者 value || defaultValue 替换,但是当其为null时则不好判断
*/
var getValue = exports.getValue = function getValue(data, defaultData) {
return isValid(data) ? data : defaultData;
};
/**
* 私有方法,返回_,__命名的一个自身对象和一个私有对象。一般在类方法第一句使用
* @param(this,__)
* @return({this,private})
*/
var pris = exports.pris = function pris() {
var key = (0, _symbol2.default)("private");
return function (obj, priv) {
obj[key] = (priv ? merge(obj[key], priv) : obj[key]) || {};
return {
_: obj,
__: obj[key]
};
};
};
/**
* 字符串格式化,使用<%k.v%>,{k.v}等等方式进行递进的属性替换,当字符串模板不可用时使用。
*/
var format = exports.format = function format(s, o) {
if (!s || !o) {
return getValue(s, "");
}
if (s.indexOf("<%=") >= 0) return __.funrep(s, o, /<%=[^(%>)]+%>/gi, /<%=/g, /%>/g);
if (s.indexOf("{") >= 0) return __.funrep(s, o, /\{[^(})]+\}/gi, /\{/g, /\}/g);
return s;
};
/**
* 返回私有StringBuilder对象实例,含有
*/
var sb = exports.sb = function sb() {
return new __.StringBuilder();
};
var showException = exports.showException = function showException() {
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var e = arguments[1];
if (isValid(e)) {
name += "\r\nmessage:" + getValue(e.message, e) + (e.stack ? "\r\nstack:" + e.stack + (e.fileName ? "\r\nfile:" + e.fileName : "") + (e.lineNumber ? "\r\nlineNumber:" + e.lineNumber : "") : e.description ? "\r\ndescription:" + e.description : "");
console.log(name);
}
};
var _showEx = showException;
exports.showEx = _showEx;
var tryF = exports.tryF = function tryF(func, errcall) {
return new Proxy(func, __.tryHandle(errcall));
};
var tryC = exports.tryC = function tryC(func, errcall) {
return tryF(func, errcall)();
};
var tryC2 = exports.tryC2 = function tryC2(err, func, errcall) {
return err ? (errcall || __.showEx)(e) : tryC(func, errcall);
};
var watch = exports.watch = function watch(restart) {
if (!__.start || restart) {
__.start = new Date();
console.log("VESH.watch开始" + __.start);
} else {
console.log("VESH.watch 持续了:" + __.start.diff("ms", new Date()));
}
};
var isArray = exports.isArray = _util2.default.isArray;
var once = exports.once = function once(func, timeout) {
timeout = timeout || 1;
if (func.timeoutID) {
clearTimeout(func.timeoutID);
}
if (timeout == 1) process.nextTick(function () {
return tryC(func);
});else func.timeoutID = setTimeout(function () {
return tryC(func);
}, timeout);
};
//exp的非链式操作与链式操作,非链式不保证执行顺序,链式保证执行顺序,对象的随机并发操作与顺序执行,数组的map随机并发操作与顺序执行
//使用once满足非promise截止的请求,循环全部是promise截止的r
//根据执行的源头不同分为 whileC(链式、非链式,promise),forC(链式、非链式,promise),each(链式、非链式,promise),next(链式 promise),finalC(非链式 promise) 不同种类 根据链式与非链式,
//保证异步的同步执行
//保证当直接返回true或者call(null,true)时中断循环
var whileC = exports.whileC = function whileC(exp, func) {
var isSequ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
return isSequ ? isSequ > 1 ? __.disorderlWhile(exp, func, isSequ) : __.sequfunc(exp, func, exp()) : __.disorderfunc(exp, func, exp());
};
var each = exports.each = function each(data, func) {
var isSequ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
return isSequ ? isSequ > 1 ? __.disorderlEach(data, func, isSequ) : __.sequEach(data, func) : __.disorderEach(data, func);
};
var forC = exports.forC = function forC(obj, func) {
var isSequ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
return isSequ ? isSequ > 1 ? __.disorderlFor(obj, func, isSequ) : __.sequFor(obj, func) : __.disorderFor(obj, func);
};
var finalC = exports.finalC = function finalC() {
for (var _len = arguments.length, funs = Array(_len), _key = 0; _key < _len; _key++) {
funs[_key] = arguments[_key];
}
var data = {},
finalF = funs.pop();
return each(funs, function (v) {
return callback2(v, null, data);
}).then(function () {
return callback2(finalF, null, data);
});
};
var next = exports.next = function next() {
for (var _len2 = arguments.length, funs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
funs[_key2] = arguments[_key2];
}
var data = {};
return each(funs, function (v) {
return callback2(v, null, data);
}, true);
};
/**
* 用于链式处理事务 参数为成对定义的正向和回滚方法{go:func,rollback:func} 也可简写为 {g:func,r:func}
*/
var tnext = exports.tnext = function tnext() {
for (var _len3 = arguments.length, funs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
funs[_key3] = arguments[_key3];
}
var i = 1;
var data = {},
goerr = function goerr() {
throw new Error("请在第" + i + "个对象定义g或者go方法");
},
rollbacks = [];
return each(funs, function (v) {
return callback2(v.g || v.go || goerr, v, data).then(function (v2) {
rollbacks.unshift(v.r || v.rollback || function () {
throw new Error("请在第" + i + "个对象定义r或者rollback方法");
}());
i++;
return v2;
}).catch(function (e2) {
if (typeof e2 === "string" || typeof e2 === "boolean") rollbacks.unshift(v.r || v.rollback || function () {
throw new Error("请在第" + i + "个对象定义r或者rollback方法");
}());
throw typeof e2 === "string" ? new Error(e2) : e2;
});
}, true).catch(function (e) {
return next.apply(undefined, rollbacks).then(function () {
throw e;
});
});
};
/**
* 异步改同步请求
* 兼容直接返回值,返回一个Promise或者返回undefined 最后一个参数调用call(e,data) 三种情况
* @param {*} args
*/
var callback2 = exports.callback2 = function callback2() {
var _this2 = this;
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
return new _promise2.default(function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(re, rj) {
var call, func, _this, paras, data;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
call = function call(e, data) {
return e ? rj(e) : re(data);
};
func = args[0];
_this = args[1] || null;
paras = args.slice(2).concat([call]);
data = (0, _apply2.default)(func, _this, paras); //this 不对 Reflect.apply(func, null, paras);
if (!(data && data.then)) {
_context.next = 13;
break;
}
_context.next = 9;
return data;
case 9:
_context.t0 = _context.sent;
if (_context.t0) {
_context.next = 12;
break;
}
_context.t0 = false;
case 12:
data = _context.t0;
case 13:
_context.t1 = typeof data === "undefined" ? "undefined" : (0, _typeof3.default)(data);
_context.next = _context.t1 === "function" ? 16 : _context.t1 === "undefined" ? 17 : 18;
break;
case 16:
data(call);
case 17:
return _context.abrupt("break", 20);
case 18:
call(null, data);
return _context.abrupt("break", 20);
case 20:
_context.next = 25;
break;
case 22:
_context.prev = 22;
_context.t2 = _context["catch"](0);
rj(_context.t2);
case 25:
case "end":
return _context.stop();
}
}
}, _callee, _this2, [[0, 22]]);
}));
return function (_x5, _x6) {
return _ref.apply(this, arguments);
};
}());
};
/**
* 仅适用最后一个参数为call的情况
* @param {*} args
*/
var callback = exports.callback = function callback() {
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
var func = args[0];
args[0] = function () {
var that = this;
for (var _len6 = arguments.length, args2 = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
args2[_key6] = arguments[_key6];
}
(0, _apply2.default)(func, that, args2);
};
return callback2.apply(undefined, args);
};
var random = exports.random = function random() {
return parseInt("" + __.index++ + new Date().getTime());
};
var hashRandom = exports.hashRandom = function hashRandom() {
var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var max = arguments[1];
return Math.floor(Math.abs(hash(guid()) % (max - min))) + min;
};
/**
* 获取字符串的哈希值
* @param {String} str
* @param {Boolean} caseSensitive
* @return {Number} hashCode
*/
var hash = exports.hash = function hash(str) {
var caseSensitive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
str = str.toString();
if (!caseSensitive) {
str = str.toLowerCase();
}
// 1315423911=b'1001110011001111100011010100111'
var hash = 1315423911,
i = void 0,
ch = void 0;
for (i = str.length - 1; i >= 0; i--) {
ch = str.charCodeAt(i);
hash ^= (hash << 5) + ch + (hash >> 2);
}
return hash & 0x7fffffff;
};
/**
* 获取字符串的sha1 base64 哈希值
* @param {String} str
* @param {Boolean} caseSensitive
* @return {Number} hashCode
*/
var hash2 = exports.hash2 = function hash2(str) {
var ret = (0, _crypto.createHash)("sha256").update(str).digest("base64");
return ret.substr(0, 2) + ret.substr(11, 1) + ret.substr(3, 10) + ret.substr(2, 1) + ret.substr(12);
};
var formatPrice = exports.formatPrice = function formatPrice(number, decimals, dec_point, thousands_sep) {
number = (number + "").replace(/[^0-9+-Ee.]/g, "");
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
sep = typeof thousands_sep === "undefined" ? "," : thousands_sep,
dec = typeof dec_point === "undefined" ? "." : dec_point,
s = "",
toFixedFix = function toFixedFix(n, prec) {
var k = Math.pow(10, prec);
return "" + Math.round(n * k) / k;
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split(".");
if (s[0].length > 3) {
s[0] = s[0].replace(/B(?=(?:fd{3})+(?!d))/g, sep);
}
if ((s[1] || "").length < prec) {
s[1] = s[1] || "";
s[1] += new Array(prec - s[1].length + 1).join("0");
}
return s.join(dec);
};
/**
* 只更新标点符号不更新全半角文字的encode
* @param {String} html
* @return {String} encodeURIComponent之后的字段
*/
//replace(/[\r\n]+/g, '>v>j>').replace(/\s+/g, ' ').replace(/>v>j>/g, '\r\n').
var encHtml = exports.encHtml = function encHtml() {
var html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
return ((html || "").match(__.encmatch) || []).join("").replace(__.encreg, function (a) {
return __.encother[a] || encodeURIComponent(a);
});
};
var decHtml = exports.decHtml = function decHtml() {
var html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
return decodeURIComponent(html);
};
var toJsonString = exports.toJsonString = _stringify2.default;
var json = exports.json = JSON.parse;
/**
*
* @param {*} 二维数组
* @param {*} 是否需要引号
*/
var toTJson = exports.toTJson = function toTJson() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var quotation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (!isArray(data)) data = [data];
var res = [];
if (data[0] && isArray(data[0])) {
for (var i in data) {
res[i] = toTJson(data[i]);
}
} else {
//找到第一个不是数组的实例对象进行处理
res[0] = [];
for (var k in data[0]) {
res[0].push(quotation ? '"' + k + '"' : "" + k);
}
for (var v in data) {
var obj = [];
for (var k2 in data[v]) {
obj.push(__.getTJsonValue(data[v][k2], quotation));
}res.push(obj);
}
}
return res;
};
var getType = exports.getType = function getType() {
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (x == null) {
return "null";
}
var t = typeof x === "undefined" ? "undefined" : (0, _typeof3.default)(x);
if (t != "object" && t != "Object") {
return t;
}
if (isArray(x)) {
return "Array";
}
var c = Object.prototype.toString.apply(x);
c = c.substring(8, c.length - 1);
if (c != "Object") {
return c;
}
if (x.constructor == Object) {
return c;
}
if (x.prototype && "classname" in x.prototype.constructor && typeof x.prototype.constructor.classname == "string") {
return x.constructor.prototype.classname;
}
return "ukObject";
};
var merge = exports.merge = function merge() {
for (var _len7 = arguments.length, argu = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
argu[_key7] = arguments[_key7];
}
if (argu.length < 2) {
return argu[0] ? argu[0] : {};
}
if (argu.length > 0 && true === argu[argu.length - 1]) {
var _ = argu[0];
for (var i2 = 1; i2 < argu.length; i2++) {
_ = __.merge(_, argu[i2]);
}return _;
} else {
var _2 = {};
for (var _i = 0; _i < argu.length; _i++) {
_2 = __.merge(_2, argu[_i]);
}return _2;
}
};
var inherits = exports.inherits = function inherits(parent, args) {
//绕过了parent的构造函数,重新链接原型链条
var _temp = function () {
var F = function F() {};
_util2.default.inherits(F, parent);
//F.prototype = parent.prototype;
F.prototype.isF = true;
return new F();
}();
_temp.constructor = parent;
if (!this.prototype) {
//这里确认是实例
//确定是打断了原型链 使得this的原型为Object
parent.apply(this, args);
//从新接驳原型链 使得原型链上的prototype都设置到最早的类的prototype上了
if (this.__proto__ && !this.__proto__.isF) {
_util2.default.inherits(this.__proto__.constructor, _temp.__proto__.constructor);
//this.__proto__.constructor.prototype = _temp.__proto__.constructor.prototype;
}
//son.prototype = _temp; //这里可以分层 但是会使得prototype实例变了又变 废弃
this.__proto__ = _temp;
//父类方法只能找到静态方法
this.base = this.__proto__.constructor.prototype;
} else {
console.log("如果失败,需要配合子类构造函数中使用parent.apply(this,[***])");
//这里确认是类定义
this.prototype = _temp;
}
};
var create2 = exports.create2 = function create2(type, args) {
if (typeof type == "function") {
return new (Function.prototype.bind.apply(type, [null].concat((0, _toConsumableArray3.default)(args))))();
} else showException("请传入类定义");
};
var create = exports.create = function create(type, args) {
if (typeof type == "function") {
args = Array.isArray(args) ? args : [args];
var ret = "(new type(";
if (Array.isArray(args)) {
for (var i in args) {
ret += "args[" + i + "],";
}
if (args.length > 0) {
ret = ret.substr(0, ret.length - 1);
}
}
return eval(ret + "))");
} else showException("请传入类定义");
};
/**
* 分别尝试全路径.js/全路径.njs/全路径加载类 并对处理结果进行缓存 会导致热更新失败错误!
* @param {text} md5源串
*/
var md5 = exports.md5 = function md5(text) {
return (0, _crypto.createHash)("md5").update(text, "utf-8").digest("hex");
};
/**
* 扩展hash
* https://www.jb51.net/article/50668.htm
* @param {string} text 原文
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 utf8
* @param {string} ocode 出栈 譬如 hex
*/
var xhash = exports.xhash = function xhash(text) {
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "md5";
var ecode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "utf8";
var ocode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "hex";
return (0, _crypto.createHash)(type).update(text, ecode).digest(ocode);
};
/**
* 带秘钥hash
* https://www.jb51.net/article/50668.htm
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 utf8
* @param {string} ocode 出栈 譬如 hex
*/
var xhmac = exports.xhmac = function xhmac(text, key) {
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "sha256";
var ecode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "utf8";
var ocode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "base64";
return (0, _crypto.createHmac)(type, key).update(text, ecode).digest(ocode);
};
/**
* 带秘钥生成签名
* https://www.jb51.net/article/50668.htm
* openssl list-public-key-algorithms 看所有的签名算法
* @param {*} text
* @param {*} key
* @param {*} type
* @param {*} keycode
*/
var xsign = exports.xsign = function xsign(text, key) {
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "RSA-SHA256";
var keycode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "hex";
var sign = (0, _crypto.createSign)(type);
sign.update(text);
return sign.sign(key, keycode);
};
/**
* 带秘钥验证签名
* https://www.jb51.net/article/50668.htm
* openssl list-public-key-algorithms 看所有的签名算法
* @param {*} text
* @param {*} key
* @param {*} type
* @param {*} keycode
*/
var xverify = exports.xverify = function xverify(text, key) {
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "RSA-SHA256";
var keycode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "hex";
var sign = (0, _crypto.createVerify)(type);
sign.update(text);
return sign.verify(key, keycode);
};
/**
* 加密
* https://www.jb51.net/article/50668.htm
* https://blog.csdn.net/shmnh/article/details/48254001?utm_source=blogxgwz0
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 utf8
* @param {string} ocode 出栈 譬如 base64
*/
var xcrypt = exports.xcrypt = function xcrypt(text, key) {
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "aes-256-cbc";
var ecode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "utf8";
var ocode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "base64";
var cipher = (0, _crypto.createCipher)(type, key);
return cipher.update(text, ecode, ocode) + cipher.final(ocode);
};
/**
* 解密
* https://www.jb51.net/article/50668.htm
* https://blog.csdn.net/shmnh/article/details/48254001?utm_source=blogxgwz0
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 base64
* @param {string} ocode 出栈 譬如 utf8
*/
var xdcrypt = exports.xdcrypt = function xdcrypt(text, key) {
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "aes-256-cbc";
var ecode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "base64";
var ocode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "utf8";
var cipher = (0, _crypto.createDecipher)(type, key);
return cipher.update(text, ecode, ocode) + cipher.final(ocode);
};
/**
* 加密
* https://www.jb51.net/article/50668.htm
* https://blog.csdn.net/shmnh/article/details/48254001?utm_source=blogxgwz0
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} iv 偏移 一般是 8或者16位默认可用Buffer.alloc(0)
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 utf8
* @param {string} ocode 出栈 譬如 base64
*/
var xcryptiv = exports.xcryptiv = function xcryptiv(text, key) {
var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Buffer.alloc(0);
var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "aes-256-cbc";
var ecode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "utf8";
var ocode = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "base64";
var cipher = (0, _crypto.createCipheriv)(type, key, iv);
return cipher.update(text, ecode, ocode) + cipher.final(ocode);
};
/**
* 解密
* https://www.jb51.net/article/50668.htm
* https://blog.csdn.net/shmnh/article/details/48254001?utm_source=blogxgwz0
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} iv 偏移 一般是 8或者16位默认可用Buffer.alloc(0)
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 base64
* @param {string} ocode 出栈 譬如 utf8
*/
var xdcryptiv = exports.xdcryptiv = function xdcryptiv(text, key) {
var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Buffer.alloc(0);
var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "aes-256-cbc";
var ecode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "base64";
var ocode = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "utf8";
var cipher = (0, _crypto.createCipheriv)(type, key, iv);
return cipher.update(text, ecode, ocode) + cipher.final(ocode);
};
/**
* 加密 已经被 xcryptiv取代
* https://www.jb51.net/article/50668.htm
* https://blog.csdn.net/shmnh/article/details/48254001?utm_source=blogxgwz0
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} ecode 入栈 譬如 utf8
* @param {string} ocode 出栈 譬如 base64
*/
var xcrypt_a1e = exports.xcrypt_a1e = function xcrypt_a1e(text, key) {
var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var ecode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "utf8";
var ocode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "base64";
var cipher = (0, _crypto.createCipheriv)("aes-128-ecb", key, iv);
cipher.setAutoPadding(true);
return cipher.update(text, ecode, ocode) + cipher.final(ocode);
};
/**
* 解密 已经被 xdcryptiv取代
* https://www.jb51.net/article/50668.htm
* https://blog.csdn.net/shmnh/article/details/48254001?utm_source=blogxgwz0
* @param {string} text 原文
* @param {string} key 秘钥 譬如 111
* @param {string} type 算法 譬如 md5
* @param {string} ecode 入栈 譬如 base64
* @param {string} ocode 出栈 譬如 utf8
*/
var xdcrypt_a1e = exports.xdcrypt_a1e = function xdcrypt_a1e(text, key) {
var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var ecode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "base64";
var ocode = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "utf8";
var cipher = (0, _crypto.createDecipheriv)("aes-128-ecb", key, iv);
cipher.setAutoPadding(true);
return cipher.update(text, ecode, ocode) + cipher.final(ocode);
};
/**
专门给Java 的 AES方法提供密码转换,
https://www.zhihuclub.com/149867.shtml
一般可以用 xdcrypt_a1e(string,SHA1PRNG(key)); 与Java互通
*/
var SHA1PRNG = exports.SHA1PRNG = function SHA1PRNG(pwd) {
return Buffer.from((0, _crypto.createHash)("sha1").update((0, _crypto.createHash)("sha1").update(pwd).digest("buffer")).digest("hex").substring(0, 32), "hex");
};
/**
* 分别尝试全路径.js/全路径.njs/全路径加载类 并对处理结果进行缓存 会导致热更新失败错误!
* @param {文件上级路径} path
* @param {类名} base
*/
var include = exports.include = function include(path) {
var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var paths = path + "|" + base;
return __.include[paths] || function () {
if (__.unclude[paths]) throw new Error("\u52A0\u8F7D" + paths + "\u5931\u8D25!");
__.include[paths] = function () {
try {
if (path.startWith("\\") || path.startWith("/")) {
base = base ? format(base) : (0, _path.parse)((0, _path.resolve)((0, _path.normalize)(process.mainModule.filename))).dir;
if ("windows".eq(environment.os || "")) {
//windows
base = base.replace(/\//g, "\\");
path = path.trim("/").trim("\\").replace(/\//g, "\\");
} else {
//linux
base = base.replace(/\\\\/g, "/");
path = path.trim("\\").trim("/").replace(/\\\\/g, "/");
}
try {
try {
return require("" + base + environment.splitChar + path + ".njs");
} catch (e2) {
if (path.endWith("action") && e2.message.indexOf("action.njs") < 0) console.log("" + base + environment.splitChar + path + ".njs \u52A0\u8F7D\u5931\u8D25!", e2.stack);
return require("" + base + environment.splitChar + path + ".js");
}
} catch (e3) {
return require(path);
}
} else return require(path);
} catch (e) {
//console.log(e.stack);
__.unclude[paths] = true;
throw new Error("\u52A0\u8F7D" + paths + "\u5931\u8D25!!" + e.stack);
}
}();
return __.include[paths];
}();
};
var applyCAE = exports.applyCAE = function applyCAE(S) {
//功能出现严重问题 无法在ES6下使用
S[__.settings] = {};
S[__.exsettings] = {};
//获取不存在就配置
S.getSettings = function (key, data) {
if (!isValid(S[__.settings][key])) {
if (isValid(S[__.exsettings][key])) {
S[__.settings][key] = merge(getValue(data, {}), S[__.exsettings][key]);
delete S[__.exsettings][key];
} else S[__.settings][key] = getValue(data, {});
}
return S[__.settings][key];
};
//扩展默认配置
S.extendSettings = function (key, data) {
if (isValid(S[__.settings][key])) {
S[__.settings][key] = merge(S[__.settings][key], data);
} else {
if (S.exSettings[key]) {
S[__.exsettings][key] = merge(S[__.exsettings][key], getValue(data, {}));
} else {
S[__.exsettings][key] = getValue(data, {});
}
}
};
S.clearSettings = function () {
S[__.settings] = {};
};
S.registCommand = function (name, func) {
var comms = S.getSettings("comms", []);
var data = comms[name];
if (isValid(data) && typeof data != "function") {
func.apply(null, data);
}
comms[name] = func;
};
/*
V用于调用被调用页面注册的命令以处理异步命令调用,当命令尚未注册而已经被调用时,参数会先被缓存下来,然后当命令注册时,已知的参数再被调用。
--案例
S.callCommand('showXXList',[{id:1}])
*/
S.callCommand = function (name, data) {
var caller = null;
var comms = S.getSettings("comms", []);
var func = comms[name];
data = isArray(data) ? data : [data];
if (isValid(func) && typeof func == "function") {
once(function () {
func.apply(caller, data);
});
} else {
comms[name] = data;
}
};
/*
用来判断是否调用页面,当已经调用过(part),返回true,否则返回false;
--案例
if (!S.hasCommand('editor.open')) S.part("/FileServer/layout/editor/editor.htm");
*/
S.hasCommand = function (name) {
var comms = S.getSettings("comms", []);
var func = comms[name];
return isValid(func) && typeof func == "function";
};
/*
仅限iframe方式调用时,先取消原页面添加的方法
//业务逻辑深度交叉,iframe落后的控件连接方式时使用
一定要在part前
--案例
S.cleanCommand('editor.open');
S.part("/FileServer/layout/editor/editor.htm",null,"iframe",function(){});
*/
S.cleanCommand = function (name) {
var comms = S.getSettings("comms", []);
delete comms[name];
};
/*
V用于被调用页面注册命令以处理异步命令调用,当命令尚未注册而已经被调用时,参数会先被缓存下来,然后当命令注册时,已知的参数再被调用。
并约定1分钟内 允许注册者多次被触发
--案例
S.registEvent('showXXList',getData),S.registEvent(['showXXList',''],getData)
*/
S.registEvent = function (name, func, isTop) {
var fun = function fun(name, func, isTop) {
var events = S.getSettings("events", []);
var funs = events[name];
if (!isValid(funs)) {
funs = [];
events[name] = funs;
}
if (typeof func == "function") {
if (isTop && !funs.top) {
funs.top = func;
funs.unshift(func);
} else {
if (isTop && funs.top) {
showException("S.registEvent:" + name + " 事件已经有订阅者被置顶!");
}
funs.push(func);
}
var ecall = S.getSettings("eventcall", {});
ecall = ecall[name] ? ecall[name] : {};
if (ecall.time && ecall.time >= new Date().getTime()) {
once(function () {
func.apply(ecall.caller, ecall.data);
});
}
}
};
if (isArray(name)) {
each(name, function (v) {
fun(v, func, isTop);
return false;
}, true);
} else {
fun(name, func, isTop);
}
};
/*
V用于调用被调用页面注册的事件以处理异步命令调用,当命令尚未注册而已经被调用时,参数会先被缓存下来,然后当命令注册时,已知的参数再被调用。
并约定1分钟内 允许注册者多次被触发
--案例
S.callEvent('showXXList',[{id:1}])
*/
S.callEvent = function (name, data) {
var caller = null;
var events = S.getSettings("events", []);
var funs = events[name];
data = isArray(data) ? data : [data];
if (isValid(funs) && isArray(funs)) {
each(funs, function (func) {
//报错不下火线
tryC(function () {
func.apply(caller, data);
});
});
}
var ecall = S.getSettings("eventcall", {});
if (!ecall[name]) {
ecall[name] = {};
}
ecall = ecall[name];
ecall.time = new Date().add("n", 1).getTime();
ecall.data = data;
ecall.caller = caller;
};
/*
用来判断是否调用页面,当已经调用过(part),返回true,否则返回false;
--案例
if (!S.hasEvent('editor.open')) S.part("/FileServer/layout/editor/editor.htm");
*/
S.hasEvent = function (name) {
var events = S.getSettings("events", []);
var funs = events[name];
if (isValid(funs) && isArray(funs)) {
return true;
}
return false;
};
/*
仅限iframe方式调用时,先取消原页面添加的方法
//业务逻辑深度交叉,iframe落后的控件连接方式时使用
一定要在part前
--案例
S.cleanEvent('editor.open');
S.part("/FileServer/layout/editor/editor.htm",null,"iframe",function(){});
*/
S.cleanEvent = function (name) {
var events = S.getSettings("events", []);
delete events[name];
};
};
/**
* 转换Emoji为base64格式
* @param {*} str
*/
var encodeEmoji = exports.encodeEmoji = function encodeEmoji(str) {
return __.convert2Base64(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {
return String.fromCharCode("0x" + p1);
}));
};
/**
* base64还原emoji
* @param {*} str
*/
var decodeEmoji = exports.decodeEmoji = function decodeEmoji(str) {
var ret;
try {
ret = __.convert2Binary(str).split("");
var ret2 = [];
ret.forEach(function (c) {
ret2.push("%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2));
});
return decodeURIComponent(ret2.join(""));
} catch (e) {
ret = decodeURIComponent(str);
}
return ret || str;
};
/**
* 生成xml解析对象 toJson用于转换xml2Json toXml用于转换json2xml
* @param {config} config
* 譬如 attributeNamePrefix: "@_",
attrNodeName: "attr", //default is 'false'
textNodeName: "#text",
ignoreAttributes: true,
ignoreNameSpace: false,
allowBooleanAttributes: false,
parseNodeValue: true,
parseAttributeValue: false,
trimValues: true,
cdataTagName: "__cdata", //default is 'false'
cdataPositionChar: "\\c",
localeRange: "", //To support non english character in tag/attribute values.
parseTrueNumberOnly: false,
attrValueProcessor: a => he.decode(a, { isAttributeValue: true }), //default is a=>a
tagValueProcessor: a => he.decode(a) //default is a=>a
*/
var xml = exports.xml = function xml(config) {
config = merge(__.xmloptions, config || {});
var Jconfig = merge(config, {
tagValueProcessor: function tagValueProcessor(a) {
return _he2.default.encode(a, { useNamedReferences: true });
}, // default is a=>a
attrValueProcessor: function attrValueProcessor(a) {
return _he2.default.encode(a, { isAttributeValue: isAttribute, useNamedReferences: true });
} // default is a=>a
});
var j2x = new _fastXmlParser2.default.j2xParser(config);
var ret = {
toXml: function toXml(json) {
try {
return j2x.parse({ xml: json });
} catch (e) {
if (e.message.indexOf("html.replace") >= 0) throw new Error("toXml:JSON中的值不能是非字符串内容!");else throw e;
}
},
toJson: function toJson(xml) {
xml = (xml + "").replace(/(<\?).+\?>/g, "");
!xml.startWith("<xml") && (xml = "<xml>" + xml + "</xml>");
return ret.deCDATA(_fastXmlParser2.default.parse(xml), Jconfig);
},
deCDATA: function deCDATA(json) {
for (var k in json) {
if (json[k][config.cdataTagName]) json[k] = json[k][config.cdataTagName];else if ((0, _typeof3.default)(json[k]) == "object") ret.deCDATA(json[k]);
}
return json.xml;
}
};
return ret;
};
/**
* 生成GUID
*/
var GUID = exports.GUID = function GUID() {
return (0, _v2.default)().replace(/\-/g, "");
};
var SnowId = null;
/**
* 生成雪花ID
*/
var SNOWID = exports.SNOWID = function SNOWID() {
if (!SnowId) SnowId = new _snowflakeId2.default({
mid: 42,
offset: (new Date().getFullYear() - 1970) * 31536000 * 1000
});
return SnowId.generate();
};
exports.default = {
environment: environment,
prop: prop,
link: link,
desc: desc,
isValid: isValid,
getValue: getValue,
format: format,
sb: sb,
showEx: _showEx,
showException: showException,
include: include,
random: random,
hashRandom: hashRandom,
tryC: tryC,
tryC2: tryC2,
watch: watch,
isArray: isArray,
once: once,
whileC: whileC,
forC: forC,
each: each,
finalC: finalC,
next: next,
callback: callback,
callback2: callback2,
encHtml: encHtml,
decHtml: decHtml,
toJsonString: toJsonString,
json: json,
merge: merge,
inherits: inherits,
create: create,
create2: create2,
applyCAE: applyCAE,
pris: pris,
hash: hash,
hash2: hash2,
toTJson: toTJson,
getType: getType,
formatPrice: formatPrice,
encodeEmoji: encodeEmoji,
decodeEmoji: decodeEmoji,
GUID: GUID,
md5: md5,
xhash: xhash,
xhmac: xhmac,
xsign: xsign,
xverify: xverify,
xcrypt: xcrypt,
xdcrypt: xdcrypt,
xml: xml,
xcrypt_a1e: xcrypt_a1e,
xdcrypt_a1e: xdcrypt_a1e,
SHA1PRNG: SHA1PRNG,
SNOWID: SNOWID,
xcryptiv: xcryptiv,
xdcryptiv: xdcryptiv
};
//const symbol = Symbol;
var pri = pris();
var __ = {
settings: (0, _symbol2.default)("settings"),
exsettings: (0, _symbol2.default)("exsettings"),
encreg: /<|>|~|(\r\n)|!|@|#|\$|%|\^|;|\*|\(|\)|_|\+|\{|\}|\||:|\"|\?|`|\-|=|\[|\]|\\|;|\'|,|\.|\/|,|;|\s/g,
encmatch: /[a-zA-Z0-9\u4E00-\u9FA5\uF900-\uFA2D]|[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]|<|>|~|(\r\n)|!|@|#|\$|%|\^|;|\*|\(|\)|_|\+|\{|\}|\||:|\"|\?|`|\-|=|\[|\]|\\|;|\'|,|\.|\/|,|;|\s/g,
encother: {
"(": "%28",
")": "%29",
"*": "%2a",
"'": "%27",
".": "%2e",
"-": "%2d",
_: "%5f"
},
funrep: function funrep(s, o, reg, lreg, rreg) {
return s.replace(reg, function (word) {
var key = "" + word.replace(lreg, "").replace(rreg, "");
return typeof o[key] == "undefined" ? "" : o[key];
});
},
/**
* StringBuilder nodejs版本 用于连续操作字符串对象而不经常移动数组 比较准确快捷的修改字符串内容
*/
StringBuilder: function () {
function StringBuilder() {
(0, _classCallCheck3.default)(this, StringBuilder);
var that = this;
var _pri = pri(that, {
data: [],
length: 0,
append: function append() {
var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var _pri2 = pri(that),
_ = _pri2._,
__ = _pri2.__;
__.data.push(str);
__.length += str.length;
}
}),
_ = _pri._,
__ = _pri.__;
}
(0, _createClass3.default)(StringBuilder, [{
key: "append",
value: function append(str) {
var _pri3 = pri(this),
_ = _pri3._,
__ = _pri3.__;
str = !!str ? __.append(str) : "";
return this;
}
}, {
key: "appendFormat",
value: function appendFormat(fmt, data) {
return this.append(format(fmt, data));
}
}, {
key: "insert",
value: function insert(start, data) {
var _pri4 = pri(this),
_ = _pri4._,
__ = _pri4.__;
var str = _.toString();
__.data = [str.substr(0, start), data, str.substr(start)];
__.length = str.length + data.length;
return this;
}
}, {
key: "insertFormat",
value: function insertFormat(start, fmt, data) {
this.insert(start, format(fmt, data));
}
}, {
key: "remove",
value: function remove(start, length) {
var _pri5 = pri(this),
_ = _pri5._,
__ = _pri5.__;
var str = _.toString();
__.data = [str.substr(0, start), str.substr(start + length)];
__.length = Math.max(0, str.length - length);
return _;
}
}, {
key: "toString",
value: function toString() {
var _pri6 = pri(this),
_ = _pri6._,
__ = _pri6.__;
__.data = [__.data.join("")];
return __.data[0];
}
}, {
key: "clear",
value: function clear() {
var ret = this.toString();
var _pri7 = pri(this),
_ = _pri7._,
__ = _pri7.__;
__.data = [];
__.length = 0;
return ret;
}
}, {
key: "length",
get: function get() {
return pri(this).__.length;
}
}]);
return StringBuilder;
}(),
showEx: function showEx(e) {
return _showEx("", e);
},
tryHandle: function tryHandle() {
var errcall = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : __.showEx;
return {
apply: function apply(target, context, proxy) {
try {
return _apply2.default.apply(Reflect, arguments);
} catch (e) {
try {
errcall(e);
} catch (e2) {
__.showEx(e);
}
}
}
};
},
start: null,
emptyfunc: function emptyfunc() {
return true;
},
sequfunc: function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(exp, func, val) {
var isStop;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
isStop = false;
case 1:
if (!(!isStop && val != undefined)) {
_context2.next = 9;
break;
}
_context2.next = 4;
return callback2(func, null, val);
case 4:
_context2.t0 = _context2.sent;
isStop = true === _context2.t0;
val = exp();
_context2.next = 1;
break;
case 9:
return _context2.abrupt("return", true);
case 10:
case "end":
return _context2.stop();
}
}
}, _callee2, undefined);
}));
return function sequfunc(_x47, _x48, _x49) {
return _ref2.apply(this, arguments);
};
}(),
disorderfunc: function disorderfunc(exp, func, val) {
var data = [];
while (val != undefined) {
data.push(callback2(func, null, val));
val = exp();
}
return _promise2.default.all(data);
},
disorderlfunc: function disorderlfunc(each, call) {
while (!each.isStop && each.i <= each.data.length - 1 && each.count < each.limit) {
each.count++;
callback2(each.func, null, each.data[each.i++]).then(function (ret) {
each.isStop = !!ret;
each.count--;
__.disorderlfunc(each, call);
}).catch(function (e) {
each.error = e;
each.isStop = true;
each.count--;
__.disorderlfunc(each, call);
});
}
if (each.count <= 0 && (each.isStop || each.i > each.data.length - 1)) call(each.error, true);
return true;
},
disorderlEach: function disorderlEach() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var func = arguments[1];
var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
var each = {
data: data,
func: func,
i: 0,
count: 0,
limit: limit,
isStop: false,
error: null
};
return callback2(function (call) {
__.disorderlfunc(each, call);
});
},
disorderffunc: function disorderffunc(each, call) {
while (!each.isStop && each.i <= each.data.length - 1 && each.count < each.limit) {
each.count++;
var val = each.data[each.i++];
callback2(each.func, null, val.k, val.v).then(function (ret) {
each.isStop = !!ret;
each.count--;
__.disorderffunc(each, call);
}).catch(function (e) {
each.error = e;
each.isStop = true;
each.count--;
__.disorderffunc(each, call);
});
}
if (each.count <= 0 && (each.isStop || each.i > each.data.length - 1)) call(each.error, true);
return true;
},
disorderlFor: function disorderlFor() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var func = arguments[1];
var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
var each = {
data: [],
func: func,
i: 0,
count: 0,
limit: limit,
isStop: false,
error: null
};
for (var k in data) {
each.data.push({ k: k, v: data[k] });
}
return callback2(function (call) {
__.disorderffunc(each, call);
});
},
disorderwfunc: function disorderwfunc(each, call) {
while (!each.isStop && each.now != null && each.count < each.limit) {
each.count++;
var val = each.now;
each.now = each.exp();
if (val != null) callback2(each.func, null, val).then(function (ret) {
each.isStop = !!ret;
each.count--;
__.disorderwfunc(each, call);
}).catch(function (e) {
each.error = e;
each.isStop = true;
each.count--;
__.disorderwfunc(each, call);
});
}
if (each.count <= 0 && (each.isStop || each.now == null)) call(each.error, true);
return true;
},
disorderlWhile: function disorderlWhile(exp, func) {
var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
var each = { exp: exp, func: func, i: 0, count: 0, limit: limit, isStop: false, error: null };
return callback2(function (call) {
each.now = exp();
__.disorderwfunc(each, call);
});
},
sequEach: function sequEach() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var func = arguments[1];
var i = 0;
return __.sequfunc(function () {
return data[i++];
}, func, data[i++]);
},
disorderEach: function disorderEach() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var func = arguments[1];
var ret = [];
data.forEach(function (k) {
return ret.push(callback2(func, null, k));
});
return _promise2.default.all(ret);
},
sequFor: function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var func = arguments[1];
var k;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.t0 = _regenerator2.default.keys(obj);
case 1:
if ((_context3.t1 = _context3.t0()).done) {
_context3.next = 10;
break;
}
k = _context3.t1.value;
_context3.next = 5;
return callback2(func, obj, k, obj[k]);
case 5:
_context3.t2 = _context3.sent;
if (!(true === _context3.t2)) {
_context3.next = 8;
break;
}
return _context3.abrupt("return", true);
case 8:
_context3.next = 1;
break;
case 10:
return _context3.abrupt("return", true);
case 11:
case "end":
return _context3.stop();
}
}
}, _callee3, undefined);
}));
return function sequFor() {
return _ref3.apply(this, arguments);
};
}(),
disorderFor: function disorderFor() {
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var func = arguments[1];
var data = [];
for (var k in obj) {
data.push(callback2(func, obj, k, obj[k]));
}return _promise2.default.all(data);
},
index: 0,
getTJsonValue: function getTJsonValue(p) {
var quotation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
switch (typeof p === "undefined" ? "undefined" : (0, _typeof3.default)(p)) {
//case 'number':
//case 'boolean':
// return p;
case "undefined":
return '""';
case "object":
switch (p + "") {
case "null":
return '""';
default:
return quotation ? '"' + (p + "").replace(/['"\\]/g, function (v) {
return "\\" + v;
}) + '"' : "" + p;
}
default:
return quotation ? '"' + (p + "").replace(/['"\\]/g, function (v) {
return "\\" + v;
}) + '"' : "" + p;
}
},
clone: function clone(source) {
switch (getType(source)) {
case "Object":
case "object":
return __.merge({}, source);
case "array":
case "Array":
var aim = [];
for (var i in source) {
aim.push(__.clone(source[i]));
}
return aim;
default:
return so