{"version":3,"file":"getConfiguration.mjs","names":[],"sources":["../../../src/configFile/getConfiguration.ts"],"sourcesContent":["import type {\n  CustomIntlayerConfig,\n  IntlayerConfig,\n  LogFunctions,\n} from '@intlayer/types/config';\nimport { defu } from 'defu';\nimport type { LoadExternalFileOptions } from '../loadExternalFile/loadExternalFile';\nimport type { SandBoxContextOptions } from '../loadExternalFile/parseFileContent';\nimport { cacheMemory } from '../utils/cacheMemory';\nimport { getPackageJsonPath } from '../utils/getPackageJsonPath';\nimport { buildConfigurationFields } from './buildConfigurationFields';\nimport { loadConfigurationFile } from './loadConfigurationFile';\nimport { searchConfigurationFile } from './searchConfigurationFile';\n\nexport type GetConfigurationOptions = {\n  baseDir?: string;\n  override?: CustomIntlayerConfig;\n  // Dotenv options\n  env?: string;\n  envFile?: string;\n  // Log functions\n  logFunctions?: LogFunctions;\n  // Require function\n  require?: NodeJS.Require;\n  // cache\n  cache?: boolean;\n  // Build options for TypeScript transpilation (e.g. custom esbuild instance)\n  buildOptions?: LoadExternalFileOptions['buildOptions'];\n} & Omit<SandBoxContextOptions, 'projectRequire'>;\n\nexport type GetConfigurationAndFilePathResult = {\n  configuration: IntlayerConfig;\n  customConfiguration: CustomIntlayerConfig | undefined;\n  numCustomConfiguration: number;\n  configurationFilePath: string | undefined;\n};\n\n/**\n * Get the configuration for the intlayer by reading the configuration file (e.g. intlayer.config.js)\n */\nexport const getConfigurationAndFilePath = (\n  options?: GetConfigurationOptions\n): GetConfigurationAndFilePathResult => {\n  let baseDir: string | undefined;\n\n  try {\n    // Can fail in some environments (e.g. MCP server, VScode extension)\n    baseDir = options?.baseDir ?? getPackageJsonPath().baseDir;\n  } catch (_err) {\n    // Return default config if the package.json is not found\n    return {\n      configuration: buildConfigurationFields(\n        {},\n        options?.baseDir,\n        options?.logFunctions\n      ),\n      customConfiguration: undefined,\n      numCustomConfiguration: 0,\n      configurationFilePath: undefined,\n    };\n  }\n\n  const cachedConfiguration =\n    cacheMemory.get<GetConfigurationAndFilePathResult>(options);\n\n  if (cachedConfiguration) return cachedConfiguration;\n\n  // Search for configuration files\n  const { configurationFilePath, numCustomConfiguration } =\n    searchConfigurationFile(baseDir);\n\n  let storedConfiguration: IntlayerConfig;\n  let customConfiguration: CustomIntlayerConfig | undefined;\n\n  if (configurationFilePath) {\n    // Load the custom configuration\n    customConfiguration = loadConfigurationFile(configurationFilePath, {\n      projectRequire: options?.require,\n      // Dotenv options\n      envVarOptions: {\n        env: options?.env,\n        envFile: options?.envFile,\n      },\n      // Sandbox context additional variables\n      additionalEnvVars: options?.additionalEnvVars,\n      aliases: options?.aliases,\n      // Build options for TypeScript transpilation (e.g. custom esbuild instance)\n      buildOptions: options?.buildOptions,\n    });\n\n    // Save the configuration to avoid reading the file again\n    storedConfiguration = buildConfigurationFields(\n      customConfiguration,\n      options?.baseDir,\n      options?.logFunctions\n    );\n  } else {\n    // No configuration file found, use default configuration\n    storedConfiguration = buildConfigurationFields(\n      {},\n      options?.baseDir,\n      options?.logFunctions\n    );\n  }\n\n  // Log warning if multiple configuration files are found\n  const projectRequireConfig: CustomIntlayerConfig = options?.require\n    ? {\n        build: {\n          require: options?.require,\n          cache: options?.cache,\n        },\n      }\n    : {};\n\n  const configWithProjectRequire = defu(\n    projectRequireConfig,\n    storedConfiguration\n  ) as IntlayerConfig;\n\n  const configuration = defu(\n    options?.override ?? {},\n    configWithProjectRequire\n  ) as IntlayerConfig;\n\n  cacheMemory.set(options, {\n    configuration,\n    customConfiguration,\n    numCustomConfiguration,\n    configurationFilePath,\n  });\n\n  return {\n    configuration,\n    customConfiguration,\n    numCustomConfiguration,\n    configurationFilePath,\n  };\n};\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 => getConfigurationAndFilePath(options).configuration;\n"],"mappings":";;;;;;;;;;;AAwCA,MAAa,+BACX,YACsC;CACtC,IAAI;AAEJ,KAAI;AAEF,YAAU,SAAS,WAAW,oBAAoB,CAAC;UAC5C,MAAM;AAEb,SAAO;GACL,eAAe,yBACb,EAAE,EACF,SAAS,SACT,SAAS,aACV;GACD,qBAAqB;GACrB,wBAAwB;GACxB,uBAAuB;GACxB;;CAGH,MAAM,sBACJ,YAAY,IAAuC,QAAQ;AAE7D,KAAI,oBAAqB,QAAO;CAGhC,MAAM,EAAE,uBAAuB,2BAC7B,wBAAwB,QAAQ;CAElC,IAAI;CACJ,IAAI;AAEJ,KAAI,uBAAuB;AAEzB,wBAAsB,sBAAsB,uBAAuB;GACjE,gBAAgB,SAAS;GAEzB,eAAe;IACb,KAAK,SAAS;IACd,SAAS,SAAS;IACnB;GAED,mBAAmB,SAAS;GAC5B,SAAS,SAAS;GAElB,cAAc,SAAS;GACxB,CAAC;AAGF,wBAAsB,yBACpB,qBACA,SAAS,SACT,SAAS,aACV;OAGD,uBAAsB,yBACpB,EAAE,EACF,SAAS,SACT,SAAS,aACV;CAaH,MAAM,2BAA2B,KATkB,SAAS,UACxD,EACE,OAAO;EACL,SAAS,SAAS;EAClB,OAAO,SAAS;EACjB,EACF,GACD,EAAE,EAIJ,oBACD;CAED,MAAM,gBAAgB,KACpB,SAAS,YAAY,EAAE,EACvB,yBACD;AAED,aAAY,IAAI,SAAS;EACvB;EACA;EACA;EACA;EACD,CAAC;AAEF,QAAO;EACL;EACA;EACA;EACA;EACD;;;;;AAMH,MAAa,oBACX,YACmB,4BAA4B,QAAQ,CAAC"}