{"version":3,"sources":["../../../src/configFile/getConfiguration.ts"],"sourcesContent":["import merge from 'deepmerge';\nimport { relative } from 'path';\nimport type { LoadEnvFileOptions } from '../envVariables/loadEnvFile';\nimport { logger } from '../logger';\nimport type { CustomIntlayerConfig, IntlayerConfig } from '../types/config';\nimport { buildConfigurationFields } from './buildConfigurationFields';\nimport { loadConfigurationFile } from './loadConfigurationFile';\nimport { searchConfigurationFile } from './searchConfigurationFile';\n\nlet storedConfiguration: IntlayerConfig | undefined;\nlet storedConfigurationFilePath: string | undefined;\nlet storedNumCustomConfiguration: number | undefined;\n\nexport type GetConfigurationOptions = {\n  baseDir?: string;\n  override?: CustomIntlayerConfig;\n} & LoadEnvFileOptions;\n\nconst BASE_DIR_PATH = process.cwd();\n\n/**\n * Get the configuration for the intlayer by reading the configuration file (e.g. intlayer.config.js)\n */\nexport const getConfiguration = (\n  options?: GetConfigurationOptions\n): IntlayerConfig => {\n  const mergedOptions = {\n    baseDir: BASE_DIR_PATH,\n    ...options,\n  };\n\n  const { baseDir, env, envFile } = mergedOptions;\n\n  if (!storedConfiguration || typeof options !== 'undefined') {\n    // Search for configuration files\n    const { configurationFilePath, numCustomConfiguration } =\n      searchConfigurationFile(baseDir);\n\n    // Load the custom configuration\n    let customConfiguration: CustomIntlayerConfig | undefined;\n\n    if (configurationFilePath) {\n      customConfiguration = loadConfigurationFile(configurationFilePath, {\n        env,\n        envFile,\n      });\n    }\n\n    // Save the configuration to avoid reading the file again\n    storedConfiguration = buildConfigurationFields(\n      customConfiguration,\n      baseDir\n    );\n\n    storedConfigurationFilePath = configurationFilePath;\n    storedNumCustomConfiguration = numCustomConfiguration;\n  }\n\n  // Log warning if multiple configuration files are found\n  if (options?.override?.log?.mode === 'verbose') {\n    logConfigFileResult(\n      storedNumCustomConfiguration,\n      storedConfigurationFilePath\n    );\n  }\n\n  return merge(storedConfiguration, options?.override ?? {}) as IntlayerConfig;\n};\n\nconst logConfigFileResult = (\n  numCustomConfiguration?: number,\n  configurationFilePath?: string\n) => {\n  if (numCustomConfiguration === 0) {\n    logger('Configuration file not found, using default configuration.', {\n      isVerbose: true,\n    });\n  } else {\n    const relativeOutputPath = relative(BASE_DIR_PATH, configurationFilePath!);\n\n    if (numCustomConfiguration === 1) {\n      logger(`Configuration file found: ${relativeOutputPath}.`, {\n        isVerbose: true,\n      });\n    } else {\n      logger(\n        `Multiple configuration files found, using ${relativeOutputPath}.`,\n        {\n          isVerbose: true,\n        }\n      );\n    }\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAkB;AAClB,kBAAyB;AAEzB,oBAAuB;AAEvB,sCAAyC;AACzC,mCAAsC;AACtC,qCAAwC;AAExC,IAAI;AACJ,IAAI;AACJ,IAAI;AAOJ,MAAM,gBAAgB,QAAQ,IAAI;AAK3B,MAAM,mBAAmB,CAC9B,YACmB;AACnB,QAAM,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,GAAG;AAAA,EACL;AAEA,QAAM,EAAE,SAAS,KAAK,QAAQ,IAAI;AAElC,MAAI,CAAC,uBAAuB,OAAO,YAAY,aAAa;AAE1D,UAAM,EAAE,uBAAuB,uBAAuB,QACpD,wDAAwB,OAAO;AAGjC,QAAI;AAEJ,QAAI,uBAAuB;AACzB,gCAAsB,oDAAsB,uBAAuB;AAAA,QACjE;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAGA,8BAAsB;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAEA,kCAA8B;AAC9B,mCAA+B;AAAA,EACjC;AAGA,MAAI,SAAS,UAAU,KAAK,SAAS,WAAW;AAC9C;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,aAAO,iBAAAA,SAAM,qBAAqB,SAAS,YAAY,CAAC,CAAC;AAC3D;AAEA,MAAM,sBAAsB,CAC1B,wBACA,0BACG;AACH,MAAI,2BAA2B,GAAG;AAChC,8BAAO,8DAA8D;AAAA,MACnE,WAAW;AAAA,IACb,CAAC;AAAA,EACH,OAAO;AACL,UAAM,yBAAqB,sBAAS,eAAe,qBAAsB;AAEzE,QAAI,2BAA2B,GAAG;AAChC,gCAAO,6BAA6B,kBAAkB,KAAK;AAAA,QACzD,WAAW;AAAA,MACb,CAAC;AAAA,IACH,OAAO;AACL;AAAA,QACE,6CAA6C,kBAAkB;AAAA,QAC/D;AAAA,UACE,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["merge"]}