{"version":3,"sources":["../../package.json","../../shared/constants.ts","../../shared/configLoader.ts","../../src/types/index.ts","../../shared/errors/libMessages.ts","../../shared/errors/index.ts","../../src/regex.ts","../../src/core/parser/helpers.ts","../../src/config.ts","../../src/core/parser/parser.ts","../../src/core/parser/index.ts","../../src/utils/index.ts","../../src/core/validator.ts","../../src/utils/system-env.ts","../../src/core/utils.ts","../../src/core/resolver.ts","../../src/core/cli-validator.ts","../../src/utils/createMetaJson.ts","../../cli/utils/index.ts","../../shared/logger.ts","../../cli/commands/build.ts","../../cli/commands/print.ts","../../src/utils/generateTypesFromEnvx.ts","../../cli/commands/types.ts","../../cli/commands/generate.ts","../../cli/commands/watch.ts","../../src/envx/index.ts","../../cli/commands/validate.ts","../../cli/index.ts"],"names":["package_default","META_JSON_FILE_NAME","JSON_CONFIG_FILE_NAME","DEFAULT_ENV_FILE","DEFAULT_ENVX_FILE","defaultUserConfig","isValidUserConfig","obj","loadUserConfig","jsonPath","path","existsSync","raw","readFileSync","parsed_config","err","errMsg","EnvxError","message","LIB_ERROR_MESSAGES","lineNumber","type","key","value","allowed","ERROR_MESSAGES","TERNARY_REGEX","VALID_ENUM_VALUE_REGEX","SCHEMA_BLOCK_HEADER_REGEX","VALID_SCHEMA_KEY_REGEX","isSafeString","str","isSchemaHeader","line","assertNoTrailingPunctuation","forbiddenChars","lastChar","applyDefault","target","values","num","splitKeyValue","eqIndex","stripQuotes","first","last","findCommentIndex","inSingleQuote","inDoubleQuote","i","char","handleMultilineLine","multilineKey","multilineBuffer","env","trimmedLine","quoteIndex","beforeQuote","allowedSchemaTypes","BUILTIN_SCHEMA","parseSchemaLine","getNextLine","rawKey","rawValue","descLines","currentLine","nextLine","parsed","v","parseSchemaHeader","schema","parseEnvLine","trimmedValue","parseEnvx","content","lines","currentSchemaKey","originalLine","result","commentIndex","isMultilineStart","toBoolean","_throw","checkOnly","normalized","isValid","isEmail","inferTypeFromValue","fillMissingSchemaEntries","completedSchema","parseValueByType","validateEnv","parsedMap","required","defValue","WHITELISTED_SYSTEM_KEYS","readSystemEnv","loadEnvxFromString","noValidate","parsedSchema","fullSchema","effectiveSchema","resolved","resolveEnvx","filteredResult","isTernary","cleaned","hasInterpolation","getEnvVar","name","rawEnv","resolvedEnv","resolving","depth","resolveValue","sysVal","entries","entry","currentKey","prev","resolveTernary","resolveInterpolation","_","varName","match","operator","compareValueRaw","trueValRaw","falseValRaw","actualValue","compareValue","actualValStr","condition","cmp","trueVal","falseVal","parseIfLiteral","checkRequired","hasKey","checkDeprecated","varSchema","checkType","cliValidateEnvx","errors","envMap","createMetaJson","meta","prop","createMetaJsonFile","metaFilePath","metaJsonContent","writeFileEnsureDir","escapeEnvValue","cleanValue","filePath","dir","fs","Logger","options","__publicField","level","showPrefix","showPrefixIcon","prefixText","icon","fullPrefix","blue","bold","green","red","yellow","whiteBright","config","addSpace","_prefix","msg","prefix","gray","logger","confirmOverwrite","file","resolve","rl","readline","answer","build","loggerOptions","input","output","output_relativePath","overwrite","noTypes","print","inputPath","prettyPrintJson","colorizeValue","magenta","white","indent","space","format","keys","cyan","tsTypeFromEnvxType","generateTypesFromEnvx","tsType","optionalFlag","types","outputPath","outputPath_relativePath","typesContent","generate","REGENERATE_MS","INDENT","watch","inputFile","metaPath","outputFile","typesOut","bgMagenta","runBuildAndTypes","regenerate","debounce","chokidar","readFileSafe","e","validate","valid","main","program","Command","version","inputOption","defaultVal","outputEnvOption","metaFileOption","typesOutputOption","sharedOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n  \"name\": \"typenvx\",\n  \"version\": \"0.1.12\",\n  \"description\": \"Typenv is a modern, type-safe alternative to .env files, providing advanced validation, intelligent interpolation, and conditional logic for better environment management.\",\n  \"bin\": {\n    \"typenv\": \"./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    \"example_test\": \"ts-node ./examples/index\",\n    \"build\": \"tsup\",\n    \"test\": \"jest\",\n    \"test:watch\": \"jest --watch\"\n  },\n  \"keywords\": [\n    \"typenv\",\n    \"envx\",\n    \"tenv\",\n    \"env\",\n    \"dotenv\",\n    \"env-loader\",\n    \"config\",\n    \"config-loader\",\n    \"env-validation\",\n    \"type-safe-config\",\n    \"env-types\",\n    \"environment-variables\",\n    \"typed-env\",\n    \"env-generator\"\n  ],\n  \"author\": \"trymagic\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/jest\": \"^29.5.14\",\n    \"@types/lodash.debounce\": \"^4.0.9\",\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    \"chokidar\": \"^4.0.3\",\n    \"colorette\": \"^2.0.20\",\n    \"commander\": \"^14.0.0\",\n    \"lodash.debounce\": \"^4.0.8\"\n  }\n}\n","export const META_JSON_FILE_NAME = \"envx.meta.json\";\r\nexport const JSON_CONFIG_FILE_NAME = \"envx.config.json\";\r\nexport const DEFAULT_ENV_FILE = \".env\";\r\nexport const DEFAULT_ENVX_FILE = \".envx\";\r\n","/*\r\nCONFIG FILE STRUCT and ARGUMENTS\r\n`envx.config.json`\r\n{\r\n  \"input\": \"./examples/.envx\", // Path to your .envx file\r\n  \"outputs\": {\r\n    \"env\": \"./examples/.env\", // Output .env file path\r\n    \"types\": \"./examples/envx.ts\", // Output TypeScript definition file\r\n    \"metaFilePath\": \"./examples\" // Folder where meta JSON will be placed (file name is fixed)\r\n  },\r\n  \"overwrite\": true // If true, existing .env will be overwritten without prompt\r\n}\r\n\r\n\r\ninput -> Specifies the path to the .envx file\r\noutputs -> used to specify output files\r\n  env -> Used to specify the path of the .env file to be converted from .envx\r\n  types -> to specify the path to the typescript type file to create\r\n  [NEW] metaFilePath -> It is a json file with type etc. data to be created with .env during build, only the folder pathh name can be specified.\r\noverwrite (true/false) -> If .env is present at the time of conversion and the value is true, it is overwritten directly, no questions asked \r\n\r\n*/\r\n\r\nimport path from \"path\";\r\nimport { existsSync, readFileSync } from \"fs\";\r\nimport { JSON_CONFIG_FILE_NAME } from \"./constants\";\r\n\r\nexport const defaultUserConfig = {\r\n  input: \"./.envx\",\r\n  outputs: {\r\n    env: \"./.env\",\r\n    types: \"./types/envx.ts\",\r\n    metaFilePath: \".\",\r\n  },\r\n  overwrite: false,\r\n};\r\n\r\nfunction isValidUserConfig(obj: any): obj is Partial<typeof defaultUserConfig> {\r\n  return (\r\n    obj &&\r\n    typeof obj === \"object\" &&\r\n    typeof obj.input === \"string\" &&\r\n    (obj.outputs === undefined ||\r\n      (typeof obj.outputs === \"object\" &&\r\n        (obj.outputs.env === undefined ||\r\n          typeof obj.outputs.env === \"string\") &&\r\n        (obj.outputs.types === undefined ||\r\n          typeof obj.outputs.types === \"string\") &&\r\n        (obj.outputs.metaFilePath === undefined ||\r\n          typeof obj.outputs.metaFilePath === \"string\"))) &&\r\n    (typeof obj.overwrite === \"boolean\" || obj.overwrite === undefined)\r\n  );\r\n}\r\n\r\nexport function loadUserConfig() {\r\n  const jsonPath = path.resolve(JSON_CONFIG_FILE_NAME);\r\n\r\n  if (existsSync(jsonPath)) {\r\n    const raw = readFileSync(jsonPath, \"utf-8\");\r\n\r\n    try {\r\n      const parsed_config = JSON.parse(raw);\r\n\r\n      if (isValidUserConfig(parsed_config)) {\r\n        return {\r\n          ...defaultUserConfig,\r\n          ...parsed_config,\r\n          outputs: {\r\n            ...defaultUserConfig.outputs,\r\n            ...parsed_config.outputs,\r\n          },\r\n        };\r\n      } else {\r\n        console.warn(\r\n          `[envx:info:config] Invalid config structure, falling back to default.`\r\n        );\r\n        return defaultUserConfig;\r\n      }\r\n    } catch (err) {\r\n      const errMsg = err instanceof Error ? err.message : String(err);\r\n      console.warn(\r\n        `[envx:warn:config] Could not parse ${JSON_CONFIG_FILE_NAME}: ${errMsg}`\r\n      );\r\n      return defaultUserConfig;\r\n    }\r\n  }\r\n\r\n  return defaultUserConfig;\r\n}\r\n","export type EnvxType =\r\n  | \"string\"\r\n  | \"number\"\r\n  | \"boolean\"\r\n  | \"enum\"\r\n  | \"email\"\r\n  | \"url\";\r\n\r\nexport interface EnvxVarSchema {\r\n  type: EnvxType;\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 EnvxSchema = Record<string, EnvxVarSchema>;\r\nexport type EnvxVarKey = keyof EnvxVarSchema;\r\n\r\nexport type EnvxResult = Record<string, string | number | boolean>;\r\n\r\nexport class EnvxError extends Error {\r\n  constructor(message: string) {\r\n    super(message);\r\n    this.name = \"EnvxError\";\r\n  }\r\n}\r\n\r\n// OTHERS\r\nexport type ParsedLine = { key: string; value: string };","export const LIB_ERROR_MESSAGES = {\r\n  fileDoesNotExist: (path: string) =>\r\n    `The specified file does not exist: ${path}`,\r\n\r\n  unsupportedType: (lineNumber: number, type: string) =>\r\n    `Line ${lineNumber + 1}: Unsupported type \"${type}\".`,\r\n\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  resolver: {\r\n    circularDependency: (key: string) =>\r\n      `Circular dependency detected while resolving \"${key}\".\\n→ Check for variables referencing each other in a loop.`,\r\n    interpolationFailed: (key: string, type: \"interpolation\" | \"ternary\" = \"interpolation\") =>\r\n      `Failed to resolve variable \"${key}\". No value found for ${type}.`,\r\n    requiredMissingInResolve: (key: string) =>\r\n      `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  parser: {\r\n    schemaBlockEmpty: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: Schema block name cannot be empty.`,\r\n    schemaKeyDuplicate: (lineNumber: number, key: string) =>\r\n      `Line ${\r\n        lineNumber + 1\r\n      }: Schema key \"${key}\" is already defined. Duplicate schema definitions are not allowed.`,\r\n    typeAlreadyDefined: (lineNumber: number) =>\r\n      `Line ${\r\n        lineNumber + 1\r\n      }: \"type\" is already defined for this variable. You cannot redefine it.`,\r\n    unknownSchemaProperty: (lineNumber: number, key: string) =>\r\n      `Line ${lineNumber + 1}: Unknown schema property \"${key}\".`,\r\n    missingDelimiter: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: Missing \"=\" delimiter in assignment.`,\r\n    variableNameEmpty: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: Variable name cannot be empty.`,\r\n    typeRequiredBeforeDefault: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: \"type\" must be defined before \"default\".`,\r\n    defaultMustBeNumber: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: Default value must be a valid number.`,\r\n    defaultMustBeBoolean: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: Default value must be \"true\" or \"false\".`,\r\n    defaultNotInEnum: (lineNumber: number, value: string) =>\r\n      `Line ${lineNumber + 1}: Default \"${value}\" is not in enum values.`,\r\n    invalidValuesJson: (lineNumber: number) =>\r\n      `Line ${lineNumber + 1}: \"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","export const TERNARY_REGEX = /^\\s*\\$\\{([^}]+)\\}(?:\\s*(==|!=)\\s*([\"'])?([^\"']+)\\3)?\\s*\\?\\s*([\"'])?([^\"']+?)\\5?\\s*:\\s*([\"'])?([^\"']+?)\\7?\\s*$/;\r\n\r\nexport const VALID_ENUM_VALUE_REGEX = /^[a-zA-Z0-9_\\-\\.]+$/;\r\nexport const SCHEMA_BLOCK_HEADER_REGEX = /^\\[.*\\]$/;\r\nexport const VALID_SCHEMA_KEY_REGEX = /^[a-zA-Z0-9_\\-\\.]+$/;\r\n","import { ERROR_MESSAGES } from \"../../../shared/errors\";\r\nimport { SCHEMA_BLOCK_HEADER_REGEX, VALID_ENUM_VALUE_REGEX } from \"../../regex\";\r\nimport { EnvxError, EnvxVarSchema, ParsedLine } from \"../../types\";\r\n\r\nfunction isSafeString(str: string): boolean {\r\n  return VALID_ENUM_VALUE_REGEX.test(str);\r\n}\r\n\r\nfunction isSchemaHeader(line: string): boolean {\r\n  return SCHEMA_BLOCK_HEADER_REGEX.test(line);\r\n}\r\n\r\nconst assertNoTrailingPunctuation = (raw: string, lineNumber: number) => {\r\n  const forbiddenChars = [\r\n    \",\",\r\n    \";\",\r\n    \":\",\r\n    \".\",\r\n    \"-\",\r\n    \"?\",\r\n    \"!\",\r\n    \"|\",\r\n    \"\\\\\",\r\n    \"/\",\r\n    \"(\",\r\n    \")\",\r\n    \"{\",\r\n    \"<\",\r\n    \">\",\r\n    \"`\",\r\n    \"~\",\r\n    \"=\",\r\n  ];\r\n\r\n  const lastChar = raw.trimEnd().slice(-1);\r\n\r\n  if (forbiddenChars.includes(lastChar)) {\r\n    throw new EnvxError(\r\n      `[envx:error] Line ${\r\n        lineNumber + 1\r\n      }: Value ends with a suspicious character (${lastChar}). Please remove unnecessary character  at the end.`\r\n    );\r\n  }\r\n};\r\n\r\nfunction applyDefault(\r\n  value: string,\r\n  lineNumber: number,\r\n  target: EnvxVarSchema\r\n) {\r\n  const { type, values } = target;\r\n  if (!type) {\r\n    // [THROW_ERR_MSG] => Throws error if \"type\" is missing before \"default\".\r\n    throw new EnvxError(\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 EnvxError(\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 EnvxError(\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 EnvxError(\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\nfunction splitKeyValue(line: string, lineNumber: number): [string, string] {\r\n  const eqIndex = line.indexOf(\"=\");\r\n  if (eqIndex === -1) {\r\n    // * Splits a line into key and value by first '=' character.\r\n    // * Throws error if '=' not found.\r\n    throw new EnvxError(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\r\n/**\r\n * Finds index of unquoted '#' symbol to identify inline comment start.\r\n */\r\nfunction findCommentIndex(line: string): number {\r\n  let inSingleQuote = false;\r\n  let inDoubleQuote = false;\r\n\r\n  for (let i = 0; i < line.length; i++) {\r\n    const char = line[i];\r\n    if (char === '\"' && !inSingleQuote) {\r\n      inDoubleQuote = !inDoubleQuote;\r\n    } else if (char === \"'\" && !inDoubleQuote) {\r\n      inSingleQuote = !inSingleQuote;\r\n    } else if (char === \"#\" && !inSingleQuote && !inDoubleQuote) {\r\n      return i;\r\n    }\r\n  }\r\n  return -1; // if comment dont have return `-1`\r\n}\r\n\r\n// func(handleMultilineLine) => its purpose is to handle multi-line strings\r\nfunction handleMultilineLine(\r\n  line: string,\r\n  multilineKey: string,\r\n  multilineBuffer: string[],\r\n  env: ParsedLine[]\r\n): { multilineKey: string | null; multilineBuffer: string[] } {\r\n  const trimmedLine = line.trim();\r\n  if (trimmedLine.includes('\"\"\"')) {\r\n    const quoteIndex = trimmedLine.indexOf('\"\"\"');\r\n    const beforeQuote = trimmedLine.slice(0, quoteIndex);\r\n    multilineBuffer.push(beforeQuote.trimEnd());\r\n    env.push({ key: multilineKey, value: multilineBuffer.join(\"\\n\") });\r\n    return { multilineKey: null, multilineBuffer: [] };\r\n  } else {\r\n    multilineBuffer.push(line);\r\n    return { multilineKey, multilineBuffer };\r\n  }\r\n}\r\n\r\nexport {\r\n  isSafeString,\r\n  isSchemaHeader,\r\n  assertNoTrailingPunctuation,\r\n  applyDefault,\r\n  splitKeyValue,\r\n  stripQuotes,\r\n  findCommentIndex,\r\n  handleMultilineLine,\r\n};\r\n","import { EnvxSchema, EnvxType } from \"./types\";\r\n\r\nexport const allowedSchemaTypes: Array<EnvxType> = [\r\n  \"string\",\r\n  \"number\",\r\n  \"boolean\",\r\n  \"enum\",\r\n  \"email\",\r\n  \"url\",\r\n];\r\n\r\n// [COMING_SOON_FEATURES] future features\r\nexport const BUILTIN_SCHEMA: EnvxSchema = {\r\n};\r\n","import { ERROR_MESSAGES } from \"../../../shared/errors\";\r\nimport { allowedSchemaTypes } from \"../../config\";\r\nimport { EnvxError, EnvxSchema, EnvxVarSchema } from \"../../types\";\r\n\r\nimport {\r\n  isSafeString,\r\n  assertNoTrailingPunctuation,\r\n  applyDefault,\r\n  splitKeyValue,\r\n  stripQuotes,\r\n} from \"./helpers\";\r\nimport { VALID_SCHEMA_KEY_REGEX } from \"../../regex\";\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 {EnvxVarSchema} target - Target schema object for this variable.\r\n *\r\n * @throws {EnvxError} For unknown keys or invalid value formats.\r\n */\r\nfunction parseSchemaLine(\r\n  line: string,\r\n  lineNumber: number,\r\n  target: EnvxVarSchema & { __pendingDefault?: string },\r\n  getNextLine?: () => string | null\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  if (key === \"description\" && rawValue.trim().startsWith('\"\"\"')) {\r\n    let descLines = [];\r\n    let currentLine = rawValue.trim().slice(3);\r\n\r\n    if (currentLine.endsWith('\"\"\"')) {\r\n      target.description = currentLine.slice(0, -3);\r\n      return;\r\n    }\r\n\r\n    descLines.push(currentLine);\r\n\r\n    while (getNextLine) {\r\n      const nextLine = getNextLine();\r\n      if (nextLine === null) {\r\n        throw new EnvxError(\r\n          `Line ${lineNumber + 1}: Unterminated multiline description.`\r\n        );\r\n      }\r\n      if (nextLine.endsWith('\"\"\"')) {\r\n        descLines.push(nextLine.slice(0, -3));\r\n        break;\r\n      } else {\r\n        descLines.push(nextLine);\r\n      }\r\n    }\r\n\r\n    target.description = descLines.join(\"\\n\");\r\n    return;\r\n  }\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_ERR_MSG] => Throw if \"type\" is defined more than once for a schema\r\n        throw new EnvxError(\r\n          ERROR_MESSAGES.lib.parser.typeAlreadyDefined(lineNumber)\r\n        );\r\n      }\r\n      if (!allowedSchemaTypes.includes(value)) {\r\n        throw new EnvxError(\r\n          ERROR_MESSAGES.lib.unsupportedType(lineNumber, value)\r\n        );\r\n      }\r\n      target.type = value as EnvxVarSchema[\"type\"];\r\n      break;\r\n\r\n    case \"default\":\r\n      if (target.type == \"enum\" && !target.values) {\r\n        target.__pendingDefault = value;\r\n      } else {\r\n        applyDefault(value, lineNumber, target);\r\n      }\r\n      break;\r\n\r\n    case \"values\":\r\n      try {\r\n        const parsed = JSON.parse(value);\r\n\r\n        const isValidArray =\r\n          Array.isArray(parsed) &&\r\n          parsed.length <= 25 &&\r\n          parsed.every((v) => typeof v === \"string\" && isSafeString(v));\r\n\r\n        if (!isValidArray) {\r\n          throw new EnvxError(\r\n            `[envx:error] Line ${\r\n              lineNumber + 1\r\n            }: \"values\" must be a JSON array (max 25) of safe strings. Allowed characters: a-z, A-Z, 0-9, _, -, .`\r\n          );\r\n        }\r\n\r\n        target.values = parsed;\r\n\r\n        if (target.__pendingDefault) {\r\n          applyDefault(target.__pendingDefault, lineNumber, target);\r\n          // delete (target as any).__pendingDefault;\r\n        }\r\n      } catch (e) {\r\n        // [THROW_ERR_MSG] => Throw if \"values\" is not a valid JSON array of strings\r\n        throw new EnvxError(\r\n          ERROR_MESSAGES.lib.parser.invalidValuesJson(lineNumber)\r\n        );\r\n      }\r\n      break;\r\n\r\n    // Note: 'deprecated' and 'description' are mostly for editor tooling (like VSCode extensions),\r\n    // they don't affect runtime behavior directly.\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_ERR_MSG] => Throws error if a schema property is unknown.\r\n      throw new EnvxError(\r\n        ERROR_MESSAGES.lib.parser.unknownSchemaProperty(lineNumber, key)\r\n      );\r\n  }\r\n}\r\n\r\nfunction parseSchemaHeader(\r\n  line: string,\r\n  lineNumber: number,\r\n  schema: EnvxSchema\r\n): string {\r\n  const key = line.slice(1, -1).trim();\r\n\r\n  if (!key) {\r\n    // [THROW_ERR_MSG] => Throws error if a schema block name is empty.\r\n    throw new EnvxError(ERROR_MESSAGES.lib.parser.schemaBlockEmpty(lineNumber));\r\n  }\r\n\r\n  if (!VALID_SCHEMA_KEY_REGEX.test(key)) {\r\n    throw new EnvxError(\r\n      `[envx:error] Line ${lineNumber + 1}: ` +\r\n        `Schema block name \"${key}\" contains invalid characters. ` +\r\n        `Only letters, numbers, underscore (_), hyphen (-), and dot (.) are allowed.`\r\n    );\r\n  }\r\n\r\n  if (schema[key]) {\r\n    // [THROW_ERR_MSG] => Throws error if a schema key is duplicated.\r\n    throw new EnvxError(\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\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_ERR_MSG] => Throws error if environment variable name is empty.\r\n    throw new EnvxError(\r\n      ERROR_MESSAGES.lib.parser.variableNameEmpty(lineNumber)\r\n    );\r\n  }\r\n\r\n  const trimmedValue = rawValue.trim();\r\n\r\n  if (trimmedValue.startsWith('\"\"\"')) {\r\n    if (trimmedValue.endsWith('\"\"\"') && trimmedValue.length > 6) {\r\n      return {\r\n        key,\r\n        value: trimmedValue.slice(3, -3),\r\n        isMultilineStart: false,\r\n      };\r\n    }\r\n\r\n    return {\r\n      key,\r\n      value: trimmedValue.slice(3),\r\n      isMultilineStart: true,\r\n    };\r\n  }\r\n  assertNoTrailingPunctuation(trimmedValue, lineNumber);\r\n\r\n  return {\r\n    key,\r\n    value: stripQuotes(trimmedValue),\r\n    isMultilineStart: false,\r\n  };\r\n}\r\n\r\nexport { parseEnvLine, parseSchemaHeader, parseSchemaLine };\r\n","import { EnvxError, EnvxSchema, ParsedLine } from \"../../types\";\r\n\r\nimport {\r\n  isSchemaHeader,\r\n  findCommentIndex,\r\n  handleMultilineLine,\r\n} from \"./helpers\";\r\n\r\nimport { parseEnvLine, parseSchemaHeader, parseSchemaLine } from \"./parser\";\r\n\r\ninterface ParseResult {\r\n  env: ParsedLine[];\r\n  schema: EnvxSchema;\r\n}\r\n\r\n/**\r\n * Parses a custom `.envx` file format into structured environment variables and their schema.\r\n *\r\n * This parser supports:\r\n * - Standard key=value pairs, with automatic trimming and comment removal.\r\n * - Multiline values wrapped in triple quotes (`\"\"\"`), preserving line breaks.\r\n * - Optional schema sections defined via headers like `[VARNAME]`, with key-specific metadata.\r\n *\r\n * Example `.envx` content:\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 - The raw string content of a `.envx` file to parse.\r\n * @returns {{ env: ParsedLine[], schema: EnvxSchema }} An object containing:\r\n *   - `env`: An array of parsed environment variables as `{ key, value }`.\r\n *   - `schema`: An object mapping variable names to their schema definitions.\r\n *\r\n * @throws {EnvxError} Throws if:\r\n *   - Syntax errors are encountered (e.g., malformed lines, invalid schema headers).\r\n *   - Inline comments appear improperly in schema headers.\r\n *   - Required attributes are missing from schema definitions.\r\n *\r\n * @remarks\r\n * The parser maintains state to handle multi-line strings seamlessly,\r\n * buffering lines until triple quotes close the value.\r\n * Schema parsing supports metadata like type, required flags, defaults, and deprecation.\r\n */\r\nfunction parseEnvx(content: string): ParseResult {\r\n  const lines = content.split(/\\r?\\n/);\r\n  const env: ParsedLine[] = [];\r\n  const schema: EnvxSchema = {};\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    let originalLine = lines[i];\r\n\r\n    let trimmedLine = originalLine.trim();\r\n    if (!trimmedLine || trimmedLine.startsWith(\"#\")) continue;\r\n    if (multilineKey) {\r\n      const result = handleMultilineLine(\r\n        originalLine,\r\n        multilineKey,\r\n        multilineBuffer,\r\n        env\r\n      );\r\n\r\n      multilineBuffer = result.multilineBuffer;\r\n      multilineKey = result.multilineKey;\r\n      continue;\r\n    }\r\n\r\n    // >_ Remove inline comments\r\n    const commentIndex = findCommentIndex(originalLine);\r\n    if (commentIndex !== -1) {\r\n      originalLine = originalLine.slice(0, commentIndex);\r\n    }\r\n    trimmedLine = originalLine.trim();\r\n\r\n    if (isSchemaHeader(trimmedLine)) {\r\n      if (commentIndex > -1 && commentIndex > originalLine.indexOf(\"]\")) {\r\n        throw new EnvxError(\r\n          `[envx:error] Line ${\r\n            i + 1\r\n          }: Schema header line cannot contain inline comments.`\r\n        );\r\n      }\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        i++;\r\n        if (i >= lines.length) return null;\r\n        let nextLine = lines[i].trim();\r\n        return nextLine;\r\n      });\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  if (multilineKey) {\r\n    throw new EnvxError(\r\n      `[envx:error] End of file reached but multiline value for key \"${multilineKey}\" was not closed with triple quotes (\"\"\").`\r\n    );\r\n  }\r\n  return { env, schema };\r\n}\r\n\r\nexport { parseEnvx };\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { BUILTIN_SCHEMA } from \"../config\";\r\nimport { EnvxError, EnvxSchema, EnvxVarSchema } from \"../types\";\r\nimport path from \"path\";\r\n\r\nexport function toBoolean(\r\n  value: any,\r\n  key?: string,\r\n  _throw = false,\r\n  checkOnly = false\r\n): boolean {\r\n  const normalized = typeof value === \"string\" ? value.toLowerCase() : value;\r\n\r\n  const isValid =\r\n    normalized === true ||\r\n    normalized === false ||\r\n    normalized === \"true\" ||\r\n    normalized === \"false\" ||\r\n    normalized === 1 ||\r\n    normalized === 0;\r\n\r\n  if (checkOnly) return isValid;\r\n\r\n  if (!isValid) {\r\n    if (_throw) {\r\n      throw new EnvxError(\r\n        ERROR_MESSAGES.lib.validator.invalidBoolean(key || \"\", value)\r\n      );\r\n    }\r\n    return false;\r\n  }\r\n\r\n  if (normalized === true || normalized === \"true\" || normalized === 1) {\r\n    return true;\r\n  }\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): EnvxVarSchema[\"type\"] {\r\n  const isBoolean = toBoolean(value, \"\", false, true);\r\n  if (isBoolean) 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 * Completes the environment variable schema by adding entries for variables\r\n * present in the `.envx` file but missing in the user-defined schema.\r\n *\r\n * For each variable without an explicit schema:\r\n * - Infers the type from its value (string, number, boolean).\r\n * - Marks it as optional (`required: false`).\r\n *\r\n * Also merges built-in environment variable schemas.\r\n *\r\n * This ensures every environment variable has a schema definition,\r\n * even if not explicitly declared by the user.\r\n *\r\n * @param env - List of environment variables from `.envx` with their values.\r\n * @param schema - User-defined environment schema with explicit variable definitions.\r\n * @returns A fully completed schema including built-in, user-defined, and inferred entries.\r\n */\r\nexport function fillMissingSchemaEntries(\r\n  env: { key: string; value: any }[],\r\n  schema: EnvxSchema\r\n): EnvxSchema {\r\n  const completedSchema: EnvxSchema = { ...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?: EnvxSchema): EnvxSchema {\r\n  return {\r\n    ...BUILTIN_SCHEMA,\r\n    ...(schema || {}),\r\n  };\r\n}\r\n\r\n/**\r\n * Resolves a given file path to an absolute path.\r\n *\r\n * If the input path is already absolute, it is returned as-is.\r\n * Otherwise, it is resolved relative to the current working directory.\r\n *\r\n * @param inputPath - The file path to resolve.\r\n * @returns The absolute file path.\r\n */\r\nexport function resolveEnvFilePath(inputPath: string): string {\r\n  return path.isAbsolute(inputPath)\r\n    ? inputPath\r\n    : path.resolve(process.cwd(), inputPath);\r\n}\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { EnvxSchema, EnvxResult, EnvxType, EnvxError, ParsedLine } from \"../types\";\r\nimport { isEmail, toBoolean } 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 * @throws {EnvxError} 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: EnvxType,\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 EnvxError(\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      return toBoolean(value, key, true);\r\n    }\r\n\r\n    case \"enum\": {\r\n      if (!values?.length) {\r\n        throw new EnvxError(\r\n          ERROR_MESSAGES.lib.validator.missingEnumValues(key)\r\n        );\r\n      }\r\n      if (!values.includes(value)) {\r\n        throw new EnvxError(\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 EnvxError(\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 EnvxError(\r\n          ERROR_MESSAGES.lib.validator.invalidUrl(key, value)\r\n        );\r\n      }\r\n    }\r\n\r\n    default:\r\n      throw new EnvxError(\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 * @throws {EnvxError} When required variables are missing or values are invalid.\r\n */\r\nexport function validateEnv(\r\n  parsed: ParsedLine[],\r\n  schema?: EnvxSchema\r\n): EnvxResult {\r\n  const result: EnvxResult = {};\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 EnvxError(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","export const WHITELISTED_SYSTEM_KEYS = new Set([\r\n  \"NODE_ENV\",\r\n  \"CI\",\r\n  \"VERCEL_ENV\",\r\n]);\r\n\r\nexport function readSystemEnv(key: string): string | undefined {\r\n  if (WHITELISTED_SYSTEM_KEYS.has(key)) {\r\n\r\n    // [SUPPORT_SYSTEM_ENV] NODE.JS\r\n    if (typeof process !== \"undefined\" && process.env) {\r\n      return process.env[key];\r\n    }\r\n  }\r\n  return undefined;\r\n}\r\n","import { parseEnvx } from \"./parser\";\r\nimport { validateEnv } from \"./validator\";\r\nimport { EnvxSchema, EnvxResult, ParsedLine } from \"../types\";\r\nimport { resolveEnvx } from \"./resolver\";\r\nimport { fillMissingSchemaEntries } from \"../utils\";\r\nimport { TERNARY_REGEX } from \"../regex\";\r\n\r\nexport function loadEnvxFromString(\r\n  content: string,\r\n  schema?: EnvxSchema,\r\n  noValidate?: boolean\r\n): { result: EnvxResult; schema?: EnvxSchema; rawEnv: ParsedLine[] } {\r\n  const { env, schema: parsedSchema } = parseEnvx(content);\r\n\r\n  const fullSchema = fillMissingSchemaEntries(env, parsedSchema);\r\n\r\n  const effectiveSchema: EnvxSchema | 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  /**\r\n   * Filter out variables that are not explicitly defined in the effective schema.\r\n   *\r\n   * This is important because some variables (like system environment variables\r\n   * such as NODE_ENV) may be injected at runtime (e.g., via process.env)\r\n   * and resolved correctly by `resolveEnvx`, even if the user did not define them\r\n   * in the .envx file or the schema.\r\n   *\r\n   * By filtering them out here, we ensure that only user-declared variables\r\n   * are included in the final result. This avoids polluting the generated output\r\n   * with runtime-only values that are not relevant to the declared configuration.\r\n   *\r\n   * Note: These values can still be *used* (e.g., in interpolations or ternaries),\r\n   * but they won't appear in the final output unless explicitly declared in schema.\r\n   */\r\n  const filteredResult = Object.fromEntries(\r\n    Object.entries(resolved).filter(\r\n      ([key]) => effectiveSchema?.[key] !== undefined\r\n    )\r\n  );\r\n\r\n  if (effectiveSchema && !noValidate) {\r\n    const validatedEnvs = validateEnv(\r\n      Object.entries(filteredResult).map(([key, value]) => ({ key, value })),\r\n      effectiveSchema\r\n    );\r\n\r\n    return { result: validatedEnvs, schema: effectiveSchema, rawEnv: [] };\r\n  }\r\n\r\n  return { result: filteredResult, schema: effectiveSchema, rawEnv: env };\r\n}\r\n\r\nexport function isTernary(str: string): boolean {\r\n  const cleaned = str.trim();\r\n  return TERNARY_REGEX.test(cleaned);\r\n}\r\nexport function hasInterpolation(str: string): boolean {\r\n  return typeof str === \"string\" && str.includes(\"${\");\r\n}\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { TERNARY_REGEX } from \"../regex\";\r\nimport { EnvxError, EnvxSchema } from \"../types\";\r\nimport { toBoolean } from \"../utils\";\r\nimport { readSystemEnv } from \"../utils/system-env\";\r\nimport { hasInterpolation, isTernary } from \"./utils\";\r\n\r\ntype EnvMap = Record<string, any>;\r\n\r\nfunction getEnvVar(\r\n  name: string,\r\n  rawEnv: EnvMap,\r\n  resolvedEnv: EnvMap,\r\n  resolving: Set<string>,\r\n  depth: number,\r\n  type: \"interpolation\" | \"ternary\" = \"interpolation\"\r\n): any {\r\n  if (resolvedEnv[name] !== undefined) {\r\n    return resolvedEnv[name];\r\n  } else if (rawEnv[name] !== undefined) {\r\n    return resolveValue(\r\n      rawEnv[name],\r\n      rawEnv,\r\n      resolvedEnv,\r\n      resolving,\r\n      name,\r\n      depth + 1\r\n    );\r\n  } else {\r\n    const sysVal = readSystemEnv(name);\r\n    if (sysVal !== undefined) {\r\n      resolvedEnv[name] = sysVal;\r\n      return sysVal;\r\n    }\r\n    throw new EnvxError(\r\n      ERROR_MESSAGES.lib.resolver.interpolationFailed(name, type)\r\n    );\r\n  }\r\n}\r\n\r\n/**\r\n * Resolves environment variables by evaluating interpolations and conditional expressions.\r\n *\r\n * The function:\r\n * 1. Merges raw entries with schema defaults.\r\n * 2. Recursively resolves variable references.\r\n * 3. Detects circular references and throws an error if found.\r\n * 4. Validates required variables defined in the schema.\r\n *\r\n * @param entries - List of key-value pairs representing environment variables.\r\n * @param schema - Optional schema defining defaults and required flags.\r\n * @returns A map of resolved environment variables.\r\n * @throws EnvxError if circular dependency or max resolution depth is exceeded.\r\n */\r\nexport function resolveEnvx(\r\n  entries: { key: string; value: any }[],\r\n  schema?: EnvxSchema\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      0\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_ERR_MSG] => Throws error if a required env variable is missing and no default is defined.\r\n        throw new EnvxError(\r\n          ERROR_MESSAGES.lib.resolver.requiredMissingInResolve(key)\r\n        );\r\n      }\r\n    }\r\n  }\r\n  return resolvedEnv;\r\n}\r\n\r\n/**\r\n * Resolves the value of an environment variable by replacing references\r\n * to other variables and evaluating conditional expressions.\r\n *\r\n * Stops and throws an error if a variable refers to itself directly or indirectly,\r\n * or if the resolution goes too deep to avoid infinite loops.\r\n *\r\n * @param rawValue The original value (may contain references or conditions).\r\n * @param rawEnv All raw environment variables as key-value pairs.\r\n * @param resolvedEnv Variables already resolved.\r\n * @param resolving The set of variables currently being resolved (used to detect cycles).\r\n * @param currentKey The key of the variable currently being processed.\r\n * @param depth How deep the recursion currently is (to limit max depth).\r\n * @returns The final resolved value with all references and conditions evaluated.\r\n * @throws EnvxError If circular references or maximum recursion depth are detected.\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  depth: number = 0\r\n): any {\r\n  if (typeof rawValue !== \"string\") return rawValue;\r\n\r\n  // [circularDependency] => Detects circular dependencies to prevent infinite resolution loops.\r\n  if (resolving.has(currentKey)) {\r\n    throw new EnvxError(\r\n      ERROR_MESSAGES.lib.resolver.circularDependency(currentKey)\r\n    );\r\n  }\r\n\r\n  const MAX_DEPTH = 10;\r\n  // [maxDepthExceeded] => Enforces a maximum recursion depth to prevent infinite resolution loops.\r\n  if (depth > MAX_DEPTH) {\r\n    throw new EnvxError(\r\n      `[envx:error] Max resolution depth exceeded while resolving \"${currentKey}\".`\r\n    );\r\n  }\r\n\r\n  resolving.add(currentKey);\r\n\r\n  let result = rawValue;\r\n  let prev: string;\r\n\r\n  while (typeof result === \"string\") {\r\n    prev = result;\r\n\r\n    if (isTernary(result)) {\r\n      result = resolveTernary(\r\n        result,\r\n        rawEnv,\r\n        resolvedEnv,\r\n        resolving,\r\n        depth + 1\r\n      );\r\n      continue;\r\n    }\r\n\r\n    if (hasInterpolation(result)) {\r\n      result = resolveInterpolation(\r\n        result,\r\n        rawEnv,\r\n        resolvedEnv,\r\n        resolving,\r\n        depth + 1\r\n      );\r\n      continue;\r\n    }\r\n\r\n    if (result === prev) break;\r\n  }\r\n\r\n  resolving.delete(currentKey);\r\n  return result;\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  depth: number\r\n): string {\r\n  return str.replace(/\\${([^}]+)}/g, (_, varName) => {\r\n    const name = varName.trim();\r\n\r\n    return String(getEnvVar(name, rawEnv, resolvedEnv, resolving, depth));\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  depth: number\r\n): string {\r\n  const cleaned = str?.trim();\r\n  const match = cleaned.match(TERNARY_REGEX);\r\n\r\n  if (!match) return str;\r\n\r\n  const [\r\n    ,\r\n    varName,\r\n    operator,\r\n    ,\r\n    compareValueRaw,\r\n    ,\r\n    trueValRaw,\r\n    ,\r\n    falseValRaw,\r\n  ] = match;\r\n  const name = varName?.trim();\r\n\r\n  // [DEPRACTED]\r\n  // const actualValue =\r\n  //   resolvedEnv[name] !== undefined\r\n  //     ? resolvedEnv[name]\r\n  //     : resolveValue(\r\n  //         rawEnv[name],\r\n  //         rawEnv,\r\n  //         resolvedEnv,\r\n  //         resolving,\r\n  //         name,\r\n  //         depth + 1\r\n  //       );\r\n\r\n  const actualValue = getEnvVar(\r\n    name,\r\n    rawEnv,\r\n    resolvedEnv,\r\n    resolving,\r\n    depth,\r\n    \"ternary\"\r\n  );\r\n\r\n  let compareValue = compareValueRaw?.trim();\r\n  if (\r\n    (compareValue?.startsWith('\"') && compareValue?.endsWith('\"')) ||\r\n    (compareValue?.startsWith(\"'\") && compareValue?.endsWith(\"'\"))\r\n  ) {\r\n    compareValue = compareValue.slice(1, -1);\r\n  }\r\n\r\n  const actualValStr = String(actualValue);\r\n\r\n  let condition: boolean;\r\n  // only accept operators => `==`, `!=`\r\n  if (operator === \"==\" || operator === \"!=\") {\r\n    const cmp = actualValStr === compareValue;\r\n    condition = operator === \"==\" ? cmp : !cmp;\r\n  } else {\r\n    condition = toBoolean(actualValue);\r\n  }\r\n\r\n  const trueVal = trueValRaw.trim();\r\n  const falseVal = falseValRaw.trim();\r\n  return condition ? parseIfLiteral(trueVal) : parseIfLiteral(falseVal);\r\n}\r\n\r\n// ----------------------------------- //\r\n// ---  Resolver helper functions  --- //\r\n// ----------------------------------- //\r\n\r\nfunction parseIfLiteral(value: string): any {\r\n  if (value === \"true\") return true;\r\n  if (value === \"false\") return false;\r\n  if (!isNaN(Number(value))) return Number(value);\r\n  return value;\r\n}\r\n","import { EnvxResult, EnvxSchema } from \"../types\";\r\n\r\ninterface ValidationError {\r\n  key: string;\r\n  message: string;\r\n  severity: \"error\" | \"warning\";\r\n}\r\n\r\ninterface ValidationResult {\r\n  valid: boolean;\r\n  errors: ValidationError[];\r\n}\r\n\r\nfunction checkRequired(key: string, hasKey: boolean): ValidationError | null {\r\n  if (!hasKey) {\r\n    return {\r\n      key,\r\n      message: `Missing required environment variable \"${key}\".`,\r\n      severity: \"error\",\r\n    };\r\n  }\r\n  return null;\r\n}\r\n\r\nfunction checkDeprecated(\r\n  key: string,\r\n  varSchema: any,\r\n  hasKey: boolean\r\n): ValidationError | null {\r\n  if (varSchema.deprecated && hasKey) {\r\n    return {\r\n      key,\r\n      message: `Environment variable \"${key}\" is deprecated. ${varSchema.deprecated}`,\r\n      severity: \"warning\",\r\n    };\r\n  }\r\n  return null;\r\n}\r\n\r\nfunction checkType(\r\n  key: string,\r\n  value: any,\r\n  varSchema: any\r\n): ValidationError | null {\r\n  if (value === undefined || value === null) return null;\r\n\r\n  switch (varSchema.type) {\r\n    case \"number\":\r\n      if (typeof value === \"string\" && isNaN(Number(value))) {\r\n        return {\r\n          key,\r\n          message: `Environment variable \"${key}\" should be a number.`,\r\n          severity: \"error\",\r\n        };\r\n      }\r\n      break;\r\n    case \"boolean\":\r\n      if (\r\n        value !== true &&\r\n        value !== false &&\r\n        value !== \"true\" &&\r\n        value !== \"false\"\r\n      ) {\r\n        return {\r\n          key,\r\n          message: `Environment variable \"${key}\" should be a boolean (\"true\" or \"false\").`,\r\n          severity: \"error\",\r\n        };\r\n      }\r\n      break;\r\n    case \"enum\":\r\n      if (varSchema.values && !varSchema.values.includes(String(value))) {\r\n        return {\r\n          key,\r\n          message: `Environment variable \"${key}\" has invalid value \"${value}\". Expected one of: ${varSchema.values.join(\r\n            \", \"\r\n          )}.`,\r\n          severity: \"error\",\r\n        };\r\n      }\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n  return null;\r\n}\r\n\r\nexport function cliValidateEnvx(\r\n  env: EnvxResult,\r\n  schema: EnvxSchema | undefined\r\n): ValidationResult {\r\n  const errors: ValidationError[] = [];\r\n  if (!schema) return { valid: true, errors: [] };\r\n\r\n  const envMap = new Map(Object.entries(env));\r\n\r\n  // check required, deprecated, type\r\n  for (const [key, varSchema] of Object.entries(schema)) {\r\n    const hasKey = envMap.has(key);\r\n    const value = envMap.get(key);\r\n\r\n    const checks = [\r\n      checkRequired(key, hasKey),\r\n      checkDeprecated(key, varSchema, hasKey),\r\n      checkType(key, value, varSchema),\r\n    ];\r\n\r\n    checks.forEach((err) => {\r\n      if (err) errors.push(err);\r\n    });\r\n  }\r\n\r\n  for (const key of Object.keys(env)) {\r\n    if (!schema[key]) {\r\n      errors.push({\r\n        key,\r\n        message: `Environment variable \"${key}\" is not defined in the schema.`,\r\n        severity: \"warning\",\r\n      });\r\n    }\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors,\r\n  };\r\n}\r\n","import { EnvxSchema } from \"../types\";\r\n\r\nexport function createMetaJson(schema: EnvxSchema): string {\r\n  const meta: Record<string, any> = {};\r\n\r\n  for (const key in schema) {\r\n    meta[key] = {\r\n      type: schema[key].type || \"string\",\r\n      required: schema[key].required || false,\r\n      description: schema[key].description || undefined,\r\n      values: schema[key].values || undefined,\r\n    };\r\n\r\n    // CLEAR undefined schema_KEYS\r\n    for (const prop in meta[key]) {\r\n      if (meta[key][prop] === undefined) {\r\n        delete meta[key][prop];\r\n      }\r\n    }\r\n  }\r\n\r\n  return JSON.stringify(meta, null, 2);\r\n}\r\n","import fs from \"fs/promises\";\r\nimport path from \"path\";\r\n\r\nimport { EnvxSchema } from \"../../src/types\";\r\nimport { createMetaJson } from \"../../src/utils/createMetaJson\";\r\n\r\nexport const createMetaJsonFile = async (\r\n  fullSchema: EnvxSchema,\r\n  metaFilePath: string\r\n) => {\r\n  const metaJsonContent = createMetaJson(fullSchema);\r\n  await writeFileEnsureDir(metaFilePath, metaJsonContent);\r\n};\r\n\r\nexport function escapeEnvValue(value: string): string {\r\n  const cleanValue = value.replace(/\\r?\\n/g, \"\\\\n\");\r\n  if (cleanValue.includes('\"') && !cleanValue.includes(\"'\")) {\r\n    return `'${cleanValue}'`;\r\n  } else {\r\n    return '\"' + cleanValue.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"') + '\"';\r\n  }\r\n}\r\n\r\n// func(writeFileEnsureDir) => check FOLDER have is dont have CREATE\r\nexport async function writeFileEnsureDir(filePath: string, content: string) {\r\n  const dir = path.dirname(filePath);\r\n  try {\r\n    await fs.mkdir(dir, { recursive: true });\r\n  } catch (err) {\r\n    throw new Error(\r\n      `Failed to create directory \"${dir}\" for file \"${filePath}\": ${\r\n        err instanceof Error ? err.message : String(err)\r\n      }`\r\n    );\r\n  }\r\n\r\n  try {\r\n    await fs.writeFile(filePath, content);\r\n  } catch (err) {\r\n    throw new Error(\r\n      `Failed to write file \"${filePath}\": ${\r\n        err instanceof Error ? err.message : String(err)\r\n      }`\r\n    );\r\n  }\r\n}\r\n","import { green, red, blue, bold, yellow, whiteBright, gray } from \"colorette\";\r\n\r\ntype LogLevel = \"log\" | \"info\" | \"success\" | \"error\" | \"warn\" | \"debug\";\r\n\r\ninterface LoggerOptions {\r\n  silent?: boolean;\r\n  showPrefix?: boolean;\r\n  showPrefixIcon?: boolean;\r\n}\r\n\r\ninterface LogConfig {\r\n  showPrefix?: boolean;\r\n  showPrefixIcon?: boolean;\r\n  addSpace?: string;\r\n}\r\n\r\nclass Logger {\r\n  private silent: boolean;\r\n  private showPrefix: boolean;\r\n  private showPrefixIcon: boolean;\r\n\r\n  constructor(options?: LoggerOptions) {\r\n    this.silent = options?.silent ?? false;\r\n    this.showPrefix = options?.showPrefix ?? true;\r\n    this.showPrefixIcon = options?.showPrefixIcon ?? true;\r\n  }\r\n\r\n  private prefix(\r\n    level: LogLevel,\r\n    showPrefix = true,\r\n    showPrefixIcon = true\r\n  ): string {\r\n    const prefixText = showPrefix ? `[envx:${level}]` : \"\";\r\n\r\n    // ![COMING_SOON_FEATURES] REMOVED from the code, but here for the possibility of future additions\r\n    // const SPACE = \"\\u00A0\";\r\n    // const iconsUnicode = {\r\n    //   info: \"ℹ️\",\r\n    //   success: \"✔\" + SPACE,\r\n    //   error: \"❌\" + SPACE,\r\n    //   warn: \"⚠️\" + SPACE,\r\n    //   debug: \"🐞\" + SPACE,\r\n    // };\r\n\r\n    const iconsText = {\r\n      info: \"[INFO]\",\r\n      success: \"[OK]\",\r\n      error: \"[ERR]\",\r\n      warn: \"[WARN]\",\r\n      debug: \"[DBG]\",\r\n    };\r\n    const icon = showPrefixIcon ? iconsText[level] : \"\";\r\n\r\n    const fullPrefix = `${prefixText} ${icon} `.trim();\r\n\r\n    switch (level) {\r\n      case \"info\":\r\n      case \"debug\":\r\n        return blue(bold(fullPrefix));\r\n      case \"success\":\r\n        return green(bold(fullPrefix));\r\n      case \"error\":\r\n        return red(bold(fullPrefix));\r\n      case \"warn\":\r\n        return yellow(bold(fullPrefix));\r\n      default:\r\n        return whiteBright(bold(prefixText));\r\n    }\r\n  }\r\n\r\n  log(message: string, config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const { showPrefix = false, addSpace = \"\" } = config || {};\r\n    const _prefix = showPrefix ? whiteBright(bold(\"[envx]\")) : \"\";\r\n    console.log(`${addSpace}${_prefix} ${message}`.trim());\r\n  }\r\n\r\n  info(message: string, config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const {\r\n      showPrefix = this.showPrefix,\r\n      showPrefixIcon = this.showPrefixIcon,\r\n      addSpace = \"\",\r\n    } = config || {};\r\n    console.log(\r\n      `${addSpace}${this.prefix(\"info\", showPrefix, showPrefixIcon)} ${message}`\r\n    );\r\n  }\r\n\r\n  success(message: string, config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const {\r\n      showPrefix = this.showPrefix,\r\n      showPrefixIcon = this.showPrefixIcon,\r\n      addSpace = \"\",\r\n    } = config || {};\r\n    console.log(\r\n      `${addSpace}${this.prefix(\r\n        \"success\",\r\n        showPrefix,\r\n        showPrefixIcon\r\n      )} ${message}`\r\n    );\r\n  }\r\n\r\n  error(message: string | Error, config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const {\r\n      showPrefix = this.showPrefix,\r\n      showPrefixIcon = this.showPrefixIcon,\r\n      addSpace = \"\",\r\n    } = config || {};\r\n    const msg = typeof message === \"string\" ? message : message.message;\r\n    console.error(\r\n      `${addSpace}${this.prefix(\"error\", showPrefix, showPrefixIcon)} ${msg}`\r\n    );\r\n  }\r\n\r\n  warn(message: string, config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const {\r\n      showPrefix = this.showPrefix,\r\n      showPrefixIcon = this.showPrefixIcon,\r\n      addSpace = \"\",\r\n    } = config || {};\r\n    console.warn(\r\n      `${addSpace}${this.prefix(\"warn\", showPrefix, showPrefixIcon)} ${message}`\r\n    );\r\n  }\r\n\r\n  debug(message: string, config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const {\r\n      showPrefix = this.showPrefix,\r\n      showPrefixIcon = this.showPrefixIcon,\r\n      addSpace = \"\",\r\n    } = config || {};\r\n    console.debug(\r\n      `${addSpace}${this.prefix(\r\n        \"debug\",\r\n        showPrefix,\r\n        showPrefixIcon\r\n      )} ${message}`\r\n    );\r\n  }\r\n\r\n  block(message: string, prefix = \"[envx]\", config?: LogConfig) {\r\n    if (this.silent) return;\r\n    const { showPrefix = this.showPrefix, addSpace = \"\" } = config || {};\r\n    const _prefix = showPrefix ? gray(bold(prefix)) : \"\";\r\n    console.log(`\\n${addSpace}${_prefix} ${bold(message)}`.trim());\r\n  }\r\n}\r\n\r\nexport const logger = new Logger({ silent: false });\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\nimport { META_JSON_FILE_NAME } from \"../../shared/constants\";\r\nimport {\r\n  createMetaJsonFile,\r\n  escapeEnvValue,\r\n  writeFileEnsureDir,\r\n} from \"../utils\";\r\nimport { BUILTIN_SCHEMA } from \"../../src/config\";\r\nimport { logger } from \"../../shared/logger\";\r\nimport { green } from \"colorette\";\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(\r\n  options: {\r\n    input: string;\r\n    output: string;\r\n    metaFilePath: string;\r\n    overwrite: boolean;\r\n    noTypes?: boolean;\r\n  },\r\n  loggerOptions?: {\r\n    showPrefix?: boolean;\r\n    addSpace?: string;\r\n  }\r\n) {\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  const noTypes = options?.noTypes ?? false;\r\n\r\n  if (!overwrite && existsSync(output)) {\r\n    const confirmed = await confirmOverwrite(output_relativePath);\r\n    if (!confirmed) {\r\n      logger.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}=${escapeEnvValue(String(value))}`)\r\n    .join(\"\\n\");\r\n\r\n  // >_ Create .env file\r\n  // [DEPRECATED]\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 writeFileEnsureDir(output, raw);\r\n  logger.success(\r\n    `Env file created         → ` + green(output_relativePath),\r\n    loggerOptions\r\n  );\r\n\r\n  // >_ Meta JSON\r\n  if (!noTypes) {\r\n    const metaFilePath = path.join(\r\n      options.metaFilePath || \".\",\r\n      META_JSON_FILE_NAME\r\n    );\r\n    await createMetaJsonFile(parsed.schema || BUILTIN_SCHEMA, metaFilePath);\r\n\r\n    logger.success(\r\n      `Meta JSON schema generated  → ${green(\r\n        path.relative(process.cwd(), metaFilePath)\r\n      )}`,\r\n      loggerOptions\r\n    );\r\n  }\r\n}\r\n","import fs from \"fs/promises\";\r\nimport path from \"path\";\r\nimport { loadEnvxFromString } from \"../../src/core\";\r\nimport { logger } from \"../../shared/logger\";\r\n\r\nimport { cyan, green, yellow, magenta, bold, white } from \"colorette\";\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(prettyPrintJson(parsed.result));\r\n  } catch (err) {\r\n    logger.error(`Error reading .envx file: ${err.message || err}`);\r\n    process.exit(1);\r\n  }\r\n}\r\n\r\n// <-----------------> #\r\n// <---  HELPERS  ---> #\r\n// <-----------------> #\r\n\r\nfunction colorizeValue(value: any): string {\r\n  if (value === null) return magenta(\"null\");\r\n  if (typeof value === \"string\") return green(`\"${value}\"`);\r\n  if (typeof value === \"number\") return yellow(value.toString());\r\n  if (typeof value === \"boolean\") return magenta(value.toString());\r\n  return white(String(value));\r\n}\r\n\r\nfunction prettyPrintJson(obj: any, indent = 2): string {\r\n  const space = \" \".repeat(indent);\r\n\r\n  function format(value: any, level: number): string {\r\n    if (Array.isArray(value)) {\r\n      if (value.length === 0) return \"[]\";\r\n      const items = value\r\n        .map((v) => space.repeat(level + 1) + format(v, level + 1))\r\n        .join(\",\\n\");\r\n      return `[\\n${items}\\n${space.repeat(level)}]`;\r\n    } else if (value && typeof value === \"object\") {\r\n      const keys = Object.keys(value);\r\n      if (keys.length === 0) return \"{}\";\r\n      const props = keys\r\n        .map(\r\n          (key) =>\r\n            `${space.repeat(level + 1)}${bold(cyan(`\"${key}\"`))}: ${format(\r\n              value[key],\r\n              level + 1\r\n            )}`\r\n        )\r\n        .join(\",\\n\");\r\n      return `{\\n${props}\\n${space.repeat(level)}}`;\r\n    } else {\r\n      return colorizeValue(value);\r\n    }\r\n  }\r\n\r\n  return format(obj, 0);\r\n}\r\n","import { EnvxSchema, EnvxType, EnvxVarSchema } from \"../types\";\r\n\r\nfunction tsTypeFromEnvxType(type: EnvxType, schema: EnvxVarSchema): 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 */\r\nexport function generateTypesFromEnvx(schema: EnvxSchema): string {\r\n  let lines: string[] = [];\r\n\r\n  lines.push(`// AUTO GENERATED FILE - DO NOT EDIT`);\r\n  lines.push(`//`);\r\n  lines.push(\r\n    `// This file is auto-generated from your environment schema (.envx).`\r\n  );\r\n  lines.push(\r\n    `// It defines the TypeScript interface for your environment variables,`\r\n  );\r\n  lines.push(\r\n    `// allowing you to use it with getEnvx or similar functions to get`\r\n  );\r\n  lines.push(`// fully typed and validated environment configs.`);\r\n  lines.push(`//`);\r\n  lines.push(`// Usage example:`);\r\n  lines.push(`//`);\r\n  lines.push(`// import { getEnv } from \"typenvx\";`);\r\n  lines.push(`// import type { EnvVars } from \"./envx.ts\";`);\r\n  lines.push(`//`);\r\n  lines.push(`// const env = getEnv<EnvVars>();`);\r\n  lines.push(`// console.log(env.API_URL); // typed as string`);\r\n  lines.push(`//`);\r\n  lines.push(`// NOTE:`);\r\n  lines.push(`// - Optional variables are marked with '?'.`);\r\n  lines.push(`// - Enum variables are typed as string literals.`);\r\n  lines.push(`//`);\r\n  lines.push(`// Keep this file updated by regenerating after schema changes.`);\r\n  lines.push(`\\nexport interface EnvVars {`);\r\n\r\n  for (const key in schema) {\r\n    const { type = \"string\", required } = schema[key];\r\n    const tsType = tsTypeFromEnvxType(type, schema[key]);\r\n    const optionalFlag = required ? \"\" : \"?\";\r\n    lines.push(`  ${key}${optionalFlag}: ${tsType};`);\r\n  }\r\n  \r\n  lines.push(`}\\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 { fillMissingSchemaEntries } from \"../../src/utils\";\r\nimport { createMetaJsonFile, writeFileEnsureDir } from \"../utils\";\r\nimport { META_JSON_FILE_NAME } from \"../../shared/constants\";\r\nimport { logger } from \"../../shared/logger\";\r\nimport { green } from \"colorette\";\r\n\r\nexport async function types(\r\n  options: {\r\n    input: string;\r\n    typesOutput: string;\r\n    metaFilePath: string;\r\n  },\r\n  loggerOptions?: {\r\n    showPrefix?: boolean;\r\n    addSpace?: string;\r\n  }\r\n) {\r\n  try {\r\n    const inputPath = path.resolve(process.cwd(), options.input);\r\n    const outputPath = path.resolve(process.cwd(), options.typesOutput);\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 = fillMissingSchemaEntries(env, parsedSchema);\r\n\r\n    const typesContent = generateTypesFromEnvx(fullSchema);\r\n    // [DEPRECATED] await fs.writeFile(outputPath, typesContent);\r\n    await writeFileEnsureDir(outputPath, typesContent);\r\n\r\n    const metaFilePath = path.join(\r\n      options.metaFilePath || \".\",\r\n      META_JSON_FILE_NAME\r\n    );\r\n    await createMetaJsonFile(fullSchema, metaFilePath);\r\n\r\n    logger.success(\r\n      `TypeScript types created   → ${green(outputPath_relativePath)}`,\r\n      loggerOptions\r\n    );\r\n    logger.success(\r\n      `Meta JSON schema generated   → ${green(\r\n        path.relative(process.cwd(), metaFilePath)\r\n      )}`,\r\n      loggerOptions\r\n    );\r\n  } catch (err) {\r\n    logger.error(`Error generating types: ${err.message || err}`);\r\n    process.exit(1);\r\n  }\r\n}\r\n","import { logger } from \"../../shared/logger\";\r\nimport { build } from \"./build\";\r\nimport { types } from \"./types\";\r\n\r\nexport interface GenerateOptions {\r\n  input: string;\r\n  output: string;\r\n  typesOutput: string;\r\n  metaFilePath: string;\r\n  overwrite: boolean;\r\n  noTypes?: boolean;\r\n}\r\n\r\nexport async function generate(options: GenerateOptions) {\r\n  try {\r\n    logger.block(\"⚙️  Building environment...\");\r\n    await build(options, {\r\n      showPrefix: false,\r\n      addSpace: \"       \",\r\n    });\r\n    console.log();\r\n\r\n    logger.block(\"⚙️  Generating types...\");\r\n    await types(\r\n      {\r\n        ...options,\r\n        typesOutput: options.typesOutput,\r\n      },\r\n      {\r\n        showPrefix: false,\r\n        addSpace: \"       \",\r\n      }\r\n    );\r\n    console.log();\r\n\r\n    logger.success(\"✅ Generation completed successfully.\\n\", {\r\n      showPrefixIcon: false,\r\n    });\r\n  } catch (err) {\r\n    logger.error(`Error during generation: ${err.message || err}`);\r\n  }\r\n}\r\n","import { build } from \"./build\";\r\nimport { types } from \"./types\";\r\n\r\nimport chokidar from \"chokidar\";\r\nimport debounce from \"lodash.debounce\";\r\nimport { logger } from \"../../shared/logger\";\r\nimport {\r\n  bold,\r\n  cyan,\r\n  gray,\r\n  yellow,\r\n  red,\r\n  bgMagenta,\r\n  white,\r\n  whiteBright,\r\n} from \"colorette\";\r\nimport { DEFAULT_ENV_FILE, DEFAULT_ENVX_FILE } from \"../../shared/constants\";\r\n\r\ninterface WatchOptions {\r\n  input?: string;\r\n  output?: string;\r\n  metaFilePath?: string;\r\n  typesOutput?: string;\r\n  silent?: boolean;\r\n  noTypes?: boolean;\r\n  noBuild?: boolean;\r\n}\r\n\r\nconst REGENERATE_MS = 750;\r\nconst INDENT = \"   \";\r\n\r\nexport async function watch(options: WatchOptions) {\r\n  const inputFile = options.input || DEFAULT_ENVX_FILE;\r\n  const metaPath = options.metaFilePath || \".\";\r\n  const outputFile = options.output || DEFAULT_ENV_FILE;\r\n  const typesOut = options.typesOutput || \"envx.ts\";\r\n\r\n  if (!options.silent) {\r\n    logger.block(\r\n      `${bold(cyan(\"🌱  Starting watcher\"))}\\n${gray(\r\n        `Watching for changes on ${white(bgMagenta(inputFile))}\\n`\r\n      )}`\r\n    );\r\n  }\r\n\r\n  async function runBuildAndTypes() {\r\n    if (!options.noBuild) {\r\n      if (!options.silent) logger.log(bold(cyan(\"[Build]\")));\r\n      await build(\r\n        {\r\n          input: inputFile,\r\n          output: outputFile,\r\n          metaFilePath: metaPath,\r\n          overwrite: true,\r\n        },\r\n        {\r\n          showPrefix: false,\r\n          addSpace: INDENT,\r\n        }\r\n      );\r\n    }\r\n\r\n    if (!options.noTypes) {\r\n      if (!options.silent) logger.log(bold(cyan(\"[Types]\")));\r\n      await types(\r\n        {\r\n          input: inputFile,\r\n          typesOutput: typesOut,\r\n          metaFilePath: metaPath,\r\n        },\r\n        {\r\n          showPrefix: false,\r\n          addSpace: INDENT,\r\n        }\r\n      );\r\n    }\r\n  }\r\n\r\n  try {\r\n    await runBuildAndTypes();\r\n  } catch (err) {\r\n    logger.error(\r\n      `${red(\"✖\")} Initial generation failed: ${bold(\r\n        err instanceof Error ? err.message : String(err)\r\n      )}`\r\n    );\r\n  }\r\n\r\n  const regenerate = debounce(async () => {\r\n    if (!options.silent) {\r\n      logger.log(gray(\"\\n────────────────────────────\\n\"));\r\n      logger.log(bold(yellow(\"⚡ Change detected! Regenerating...\\n\")));\r\n    }\r\n\r\n    try {\r\n      await runBuildAndTypes();\r\n      if (!options.silent) {\r\n        logger.log(\r\n          bold(whiteBright(\"\\n✅ Regeneration completed successfully!\\n\"))\r\n        );\r\n      }\r\n    } catch (err) {\r\n      logger.error(\r\n        `${red(\"✖\")} Error during regeneration: ${bold(\r\n          err instanceof Error ? err.message : String(err)\r\n        )}`\r\n      );\r\n    }\r\n  }, REGENERATE_MS);\r\n\r\n  chokidar.watch(inputFile, { ignoreInitial: true }).on(\"change\", regenerate);\r\n}\r\n","import fs from \"fs\";\r\nimport path from \"path\";\r\nimport { EnvxSchema, EnvxResult, EnvxError } from \"../types\";\r\nimport { loadEnvxFromString } from \"../core\";\r\n\r\nimport { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { resolveEnvFilePath } from \"../utils\";\r\n\r\nimport { parseEnvxMetaFile } from \"../../shared/utils\";\r\nimport { loadUserConfig } from \"../../shared/configLoader\";\r\nimport {\r\n  DEFAULT_ENV_FILE,\r\n  DEFAULT_ENVX_FILE,\r\n  META_JSON_FILE_NAME,\r\n} from \"../../shared/constants\";\r\nimport { throwIfUnknownExtUsed } from \"./fileExt\";\r\n\r\n// ---- Load user configuration ---- //\r\nconst config = loadUserConfig();\r\n\r\nfunction readFileSafe(filePath: string): string {\r\n  try {\r\n    if (!fs.existsSync(filePath)) {\r\n      throw new EnvxError(ERROR_MESSAGES.lib.fileDoesNotExist(filePath));\r\n    }\r\n    return fs.readFileSync(filePath, \"utf-8\");\r\n  } catch (e) {\r\n    const message = e instanceof Error ? e.message : String(e);\r\n    throw new EnvxError(`Failed to read file at ${filePath}: ${message}`);\r\n  }\r\n}\r\n\r\n/**\r\n * Loads and validates a pre-generated `.env` file using a corresponding schema from `.envx.meta.json`,\r\n * and returns a fully typed, type-safe environment object.\r\n *\r\n * This function is designed for **runtime environments** where you don’t want to ship `.envx` files\r\n * to production, but instead use the compiled `.env` + generated schema (`.envx.meta.json`).\r\n *\r\n * > Note: This function **does NOT** mutate `process.env`. If you need to inject variables into\r\n * > `process.env`, consider using `loadEnvx()` instead.\r\n *\r\n * ---\r\n *\r\n * ## How it works:\r\n *\r\n * - Reads the `.env` file (default: `.env` or `config.outputs.env`)\r\n * - Reads the compiled schema file (default: `.envx.meta.json` or `config.outputs.metaFilePath`)\r\n * - Validates the values based on types (string, number, boolean, enum, etc.)\r\n * - Returns a typed object matching the expected shape.\r\n *\r\n * ---\r\n *\r\n * ## Type Generation (Optional)\r\n * To benefit from static typing, run the following to generate your types:\r\n *\r\n * ```bash\r\n * npx typenv types --out types/envx.d.ts\r\n * ```\r\n *\r\n * Then use it like:\r\n *\r\n * ```ts\r\n * import { getEnv } from \"typenvx\";\r\n * import type { EnvVars } from \"../types/envx\"; // <- your generated types\r\n *\r\n * const env = getEnv<EnvVars>();\r\n * console.log(env.API_URL); // Fully typed\r\n * ```\r\n *\r\n * ---\r\n *\r\n * @template T - The type of the expected environment object. Defaults to `EnvxResult`.\r\n * @param {string} [filePath=DEFAULT_ENV_FILE] - Path to the `.env` file. Defaults to the configured or standard path.\r\n * @returns {T} A fully validated and typed environment object.\r\n *\r\n * @throws {EnvxError} If the `.env` or `.envx.meta.json` file is missing or invalid.\r\n *\r\n * @example\r\n * ```ts\r\n * // Assuming `.env` and `.envx.meta.json` exist\r\n * const env = getEnv();\r\n * console.log(env.DATABASE_URL); // Typed access\r\n * ```\r\n */\r\nfunction getEnv<T extends Record<string, any> = EnvxResult>(\r\n  filePath = DEFAULT_ENV_FILE\r\n): T {\r\n  const metaFileFullPath = path.join(\r\n    config?.outputs?.metaFilePath || \".\",\r\n    META_JSON_FILE_NAME\r\n  );\r\n  const metaFilePath = path.resolve(process.cwd(), metaFileFullPath);\r\n  const envFilePath = config?.outputs?.env || filePath;\r\n  const absPath = resolveEnvFilePath(envFilePath);\r\n\r\n  const envContent = readFileSafe(absPath);\r\n  let envxSchema: EnvxSchema;\r\n  try {\r\n    envxSchema = parseEnvxMetaFile(metaFilePath);\r\n  } catch (e) {\r\n    const message = e instanceof Error ? e.message : String(e);\r\n    throw new EnvxError(`Failed to parse meta schema file: ${message}`);\r\n  }\r\n\r\n  const envVars = loadEnvxFromString(envContent, envxSchema);\r\n\r\n  return envVars.result as T;\r\n}\r\n\r\n/**\r\n * Loads and parses a `.envx` file into a fully typed, validated environment object.\r\n *\r\n * Designed for **development**, **server-side rendering**, or any environment\r\n * where `.envx` files are available and can be parsed at runtime.\r\n *\r\n * ---\r\n *\r\n * ## What it does\r\n *\r\n * - Reads a `.envx` file (default: `.envx`)\r\n * - Optionally uses a provided schema, or reads schema inline from the file itself\r\n * - Validates and casts values based on type definitions\r\n * - Returns a fully typed result, **without modifying `process.env`**\r\n *\r\n * ---\r\n *\r\n * ## When to use\r\n *\r\n * This function is ideal when you:\r\n * - Want full `.envx` syntax support (e.g., multi-line values, inline schema)\r\n * - Don't want to pre-generate `.env` or `.envx.meta.json`\r\n * - Are working in **development** or **local SSR** environments\r\n *\r\n * ---\r\n *\r\n * ## Type-Safety\r\n *\r\n * If you want full IntelliSense and compile-time safety, you can generate types:\r\n *\r\n * ```bash\r\n * npx typenv types --out types/envx.d.ts\r\n * ```\r\n *\r\n * ```ts\r\n * import { getEnvx } from \"typenvx\";\r\n * import type { EnvVars } from \"./types/envx\";\r\n *\r\n * const env = getEnvx<EnvVars>();\r\n * console.log(env.API_URL); // fully typed\r\n * ```\r\n *\r\n * ---\r\n *\r\n * ## Future-proof Design\r\n *\r\n * `getEnvx()` serves as the **most powerful way** to handle `.envx` at runtime.\r\n * Until native `.envx` support is adopted in runtimes like Node.js or Deno,\r\n * this function provides full spec-compliant parsing with validation.\r\n *\r\n * ---\r\n *\r\n * @template T - The expected shape of the environment variables.\r\n * @param {string} [filePath=DEFAULT_ENVX_FILE] - Path to the `.envx` file.\r\n * @param {EnvxSchema} [schema] - Optional schema override (if not inline).\r\n * @returns {T} A fully validated, typed object of environment variables.\r\n *\r\n * @throws {EnvxError} If the file cannot be read, parsed, or validated.\r\n */\r\nfunction getEnvx<T extends Record<string, any> = EnvxResult>(\r\n  filePath = DEFAULT_ENVX_FILE,\r\n  schema?: EnvxSchema\r\n): T {\r\n  const envxFilePath = config?.input || filePath;\r\n  const absPath = resolveEnvFilePath(envxFilePath);\r\n  throwIfUnknownExtUsed(absPath);\r\n\r\n  const content = readFileSafe(absPath);\r\n\r\n  const envVars = loadEnvxFromString(content, schema);\r\n\r\n  return envVars.result as T;\r\n}\r\n\r\n/**\r\n * Loads environment variables from a `.envx` file, validates them against the schema,\r\n * and **injects them into `process.env`**, allowing global access within the Node.js process.\r\n *\r\n * Use this function when you want environment variables available globally in your app.\r\n *\r\n * @template T - The shape of the environment variables (defaults to EnvxResult).\r\n * @param {string} [filePath=DEFAULT_ENVX_FILE] - Path to the `.envx` file.\r\n * @param {EnvxSchema} [schema] - Optional schema for validation and type inference.\r\n * @returns {T} The loaded and injected environment variables as a typed object.\r\n *\r\n * @throws {EnvxError} Throws if `.envx` file does not exist.\r\n *\r\n * @example\r\n * ```ts\r\n * import { loadEnvx } from \"typenvx\";\r\n * loadEnvx(\"path/to/.envx\");\r\n * console.log(process.env.API_KEY);\r\n * ```\r\n */\r\nfunction loadEnvx<T extends Record<string, any> = EnvxResult>(\r\n  filePath = DEFAULT_ENVX_FILE,\r\n  schema?: EnvxSchema\r\n): T {\r\n  const envVars = getEnvx<T>(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 as T;\r\n}\r\n\r\nexport { getEnv, getEnvx, loadEnvx, readFileSafe };\r\n","import path from \"path\";\r\nimport { cliValidateEnvx, loadEnvxFromString } from \"../../src/core\";\r\nimport { readFileSafe } from \"../../src/envx\";\r\nimport { logger } from \"../../shared/logger\";\r\n\r\ninterface ValidateOptions {\r\n  input: string;\r\n}\r\n\r\nexport async function validate(options: ValidateOptions) {\r\n  const inputPath = path.resolve(process.cwd(), options.input);\r\n\r\n  try {\r\n    const content = await readFileSafe(inputPath);\r\n    const { result, schema } = loadEnvxFromString(content, {}, true);\r\n    const { valid, errors } = cliValidateEnvx(result, schema);\r\n\r\n    if (valid) {\r\n      logger.success(\"✅ No validation errors found in .envx file.\");\r\n    } else {\r\n      console.log(errors);\r\n      process.exit(1); // fail with non-zero code\r\n    }\r\n  } catch (err) {\r\n    logger.error(`❌ Failed to validate .envx file: ${err.message || err}`);\r\n    process.exit(1);\r\n  }\r\n}","#!/usr/bin/env node\r\nimport { Command } from \"commander\";\r\nimport pkg from \"../package.json\";\r\nimport { loadUserConfig } from \"../shared/configLoader\";\r\n\r\nimport { build, print, types, generate, watch, validate } from \"./commands\";\r\nimport { GenerateOptions } from \"./commands\";\r\n\r\nasync function main() {\r\n  const program = new Command();\r\n  const config = loadUserConfig();\r\n  const version = pkg.version;\r\n\r\n  const inputOption = (defaultVal: string): [string, string, string] => [\r\n    \"-i, --input <file>\",\r\n    \"Input .envx file\",\r\n    defaultVal,\r\n  ];\r\n\r\n  const outputEnvOption = (defaultVal: string): [string, string, string] => [\r\n    \"-o, --output <file>\",\r\n    \"Output .env file\",\r\n    defaultVal,\r\n  ];\r\n\r\n  const metaFileOption = (defaultVal: string): [string, string, string] => [\r\n    \"-m, --metaFilePath <file>\",\r\n    \"Output metaJsonFile Folder Path (envx.meta.json)\",\r\n    defaultVal,\r\n  ];\r\n\r\n  const typesOutputOption = (defaultVal: string): [string, string, string] => [\r\n    \"-t, --typesOutput <file>\",\r\n    \"Output .ts file\",\r\n    defaultVal,\r\n  ];\r\n\r\n  program\r\n    .name(\"typenv\")\r\n    .description(\"Enhanced CLI for .envx - Manage .envx files effortlessly\")\r\n    .version(version);\r\n\r\n  program\r\n    .command(\"build\")\r\n    .description(\r\n      \"Create a standard .env file by compiling your .envx configuration\"\r\n    )\r\n    .option(...inputOption(config.input || \".envx\"))\r\n    .option(...outputEnvOption(config.outputs?.env || \".env\"))\r\n    .option(...metaFileOption(config.outputs?.metaFilePath || \".\"))\r\n    .option(\r\n      \"--overwrite\",\r\n      \"Overwrite output files if they exist\",\r\n      config.overwrite || false\r\n    )\r\n    .action(build);\r\n\r\n  program\r\n    .command(\"generate\")\r\n    .alias(\"gen\")\r\n    .description(\"Generate TypeScript types and build .env file from .envx\")\r\n    .option(...inputOption(config.input || \".envx\"))\r\n    .option(...outputEnvOption(config.outputs?.env || \".env\"))\r\n    .option(...typesOutputOption(config.outputs?.types || \"types/envx.ts\"))\r\n    .option(...metaFileOption(config.outputs?.metaFilePath || \".\"))\r\n    .option(\r\n      \"--overwrite\",\r\n      \"Overwrite output files if they exist\",\r\n      config.overwrite || false\r\n    )\r\n    .action(async (options: GenerateOptions) => {\r\n      const sharedOptions = {\r\n        ...options,\r\n        noTypes: true,\r\n      };\r\n      return await generate(sharedOptions);\r\n    });\r\n\r\n  program\r\n    .command(\"watch\")\r\n    .description(\r\n      \"Watch .envx file and automatically regenerate .env and types on changes\"\r\n    )\r\n    .option(...inputOption(config.input || \".envx\"))\r\n    .option(...outputEnvOption(config.outputs?.env || \".env\"))\r\n    .option(...typesOutputOption(config.outputs?.types || \"types/envx.ts\"))\r\n    .option(...metaFileOption(config.outputs?.metaFilePath || \".\"))\r\n    .option(\"--no-types\", \"Skip generating TypeScript types during watch\")\r\n    .option(\"--no-build\", \"Skip generating .env file during watch\")\r\n    .option(\"--silent\", \"Suppress console output while watching\")\r\n    .action(watch);\r\n\r\n  program\r\n    .command(\"validate\")\r\n    .description(\r\n      \"Validate your .envx file against its schema to catch errors early\"\r\n    )\r\n    .option(...inputOption(config.input || \".envx\"))\r\n    .action(validate);\r\n\r\n  program\r\n    .command(\"print\")\r\n    .description(\"Print the parsed .envx file content as JSON for inspection\")\r\n    .option(...inputOption(config.input || \".envx\"))\r\n    .action(print);\r\n\r\n  program\r\n    .command(\"types\")\r\n    .description(\r\n      \"Generate TypeScript definitions based on your schema for type safety\"\r\n    )\r\n    .option(...inputOption(config.input || \".envx\"))\r\n    .option(...typesOutputOption(config.outputs?.types || \"types/envx.ts\"))\r\n    .option(...metaFileOption(config.outputs?.metaFilePath || \".\"))\r\n    .action(types);\r\n\r\n  await program.parseAsync();\r\n}\r\n\r\nmain();\r\n"]}