{"version":3,"sources":["../../package.json","../../cli/config.ts","../../shared/errors/libMessages.ts","../../shared/errors/index.ts","../../src/config.ts","../../src/types/index.ts","../../src/core/parser.ts","../../src/utils/index.ts","../../src/core/validator.ts","../../src/core/resolver.ts","../../src/core/index.ts","../../cli/commands/build.ts","../../cli/commands/check.ts","../../cli/commands/print.ts","../../src/utils/generateTypesFromEnvx.ts","../../cli/commands/types.ts","../../cli/index.ts"],"names":["package_default","loadUserConfig","fullPath","path","existsSync","config","pathToFileURL","LIB_ERROR_MESSAGES","lineNumber","type","key","value","allowed","ERROR_MESSAGES","allowedSchemaTypes","BUILTIN_SCHEMA","EnvError","message","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","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","confirmOverwrite","file","resolve","rl","readline","answer","build","options","input","output","output_relativePath","fs","raw","dir","check","inputPath","err","print","tsTypeFromEnvType","generateTypesFromEnvx","tsType","optionalFlag","types","outputPath","outputPath_relativePath","typesContent","main","program","Command"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n  \"name\": \"dotenvxjs\",\n  \"version\": \"0.0.102\",\n  \"description\": \"dotenvx is the official Node.js library for .envx files, offering advanced type validation, intelligent interpolation, and conditional logic. It makes environment management safer, more dynamic, and easier to maintain.\",\n  \"bin\": {\n    \"dotenvx\": \"./dist/cli/index.js\"\n  },\n  \"main\": \"./dist/src/index.js\",\n  \"module\": \"./dist/src/index.mjs\",\n  \"types\": \"./dist/src/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"scripts\": {\n    \"dev\": \"tsup --watch\",\n    \"build\": \"tsup\",\n    \"test\": \"jest\",\n    \"test:watch\": \"jest --watch\"\n  },\n  \"keywords\": [\n    \"dotenv\",\n    \"env\",\n    \"environment\",\n    \"config\",\n    \"configuration\",\n    \"environment-variables\",\n    \"env-loader\",\n    \"type-validation\",\n    \"interpolation\",\n    \"conditional\",\n    \"typescript\",\n    \"nodejs\",\n    \"env-parser\",\n    \"dotenvx\",\n    \"safe-config\",\n    \"config-validation\"\n  ],\n  \"author\": \"trymagic\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/jest\": \"^29.5.14\",\n    \"@types/node\": \"^22.15.29\",\n    \"jest\": \"^29.7.0\",\n    \"ts-jest\": \"^29.3.4\",\n    \"tsup\": \"^8.5.0\",\n    \"typescript\": \"^5.8.3\"\n  },\n  \"dependencies\": {\n    \"commander\": \"^14.0.0\"\n  }\n}\n","import path from \"path\";\r\nimport { pathToFileURL } from \"url\";\r\nimport { existsSync } from \"fs\";\r\n\r\nexport async function loadUserConfig() {\r\n  const file = \"envx.config.js\";\r\n  const fullPath = path.resolve(process.cwd(), file);\r\n  if (existsSync(fullPath)) {\r\n    const url = pathToFileURL(fullPath).href;\r\n    const config = await import(url);\r\n    return config.default || config;\r\n  }\r\n  return {};\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","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","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/promises\";\r\nimport path from \"path\";\r\nimport { existsSync } from \"fs\";\r\nimport readline from \"readline\";\r\nimport { loadEnvxFromString } from \"../../src/core\";\r\n\r\nasync function confirmOverwrite(file: string): Promise<boolean> {\r\n  return new Promise((resolve) => {\r\n    const rl = readline.createInterface({\r\n      input: process.stdin,\r\n      output: process.stdout,\r\n      terminal: true,\r\n    });\r\n    rl.question(`⚠️ \"${file}\" exists. Overwrite? (y/N): `, (answer) => {\r\n      rl.close();\r\n      resolve(answer.trim().toLowerCase() === \"y\");\r\n    });\r\n  });\r\n}\r\n\r\nexport async function build(options: any) {\r\n  const input = path.resolve(process.cwd(), options.input);\r\n  const output = path.resolve(process.cwd(), options.output);\r\n  const output_relativePath = path.relative(process.cwd(), output);\r\n  const overwrite = options.overwrite;\r\n\r\n  if (!overwrite && existsSync(output)) {\r\n    const confirmed = await confirmOverwrite(output_relativePath);\r\n    if (!confirmed) {\r\n      console.log(\"[envx:info] ✖ Operation cancelled.\");\r\n      process.exit(0);\r\n    }\r\n  }\r\n\r\n  const content = await fs.readFile(input, \"utf-8\");\r\n  const parsed = loadEnvxFromString(content);\r\n\r\n  const raw = Object.entries(parsed.result)\r\n    .map(([key, value]) => `${key}=\"${String(value).replace(/\\n/g, \"\\\\n\")}\"`)\r\n    .join(\"\\n\");\r\n\r\n  const dir = path.dirname(output);\r\n  if (!existsSync(dir)) {\r\n    await fs.mkdir(dir, { recursive: true });\r\n  }\r\n\r\n  await fs.writeFile(output, raw);\r\n  console.log(\r\n    `[envx:success] ✔ .env file generated at: ${output_relativePath}`\r\n  );\r\n}\r\n","import fs from \"fs/promises\";\r\nimport path from \"path\";\r\nimport { loadEnvxFromString } from \"../../src/core\";\r\n\r\nexport async function check(options: { input: string }) {\r\n  try {\r\n    const inputPath = path.resolve(process.cwd(), options.input);\r\n    const content = await fs.readFile(inputPath, \"utf-8\");\r\n\r\n    const parsed = loadEnvxFromString(content);\r\n\r\n\r\n    console.log(\"[envx:success] ✔ No validation errors found in .envx file.\");\r\n  } catch (err: any) {\r\n    console.error(\"[envx:error] ✖ Error reading or validating .envx:\", err.message || err);\r\n    process.exit(1);\r\n  }\r\n}\r\n","import fs from \"fs/promises\";\r\nimport path from \"path\";\r\nimport { loadEnvxFromString } from \"../../src/core\";\r\n\r\nexport async function print(options: { input: string }) {\r\n  try {\r\n    const inputPath = path.resolve(process.cwd(), options.input);\r\n    const content = await fs.readFile(inputPath, \"utf-8\");\r\n\r\n    const parsed = loadEnvxFromString(content);\r\n    console.log(JSON.stringify(parsed.result, null, 2));\r\n  } catch (err: any) {\r\n    console.error(\"[envx:error] ✖ Error reading .envx file:\", err.message || err);\r\n    process.exit(1);\r\n  }\r\n}\r\n","import { EnvSchema, EnvType, EnvVarSchema } from \"../types\";\r\n\r\nfunction tsTypeFromEnvType(type: EnvType, schema: EnvVarSchema): string {\r\n  switch (type) {\r\n    case \"string\":\r\n    case \"email\":\r\n    case \"url\":\r\n      return \"string\";\r\n    case \"number\":\r\n      return \"number\";\r\n    case \"boolean\":\r\n      return \"boolean\";\r\n    case \"enum\":\r\n      return schema.values && schema.values.length > 1\r\n        ? schema.values.map((v) => `\"${v}\"`).join(\" | \")\r\n        : \"string\";\r\n    default:\r\n      return \"any\";\r\n  }\r\n}\r\n\r\n/**\r\n * creates a typescript interface for each variable according to the schema structure, which is important because it can be used with getEnvx\r\n * @param schema EnvSchema\r\n * @returns typescript interface\r\n */\r\nexport function generateTypesFromEnvx(schema: EnvSchema): string {\r\n  let lines: string[] = [];\r\n\r\n  lines.push(`// AUTO GENERATED FILE - DO NOT EDIT\\n`);\r\n  lines.push(`export interface Envx {`);\r\n\r\n  for (const key in schema) {\r\n    const { type = \"string\", required } = schema[key];\r\n\r\n    const tsType = tsTypeFromEnvType(type, schema[key]);\r\n\r\n    const optionalFlag = required ? \"\" : \"?\";\r\n\r\n    lines.push(`  ${key}${optionalFlag}: ${tsType};`);\r\n  }\r\n\r\n  lines.push(`}\\n`);\r\n\r\n  return lines.join(\"\\n\");\r\n}\r\n","import fs from \"fs/promises\";\r\nimport path from \"path\";\r\n\r\nimport { generateTypesFromEnvx } from \"../../src/utils/generateTypesFromEnvx\";\r\nimport { parseEnvx } from \"../../src/core/parser\";\r\nimport { completeSchemaFromEnvx } from \"../../src/utils\";\r\n\r\nexport async function types(options: { input: string; output: string }) {\r\n  try {\r\n    const inputPath = path.resolve(process.cwd(), options.input);\r\n    const outputPath = path.resolve(process.cwd(), options.output);\r\n     const outputPath_relativePath = path.relative(process.cwd(), outputPath);\r\n\r\n    const content = await fs.readFile(inputPath, \"utf-8\");\r\n    const { env, schema: parsedSchema } = parseEnvx(content);\r\n\r\n    const fullSchema = completeSchemaFromEnvx(env, parsedSchema);\r\n\r\n    const typesContent = generateTypesFromEnvx(fullSchema);\r\n    await fs.writeFile(outputPath, typesContent);\r\n\r\n    console.log(`[envx:sucess] ✔ TypeScript definitions generated at: ${outputPath_relativePath}`);\r\n  } catch (err: any) {\r\n    console.error(\"[envx:error] ✖ Error generating types:\", err.message || err);\r\n    process.exit(1);\r\n  }\r\n}\r\n","#!/usr/bin/env node\r\nimport { Command } from \"commander\";\r\nimport pkg from \"../package.json\";\r\nimport { loadUserConfig } from \"./config\";\r\n\r\nimport { build } from \"./commands/build\";\r\nimport { check } from \"./commands/check\";\r\nimport { print } from \"./commands/print\";\r\nimport { types } from \"./commands/types\";\r\n\r\nasync function main() {\r\n  const program = new Command();\r\n  const config = await loadUserConfig();\r\n\r\n  program\r\n    .name(\"dotenvx\")\r\n    .description(\"Enhanced CLI for .envx - Manage .envx files effortlessly\")\r\n    .version(pkg.version);\r\n\r\n  program\r\n    .command(\"build\")\r\n    .description(\"Build .env file from .envx\")\r\n    .option(\"-i, --input <file>\", \"Input .envx file\", config.input || \".envx\")\r\n    .option(\r\n      \"-o, --output <file>\",\r\n      \"Output .env file\",\r\n      config.output?.env || \".env\"\r\n    )\r\n    .option(\"--overwrite\", \"Overwrite output\", config.overwrite || false)\r\n    .action(build);\r\n\r\n  program\r\n    .command(\"check\")\r\n    .description(\"Validate .envx against its schema\")\r\n    .option(\"-i, --input <file>\", \"Input .envx file\", config.input || \".envx\")\r\n    .action(check);\r\n\r\n  program\r\n    .command(\"print\")\r\n    .description(\"Print parsed .envx as JSON\")\r\n    .option(\"-i, --input <file>\", \"Input .envx file\", config.input || \".envx\")\r\n    .action(print);\r\n\r\n  program\r\n    .command(\"types\")\r\n    .description(\"Generate TypeScript definitions from schema\")\r\n    .option(\"-i, --input <file>\", \"Input .envx file\", config.input || \".envx\")\r\n    .option(\r\n      \"-o, --output <file>\",\r\n      \"Output .ts file\",\r\n      config.output?.types || \"envx.ts\"\r\n    )\r\n    .action(types);\r\n\r\n  program.parse();\r\n}\r\n\r\nmain();\r\n"]}