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,445 lines (1,425 loc) 54.8 kB
#!/usr/bin/env node // bin/config.ts import chalk2 from "chalk"; import { Command } from "commander"; // src/create-storm-config.ts import { workspaceConfigSchema } from "@storm-software/config/schema"; import defu2 from "defu"; import { existsSync as existsSync3 } from "node:fs"; // src/config-file/get-config-file.ts import { loadConfig } from "c12"; import defu from "defu"; // 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 import chalk from "chalk"; 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 = chalk; 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 import { existsSync } from "node:fs"; import { join } from "node:path"; var MAX_PATH_SEARCH_DEPTH = 30; var depth = 0; function findFolderUp(startPath, endFileNames = [], endDirectoryNames = []) { const _startPath = startPath ?? process.cwd(); if (endDirectoryNames.some( (endDirName) => existsSync(join(_startPath, endDirName)) )) { return _startPath; } if (endFileNames.some((endFileName) => existsSync(join(_startPath, endFileName)))) { return _startPath; } if (_startPath !== "/" && depth++ < MAX_PATH_SEARCH_DEPTH) { const parent = 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 import { STORM_DEFAULT_ERROR_CODES_FILE, STORM_DEFAULT_LICENSE } from "@storm-software/config"; import { existsSync as existsSync2 } from "node:fs"; import { readFile } from "node:fs/promises"; import { join as join2 } from "node:path"; async function getPackageJsonConfig(root) { let license = 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 (existsSync2(join2(workspaceRoot, "package.json"))) { const file = await 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: 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([ 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 }), 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 defu(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 = defu(result2.config ?? {}, config ?? {}); } } } if (!config || Object.keys(config).length === 0) { return void 0; } config.configFile = configFile; return config; }; // src/env/get-env.ts import { COLOR_KEYS, STORM_DEFAULT_DOCS, STORM_DEFAULT_HOMEPAGE, STORM_DEFAULT_LICENSING } from "@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_`) && 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 === STORM_DEFAULT_DOCS) { if (config.homepage === STORM_DEFAULT_HOMEPAGE) { config.docs = `${STORM_DEFAULT_HOMEPAGE}/projects/${config.name}/docs`; } else { config.docs = `${config.homepage}/docs`; } } if (config.licensing === STORM_DEFAULT_LICENSING) { if (config.homepage === STORM_DEFAULT_HOMEPAGE) { config.licensing = `${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[`${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]; } } }; // src/create-storm-config.ts var _extension_cache = /* @__PURE__ */ new WeakMap(); var _static_cache = void 0; var createStormWorkspaceConfig = async (extensionName, schema, workspaceRoot, skipLogs = false, useDefault = true) => { 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 configFile = await getConfigFile(_workspaceRoot); if (!configFile) { if (!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" } ); } if (useDefault === false) { return void 0; } } const defaultConfig = await getPackageJsonConfig(_workspaceRoot); const configInput = defu2( configEnv, configFile, defaultConfig ); if (!configInput.variant) { configInput.variant = existsSync3(joinPaths(_workspaceRoot, "nx.json")) || existsSync3(joinPaths(_workspaceRoot, ".nx")) || existsSync3(joinPaths(_workspaceRoot, "lerna.json")) || existsSync3(joinPaths(_workspaceRoot, "turbo.json")) ? "monorepo"