{"version":3,"sources":["../../src/types/index.ts","../../shared/errors/libMessages.ts","../../shared/errors/index.ts","../../src/config.ts","../../src/core/parser.ts","../../src/utils/index.ts","../../src/core/validator.ts","../../src/core/resolver.ts","../../src/core/index.ts","../../src/index.ts"],"names":["EnvError","message","LIB_ERROR_MESSAGES","path","lineNumber","type","key","value","allowed","ERROR_MESSAGES","allowedSchemaTypes","BUILTIN_SCHEMA","parseEnvx","content","lines","env","schema","currentSchemaKey","multilineKey","multilineBuffer","i","originalLine","trimmedLine","isSchemaHeader","parseSchemaHeader","parseSchemaLine","isMultilineStart","parseEnvLine","line","target","rawKey","rawValue","splitKeyValue","stripQuotes","applyDefault","parsed","v","values","num","trimmedValue","eqIndex","first","last","toBoolean","isEmail","inferTypeFromValue","completeSchemaFromEnvx","completedSchema","addBuiltinEnvVarsToSchema","parseValueByType","normalized","validateEnv","result","parsedMap","required","defValue","resolveEnvx","entries","rawEnv","resolvedEnv","entry","resolving","resolveValue","currentKey","isTernary","resolveTernary","hasInterpolation","resolveInterpolation","str","_","varName","name","match","operator","compareValue","trueVal","falseVal","actualValue","condition","cmp","loadEnvxFromString","parsedSchema","fullSchema","effectiveSchema","resolved","getEnvx","filePath","absPath","fs","finalSchema","loadEnvx","envVars"],"mappings":"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","file":"index.mjs","sourcesContent":["export type EnvType =\r\n  | \"string\"\r\n  | \"number\"\r\n  | \"boolean\"\r\n  | \"enum\"\r\n  | \"email\"\r\n  | \"url\";\r\n\r\nexport interface EnvVarSchema {\r\n  type: EnvType;\r\n  required?: boolean;\r\n  default?: string | number | boolean;\r\n  values?: Array<string>;\r\n  deprecated?: boolean;\r\n  description?: string;\r\n}\r\n\r\nexport type EnvSchema = Record<string, EnvVarSchema>;\r\n\r\nexport type EnvResult = Record<string, string | number | boolean>;\r\n\r\nexport class EnvError extends Error {\r\n  constructor(message: string) {\r\n    super(message);\r\n    this.name = \"EnvError\";\r\n  }\r\n}\r\n","export const LIB_ERROR_MESSAGES = {\r\n  // --- [lib] index.ts error messages --- //\r\n  fileDoesNotExist: (path: string) => {\r\n    return `[envx:error] The specified file does not exist: ${path}`;\r\n  },\r\n\r\n  unsupportedType: (lineNumber: number, type: string) =>\r\n    `[envx:error] Line ${lineNumber + 1}: Unsupported type \"${type}\".`,\r\n\r\n  // --- [lib] validator.ts error messages --- //\r\n  validator: {\r\n    invalidNumber: (key: string, value: string) =>\r\n      `Invalid value for \"${key}\": expected a number but received \"${value}\".`,\r\n    invalidBoolean: (key: string, value: string) =>\r\n      `Invalid boolean for \"${key}\": expected \"true\" or \"false\" but received \"${value}\".`,\r\n    missingEnumValues: (key: string) =>\r\n      `Enum values are not defined for \"${key}\". Please specify allowed values.`,\r\n    invalidEnum: (key: string, value: string, allowed: string[]) =>\r\n      `Invalid enum value for \"${key}\": expected one of [${allowed.join(\r\n        \", \"\r\n      )}] but received \"${value}\".`,\r\n    invalidEmail: (key: string, value: string) =>\r\n      `Invalid email format for \"${key}\": received \"${value}\". Please provide a valid email address.`,\r\n    invalidUrl: (key: string, value: string) =>\r\n      `Invalid URL format for \"${key}\": received \"${value}\". Please provide a valid URL.`,\r\n    unsupportedType: (key: string, type: string) =>\r\n      `Unsupported type \"${type}\" specified for \"${key}\".`,\r\n    requiredMissing: (key: string) =>\r\n      `Required environment variable \"${key}\" is missing and has no default value.`,\r\n  },\r\n\r\n  // --- [lib] resolver.ts error messages --- //\r\n  resolver: {\r\n    circularDependency: (key: string) =>\r\n      `[envx:error] Circular dependency detected while resolving \"${key}\".\\n→ Check for variables referencing each other in a loop.`,\r\n    interpolationFailed: (key: string) =>\r\n      `[envx:error] Failed to resolve variable \"${key}\". No value found for interpolation.`,\r\n    requiredMissingInResolve: (key: string) =>\r\n      `[envx:error] Environment variable \"${key}\" is not set and no default is defined.\\n→ Define \"${key}\" in your .envx file or provide a default value in the schema.`,\r\n  },\r\n\r\n  // --- [lib] parser.ts error messages --- //\r\n  parser: {\r\n    schemaBlockEmpty: (lineNumber: number) =>\r\n      `[envx:error] Line ${lineNumber + 1}: Schema block name cannot be empty.`,\r\n\r\n    schemaKeyDuplicate: (lineNumber: number, key: string) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: Schema key \"${key}\" is already defined. Duplicate schema definitions are not allowed.`,\r\n\r\n    typeAlreadyDefined: (lineNumber: number) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: \"type\" is already defined for this variable. You cannot redefine it.`,\r\n\r\n    unknownSchemaProperty: (lineNumber: number, key: string) =>\r\n      `[envx:error] Line ${lineNumber + 1}: Unknown schema property \"${key}\".`,\r\n\r\n    missingDelimiter: (lineNumber: number) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: Missing \"=\" delimiter in assignment.`,\r\n\r\n    variableNameEmpty: (lineNumber: number) =>\r\n      `[envx:error] Line ${lineNumber + 1}: Variable name cannot be empty.`,\r\n\r\n    typeRequiredBeforeDefault: (lineNumber: number) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: \"type\" must be defined before \"default\".`,\r\n\r\n    defaultMustBeNumber: (lineNumber: number) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: Default value must be a valid number.`,\r\n\r\n    defaultMustBeBoolean: (lineNumber: number) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: Default value must be \"true\" or \"false\".`,\r\n\r\n    defaultNotInEnum: (lineNumber: number, value: string) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: Default \"${value}\" is not in enum values.`,\r\n\r\n    invalidValuesJson: (lineNumber: number) =>\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: \"values\" must be a valid JSON string array.`,\r\n  },\r\n};\r\n","import { LIB_ERROR_MESSAGES } from \"./libMessages\";\r\n\r\nexport const ERROR_MESSAGES = {\r\n  lib: LIB_ERROR_MESSAGES,\r\n  cli: {},\r\n};\r\n","import { EnvSchema, EnvType } from \"./types\";\r\n\r\nexport const allowedSchemaTypes: Array<EnvType> = [\r\n  \"string\",\r\n  \"number\",\r\n  \"boolean\",\r\n  \"enum\",\r\n  \"email\",\r\n  \"url\",\r\n];\r\n\r\nexport const BUILTIN_SCHEMA: EnvSchema = {\r\n  // NODE_ENV: {\r\n  //   type: \"enum\",\r\n  //   values: [\"development\", \"production\", \"test\"],\r\n  //   default: \"development\",\r\n  //   required: true,\r\n  //   description: \"Specifies the Node.js environment\",\r\n  // },\r\n  // TZ: {\r\n  //   type: \"string\",\r\n  //   default: \"UTC\",\r\n  //   required: false,\r\n  //   description: \"Timezone for Node.js process (default is UTC)\",\r\n  // },\r\n};\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { allowedSchemaTypes } from \"../config\";\r\nimport { EnvError, EnvSchema, EnvVarSchema } from \"../types\";\r\n\r\ninterface ParsedLine {\r\n  key: string;\r\n  value: any;\r\n}\r\n\r\ninterface ParseResult {\r\n  env: ParsedLine[];\r\n  schema: EnvSchema;\r\n}\r\n\r\n/**\r\n * Parses a custom `.envx` file format into environment variables and their schema definitions.\r\n *\r\n * The parser supports:\r\n * - Standard key=value lines\r\n * - Multiline values wrapped with triple quotes (`\"\"\"`)\r\n * - Optional schema definitions using section headers like `[VARNAME]`\r\n *\r\n * Example:\r\n * ```\r\n * API_KEY=\"abc123\"\r\n *\r\n * [API_KEY]\r\n * type = string\r\n * required = true\r\n * ```\r\n *\r\n * @param {string} content - Raw contents of the `.envx` file.\r\n * @returns {{ env: ParsedLine[], schema: EnvSchema }} Parsed environment variables and associated schema definitions.\r\n *\r\n * @throws {EnvError} If the syntax is invalid or required attributes are missing.\r\n */\r\nexport function parseEnvx(content: string): ParseResult {\r\n  const lines = content.split(/\\r?\\n/);\r\n  const env: ParsedLine[] = [];\r\n  const schema: EnvSchema = {};\r\n\r\n  let currentSchemaKey: string | null = null;\r\n  let multilineKey: string | null = null;\r\n  let multilineBuffer: string[] = [];\r\n\r\n  for (let i = 0; i < lines.length; i++) {\r\n    const originalLine = lines[i];\r\n    const trimmedLine = originalLine.trim();\r\n\r\n    if (!trimmedLine || trimmedLine.startsWith(\"#\")) continue;\r\n\r\n    if (multilineKey) {\r\n      if (trimmedLine.endsWith('\"\"\"')) {\r\n        multilineBuffer.push(trimmedLine.slice(0, -3));\r\n        env.push({ key: multilineKey, value: multilineBuffer.join(\"\\n\") });\r\n        multilineKey = null;\r\n        multilineBuffer = [];\r\n      } else {\r\n        multilineBuffer.push(originalLine);\r\n      }\r\n      continue;\r\n    }\r\n\r\n    if (isSchemaHeader(trimmedLine)) {\r\n      currentSchemaKey = parseSchemaHeader(trimmedLine, i, schema);\r\n      continue;\r\n    }\r\n\r\n    if (currentSchemaKey) {\r\n      parseSchemaLine(trimmedLine, i, schema[currentSchemaKey]);\r\n      continue;\r\n    }\r\n\r\n    const { key, value, isMultilineStart } = parseEnvLine(trimmedLine, i);\r\n    if (isMultilineStart) {\r\n      multilineKey = key;\r\n      multilineBuffer.push(value);\r\n    } else {\r\n      env.push({ key, value });\r\n    }\r\n  }\r\n\r\n  return { env, schema };\r\n}\r\n\r\nfunction parseSchemaHeader(\r\n  line: string,\r\n  lineNumber: number,\r\n  schema: EnvSchema\r\n): string {\r\n  const key = line.slice(1, -1).trim();\r\n  if (!key) {\r\n    // throw new EnvError(\r\n    //   `[envx:error] Line ${lineNumber + 1}: Schema block name cannot be empty.`\r\n    // );\r\n    throw new EnvError(ERROR_MESSAGES.lib.parser.schemaBlockEmpty(lineNumber));\r\n  }\r\n\r\n  if (schema[key]) {\r\n    // throw new EnvError(\r\n    //   `[envx:error] Line ${\r\n    //     lineNumber + 1\r\n    //   }: Schema key \"${key}\" is already defined. Duplicate schema definitions are not allowed.`\r\n    // );\r\n\r\n    throw new EnvError(\r\n      ERROR_MESSAGES.lib.parser.schemaKeyDuplicate(lineNumber, key)\r\n    );\r\n  }\r\n\r\n  schema[key] = schema[key] ?? {};\r\n  return key;\r\n}\r\n\r\n/**\r\n * Parses a line inside a schema block and applies it to the given schema variable.\r\n *\r\n * Supported keys: type, required, default, values\r\n *\r\n * @param {string} line - The line inside the schema block.\r\n * @param {number} lineNumber - Current line number (zero-based).\r\n * @param {EnvVarSchema} target - Target schema object for this variable.\r\n *\r\n * @throws {EnvError} For unknown keys or invalid value formats.\r\n */\r\nfunction parseSchemaLine(\r\n  line: string,\r\n  lineNumber: number,\r\n  target: EnvVarSchema\r\n) {\r\n  const [rawKey, rawValue] = splitKeyValue(line, lineNumber);\r\n  const key = rawKey.trim();\r\n  const value: any = stripQuotes(rawValue.trim());\r\n\r\n  switch (key) {\r\n    case \"required\":\r\n      target.required = value === \"true\";\r\n      break;\r\n\r\n    case \"type\":\r\n      if (target.type !== undefined) {\r\n        // throw new EnvError(\r\n        //   `[envx:error] Line ${\r\n        //     lineNumber + 1\r\n        //   }: \"type\" is already defined for this variable. You cannot redefine it.`\r\n        // );\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.parser.typeAlreadyDefined(lineNumber)\r\n        );\r\n      }\r\n      if (!allowedSchemaTypes.includes(value)) {\r\n        // throw new EnvError(\r\n        //   `[envx:error] Line ${lineNumber + 1}: Unsupported type \"${value}\".`\r\n        // );\r\n\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.unsupportedType(lineNumber, value)\r\n        );\r\n      }\r\n      target.type = value as EnvVarSchema[\"type\"];\r\n      break;\r\n\r\n    case \"default\":\r\n      applyDefault(value, lineNumber, target);\r\n      break;\r\n\r\n    case \"values\":\r\n      try {\r\n        const parsed = JSON.parse(value);\r\n        if (\r\n          !Array.isArray(parsed) ||\r\n          !parsed.every((v) => typeof v === \"string\")\r\n        ) {\r\n          throw new EnvError(\r\n            `[envx:error] Line ${\r\n              lineNumber + 1\r\n            }: The parsed \"values\" field must be an array of strings. ` +\r\n              `Please ensure the JSON array contains only string elements.`\r\n          );\r\n        }\r\n        target.values = parsed;\r\n      } catch {\r\n        // throw new EnvError(\r\n        //   `[envx:error] Line ${\r\n        //     lineNumber + 1\r\n        //   }: \"values\" must be a valid JSON string array.`\r\n        // );\r\n\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.parser.invalidValuesJson(lineNumber)\r\n        );\r\n      }\r\n      break;\r\n\r\n    case \"deprecated\":\r\n      target.deprecated = value;\r\n      break;\r\n    case \"description\":\r\n      target.description = value;\r\n      break;\r\n\r\n    default:\r\n      throw new EnvError(\r\n        ERROR_MESSAGES.lib.parser.unknownSchemaProperty(lineNumber, key)\r\n      );\r\n    // throw new EnvError(\r\n    //   `[envx:error] Line ${lineNumber + 1}: Unknown schema property \"${key}\".`\r\n    // );\r\n  }\r\n}\r\n\r\nfunction isSchemaHeader(line: string): boolean {\r\n  // --- Checks if a line is a schema section header, e.g. [MY_VARIABLE]. --- //\r\n  return /^\\[.*\\]$/.test(line);\r\n}\r\n\r\nfunction applyDefault(value: string, lineNumber: number, target: EnvVarSchema) {\r\n  const { type, values } = target;\r\n  if (!type) {\r\n    // throw new EnvError(\r\n    //   `[envx:error] Line ${\r\n    //     lineNumber + 1\r\n    //   }: \"type\" must be defined before \"default\".`\r\n    // );\r\n    throw new EnvError(\r\n      ERROR_MESSAGES.lib.parser.typeRequiredBeforeDefault(lineNumber)\r\n    );\r\n  }\r\n\r\n  switch (type) {\r\n    case \"number\":\r\n      const num = Number(value);\r\n      if (isNaN(num)) {\r\n        // throw new EnvError(\r\n        //   `[envx:error] Line ${\r\n        //     lineNumber + 1\r\n        //   }: Default value must be a valid number.`\r\n        // );\r\n\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.parser.defaultMustBeNumber(lineNumber)\r\n        );\r\n      }\r\n      target.default = num;\r\n      break;\r\n\r\n    case \"boolean\":\r\n      if (value !== \"true\" && value !== \"false\") {\r\n        // throw new EnvError(\r\n        //   `[envx:error] Line ${\r\n        //     lineNumber + 1\r\n        //   }: Default value must be \"true\" or \"false\".`\r\n        // );\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.parser.defaultMustBeBoolean(lineNumber)\r\n        );\r\n      }\r\n      target.default = value === \"true\";\r\n      break;\r\n\r\n    case \"enum\":\r\n      if (!values || !values.includes(value)) {\r\n        // throw new EnvError(\r\n        //   `[envx:error] Line ${\r\n        //     lineNumber + 1\r\n        //   }: Default \"${value}\" is not in enum values.`\r\n        // );\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.parser.defaultNotInEnum(lineNumber, value)\r\n        );\r\n      }\r\n      target.default = value;\r\n      break;\r\n\r\n    default:\r\n      target.default = value;\r\n  }\r\n}\r\n\r\n/**\r\n * Parses a single line representing an environment variable.\r\n *\r\n * Supports multiline strings that start with triple quotes (`\"\"\"`).\r\n *\r\n * @param {string} line - The line to parse.\r\n * @param {number} lineNumber - The line number for error messages.\r\n * @returns {{ key: string, value: string, isMultilineStart: boolean }} Parsed result.\r\n *\r\n * @throws {EnvError} If the line is invalid or missing a key.\r\n */\r\nfunction parseEnvLine(\r\n  line: string,\r\n  lineNumber: number\r\n): {\r\n  key: string;\r\n  value: string;\r\n  isMultilineStart: boolean;\r\n} {\r\n  const [rawKey, rawValue] = splitKeyValue(line, lineNumber);\r\n  const key = rawKey.trim();\r\n\r\n  if (!key) {\r\n    // throw new EnvError(\r\n    //   `[envx:error] Line ${lineNumber + 1}: Variable name cannot be empty.`\r\n    // );\r\n    throw new EnvError(ERROR_MESSAGES.lib.parser.variableNameEmpty(lineNumber));\r\n  }\r\n\r\n  const trimmedValue = rawValue.trim();\r\n  if (trimmedValue.startsWith('\"\"\"')) {\r\n    return {\r\n      key,\r\n      value: trimmedValue.slice(3),\r\n      isMultilineStart: true,\r\n    };\r\n  }\r\n\r\n  return {\r\n    key,\r\n    value: stripQuotes(trimmedValue),\r\n    isMultilineStart: false,\r\n  };\r\n}\r\n\r\nfunction splitKeyValue(line: string, lineNumber: number): [string, string] {\r\n  const eqIndex = line.indexOf(\"=\");\r\n  if (eqIndex === -1) {\r\n    // throw new EnvError(\r\n    //   `[envx:error] Line ${\r\n    //     lineNumber + 1\r\n    //   }: Missing \"=\" delimiter in assignment.`\r\n    // );\r\n    throw new EnvError(ERROR_MESSAGES.lib.parser.missingDelimiter(lineNumber));\r\n  }\r\n  return [line.slice(0, eqIndex), line.slice(eqIndex + 1)];\r\n}\r\n\r\nfunction stripQuotes(value: string): string {\r\n  const first = value[0];\r\n  const last = value[value.length - 1];\r\n  if ((first === `\"` && last === `\"`) || (first === `'` && last === `'`)) {\r\n    return value.slice(1, -1);\r\n  }\r\n  return value;\r\n}\r\n","import { BUILTIN_SCHEMA } from \"../config\";\r\nimport { EnvSchema, EnvVarSchema } from \"../types\";\r\n\r\nexport function toBoolean(value: any): boolean {\r\n  if (typeof value === \"boolean\") return value;\r\n  if (typeof value === \"string\") {\r\n    if (value.toLowerCase() === \"true\") return true;\r\n    if (value.toLowerCase() === \"false\") return false;\r\n  }\r\n  if (typeof value === \"number\") {\r\n    return value === 1;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport const isEmail = (value: string) => {\r\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\r\n};\r\n\r\nfunction inferTypeFromValue(value: any): EnvVarSchema[\"type\"] {\r\n  if (typeof value === \"boolean\") return \"boolean\";\r\n  if (!isNaN(Number(value)) && value !== \"\" && value !== null) return \"number\";\r\n  return \"string\";\r\n}\r\n\r\n/**\r\n * used to set default schema for variables without schema value\r\n */\r\nexport function completeSchemaFromEnvx(\r\n  env: { key: string; value: any }[],\r\n  schema: EnvSchema\r\n): EnvSchema {\r\n  const completedSchema: EnvSchema = { ...BUILTIN_SCHEMA, ...schema };\r\n\r\n  env.forEach(({ key, value }) => {\r\n    if (!completedSchema[key]) {\r\n      completedSchema[key] = {\r\n        type: inferTypeFromValue(value),\r\n        required: false,\r\n      };\r\n    }\r\n  });\r\n\r\n  return completedSchema;\r\n}\r\n\r\nexport function addBuiltinEnvVarsToSchema(schema?: EnvSchema): EnvSchema {\r\n  return {\r\n    ...BUILTIN_SCHEMA,\r\n    ...(schema || {}),\r\n  };\r\n}\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { EnvSchema, EnvResult, EnvType, EnvError } from \"../types\";\r\nimport { isEmail } from \"../utils\";\r\n\r\n/**\r\n * Parses a single environment variable value according to its declared type.\r\n *\r\n * @param key - The environment variable name.\r\n * @param value - The raw string value to parse.\r\n * @param type - Expected type of the value.\r\n * @param values - Allowed enum values if type is \"enum\".\r\n * @returns Parsed and typed value.\r\n * @throws {EnvError} When the value doesn't conform to the expected type.\r\n */\r\nfunction parseValueByType(\r\n  key: string,\r\n  value: string,\r\n  type: EnvType,\r\n  values?: string[]\r\n): string | number | boolean {\r\n  switch (type) {\r\n    case \"string\":\r\n      return value;\r\n\r\n    case \"number\": {\r\n      const num = Number(value);\r\n      if (isNaN(num)) {\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.validator.invalidNumber(key, value)\r\n        );\r\n      }\r\n      return num;\r\n    }\r\n\r\n    case \"boolean\": {\r\n      const normalized = value.trim().toLowerCase();\r\n      if (normalized === \"true\") return true;\r\n      if (normalized === \"false\") return false;\r\n      throw new EnvError(\r\n        ERROR_MESSAGES.lib.validator.invalidBoolean(key, value)\r\n      );\r\n    }\r\n\r\n    case \"enum\": {\r\n      if (!values?.length) {\r\n        throw new EnvError(ERROR_MESSAGES.lib.validator.missingEnumValues(key));\r\n      }\r\n      if (!values.includes(value)) {\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.validator.invalidEnum(key, value, values)\r\n        );\r\n      }\r\n      return value;\r\n    }\r\n\r\n    case \"email\": {\r\n      if (!isEmail(value)) {\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.validator.invalidEmail(key, value)\r\n        );\r\n      }\r\n      return value;\r\n    }\r\n\r\n    case \"url\": {\r\n      try {\r\n        new URL(value);\r\n        return value;\r\n      } catch {\r\n        throw new EnvError(ERROR_MESSAGES.lib.validator.invalidUrl(key, value));\r\n      }\r\n    }\r\n\r\n    default:\r\n      throw new EnvError(\r\n        ERROR_MESSAGES.lib.validator.unsupportedType(key, type)\r\n      );\r\n  }\r\n}\r\n\r\n/**\r\n * Validates and parses environment variables based on the provided schema.\r\n *\r\n * @param parsed - Array of parsed env key-value pairs.\r\n * @param schema - The validation schema defining expected types and requirements.\r\n * @returns Object with validated and typed environment variables.\r\n * @throws {EnvError} When required variables are missing or values are invalid.\r\n */\r\nexport function validateEnv(\r\n  parsed: { key: string; value: string }[],\r\n  schema?: EnvSchema\r\n): EnvResult {\r\n  const result: EnvResult = {};\r\n  const parsedMap = new Map(parsed.map(({ key, value }) => [key, value]));\r\n\r\n  for (const key in schema) {\r\n    const { type, required, default: defValue, values } = schema[key];\r\n    const rawValue = parsedMap.get(key);\r\n\r\n    if (rawValue !== undefined) {\r\n      // >_if value have check type\r\n      result[key] = parseValueByType(\r\n        key,\r\n        rawValue,\r\n        type,\r\n        type === \"enum\" ? values : undefined\r\n      );\r\n      continue;\r\n    }\r\n\r\n    if (defValue !== undefined) {\r\n      result[key] = parseValueByType(\r\n        key,\r\n        String(defValue),\r\n        type,\r\n        type === \"enum\" ? values : undefined\r\n      );\r\n      continue;\r\n    }\r\n\r\n    if (required) {\r\n      throw new EnvError(ERROR_MESSAGES.lib.validator.requiredMissing(key));\r\n    }\r\n  }\r\n\r\n  for (const [key, value] of parsedMap.entries()) {\r\n    if (!(key in result)) {\r\n      result[key] = value;\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { EnvError, EnvSchema } from \"../types\";\r\nimport { toBoolean } from \"../utils\";\r\n\r\ntype EnvMap = Record<string, any>;\r\n\r\nexport function resolveEnvx(\r\n  entries: { key: string; value: any }[],\r\n  schema?: EnvSchema\r\n): EnvMap {\r\n  const rawEnv: EnvMap = {};\r\n  const resolvedEnv: EnvMap = {};\r\n\r\n  for (const entry of entries) {\r\n    rawEnv[entry.key] = entry.value;\r\n  }\r\n\r\n  if (schema) {\r\n    for (const key in schema) {\r\n      if (rawEnv[key] === undefined && schema[key].default !== undefined) {\r\n        rawEnv[key] = schema[key].default;\r\n      }\r\n    }\r\n  }\r\n\r\n  const resolving = new Set<string>();\r\n\r\n  for (const key of Object.keys(rawEnv)) {\r\n    resolvedEnv[key] = resolveValue(\r\n      rawEnv[key],\r\n      rawEnv,\r\n      resolvedEnv,\r\n      resolving,\r\n      key\r\n    );\r\n  }\r\n\r\n  if (schema) {\r\n    for (const key in schema) {\r\n      if (schema[key].required && rawEnv[key] === undefined) {\r\n        // throw new Error(\r\n        //   `[envx:error] Environment variable \"${key}\" is not set and no default is defined.\\n` +\r\n        //     `→ Define \"${key}\" in your .envx file or provide a default value in the schema.`\r\n        // );\r\n\r\n        throw new EnvError(\r\n          ERROR_MESSAGES.lib.resolver.requiredMissingInResolve(key)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  return resolvedEnv;\r\n}\r\n\r\nfunction resolveValue(\r\n  rawValue: any,\r\n  rawEnv: EnvMap,\r\n  resolvedEnv: EnvMap,\r\n  resolving: Set<string>,\r\n  currentKey: string\r\n): any {\r\n  if (typeof rawValue !== \"string\") return rawValue;\r\n\r\n  if (resolving.has(currentKey)) {\r\n    // throw new Error(\r\n    //   `[envx:error] Circular dependency detected while resolving \"${currentKey}\".\\n` +\r\n    //     `→ Check for variables referencing each other in a loop.`\r\n    // );\r\n    throw new EnvError(\r\n      ERROR_MESSAGES.lib.resolver.circularDependency(currentKey)\r\n    );\r\n  }\r\n\r\n  resolving.add(currentKey);\r\n\r\n  if (isTernary(rawValue)) {\r\n    rawValue = resolveTernary(rawValue, rawEnv, resolvedEnv, resolving);\r\n  }\r\n\r\n  if (hasInterpolation(rawValue)) {\r\n    rawValue = resolveInterpolation(rawValue, rawEnv, resolvedEnv, resolving);\r\n  }\r\n\r\n  resolving.delete(currentKey);\r\n\r\n  return rawValue;\r\n}\r\n\r\nfunction hasInterpolation(str: string): boolean {\r\n  return typeof str === \"string\" && str.includes(\"${\");\r\n}\r\n\r\nfunction resolveInterpolation(\r\n  str: string,\r\n  rawEnv: EnvMap,\r\n  resolvedEnv: EnvMap,\r\n  resolving: Set<string>\r\n): string {\r\n  return str.replace(/\\${([^}]+)}/g, (_, varName) => {\r\n    const name = varName.trim();\r\n\r\n    if (resolvedEnv[name] !== undefined) return String(resolvedEnv[name]);\r\n    if (rawEnv[name] !== undefined)\r\n      return String(\r\n        resolveValue(rawEnv[name], rawEnv, resolvedEnv, resolving, name)\r\n      );\r\n\r\n    // throw new Error(\r\n    //   `[envx:error] Failed to resolve variable \"${name}\". No value found for interpolation.`\r\n    // );\r\n\r\n    throw new EnvError(ERROR_MESSAGES.lib.resolver.interpolationFailed(name));\r\n  });\r\n}\r\n\r\nfunction isTernary(str: string): boolean {\r\n  return /^\\s*\\${[^}]+}(?:\\s*(==|!=)\\s*\"[^\"]*\")?\\s*\\?\\s*\"[^\"]*\"\\s*:\\s*\"[^\"]*\"\\s*$/.test(\r\n    str.trim()\r\n  );\r\n}\r\n\r\nfunction resolveTernary(\r\n  str: string,\r\n  rawEnv: EnvMap,\r\n  resolvedEnv: EnvMap,\r\n  resolving: Set<string>\r\n): string {\r\n  const cleaned = str.trim();\r\n\r\n  const match = cleaned.match(\r\n    /^\\s*\\${([^}]+)}(?:\\s*(==|!=)\\s*\"([^\"]*)\")?\\s*\\?\\s*\"([^\"]*)\"\\s*:\\s*\"([^\"]*)\"\\s*$/\r\n  );\r\n\r\n  if (!match) return str;\r\n\r\n  const [, varName, operator, compareValue, trueVal, falseVal] = match;\r\n  const name = varName.trim();\r\n\r\n  const actualValue =\r\n    resolvedEnv[name] !== undefined\r\n      ? resolvedEnv[name]\r\n      : resolveValue(rawEnv[name], rawEnv, resolvedEnv, resolving, name);\r\n\r\n  let condition: boolean;\r\n\r\n  if (operator === \"==\" || operator === \"!=\") {\r\n    const cmp = String(actualValue) === compareValue;\r\n    condition = operator === \"==\" ? cmp : !cmp;\r\n  } else {\r\n    condition = toBoolean(actualValue);\r\n  }\r\n\r\n  return condition ? trueVal : falseVal;\r\n}\r\n","import { parseEnvx } from \"./parser\";\r\nimport { validateEnv } from \"./validator\";\r\nimport { EnvSchema, EnvResult } from \"../types\";\r\nimport { resolveEnvx } from \"./resolver\";\r\nimport { completeSchemaFromEnvx } from \"../utils\";\r\n\r\nexport function loadEnvxFromString(\r\n  content: string,\r\n  schema?: EnvSchema\r\n): { result: EnvResult; schema?: EnvSchema } {\r\n  const { env, schema: parsedSchema } = parseEnvx(content);\r\n\r\n  const fullSchema = completeSchemaFromEnvx(env, parsedSchema);\r\n\r\n  const effectiveSchema: EnvSchema | undefined = schema\r\n    ? { ...fullSchema, ...schema }\r\n    : Object.keys(fullSchema).length > 0\r\n    ? fullSchema\r\n    : undefined;\r\n\r\n  const resolved = resolveEnvx(env, effectiveSchema);\r\n\r\n  if (effectiveSchema) {\r\n    const validatedEnvs = validateEnv(\r\n      Object.entries(resolved).map(([key, value]) => ({ key, value })),\r\n      effectiveSchema\r\n    );\r\n    return { result: validatedEnvs, schema: effectiveSchema };\r\n  }\r\n\r\n  return { result: resolved, schema: effectiveSchema };\r\n}\r\n","import fs from \"fs\";\r\nimport path from \"path\";\r\nimport { EnvSchema, EnvResult, EnvError } from \"./types\";\r\nimport { loadEnvxFromString } from \"./core\";\r\n\r\nimport { ERROR_MESSAGES } from \"../shared/errors\";\r\nimport { addBuiltinEnvVarsToSchema } from \"./utils\";\r\n\r\nexport function getEnvx<T extends Record<string, any> = EnvResult>(\r\n  filePath = \".envx\",\r\n  schema?: EnvSchema\r\n): T {\r\n  const absPath = path.resolve(process.cwd(), filePath);\r\n\r\n  if (!fs.existsSync(absPath)) {\r\n    throw new EnvError(ERROR_MESSAGES.lib.fileDoesNotExist(absPath));\r\n  }\r\n\r\n  const content = fs.readFileSync(absPath, { encoding: \"utf-8\" });\r\n\r\n  const finalSchema = addBuiltinEnvVarsToSchema(schema);\r\n\r\n  const envVars = loadEnvxFromString(content, finalSchema);\r\n\r\n  return envVars.result as T;\r\n}\r\n\r\nexport function loadEnvx(filePath = \".envx\", schema?: EnvSchema): EnvResult {\r\n  const envVars = getEnvx(filePath, schema);\r\n\r\n  Object.entries(envVars).forEach(([key, value]) => {\r\n    process.env[key] = String(value);\r\n  });\r\n\r\n  return envVars;\r\n}\r\n"]}