@tuzki/cli
Version:
🐇 lowcode-cli is an efficient cli tool for Rabbitpre plugin component secondary development. ❤️
195 lines (194 loc) • 7.84 kB
JavaScript
/*
* lowcode cli
*
* @Author: xu.jin
* @Date: 2022-12-06 10:37:44
*
* Copyright © 2014-2022 Rabbitpre.com. All Rights Reserved.
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import Logger, { levelTextMap } from '@tuzki/scaffold-logger';
import { program, Option } from 'commander';
import fse from 'fs-extra';
import path from 'path';
import { fileURLToPath } from 'url';
import { build, config, create, debug, uploadSourceCode, login, start, update, } from './commands/index.js';
import cliConfig, { injectConfigEnv, updateConfig } from './utils/config.js';
import { checkCliVersion, checkNodeVersion } from './utils/version.js';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const logger = Logger.get('cli:index');
// default port
export const DEFAULT_PORT = '3333';
// default host
export const DEFAULT_HOST = '127.0.0.1';
const init = () => __awaiter(void 0, void 0, void 0, function* () {
const pkgJson = yield fse.readJSON(path.join(__dirname, '../package.json'));
const { name: pkgName, version: pkgVer, engines } = pkgJson || {};
const cwd = process.cwd();
// version
program
.version(pkgVer, '-v, -V, --version')
.usage('<command> [options]')
.description('🐇 tuzki-cli is an efficient cli tool for Lowcode frontend development. ❤️');
// tuzki login
program
.command('login')
.description('login tuzki')
.allowUnknownOption()
.action(() => __awaiter(void 0, void 0, void 0, function* () {
yield login();
}));
// tuzki start
program
.command('start')
.description('start server')
.allowUnknownOption()
.option('--config <config>', 'custom config path')
.option('--mode <mode>', 'set mode', 'development')
.option('-h, --host <host>', 'dev server host', DEFAULT_HOST)
.option('-p, --port <port>', 'dev server port', DEFAULT_PORT)
.option('--rootDir <rootDir>', 'project root directory', cwd)
.option('--analyze', 'analyze project build product')
.option('--https', 'use https')
.action((commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield start(commandArgs);
}));
// tuzki debug
program
.command('debug')
.description('debug project')
.allowUnknownOption()
.option('--config <config>', 'custom config path')
.option('--rootDir <rootDir>', 'project root directory', cwd)
.option('--https', 'use https', false)
.action((commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield debug(commandArgs);
}));
// tuzki build
program
.command('build')
.description('build project')
.allowUnknownOption()
.option('--config <config>', 'use custom config')
.option('--mode <mode>', 'set mode', 'production')
.option('--analyze', 'analyze project build product')
.option('--rootDir <rootDir>', 'project root directory', cwd)
.action((commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield build(commandArgs);
}));
// tuzki test
program
.command('test')
.description('test project')
.allowUnknownOption()
.option('--config <config>', 'use custom config')
.option('--coverage', 'test coverage')
.action(() => {
logger.info('模块单元测试功能暂未提供,敬请期待!!!');
process.exit(0);
});
// tuzki lint
program
.command('lint')
.description('lint project')
.allowUnknownOption()
.option('--config <config>', 'use custom config')
.action(() => {
logger.info('模块 lint 检测功能暂未提供,敬请期待!!!');
process.exit(0);
});
// tuzki init-project
program
.command('create [project-name]')
.description('create a new project interactively')
.allowUnknownOption()
.option('--rootDir <rootDir>', 'project root directory', cwd)
.option('--config <config>', 'use custom config')
.addOption(new Option('--cicd', 'create project in cicd').hideHelp())
.action((projName, commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield create(commandArgs, projName);
}));
// tuzki update-project
program
.command('update-project')
.description('When module model update in lowcode manager, you can execute this command to update project')
.allowUnknownOption()
.option('--rootDir <rootDir>', 'project root directory', cwd)
.option('--config <config>', 'use custom config')
.addOption(new Option('--cicd', 'update project in cicd').hideHelp())
.action((commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield update(commandArgs);
}));
// tuzki deploy
program
.command('deploy')
.description('upload project source code')
.allowUnknownOption()
.option('--rootDir <rootDir>', 'project root directory')
.option('--config <config>', 'use custom config')
.action((commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield uploadSourceCode(commandArgs);
}));
// tuzki config
program
.command('config')
.description('config cli env variable')
.allowUnknownOption()
.option('--get <name>', 'get config variable: name')
.option('--set <nameValue...>', 'add a new local config variable: name value')
.option('--unset <name...>', 'remove a local variable: name1 name2')
.option('--unset-all', 'remove all local variable')
.option('-l, --list', 'list all config')
.action((commandArgs) => __awaiter(void 0, void 0, void 0, function* () {
yield config(commandArgs);
}));
program
.option('--log-level <level>', 'set log level')
.hook('preAction', (thisCommand) => __awaiter(void 0, void 0, void 0, function* () {
yield injectConfigEnv();
const cmdOpts = thisCommand.opts();
const cmdArg = thisCommand.args[0];
/** 注入日志级别 */
injectLoggerLevel(cmdOpts.logLevel);
/** 检查 node 版本 */
checkNodeVersion(pkgName, engines === null || engines === void 0 ? void 0 : engines.node);
/** 检查 cli 版本 */
checkCliVersion(cmdArg);
}));
program.parse();
// @ts-ignore
const proc = program.runningCommand;
if (proc) {
proc.on('close', process.exit.bind(process));
proc.on('error', () => {
process.exit(1);
});
}
const subCmd = program.args[0];
if (!subCmd) {
program.help();
}
});
/** 注入日志级别 */
const injectLoggerLevel = (logLevel) => {
// 更新 logLevel
if (logLevel) {
// 设置 logLevel 到本地配置
Logger.setLevel(levelTextMap[logLevel]);
updateConfig({ logLevel });
}
else {
// 获取配置
cliConfig.logLevel && Logger.setLevel(levelTextMap[cliConfig.logLevel]);
}
};
init();