gcl
Version:
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
705 lines (583 loc) • 27.2 kB
JavaScript
'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