@gaoding/gd-tracker
Version:
Gaoding tracker for sensorsdata(sa), baidu(_hmt), Growing.IO(gio)
748 lines (747 loc) • 35.5 kB
JavaScript
;
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);
};
}();