UNPKG

@tuzki/cli

Version:

🐇 lowcode-cli is an efficient cli tool for Rabbitpre plugin component secondary development. ❤️

195 lines (194 loc) 7.84 kB
#!/usr/bin/env node /* * 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();