@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.
139 lines (136 loc) • 3.74 kB
JavaScript
import {
getConfigFile
} from "./chunk-73L7WNYI.js";
import {
formatLogMessage,
writeTrace,
writeWarning
} from "./chunk-SMVSQFZ3.js";
import {
applyDefaultConfig,
getPackageJsonConfig
} from "./chunk-SHD7ZUSQ.js";
import {
findWorkspaceRoot
} from "./chunk-PTHGOJU6.js";
import {
setConfigEnv
} from "./chunk-NNI6CYBY.js";
import {
getConfigEnv,
getExtensionEnv
} from "./chunk-BWCGUZR7.js";
// src/create-storm-config.ts
import { stormWorkspaceConfigSchema } from "@storm-software/config/schema";
import defu from "defu";
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);
result = applyDefaultConfig(
await stormWorkspaceConfigSchema.parseAsync(
defu(configEnv, configFile, defaultConfig)
)
);
result.workspaceRoot ??= _workspaceRoot;
} else {
result = _static_cache.data;
}
if (schema && extensionName) {
result.extensions = {
...result.extensions,
[extensionName]: createConfigExtension(extensionName, schema)
};
}
_static_cache = {
timestamp: Date.now(),
data: result
};
return result;
};
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
};