@szzbmy/lowcode-cli
Version:
🐇 lowcode-cli is an efficient cli tool for Rabbitpre plugin component secondary development. ❤️
114 lines (113 loc) • 4.34 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/*
* 命令暴露
* @Author: Jiyu Shao
* @Date: 2021-08-12 11:24:02
* @Last Modified by: chubiao Ni
* @Last Modified time: 2022-04-14 17:27:23
*/
const react_1 = __importStar(require("react"));
const ink_1 = require("ink");
const update_notifier_1 = __importDefault(require("update-notifier"));
const command_1 = require("../constants/command");
const deploy_1 = __importDefault(require("./deploy"));
const debug_1 = __importDefault(require("./debug"));
const login_1 = __importDefault(require("./login"));
const create_1 = __importDefault(require("./create"));
const logger_1 = __importDefault(require("../utils/logger"));
const command_helper_1 = require("../utils/command-helper");
const config_1 = __importDefault(require("../config"));
const components_1 = require("../components");
/**
* 命令处理器 MAPPING
*/
const COMMAND_HANDLER_MAPPING = {
[command_1.COMMAND.DEPLOY]: deploy_1.default,
[command_1.COMMAND.DEBUG]: debug_1.default,
[command_1.COMMAND.LOGIN]: login_1.default,
[command_1.COMMAND.CREATE]: create_1.default,
};
function useCheckUpdate() {
const [status, setStatus] = (0, react_1.useState)('checking');
(0, react_1.useEffect)(() => {
const checkUpdate = async () => {
const updater = new update_notifier_1.default.UpdateNotifier({
pkg: config_1.default.cliPkgJson,
updateCheckInterval: 0,
shouldNotifyInNpmScript: true,
});
try {
const updateInfo = (await updater.fetchInfo());
if (updateInfo.type === 'latest') {
setStatus('latest');
return;
}
updater.config.set('update', updateInfo);
updater.check();
updater.notify({
message: `发现新版本 ${updateInfo.latest} !\n\n运行 npm i @szzbmy/lowcode-cli@${updateInfo.latest} -g 命令来更新`,
});
// 不是最新版本,render 会返回 null,process 会自动退出
setStatus('outdate');
}
catch (e) {
logger_1.default.error('检查更新错误', e);
setStatus('error');
}
};
checkUpdate();
}, [setStatus]);
return status;
}
/**
* App
*/
function App(props) {
const { cli } = props;
const { input } = cli;
const commandHandler = COMMAND_HANDLER_MAPPING[input[0]];
if (typeof commandHandler === 'undefined') {
(0, command_helper_1.reportUnknownCommand)(input[0]);
process.exit(1);
}
const status = useCheckUpdate();
switch (status) {
case 'checking':
return (react_1.default.createElement(ink_1.Text, null,
react_1.default.createElement(ink_1.Text, { color: "green" },
react_1.default.createElement(components_1.Spinner, { type: "dots" }),
"\u68C0\u67E5\u66F4\u65B0\u4E2D...")));
case 'latest':
case 'error':
return commandHandler(cli);
default:
return null;
}
}
function Main(cli) {
return (0, ink_1.render)(react_1.default.createElement(App, { cli: cli }));
}
exports.default = Main;