UNPKG

@storm-software/config-tools

Version:

⚡The Storm-Ops monorepo contains utility applications, tools, and various libraries to create modern and scalable web applications.

1,259 lines (1,233 loc) 48.2 kB
#!/usr/bin/env node var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // bin/config.ts var config_exports = {}; __export(config_exports, { createProgram: () => createProgram, viewAction: () => viewAction }); module.exports = __toCommonJS(config_exports); var import_commander = require("commander"); // src/create-storm-config.ts var import_schema = require("@storm-software/config/schema"); var import_defu2 = __toESM(require("defu"), 1); // src/config-file/get-config-file.ts var import_c12 = require("c12"); var import_defu = __toESM(require("defu"), 1); // src/types.ts var LogLevel = { SILENT: 0, FATAL: 10, ERROR: 20, WARN: 30, SUCCESS: 35, INFO: 40, DEBUG: 60, TRACE: 70, ALL: 100 }; var LogLevelLabel = { SILENT: "silent", FATAL: "fatal", ERROR: "error", WARN: "warn", SUCCESS: "success", INFO: "info", DEBUG: "debug", TRACE: "trace", ALL: "all" }; // src/utilities/get-default-config.ts var import_config = require("@storm-software/config"); var import_node_fs2 = require("fs"); var import_promises = require("fs/promises"); var import_node_path2 = require("path"); // src/utilities/correct-paths.ts var _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//; function normalizeWindowsPath(input = "") { if (!input) { return input; } return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase()); } __name(normalizeWindowsPath, "normalizeWindowsPath"); var _UNC_REGEX = /^[/\\]{2}/; var _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/; var _DRIVE_LETTER_RE = /^[A-Za-z]:$/; var correctPaths = /* @__PURE__ */ __name(function(path) { if (!path || path.length === 0) { return "."; } path = normalizeWindowsPath(path); const isUNCPath = path.match(_UNC_REGEX); const isPathAbsolute = isAbsolute(path); const trailingSeparator = path[path.length - 1] === "/"; path = normalizeString(path, !isPathAbsolute); if (path.length === 0) { if (isPathAbsolute) { return "/"; } return trailingSeparator ? "./" : "."; } if (trailingSeparator) { path += "/"; } if (_DRIVE_LETTER_RE.test(path)) { path += "/"; } if (isUNCPath) { if (!isPathAbsolute) { return `//./${path}`; } return `//${path}`; } return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path; }, "correctPaths"); var joinPaths = /* @__PURE__ */ __name(function(...segments) { let path = ""; for (const seg of segments) { if (!seg) { continue; } if (path.length > 0) { const pathTrailing = path[path.length - 1] === "/"; const segLeading = seg[0] === "/"; const both = pathTrailing && segLeading; if (both) { path += seg.slice(1); } else { path += pathTrailing || segLeading ? seg : `/${seg}`; } } else { path += seg; } } return correctPaths(path); }, "joinPaths"); function normalizeString(path, allowAboveRoot) { let res = ""; let lastSegmentLength = 0; let lastSlash = -1; let dots = 0; let char = null; for (let index = 0; index <= path.length; ++index) { if (index < path.length) { char = path[index]; } else if (char === "/") { break; } else { char = "/"; } if (char === "/") { if (lastSlash === index - 1 || dots === 1) { } else if (dots === 2) { if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") { if (res.length > 2) { const lastSlashIndex = res.lastIndexOf("/"); if (lastSlashIndex === -1) { res = ""; lastSegmentLength = 0; } else { res = res.slice(0, lastSlashIndex); lastSegmentLength = res.length - 1 - res.lastIndexOf("/"); } lastSlash = index; dots = 0; continue; } else if (res.length > 0) { res = ""; lastSegmentLength = 0; lastSlash = index; dots = 0; continue; } } if (allowAboveRoot) { res += res.length > 0 ? "/.." : ".."; lastSegmentLength = 2; } } else { if (res.length > 0) { res += `/${path.slice(lastSlash + 1, index)}`; } else { res = path.slice(lastSlash + 1, index); } lastSegmentLength = index - lastSlash - 1; } lastSlash = index; dots = 0; } else if (char === "." && dots !== -1) { ++dots; } else { dots = -1; } } return res; } __name(normalizeString, "normalizeString"); var isAbsolute = /* @__PURE__ */ __name(function(p) { return _IS_ABSOLUTE_RE.test(p); }, "isAbsolute"); // src/utilities/find-up.ts var import_node_fs = require("fs"); var import_node_path = require("path"); var MAX_PATH_SEARCH_DEPTH = 30; var depth = 0; function findFolderUp(startPath, endFileNames = [], endDirectoryNames = []) { const _startPath = startPath ?? process.cwd(); if (endDirectoryNames.some((endDirName) => (0, import_node_fs.existsSync)((0, import_node_path.join)(_startPath, endDirName)))) { return _startPath; } if (endFileNames.some((endFileName) => (0, import_node_fs.existsSync)((0, import_node_path.join)(_startPath, endFileName)))) { return _startPath; } if (_startPath !== "/" && depth++ < MAX_PATH_SEARCH_DEPTH) { const parent = (0, import_node_path.join)(_startPath, ".."); return findFolderUp(parent, endFileNames, endDirectoryNames); } return void 0; } __name(findFolderUp, "findFolderUp"); // src/utilities/find-workspace-root.ts var rootFiles = [ "storm-workspace.json", "storm-workspace.json", "storm-workspace.yaml", "storm-workspace.yml", "storm-workspace.js", "storm-workspace.ts", ".storm-workspace.json", ".storm-workspace.yaml", ".storm-workspace.yml", ".storm-workspace.js", ".storm-workspace.ts", "lerna.json", "nx.json", "turbo.json", "npm-workspace.json", "yarn-workspace.json", "pnpm-workspace.json", "npm-workspace.yaml", "yarn-workspace.yaml", "pnpm-workspace.yaml", "npm-workspace.yml", "yarn-workspace.yml", "pnpm-workspace.yml", "npm-lock.json", "yarn-lock.json", "pnpm-lock.json", "npm-lock.yaml", "yarn-lock.yaml", "pnpm-lock.yaml", "npm-lock.yml", "yarn-lock.yml", "pnpm-lock.yml", "bun.lockb" ]; var rootDirectories = [ ".storm-workspace", ".nx", ".github", ".vscode", ".verdaccio" ]; function findWorkspaceRootSafe(pathInsideMonorepo) { if (process.env.STORM_WORKSPACE_ROOT || process.env.NX_WORKSPACE_ROOT_PATH) { return correctPaths(process.env.STORM_WORKSPACE_ROOT ?? process.env.NX_WORKSPACE_ROOT_PATH); } return correctPaths(findFolderUp(pathInsideMonorepo ?? process.cwd(), rootFiles, rootDirectories)); } __name(findWorkspaceRootSafe, "findWorkspaceRootSafe"); function findWorkspaceRoot(pathInsideMonorepo) { const result = findWorkspaceRootSafe(pathInsideMonorepo); if (!result) { throw new Error(`Cannot find workspace root upwards from known path. Files search list includes: ${rootFiles.join("\n")} Path: ${pathInsideMonorepo ? pathInsideMonorepo : process.cwd()}`); } return result; } __name(findWorkspaceRoot, "findWorkspaceRoot"); // src/utilities/get-default-config.ts var DEFAULT_COLOR_CONFIG = { light: { background: "#fafafa", foreground: "#1d1e22", brand: "#1fb2a6", alternate: "#db2777", help: "#5C4EE5", success: "#087f5b", info: "#0550ae", warning: "#e3b341", danger: "#D8314A", positive: "#22c55e", negative: "#dc2626" }, dark: { background: "#1d1e22", foreground: "#cbd5e1", brand: "#2dd4bf", alternate: "#db2777", help: "#818cf8", success: "#10b981", info: "#58a6ff", warning: "#f3d371", danger: "#D8314A", positive: "#22c55e", negative: "#dc2626" } }; var getDefaultConfig = /* @__PURE__ */ __name(async (root) => { let license = import_config.STORM_DEFAULT_LICENSE; let homepage = import_config.STORM_DEFAULT_HOMEPAGE; let name = void 0; let namespace = void 0; let repository = void 0; const workspaceRoot = findWorkspaceRoot(root); if ((0, import_node_fs2.existsSync)((0, import_node_path2.join)(workspaceRoot, "package.json"))) { const file = await (0, import_promises.readFile)(joinPaths(workspaceRoot, "package.json"), "utf8"); if (file) { const packageJson = JSON.parse(file); if (packageJson.name) { name = packageJson.name; } if (packageJson.namespace) { namespace = packageJson.namespace; } if (packageJson.repository) { if (typeof packageJson.repository === "string") { repository = packageJson.repository; } else if (packageJson.repository.url) { repository = packageJson.repository.url; } } if (packageJson.license) { license = packageJson.license; } if (packageJson.homepage) { homepage = packageJson.homepage; } } } return { workspaceRoot, name, namespace, repository, license, homepage, docs: `${homepage || import_config.STORM_DEFAULT_HOMEPAGE}/docs`, licensing: `${homepage || import_config.STORM_DEFAULT_HOMEPAGE}/license`, error: { url: `${homepage || import_config.STORM_DEFAULT_HOMEPAGE}/errors` } }; }, "getDefaultConfig"); // src/logger/chalk.ts var import_chalk = __toESM(require("chalk"), 1); var chalkDefault = { hex: /* @__PURE__ */ __name((_) => (message) => message, "hex"), bgHex: /* @__PURE__ */ __name((_) => ({ whiteBright: /* @__PURE__ */ __name((message) => message, "whiteBright") }), "bgHex"), whiteBright: /* @__PURE__ */ __name((message) => message, "whiteBright"), gray: /* @__PURE__ */ __name((message) => message, "gray"), bold: { hex: /* @__PURE__ */ __name((_) => (message) => message, "hex"), bgHex: /* @__PURE__ */ __name((_) => ({ whiteBright: /* @__PURE__ */ __name((message) => message, "whiteBright") }), "bgHex"), whiteBright: /* @__PURE__ */ __name((message) => message, "whiteBright") }, dim: { hex: /* @__PURE__ */ __name((_) => (message) => message, "hex"), gray: /* @__PURE__ */ __name((message) => message, "gray") } }; var getChalk = /* @__PURE__ */ __name(() => { let _chalk = import_chalk.default; if (!_chalk?.hex || !_chalk?.bold?.hex || !_chalk?.bgHex || !_chalk?.whiteBright) { _chalk = chalkDefault; } return _chalk; }, "getChalk"); // src/logger/is-unicode-supported.ts function isUnicodeSupported() { if (process.platform !== "win32") { return process.env.TERM !== "linux"; } return Boolean(process.env.WT_SESSION) || // Windows Terminal Boolean(process.env.TERMINUS_SUBLIME) || // Terminus (<0.2.27) process.env.ConEmuTask === "{cmd::Cmder}" || // ConEmu and cmder process.env.TERM_PROGRAM === "Terminus-Sublime" || process.env.TERM_PROGRAM === "vscode" || process.env.TERM === "xterm-256color" || process.env.TERM === "alacritty" || process.env.TERM === "rxvt-unicode" || process.env.TERM === "rxvt-unicode-256color" || process.env.TERMINAL_EMULATOR === "JetBrains-JediTerm"; } __name(isUnicodeSupported, "isUnicodeSupported"); // src/logger/console-icons.ts var useIcon = /* @__PURE__ */ __name((c, fallback) => isUnicodeSupported() ? c : fallback, "useIcon"); var CONSOLE_ICONS = { [LogLevelLabel.ERROR]: useIcon("\u2718", "\xD7"), [LogLevelLabel.FATAL]: useIcon("\u{1F480}", "\xD7"), [LogLevelLabel.WARN]: useIcon("\u26A0", "\u203C"), [LogLevelLabel.INFO]: useIcon("\u2139", "i"), [LogLevelLabel.SUCCESS]: useIcon("\u2714", "\u221A"), [LogLevelLabel.DEBUG]: useIcon("\u{1F6E0}", "D"), [LogLevelLabel.TRACE]: useIcon("\u{1F6E0}", "T"), [LogLevelLabel.ALL]: useIcon("\u2709", "\u2192") }; // src/logger/format-timestamp.ts var formatTimestamp = /* @__PURE__ */ __name((date = /* @__PURE__ */ new Date()) => { return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`; }, "formatTimestamp"); // src/logger/get-log-level.ts var getLogLevel = /* @__PURE__ */ __name((label) => { switch (label) { case "all": return LogLevel.ALL; case "trace": return LogLevel.TRACE; case "debug": return LogLevel.DEBUG; case "info": return LogLevel.INFO; case "warn": return LogLevel.WARN; case "error": return LogLevel.ERROR; case "fatal": return LogLevel.FATAL; case "silent": return LogLevel.SILENT; default: return LogLevel.INFO; } }, "getLogLevel"); var getLogLevelLabel = /* @__PURE__ */ __name((logLevel = LogLevel.INFO) => { if (logLevel >= LogLevel.ALL) { return LogLevelLabel.ALL; } if (logLevel >= LogLevel.TRACE) { return LogLevelLabel.TRACE; } if (logLevel >= LogLevel.DEBUG) { return LogLevelLabel.DEBUG; } if (logLevel >= LogLevel.INFO) { return LogLevelLabel.INFO; } if (logLevel >= LogLevel.WARN) { return LogLevelLabel.WARN; } if (logLevel >= LogLevel.ERROR) { return LogLevelLabel.ERROR; } if (logLevel >= LogLevel.FATAL) { return LogLevelLabel.FATAL; } if (logLevel <= LogLevel.SILENT) { return LogLevelLabel.SILENT; } return LogLevelLabel.INFO; }, "getLogLevelLabel"); // src/logger/console.ts var getLogFn = /* @__PURE__ */ __name((logLevel = LogLevel.INFO, config = {}, _chalk = getChalk()) => { const colors = !config.colors?.dark && !config.colors?.["base"] && !config.colors?.["base"]?.dark ? DEFAULT_COLOR_CONFIG : config.colors?.dark && typeof config.colors.dark === "string" ? config.colors : config.colors?.["base"]?.dark && typeof config.colors["base"].dark === "string" ? config.colors["base"].dark : config.colors?.["base"] ? config.colors?.["base"] : DEFAULT_COLOR_CONFIG; const configLogLevel = config.logLevel || process.env.STORM_LOG_LEVEL || LogLevelLabel.INFO; if (logLevel > getLogLevel(configLogLevel) || logLevel <= LogLevel.SILENT || getLogLevel(configLogLevel) <= LogLevel.SILENT) { return (_) => { }; } if (typeof logLevel === "number" && LogLevel.FATAL >= logLevel) { return (message) => { console.error(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.fatal ?? "#7d1a1a")(`[${CONSOLE_ICONS[LogLevelLabel.FATAL]} Fatal] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } if (typeof logLevel === "number" && LogLevel.ERROR >= logLevel) { return (message) => { console.error(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.danger ?? "#f85149")(`[${CONSOLE_ICONS[LogLevelLabel.ERROR]} Error] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } if (typeof logLevel === "number" && LogLevel.WARN >= logLevel) { return (message) => { console.warn(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.warning ?? "#e3b341")(`[${CONSOLE_ICONS[LogLevelLabel.WARN]} Warn] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } if (typeof logLevel === "number" && LogLevel.SUCCESS >= logLevel) { return (message) => { console.info(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.success ?? "#56d364")(`[${CONSOLE_ICONS[LogLevelLabel.SUCCESS]} Success] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } if (typeof logLevel === "number" && LogLevel.INFO >= logLevel) { return (message) => { console.info(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.info ?? "#58a6ff")(`[${CONSOLE_ICONS[LogLevelLabel.INFO]} Info] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } if (typeof logLevel === "number" && LogLevel.DEBUG >= logLevel) { return (message) => { console.debug(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.brand ?? "#1fb2a6")(`[${CONSOLE_ICONS[LogLevelLabel.DEBUG]} Debug] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } if (typeof logLevel === "number" && LogLevel.TRACE >= logLevel) { return (message) => { console.debug(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.brand ?? "#1fb2a6")(`[${CONSOLE_ICONS[LogLevelLabel.TRACE]} Trace] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; } return (message) => { console.log(` ${_chalk.gray(formatTimestamp())} ${_chalk.hex(colors.brand ?? "#1fb2a6")(`[${CONSOLE_ICONS[LogLevelLabel.ALL]} System] `)}${_chalk.bold.whiteBright(formatLogMessage(message))} `); }; }, "getLogFn"); var writeFatal = /* @__PURE__ */ __name((message, config) => getLogFn(LogLevel.FATAL, config)(message), "writeFatal"); var writeError = /* @__PURE__ */ __name((message, config) => getLogFn(LogLevel.ERROR, config)(message), "writeError"); var writeWarning = /* @__PURE__ */ __name((message, config) => getLogFn(LogLevel.WARN, config)(message), "writeWarning"); var writeInfo = /* @__PURE__ */ __name((message, config) => getLogFn(LogLevel.INFO, config)(message), "writeInfo"); var writeSuccess = /* @__PURE__ */ __name((message, config) => getLogFn(LogLevel.SUCCESS, config)(message), "writeSuccess"); var writeTrace = /* @__PURE__ */ __name((message, config) => getLogFn(LogLevel.TRACE, config)(message), "writeTrace"); var MAX_DEPTH = 4; var formatLogMessage = /* @__PURE__ */ __name((message, options = {}, depth2 = 0) => { if (depth2 > MAX_DEPTH) { return "<max depth>"; } const prefix = options.prefix ?? "-"; const skip = options.skip ?? []; return typeof message === "undefined" || message === null || !message && typeof message !== "boolean" ? "<none>" : typeof message === "string" ? message : Array.isArray(message) ? ` ${message.map((item, index) => ` ${prefix}> #${index} = ${formatLogMessage(item, { prefix: `${prefix}-`, skip }, depth2 + 1)}`).join("\n")}` : typeof message === "object" ? ` ${Object.keys(message).filter((key) => !skip.includes(key)).map((key) => ` ${prefix}> ${key} = ${_isFunction(message[key]) ? "<function>" : typeof message[key] === "object" ? formatLogMessage(message[key], { prefix: `${prefix}-`, skip }, depth2 + 1) : message[key]}`).join("\n")}` : message; }, "formatLogMessage"); var _isFunction = /* @__PURE__ */ __name((value) => { try { return value instanceof Function || typeof value === "function" || !!(value?.constructor && value?.call && value?.apply); } catch (e) { return false; } }, "_isFunction"); // src/utilities/process-handler.ts var exitWithError = /* @__PURE__ */ __name((config) => { writeFatal("Exiting script with an error status...", config); process.exit(1); }, "exitWithError"); var exitWithSuccess = /* @__PURE__ */ __name((config) => { writeSuccess("Script completed successfully. Exiting...", config); process.exit(0); }, "exitWithSuccess"); var handleProcess = /* @__PURE__ */ __name((config) => { writeTrace(`Using the following arguments to process the script: ${process.argv.join(", ")}`, config); process.on("unhandledRejection", (error) => { writeError(`An Unhandled Rejection occurred while running the program: ${error}`, config); exitWithError(config); }); process.on("uncaughtException", (error) => { writeError(`An Uncaught Exception occurred while running the program: ${error.message} Stacktrace: ${error.stack}`, config); exitWithError(config); }); process.on("SIGTERM", (signal) => { writeError(`The program terminated with signal code: ${signal}`, config); exitWithError(config); }); process.on("SIGINT", (signal) => { writeError(`The program terminated with signal code: ${signal}`, config); exitWithError(config); }); process.on("SIGHUP", (signal) => { writeError(`The program terminated with signal code: ${signal}`, config); exitWithError(config); }); }, "handleProcess"); // src/config-file/get-config-file.ts var getConfigFileByName = /* @__PURE__ */ __name(async (fileName, filePath, options = {}) => { const workspacePath = filePath || findWorkspaceRoot(filePath); const configs = await Promise.all([ (0, import_c12.loadConfig)({ cwd: workspacePath, packageJson: true, name: fileName, envName: fileName?.toUpperCase(), jitiOptions: { debug: false, fsCache: process.env.STORM_SKIP_CACHE === "true" ? false : joinPaths(process.env.STORM_CACHE_DIR || "node_modules/.cache/storm", "jiti") }, ...options }), (0, import_c12.loadConfig)({ cwd: workspacePath, packageJson: true, name: fileName, envName: fileName?.toUpperCase(), jitiOptions: { debug: false, fsCache: process.env.STORM_SKIP_CACHE === "true" ? false : joinPaths(process.env.STORM_CACHE_DIR || "node_modules/.cache/storm", "jiti") }, configFile: fileName, ...options }) ]); return (0, import_defu.default)(configs[0] ?? {}, configs[1] ?? {}); }, "getConfigFileByName"); var getConfigFile = /* @__PURE__ */ __name(async (filePath, additionalFileNames = []) => { const workspacePath = filePath ? filePath : findWorkspaceRoot(filePath); const result = await getConfigFileByName("storm-workspace", workspacePath); let config = result.config; const configFile = result.configFile; if (config && configFile && Object.keys(config).length > 0 && !config.skipConfigLogging) { writeTrace(`Found Storm configuration file "${configFile.includes(`${workspacePath}/`) ? configFile.replace(`${workspacePath}/`, "") : configFile}" at "${workspacePath}"`, { logLevel: "all" }); } if (additionalFileNames && additionalFileNames.length > 0) { const results = await Promise.all(additionalFileNames.map((fileName) => getConfigFileByName(fileName, workspacePath))); for (const result2 of results) { if (result2?.config && result2?.configFile && Object.keys(result2.config).length > 0) { if (!config.skipConfigLogging && !result2.config.skipConfigLogging) { writeTrace(`Found alternative configuration file "${result2.configFile.includes(`${workspacePath}/`) ? result2.configFile.replace(`${workspacePath}/`, "") : result2.configFile}" at "${workspacePath}"`, { logLevel: "all" }); } config = (0, import_defu.default)(result2.config ?? {}, config ?? {}); } } } if (!config) { return void 0; } config.configFile = configFile; return config; }, "getConfigFile"); // src/env/get-env.ts var import_config2 = require("@storm-software/config"); var getExtensionEnv = /* @__PURE__ */ __name((extensionName) => { const prefix = `STORM_EXTENSION_${extensionName.toUpperCase()}_`; return Object.keys(process.env).filter((key) => key.startsWith(prefix)).reduce((ret, key) => { const name = key.replace(prefix, "").split("_").map((i) => i.length > 0 ? i.trim().charAt(0).toUpperCase() + i.trim().slice(1) : "").join(""); if (name) { ret[name] = process.env[key]; } return ret; }, {}); }, "getExtensionEnv"); var getConfigEnv = /* @__PURE__ */ __name(() => { const prefix = "STORM_"; let config = { extends: process.env[`${prefix}EXTENDS`] || void 0, name: process.env[`${prefix}NAME`] || void 0, namespace: process.env[`${prefix}NAMESPACE`] || void 0, owner: process.env[`${prefix}OWNER`] || void 0, bot: { name: process.env[`${prefix}BOT_NAME`] || void 0, email: process.env[`${prefix}BOT_EMAIL`] || void 0 }, release: { banner: process.env[`${prefix}RELEASE_BANNER`] || void 0, header: process.env[`${prefix}RELEASE_HEADER`] || void 0, footer: process.env[`${prefix}RELEASE_FOOTER`] || void 0 }, error: { codesFile: process.env[`${prefix}ERROR_CODES_FILE`] || void 0, url: process.env[`${prefix}ERROR_URL`] || void 0 }, account: { twitter: process.env[`${prefix}ACCOUNT_TWITTER`] || void 0, discord: process.env[`${prefix}ACCOUNT_DISCORD`] || void 0, telegram: process.env[`${prefix}ACCOUNT_TELEGRAM`] || void 0, slack: process.env[`${prefix}ACCOUNT_SLACK`] || void 0, medium: process.env[`${prefix}ACCOUNT_MEDIUM`] || void 0, github: process.env[`${prefix}ACCOUNT_GITHUB`] || void 0 }, organization: process.env[`${prefix}ORGANIZATION`] || void 0, packageManager: process.env[`${prefix}PACKAGE_MANAGER`] || void 0, license: process.env[`${prefix}LICENSE`] || void 0, homepage: process.env[`${prefix}HOMEPAGE`] || void 0, docs: process.env[`${prefix}DOCS`] || void 0, licensing: process.env[`${prefix}LICENSING`] || void 0, contact: process.env[`${prefix}CONTACT`] || void 0, timezone: process.env[`${prefix}TIMEZONE`] || process.env.TZ || void 0, locale: process.env[`${prefix}LOCALE`] || process.env.LOCALE || void 0, configFile: process.env[`${prefix}CONFIG_FILE`] ? correctPaths(process.env[`${prefix}CONFIG_FILE`]) : void 0, workspaceRoot: process.env[`${prefix}WORKSPACE_ROOT`] ? correctPaths(process.env[`${prefix}WORKSPACE_ROOT`]) : void 0, directories: { cache: process.env[`${prefix}CACHE_DIR`] ? correctPaths(process.env[`${prefix}CACHE_DIR`]) : void 0, data: process.env[`${prefix}DATA_DIR`] ? correctPaths(process.env[`${prefix}DATA_DIR`]) : void 0, config: process.env[`${prefix}CONFIG_DIR`] ? correctPaths(process.env[`${prefix}CONFIG_DIR`]) : void 0, temp: process.env[`${prefix}TEMP_DIR`] ? correctPaths(process.env[`${prefix}TEMP_DIR`]) : void 0, log: process.env[`${prefix}LOG_DIR`] ? correctPaths(process.env[`${prefix}LOG_DIR`]) : void 0, build: process.env[`${prefix}BUILD_DIR`] ? correctPaths(process.env[`${prefix}BUILD_DIR`]) : void 0 }, skipCache: process.env[`${prefix}SKIP_CACHE`] !== void 0 ? Boolean(process.env[`${prefix}SKIP_CACHE`]) : void 0, mode: (process.env[`${prefix}MODE`] ?? process.env.NODE_ENV ?? process.env.ENVIRONMENT) || void 0, // ci: // process.env[`${prefix}CI`] !== undefined // ? Boolean( // process.env[`${prefix}CI`] ?? // process.env.CI ?? // process.env.CONTINUOUS_INTEGRATION // ) // : undefined, repository: process.env[`${prefix}REPOSITORY`] || void 0, branch: process.env[`${prefix}BRANCH`] || void 0, preid: process.env[`${prefix}PRE_ID`] || void 0, externalPackagePatterns: process.env[`${prefix}EXTERNAL_PACKAGE_PATTERNS`] ? JSON.parse(process.env[`${prefix}EXTERNAL_PACKAGE_PATTERNS`]) : [], registry: { github: process.env[`${prefix}REGISTRY_GITHUB`] || void 0, npm: process.env[`${prefix}REGISTRY_NPM`] || void 0, cargo: process.env[`${prefix}REGISTRY_CARGO`] || void 0, cyclone: process.env[`${prefix}REGISTRY_CYCLONE`] || void 0, container: process.env[`${prefix}REGISTRY_CONTAINER`] || void 0 }, logLevel: process.env[`${prefix}LOG_LEVEL`] !== null && process.env[`${prefix}LOG_LEVEL`] !== void 0 ? process.env[`${prefix}LOG_LEVEL`] && Number.isSafeInteger(Number.parseInt(process.env[`${prefix}LOG_LEVEL`])) ? getLogLevelLabel(Number.parseInt(process.env[`${prefix}LOG_LEVEL`])) : process.env[`${prefix}LOG_LEVEL`] : void 0, skipConfigLogging: process.env[`${prefix}SKIP_CONFIG_LOGGING`] !== void 0 ? Boolean(process.env[`${prefix}SKIP_CONFIG_LOGGING`]) : void 0 }; const themeNames = Object.keys(process.env).filter((envKey) => envKey.startsWith(`${prefix}COLOR_`) && import_config2.COLOR_KEYS.every((colorKey) => !envKey.startsWith(`${prefix}COLOR_LIGHT_${colorKey}`) && !envKey.startsWith(`${prefix}COLOR_DARK_${colorKey}`))); config.colors = themeNames.length > 0 ? themeNames.reduce((ret, themeName) => { ret[themeName] = getThemeColorConfigEnv(prefix, themeName); return ret; }, {}) : getThemeColorConfigEnv(prefix); if (config.docs === import_config2.STORM_DEFAULT_DOCS) { if (config.homepage === import_config2.STORM_DEFAULT_HOMEPAGE) { config.docs = `${import_config2.STORM_DEFAULT_HOMEPAGE}/projects/${config.name}/docs`; } else { config.docs = `${config.homepage}/docs`; } } if (config.licensing === import_config2.STORM_DEFAULT_LICENSING) { if (config.homepage === import_config2.STORM_DEFAULT_HOMEPAGE) { config.licensing = `${import_config2.STORM_DEFAULT_HOMEPAGE}/projects/${config.name}/licensing`; } else { config.licensing = `${config.homepage}/docs`; } } const serializedConfig = process.env[`${prefix}CONFIG`]; if (serializedConfig) { const parsed = JSON.parse(serializedConfig); config = { ...config, ...parsed, colors: { ...config.colors, ...parsed.colors }, extensions: { ...config.extensions, ...parsed.extensions } }; } return config; }, "getConfigEnv"); var getThemeColorConfigEnv = /* @__PURE__ */ __name((prefix, theme) => { const themeName = `COLOR_${theme && theme !== "base" ? `${theme}_` : ""}`.toUpperCase(); return process.env[`${prefix}${themeName}LIGHT_BRAND`] || process.env[`${prefix}${themeName}DARK_BRAND`] ? getMultiThemeColorConfigEnv(prefix + themeName) : getSingleThemeColorConfigEnv(prefix + themeName); }, "getThemeColorConfigEnv"); var getSingleThemeColorConfigEnv = /* @__PURE__ */ __name((prefix) => { return { dark: process.env[`${prefix}DARK`], light: process.env[`${prefix}LIGHT`], brand: process.env[`${prefix}BRAND`], alternate: process.env[`${prefix}ALTERNATE`], accent: process.env[`${prefix}ACCENT`], link: process.env[`${prefix}LINK`], help: process.env[`${prefix}HELP`], success: process.env[`${prefix}SUCCESS`], info: process.env[`${prefix}INFO`], warning: process.env[`${prefix}WARNING`], danger: process.env[`${prefix}DANGER`], fatal: process.env[`${prefix}FATAL`], positive: process.env[`${prefix}POSITIVE`], negative: process.env[`${prefix}NEGATIVE`] }; }, "getSingleThemeColorConfigEnv"); var getMultiThemeColorConfigEnv = /* @__PURE__ */ __name((prefix) => { return { light: getBaseThemeColorConfigEnv(`${prefix}_LIGHT_`), dark: getBaseThemeColorConfigEnv(`${prefix}_DARK_`) }; }, "getMultiThemeColorConfigEnv"); var getBaseThemeColorConfigEnv = /* @__PURE__ */ __name((prefix) => { return { foreground: process.env[`${prefix}FOREGROUND`], background: process.env[`${prefix}BACKGROUND`], brand: process.env[`${prefix}BRAND`], alternate: process.env[`${prefix}ALTERNATE`], accent: process.env[`${prefix}ACCENT`], link: process.env[`${prefix}LINK`], help: process.env[`${prefix}HELP`], success: process.env[`${prefix}SUCCESS`], info: process.env[`${prefix}INFO`], warning: process.env[`${prefix}WARNING`], danger: process.env[`${prefix}DANGER`], fatal: process.env[`${prefix}FATAL`], positive: process.env[`${prefix}POSITIVE`], negative: process.env[`${prefix}NEGATIVE`] }; }, "getBaseThemeColorConfigEnv"); // src/env/set-env.ts var setExtensionEnv = /* @__PURE__ */ __name((extensionName, extension) => { for (const key of Object.keys(extension ?? {})) { if (extension[key]) { const result = key?.replace(/([A-Z])+/g, (input) => input ? input[0]?.toUpperCase() + input.slice(1) : "").split(/(?=[A-Z])|[.\-\s_]/).map((x) => x.toLowerCase()) ?? []; let extensionKey; if (result.length === 0) { return; } if (result.length === 1) { extensionKey = result[0]?.toUpperCase() ?? ""; } else { extensionKey = result.reduce((ret, part) => { return `${ret}_${part.toLowerCase()}`; }); } process.env[`STORM_EXTENSION_${extensionName.toUpperCase()}_${extensionKey.toUpperCase()}`] = extension[key]; } } }, "setExtensionEnv"); var setConfigEnv = /* @__PURE__ */ __name((config) => { const prefix = "STORM_"; if (config.extends) { process.env[`${prefix}EXTENDS`] = Array.isArray(config.extends) ? JSON.stringify(config.extends) : config.extends; } if (config.name) { process.env[`${prefix}NAME`] = config.name; } if (config.namespace) { process.env[`${prefix}NAMESPACE`] = config.namespace; } if (config.owner) { process.env[`${prefix}OWNER`] = config.owner; } if (config.bot) { process.env[`${prefix}BOT_NAME`] = config.bot.name; process.env[`${prefix}BOT_EMAIL`] = config.bot.email; } if (config.error) { process.env[`${prefix}ERROR_CODES_FILE`] = config.error.codesFile; process.env[`${prefix}ERROR_URL`] = config.error.url; } if (config.release) { process.env[`${prefix}RELEASE_BANNER`] = config.release.banner; process.env[`${prefix}RELEASE_HEADER`] = config.release.header; process.env[`${prefix}RELEASE_FOOTER`] = config.release.footer; } if (config.account) { if (config.account.twitter) { process.env[`${prefix}ACCOUNT_TWITTER`] = config.account.twitter; } if (config.account.discord) { process.env[`${prefix}ACCOUNT_DISCORD`] = config.account.discord; } if (config.account.telegram) { process.env[`${prefix}ACCOUNT_TELEGRAM`] = config.account.telegram; } if (config.account.slack) { process.env[`${prefix}ACCOUNT_SLACK`] = config.account.slack; } if (config.account.medium) { process.env[`${prefix}ACCOUNT_MEDIUM`] = config.account.medium; } if (config.account.github) { process.env[`${prefix}ACCOUNT_GITHUB`] = config.account.github; } } if (config.organization) { process.env[`${prefix}ORGANIZATION`] = config.organization; } if (config.packageManager) { process.env[`${prefix}PACKAGE_MANAGER`] = config.packageManager; } if (config.license) { process.env[`${prefix}LICENSE`] = config.license; } if (config.homepage) { process.env[`${prefix}HOMEPAGE`] = config.homepage; } if (config.docs) { process.env[`${prefix}DOCS`] = config.docs; } if (config.licensing) { process.env[`${prefix}LICENSING`] = config.licensing; } if (config.contact) { process.env[`${prefix}CONTACT`] = config.contact; } if (config.timezone) { process.env[`${prefix}TIMEZONE`] = config.timezone; process.env.TZ = config.timezone; process.env.DEFAULT_TIMEZONE = config.timezone; } if (config.locale) { process.env[`${prefix}LOCALE`] = config.locale; process.env.LOCALE = config.locale; process.env.DEFAULT_LOCALE = config.locale; process.env.LANG = config.locale ? `${config.locale.replaceAll("-", "_")}.UTF-8` : "en_US.UTF-8"; } if (config.configFile) { process.env[`${prefix}CONFIG_FILE`] = correctPaths(config.configFile); } if (config.workspaceRoot) { process.env[`${prefix}WORKSPACE_ROOT`] = correctPaths(config.workspaceRoot); process.env.NX_WORKSPACE_ROOT = correctPaths(config.workspaceRoot); process.env.NX_WORKSPACE_ROOT_PATH = correctPaths(config.workspaceRoot); } if (config.directories) { if (!config.skipCache && config.directories.cache) { process.env[`${prefix}CACHE_DIR`] = correctPaths(config.directories.cache); } if (config.directories.data) { process.env[`${prefix}DATA_DIR`] = correctPaths(config.directories.data); } if (config.directories.config) { process.env[`${prefix}CONFIG_DIR`] = correctPaths(config.directories.config); } if (config.directories.temp) { process.env[`${prefix}TEMP_DIR`] = correctPaths(config.directories.temp); } if (config.directories.log) { process.env[`${prefix}LOG_DIR`] = correctPaths(config.directories.log); } if (config.directories.build) { process.env[`${prefix}BUILD_DIR`] = correctPaths(config.directories.build); } } if (config.skipCache !== void 0) { process.env[`${prefix}SKIP_CACHE`] = String(config.skipCache); if (config.skipCache) { process.env.NX_SKIP_NX_CACHE ??= String(config.skipCache); process.env.NX_CACHE_PROJECT_GRAPH ??= String(config.skipCache); } } if (config.mode) { process.env[`${prefix}MODE`] = config.mode; process.env.NODE_ENV = config.mode; process.env.ENVIRONMENT = config.mode; } if (config.colors?.base?.light || config.colors?.base?.dark) { for (const key of Object.keys(config.colors)) { setThemeColorConfigEnv(`${prefix}COLOR_${key}_`, config.colors[key]); } } else { setThemeColorConfigEnv(`${prefix}COLOR_`, config.colors); } if (config.repository) { process.env[`${prefix}REPOSITORY`] = config.repository; } if (config.branch) { process.env[`${prefix}BRANCH`] = config.branch; } if (config.preid) { process.env[`${prefix}PRE_ID`] = String(config.preid); } if (config.externalPackagePatterns) { process.env[`${prefix}EXTERNAL_PACKAGE_PATTERNS`] = JSON.stringify(config.externalPackagePatterns); } if (config.registry) { if (config.registry.github) { process.env[`${prefix}REGISTRY_GITHUB`] = String(config.registry.github); } if (config.registry.npm) { process.env[`${prefix}REGISTRY_NPM`] = String(config.registry.npm); } if (config.registry.cargo) { process.env[`${prefix}REGISTRY_CARGO`] = String(config.registry.cargo); } if (config.registry.cyclone) { process.env[`${prefix}REGISTRY_CYCLONE`] = String(config.registry.cyclone); } if (config.registry.container) { process.env[`${prefix}REGISTRY_CONTAINER`] = String(config.registry.container); } } if (config.logLevel) { process.env[`${prefix}LOG_LEVEL`] = String(config.logLevel); process.env.LOG_LEVEL = String(config.logLevel); process.env.NX_VERBOSE_LOGGING = String(getLogLevel(config.logLevel) >= LogLevel.DEBUG ? true : false); process.env.RUST_BACKTRACE = getLogLevel(config.logLevel) >= LogLevel.DEBUG ? "full" : "none"; } if (config.skipConfigLogging !== void 0) { process.env[`${prefix}SKIP_CONFIG_LOGGING`] = String(config.skipConfigLogging); } process.env[`${prefix}CONFIG`] = JSON.stringify(config); for (const key of Object.keys(config.extensions ?? {})) { if (config.extensions[key] && Object.keys(config.extensions[key])) { setExtensionEnv(key, config.extensions[key]); } } }, "setConfigEnv"); var setThemeColorConfigEnv = /* @__PURE__ */ __name((prefix, config) => { return config?.light?.brand || config?.dark?.brand ? setMultiThemeColorConfigEnv(prefix, config) : setSingleThemeColorConfigEnv(prefix, config); }, "setThemeColorConfigEnv"); var setSingleThemeColorConfigEnv = /* @__PURE__ */ __name((prefix, config) => { if (config.dark) { process.env[`${prefix}DARK`] = config.dark; } if (config.light) { process.env[`${prefix}LIGHT`] = config.light; } if (config.brand) { process.env[`${prefix}BRAND`] = config.brand; } if (config.alternate) { process.env[`${prefix}ALTERNATE`] = config.alternate; } if (config.accent) { process.env[`${prefix}ACCENT`] = config.accent; } if (config.link) { process.env[`${prefix}LINK`] = config.link; } if (config.help) { process.env[`${prefix}HELP`] = config.help; } if (config.success) { process.env[`${prefix}SUCCESS`] = config.success; } if (config.info) { process.env[`${prefix}INFO`] = config.info; } if (config.warning) { process.env[`${prefix}WARNING`] = config.warning; } if (config.danger) { process.env[`${prefix}DANGER`] = config.danger; } if (config.fatal) { process.env[`${prefix}FATAL`] = config.fatal; } if (config.positive) { process.env[`${prefix}POSITIVE`] = config.positive; } if (config.negative) { process.env[`${prefix}NEGATIVE`] = config.negative; } }, "setSingleThemeColorConfigEnv"); var setMultiThemeColorConfigEnv = /* @__PURE__ */ __name((prefix, config) => { return { light: setBaseThemeColorConfigEnv(`${prefix}LIGHT_`, config.light), dark: setBaseThemeColorConfigEnv(`${prefix}DARK_`, config.dark) }; }, "setMultiThemeColorConfigEnv"); var setBaseThemeColorConfigEnv = /* @__PURE__ */ __name((prefix, config) => { if (config.foreground) { process.env[`${prefix}FOREGROUND`] = config.foreground; } if (config.background) { process.env[`${prefix}BACKGROUND`] = config.background; } if (config.brand) { process.env[`${prefix}BRAND`] = config.brand; } if (config.alternate) { process.env[`${prefix}ALTERNATE`] = config.alternate; } if (config.accent) { process.env[`${prefix}ACCENT`] = config.accent; } if (config.link) { process.env[`${prefix}LINK`] = config.link; } if (config.help) { process.env[`${prefix}HELP`] = config.help; } if (config.success) { process.env[`${prefix}SUCCESS`] = config.success; } if (config.info) { process.env[`${prefix}INFO`] = config.info; } if (config.warning) { process.env[`${prefix}WARNING`] = config.warning; } if (config.danger) { process.env[`${prefix}DANGER`] = config.danger; } if (config.fatal) { process.env[`${prefix}FATAL`] = config.fatal; } if (config.positive) { process.env[`${prefix}POSITIVE`] = config.positive; } if (config.negative) { process.env[`${prefix}NEGATIVE`] = config.negative; } }, "setBaseThemeColorConfigEnv"); // src/create-storm-config.ts var _extension_cache = /* @__PURE__ */ new WeakMap(); var _static_cache = void 0; var createStormWorkspaceConfig = /* @__PURE__ */ __name(async (extensionName, schema, workspaceRoot, skipLogs = false) => { let result; if (!_static_cache?.data || !_static_cache?.timestamp || _static_cache.timestamp < Date.now() - 8e3) { let _workspaceRoot = workspaceRoot; if (!_workspaceRoot) { _workspaceRoot = findWorkspaceRoot(); } const configEnv = getConfigEnv(); const defaultConfig = await getDefaultConfig(_workspaceRoot); const configFile = await getConfigFile(_workspaceRoot); if (!configFile && !skipLogs) { writeWarning("No Storm Workspace configuration file found in the current repository. Please ensure this is the expected behavior - you can add a `storm-workspace.json` file to the root of your workspace if it is not.\n", { logLevel: "all" }); } result = await import_schema.stormWorkspaceConfigSchema.parseAsync((0, import_defu2.default)(configEnv, configFile, defaultConfig)); result.workspaceRoot ??= _workspaceRoot; } else { result = _static_cache.data; } if (schema && extensionName) { result.extensions = { ...result.extensions, [extensionName]: createConfigExtension(extensionName, schema) }; } _static_cache = { timestamp: Date.now(), data: result }; return result; }, "createStormWorkspaceConfig"); var createConfigExtension = /* @__PURE__ */ __name((extensionName, schema) => { const extension_cache_key = { extensionName }; if (_extension_cache.has(extension_cache_key)) { return _extension_cache.get(extension_cache_key); } let extension = getExtensionEnv(extensionName); if (schema) { extension = schema.parse(extension); } _extension_cache.set(extension_cache_key, extension); return extension; }, "createConfigExtension"); var loadStormWorkspaceConfig = /* @__PURE__ */ __name(async (workspaceRoot, skipLogs = false) => { const config = await createStormWorkspaceConfig(void 0, void 0, workspaceRoot, skipLogs); setConfigEnv(config); if (!skipLogs && !config.skipConfigLogging) { writeTrace(`\u2699\uFE0F Using Storm Workspace configuration: ${formatLogMessage(config)}`, config); } return config; }, "loadStormWorkspaceConfig"); // src/get-config.ts var getConfig = /* @__PURE__ */ __name((workspaceRoot, skipLogs = false) => { return loadStormWorkspaceConfig(workspaceRoot, skipLogs); }, "getConfig"); // bin/config.ts var import_chalk3 = __toESM(require("chalk"), 1); function createProgram() { writeInfo("\u26A1 Running Storm Configuration Tools", { logLevel: "all" }); const root = findWorkspaceRootSafe(process.cwd()); process.env.STORM_WORKSPACE_ROOT ??= root; process.env.NX_WORKSPACE_ROOT_PATH ??= root; root && process.chdir(root); const program = new import_commander.Command("storm-config"); program.version("1.0.0", "-v --version", "display CLI version"); const directory = new import_commander.Option("-d --dir <path>", "A directory that exists inside the workspace root").default(process.cwd()); program.command("view", { isDefault: true }).description("View the current Storm configuration for the workspace.").addOption(directory).action(viewAction); return program; } __name(createProgram, "createProgram"); async function viewAction({ dir }) { writeInfo(`\u{1F50D} Searching for Storm configuration for the workspace at "${dir}"...`, { logLevel: "all" }); const config = await getConfig(findWorkspaceRootSafe(dir), true); if (config) { writeSuccess(`The following Storm configuration values have been found for this repository: ${formatLogMessage({ ...config, colors: void 0 })} ${typeof config.colors.light === "string" ? formatSingleThemeColors(config.colors) : formatMultiThemeColors(config.colors)} `, { ...config, logLevel: "all" }); } else { writeError("No Storm config file found in the current workspace. Please ensure this is the expected behavior - you can add a `storm.json` file to the root of your workspace if it is not.\n", { logLevel: "all" }); } } __name(viewAction, "viewAction"); void (async () => { try { handleProcess(); const program = createProgram(); await program.parseAsync(process.argv); exitWithSuccess(); } catch (error) { writeFatal(`A fatal error occurred while running the Storm Git tool: ${error?.message ? error.message : JSON.stringify(error)}${error?.stack ? ` Stack Trace: ${error.stack}` : ""}`, { logLevel: "all" }); exitWithError(); process.exit(1); } })(); var formatSingleThemeColors = /* @__PURE__ */ __name((config) => { return `---- Theme Colors ---- ${Object.entries(config).filter(([key, value]) => typeof value === "string" && value.length > 0).map(([key, value]) => import_chalk3.default.hex(value)(`${key}: ${import_chalk3.default.bold(value)}`)).join(" \n")} `; }, "formatSingleThemeColors"); var formatMultiThemeColors = /* @__PURE__ */ __name((config) => { return ` ---- Light Theme Colors ---- ${Object.entries(config.light).filter(([key, value]) => typeof value === "string" && value.length > 0).map(([key, value]) => import_chalk3.default.hex(value)(`${key}: ${import_chalk3.default.bold(value)}`)).join(" \n")} ---- Dark Theme Colors ---- ${Object.entries(config.dark).filter(([key, value]) => typeof value === "string" && value.length > 0).map(([key, value]) => import_chalk3.default.hex(value)(`${key}: ${import_chalk3.default.bold(value)}`)).join(" \n")} `; }, "formatMultiThemeColors"); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { createProgram, viewAction });