UNPKG

gcl

Version:

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

705 lines (583 loc) 27.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.revert = exports.toConvertIdic = exports.convert = exports.tranform = exports.transform = exports.checker = exports.rmDir = exports.moveDir = exports.copyDir = exports.moveFile = exports.copyFile = exports.createDir = exports.execDir = exports.formatPath = undefined; var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _tool = require('../common/tool'); var _tool2 = _interopRequireDefault(_tool); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _path = require('path'); var _path2 = _interopRequireDefault(_path); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * */ var formatPath = exports.formatPath = function formatPath(path) { return _path2.default.format(_path2.default.parse(_path2.default.resolve(_path2.default.normalize(path)))); }; var execDir = exports.execDir = function execDir() { return _path2.default.parse(_path2.default.resolve(_path2.default.normalize(process.mainModule.filename))).dir; }; var createDir = exports.createDir = function createDir(target) { var _this = this; var tt = _path2.default.parse(_path2.default.resolve(_path2.default.normalize(target))); var sb = _tool2.default.sb(); var dirs = (tt.base.indexOf('.') >= 0 ? tt.dir : _path2.default.format(tt)).split(_tool2.default.environment.splitChar); return _tool2.default.each(dirs, function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(v) { var path; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: sb.append(v + _tool2.default.environment.splitChar); path = sb.toString(); _context.next = 4; return _tool2.default.callback(function (call) { return _fs2.default.exists(path, function (ist) { return call(null, ist); }); }); case 4: if (_context.sent) { _context.next = 7; break; } _context.next = 7; return _tool2.default.callback(_fs2.default.mkdir, _fs2.default, path); case 7: return _context.abrupt('return', false); case 8: case 'end': return _context.stop(); } } }, _callee, _this); })); return function (_x) { return _ref.apply(this, arguments); }; }(), true); }; var copyFile = exports.copyFile = function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(source, target) { var istrue; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return _tool2.default.callback(function (call) { return _fs2.default.exists(source, function (ist) { return call(null, ist); }); }); case 2: istrue = _context2.sent; if (!istrue) { _context2.next = 11; break; } _context2.next = 6; return createDir(target); case 6: _context2.next = 8; return _tool2.default.callback(function (call) { var tar = _fs2.default.createWriteStream(target); tar.on('error', call); tar.on('finish', call); var src = _fs2.default.createReadStream(source); src.pipe(tar); }); case 8: return _context2.abrupt('return', true); case 11: throw new Error('\u6E90\u6587\u4EF6' + source + '\u6CA1\u6709\u627E\u5230'); case 12: case 'end': return _context2.stop(); } } }, _callee2, this); })); return function copyFile(_x2, _x3) { return _ref2.apply(this, arguments); }; }(); var moveFile = exports.moveFile = function () { var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(source, target) { return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return copyFile(source, target); case 2: _context3.next = 4; return _tool2.default.callback(_fs2.default.unlink, _fs2.default, source); case 4: return _context3.abrupt('return', true); case 5: case 'end': return _context3.stop(); } } }, _callee3, undefined); })); return function moveFile(_x4, _x5) { return _ref3.apply(this, arguments); }; }(); var copyDir = exports.copyDir = function () { var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(source, target, isMove) { var _this2 = this; var tt, istrue, st, paths; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: tt = _path2.default.parse(_path2.default.resolve(_path2.default.normalize(target))); target = _path2.default.format(tt); tt = _path2.default.parse(_path2.default.resolve(_path2.default.normalize(source))); source = _path2.default.format(tt); _context5.next = 6; return _tool2.default.callback(function (call) { return _fs2.default.exists(source, function (istrue) { return call(null, istrue); }); }); case 6: istrue = _context5.sent; if (!istrue) { _context5.next = 29; break; } _context5.next = 10; return _tool2.default.callback(function (call) { return _fs2.default.exists(target, function (istrue) { return call(null, istrue); }); }); case 10: istrue = _context5.sent; if (!(!istrue && !(target.endWith('\\') || target.endWith('/')))) { _context5.next = 14; break; } _context5.next = 14; return _tool2.default.callback(_fs2.default.mkdir, _fs2.default, target); case 14: _context5.next = 16; return _tool2.default.callback(_fs2.default.stat, _fs2.default, source); case 16: st = _context5.sent; if (st.isDirectory()) { _context5.next = 21; break; } throw new Error(source + '\u4E0D\u662F\u6587\u4EF6\u5939'); case 21: _context5.next = 23; return _tool2.default.callback(_fs2.default.readdir, _fs2.default, source); case 23: paths = _context5.sent; _context5.next = 26; return _tool2.default.each(paths, function () { var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(v) { var _src, _dst, st; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _src = source + '/' + v, _dst = target + '/' + v; _context4.next = 3; return _tool2.default.callback(_fs2.default.stat, _fs2.default, _src); case 3: st = _context4.sent; if (!st.isFile()) { _context4.next = 14; break; } if (!isMove) { _context4.next = 10; break; } _context4.next = 8; return moveFile(_src, _dst); case 8: _context4.next = 12; break; case 10: _context4.next = 12; return copyFile(_src, _dst); case 12: _context4.next = 22; break; case 14: if (!st.isDirectory()) { _context4.next = 22; break; } if (!isMove) { _context4.next = 20; break; } _context4.next = 18; return moveDir(_src, _dst); case 18: _context4.next = 22; break; case 20: _context4.next = 22; return copyDir(_src, _dst); case 22: return _context4.abrupt('return', false); case 23: case 'end': return _context4.stop(); } } }, _callee4, _this2); })); return function (_x9) { return _ref5.apply(this, arguments); }; }(), true); case 26: return _context5.abrupt('return', true); case 27: _context5.next = 30; break; case 29: throw new Error('\u6E90\u6587\u4EF6\u5939' + source + '\u6CA1\u6709\u627E\u5230'); case 30: case 'end': return _context5.stop(); } } }, _callee5, this); })); return function copyDir(_x6, _x7, _x8) { return _ref4.apply(this, arguments); }; }(); var moveDir = exports.moveDir = function () { var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(source, target) { return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return copyDir(source, target, true); case 2: _context6.next = 4; return _tool2.default.callback(_fs2.default.rmdir, _fs2.default, source); case 4: case 'end': return _context6.stop(); } } }, _callee6, undefined); })); return function moveDir(_x10, _x11) { return _ref6.apply(this, arguments); }; }(); /** * * @param {string} source 目标文件夹 */ var rmDir = exports.rmDir = function () { var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(source) { var tt, istrue, st, paths; return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: tt = _path2.default.parse(_path2.default.resolve(_path2.default.normalize(source))); source = _path2.default.format(tt); _context8.next = 4; return _tool2.default.callback(function (call) { return _fs2.default.exists(source, function (istrue) { return call(null, istrue); }); }); case 4: istrue = _context8.sent; if (!istrue) { _context8.next = 23; break; } _context8.next = 8; return _tool2.default.callback(_fs2.default.stat, _fs2.default, source); case 8: st = _context8.sent; if (st.isDirectory()) { _context8.next = 13; break; } throw new Error(source + '\u4E0D\u662F\u6587\u4EF6\u5939'); case 13: _context8.next = 15; return _tool2.default.callback(_fs2.default.readdir, _fs2.default, source); case 15: paths = _context8.sent; _context8.next = 18; return _tool2.default.each(paths, function () { var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(v) { var _src, st; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: _src = source + '/' + v; _context7.next = 3; return _tool2.default.callback(_fs2.default.stat, _fs2.default, _src); case 3: st = _context7.sent; if (!st.isFile()) { _context7.next = 9; break; } _context7.next = 7; return _tool2.default.callback(_fs2.default.unlink, _fs2.default, _src); case 7: _context7.next = 12; break; case 9: if (!st.isDirectory()) { _context7.next = 12; break; } _context7.next = 12; return rmDir(_src); case 12: return _context7.abrupt('return', false); case 13: case 'end': return _context7.stop(); } } }, _callee7, undefined); })); return function (_x13) { return _ref8.apply(this, arguments); }; }(), true); case 18: _context8.next = 20; return _tool2.default.callback(_fs2.default.rmdir, _fs2.default, source); case 20: return _context8.abrupt('return', true); case 21: _context8.next = 24; break; case 23: throw new Error('\u6E90\u6587\u4EF6\u5939' + source + '\u6CA1\u6709\u627E\u5230'); case 24: case 'end': return _context8.stop(); } } }, _callee8, undefined); })); return function rmDir(_x12) { return _ref7.apply(this, arguments); }; }(); var checker = exports.checker = function () { function checker(call) { (0, _classCallCheck3.default)(this, checker); var that = this; var _pri = pri(that, { call: call, list: [], isEnd: false, check: function check() { var _pri2 = pri(that), _ = _pri2._, __ = _pri2.__; if (!__.isEnd) { var isF = true; _tool2.default.each(__.list, function (v) { isF = isF && v.isEnd;return false; }).then(function () { if (isF) { __.isEnd = true; if (__.call) { var f = __.call; delete __.call; _tool2.default.each(__.list, function (v) { v.removeChecker();return false; }).then(f); } } }); } } }), _ = _pri._, __ = _pri.__; } (0, _createClass3.default)(checker, [{ key: 'push', value: function push(stream) { var _pri3 = pri(this), _ = _pri3._, __ = _pri3.__; var callback = function callback() { stream.isEnd = true; __.check(); }; stream.on('end', callback); stream.on('finish', callback); stream.removeChecker = function () { stream.removeListener('end', callback); stream.removeListener('finish', callback); }; __.list.push(stream); } }]); return checker; }(); /** * 对于流对象转换的简单实现 * @param {*} s * @param {*} t */ var transform = exports.transform = function () { var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(s, t) { return _regenerator2.default.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: if (s.pipe) { _context9.next = 2; break; } throw new Error('源对象不是Stream类型!'); case 2: if (t.pipe) { _context9.next = 4; break; } throw new Error('目标对象不是Stream类型!'); case 4: _context9.next = 6; return _tool2.default.callback(function (call) { t.on('error', call); t.on('finish', call); s.pipe(t); }); case 6: return _context9.abrupt('return', _context9.sent); case 7: case 'end': return _context9.stop(); } } }, _callee9, this); })); return function transform(_x14, _x15) { return _ref9.apply(this, arguments); }; }(); var tranform = exports.tranform = transform; /** * 实现 JSON向另一个JSON的转换,其中keys由 "a[0][1].count":"aaa[333].abc" 这种赋值方式 键值对定义 * @param {*} ret 此次操作对象 {ope:} * @param {*} keys 此次赋值用Key 譬如session,temp/share,set */ var convert = exports.convert = function convert(ret, keys) { var res = {}; for (var method in keys) { var p = ret, v = res, lp = null, lv = null; var k = method.replace(/[\[\]\.]+/g, '.').trim('.').split('.'); k.map(function (_k, _i) { lp = _k; //处理数组 if (k.length - _i > 1) p = p !== undefined && p[_k] || undefined; }); if (p === undefined || p[lp] === undefined) continue; //p是最终结果的上一级; k = ('' + keys[method]).split('.'); k.map(function (_k, _i) { if (_k.indexOf('[') >= 0) { _k = _k.replace(/[\[\]\.]+/g, '.').trim('.').split('.'); //使用循环比shift更快 _k.forEach(function (_name2, _i2) { lv = _name2; //长度等于最大值+1 if (_k.length - _i2 > 1) { if (v[_name2] === undefined) v[_name2] = []; v = v[_name2]; } else { if (v[_name2] === undefined) v[_name2] = {}; } }); } else { //处理非数组对象 实现 a.count //长度等于最大值+1 _k = _k.replace(/[\[\]\.]+/g, '.').trim('.').split('.'); _k.forEach(function (_name2, _i2) { lv = _name2; //处理数组 if (_k.length - _i2 > 1) { if (v[_name2] === undefined) v[_name2] = {}; v = v[_name2]; } else { if (v[_name2] === undefined) v[_name2] = {}; } }); } if (k.length - _i > 1) { v = v[lv]; } }); v[lv] = p && p[lp]; } return res; }; /** * 负责将JSON展平成为JSON转换用字典 * @param {*} json */ var toConvertIdic = exports.toConvertIdic = function toConvertIdic() { var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var res = {}, stack = [{ k: '', p: json }]; while (stack.length) { var _stack$pop = stack.pop(), k = _stack$pop.k, p = _stack$pop.p; for (var key in p) { if (typeof p[key] == 'string') res[(k ? k + '.' : '') + key] = p[key];else stack.push({ k: (k ? k + '.' : '') + key, p: p[key] }); } } return res; }; /** * 负责JSON键值互转 */ var revert = exports.revert = function revert() { var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var ret = {}; for (var k in json) { ret[json[k]] = k; }return ret; }; exports.default = { formatPath: formatPath, execDir: execDir, createDir: createDir, copyFile: copyFile, moveFile: moveFile, copyDir: copyDir, moveDir: moveDir, checker: checker, transform: transform, tranform: tranform, rmDir: rmDir, convert: convert, toConvertIdic: toConvertIdic, revert: revert }; var pri = _tool2.default.pris(); //# sourceMappingURL=tool.js.map