@intlayer/config
Version:
Retrieve Intlayer configurations and manage environment variables for both server-side and client-side environments.
65 lines • 2.1 kB
JavaScript
import merge from "deepmerge";
import { relative } from "path";
import { logger } from "../logger.mjs";
import { buildConfigurationFields } from "./buildConfigurationFields.mjs";
import { loadConfigurationFile } from "./loadConfigurationFile.mjs";
import { searchConfigurationFile } from "./searchConfigurationFile.mjs";
let storedConfiguration;
let storedConfigurationFilePath;
let storedNumCustomConfiguration;
const BASE_DIR_PATH = process.cwd();
const getConfiguration = (options) => {
const mergedOptions = {
baseDir: BASE_DIR_PATH,
...options
};
const { baseDir, env, envFile } = mergedOptions;
if (!storedConfiguration || typeof options !== "undefined") {
const { configurationFilePath, numCustomConfiguration } = searchConfigurationFile(baseDir);
let customConfiguration;
if (configurationFilePath) {
customConfiguration = loadConfigurationFile(configurationFilePath, {
env,
envFile
});
}
storedConfiguration = buildConfigurationFields(
customConfiguration,
baseDir
);
storedConfigurationFilePath = configurationFilePath;
storedNumCustomConfiguration = numCustomConfiguration;
}
if (options?.override?.log?.mode === "verbose") {
logConfigFileResult(
storedNumCustomConfiguration,
storedConfigurationFilePath
);
}
return merge(storedConfiguration, options?.override ?? {});
};
const logConfigFileResult = (numCustomConfiguration, configurationFilePath) => {
if (numCustomConfiguration === 0) {
logger("Configuration file not found, using default configuration.", {
isVerbose: true
});
} else {
const relativeOutputPath = relative(BASE_DIR_PATH, configurationFilePath);
if (numCustomConfiguration === 1) {
logger(`Configuration file found: ${relativeOutputPath}.`, {
isVerbose: true
});
} else {
logger(
`Multiple configuration files found, using ${relativeOutputPath}.`,
{
isVerbose: true
}
);
}
}
};
export {
getConfiguration
};
//# sourceMappingURL=getConfiguration.mjs.map