@lark-project/cli
Version:
飞书项目插件开发工具
163 lines (162 loc) • 6.68 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compileTSModule = exports.checkLatestVersion = exports.get = exports.set = exports.wrapOraLoading = exports.clearConsole = exports.stop = exports.error = void 0;
__exportStar(require("./devServer"), exports);
__exportStar(require("./plugin"), exports);
__exportStar(require("./crypto"), exports);
__exportStar(require("./template"), exports);
const ora_1 = __importDefault(require("ora"));
const execa_1 = __importDefault(require("execa"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const semver_1 = __importDefault(require("semver"));
const cross_port_killer_1 = require("cross-port-killer");
const TSNode = require('ts-node');
const env_1 = require("../../utils/env");
const logger_1 = require("../../utils/logger");
const constants_1 = require("../config/constants");
const paths_1 = __importDefault(require("../config/paths"));
const error = (msg) => {
const error = new Error(msg);
error.name = constants_1.ERROR_NAME;
throw error;
};
exports.error = error;
const stop = async (port = constants_1.DEFAULT_CONFIG.PORT) => {
try {
const pids = await (0, cross_port_killer_1.kill)(port);
pids[0] && console.log(`${pids[0]} process was killed`);
}
catch (_a) {
(0, exports.error)('stop error');
}
};
exports.stop = stop;
const clearConsole = () => {
process.stdout.write(env_1.env.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H');
};
exports.clearConsole = clearConsole;
/** 添加加载动画 */
const wrapOraLoading = async (fn, message, ...args) => {
/** 使用 ora 初始化,传入提示信息 message */
const spinner = (0, ora_1.default)(`${message}\n`);
/** 开始加载动画 */
spinner.start();
try {
/** 执行传入方法 fn */
const result = await fn(...args);
/** 状态为修改为成功 */
spinner.succeed();
return result;
}
catch (e) {
/** 状态为修改为失败, 抛出错误 */
spinner.fail(`${message} failed`);
(0, exports.error)(`${e.message}`);
}
};
exports.wrapOraLoading = wrapOraLoading;
const set = (obj, path, value) => {
const keys = path.replace(/(\w+)\[(\d+)\]/, '$1.$2').split('.');
let current = obj;
for (let i = 0; i < keys.length - 1; i++) {
const key = keys[i];
if (!(current === null || current === void 0 ? void 0 : current.hasOwnProperty(key)) ||
Object.prototype.toString.call(obj) !== '[object Object]') {
current[key] = {};
}
current = current[key];
}
current[keys[keys.length - 1]] = value;
return obj;
};
exports.set = set;
const get = (obj, path, defaultValue) => {
const keys = path.replace(/(\w+)\[(\d+)\]/, '$1.$2').split('.');
if (Object.prototype.toString.call(obj) !== '[object Object]') {
return defaultValue;
}
let current = obj;
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (current.hasOwnProperty(key)) {
current = current[key];
}
else {
return defaultValue;
}
}
return current;
};
exports.get = get;
const checkLatestVersion = async () => {
var _a;
const packageJson = require('../../../package.json');
const { name, version } = packageJson;
try {
const { stdout: latestVersion } = await (0, execa_1.default)('npm', ['view', name, 'version']);
if (semver_1.default.gt(latestVersion, version)) {
logger_1.logger.warn(`Warning: Your Lark Project CLI version ${version} is out of date.\r\nWe recommend you update to the latest version to get the latest features and bug fixes.\r\n`);
}
}
catch (e) {
logger_1.logger.warn('Warning: The Lark Project CLI latest version check failed.');
}
// TODO: 需要迁移到 v1 的特化实现里
// V0.0.8+ 开始增加 build.config.ts 配置文件,需要迁移 manifest.json 中的 externals 字段
try {
const manifestConfig = (_a = fs_extra_1.default.readJsonSync(paths_1.default.pluginConfigJson)) !== null && _a !== void 0 ? _a : {};
const { externals: deprecatedExternals = {} } = manifestConfig;
const extBuildConfig = require('../config/buildConfig');
if (Object.keys(deprecatedExternals).length > 0 && Object.keys(extBuildConfig).length == 0) {
fs_extra_1.default.writeFileSync(paths_1.default.pluginExtBuildConfigTs, `import { IPluginCustomBuildConfig } from '@lark-project/js-sdk';` +
`\n` +
`const buildConfig: IPluginCustomBuildConfig = ${JSON.stringify({ externals: deprecatedExternals }, null, 2)};` +
`\n` +
`export default buildConfig;`);
logger_1.logger.info("Lpm created 'build.config.ts' successfully, Now you should update 'externals' in it!");
}
if (manifestConfig.hasOwnProperty('externals')) {
delete manifestConfig.externals;
fs_extra_1.default.writeJSONSync(paths_1.default.pluginConfigJson, manifestConfig, { spaces: 2 });
}
}
catch (_b) { }
};
exports.checkLatestVersion = checkLatestVersion;
function compileTSModule(resolvedPath) {
try {
const compiledCode = TSNode.create({
skipProject: true,
logError: true,
compilerOptions: {
module: 'commonjs',
target: 'esnext',
moduleResolution: 'node',
esModuleInterop: true,
allowJs: true,
},
}).compile(undefined, resolvedPath);
return eval(compiledCode);
}
catch (e) {
logger_1.logger.warn(`compile file ${resolvedPath} error: ${e}`);
}
}
exports.compileTSModule = compileTSModule;