{"version":3,"file":"EnvReader.js","sourceRoot":"","sources":["../../src/EnvReader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAA0C;AAC1C,8CAAuD;AACvD,mDAA2C;AA2B3C,SAAS,aAAa,CAAC,GAAiB;IACtC,MAAM,KAAK,GAAG,IAAA,uBAAgB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,GAAG,CAAC,YAAY,CAAC;KACzB;IACD,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC3D,UAAI,CAAC,IAAI,CACP,kBAAkB,KAAK,SAAS,GAAG,CAAC,WAAW,UAAU,GAAG,CAAC,GAAG,KAAK;YACnE,oBAAoB,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACpD,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI;gBACvB,CAAC,CAAC,oBAAoB,GAAG,CAAC,YAAY,IAAI;gBAC1C,CAAC,CAAC,wBAAwB,CAAC,CAChC,CAAC;QACF,OAAO,GAAG,CAAC,YAAY,CAAC;KACzB;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAkB;IACxC,MAAM,GAAG,GAAG,IAAA,uBAAgB,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5D,6DAA6D;IAC7D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;QAC7B,OAAO,GAAG,CAAC,YAAY,CAAC;KACzB;IACD,IAAI,GAAG,KAAK,MAAM,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,GAAG,KAAK,OAAO,EAAE;QACnB,OAAO,KAAK,CAAC;KACd;IACD,sEAAsE;IACtE,UAAI,CAAC,IAAI,CACP,kBAAkB,GAAG,SAAS,GAAG,CAAC,WAAW,UAAU,GAAG,CAAC,GAAG,KAAK;QACjE,gDAAgD,GAAG,CAAC,YAAY,IAAI,CACvE,CAAC;IACF,OAAO,GAAG,CAAC,YAAY,CAAC;AAC1B,CAAC;AAED,SAAgB,UAAU,CACxB,GAAM;IAEN,QAAQ,GAAG,CAAC,IAAI,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,GAAG,CAAoB,CAAC;QAC/C,KAAK,SAAS;YACZ,OAAO,cAAc,CAAC,GAAG,CAAoB,CAAC;KACjD;AACH,CAAC;AATD,gCASC;AAMD,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,EAA6B,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,wBAAQ,CAAC,EAAE;QAClD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;KAChC;IACD,OAAO,MAAmB,CAAC;AAC7B,CAAC;AAND,wCAMC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { diag } from '@opentelemetry/api';\nimport { getStringFromEnv } from '@opentelemetry/core';\nimport { ENV_DEFS } from './EnvDefinition';\n\n/** Base definition shared by all env var types. */\ninterface EnvVarBase<T> {\n  key: string;\n  description: string;\n  defaultValue?: T;\n}\n\nexport interface StringEnvVar extends EnvVarBase<string> {\n  type: 'string';\n  allowedValues?: readonly string[];\n}\n\nexport interface BooleanEnvVar extends EnvVarBase<boolean> {\n  type: 'boolean';\n  defaultValue: boolean;\n}\n\nexport type EnvVarDefinition = StringEnvVar | BooleanEnvVar;\n\ntype ResolvedType<D extends EnvVarDefinition> = D extends StringEnvVar\n  ? string | undefined\n  : D extends BooleanEnvVar\n    ? boolean\n    : never;\n\nfunction readStringEnv(def: StringEnvVar): string | undefined {\n  const value = getStringFromEnv(def.key);\n  if (value == null) {\n    return def.defaultValue;\n  }\n  if (def.allowedValues && !def.allowedValues.includes(value)) {\n    diag.warn(\n      `Invalid value \"${value}\" for ${def.description} (env: ${def.key}). ` +\n        `Expected one of: ${def.allowedValues.join(', ')}. ` +\n        (def.defaultValue != null\n          ? `Falling back to \"${def.defaultValue}\".`\n          : 'Value will be ignored.')\n    );\n    return def.defaultValue;\n  }\n  return value;\n}\n\nfunction readBooleanEnv(def: BooleanEnvVar): boolean {\n  const raw = getStringFromEnv(def.key)?.trim().toLowerCase();\n  // Handle the case where the env var is not set (no warning).\n  if (raw == null || raw === '') {\n    return def.defaultValue;\n  }\n  if (raw === 'true') {\n    return true;\n  }\n  if (raw === 'false') {\n    return false;\n  }\n  // If set to an unrecognized value, warn and fall back to the default.\n  diag.warn(\n    `Invalid value \"${raw}\" for ${def.description} (env: ${def.key}). ` +\n      `Expected 'true' or 'false'. Falling back to \"${def.defaultValue}\".`\n  );\n  return def.defaultValue;\n}\n\nexport function readEnvVar<D extends EnvVarDefinition>(\n  def: D\n): ResolvedType<D> {\n  switch (def.type) {\n    case 'string':\n      return readStringEnv(def) as ResolvedType<D>;\n    case 'boolean':\n      return readBooleanEnv(def) as ResolvedType<D>;\n  }\n}\n\nexport type EnvValues = {\n  [K in keyof typeof ENV_DEFS]: ResolvedType<(typeof ENV_DEFS)[K]>;\n};\n\nexport function readAllEnvVars(): EnvValues {\n  const result = {} as Record<string, unknown>;\n  for (const [name, def] of Object.entries(ENV_DEFS)) {\n    result[name] = readEnvVar(def);\n  }\n  return result as EnvValues;\n}\n"]}