@lark-project/cli
Version:
飞书项目插件开发工具
135 lines (134 loc) • 5.69 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const types_1 = require("../types");
const logger_1 = require("../utils/logger");
const is_plugin_project_1 = require("../utils/is-plugin-project");
const get_plugin_info_1 = require("../api/get-plugin-info");
const types_2 = require("../v1/types");
const model_1 = require("../v1/model");
const project_1 = __importDefault(require("../v1/model/project"));
const start_1 = require("../v2/services/start");
const release_1 = require("../v2/services/release");
const build_1 = require("../v2/services/build");
const init_1 = require("../v2/services/init");
const config_1 = require("../v2/services/config");
const update_1 = require("../v2/services/update");
(async () => {
const options = (0, commander_1.createCommand)()
.option('--command <command>', 'Execute command name')
.option('--payload <payload>', 'Execute payload json')
.parse(process.argv)
.opts();
const command = options.command;
const payload = JSON.parse(options.payload);
// 初始化命令仅能根据 payload 查询插件信息后识别 v1 v2
if (command === types_1.ECommandName.init) {
const { projectName, pluginId, pluginSecret, siteDomain, templateId } = payload;
try {
const remotePluginInfo = await (0, get_plugin_info_1.getPluginInfo)(pluginId, pluginSecret, siteDomain);
if (remotePluginInfo.frameworkVersion === types_1.EPluginFrameworkVersion.v2) {
logger_1.logger.info('Current plugin will use v2 framework.');
await (0, init_1.initProject)({
projectName,
pluginId,
pluginSecret,
siteDomain,
templateId,
});
return;
}
}
catch (e) {
// 私有化环境未部署插件框架版本查询接口会异常,我们兜成是 v1 插件
logger_1.logger.debug(e);
logger_1.logger.warn("Can't get the plugin' framework version, will be treated as version 1.0.");
}
logger_1.logger.info('Current plugin will use v1 framework.');
await project_1.default.init({
name: projectName,
pluginId,
pluginSecret,
options,
});
return;
}
// 以下为插件工程下的操作命令
const [isPlugin, pluginFrameworkVersion] = (0, is_plugin_project_1.isPluginProject)();
if (!isPlugin) {
logger_1.logger.error('Current working directory is not a plugin project, please check and retry.');
process.exit(1);
}
try {
if (pluginFrameworkVersion === types_1.EPluginFrameworkVersion.v2) {
logger_1.logger.info('Current project is v2 framework.');
switch (command) {
case types_1.ECommandName.start: {
await (0, start_1.startProject)();
return;
}
case types_1.ECommandName.build: {
await (0, build_1.buildProject)(payload);
return;
}
case types_1.ECommandName.release: {
await (0, release_1.releaseProject)();
return;
}
case types_1.ECommandName.config: {
if (payload.operate.toLowerCase() === 'set') {
await (0, config_1.setConfig)(payload.key, payload.value);
return;
}
if (payload.operate.toLowerCase() === 'get') {
await (0, config_1.getConfig)(payload.key);
return;
}
logger_1.logger.error('Only the get set operator is supported.');
return;
}
case types_1.ECommandName.update: {
(0, update_1.updateProject)();
return;
}
}
}
}
catch (e) {
logger_1.logger.debug(e);
// default v1 project
logger_1.logger.warn("Can't execute the command as version 2.0, will be treated as version 1.0.");
}
logger_1.logger.info('Current project is v1 framework.');
const mainArgs = payload.mainArgs;
switch (command) {
case types_1.ECommandName.start: {
project_1.default.run(types_2.ScriptCommand.start, process.argv);
return;
}
case types_1.ECommandName.build: {
const argv = payload.zip ? ['--zip'] : [];
project_1.default.run(types_2.ScriptCommand.build, argv);
return;
}
case types_1.ECommandName.release: {
// 将主进程命令参数透传给子进程消费,比如 lpm release 指定 pluginSecret
project_1.default.run(types_2.ScriptCommand.release, mainArgs);
return;
}
case types_1.ECommandName.config: {
const ins = model_1.ConfigFactory.getConfig(types_2.EConfigType.Plugin);
await ins.run(payload.operate, payload.key, payload.value);
return;
}
case types_1.ECommandName.update: {
logger_1.logger.info('The command is only support in v2 framework.');
return;
}
}
logger_1.logger.error(`The command ${command} is not supported.`);
process.exit(1);
})();