UNPKG

@storm-software/config-tools

Version:

A package containing various utilities to support custom workspace configurations and environment management for Storm Software projects, including configuration file handling, environment variable management, and logging utilities.

1,422 lines (1,403 loc) 57 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 __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_chalk3 = __toESM(require("chalk"), 1); 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); var import_node_fs3 = require("fs"); // 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, PERFORMANCE: 50, DEBUG: 60, TRACE: 70, ALL: 100 }; var LogLevelLabel = { SILENT: "silent", FATAL: "fatal", ERROR: "error", WARN: "warn", SUCCESS: "success", INFO: "info", PERFORMANCE: "performance", DEBUG: "debug", TRACE: "trace", ALL: "all" }; // src/utilities/colors.ts var DEFAULT_COLOR_CONFIG = { light: { background: "#fafafa", foreground: "#1d1e22", brand: "#1fb2a6", alternate: "#db2777", help: "#5C4EE5", success: "#087f5b", info: "#0550ae", debug: "#8afafc", warning: "#e3b341", danger: "#D8314A", fatal: "#51070f", performance: "#13c302", link: "#3fa6ff", positive: "#22c55e", negative: "#dc2626", gradient: ["#1fb2a6", "#db2777", "#5C4EE5"] }, dark: { background: "#1d1e22", foreground: "#cbd5e1", brand: "#2dd4bf", alternate: "#db2777", help: "#818cf8", success: "#10b981", info: "#58a6ff", debug: "#8afafc", warning: "#f3d371", danger: "#D8314A", fatal: "#a40e26", performance: "#80fd74", link: "#3fa6ff", positive: "#22c55e", negative: "#dc2626", gradient: ["#1fb2a6", "#db2777", "#818cf8"] } }; function getColors(config) { if (!config?.colors || typeof config.colors !== "object" || !config.colors["dark"] && (!config.colors["base"] || typeof config.colors !== "object" || !config.colors["base"]?.["dark"])) { return DEFAULT_COLOR_CONFIG; } if (config.colors["base"]) { if (typeof config.colors["base"]["dark"] === "object") { return config.colors["base"]["dark"]; } else if (config.colors["base"]["dark"] === "string") { return config.colors["base"]; } } if (typeof config.colors["dark"] === "object") { return config.colors["dark"]; } return config.colors ?? DEFAULT_COLOR_CONFIG; } function getColor(key, config) { const colors = getColors(config); const result = (typeof colors["dark"] === "object" ? colors["dark"][key] : colors[key]) || DEFAULT_COLOR_CONFIG["dark"][key] || DEFAULT_COLOR_CONFIG[key]; if (result) { return result; } if (key === "link" || key === "debug") { return getColor("info", config); } else if (key === "fatal") { return getColor("danger", config); } return getColor("brand", config); } // src/logger/chalk.ts var import_chalk = __toESM(require("chalk"), 1); var chalkDefault = { hex: (_) => (message) => message, bgHex: (_) => ({ whiteBright: (message) => message, white: (message) => message }), white: (message) => message, whiteBright: (message) => message, gray: (message) => message, bold: { hex: (_) => (message) => message, bgHex: (_) => ({ whiteBright: (message) => message, white: (message) => message }), whiteBright: (message) => message, white: (message) => message }, dim: { hex: (_) => (message) => message, gray: (message) => message } }; var getChalk = () => { let _chalk = import_chalk.default; if (!_chalk?.hex || !_chalk?.bold?.hex || !_chalk?.bgHex || !_chalk?.whiteBright || !_chalk?.white) { _chalk = chalkDefault; } return _chalk; }; // 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"; } // src/logger/console-icons.ts var useIcon = (c, fallback) => isUnicodeSupported() ? c : fallback; var CONSOLE_ICONS = { [LogLevelLabel.ERROR]: useIcon("\u2718", "\xD7"), [LogLevelLabel.FATAL]: useIcon("\u{1F571}", "\xD7"), [LogLevelLabel.WARN]: useIcon("\u26A0", "\u203C"), [LogLevelLabel.INFO]: useIcon("\u2139", "i"), [LogLevelLabel.PERFORMANCE]: useIcon("\u23F1", "\u23F1"), [LogLevelLabel.SUCCESS]: useIcon("\u2714", "\u221A"), [LogLevelLabel.DEBUG]: useIcon("\u{1F6E0}", "D"), [LogLevelLabel.TRACE]: useIcon("\u2699", "T"), [LogLevelLabel.ALL]: useIcon("\u2709", "\u2192") }; // src/logger/format-timestamp.ts var formatTimestamp = (date = /* @__PURE__ */ new Date()) => { return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`; }; // src/logger/get-log-level.ts var getLogLevel = (label) => { switch (label) { case "all": return LogLevel.ALL; case "trace": return LogLevel.TRACE; case "debug": return LogLevel.DEBUG; case "performance": return LogLevel.PERFORMANCE; 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; } }; var getLogLevelLabel = (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.PERFORMANCE) { return LogLevelLabel.PERFORMANCE; } 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; }; // src/logger/console.ts var getLogFn = (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 ?? DEFAULT_COLOR_CONFIG.dark.fatal )( `[${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 ?? DEFAULT_COLOR_CONFIG.dark.danger )( `[${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 ?? DEFAULT_COLOR_CONFIG.dark.warning )( `[${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 ?? DEFAULT_COLOR_CONFIG.dark.success )( `[${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 ?? DEFAULT_COLOR_CONFIG.dark.info )( `[${CONSOLE_ICONS[LogLevelLabel.INFO]} Info] ` )}${_chalk.bold.whiteBright(formatLogMessage(message))} ` ); }; } if (typeof logLevel === "number" && LogLevel.PERFORMANCE >= logLevel) { return (message) => { console.debug( ` ${_chalk.gray(formatTimestamp())} ${_chalk.hex( colors.performance ?? DEFAULT_COLOR_CONFIG.dark.performance )( `[${CONSOLE_ICONS[LogLevelLabel.PERFORMANCE]} Performance] ` )}${_chalk.bold.whiteBright(formatLogMessage(message))} ` ); }; } if (typeof logLevel === "number" && LogLevel.DEBUG >= logLevel) { return (message) => { console.debug( ` ${_chalk.gray(formatTimestamp())} ${_chalk.hex( colors.debug ?? DEFAULT_COLOR_CONFIG.dark.debug )( `[${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("#bbbbbb")( `[${CONSOLE_ICONS[LogLevelLabel.TRACE]} Trace] ` )}${_chalk.bold.whiteBright(formatLogMessage(message))} ` ); }; } return (message) => { console.log( ` ${_chalk.gray(formatTimestamp())} ${_chalk.hex( colors.brand ?? DEFAULT_COLOR_CONFIG.dark.brand )( `[${CONSOLE_ICONS[LogLevelLabel.ALL]} System] ` )}${_chalk.bold.whiteBright(formatLogMessage(message))} ` ); }; }; var writeFatal = (message, config) => getLogFn(LogLevel.FATAL, config)(message); var writeError = (message, config) => getLogFn(LogLevel.ERROR, config)(message); var writeWarning = (message, config) => getLogFn(LogLevel.WARN, config)(message); var writeInfo = (message, config) => getLogFn(LogLevel.INFO, config)(message); var writeSuccess = (message, config) => getLogFn(LogLevel.SUCCESS, config)(message); var writeTrace = (message, config) => getLogFn(LogLevel.TRACE, config)(message); var MAX_DEPTH = 6; var formatLogMessage = (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; }; var _isFunction = (value) => { try { return value instanceof Function || typeof value === "function" || !!(value?.constructor && value?.call && value?.apply); } catch { return false; } }; var brandIcon = (config = {}, _chalk = getChalk()) => _chalk.hex(getColor("brand", config))("\u{1F5F2}"); // 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()); } var _UNC_REGEX = /^[/\\]{2}/; var _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/; var _DRIVE_LETTER_RE = /^[A-Za-z]:$/; var correctPaths = 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; }; var joinPaths = 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); }; 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; } var isAbsolute = function(p) { return _IS_ABSOLUTE_RE.test(p); }; // 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; } // src/utilities/find-workspace-root.ts var rootFiles = [ "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", ".git", ".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 ) ); } 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; } // 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"); async function getPackageJsonConfig(root) { let license = import_config.STORM_DEFAULT_LICENSE; let homepage = void 0; let support = void 0; 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; } if (packageJson.bugs) { if (typeof packageJson.bugs === "string") { support = packageJson.bugs; } else if (packageJson.bugs.url) { support = packageJson.bugs.url; } } } } return { workspaceRoot, name, namespace, repository, license, homepage, support }; } function applyDefaultConfig(config) { if (!config.support && config.contact) { config.support = config.contact; } if (!config.contact && config.support) { config.contact = config.support; } if (config.homepage) { if (!config.docs) { config.docs = `${config.homepage}/docs`; } if (!config.license) { config.license = `${config.homepage}/license`; } if (!config.support) { config.support = `${config.homepage}/support`; } if (!config.contact) { config.contact = `${config.homepage}/contact`; } if (!config.error?.codesFile || !config?.error?.url) { config.error ??= { codesFile: import_config.STORM_DEFAULT_ERROR_CODES_FILE }; if (config.homepage) { config.error.url ??= `${config.homepage}/errors`; } } } return config; } // src/utilities/process-handler.ts var exitWithError = (config) => { writeFatal("Exiting script with an error status...", config); process.exit(1); }; var exitWithSuccess = (config) => { writeSuccess("Script completed successfully. Exiting...", config); process.exit(0); }; var handleProcess = (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); }); }; // src/config-file/get-config-file.ts var getConfigFileByName = 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] ?? {}); }; var getConfigFile = 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 || Object.keys(config).length === 0) { return void 0; } config.configFile = configFile; return config; }; // src/env/get-env.ts var import_config2 = require("@storm-software/config"); var getExtensionEnv = (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; }, {}); }; var getConfigEnv = () => { const prefix = "STORM_"; let config = { extends: process.env[`${prefix}EXTENDS`] || void 0, name: process.env[`${prefix}NAME`] || void 0, variant: process.env[`${prefix}VARIANT`] || 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: { url: process.env[`${prefix}RELEASE_BANNER_URL`] || void 0, alt: process.env[`${prefix}RELEASE_BANNER_ALT`] || 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 }, socials: { twitter: process.env[`${prefix}SOCIAL_TWITTER`] || void 0, discord: process.env[`${prefix}SOCIAL_DISCORD`] || void 0, telegram: process.env[`${prefix}SOCIAL_TELEGRAM`] || void 0, slack: process.env[`${prefix}SOCIAL_SLACK`] || void 0, medium: process.env[`${prefix}SOCIAL_MEDIUM`] || void 0, github: process.env[`${prefix}SOCIAL_GITHUB`] || void 0 }, organization: process.env[`${prefix}ORG`] || process.env[`${prefix}ORGANIZATION`] || process.env[`${prefix}ORG_NAME`] || process.env[`${prefix}ORGANIZATION_NAME`] ? process.env[`${prefix}ORG_DESCRIPTION`] || process.env[`${prefix}ORGANIZATION_DESCRIPTION`] || process.env[`${prefix}ORG_URL`] || process.env[`${prefix}ORGANIZATION_URL`] || process.env[`${prefix}ORG_LOGO`] || process.env[`${prefix}ORGANIZATION_LOGO`] ? { name: process.env[`${prefix}ORG`] || process.env[`${prefix}ORGANIZATION`] || process.env[`${prefix}ORG_NAME`] || process.env[`${prefix}ORGANIZATION_NAME`], description: process.env[`${prefix}ORG_DESCRIPTION`] || process.env[`${prefix}ORGANIZATION_DESCRIPTION`] || void 0, url: process.env[`${prefix}ORG_URL`] || process.env[`${prefix}ORGANIZATION_URL`] || void 0, logo: process.env[`${prefix}ORG_LOGO`] || process.env[`${prefix}ORGANIZATION_LOGO`] || void 0, icon: process.env[`${prefix}ORG_ICON`] || process.env[`${prefix}ORGANIZATION_ICON`] || void 0 } : process.env[`${prefix}ORG`] || process.env[`${prefix}ORGANIZATION`] || process.env[`${prefix}ORG_NAME`] || process.env[`${prefix}ORGANIZATION_NAME`] : 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, portal: process.env[`${prefix}PORTAL`] || void 0, licensing: process.env[`${prefix}LICENSING`] || void 0, contact: process.env[`${prefix}CONTACT`] || void 0, support: process.env[`${prefix}SUPPORT`] || 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}WORKSPACE_CONFIG_FILE`] ? correctPaths(process.env[`${prefix}WORKSPACE_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`]) : process.env[`${prefix}CACHE_DIRECTORY`] ? correctPaths(process.env[`${prefix}CACHE_DIRECTORY`]) : void 0, data: process.env[`${prefix}DATA_DIR`] ? correctPaths(process.env[`${prefix}DATA_DIR`]) : process.env[`${prefix}DATA_DIRECTORY`] ? correctPaths(process.env[`${prefix}DATA_DIRECTORY`]) : void 0, config: process.env[`${prefix}CONFIG_DIR`] ? correctPaths(process.env[`${prefix}CONFIG_DIR`]) : process.env[`${prefix}CONFIG_DIRECTORY`] ? correctPaths(process.env[`${prefix}CONFIG_DIRECTORY`]) : void 0, temp: process.env[`${prefix}TEMP_DIR`] ? correctPaths(process.env[`${prefix}TEMP_DIR`]) : process.env[`${prefix}TEMP_DIRECTORY`] ? correctPaths(process.env[`${prefix}TEMP_DIRECTORY`]) : void 0, log: process.env[`${prefix}LOG_DIR`] ? correctPaths(process.env[`${prefix}LOG_DIR`]) : process.env[`${prefix}LOG_DIRECTORY`] ? correctPaths(process.env[`${prefix}LOG_DIRECTORY`]) : void 0, build: process.env[`${prefix}BUILD_DIR`] ? correctPaths(process.env[`${prefix}BUILD_DIR`]) : process.env[`${prefix}BUILD_DIRECTORY`] ? correctPaths(process.env[`${prefix}BUILD_DIRECTORY`]) : 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, 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] = getThemeColorsEnv(prefix, themeName); return ret; }, {} ) : getThemeColorsEnv(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}WORKSPACE_CONFIG`]; if (serializedConfig) { const parsed = JSON.parse(serializedConfig); config = { ...config, ...parsed, colors: { ...config.colors, ...parsed.colors }, extensions: { ...config.extensions, ...parsed.extensions } }; } return config; }; var getThemeColorsEnv = (prefix, theme) => { const themeName = `COLOR_${theme && theme !== "base" ? `${theme}_` : ""}`.toUpperCase(); return process.env[`${prefix}${themeName}LIGHT_BRAND`] || process.env[`${prefix}${themeName}DARK_BRAND`] ? getMultiThemeColorsEnv(prefix + themeName) : getSingleThemeColorsEnv(prefix + themeName); }; var getSingleThemeColorsEnv = (prefix) => { const gradient = []; if (process.env[`${prefix}GRADIENT_START`] && process.env[`${prefix}GRADIENT_END`]) { gradient.push( process.env[`${prefix}GRADIENT_START`], process.env[`${prefix}GRADIENT_END`] ); } else if (process.env[`${prefix}GRADIENT_0`] || process.env[`${prefix}GRADIENT_1`]) { let index = process.env[`${prefix}GRADIENT_0`] ? 0 : 1; while (process.env[`${prefix}GRADIENT_${index}`]) { gradient.push(process.env[`${prefix}GRADIENT_${index}`]); index++; } } 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`], debug: process.env[`${prefix}DEBUG`], warning: process.env[`${prefix}WARNING`], danger: process.env[`${prefix}DANGER`], fatal: process.env[`${prefix}FATAL`], performance: process.env[`${prefix}PERFORMANCE`], positive: process.env[`${prefix}POSITIVE`], negative: process.env[`${prefix}NEGATIVE`], gradient }; }; var getMultiThemeColorsEnv = (prefix) => { return { light: getBaseThemeColorsEnv(`${prefix}_LIGHT_`), dark: getBaseThemeColorsEnv(`${prefix}_DARK_`) }; }; var getBaseThemeColorsEnv = (prefix) => { const gradient = []; if (process.env[`${prefix}GRADIENT_START`] && process.env[`${prefix}GRADIENT_END`]) { gradient.push( process.env[`${prefix}GRADIENT_START`], process.env[`${prefix}GRADIENT_END`] ); } else if (process.env[`${prefix}GRADIENT_0`] || process.env[`${prefix}GRADIENT_1`]) { let index = process.env[`${prefix}GRADIENT_0`] ? 0 : 1; while (process.env[`${prefix}GRADIENT_${index}`]) { gradient.push(process.env[`${prefix}GRADIENT_${index}`]); index++; } } 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`], debug: process.env[`${prefix}DEBUG`], warning: process.env[`${prefix}WARNING`], danger: process.env[`${prefix}DANGER`], fatal: process.env[`${prefix}FATAL`], performance: process.env[`${prefix}PERFORMANCE`], positive: process.env[`${prefix}POSITIVE`], negative: process.env[`${prefix}NEGATIVE`], gradient }; }; // src/env/set-env.ts var setExtensionEnv = (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]; } } }; var setConfigEnv = (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.variant) { process.env[`${prefix}VARIANT`] = config.variant; } 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) { if (config.release.banner) { if (typeof config.release.banner === "string") { process.env[`${prefix}RELEASE_BANNER`] = config.release.banner; process.env[`${prefix}RELEASE_BANNER_URL`] = config.release.banner; } else { process.env[`${prefix}RELEASE_BANNER`] = config.release.banner.url; process.env[`${prefix}RELEASE_BANNER_URL`] = config.release.banner.url; process.env[`${prefix}RELEASE_BANNER_ALT`] = config.release.banner.alt; } } process.env[`${prefix}RELEASE_HEADER`] = config.release.header; process.env[`${prefix}RELEASE_FOOTER`] = config.release.footer; } if (config.socials) { if (config.socials.twitter) { process.env[`${prefix}SOCIAL_TWITTER`] = config.socials.twitter; } if (config.socials.discord) { process.env[`${prefix}SOCIAL_DISCORD`] = config.socials.discord; } if (config.socials.telegram) { process.env[`${prefix}SOCIAL_TELEGRAM`] = config.socials.telegram; } if (config.socials.slack) { process.env[`${prefix}SOCIAL_SLACK`] = config.socials.slack; } if (config.socials.medium) { process.env[`${prefix}SOCIAL_MEDIUM`] = config.socials.medium; } if (config.socials.github) { process.env[`${prefix}SOCIAL_GITHUB`] = config.socials.github; } } if (config.organization) { if (typeof config.organization === "string") { process.env[`${prefix}ORG`] = config.organization; process.env[`${prefix}ORG_NAME`] = config.organization; process.env[`${prefix}ORGANIZATION`] = config.organization; process.env[`${prefix}ORGANIZATION_NAME`] = config.organization; } else { process.env[`${prefix}ORG`] = config.organization.name; process.env[`${prefix}ORG_NAME`] = config.organization.name; process.env[`${prefix}ORGANIZATION`] = config.organization.name; process.env[`${prefix}ORGANIZATION_NAME`] = config.organization.name; if (config.organization.url) { process.env[`${prefix}ORG_URL`] = config.organization.url; process.env[`${prefix}ORGANIZATION_URL`] = config.organization.url; } if (config.organization.description) { process.env[`${prefix}ORG_DESCRIPTION`] = config.organization.description; process.env[`${prefix}ORGANIZATION_DESCRIPTION`] = config.organization.description; } if (config.organization.logo) { process.env[`${prefix}ORG_LOGO`] = config.organization.logo; process.env[`${prefix}ORGANIZATION_LOGO`] = config.organization.logo; } if (config.organization.icon) { process.env[`${prefix}ORG_ICON`] = config.organization.icon; process.env[`${prefix}ORGANIZATION_ICON`] = config.organization.icon; } } } 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.portal) { process.env[`${prefix}PORTAL`] = config.portal; } if (config.licensing) { process.env[`${prefix}LICENSING`] = config.licensing; } if (config.contact) { process.env[`${prefix}CONTACT`] = config.contact; } if (config.support) { process.env[`${prefix}SUPPORT`] = config.support; } if (config.timezone) { process.env[`${prefix}TIMEZONE`] = config.timezone; process.env.TZ = config.timezone; process.env.DEFAULT_TIMEZONE = config.timezone; process.env.TIMEZONE = config.timezone; } if (config.locale) { process.env[`${prefix}LOCALE`] = config.locale; process.env.DEFAULT_LOCALE = config.locale; process.env.LOCALE = config.locale; process.env.LANG = config.locale ? `${config.locale.replaceAll("-", "_")}.UTF-8` : "en_US.UTF-8"; } if (config.configFile) { process.env[`${prefix}WORKSPACE_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 ); process.env[`${prefix}CACHE_DIRECTORY`] = process.env[`${prefix}CACHE_DIR`]; } if (config.directories.data) { process.env[`${prefix}DATA_DIR`] = correctPaths(config.directories.data); process.env[`${prefix}DATA_DIRECTORY`] = process.env[`${prefix}DATA_DIR`]; } if (config.directories.config) { process.env[`${prefix}CONFIG_DIR`] = correctPaths( config.directories.config ); process.env[`${prefix}CONFIG_DIRECTORY`] = process.env[`${prefix}CONFIG_DIR`]; } if (config.directories.temp) { process.env[`${prefix}TEMP_DIR`] = correctPaths(config.directories.temp); process.env[`${prefix}TEMP_DIRECTORY`] = process.env[`${prefix}TEMP_DIR`]; } if (config.directories.log) { process.env[`${prefix}LOG_DIR`] = correctPaths(config.directories.log); process.env[`${prefix}LOG_DIRECTORY`] = process.env[`${prefix}LOG_DIR`]; } if (config.directories.build) { process.env[`${prefix}BUILD_DIR`] = correctPaths( config.directories.build ); process.env[`${prefix}BUILD_DIRECTORY`] = process.env[`${prefix}BUILD_DIR`]; } } 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)) { setThemeColorsEnv(`${prefix}COLOR_${key}_`, config.colors[key]); } } else { setThemeColorsEnv( `${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.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}WORKSPACE_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]); } } }; var setThemeColorsEnv = (prefix, config) => { return config?.light?.brand || config?.dark?.brand ? setMultiThemeColorsEnv(prefix, config) : setSingleThemeColorsEnv(prefix, config); }; var setSingleThemeColorsEnv = (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.debug) { process.env[`${prefix}DEBUG`] = config.debug; } 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.performance) { process.env[`${prefix}PERFORMANCE`] = config.performance; } if (config.positive) { process.env[`${prefix}POSITIVE`] = config.positive; } if (config.negative) { process.env[`${prefix}NEGATIVE`] = config.negative; } if (config.gradient) { for (let i = 0; i < config.gradient.length; i++) { process.env[`${prefix}GRADIENT_${i}`] = config.gradient[i]; } } }; var setMultiThemeColorsEnv = (prefix, config) => { return { light: setBaseThemeColorsEnv(`${prefix}LIGHT_`, config.light), dark: setBaseThemeColorsEnv(`${prefix}DARK_`, config.dark) }; }; var setBaseThemeColorsEnv = (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.debug) { process.env[`${prefix}DEBUG`] = config.debug; } if (config.warning) { process.env[`${prefix}WARNING`] = config.warning; } if (config.danger) { process.env[`${prefix}DANGER`] = config.danger; } if (config.fatal) { process.env[