UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

163 lines (162 loc) 6.68 kB
"use strict"; 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;