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.

162 lines (158 loc) 4.57 kB
import { getConfigFile } from "./chunk-G4FBFCNL.js"; import { applyDefaultConfig, getPackageJsonConfig } from "./chunk-RGET2UQV.js"; import { findWorkspaceRoot } from "./chunk-LF3SAK2O.js"; import { formatLogMessage, writeTrace, writeWarning } from "./chunk-XHJNCOIU.js"; import { setConfigEnv } from "./chunk-SDSQ2HHF.js"; import { getConfigEnv, getExtensionEnv } from "./chunk-A5JXMY6X.js"; import { joinPaths } from "./chunk-V3GMJ4TX.js"; // src/create-storm-config.ts import { workspaceConfigSchema } from "@storm-software/config/schema"; import defu from "defu"; import { existsSync } from "node:fs"; 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 = defu( configEnv, configFile, defaultConfig ); if (!configInput.variant) { configInput.variant = existsSync(joinPaths(_workspaceRoot, "nx.json")) || existsSync(joinPaths(_workspaceRoot, ".nx")) || existsSync(joinPaths(_workspaceRoot, "lerna.json")) || existsSync(joinPaths(_workspaceRoot, "turbo.json")) ? "monorepo" : "minimal"; } try { result = applyDefaultConfig( await workspaceConfigSchema.parseAsync(configInput) ); result.workspaceRoot ??= _workspaceRoot; } catch (error) { throw new Error( `Failed to parse Storm Workspace configuration${error?.message ? `: ${error.message}` : ""} Please ensure your configuration file is valid JSON and matches the expected schema. The current workspace configuration input is: ${formatLogMessage( configInput )}`, { cause: error } ); } } 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; }; var createConfigExtension = (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; }; var loadStormWorkspaceConfig = async (workspaceRoot, skipLogs = false) => { const config = await createStormWorkspaceConfig( void 0, void 0, workspaceRoot, skipLogs, true ); setConfigEnv(config); if (!skipLogs && !config.skipConfigLogging) { writeTrace( `\u2699\uFE0F Using Storm Workspace configuration: ${formatLogMessage(config)}`, config ); } return config; }; var tryLoadStormWorkspaceConfig = async (workspaceRoot, skipLogs = true, useDefault = false) => { try { const config = await createStormWorkspaceConfig( void 0, void 0, workspaceRoot, skipLogs, useDefault ); if (!config) { return void 0; } setConfigEnv(config); if (!skipLogs && !config.skipConfigLogging) { writeTrace( `\u2699\uFE0F Using Storm Workspace configuration: ${formatLogMessage(config)}`, config ); } return config; } catch (error) { if (!skipLogs) { writeWarning( `\u26A0\uFE0F Failed to load Storm Workspace configuration: ${error}`, { logLevel: "all" } ); } return void 0; } }; export { createStormWorkspaceConfig, createConfigExtension, loadStormWorkspaceConfig, tryLoadStormWorkspaceConfig };