UNPKG

@tuzki/cli

Version:

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

195 lines (194 loc) 5.86 kB
/* * cli 配置相关 * * @Author: xu.jin * @Date: 2023-08-15 19:21:16 * * Copyright © 2014-2023 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 fs from 'fs'; import os from 'os'; import path from 'path'; import dotenv from 'dotenv'; import Logger from '@tuzki/scaffold-logger'; import { parse } from './comment-json.js'; const logger = Logger.get('cli:utils:config'); const defaultConfig = { apiHost: 'https://dev.rabbitpre.com.cn', cliCheckUpdateTag: 'latest', logLevel: 'info', editorHost: 'https://dev.rabbitpre.com.cn/content/editor', rendererHost: 'https://dev.rabbitpre.com.cn/content/renderer/preview', lowcodeEditorHost: 'https://dev.rabbitpre.com.cn/lowcode/lowcodeEditor', }; /** * 获取配置,主要包含本地配置和 .env 配置 * 优先级:.env > local > default * * @export * @return {*} {Promise<CliConfig>} */ export function getConfig() { const envConfig = getDotenvConfig(); const localConfig = getLocalConfig(); return Object.assign(Object.assign(Object.assign({}, defaultConfig), localConfig), envConfig); } /** * 获取 .env 环境配置 * * @export * @param {ENV} env * @return {*} */ export function getDotenvConfig() { const cwd = process.cwd(); // 获取 .env p配置 const { parsed: envConfig } = dotenv.config({ path: path.resolve(cwd, '.env'), }); return envConfig; } /** * 获取本地配置 * @returns */ export function getLocalConfig() { try { const localConfigPath = path.resolve(os.homedir(), './.tuzki.jsonc'); if (!fs.existsSync(localConfigPath)) { return {}; } const configJsonc = fs.readFileSync(localConfigPath, 'utf8'); const config = parse(configJsonc); return config || {}; } catch (err) { logger.error('获取本地配置失败:', err); } } /** * 查看某一配置 * @param name 配置名称 * @returns */ export function getConfigByName(name) { try { return configCache[name]; } catch (err) { logger.error(`获取本地配置${name}失败:`, err); } } /** * 设置配置到本地文件 * @param localConfig 需要写到本地的配置 * @returns */ export function setLocalConfig(localConfig) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const homedir = os.homedir(); const writeStream = fs.createWriteStream(`${homedir}/.tuzki.jsonc`, { encoding: 'utf8', }); writeStream.on('error', err => { reject(err); }); writeStream.write(JSON.stringify(localConfig)); writeStream.end(); writeStream.on('finish', () => { resolve(true); }); }).catch(err => { logger.error('写入本地配置失败:', err); }); }); } /** * 根据name value设置本地配置 * * @export * @param {string} name 配置名称 * @param {string} value 配置值 */ export function setLocalConfigByName(name, value) { return __awaiter(this, void 0, void 0, function* () { const curConfig = getLocalConfig(); yield setLocalConfig(Object.assign(Object.assign({}, curConfig), { [name]: value === 'false' ? false : value })); }); } /** * 删除本地配置 * * @export * @param {(string | string[])} name 删除配置名称, 不传则删除所有 */ export function unsetLocalConfig(name) { return __awaiter(this, void 0, void 0, function* () { try { const config = getLocalConfig(); if (!name) { yield setLocalConfig({}); } else { if (typeof name === 'string') { delete config[name]; } else { name.forEach(e => { delete config[e]; }); } yield setLocalConfig(Object.assign({}, config)); } } catch (err) { logger.error('删除本地配置出错', err); } }); } // 前端判断是否已登录 export const isLogin = () => __awaiter(void 0, void 0, void 0, function* () { const config = yield getConfig(); return !!config.token; }); // 在注入环境配置之前没有数据, 不然会在日志级别生效前就输出日志 let configCache = {}; /** * 根据传入的环境字符串, 更新当前配置 * @param inputEnv */ export const injectConfigEnv = () => __awaiter(void 0, void 0, void 0, function* () { configCache = yield getConfig(); }); /** * 更新配置 * @param configOpt */ export const updateConfig = (configOpt) => { configCache = Object.assign(configCache, configOpt); }; /** * 获取所有配置,包含 cli option 对配置的修改,优先级最高 * @returns */ export const getCliConfig = () => { return configCache; }; /** * 暴露出代理配置对象, 目前不支持直接打印 */ export default new Proxy({}, { get(_, key, receiver) { return Reflect.get(configCache, key, receiver); }, });