UNPKG

@gaoding/gd-tracker

Version:

Gaoding tracker for sensorsdata(sa), baidu(_hmt), Growing.IO(gio)

454 lines (453 loc) 15.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ZipEncryptedType: function() { return ZipEncryptedType; }, DEFAULT_LEVEL: function() { return DEFAULT_LEVEL; }, DEFAULT_METHOD: function() { return DEFAULT_METHOD; }, DEFAULT_PASSWORD: function() { return DEFAULT_PASSWORD; }, ZipEncryptedOption: function() { return ZipEncryptedOption; }, ZipOutputOption: function() { return ZipOutputOption; }, ZipArchiveOption: function() { return ZipArchiveOption; }, ZipOption: function() { return ZipOption; }, zip: function() { return zip; }, UnZipOption: function() { return UnZipOption; }, unzip: function() { return unzip; } }); var _fs = /*#__PURE__*/ _interopRequireDefault(require("fs")); var _path = /*#__PURE__*/ _interopRequireDefault(require("path")); var _archiver = /*#__PURE__*/ _interopRequireDefault(require("archiver")); var _unzipper = /*#__PURE__*/ _interopRequireDefault(require("unzipper")); var _rimraf = /*#__PURE__*/ _interopRequireDefault(require("rimraf")); var _makeDir = /*#__PURE__*/ _interopRequireDefault(require("make-dir")); var _lodash = require("lodash"); var _index = require("../constants/index"); var _logger = require("./logger"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function() { var self = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var __generator = (void 0) && (void 0).__generator || function(thisArg, body) { var f, y, t, g, _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }; return(g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g); function verb(n) { return function(v) { return step([ n, v ]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while(_)try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [ op[0] & 2, t.value ]; switch(op[0]){ case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [ 0 ]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [ 6, e ]; y = 0; } finally{ f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var ZipEncryptedType; (function(ZipEncryptedType) { ZipEncryptedType["AES256"] = "aes256"; ZipEncryptedType["ZIP20"] = "zip20"; })(ZipEncryptedType || (ZipEncryptedType = {})); var DEFAULT_LEVEL = 9; var DEFAULT_METHOD = ZipEncryptedType.ZIP20; var DEFAULT_PASSWORD = ""; var ZipEncryptedOption = function ZipEncryptedOption(option) { "use strict"; _classCallCheck(this, ZipEncryptedOption); this.level = DEFAULT_LEVEL // level: 压缩级别 ; this.type = DEFAULT_METHOD // type: 加密方式 ; this.password = DEFAULT_PASSWORD // password: 压缩密码 ; Object.assign(this, option); }; // 创建 Archiver 压缩的选项 var createZipOption = function(option) { var zeo = new ZipEncryptedOption(option); var zlib = { level: zeo.level || DEFAULT_LEVEL }; var encryptionMethod = zeo.type || DEFAULT_METHOD; var password = zeo.password; if (!zeo.password) return { zlib: zlib, encryptionMethod: encryptionMethod }; if (!(0, _lodash.isString)(password)) return _logger.logger.error("创建 ZIP 文件失败!无效的压缩密码 password:", password).exit(); var result = { zlib: zlib, encryptionMethod: encryptionMethod, password: password }; return result; }; var ZipOutputOption = function ZipOutputOption(option) { "use strict"; _classCallCheck(this, ZipOutputOption); this.filename = "" // filename: 压缩后的 .zip 的问价路径 ; Object.assign(this, option); }; // 创建一个输出流 var createOutput = function() { var _ref = _asyncToGenerator(function(option) { var ref, filename, onSuccess, stream; return __generator(this, function(_state) { ref = new ZipOutputOption(option), filename = ref.filename, onSuccess = ref.onSuccess; stream = _fs.default.createWriteStream(filename, { encoding: _index.UTF_8 }); if (!(0, _lodash.isFunction)(onSuccess)) return [ 2, stream ]; stream.on("close", function() { return onSuccess(stream); }); return [ 2, stream ]; }); }); return function createOutput(option) { return _ref.apply(this, arguments); }; }(); var ZipArchiveOption = function ZipArchiveOption(option) { "use strict"; _classCallCheck(this, ZipArchiveOption); this.dirname = "" // dirname: 要使用 zip 方式压缩的文件夹的路径 ; this.password = "" // password: 压缩 .zip 文件的密码 ; Object.assign(this, option); }; // 创建一个 Archiver 的实例 var createArchive = function() { var _ref = _asyncToGenerator(function(option) { var ref, dirname, password, onError, zeo, zo, type, archive; return __generator(this, function(_state) { ref = new ZipArchiveOption(option), dirname = ref.dirname, password = ref.password, onError = ref.onError; _archiver.default.registerFormat("zip-encrypted", require("archiver-zip-encrypted")); zeo = new ZipEncryptedOption({ password: password }); zo = createZipOption(zeo); type = zeo.password ? "zip-encrypted" : "zip"; archive = _archiver.default.create(type, zo); archive.directory(dirname, false); if ((0, _lodash.isFunction)(onError)) archive.on("error", onError); return [ 2, archive ]; }); }); return function createArchive(option) { return _ref.apply(this, arguments); }; }(); var ZipOption = function ZipOption(option) { "use strict"; _classCallCheck(this, ZipOption); var zeo = new ZipEncryptedOption(option); var zoo = new ZipOutputOption(option); var zao = new ZipArchiveOption(option); Object.assign(this, zeo, zoo, zao); }; var zip = function() { var _ref = _asyncToGenerator(function(option) { var zco, dirname, zipdir, output, archive; return __generator(this, function(_state) { switch(_state.label){ case 0: zco = new ZipOption(option); dirname = zco.dirname; zipdir = _path.default.dirname(option.filename); if (!_fs.default.existsSync(dirname)) return [ 2, _logger.logger.error("创建 .zip 文件失败!您正在尝试压缩一个不存在的目录 dirname:", dirname).exit() ]; if (!_fs.default.statSync(dirname).isDirectory()) return [ 2, _logger.logger.error("创建 .zip 文件失败!压缩的路径不是一个目录 dirname:", dirname).exit() ]; if (!_fs.default.existsSync(zipdir)) _makeDir.default.sync(zipdir); if (!_fs.default.statSync(zipdir).isDirectory()) { _rimraf.default.sync(zipdir); _makeDir.default.sync(zipdir); } return [ 4, createOutput(zco) ]; case 1: output = _state.sent(); return [ 4, createArchive(zco) ]; case 2: archive = _state.sent(); archive.pipe(output); return [ 4, archive.finalize() ]; case 3: return [ 2, _state.sent() ]; } }); }); return function zip(option) { return _ref.apply(this, arguments); }; }(); // 解压文件夹里的子文件夹 var unZipSubDir = function(root, files) { var list = Array.isArray(files) ? files : []; var subDirs = list.filter(function(item) { return (item === null || item === void 0 ? void 0 : item.type) === "Directory"; }); subDirs.forEach(function(dir) { var name = _path.default.resolve(root, "./".concat(dir.path)); var isExists = _fs.default.existsSync(name); if (isExists) return; _makeDir.default.sync(name); }); }; // 解压文件夹里的子文件 var unZipSubFile = function(root, files, password) { var list = Array.isArray(files) ? files : []; var subFiles = list.filter(function(item) { return (item === null || item === void 0 ? void 0 : item.type) === "File"; }); return subFiles.map(function(file) { return new Promise(function(resolve, reject) { var name = _path.default.resolve(root, "./".concat(file.path)); return file.stream(password).pipe(_fs.default.createWriteStream(name, { encoding: _index.UTF_8 })).on("finish", function() { return resolve(name); }).on("error", reject); }); }); }; // 处理解压 .zip 文件失败 var onUnZipError = function(error, callback) { _logger.logger.error("解压 .zip 文件失败!error:", error); if ((0, _lodash.isFunction)(callback)) callback(error); }; var UnZipOption = function UnZipOption(option) { "use strict"; _classCallCheck(this, UnZipOption); this.filename = "" // filename: 压缩后的 .zip 的问价路径 ; this.dirname = "" // dirname: 解 .zip 文件后存放的解压文件的路径 ; this.password = "" // password: 解缩 .zip 文件的密码 ; Object.assign(this, option); }; var unzip = function() { var _ref = _asyncToGenerator(function(option) { var uzo, filename, dirname, password, onSuccess, onError, dir, promises, error; return __generator(this, function(_state) { switch(_state.label){ case 0: uzo = new UnZipOption(option); filename = uzo.filename, dirname = uzo.dirname, password = uzo.password, onSuccess = uzo.onSuccess, onError = uzo.onError; _state.label = 1; case 1: _state.trys.push([ 1, 3, , 4 ]); _rimraf.default.sync(dirname); _makeDir.default.sync(dirname); return [ 4, _unzipper.default.Open.file(filename) ]; case 2: dir = _state.sent(); unZipSubDir(dirname, dir === null || dir === void 0 ? void 0 : dir.files); promises = unZipSubFile(dirname, dir === null || dir === void 0 ? void 0 : dir.files, password); Promise.all(promises).then(function(result) { if (!(0, _lodash.isFunction)(onSuccess)) return result; return onSuccess(result); }).catch(function(error) { return onUnZipError(error, onError); }); return [ 3, 4 ]; case 3: error = _state.sent(); onUnZipError(error, onError); return [ 3, 4 ]; case 4: return [ 2 ]; } }); }); return function unzip(option) { return _ref.apply(this, arguments); }; }();