UNPKG

@gaoding/gd-tracker

Version:

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

748 lines (747 loc) 35.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, { creatGenBuilder: function() { return creatGenBuilder; }, handlerGen: function() { return handlerGen; } }); var _fs = /*#__PURE__*/ _interopRequireDefault(require("fs")); var _cpy = /*#__PURE__*/ _interopRequireDefault(require("cpy")); var _rimraf = /*#__PURE__*/ _interopRequireDefault(require("rimraf")); var _makeDir = /*#__PURE__*/ _interopRequireDefault(require("make-dir")); var _sha256 = /*#__PURE__*/ _interopRequireDefault(require("crypto-js/sha256")); var _dayjs = /*#__PURE__*/ _interopRequireDefault(require("dayjs")); var _lodash = require("lodash"); var _db = require("../core/db"); var _path = require("path"); var _logger = require("../core/logger"); var _zipper = require("../core/zipper"); var _code = require("../core/code"); var _recursionFind = require("../utils/recursion-find"); var _api = require("../core/api"); var _index = require("../constants/index"); 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 _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 creatGenBuilder = function(yargs) { return yargs.version(false).option("name", { alias: "n", describe: "埋点项目的名称", demandOption: true, type: "array", array: true }).example("$0 gen -n gd_web", "指定项目名生成配置文件和埋点 API 文件").option("dir", { alias: "d", describe: "生成的配置文件和埋点 API 文件存放的目录 (相对路径)", type: "string", default: _index.DEFAULT_GENERATE_DIR }).example("$0 gen -n gd_web -d ./src/trackers", "指定项目名和目录生成配置文件和埋点 API 文件").option("force", { alias: "f", describe: "忽略缓存强行从线上拉取 schemas 生成代码", default: false, type: "boolean" }).example("$0 gen -n gd_web -f", "忽略缓存强行从线上拉取 schemas 生成代码").option("help", { alias: "h", describe: "显示帮助信息" }); }; // 是否作为一个文件存在 var isExistsFile = function(path) { var result = _fs.default.existsSync(path) && _fs.default.statSync(path).isFile(); return result; }; // 处理无效的项目名 var handlerVoidName = function(projects) { projects.forEach(function(item) { return _logger.logger.error("项目名 ".concat(item, " 不在可支持的项目名列表中!")); }); _logger.logger.error("可通过 list 命令获取所有可支持的项目名列表!").exit(); }; var save2Cache = function() { var _ref = _asyncToGenerator(function(option) { var projects, schemas, apis, time, CLI_TIME_CACHE_PATH, CLI_CACHE_API_PATH, INDEX_TEMPLATE_CONTENT, INDEX_TS, hashs, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, project, CLI_CACHE_PROJECT_PATH, TS_API_CONTENT, SCHEMA_CONTENT, TS_API_HASH, SCHEMA_HASH, API_INDEX_CONTENT, db; return __generator(this, function(_state) { switch(_state.label){ case 0: projects = (0, _lodash.isArray)(option === null || option === void 0 ? void 0 : option.projects) ? option === null || option === void 0 ? void 0 : option.projects : []; schemas = (0, _lodash.isArray)(option === null || option === void 0 ? void 0 : option.schemas) ? option === null || option === void 0 ? void 0 : option.schemas : []; apis = (0, _lodash.isArray)(option === null || option === void 0 ? void 0 : option.apis) ? option === null || option === void 0 ? void 0 : option.apis : []; time = (0, _dayjs.default)().format("YYYY.MM.DD.HH.mm.ss"); CLI_TIME_CACHE_PATH = (0, _path.resolve)(_index.CLI_CACHE_PATH, "./".concat(time)); CLI_CACHE_API_PATH = (0, _path.resolve)(CLI_TIME_CACHE_PATH, "./api"); // 1. 根据时间创建缓存目录 / API 目录 (先清除之前的缓存) _rimraf.default.sync(CLI_TIME_CACHE_PATH); _makeDir.default.sync(CLI_TIME_CACHE_PATH); _rimraf.default.sync(CLI_CACHE_API_PATH); _makeDir.default.sync(CLI_CACHE_API_PATH); // 2. 将 apiIndex 文件写入缓存目录 _fs.default.writeFileSync((0, _path.resolve)(CLI_CACHE_API_PATH, "./index.ts"), option.apiIndex, { encoding: _index.UTF_8 }); // 3. 将 GD-TRACKER.md 配置文件写入缓存目录 return [ 4, (0, _cpy.default)((0, _path.resolve)(_index.CLI_TEMPLATE_PATH, "./GD-TRACKER.md"), CLI_TIME_CACHE_PATH) ]; case 1: _state.sent(); INDEX_TEMPLATE_CONTENT = _fs.default.readFileSync(_index.CLI_INDEX_TEMPLATE_PATH, { encoding: _index.UTF_8 }); INDEX_TS = INDEX_TEMPLATE_CONTENT.replace(/__PROJECT_NAME__/g, projects[0]); _fs.default.writeFileSync((0, _path.resolve)(CLI_TIME_CACHE_PATH, "./index.ts"), INDEX_TS, { encoding: _index.UTF_8 }); // 5. 将 apis/schemas 写入缓存 projects.forEach(function(project, index) { var CLI_CACHE_PROJECT_PATH = (0, _path.resolve)(CLI_CACHE_API_PATH, "./".concat(project)); _rimraf.default.sync(CLI_CACHE_PROJECT_PATH); _makeDir.default.sync(CLI_CACHE_PROJECT_PATH); _fs.default.writeFileSync((0, _path.resolve)(CLI_CACHE_PROJECT_PATH, "./index.ts"), apis[index], { encoding: _index.UTF_8 }); _fs.default.writeFileSync((0, _path.resolve)(CLI_CACHE_PROJECT_PATH, "./schemas.json"), schemas[index], _index.UTF_8); }); hashs = []; _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(_iterator = projects[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ project = _step.value; CLI_CACHE_PROJECT_PATH = (0, _path.resolve)(CLI_CACHE_API_PATH, "./".concat(project)); TS_API_CONTENT = _fs.default.readFileSync((0, _path.resolve)(CLI_CACHE_PROJECT_PATH, "./index.ts"), { encoding: _index.UTF_8 }); SCHEMA_CONTENT = _fs.default.readFileSync((0, _path.resolve)(CLI_CACHE_PROJECT_PATH, "./schemas.json"), { encoding: _index.UTF_8 }); TS_API_HASH = (0, _sha256.default)(TS_API_CONTENT).toString(); SCHEMA_HASH = (0, _sha256.default)(SCHEMA_CONTENT).toString(); hashs.push(new _db.Hash({ name: project, dl: "", js: "", ts: TS_API_HASH, sc: SCHEMA_HASH, time: time })); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } API_INDEX_CONTENT = _fs.default.readFileSync((0, _path.resolve)(CLI_CACHE_API_PATH, "./index.ts"), { encoding: _index.UTF_8 }); hashs.push(new _db.Hash({ name: "apiIndex", dl: "", js: "", ts: (0, _sha256.default)(API_INDEX_CONTENT).toString(), sc: "", time: time })); db = new _db.DB({ dir: option === null || option === void 0 ? void 0 : option.dir, names: projects, hashs: hashs, extend: _db.EXTEND_TYPE.TS, time: time }); _fs.default.writeFileSync((0, _path.resolve)(CLI_TIME_CACHE_PATH, "./db.json"), JSON.stringify(db, null, 4), _index.UTF_8); // 6. 返回数据 return [ 2, { db: db, time: time, cachePath: CLI_TIME_CACHE_PATH } ]; } }); }); return function save2Cache(option) { return _ref.apply(this, arguments); }; }(); var cleanZip = function(dirname) { if (!_fs.default.existsSync(dirname)) return; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { var _loop = function() { var file = _step.value; var path = (0, _path.resolve)(dirname, "./".concat(file)); if ([ /node_modules/, /.git/ ].some(function(item) { return item.test(path); })) return "continue"; if (_fs.default.statSync(path).isDirectory()) { cleanZip(path); } else { if (!_index.CACHE_ZIP_REG_EXP.test(file)) return "continue"; _rimraf.default.sync(path); } }; for(var _iterator = _fs.default.readdirSync(dirname)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop(); } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } }; var onZipSuccess = function() { var _ref = _asyncToGenerator(function(projects, cachePath, dirname) { var USER_API_DIR_PATH, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, project, USER_API_FILE_PATH, CLI_CACHE_TS_API_FILE_PATH, hasIndexTS; return __generator(this, function(_state) { switch(_state.label){ case 0: USER_API_DIR_PATH = (0, _path.resolve)(dirname, "./api"); return [ 4, (0, _cpy.default)((0, _path.resolve)(cachePath, "./api/index.ts"), USER_API_DIR_PATH) ]; case 1: _state.sent(); _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { // 2. 拷贝 api 文件 for(_iterator = projects[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ project = _step.value; USER_API_FILE_PATH = (0, _path.resolve)(USER_API_DIR_PATH, "./".concat(project, ".ts")); CLI_CACHE_TS_API_FILE_PATH = (0, _path.resolve)(cachePath, "./api/".concat(project, "/index.ts")); if (!_fs.default.existsSync((0, _path.resolve)(USER_API_DIR_PATH))) { _makeDir.default.sync(USER_API_DIR_PATH); } if (!_fs.default.statSync(USER_API_DIR_PATH).isDirectory()) { _rimraf.default.sync(USER_API_DIR_PATH); _makeDir.default.sync(USER_API_DIR_PATH); } _fs.default.writeFileSync(USER_API_FILE_PATH, _fs.default.readFileSync(CLI_CACHE_TS_API_FILE_PATH, { encoding: _index.UTF_8 }), _index.UTF_8); _logger.logger.success("生成 ".concat(project, " 的埋点 API 文件成功!")); _logger.logger.success("生成的埋点 API 文件路径为:".concat((0, _path.resolve)(dirname, "./api/".concat(project, "/index.ts")))); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } hasIndexTS = isExistsFile((0, _path.resolve)(dirname, "./index.ts")); if (hasIndexTS) return [ 2 ]; return [ 4, (0, _cpy.default)((0, _path.resolve)("".concat(cachePath), "./index.ts"), dirname) ]; case 2: _state.sent(); _logger.logger.success("生成埋点配置文件成功!"); _logger.logger.success("生成的埋点配置文件路径为:".concat((0, _path.resolve)(dirname, "./index.ts"))); // 3. 拷贝埋点文档 return [ 4, (0, _cpy.default)((0, _path.resolve)(cachePath, "./GD-TRACKER.md"), dirname) ]; case 3: _state.sent(); return [ 2 ]; } }); }); return function onZipSuccess(projects, cachePath, dirname) { return _ref.apply(this, arguments); }; }(); // 生成代码 var generateCode = function() { var _ref = _asyncToGenerator(function(projects, dirname) { var PROJECT_TIPS, apis, schemas, apiIndex, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, project, list, schema, api, err, ref, db, cachePath, USER_DIR, cacheName; return __generator(this, function(_state) { switch(_state.label){ case 0: PROJECT_TIPS = projects.length > 1 ? "".concat(projects.join("、")) : projects[0]; _logger.logger.info("正在生成 ".concat(PROJECT_TIPS, " 的埋点 API 文件")); apis = []; schemas = []; apiIndex = (0, _code.createApiIndex)(projects); _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; _state.label = 1; case 1: _state.trys.push([ 1, 6, 7, 8 ]); _iterator = projects[Symbol.iterator](); _state.label = 2; case 2: if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [ 3, 5 ]; project = _step.value; return [ 4, (0, _api.fetchSchemas)(project) ]; case 3: list = _state.sent(); schema = JSON.stringify(list, null, 4); api = (0, _code.createApi)(list); schemas.push(schema); apis.push(api); _state.label = 4; case 4: _iteratorNormalCompletion = true; return [ 3, 2 ]; case 5: return [ 3, 8 ]; case 6: err = _state.sent(); _didIteratorError = true; _iteratorError = err; return [ 3, 8 ]; case 7: try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } return [ 7 ]; case 8: return [ 4, save2Cache({ apiIndex: apiIndex, projects: projects, schemas: schemas, apis: apis, dir: dirname }) ]; case 9: ref = _state.sent(), db = ref.db, cachePath = ref.cachePath; USER_DIR = (0, _path.resolve)(process.cwd(), "./".concat(dirname)); cleanZip(USER_DIR); cacheName = ".cache.".concat(db.time, ".zip"); (0, _zipper.zip)({ dirname: _index.CLI_CACHE_PATH, filename: (0, _path.resolve)(USER_DIR, "./".concat(cacheName)), // password: ZIP_PASSWORD, onSuccess: function() { return onZipSuccess(projects, cachePath, dirname); } }); return [ 2 ]; } }); }); return function generateCode(projects, dirname) { return _ref.apply(this, arguments); }; }(); // 是否存在 .zip 缓存文件 var hasZip = function(dirname) { var USER_DIR = (0, _path.resolve)(process.cwd(), dirname); if (!_fs.default.existsSync(USER_DIR)) return false; if (!_fs.default.statSync(USER_DIR).isDirectory()) _logger.logger.error("".concat(USER_DIR, " 不是一个文件夹!")).exit(); var result = (0, _recursionFind.recursionFind)(USER_DIR, _index.CACHE_ZIP_REG_EXP, [ /node_modules/, /.git/ ]); return result; }; // 哈希是否不同的 var isDiff = function(filename, cacheHash) { var content = _fs.default.readFileSync(filename, { encoding: _index.UTF_8 }); var hash = (0, _sha256.default)(content).toString(); var result = hash !== cacheHash; return result; }; // 解压缩成功 var onUnZipSuccess = function() { var _ref = _asyncToGenerator(function(projects, zipname, dirname) { var time, CLI_TIME_CACHE_PATH, data, db, names, PROJECT_TIPS, USER_DIR, USER_API_INDEX_PATH, CLI_CACHE_API_DIR_PAT, CLI_CACHE_API_INDEX_PATH, hashs, apiIndexHash, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, USER_TS_INDEX_FILE_PATH; return __generator(this, function(_state) { switch(_state.label){ case 0: _logger.logger.success("解压 ".concat(zipname, " 文件成功")); time = "./".concat(zipname === null || zipname === void 0 ? void 0 : zipname.replace(".cache.", "").replace(".zip", "")); CLI_TIME_CACHE_PATH = (0, _path.resolve)(_index.CLI_CACHE_PATH, "./".concat(time)); data = require((0, _path.resolve)(CLI_TIME_CACHE_PATH, "./db.json")); db = new _db.DB(data); names = Array.isArray(db.names) ? db.names : db.names; if (projects.some(function(item) { return !names.includes(item); }) || names.some(function(item) { return !projects.includes(item); })) { PROJECT_TIPS = projects.length > 1 ? "".concat(projects.join("、")) : projects[0]; _logger.logger.warn("检查您在命令行中输入的项目名与 ".concat(zipname, " 的列表中!")); _logger.logger.warn("".concat(zipname, " 中的项目列表是 ").concat(PROJECT_TIPS)); _logger.logger.warn("如果您确定要生成其他项目的埋点配置文件和埋点 API 文件,请以 -f 执行当前命令").exit(); } USER_DIR = (0, _path.resolve)(process.cwd(), "./".concat(dirname)); USER_API_INDEX_PATH = (0, _path.resolve)(USER_DIR, "./api/index.ts"); CLI_CACHE_API_DIR_PAT = (0, _path.resolve)(CLI_TIME_CACHE_PATH, "./api"); CLI_CACHE_API_INDEX_PATH = (0, _path.resolve)(CLI_CACHE_API_DIR_PAT, "./index.ts"); hashs = Array.isArray(db.hashs) ? db.hashs : db.hashs; apiIndexHash = hashs.find(function(item) { return item.name === "apiIndex"; }); if (!isExistsFile(USER_API_INDEX_PATH)) { _logger.logger.warn("检查您的埋点 API 文件入口文件 ".concat(USER_API_INDEX_PATH, " 不存在!")); _fs.default.writeFileSync(USER_API_INDEX_PATH, _fs.default.readFileSync(CLI_CACHE_API_INDEX_PATH, { encoding: _index.UTF_8 }), _index.UTF_8); _logger.logger.success("已经从 ".concat(zipname, " 中还原 ").concat(USER_API_INDEX_PATH)); } else if (isDiff(USER_API_INDEX_PATH, apiIndexHash === null || apiIndexHash === void 0 ? void 0 : apiIndexHash.ts)) { _logger.logger.warn("检查到您的 ".concat(USER_API_INDEX_PATH, " 文件与 ").concat(zipname, " 中的文件哈希不一致")); _fs.default.writeFileSync(USER_API_INDEX_PATH, _fs.default.readFileSync(CLI_CACHE_API_INDEX_PATH, { encoding: _index.UTF_8 }), _index.UTF_8); _logger.logger.success("已经从 ".concat(zipname, " 中还原 ").concat(USER_API_INDEX_PATH)); } else { _logger.logger.warn("检查到您的 ".concat(USER_API_INDEX_PATH, " 文件与 ").concat(zipname, " 中的文件哈希一致")); _logger.logger.success("哈希一致的文件无需重新生成代码"); } _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { _loop = function() { var project = _step.value; var USER_API_DIR_PATH = (0, _path.resolve)(USER_DIR, "./api"); var USER_TS_API_FILE_PATH = (0, _path.resolve)(USER_API_DIR_PATH, "./".concat(project, ".ts")); var CLI_CACHE_PROJECT_API = (0, _path.resolve)(CLI_CACHE_API_DIR_PAT, "./".concat(project, "/index.ts")); var hash = hashs.find(function(item) { return item.name === project; }); if (!isExistsFile(USER_TS_API_FILE_PATH)) { _logger.logger.warn("检查到您的 ".concat(USER_TS_API_FILE_PATH, " 文件已丢失,正在从 ").concat(zipname, " 中还原该文件")); _fs.default.writeFileSync(USER_TS_API_FILE_PATH, _fs.default.readFileSync(CLI_CACHE_PROJECT_API, { encoding: _index.UTF_8 }), _index.UTF_8); _logger.logger.success("已经从 ".concat(zipname, " 中还原 ").concat(USER_TS_API_FILE_PATH)); } else if (isDiff(USER_TS_API_FILE_PATH, hash === null || hash === void 0 ? void 0 : hash.ts)) { _logger.logger.warn("检查到您的 ".concat(USER_TS_API_FILE_PATH, " 文件与 ").concat(zipname, " 中的文件哈希不一致")); _logger.logger.error("".concat(USER_TS_API_FILE_PATH, " 文件是不允许用户手动修改的")); _logger.logger.info("正在从 ".concat(zipname, " 中还原 ").concat(USER_TS_API_FILE_PATH, " 文件")); _fs.default.writeFileSync(USER_TS_API_FILE_PATH, _fs.default.readFileSync(CLI_CACHE_PROJECT_API, { encoding: _index.UTF_8 }), _index.UTF_8); _logger.logger.success("已经从 ".concat(zipname, " 中还原 ").concat(USER_TS_API_FILE_PATH)); } else { _logger.logger.warn("检查到您的 ".concat(USER_TS_API_FILE_PATH, " 文件与 ").concat(zipname, " 中的文件哈希一致")); _logger.logger.success("哈希一致的文件无需重新生成代码"); } }; // 3. 检验 API 文件哈希值 for(_iterator = projects[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop(); } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } USER_TS_INDEX_FILE_PATH = (0, _path.resolve)(USER_DIR, "./index.ts"); if (!!isExistsFile(USER_TS_INDEX_FILE_PATH)) return [ 3, 2 ]; _logger.logger.info("正在从 ".concat(zipname, " 中还原 ").concat(USER_TS_INDEX_FILE_PATH, " 文件")); return [ 4, (0, _cpy.default)((0, _path.resolve)(CLI_TIME_CACHE_PATH, "./index.ts"), USER_DIR) ]; case 1: _state.sent(); _logger.logger.success("已经从 ".concat(zipname, " 中还原 ").concat(USER_TS_INDEX_FILE_PATH)); _state.label = 2; case 2: // 5. 拷贝 GD-TRACKER.md 文件 return [ 4, (0, _cpy.default)((0, _path.resolve)(CLI_TIME_CACHE_PATH, "./GD-TRACKER.md"), dirname) ]; case 3: _state.sent(); return [ 2 ]; } }); }); return function onUnZipSuccess(projects, zipname, dirname) { return _ref.apply(this, arguments); }; }(); // 处理当有 .zip 缓存文件时 var handlerHasZip = function(projects, zipname, dirname) { var filename = zipname.split("/").pop(); console.log("filename:", filename); var CLI_TIME_CACHE_PATH = (0, _path.resolve)(_index.CLI_CACHE_PATH, "./".concat(filename === null || filename === void 0 ? void 0 : filename.replace(".cache.", "").replace(".zip", ""))); _rimraf.default.sync(CLI_TIME_CACHE_PATH); _logger.logger.info("发现您的项目中存在缓存文件 ".concat(filename)); _logger.logger.info("正在把 ".concat(filename, " 中的内容解压到 ").concat(_index.CLI_CACHE_PATH, " 中")); (0, _zipper.unzip)({ dirname: _index.CLI_CACHE_PATH, filename: zipname, onSuccess: function() { return onUnZipSuccess(projects, filename, dirname); } }); }; var handlerGen = function() { var _ref = _asyncToGenerator(function(argv) { var dir, projects, force, list, alls, voidNames, zipname; return __generator(this, function(_state) { switch(_state.label){ case 0: dir = argv.dir; projects = (0, _lodash.isArray)(argv.name) ? argv.name : []; force = argv.force; return [ 4, (0, _api.fetchProjects)() ]; case 1: list = _state.sent(); alls = list.map(function(item) { return item.projectName; }); voidNames = projects.filter(function(item) { return !alls.includes(item); }); if (voidNames.length > 0) return [ 2, handlerVoidName(voidNames) ]; if (!force) return [ 3, 3 ]; return [ 4, generateCode(projects, dir) ]; case 2: return [ 2, _state.sent() ]; case 3: zipname = hasZip(dir); if (zipname) return [ 2, handlerHasZip(projects, zipname, dir) ]; // 3. 以上两种情况都不是,就去拉取最新的 schemas 重新生成文件 return [ 2, generateCode(projects, dir) ]; } }); }); return function handlerGen(argv) { return _ref.apply(this, arguments); }; }();