{"version":3,"sources":["../src/error/error.ts","../src/utils/expand.ts","../src/constants/constants.ts","../src/template/template.ts","../src/utils/utils.ts","../src/yml/yml.ts","../src/env/envParser.ts","../src/env/env.ts","../src/utils/appRoot.ts","../src/loadConfigs/loadConfigs.ts"],"names":["env","exists","isStr","path","homedir","deepFreeze","template","noOpObj","deepMerge","limbo","fs","readFileSync","existsSync","noOp","loaded","isColl","isArr","yaml","noPropArr","convertValue","isStrBool","toBool","uniqArr","isObj","cItem","deepEqual","mItem","get"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error handling utilities\n */\n\n/**\n * Builds an error message based on passed in array\n * @param messages - Groups of strings to be logged as the error\n *\n * @returns Joined messages as a single string\n */\nconst buildMessage = (messages: string[]): string => {\n  return `\\n ${messages.join('\\n ')}\\n`\n}\n\n/**\n * Helper to throw a file not found error\n * @param filePath - Path to the file that could not be found\n * @param extra - Extra error message to add to the default\n * @param shouldExit - Should the process exit after the error is logged\n *\n * @throws Error if the file does not exist\n */\nconst throwNoFile = (\n  filePath: string,\n  extra?: string,\n  shouldExit?: boolean\n): void => {\n  const defMessage = [`File path does not exist at ${filePath}.`]\n  const message = extra ? defMessage.concat([extra]) : defMessage\n\n  shouldExit ? exitError(...message) : throwError(...message)\n}\n\n/**\n * General error handler\n * @param message - Strings to be logged as the error\n *\n * @throws Error with the built message\n */\nconst throwError = (...message: string[]): never => {\n  throw new Error(buildMessage(message))\n}\n\n/**\n * Logs an error to the console, then exits the current process\n * @param message - Strings to be logged as the error\n */\nconst exitError = (...message: string[]): never => {\n  console.error(buildMessage(message))\n  process.exit(1)\n  // Never returns, but TypeScript needs this\n  throw new Error('Process exited')\n}\n\nexport {\n  exitError,\n  throwError,\n  throwNoFile,\n}\n","/**\n * Environment variable expansion utilities\n */\nimport { isStr } from '@keg-hub/jsutils/isStr'\nimport { exists } from '@keg-hub/jsutils/exists'\n\nconst EXPAND_MATCH = /(.?\\${?(?:[a-zA-Z0-9_]+)?}?)/g\n\n/**\n * Checks the passed in env for variable expansion similar to how terminal/bash works\n * @param envs - Parsed envs\n * @param env - Env to be checked for expansion\n *\n * @example\n * process.env.SOME_ENV = 'some-value'\n * MY_ENV=${SOME_ENV} === MY_ENV='some-value'\n *\n * @returns Replaced value expanded as needed\n */\nconst convertValue = (envs: Record<string, string>, env: string): string => {\n  return (env.match(EXPAND_MATCH) || []).reduce((initialVal, match) => {\n    const parts = /(.?)\\${?([a-zA-Z0-9_]+)?}?/g.exec(match)\n    if (!parts) return initialVal\n\n    const prefix = parts[1]\n\n    let value: string\n    let replacePart: string\n\n    if (prefix === '\\\\') {\n      replacePart = parts[0]\n      value = replacePart.replace('\\\\$', '$')\n    } else {\n      const key = parts[2]\n      replacePart = parts[0].substring(prefix.length)\n      // Set precedence current envs then env file\n      value = process.env[key] || envs[key] || ''\n      // Check for recursive expansions\n      value = convertValue(envs, value)\n    }\n\n    return initialVal.replace(replacePart, value)\n  }, env)\n}\n\n/**\n * Checks the passed in env for variable expansion similar to how terminal/bash works\n * @param envs - Parsed envs\n *\n * @returns Object with the envs expanded as needed\n */\nconst expand = (envs: Record<string, string>): Record<string, string> => {\n  return Object.keys(envs).reduce((acc, key) => {\n    const val = exists(process.env[key]) ? process.env[key]! : envs[key]\n    acc[key] = isStr(val) ? convertValue(envs, val) : val\n\n    return acc\n  }, envs)\n}\n\nexport {\n  expand,\n  convertValue,\n}\n","/**\n * Constant values for the parse-config library\n */\nimport path from 'node:path'\nimport { homedir } from 'node:os'\nimport { deepFreeze } from '@keg-hub/jsutils/deepFreeze'\n\nconst {\n  KEG_CONFIG_FILE,\n  KEG_CONFIG_FOLDER,\n  KEG_GLOBAL_CONFIG,\n} = process.env\n\n// The default global config path and config file\nlet GLOBAL_CONFIG_FILE = KEG_CONFIG_FILE || `cli.config.json`\nlet GLOBAL_CONFIG_FOLDER = KEG_CONFIG_FOLDER || path.join(homedir(), `.kegConfig`)\n\n// If the global config path is passed in as an ENV, use that instead\nif (KEG_GLOBAL_CONFIG && (!KEG_CONFIG_FILE || !KEG_CONFIG_FOLDER)) {\n  const configPathSplit = KEG_GLOBAL_CONFIG.split('/')\n  GLOBAL_CONFIG_FILE = configPathSplit.pop()!\n  GLOBAL_CONFIG_FOLDER = configPathSplit.join('/')\n}\n\nexport const constants = deepFreeze({\n  /**\n   * Global config folder path\n   */\n  GLOBAL_CONFIG_FOLDER,\n  /**\n   * Global config file name\n   */\n  GLOBAL_CONFIG_FILE,\n})\n","/**\n * Template filling utilities\n */\nimport path from 'node:path'\nimport { throwError } from '../error/error'\nimport { limbo } from '@keg-hub/jsutils/limbo'\nimport { noOpObj } from '@keg-hub/jsutils/noOpObj'\nimport { constants } from '../constants/constants'\nimport { template } from '@keg-hub/jsutils/template'\nimport { deepMerge } from '@keg-hub/jsutils/deepMerge'\nimport { promises as fs, readFileSync } from 'node:fs'\n\n\n/**\n * Attempts to load the Keg-CLI global config from the user home directory\n * @param shouldThrow - Should the method throw if the config can not be loaded\n *\n * @return Loaded Keg-CLI global config\n */\nconst getGlobalConfig = (shouldThrow = true): Record<string, any> => {\n  const configPath = path.join(constants.GLOBAL_CONFIG_FOLDER, constants.GLOBAL_CONFIG_FILE)\n  try {\n    // Dynamic import for ESM\n    return require(configPath)\n  } catch (err) {\n    if (shouldThrow) {\n      throw new Error(\n        `Keg CLI global config could not be loaded from path: ${configPath}!`\n      )\n    }\n\n    return {}\n  }\n}\n\n/**\n * Default template replace pattern\n */\nlet defPattern = /{{([^}]*)}}/g\n\n/**\n * Overrides the default template replace pattern\n * @param pattern - Pattern for matching items to be replaced\n */\nconst setDefaultPattern = (pattern?: RegExp): void => {\n  defPattern = pattern || defPattern\n}\n\n/**\n * Override the default replace pattern\n * @param pattern - Template pattern to override the default\n */\nconst setTemplateRegex = (pattern?: RegExp): void => {\n  template.regex = pattern || defPattern\n}\n\n/**\n * Merges multiple data sources to use as fill values when filling a template\n * Sources include Keg-CLI global config, process.env, custom data object argument\n * @param data - Custom data with values for filling templates\n * @param expectGlobalConfig - if true, throws if global keg config is not found\n *\n * @returns Merge data object\n */\nconst buildFillData = (\n  data = noOpObj,\n  expectGlobalConfig = false\n): Record<string, any> => {\n  const globalConfig = getGlobalConfig(expectGlobalConfig) || noOpObj\n  // Add the globalConfig, and the process.envs as the data objects\n  // This allows values in ENV templates from globalConfig || process.env\n  return {\n    ...deepMerge(globalConfig, data),\n    envs: deepMerge(\n      (globalConfig as any).envs || {},\n      process.env,\n      (data as any).envs || {},\n      (data as any).ENVS || {}\n    ),\n  }\n}\n\n/**\n * Sets the correct template pattern, then fills the template, then resets the template pattern\n * @param tmp - Template to be filled\n * @param data - Data used to fill the template\n * @param pattern - Template pattern to override the default\n * @param expectGlobalConfig - if true, throws if global keg config is not found\n *\n * @returns Template with the content filled from the passed in data\n */\nconst execTemplate = (\n  tmp: string,\n  data?: Record<string, any>,\n  pattern?: RegExp,\n  expectGlobalConfig = false\n): string => {\n  // Set the template regex to ensure it uses the passed in pattern or default\n  setTemplateRegex(pattern)\n\n  // Fill the template with the data object\n  const filled = template(tmp, buildFillData(data, expectGlobalConfig), defPattern)\n\n  // Reset the template regex pattern after the template is filled\n  setTemplateRegex()\n\n  return filled\n}\n\ninterface FillTemplateOptions {\n  location?: string\n  template?: string\n  data?: Record<string, any>\n  pattern?: RegExp\n}\n\n/**\n * Loads and fills a template from the passed in data\n * @param options - Arguments to load and fill the template\n *\n * @returns Template with the content filled from the passed in data\n */\nconst fillTemplate = async ({\n  location,\n  template: tmp,\n  data = noOpObj,\n  pattern,\n}: FillTemplateOptions): Promise<string> => {\n  const [err, toFill] = tmp\n    ? [null, tmp]\n    : await limbo(fs.readFile(location!, `utf-8`))\n\n  return err ? throwError((err as Error).message) : execTemplate(toFill as string, data, pattern)\n}\n\n/**\n * Reads the passed in location or template, and replaces content with values from the data object\n * @param options - Template options\n *\n * @returns Template with the content filled from the passed in data\n */\nconst fillTemplateSync = ({\n  location,\n  template: tmp,\n  data = {},\n  pattern,\n}: FillTemplateOptions): string => {\n  return execTemplate(tmp || readFileSync(location!, `utf-8`), data, pattern)\n}\n\nexport {\n  execTemplate,\n  fillTemplate,\n  fillTemplateSync,\n  setDefaultPattern,\n}\n","/**\n * File loading and parsing utilities\n */\nimport { noOp } from '@keg-hub/jsutils/noOp'\nimport { isStr } from '@keg-hub/jsutils/isStr'\nimport { limbo } from '@keg-hub/jsutils/limbo'\nimport { noOpObj } from '@keg-hub/jsutils/noOpObj'\nimport { execTemplate } from '../template/template'\nimport { deepMerge } from '@keg-hub/jsutils/deepMerge'\nimport { throwError, throwNoFile } from '../error/error'\nimport {\n  existsSync,\n  readFileSync,\n  promises as fs,\n} from 'node:fs'\n\ninterface LoaderArgs {\n  error: boolean\n  fill: boolean\n  data: Record<string, any>\n  format: `string` | `object`\n}\n\nconst defLoaderArgs: LoaderArgs = {\n  error: true,\n  fill: true,\n  data: noOpObj,\n  format: `object`,\n}\n\nconst pathExists = async (path: string): Promise<boolean> => {\n  try {\n    await fs.access(path)\n    return true\n  } catch (err) {\n    return false\n  }\n}\n\n/**\n * Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n * conversion translates it to FEFF (UTF-16 BOM)\n * @param content - Content of the loaded env file\n *\n * @returns Stripped string\n */\nconst stripBom = (content: string): string =>\n  content.charCodeAt(0) === 0xfeff ? content.slice(1) : content\n\n/**\n * Checks if the passed in location exists on the local file system\n * @param location - Path to the file\n * @param error - If an error should be thrown when file does not exist\n * @param type - Type of file that's being loaded\n *\n * @returns True if the file exists\n */\nconst checkExists = async (\n  location: string,\n  error = true,\n  type?: string\n): Promise<boolean> => {\n  const [err, exists] = await limbo(pathExists(location))\n\n  return exists\n    ? true\n    : error\n      ? (() => { throwNoFile(location, err ? (err as Error).stack : `Could not load ${type} file!`); return false })()\n      : false\n}\n\n/**\n * Gets the content of a file from the passed in location synchronously\n * @param location - Path to the file\n * @param error - If an error should be thrown when file does not exist\n * @param type - Type of file that's being loaded\n *\n * @returns Loaded file content\n */\nconst getContentSync = (\n  location: string,\n  error = true,\n  type?: string\n): string | null => {\n  return existsSync(location)\n    ? readFileSync(location, 'utf8')\n    : error\n      ? (() => { throwNoFile(location, `Could not load ${type} file!`); return null })()\n      : null\n}\n\n/**\n * Gets the content of a file from the passed in location\n * @param location - Path to the file\n * @param error - If an error should be thrown when file does not exist\n * @param type - Type of file that's being loaded\n *\n * @returns Loaded file content\n */\nconst getContent = async (\n  location: string,\n  error = true,\n  type?: string\n): Promise<string | null> => {\n  const exists = await checkExists(location, error, type)\n  if (!exists) return null\n\n  // Get the content of the file\n  const [err, content] = await limbo(fs.readFile(location, 'utf8'))\n\n  return !err\n    ? (content as string)\n    : error\n      ? (() => { throwError(location, `Could not load ${type} file!`); return null })()\n      : null\n}\n\n/**\n * Removes a file from the local file system\n * @param location - Path to the file\n * @param type - Type of file being removed\n *\n * @returns If the file could be removed\n */\nconst removeFile = async (location: string, type: string): Promise<boolean> => {\n  !isStr(location) &&\n    (() => { throwError(\n      `Remove ${type} file requires a file location, instead got: ${location}`\n    ); return false })()\n\n  const [err] = await limbo(fs.rm(location))\n  return err ? (() => { throwError(err as any); return false })() : true\n}\n\ninterface MergeFilesOptions {\n  files: string[]\n  loader: (args: any) => any\n  [key: string]: any\n}\n\n/**\n * Loads multiple files from an array of passed in files paths\n * Then merges them all together\n * @param options - Options including files array and loader function\n *\n * @returns Merged files as an Object\n */\nconst mergeFiles = async ({\n  files,\n  loader = noOp,\n  ...args\n}: MergeFilesOptions): Promise<Record<string, any>> => {\n  const loaded = await Promise.all(\n    await files.reduce(async (toResolve, file) => {\n      const loaded = await toResolve\n      const loadedContent =\n        isStr(file) && (await loader({ location: file, ...args }))\n\n      loadedContent && loaded.push(loadedContent)\n\n      return loaded\n    }, Promise.resolve([] as any[]))\n  )\n\n  return deepMerge(...loaded)\n}\n\ninterface LoadTemplateArgs {\n  data?: Record<string, any>\n  fill?: boolean\n  format?: 'string' | 'object'\n  pattern?: RegExp\n}\n\n/**\n * Parses the env content to replace any template values from the data object\n * Then converts it into a JS Object with the `env.safeLoad` call\n * @param args - Template options\n * @param content - Text content to be filled\n * @param loader - Callback function to parse the content after it's filled\n *\n * @returns Parse ENV file as a JS Object\n */\nconst loadTemplate = (\n  args: LoadTemplateArgs,\n  content: string | null,\n  loader: (content: string) => any\n): Record<string, any> | string => {\n  const { data = noOpObj, fill = true, format, pattern } = args\n\n  if (!content) return format === 'string' ? '' : {}\n\n  const cleaned = stripBom(content)\n  const template = fill ? execTemplate(cleaned, data, pattern) : cleaned\n\n  // Treat it as a template and try to fill it fill === true\n  return format === 'string' ? template : loader(template)\n}\n\n/**\n * Ensures args is an object for file loading methods\n * If args is a string, will set it as the location\n * Sets other defaults where needed\n * @param args - Path to a file or args object\n *\n * @returns Args converted into an object if needed\n */\nconst resolveArgs = (\n  args: string | Partial<LoaderArgs>\n): LoaderArgs & { location?: string } => {\n  return deepMerge(\n    defLoaderArgs,\n    !isStr(args) ? args : { location: args }\n  ) as LoaderArgs & { location?: string }\n}\n\nexport {\n  getContent,\n  getContentSync,\n  loadTemplate,\n  mergeFiles,\n  removeFile,\n  resolveArgs,\n  stripBom,\n}\n","import type { YmlOptions } from '../types'\n\nimport yaml from 'js-yaml'\nimport { promises as fs } from 'node:fs'\nimport { throwError } from '../error/error'\nimport { convertValue } from '../utils/expand'\nimport { limbo } from '@keg-hub/jsutils/limbo'\nimport { isArr } from '@keg-hub/jsutils/isArr'\nimport { isStr } from '@keg-hub/jsutils/isStr'\nimport { isColl } from '@keg-hub/jsutils/isColl'\nimport { noOpObj } from '@keg-hub/jsutils/noOpObj'\nimport { noPropArr } from '@keg-hub/jsutils/noPropArr'\nimport {\n  mergeFiles,\n  removeFile,\n  resolveArgs,\n  getContent,\n  loadTemplate,\n  getContentSync,\n} from '../utils/utils'\n\n/**\n * Recursively loops through the passed in content object\n * Checks each key/value pair looking for a string value\n * When found, calls convertValue to run bash expansion on it\n *\n * @param content - Parsed yaml file values\n *\n * @returns Parsed yaml file values including bash expansion where needed\n */\nconst recurseExpand = (content: Record<string, any>): Record<string, any> => {\n  return Object.entries(content).reduce((acc, [key, value]) => {\n    acc[key] = isColl(value)\n      ? recurseExpand(value)\n      : isStr(value)\n        ? convertValue(content, value)\n        : value\n\n    return acc\n  }, (isArr(content) ? [] : {}) as Record<string, any>)\n}\n\n/**\n * Loads a YML file from a path and parses it synchronously\n * @param args - Arguments that describe what file to load\n *\n * @returns Parse YML file\n */\nconst loadYmlSync = (\n  args: string | YmlOptions\n): Record<string, any> | string => {\n  const resolved = resolveArgs(args)\n  const { location, error, format } = resolved\n  // Load the yaml file content\n  const content = getContentSync(location!, error, `Yml`)\n  const loaded = loadTemplate(\n    resolved,\n    content,\n    (str: string) => yaml.load(str) as Record<string, any>\n  )\n\n  return format === `string` ? loaded : recurseExpand(loaded as Record<string, any>)\n}\n\n/**\n * Loads a YML file from a path and parses it\n * @param args - Arguments that describe what file to load\n *\n * @returns Parse YML file\n */\nconst loadYml = async (\n  args: string | YmlOptions\n): Promise<Record<string, any> | string> => {\n  const resolved = resolveArgs(args)\n  const { location, error, format } = resolved\n  // Load the yaml file content\n  const content = await getContent(location!, error, `Yml`)\n  const loaded = loadTemplate(\n    resolved,\n    content,\n    (str: string) => yaml.load(str) as Record<string, any>\n  )\n\n  return format === `string` ? loaded : recurseExpand(loaded as Record<string, any>)\n}\n\n/**\n * Writes a javascript object to a YML file at the passed in path\n * Checks if the file exists first, then confirms overwrite\n * @param location - Location to write the YML file to\n * @param data - Data to write to the YML file\n * @param error - If an error should be thrown\n *\n * @returns If the YML file could be written\n */\nconst writeYml = async (\n  location: string,\n  data = noOpObj,\n  error?: boolean\n): Promise<boolean> => {\n  \n  \n  const [err] = await limbo(fs.writeFile(location, yaml.dump(data)))\n  return err && error ? (() => { throwError((err as Error).stack || ''); return false })() : true\n}\n\n/**\n * Loads multiple yml files from an array of passed in files paths\n * Then merges them all together\n * @param args - Options including files array\n *\n * @returns Merged files as an Object\n */\nconst mergeYml = async (\n  args: YmlOptions & { files?: string[] }\n): Promise<Record<string, any>> => {\n  return await mergeFiles({\n    data: noOpObj,\n    files: noPropArr,\n    ...args,\n    loader: loadYml,\n  })\n}\n\n/**\n * Removes a yml file from the local file system\n * @param location - Path to the yml file\n *\n * @returns If the file could be removed\n */\nconst removeYml = async (location: string): Promise<boolean> => {\n  return await removeFile(location, `Yml`)\n}\n\nexport {\n  loadYml,\n  writeYml,\n  mergeYml,\n  removeYml,\n  loadYmlSync,\n}\n\n// Named exports for backward compatibility\nexport const yml = {\n  load: loadYml,\n  merge: mergeYml,\n  write: writeYml,\n  remove: removeYml,\n  loadSync: loadYmlSync,\n} as const\n","/**\n * Environment file parser\n */\nimport { expand } from '../utils/expand'\nimport { toBool } from '@keg-hub/jsutils/toBool'\nimport { isStrBool } from '@keg-hub/jsutils/isStrBool'\n\nconst NEWLINE = '\\n'\nconst NEWLINES_ESC = /\\\\n/g\n\n/**\n * Parses the value, by removing quotes and checking for string booleans\n * @param value - Value to be parsed\n *\n * @returns Parse .env file content\n */\nconst convertValue = (value: string): string | boolean => {\n  // Get the last char of the value\n  const end = value.length - 1\n  const isDoubleQuoted = value[0] === '\"' && value[end] === '\"'\n  const isSingleQuoted = value[0] === \"'\" && value[end] === \"'\"\n\n  // Check if it has quotes, and if so remove them out of the value\n  const cleaned =\n    isSingleQuoted || isDoubleQuoted\n      ? value.substring(1, end).trim().replace(NEWLINES_ESC, NEWLINE)\n      : value.trim()\n\n  // Check if it's a string boolean and convert or just return the value\n  return isStrBool(cleaned) ? toBool(cleaned) : cleaned\n}\n\n/**\n * Parse an env file string into an object\n * @param content - String to be converted\n */\nconst parse = (content: string): Record<string, string | boolean> => {\n  const envs = content\n    .toString()\n    .split('\\n')\n    .reduce((result, line) => {\n      const match = line.match(/^([^=:#]+?)[=:](.*)/)\n      if (!match) return result\n\n      const key = match[1].trim()\n      const value = match[2].trim()\n      result[key] = convertValue(value)\n\n      return result\n    }, {} as Record<string, string | boolean>)\n\n  return expand(envs as Record<string, string>)\n}\n\n/**\n * Turn an object into an env file string\n * @param obj - Object to convert\n *\n * @returns Converted object\n */\nconst stringify = (obj: Record<string, any>): string => {\n  return Object.entries(obj).reduce((result, [key, value]) => {\n    return key ? `${result}${key}=${String(value)}\\n` : result\n  }, '')\n}\n\nexport {\n  parse,\n  stringify,\n}\n","import type { EnvOptions } from '../types'\n\n/**\n * Environment file loading utilities\n */\nimport { promises as fs } from 'node:fs'\nimport { throwError } from '../error/error'\nimport { parse, stringify } from './envParser'\nimport { limbo } from '@keg-hub/jsutils/limbo'\nimport { isStr } from '@keg-hub/jsutils/isStr'\nimport { noOpObj } from '@keg-hub/jsutils/noOpObj'\nimport { noPropArr } from '@keg-hub/jsutils/noPropArr'\nimport {\n  mergeFiles,\n  removeFile,\n  getContent,\n  resolveArgs,\n  loadTemplate,\n  getContentSync,\n} from '../utils/utils'\n\n/**\n * Loads a ENV file from a path and parses it synchronously\n * @param args - Arguments that describe what file to load\n *\n * @returns Parse ENV file\n */\nconst loadEnvSync = (args: string | EnvOptions): Record<string, any> | string => {\n  const resolved = resolveArgs(args)\n  const { location, error } = resolved\n  // Load the env file content\n  const content = getContentSync(location!, error, `ENV`)\n\n  return loadTemplate(resolved, content, parse) as Record<string, any>\n}\n\n/**\n * Loads a ENV file from a path and parses it\n * @param args - Arguments that describe what file to load\n *\n * @returns Parse ENV file\n */\nconst loadEnv = async (\n  args: string | EnvOptions\n): Promise<Record<string, any> | string> => {\n  const resolved = resolveArgs(args)\n  const { location, error } = resolved\n  // Load the env file content\n  const content = await getContent(location!, error, `ENV`)\n\n  return loadTemplate(resolved, content, parse) as Record<string, any>\n}\n\n/**\n * Loads multiple env files from an array of passed in files paths\n * Then merges them all together\n * @param args - Options including files array\n *\n * @returns Merged files as an Object\n */\nconst mergeEnv = async (\n  args: EnvOptions & { files?: string[] }\n): Promise<Record<string, any>> => {\n  return await mergeFiles({\n    data: noOpObj,\n    files: noPropArr,\n    ...args,\n    loader: loadEnv,\n  })\n}\n\n/**\n * Removes a env file from the local file system\n * @param location - Path to the env file\n *\n * @returns If the file could be removed\n */\nconst removeEnv = async (location: string): Promise<boolean> => {\n  return await removeFile(location, 'ENV')\n}\n\n/**\n * Writes a javascript object to a ENV file at the passed in path\n * Checks if the file exists first, then confirms overwrite\n * @param location - Location to write the ENV file to\n * @param data - Data to write to the ENV file\n *\n * @returns If the ENV file could be written\n */\nconst writeEnv = async (\n  location: string,\n  data: Record<string, any> | string\n): Promise<boolean> => {\n  const content = isStr(data) ? data : stringify(data)\n  const [err] = await limbo(fs.writeFile(location, content))\n  return err ? (() => { throwError((err as Error).stack || ''); return false })() : true\n}\n\nexport {\n  loadEnv,\n  mergeEnv,\n  writeEnv,\n  removeEnv,\n  loadEnvSync,\n}\n\nexport const parseEnv = parse\nexport const stringifyEnv = stringify\n\n// Named exports for backward compatibility\nexport const env = {\n  parse,\n  stringify,\n  load: loadEnv,\n  write: writeEnv,\n  merge: mergeEnv,\n  remove: removeEnv,\n  loadSync: loadEnvSync,\n} as const\n","import path from 'node:path'\nimport { existsSync } from 'node:fs'\n\nlet __APP_ROOT: string | undefined\nlet __CACHED_ROOT: string | undefined\n\nconst findProjectRoot = (startDir: string): string | undefined => {\n  let dir = path.resolve(startDir)\n  const { root } = path.parse(dir)\n\n  while (dir !== root) {\n    if (existsSync(path.join(dir, `package.json`))) return dir\n    dir = path.dirname(dir)\n  }\n\n  return undefined\n}\n\nconst setAppRoot = (location: string): void => {\n  if (!__APP_ROOT) {\n    __APP_ROOT = location\n    __CACHED_ROOT = undefined\n  }\n}\n\nconst getAppRoot = (): string => {\n  if (__APP_ROOT) return __APP_ROOT\n\n  if (__CACHED_ROOT) return __CACHED_ROOT\n\n  const envRoot = process.env.PARSE_CONFIG_ROOT\n  if (envRoot) {\n    __CACHED_ROOT = envRoot\n    return __CACHED_ROOT\n  }\n\n  __CACHED_ROOT = findProjectRoot(process.cwd()) ?? process.cwd()\n  return __CACHED_ROOT\n}\n\nconst resetAppRoot = (): void => {\n  __APP_ROOT = undefined\n  __CACHED_ROOT = undefined\n}\n\nexport {\n  getAppRoot,\n  setAppRoot,\n  resetAppRoot,\n  findProjectRoot,\n}\n","import type { LoadConfigOptions } from '../types'\n\n/**\n * Configuration file loading utilities\n */\nimport path from 'node:path'\nimport { loadYmlSync } from '../yml/yml'\nimport { loadEnvSync } from '../env/env'\nimport { getAppRoot } from '../utils/appRoot'\nimport { constants } from '../constants/constants'\n\nimport { get } from '@keg-hub/jsutils/get'\nimport { isObj } from '@keg-hub/jsutils/isObj'\nimport { isArr } from '@keg-hub/jsutils/isArr'\nimport { exists } from '@keg-hub/jsutils/exists'\nimport { uniqArr } from '@keg-hub/jsutils/uniqArr'\nimport { noOpObj } from '@keg-hub/jsutils/noOpObj'\nimport { noPropArr } from '@keg-hub/jsutils/noPropArr'\nimport { deepEqual } from '@keg-hub/jsutils/deepEqual'\nimport { deepMerge } from '@keg-hub/jsutils/deepMerge'\n\n\n/**\n * Adds the override value to the passed in location\n * @param location - Location on the local file system\n * @param override - To be added to the location\n *\n * @returns Location with the override added\n */\nconst addContainerDir = (\n  location: string,\n  override = `container`\n): string | undefined => {\n  return location && path.join(location, override)\n}\n\n/**\n * Gets all locations relative to the app root if it exists\n *\n * @returns App paths if it exists or false\n */\nconst getAppLocations = (rootDir?: string): string[] => {\n  const appRoot = rootDir || getAppRoot()\n  const cwd = process.cwd()\n\n  const appLocs =\n    !appRoot || path.normalize(cwd) !== path.normalize(appRoot)\n      ? [cwd]\n      : []\n\n  return appRoot\n    ? [...appLocs, appRoot, addContainerDir(appRoot)!].filter(Boolean)\n    : appLocs\n}\n\n/**\n * Adds a group of files to the container array if toCheck is truthy\n * @param check - If true, files will be added to the container\n * @param container - Holds the files\n * @param files - Files to add if check it true\n */\nconst checkAddFile = (\n  check: boolean | string | undefined,\n  container: string[],\n  ...files: string[]\n): void => {\n  check && container.push(...files)\n}\n\n/**\n * Builds the yml file names in order of priority\n * @param file - The reference name of the values file\n * @param opts.env - The current environment\n * @param opts.name - The name of the app the values file belongs to\n *\n * @return Built files names\n */\nconst buildYmlFiles = (\n  file = 'values',\n  { env, name }: { env?: string; name?: string }\n): string[] => {\n  const ymlFiles: string[] = []\n\n  ymlFiles.push(`${file}.yml`)\n  ymlFiles.push(`${file}.yaml`)\n\n  checkAddFile(env, ymlFiles, `${env}.yml`, `${env}.yaml`)\n  checkAddFile(name, ymlFiles, `${name}.yml`, `${name}.yaml`)\n\n  checkAddFile(\n    env,\n    ymlFiles,\n    `${file}_${env}.yml`,\n    `${file}_${env}.yaml`\n  )\n  checkAddFile(name, ymlFiles, `${file}_${name}.yml`, `${file}_${name}.yaml`)\n  checkAddFile(\n    name && env,\n    ymlFiles,\n    `${file}_${name}_${env}.yml`,\n    `${file}_${name}_${env}.yaml`,\n    `${env}_${file}_${name}.yml`,\n    `${env}_${file}_${name}.yaml`,\n    `${name}_${env}_${file}.yml`,\n    `${name}_${env}_${file}.yaml`\n  )\n\n  checkAddFile(env, ymlFiles, `${file}.${env}.yml`, `${file}.${env}.yaml`)\n  checkAddFile(name, ymlFiles, `${file}.${name}.yml`, `${file}.${name}.yaml`)\n  checkAddFile(\n    name && env,\n    ymlFiles,\n    `${file}.${name}.${env}.yml`,\n    `${file}.${name}.${env}.yaml`,\n    `${env}.${file}.${name}.yml`,\n    `${env}.${file}.${name}.yaml`,\n    `${name}.${env}.${file}.yml`,\n    `${name}.${env}.${file}.yaml`\n  )\n\n  checkAddFile(env, ymlFiles, `${file}-${env}.yml`, `${file}-${env}.yaml`)\n  checkAddFile(name, ymlFiles, `${file}-${name}.yml`, `${file}-${name}.yaml`)\n  checkAddFile(\n    name && env,\n    ymlFiles,\n    `${file}-${name}-${env}.yml`,\n    `${file}-${name}-${env}.yaml`,\n    `${env}-${file}-${name}.yml`,\n    `${env}-${file}-${name}.yaml`,\n    `${name}-${env}-${file}.yml`,\n    `${name}-${env}-${file}.yaml`\n  )\n\n  return ymlFiles\n}\n\n/**\n * Builds the env file names in order of priority\n * @param opts.env - The current environment\n * @param opts.name - The name of the app the values file belongs to\n *\n * @return Built files names\n */\nconst buildEnvFiles = ({\n  env,\n  name,\n}: {\n  env?: string\n  name?: string\n}): {\n  envFiles: string[]\n  firstEnvs: string[]\n} => {\n  const envFiles: string[] = []\n\n  env && envFiles.push(`.env.${env}`)\n  name && envFiles.push(`.env.${name}`)\n  checkAddFile(\n    name && env,\n    envFiles,\n    `.env_${name}_${env}`,\n    `.env_${env}_${name}`,\n    `.env.${name}.${env}`,\n    `.env.${env}.${name}`,\n    `.env.${name}-${env}`,\n    `.env.${env}-${name}`\n  )\n\n  env && envFiles.push(`${env}.env`)\n  name && envFiles.push(`${name}.env`)\n  checkAddFile(\n    name && env,\n    envFiles,\n    `${name}_${env}.env`,\n    `${env}_${name}.env`,\n    `${name}.${env}.env`,\n    `${env}.${name}.env`,\n    `${name}-${env}.env`,\n    `${env}-${name}.env`\n  )\n\n  return {\n    envFiles,\n    firstEnvs: [`.env`, `defaults.env`],\n  }\n}\n\n/**\n * Builds the config file names for env and yaml files\n * @param ymlName - The reference name of the values file\n * @param opts.env - The current environment\n * @param opts.name - The name of the app the values file belongs to\n *\n * @return Built files names\n */\nconst buildFileNames = ({\n  ymlName,\n  noYml,\n  noEnv,\n  env,\n  name,\n}: {\n  ymlName?: string\n  noEnv?: boolean\n  noYml?: boolean\n  env?: string\n  name?: string\n}) => {\n  env = env || process.env.NODE_ENV\n\n  const ymlFiles = noYml ? noPropArr : buildYmlFiles(ymlName, { env, name })\n\n  const { firstEnvs, envFiles } = noEnv\n    ? { firstEnvs: noPropArr, envFiles: noPropArr }\n    : buildEnvFiles({ env, name })\n\n  return {\n    yml: ymlFiles,\n    env: envFiles,\n    first: firstEnvs,\n  }\n}\n\nconst loopFilesNames = (\n  locations: string[],\n  defLocs: string[],\n  fileNames: string[]\n): string[] => {\n  return fileNames.reduce((acc, fileName) => {\n    if (!fileName) return acc\n\n    defLocs.map((loc) => loc && acc.push(path.join(loc, fileName)))\n    locations.map((loc) => loc && acc.push(path.join(loc, fileName)))\n    return acc\n  }, [] as string[])\n}\n\n/**\n * Generates the full locations for the yml and env files to load\n * @return Contains the yml and env file locations to load\n */\nconst generateLocPath = (\n  locations: string[],\n  defLocs: string[],\n  fileNames: { yml: string[]; env: string[]; first: string[] },\n  opts: { noYml?: boolean; noEnv?: boolean }\n) => {\n  const { noYml, noEnv } = opts\n  return {\n    yml: noYml ? noPropArr : uniqArr(loopFilesNames(locations, defLocs, fileNames.yml)),\n    env: noEnv ? noPropArr : uniqArr(loopFilesNames(locations, defLocs, fileNames.env)),\n    first: noEnv\n      ? noPropArr\n      : uniqArr(loopFilesNames(locations, defLocs, fileNames.first)),\n  }\n}\n\n/**\n * Generates the paths to load configuration files from\n * @param location - Custom locations to generate the location from\n * @param types - Custom types to add to the paths\n *\n * @return Contains the yml and env file locations to load\n */\nconst generateLoadPaths = ({\n  locations = noPropArr,\n  rootDir,\n  ...opts\n}: LoadConfigOptions) => {\n  const fileNames = buildFileNames(opts)\n  const defLocs = [...getAppLocations(rootDir), constants.GLOBAL_CONFIG_FOLDER]\n\n  return generateLocPath(locations, defLocs, fileNames, opts)\n}\n\n/**\n * Loops over each value in the merged object looking for array\n * If it finds an array, it converts it into a unique array\n * Uses deepEqual to compare values between the merged, current, and toMerge args\n */\nconst loopCheckArr = (\n  merged: Record<string, any>,\n  current?: Record<string, any>,\n  toMerge?: Record<string, any>\n): Record<string, any> => {\n  return Object.entries(merged).reduce((updated: Record<string, any>, [key, value]) => {\n    const curVal = current?.[key]\n    const mergeVal = toMerge?.[key]\n\n    updated[key] = isObj(value)\n      ? loopCheckArr(value, curVal, mergeVal)\n      : !isArr(value) || !isArr(curVal)\n        ? value\n        : uniqArr(value, (item) => {\n            const cItem = curVal.find((cItem: any) => deepEqual(cItem, item))\n            const mItem = cItem || mergeVal.find((mItem: any) => deepEqual(mItem, item))\n            return mItem || item\n          })\n\n    return updated\n  }, isArr(merged) ? [] : {})\n}\n\n/**\n * Checks the array merge strategy, defaults to join\n * If join then deep merge and return\n */\nconst mergeObjs = (\n  current: Record<string, any>,\n  toMerge: Record<string, any>,\n  opts: LoadConfigOptions\n): Record<string, any> => {\n  const { mergeStrategy = `overwrite` } = opts\n  if (mergeStrategy !== `join` && mergeStrategy !== `unique`) {\n    return { ...current, ...toMerge }\n  }\n\n  const merged = deepMerge(current, toMerge)\n  return mergeStrategy === `join` ? merged : loopCheckArr(merged, current, toMerge)\n}\n\n/**\n * Loads yml and env configs\n * First generates all possible locations\n * Then based on the extension type, loads it's content\n * @param config - Settings for loading the config files\n *\n * @return Loaded config file ENVs\n */\nconst loadConfigs = (config: LoadConfigOptions = noOpObj): Record<string, any> => {\n  const { noYml, noEnv } = config\n  const loadFrom = generateLoadPaths(config)\n\n  // Load the env files, and merge with the yml files\n  const firstEnvs = noEnv\n    ? noOpObj\n    : loadFrom.first.reduce((acc, location) => {\n        const loaded = loadEnvSync({ error: false, ...config, location })\n        return {\n          ...acc,\n          ...(typeof loaded === 'object' ? loaded : {}),\n        }\n      }, noOpObj)\n\n  const ymlPath = exists(config.ymlPath) ? config.ymlPath : 'env'\n\n  // Load the yml files\n  const ymlValues = noYml\n    ? noOpObj\n    : loadFrom.yml.reduce((acc, location) => {\n        const content = loadYmlSync({ error: false, ...config, location })\n        const toMerge = ymlPath ? get(content as any, ymlPath) : (content as any)\n\n        return mergeObjs(acc, toMerge, config)\n      }, firstEnvs)\n\n  // Load the env files, and merge with the yml files\n  return noEnv\n    ? ymlValues\n    : loadFrom.env.reduce((acc, location) => {\n        const loaded = loadEnvSync({ error: false, ...config, location })\n        return {\n          ...acc,\n          ...(typeof loaded === 'object' ? loaded : {}),\n        }\n      }, ymlValues)\n}\n\nexport {\n  loadConfigs,\n}\n"]}