dotenvxjs
Version:
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.
1 lines • 61.7 kB
Source Map (JSON)
{"version":3,"sources":["../../src/types/index.ts","../../shared/errors/libMessages.ts","../../shared/errors/index.ts","../../src/config.ts","../../src/core/parser.ts","../../src/utils/index.ts","../../src/core/validator.ts","../../src/core/resolver.ts","../../src/core/index.ts","../../shared/constants.ts","../../shared/utils/index.ts","../../shared/configLoader.ts","../../src/index.ts"],"names":["EnvxError","message","LIB_ERROR_MESSAGES","path","lineNumber","type","key","value","allowed","ERROR_MESSAGES","allowedSchemaTypes","BUILTIN_SCHEMA","parseEnvx","content","lines","env","schema","currentSchemaKey","multilineKey","multilineBuffer","i","originalLine","commentIndex","trimmedLine","isSchemaHeader","parseSchemaHeader","parseSchemaLine","isMultilineStart","parseEnvLine","line","target","getNextLine","rawKey","rawValue","splitKeyValue","stripQuotes","descLines","currentLine","nextLine","applyDefault","parsed","v","values","num","trimmedValue","eqIndex","first","last","toBoolean","isEmail","inferTypeFromValue","completeSchemaFromEnvx","completedSchema","addBuiltinEnvVarsToSchema","parseValueByType","normalized","validateEnv","result","parsedMap","required","defValue","resolveEnvx","entries","rawEnv","resolvedEnv","entry","resolving","resolveValue","currentKey","isTernary","resolveTernary","hasInterpolation","resolveInterpolation","str","_","varName","name","match","operator","compareValue","trueVal","falseVal","actualValue","condition","cmp","loadEnvxFromString","parsedSchema","fullSchema","effectiveSchema","resolved","META_JSON_FILE_NAME","DEFAULT_ENV_FILE","DEFAULT_ENVX_FILE","parseEnvxMetaFile","filePath","resolvedPath","fs","raw","err","defaultUserConfig","loadUserConfig","jsConfigFileName","jsonPath","jsPath","existsSync","readFileSync","__require","config","getEnv","metaFileFullPath","metaFilePath","envFilePath","absPath","envContent","envSchema","getEnvx","envxFilePath","finalSchema","loadEnvx","envVars"],"mappings":"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","file":"index.mjs","sourcesContent":["export type EnvType =\r\n | \"string\"\r\n | \"number\"\r\n | \"boolean\"\r\n | \"enum\"\r\n | \"email\"\r\n | \"url\";\r\n\r\nexport interface EnvVarSchema {\r\n type: EnvType;\r\n required?: boolean;\r\n default?: string | number | boolean;\r\n values?: Array<string>;\r\n deprecated?: boolean;\r\n description?: string;\r\n}\r\n\r\nexport type EnvSchema = Record<string, EnvVarSchema>;\r\n\r\nexport type EnvResult = Record<string, string | number | boolean>;\r\n\r\nexport class EnvxError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"EnvxError\";\r\n }\r\n}\r\n","// export const LIB_ERROR_MESSAGES = {\r\n// // --- [lib] index.ts error messages --- //\r\n// fileDoesNotExist: (path: string) => {\r\n// return `[envx:error] The specified file does not exist: ${path}`;\r\n// },\r\n\r\n// unsupportedType: (lineNumber: number, type: string) =>\r\n// `[envx:error] Line ${lineNumber + 1}: Unsupported type \"${type}\".`,\r\n\r\n// // --- [lib] validator.ts error messages --- //\r\n// validator: {\r\n// invalidNumber: (key: string, value: string) =>\r\n// `Invalid value for \"${key}\": expected a number but received \"${value}\".`,\r\n// invalidBoolean: (key: string, value: string) =>\r\n// `Invalid boolean for \"${key}\": expected \"true\" or \"false\" but received \"${value}\".`,\r\n// missingEnumValues: (key: string) =>\r\n// `Enum values are not defined for \"${key}\". Please specify allowed values.`,\r\n// invalidEnum: (key: string, value: string, allowed: string[]) =>\r\n// `Invalid enum value for \"${key}\": expected one of [${allowed.join(\r\n// \", \"\r\n// )}] but received \"${value}\".`,\r\n// invalidEmail: (key: string, value: string) =>\r\n// `Invalid email format for \"${key}\": received \"${value}\". Please provide a valid email address.`,\r\n// invalidUrl: (key: string, value: string) =>\r\n// `Invalid URL format for \"${key}\": received \"${value}\". Please provide a valid URL.`,\r\n// unsupportedType: (key: string, type: string) =>\r\n// `Unsupported type \"${type}\" specified for \"${key}\".`,\r\n// requiredMissing: (key: string) =>\r\n// `Required environment variable \"${key}\" is missing and has no default value.`,\r\n// },\r\n\r\n// // --- [lib] resolver.ts error messages --- //\r\n// resolver: {\r\n// circularDependency: (key: string) =>\r\n// `[envx:error] Circular dependency detected while resolving \"${key}\".\\n→ Check for variables referencing each other in a loop.`,\r\n// interpolationFailed: (key: string) =>\r\n// `[envx:error] Failed to resolve variable \"${key}\". No value found for interpolation.`,\r\n// requiredMissingInResolve: (key: string) =>\r\n// `[envx:error] Environment variable \"${key}\" is not set and no default is defined.\\n→ Define \"${key}\" in your .envx file or provide a default value in the schema.`,\r\n// },\r\n\r\n// // --- [lib] parser.ts error messages --- //\r\n// parser: {\r\n// schemaBlockEmpty: (lineNumber: number) =>\r\n// `[envx:error] Line ${lineNumber + 1}: Schema block name cannot be empty.`,\r\n\r\n// schemaKeyDuplicate: (lineNumber: number, key: string) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: Schema key \"${key}\" is already defined. Duplicate schema definitions are not allowed.`,\r\n\r\n// typeAlreadyDefined: (lineNumber: number) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: \"type\" is already defined for this variable. You cannot redefine it.`,\r\n\r\n// unknownSchemaProperty: (lineNumber: number, key: string) =>\r\n// `[envx:error] Line ${lineNumber + 1}: Unknown schema property \"${key}\".`,\r\n\r\n// missingDelimiter: (lineNumber: number) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: Missing \"=\" delimiter in assignment.`,\r\n\r\n// variableNameEmpty: (lineNumber: number) =>\r\n// `[envx:error] Line ${lineNumber + 1}: Variable name cannot be empty.`,\r\n\r\n// typeRequiredBeforeDefault: (lineNumber: number) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: \"type\" must be defined before \"default\".`,\r\n\r\n// defaultMustBeNumber: (lineNumber: number) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: Default value must be a valid number.`,\r\n\r\n// defaultMustBeBoolean: (lineNumber: number) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: Default value must be \"true\" or \"false\".`,\r\n\r\n// defaultNotInEnum: (lineNumber: number, value: string) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: Default \"${value}\" is not in enum values.`,\r\n\r\n// invalidValuesJson: (lineNumber: number) =>\r\n// `[envx:error] Line ${\r\n// lineNumber + 1\r\n// }: \"values\" must be a valid JSON string array.`,\r\n// },\r\n// };\r\n\r\n// errors.ts\r\n\r\nexport 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) =>\r\n `Failed to resolve variable \"${key}\". No value found for interpolation.`,\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","import { EnvSchema, EnvType } from \"./types\";\r\n\r\nexport const allowedSchemaTypes: Array<EnvType> = [\r\n \"string\",\r\n \"number\",\r\n \"boolean\",\r\n \"enum\",\r\n \"email\",\r\n \"url\",\r\n];\r\n\r\nexport const BUILTIN_SCHEMA: EnvSchema = {\r\n // NODE_ENV: {\r\n // type: \"enum\",\r\n // values: [\"development\", \"production\", \"test\"],\r\n // default: \"development\",\r\n // required: true,\r\n // description: \"Specifies the Node.js environment\",\r\n // },\r\n // TZ: {\r\n // type: \"string\",\r\n // default: \"UTC\",\r\n // required: false,\r\n // description: \"Timezone for Node.js process (default is UTC)\",\r\n // },\r\n};\r\n","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { allowedSchemaTypes } from \"../config\";\r\nimport { EnvxError, 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 {EnvxError} 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 let originalLine = lines[i];\r\n\r\n // is Have Comment\r\n const commentIndex = originalLine.indexOf(\"#\");\r\n if (commentIndex != -1) {\r\n originalLine = originalLine.slice(0, commentIndex);\r\n }\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 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 // yorumları temizleme, boşlukları ayıklama burada olabilir\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 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\r\n if (!key) {\r\n // throw new EnvxError(\r\n // `[envx:error] Line ${lineNumber + 1}: Schema block name cannot be empty.`\r\n // );\r\n throw new EnvxError(ERROR_MESSAGES.lib.parser.schemaBlockEmpty(lineNumber));\r\n }\r\n\r\n // >_ Key can only be alphanumeric, underscore or hyphen\r\n if (!/^[A-Za-z0-9_-]+$/.test(key)) {\r\n throw new EnvxError(\r\n `[envx:error] Line ${\r\n lineNumber + 1\r\n }: Schema block name \"${key}\" contains invalid characters. Only letters, numbers, underscore and hyphen are allowed.`\r\n );\r\n }\r\n\r\n if (schema[key]) {\r\n // throw new EnvxError(\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 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\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 {EnvxError} 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 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); // \"\"\" sonrası satır içeriği\r\n\r\n // Eğer satır aynı zamanda \"\"\" ile bitiyorsa, tek satırlık multiline\r\n if (currentLine.endsWith('\"\"\"')) {\r\n currentLine = currentLine.slice(0, -3);\r\n target.description = currentLine;\r\n return;\r\n }\r\n\r\n descLines.push(currentLine);\r\n\r\n // getNextLine fonksiyonu verilmişse, multiline devam eden satırları oku\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 new EnvxError(\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 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 // `[envx:error] Line ${lineNumber + 1}: Unsupported type \"${value}\".`\r\n // );\r\n\r\n throw new EnvxError(\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 EnvxError(\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 EnvxError(\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 EnvxError(\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 EnvxError(\r\n ERROR_MESSAGES.lib.parser.unknownSchemaProperty(lineNumber, key)\r\n );\r\n // throw new EnvxError(\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 EnvxError(\r\n // `[envx:error] Line ${\r\n // lineNumber + 1\r\n // }: \"type\" must be defined before \"default\".`\r\n // );\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 // `[envx:error] Line ${\r\n // lineNumber + 1\r\n // }: Default value must be a valid number.`\r\n // );\r\n\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 // `[envx:error] Line ${\r\n // lineNumber + 1\r\n // }: Default value must be \"true\" or \"false\".`\r\n // );\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 // `[envx:error] Line ${\r\n // lineNumber + 1\r\n // }: Default \"${value}\" is not in enum values.`\r\n // );\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\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 {EnvxError} 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 EnvxError(\r\n // `[envx:error] Line ${lineNumber + 1}: Variable name cannot be empty.`\r\n // );\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 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 EnvxError(\r\n // `[envx:error] Line ${\r\n // lineNumber + 1\r\n // }: Missing \"=\" delimiter in assignment.`\r\n // );\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","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, EnvxError } 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 {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: 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 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 const normalized = value.trim().toLowerCase();\r\n if (normalized === \"true\") return true;\r\n if (normalized === \"false\") return false;\r\n throw new EnvxError(\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 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 *\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 {EnvxError} 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 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","import { ERROR_MESSAGES } from \"../../shared/errors\";\r\nimport { EnvxError, 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 EnvxError(\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 EnvxError(\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 cons