UNPKG

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