envapt 2.1.1 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +138 -32
- package/dist/index.cjs +32 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +33 -1
- package/dist/index.d.ts +33 -1
- package/dist/index.mjs +32 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Error.ts","../src/ListOfBuiltInConverters.ts","../src/Validators.ts","../src/core/EnvapterBase.ts","../src/BuiltInConverters.ts","../src/Parser.ts","../src/core/EnvironmentMethods.ts","../src/core/PrimitiveMethods.ts","../src/core/AdvancedMethods.ts","../src/Envapter.ts","../src/Envapt.ts","../src/Converters.ts"],"names":["EnvaptErrorCodes","config","fs","parsed","Environment","Converters"],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable no-magic-numbers */\nexport enum EnvaptErrorCodes {\n // Fallback related errors\n /** Thrown when an invalid fallback value is provided */\n InvalidFallback = 101,\n /** Thrown when fallback value type doesn't match expected converter type */\n InvalidFallbackType = 102,\n /** Thrown when array fallback contains elements of wrong type */\n ArrayFallbackElementTypeMismatch = 103,\n /** Thrown when fallback type doesn't match the specified converter */\n FallbackConverterTypeMismatch = 104,\n\n // Converter related errors\n /** Thrown when invalid array converter configuration is provided */\n InvalidArrayConverterType = 201,\n /** Thrown when an invalid built-in converter is specified */\n InvalidBuiltInConverter = 202,\n /** Thrown when a custom converter is not a function */\n InvalidCustomConverter = 203,\n /** Thrown when converter type is not recognized */\n InvalidConverterType = 204,\n /** Thrown when primitive type coercion on fallback value fails */\n PrimitiveCoercionFailed = 205,\n\n // Other errors\n /** Thrown when delimiter is missing in array converter configuration */\n // This doesn't happen because 203 is thrown when object without delimiter is passed\n MissingDelimiter = 301,\n /** Thrown when invalid user-defined configuration is provided */\n InvalidUserDefinedConfig = 302,\n /** Thrown when specified environment files don't exist */\n EnvFilesNotFound = 303\n}\n\n/**\n * Custom error for better DX and debugging when using Envapt.\n *\n * @example\n * ```ts\n * throw new EnvaptError(EnvaptErrorCode.InvalidFallback, \"Invalid fallback value provided for environment variable.\");\n * ```\n */\nexport class EnvaptError extends Error {\n public readonly code: EnvaptErrorCodes;\n\n constructor(code: EnvaptErrorCodes, message: string) {\n super(message);\n this.name = `EnvaptError [${code}]`;\n this.code = code;\n\n Error.captureStackTrace(this, EnvaptError);\n }\n}\n","import type { ConverterValue } from './Converters';\nimport type { JsonValue } from './Types';\n\n/**\n * List of built-in converters for Envapt.\n * @internal\n */\nexport const ListOfBuiltInConverters: ConverterValue[] = [\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'symbol',\n 'integer',\n 'float',\n 'json',\n 'array',\n 'url',\n 'regexp',\n 'date',\n 'time'\n] as const;\n\n/**\n * Type checking functions for built-in converter return types.\n * @internal\n */\nexport const BuiltInConverterTypeCheckers: Record<ConverterValue, (value: unknown) => boolean> = {\n string: (value: unknown): value is string => typeof value === 'string',\n number: (value: unknown): value is number => typeof value === 'number',\n boolean: (value: unknown): value is boolean => typeof value === 'boolean',\n bigint: (value: unknown): value is bigint => typeof value === 'bigint',\n symbol: (value: unknown): value is symbol => typeof value === 'symbol',\n integer: (value: unknown): value is number => typeof value === 'number' && Number.isInteger(value),\n float: (value: unknown): value is number => typeof value === 'number',\n json: (value: unknown): value is JsonValue => {\n try {\n JSON.parse(JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n },\n array: (value: unknown): value is unknown[] => Array.isArray(value),\n url: (value: unknown): value is URL => value instanceof URL,\n regexp: (value: unknown): value is RegExp => value instanceof RegExp,\n date: (value: unknown): value is Date => value instanceof Date,\n time: (value: unknown): value is number => typeof value === 'number'\n};\n","import fs from 'node:fs';\n\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { ListOfBuiltInConverters, BuiltInConverterTypeCheckers } from './ListOfBuiltInConverters';\n\nimport type {\n ArrayConverter,\n BuiltInConverter,\n ConverterFunction,\n EnvaptConverter,\n PermittedDotenvConfig,\n ValidArrayConverterBuiltInType\n} from './Types';\n\nexport class Validator {\n /**\n * Check if a value is a built-in converter type\n */\n static isBuiltInConverter<TFallback>(value: EnvaptConverter<TFallback>): value is BuiltInConverter {\n if (typeof value === 'string') return ListOfBuiltInConverters.includes(value);\n return false;\n }\n\n /**\n * Check if a value is an ArrayConverter configuration object\n */\n static isArrayConverter(value: unknown): value is ArrayConverter {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'delimiter' in value &&\n typeof (value as ArrayConverter).delimiter === 'string'\n );\n }\n\n /**\n * Check if a value is a valid ArrayConverter type\n */\n static isValidArrayConverterType(value: unknown): value is ValidArrayConverterBuiltInType {\n if (typeof value !== 'string') return false;\n\n const invalidTypes = ['array', 'json', 'regexp'];\n\n if (invalidTypes.includes(value)) return false;\n const validTypes: ValidArrayConverterBuiltInType[] = ListOfBuiltInConverters.filter(\n (type): type is ValidArrayConverterBuiltInType => !invalidTypes.includes(type)\n );\n\n return validTypes.includes(value as ValidArrayConverterBuiltInType);\n }\n\n static customConvertor<TFallback>(\n converter: EnvaptConverter<TFallback>\n ): asserts converter is ConverterFunction<TFallback> {\n if (typeof converter !== 'function') {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidCustomConverter,\n `Custom converter must be a function, got ${typeof converter}.`\n );\n }\n }\n\n /**\n * Validate ArrayConverter configuration with runtime checks\n */\n static arrayConverter(value: unknown): asserts value is ArrayConverter {\n if (!this.isArrayConverter(value)) {\n throw new EnvaptError(EnvaptErrorCodes.MissingDelimiter, 'Must have delimiter property');\n }\n\n if (value.type !== undefined && !this.isValidArrayConverterType(value.type)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidArrayConverterType,\n `\"${value.type as string}\" is not a valid converter type`\n );\n }\n }\n\n /**\n * Validate that a string is a valid built-in converter type\n */\n static builtInConverter(value: unknown): asserts value is BuiltInConverter {\n if (typeof value !== 'string') {\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Expected string, got ${typeof value}`);\n }\n\n if (!ListOfBuiltInConverters.includes(value as BuiltInConverter)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidBuiltInConverter,\n `\"${value}\" is not a valid converter type. Valid types are: ${ListOfBuiltInConverters.join(',')}`\n );\n }\n }\n\n /**\n * Validate that fallback type matches the converter's return type for built-in converters\n */\n static validateBuiltInConverterFallback(converter: BuiltInConverter, fallback: unknown): void {\n const typeChecker = BuiltInConverterTypeCheckers[converter];\n if (!typeChecker(fallback)) {\n throw new EnvaptError(\n EnvaptErrorCodes.FallbackConverterTypeMismatch,\n `Fallback type does not match converter \"${converter}\". Expected ${converter} compatible type.`\n );\n }\n }\n\n /**\n * Validate that all elements in an array fallback have consistent types\n */\n static validateArrayFallbackElementTypes(fallback: unknown[]): void {\n if (fallback.length === 0) return; // Empty array is valid\n\n const firstElementType = typeof fallback[0];\n const hasInconsistentTypes = fallback.some((element, index) => {\n if (index === 0) return false; // Skip first element\n return typeof element !== firstElementType;\n });\n\n if (hasInconsistentTypes) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayFallbackElementTypeMismatch,\n `All elements in array fallback must have the same type. Found mixed types.`\n );\n }\n }\n\n /**\n * Validate that array converter type matches fallback element types\n */\n static validateArrayConverterElementTypeMatch(converterType: string, fallback: unknown[]): void {\n if (fallback.length === 0) return; // Empty array is valid\n\n const firstElement = fallback[0];\n const typeChecker = BuiltInConverterTypeCheckers[converterType as keyof typeof BuiltInConverterTypeCheckers];\n\n if (!typeChecker(firstElement)) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayFallbackElementTypeMismatch,\n `Array converter type \"${converterType}\" does not match fallback element type. Expected ${converterType} compatible elements.`\n );\n }\n }\n\n /**\n * Check if a value is a primitive constructor\n */\n static isPrimitiveConstructor(\n value: unknown\n ): value is typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol {\n return value === String || value === Number || value === Boolean || value === BigInt || value === Symbol;\n }\n\n /**\n * Safely coerce a fallback value using a primitive constructor\n */\n static coercePrimitiveFallback<CoercedType>(\n converter: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol,\n fallback: unknown\n ): CoercedType {\n // Check if fallback is already the correct type and return as-is\n if (this.isCorrectPrimitiveType(converter, fallback)) return fallback as CoercedType;\n\n // Otherwise, coerce the value\n return this.performPrimitiveCoercion<CoercedType>(converter, fallback);\n }\n\n /**\n * Check if fallback is already the correct primitive type\n */\n private static isCorrectPrimitiveType(\n converter: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol,\n fallback: unknown\n ): boolean {\n if (converter === String && typeof fallback === 'string') return true;\n if (converter === Number && typeof fallback === 'number') return true;\n if (converter === Boolean && typeof fallback === 'boolean') return true;\n if (converter === BigInt && typeof fallback === 'bigint') return true;\n if (converter === Symbol && typeof fallback === 'symbol') return true;\n return false;\n }\n\n /**\n * Perform the actual primitive coercion\n */\n private static performPrimitiveCoercion<CoercedType>(\n converter: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol,\n fallback: unknown\n ): CoercedType {\n try {\n if (converter === String) return String(fallback) as CoercedType;\n if (converter === Number) return Number(fallback) as CoercedType;\n if (converter === Boolean) return Boolean(fallback) as CoercedType;\n if (converter === BigInt) return BigInt(fallback as string | number | bigint) as CoercedType;\n if (converter === Symbol) return Symbol(fallback as string | number) as CoercedType;\n } catch (error) {\n throw new EnvaptError(\n EnvaptErrorCodes.PrimitiveCoercionFailed,\n `Failed to coerce fallback value using ${converter.name}: ${(error as Error).message}`\n );\n }\n\n // This should never happen but TypeScript needs it\n throw new EnvaptError(EnvaptErrorCodes.PrimitiveCoercionFailed, `Unknown primitive converter: ${converter.name}`);\n }\n\n /**\n * Make sure the user hasn't provided prohibited options in their dotenv config\n */\n static validateDotenvConfig(config: Record<string, unknown>): config is PermittedDotenvConfig {\n if ('path' in config || 'processEnv' in config) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidUserDefinedConfig,\n 'Custom dotenvConfig should not include \"path\" or \"processEnv\" options. Those are managed by Envapter.'\n );\n }\n\n const validKeys = new Set(['encoding', 'quiet', 'debug', 'override', 'DOTENV_KEY']);\n const invalidKeys = Object.keys(config).filter((key) => !validKeys.has(key));\n\n if (invalidKeys.length > 0) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidUserDefinedConfig,\n `Invalid dotenvConfig options: ${invalidKeys.join(', ')}. Allowed options: ${Array.from(validKeys).join(', ')}`\n );\n }\n\n return true;\n }\n\n /**\n * Check if each provided path resolves to an env file by trying to access it\n */\n static validateEnvFilesExist(paths: string[]): void {\n const missing = paths.filter((p) => {\n try {\n fs.accessSync(p, fs.constants.F_OK);\n return false;\n } catch {\n return true;\n }\n });\n\n if (missing.length > 0) {\n throw new EnvaptError(\n EnvaptErrorCodes.EnvFilesNotFound,\n `Environment file not found at path: ${missing.join(', ')}`\n );\n }\n }\n}\n","import { config } from 'dotenv';\n\nimport { Validator } from '../Validators';\n\nimport type { PermittedDotenvConfig } from '../Types';\n\n/**\n * Base cache for environment variables and computed values\n * @internal\n */\nexport const EnvaptCache = new Map<string, unknown>();\n\n/**\n * Base class for environment variable management\n * Handles configuration, caching, and basic environment loading\n * @internal\n */\nexport abstract class EnvapterBase {\n protected static _envPaths: string[] = ['.env']; // default path\n protected static _userDefinedDotenvConfig: PermittedDotenvConfig = { quiet: true };\n\n /**\n * Set custom .env file paths. Accepts either a single path or array of paths.\n * Setting new paths clears the cache and reloads environment variables.\n */\n static set envPaths(paths: string[] | string) {\n const newPaths = Array.isArray(paths) ? paths : [paths];\n Validator.validateEnvFilesExist(newPaths);\n\n this._envPaths = newPaths;\n this.refreshCache();\n }\n\n /**\n * Get currently configured .env file paths\n */\n static get envPaths(): string[] {\n return this._envPaths;\n }\n\n /**\n * Set custom dotenv configuration options.\n */\n static set dotenvConfig(config: PermittedDotenvConfig) {\n Validator.validateDotenvConfig(config);\n this._userDefinedDotenvConfig = config;\n this.refreshCache();\n }\n\n /**\n * Get current dotenv configuration options\n */\n static get dotenvConfig(): PermittedDotenvConfig {\n return this._userDefinedDotenvConfig;\n }\n\n protected static refreshCache(): void {\n EnvaptCache.clear();\n void this.config; // reload config to repopulate cache\n }\n\n protected static get config(): Map<string, unknown> {\n if (EnvaptCache.size === 0) {\n // create isolated environment object to avoid mutating process.env\n const isolatedEnv: Record<string, string> = { ...(process.env as Record<string, string>) };\n\n try {\n // load _envPath file from custom path into isolated environment object\n config({ path: this._envPaths, processEnv: isolatedEnv, ...this._userDefinedDotenvConfig });\n } catch {\n // do nothing\n }\n // populate the Map with global environment variables\n for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);\n }\n\n return EnvaptCache;\n }\n\n /**\n * Get raw environment variable value without parsing or conversion.\n */\n getRaw(key: string): string | undefined {\n return EnvapterBase.config.get(key) as string | undefined;\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport type {\n ArrayConverter,\n BuiltInConverter,\n BuiltInConverterFunction,\n JsonValue,\n MapOfConverterFunctions,\n TimeUnit\n} from './Types';\n\n/**\n * Built-in converter implementations\n * @internal\n */\nexport class BuiltInConverters {\n static string(raw: string, fallback?: string): string | undefined {\n return String(raw) || fallback;\n }\n\n static number(raw: string, fallback?: number): number | undefined {\n const parsed = Number(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static boolean(raw: string, fallback?: boolean): boolean | undefined {\n const lower = raw.toLowerCase().trim();\n\n const truthyValues = ['1', 'yes', 'true', 'on'];\n const falsyValues = ['0', 'no', 'false', 'off'];\n\n if (truthyValues.includes(lower)) return true;\n if (falsyValues.includes(lower)) return false;\n return fallback;\n }\n\n static bigint(raw: string, fallback?: bigint): bigint | undefined {\n try {\n return BigInt(raw);\n } catch {\n return fallback;\n }\n }\n\n static symbol(raw: string, fallback?: symbol): symbol | undefined {\n return raw ? Symbol(raw) : fallback;\n }\n\n static integer(raw: string, fallback?: number): number | undefined {\n const parsed = parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string, fallback?: number): number | undefined {\n const parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static json(raw: string, fallback?: JsonValue): JsonValue | undefined {\n try {\n return JSON.parse(raw) as JsonValue;\n } catch {\n return fallback;\n }\n }\n\n static array(raw: string, fallback?: string[], delimiter = ','): string[] | undefined {\n if (raw.trim() === '') return [];\n const arr = raw\n .split(delimiter)\n .map((item) => item.trim())\n .filter(Boolean);\n return arr.length ? arr : fallback;\n }\n\n static url(raw: string, fallback?: URL): URL | undefined {\n try {\n return new URL(raw);\n } catch {\n return fallback;\n }\n }\n\n static regexp(raw: string, fallback?: RegExp): RegExp | undefined {\n try {\n // Handle flags if provided in format: /pattern/flags\n const match = raw.match(/^\\/(.+)\\/([gimsuvy]*)$/);\n if (match) return new RegExp(match[1] as string, match[2]);\n\n return new RegExp(raw);\n } catch {\n return fallback;\n }\n }\n\n static date(raw: string, fallback?: Date): Date | undefined {\n // Try parsing as timestamp first (if it's all digits)\n if (/^\\d+$/.test(raw)) {\n const timestamp = parseInt(raw, 10);\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n // Try parsing as regular date string\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string, fallback?: number): number | undefined {\n // eslint-disable-next-line security/detect-unsafe-regex\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (!match) return fallback;\n\n const [, numStr, capturedUnit] = match;\n if (!numStr) return fallback;\n\n const value = Number.parseFloat(numStr);\n if (Number.isNaN(value)) return fallback;\n\n const unit: TimeUnit = (capturedUnit ?? 'ms') as TimeUnit;\n\n const SECONDS_TO_MS = 1000;\n const SECONDS_PER_MINUTE = 60;\n const MINUTES_PER_HOUR = 60;\n const MINUTES_TO_MS = SECONDS_PER_MINUTE * SECONDS_TO_MS;\n const HOURS_TO_MS = MINUTES_PER_HOUR * MINUTES_TO_MS;\n\n if (unit === 'ms') return value;\n if (unit === 's') return value * SECONDS_TO_MS;\n if (unit === 'm') return value * MINUTES_TO_MS;\n return value * HOURS_TO_MS;\n }\n\n /**\n * Process array with custom converter config\n */\n static processArrayConverter(raw: string, fallback: unknown, config: ArrayConverter): unknown[] | undefined {\n if (raw.trim() === '') return [];\n\n const items = raw\n .split(config.delimiter)\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n // If no items after split, return fallback if provided\n if (!items.length) return fallback ? (fallback as unknown[]) : undefined;\n\n // If no type specified, return as string array\n const type = config.type;\n if (!type) return items;\n\n // Convert each item using the specified type\n const converter = BuiltInConverters.getConverter(type);\n return items.map((item) => {\n const converted = converter(item, undefined);\n return converted ?? item;\n });\n }\n\n /**\n * Get the converter function for a built-in converter type\n */\n static getConverter<TFallback extends BuiltInConverter>(type: TFallback): BuiltInConverterFunction {\n const converters: MapOfConverterFunctions = {\n string: BuiltInConverters.string,\n number: BuiltInConverters.number,\n boolean: BuiltInConverters.boolean,\n integer: BuiltInConverters.integer,\n bigint: BuiltInConverters.bigint,\n symbol: BuiltInConverters.symbol,\n float: BuiltInConverters.float,\n json: BuiltInConverters.json,\n array: BuiltInConverters.array,\n url: BuiltInConverters.url,\n regexp: BuiltInConverters.regexp,\n date: BuiltInConverters.date,\n time: BuiltInConverters.time\n } as const;\n\n return converters[type];\n }\n}\n","import { BuiltInConverters } from './BuiltInConverters';\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { Validator } from './Validators';\n\nimport type { EnvaptConverter, PrimitiveConstructor, ArrayConverter, BuiltInConverter } from './Types';\n\n/**\n * @internal\n */\nexport interface EnvapterService {\n getRaw(key: string): string | undefined;\n get(key: string, def?: string): string | undefined;\n getNumber(key: string, def?: number): number | undefined;\n getBoolean(key: string, def?: boolean): boolean | undefined;\n}\n\n/**\n * Parser class for handling environment variable template resolution and type conversion\n * @internal\n */\nexport class Parser {\n private readonly TEMPLATE_REGEX = /\\${\\w*}/g;\n\n constructor(private readonly envService: EnvapterService) {}\n\n /**\n * Resolve template variables in a string while handling circular references and missing variables\n * @internal\n */\n resolveTemplate(key: string, value: string, stack = new Set<string>()): string {\n stack.add(key);\n\n const out = value.replace(this.TEMPLATE_REGEX, (template) => {\n const variable = template.slice(2, -1);\n\n if (stack.has(variable)) return template; // cycle, preserve\n\n const raw = this.envService.getRaw(variable);\n if (!raw || raw === '') return template; // missing or empty, preserve\n\n const resolved = this.resolveTemplate(variable, raw, new Set(stack));\n\n // If resolution still references the current key, skip replacement (indirect cycle)\n if (resolved.includes(`\\${${key}}`)) return template;\n\n // If nothing changed (unresolved placeholders stayed), also preserve original template\n if (resolved === raw && /\\$\\{[^}]*\\}/.test(resolved)) return template;\n\n return resolved;\n });\n\n stack.delete(key);\n return out;\n }\n\n convertValue<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n converter: EnvaptConverter<TFallback> | undefined,\n hasFallback: boolean\n ): TFallback | null | undefined {\n const resolvedConverter = this.resolveConverter(converter, fallback);\n const processedFallback = this.processFallbackForConverter(resolvedConverter, fallback);\n\n // Handle different converter types\n if (Validator.isArrayConverter(resolvedConverter)) {\n return this.processArrayConverter(key, processedFallback, resolvedConverter, hasFallback);\n }\n\n if (Validator.isPrimitiveConstructor(resolvedConverter)) {\n const stringConverter = this.convertPrimitiveToString(resolvedConverter);\n return this.processBuiltInConverter(key, processedFallback, stringConverter, hasFallback, true);\n }\n\n if (Validator.isBuiltInConverter(resolvedConverter)) {\n return this.processBuiltInConverter(key, processedFallback, resolvedConverter, hasFallback, false);\n }\n\n return this.processCustomConverter(key, processedFallback, resolvedConverter, hasFallback);\n }\n\n private processFallbackForConverter<TFallback>(\n converter: EnvaptConverter<TFallback>,\n fallback: TFallback | undefined\n ): TFallback | undefined {\n // For primitive constructors, coerce the fallback to match the converter\n if (Validator.isPrimitiveConstructor(converter) && fallback !== undefined) {\n return Validator.coercePrimitiveFallback<TFallback>(converter, fallback);\n }\n return fallback;\n }\n\n private convertPrimitiveToString(primitiveConstructor: PrimitiveConstructor): BuiltInConverter {\n if (primitiveConstructor === String) return 'string';\n if (primitiveConstructor === Number) return 'number';\n if (primitiveConstructor === Boolean) return 'boolean';\n if (primitiveConstructor === BigInt) return 'bigint';\n if (primitiveConstructor === Symbol) return 'symbol';\n\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Unknown primitive constructor`);\n }\n\n private processBuiltInConverter<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n resolvedConverter: BuiltInConverter,\n hasFallback: boolean,\n wasOriginallyConstructor: boolean\n ): TFallback | null | undefined {\n // Validate the built-in converter at runtime\n Validator.builtInConverter(resolvedConverter);\n\n // Validate fallback type matches converter for built-in converters\n // Only apply strict validation if this wasn't originally a constructor\n if (hasFallback && fallback !== undefined && !wasOriginallyConstructor) {\n Validator.validateBuiltInConverterFallback(resolvedConverter, fallback);\n\n // Special handling for 'array' converter - check array element consistency\n if (resolvedConverter === 'array' && Array.isArray(fallback)) {\n Validator.validateArrayFallbackElementTypes(fallback);\n }\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n\n // If converter failed (returned undefined) and no fallback was provided, return null\n if (result === undefined && !hasFallback) return null;\n\n return result as TFallback;\n }\n\n private processArrayConverter<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n resolvedConverter: ArrayConverter,\n hasFallback: boolean\n ): TFallback | null | undefined {\n // Validate the resolvedConverter at runtime and assert that it is indeed an ArrayConverter\n Validator.arrayConverter(resolvedConverter);\n\n // Validate fallback type if a fallback is provided\n if (hasFallback && fallback !== undefined && !Array.isArray(fallback)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayConverter requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n // Additional validations for array converter fallbacks\n if (hasFallback && Array.isArray(fallback)) {\n // Validate that all elements in fallback array have consistent types\n Validator.validateArrayFallbackElementTypes(fallback);\n\n // For array converters with a type, validate that converter type matches fallback elements\n if (resolvedConverter.type) {\n Validator.validateArrayConverterElementTypeMatch(resolvedConverter.type, fallback);\n }\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const result = BuiltInConverters.processArrayConverter(parsed, fallback, resolvedConverter);\n\n // If converter failed (returned undefined) and no fallback was provided, return null\n if (result === undefined && !hasFallback) return null;\n\n return result as TFallback;\n }\n\n private processCustomConverter<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n resolvedConverter: EnvaptConverter<TFallback>,\n hasFallback: boolean\n ): TFallback | null | undefined {\n Validator.customConvertor(resolvedConverter);\n\n // Custom converter function\n const raw = this.envService.get(key, undefined);\n\n // If no fallback provided and no value found, return null\n // If explicit undefined fallback and no value found, return undefined\n\n if (raw === undefined) return hasFallback ? fallback : null;\n\n return resolvedConverter(raw, fallback);\n }\n\n private resolveConverter<TFallback>(\n converter: EnvaptConverter<TFallback> | undefined,\n fallback: TFallback | undefined\n ): EnvaptConverter<TFallback> {\n // User provided explicit converter. Use it\n if (converter) return converter;\n\n // Auto-detect type from fallback using typeof\n const fallbackType = typeof fallback;\n if (fallbackType === 'number') return 'number';\n if (fallbackType === 'boolean') return 'boolean';\n if (fallbackType === 'bigint') return 'bigint';\n if (fallbackType === 'symbol') return 'symbol';\n return 'string';\n }\n}\n","import { EnvapterBase } from './EnvapterBase';\n\n/**\n * Environment types supported by Envapter\n * @public\n */\nexport enum Environment {\n Development,\n Staging,\n Production\n}\n\n/**\n * Mixin for environment detection and checking methods\n * @internal\n */\nexport class EnvironmentMethods extends EnvapterBase {\n protected static _environment: Environment | undefined;\n\n protected static determineEnvironment(env?: string | Environment): void {\n const environment =\n env ?? this.getRawValue('ENVIRONMENT', this.getRawValue('ENV', this.getRawValue('NODE_ENV', 'development')));\n\n if (typeof environment === 'string') {\n this._environment =\n environment.toLowerCase() === 'production'\n ? Environment.Production\n : environment === 'staging'\n ? Environment.Staging\n : Environment.Development;\n } else {\n this._environment = environment;\n }\n }\n\n private static getRawValue(key: string, fallback: string): string {\n return (this.config.get(key) as string) || fallback;\n }\n\n /**\n * Get the current application environment\n */\n static get environment(): Environment {\n if (this._environment === undefined) {\n this.determineEnvironment();\n }\n return this._environment as Environment;\n }\n\n /**\n * Set the application environment. Accepts either Environment enum or string value.\n */\n static set environment(env: string | Environment) {\n this.determineEnvironment(env);\n }\n\n /**\n * @see {@link EnvironmentMethods.environment}\n */\n get environment(): Environment {\n return EnvironmentMethods.environment;\n }\n\n /**\n * @see {@link EnvironmentMethods.environment}\n */\n set environment(env: string | Environment) {\n EnvironmentMethods.determineEnvironment(env);\n }\n\n /**\n * Check if the current environment is production\n */\n static get isProduction(): boolean {\n return this.environment === Environment.Production;\n }\n\n /**\n * @see {@link EnvironmentMethods.isProduction}\n */\n get isProduction(): boolean {\n return EnvironmentMethods.environment === Environment.Production;\n }\n\n /**\n * Check if the current environment is staging\n */\n static get isStaging(): boolean {\n return this.environment === Environment.Staging;\n }\n\n /**\n * @see {@link EnvironmentMethods.isStaging}\n */\n get isStaging(): boolean {\n return EnvironmentMethods.environment === Environment.Staging;\n }\n\n /**\n * Check if the current environment is development\n */\n static get isDevelopment(): boolean {\n return this.environment === Environment.Development;\n }\n\n /**\n * @see {@link EnvironmentMethods.isDevelopment}\n */\n get isDevelopment(): boolean {\n return EnvironmentMethods.environment === Environment.Development;\n }\n\n protected static override refreshCache(): void {\n super.refreshCache();\n this._environment = undefined; // re-evaluate environment on next access\n }\n}\n","import { BuiltInConverters } from '../BuiltInConverters';\nimport { Parser, type EnvapterService } from '../Parser';\nimport { EnvironmentMethods } from './EnvironmentMethods';\n\nimport type { ConditionalReturn } from '../Types';\n\n/**\n * @internal\n */\nenum Primitive {\n String,\n Number,\n Boolean,\n BigInt,\n Symbol\n}\n\n/**\n * Mixin for primitive environment variable getter methods\n * @internal\n */\nexport class PrimitiveMethods extends EnvironmentMethods implements EnvapterService {\n protected static readonly parser = new Parser(new PrimitiveMethods());\n\n private static _get<EnvVarReturnType, DefaultType extends EnvVarReturnType | undefined = undefined>(\n key: string,\n type: Primitive,\n def?: DefaultType\n ): ConditionalReturn<EnvVarReturnType, DefaultType> {\n const rawVal = this.config.get(key) as string | number | boolean;\n if (!rawVal) return def as ConditionalReturn<EnvVarReturnType, DefaultType>;\n\n const parsed = this.parser.resolveTemplate(key, String(rawVal));\n\n let result: EnvVarReturnType;\n if (type === Primitive.Number) result = BuiltInConverters.number(parsed, def as number) as EnvVarReturnType;\n else if (type === Primitive.Boolean) result = BuiltInConverters.boolean(parsed, def as boolean) as EnvVarReturnType;\n else if (type === Primitive.BigInt) result = BuiltInConverters.bigint(parsed, def as bigint) as EnvVarReturnType;\n else if (type === Primitive.Symbol) result = BuiltInConverters.symbol(parsed, def as symbol) as EnvVarReturnType;\n else result = BuiltInConverters.string(parsed, def as string) as EnvVarReturnType;\n\n return result as ConditionalReturn<EnvVarReturnType, DefaultType>;\n }\n\n /**\n * Get a string environment variable with optional fallback.\n * Supports template variable resolution using ${VAR} syntax.\n */\n static get<Default extends string | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<string, Default> {\n return this._get(key, Primitive.String, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.get}\n */\n get<Default extends string | undefined = undefined>(key: string, def?: Default): ConditionalReturn<string, Default> {\n return PrimitiveMethods._get(key, Primitive.String, def);\n }\n\n /**\n * Get a number environment variable with optional fallback.\n * Automatically converts string values to numbers.\n */\n static getNumber<Default extends number | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<number, Default> {\n return this._get(key, Primitive.Number, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getNumber}\n */\n getNumber<Default extends number | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<number, Default> {\n return PrimitiveMethods._get(key, Primitive.Number, def);\n }\n\n /**\n * Get a boolean environment variable with optional fallback.\n * Recognizes: `1`, `yes`, `true`, 'on' as **true**; `0`, `no`, `false`, 'off' as **false** (case-insensitive).\n */\n static getBoolean<Default extends boolean | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<boolean, Default> {\n return this._get(key, Primitive.Boolean, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getBoolean}\n */\n getBoolean<Default extends boolean | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<boolean, Default> {\n return PrimitiveMethods._get(key, Primitive.Boolean, def);\n }\n\n /**\n * Get a bigint environment variable with optional fallback.\n * Automatically converts string values to bigint.\n */\n static getBigInt<Default extends bigint | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<bigint, Default> {\n return this._get(key, Primitive.BigInt, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getBigInt}\n */\n getBigInt<Default extends bigint | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<bigint, Default> {\n return PrimitiveMethods._get(key, Primitive.BigInt, def);\n }\n\n /**\n * Get a symbol environment variable with optional fallback.\n * Creates a symbol from the string value.\n */\n static getSymbol<Default extends symbol | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<symbol, Default> {\n return this._get(key, Primitive.Symbol, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getSymbol}\n */\n getSymbol<Default extends symbol | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<symbol, Default> {\n return PrimitiveMethods._get(key, Primitive.Symbol, def);\n }\n}\n","import { PrimitiveMethods } from './PrimitiveMethods';\n\nimport type {\n AdvancedConverterReturn,\n ArrayConverter,\n BuiltInConverter,\n ConditionalReturn,\n ConverterFunction\n} from '../Types';\n\n/**\n * Mixin for advanced methods for environment variable conversion using built-in and custom converters\n * @internal\n */\nexport class AdvancedMethods extends PrimitiveMethods {\n /**\n * Get an environment variable using a built-in converter.\n * Supports both Converter enum values and array converter configurations.\n */\n static getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback>;\n static getUsing<TReturn>(key: string, converter: BuiltInConverter | ArrayConverter, fallback?: TReturn): TReturn;\n static getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback> {\n // Check if variable exists first, for consistency with primitive methods\n const rawVal = this.config.get(key);\n if (!rawVal) return fallback as AdvancedConverterReturn<TConverter, TFallback>;\n\n const hasFallback = fallback !== undefined;\n const result = this.parser.convertValue(key, fallback, converter, hasFallback);\n\n return result as AdvancedConverterReturn<TConverter, TFallback>;\n }\n\n /**\n * @see {@link AdvancedMethods.getUsing}\n */\n getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback>;\n getUsing<TReturn>(key: string, converter: BuiltInConverter | ArrayConverter, fallback?: TReturn): TReturn;\n getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback> {\n return AdvancedMethods.getUsing(key, converter, fallback);\n }\n\n /**\n * Get an environment variable using a custom converter function.\n */\n static getWith<TReturnType, TFallback extends TReturnType | undefined = undefined>(\n key: string,\n converter: ConverterFunction<TReturnType>,\n fallback?: TFallback\n ): ConditionalReturn<TReturnType, TFallback> {\n // Check if variable exists first, for consistency with primitive methods\n const rawVal = this.config.get(key);\n if (!rawVal) return fallback as ConditionalReturn<TReturnType, TFallback>;\n\n const hasFallback = fallback !== undefined;\n // Convert the converter to match the expected signature via unknown\n const result = this.parser.convertValue(\n key,\n fallback,\n converter as unknown as ConverterFunction<TFallback>,\n hasFallback\n );\n\n return result as ConditionalReturn<TReturnType, TFallback>;\n }\n\n /**\n * @see {@link AdvancedMethods.getWith}\n */\n getWith<TReturnType, TFallback extends TReturnType | undefined = undefined>(\n key: string,\n converter: ConverterFunction<TReturnType>,\n fallback?: TFallback\n ): ConditionalReturn<TReturnType, TFallback> {\n return AdvancedMethods.getWith(key, converter, fallback);\n }\n}\n","import { AdvancedMethods } from './core/AdvancedMethods';\n\nexport { EnvaptCache } from './core/EnvapterBase';\nexport { Environment } from './core/EnvironmentMethods';\n\n/**\n * Main configuration class for environment variable management.\n *\n * Provides both static and instance methods for retrieving typed environment variables\n * with support for template resolution, multiple .env files, and environment detection.\n *\n * Extend your own classes from this to define properties with \\@Envapt decorators and provide access to environment variables methods.\n *\n * @example\n * ```ts\n * // Static usage\n * const port = Envapter.getNumber('PORT', 3000);\n * const url = Envapter.get('API_URL', 'http://localhost');\n *\n * // Instance usage\n * const env = new Envapter();\n * const dbUrl = env.get('DATABASE_URL', 'sqlite://memory');\n * ```\n *\n * @public\n */\nexport class Envapter extends AdvancedMethods {}\n","import { EnvaptCache } from './core/EnvapterBase';\nimport { Envapter } from './Envapter';\nimport { Parser } from './Parser';\n\nimport type {\n ArrayConverter,\n BuiltInConverter,\n ConverterFunction,\n EnvaptConverter,\n EnvaptOptions,\n InferConverterReturnType,\n InferPrimitiveFallbackType,\n InferPrimitiveReturnType,\n PrimitiveConstructor\n} from './Types';\n\nfunction createPropertyDecorator<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n converter: EnvaptConverter<TFallback> | undefined,\n hasFallback: boolean\n): PropertyDecorator {\n return function (target: object, prop: string | symbol): void {\n const propKey = String(prop);\n const cacheKey = `${target.constructor.name}.${propKey}`;\n\n // Create a property with a getter that handles environment changes\n Object.defineProperty(target, propKey, {\n get: function () {\n // Check if the environment cache has been cleared (indicating config change)\n // If so, we need to re-evaluate our cached value\n let value = EnvaptCache.get(cacheKey) as TFallback | null | undefined;\n\n // Re-evaluate if we don't have a cached value\n if (value === undefined) {\n const parser = new Parser(new Envapter());\n value = parser.convertValue(key, fallback, converter, hasFallback);\n EnvaptCache.set(cacheKey, value);\n }\n\n return value;\n },\n configurable: false,\n enumerable: true\n });\n };\n}\n\n/**\n * Usage 1: Custom converter function with fallback provided\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with custom converter and required fallback\n * @public\n */\nexport function Envapt<TFallback>(\n key: string,\n options: { converter: (raw: string | undefined, fallback: TFallback) => TFallback; fallback: TFallback }\n): PropertyDecorator;\n\n/**\n * Usage 2: Custom converter function without fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with custom converter only\n * @public\n */\nexport function Envapt<TReturnType>(\n key: string,\n options: { converter: ConverterFunction<TReturnType> }\n): PropertyDecorator;\n\n/**\n * Usage 3: Built-in converter with optional fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with built-in converter\n * @public\n */\nexport function Envapt<TConverter extends BuiltInConverter>(\n key: string,\n options: { converter: TConverter; fallback?: InferConverterReturnType<TConverter> }\n): PropertyDecorator;\n\n/**\n * Usage 4: Array converter with optional fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with array converter\n * @public\n */\nexport function Envapt<TConverter extends ArrayConverter>(\n key: string,\n options: { converter: TConverter; fallback?: InferConverterReturnType<TConverter> }\n): PropertyDecorator;\n\n/**\n * Usage 5: Primitive constructor with optional fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with primitive constructor\n * @public\n */\nexport function Envapt<TConstructor extends PrimitiveConstructor>(\n key: string,\n options: {\n converter: TConstructor;\n fallback?: InferPrimitiveReturnType<TConstructor>;\n }\n): PropertyDecorator;\n\n/**\n * Usage 6: Fallback only (no converter)\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with fallback only\n * @public\n */\nexport function Envapt<TFallback>(\n key: string,\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n options: { fallback: TFallback; converter?: undefined }\n): PropertyDecorator;\n\n/**\n * Classic API: No fallback\n *\n * @param key - Environment variable name to load\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function Envapt<_TReturnType = string | null>(key: string): PropertyDecorator;\n\n/**\n * Classic API: Primitive fallback only\n *\n * @param key - Environment variable name to load\n * @param fallback - Default primitive value\n * @param converter - Optional primitive constructor (String, Number, etc.)\n * @public\n */\nexport function Envapt<TFallback extends string | number | boolean | bigint | symbol | undefined>(\n key: string,\n fallback: InferPrimitiveFallbackType<TFallback>,\n converter?: PrimitiveConstructor\n): PropertyDecorator;\n\n/**\n * Instance/Static Property decorator that automatically loads and converts environment variables.\n */\nexport function Envapt<TFallback = unknown>(\n key: string,\n fallbackOrOptions?: TFallback | EnvaptOptions<TFallback>,\n converter?: EnvaptConverter<TFallback>\n): PropertyDecorator {\n // Determine if using new options API or classic API\n let fallback: TFallback | undefined;\n let actualConverter: EnvaptConverter<TFallback> | undefined;\n let hasFallback = true;\n\n if (\n fallbackOrOptions &&\n typeof fallbackOrOptions === 'object' &&\n ('fallback' in fallbackOrOptions || 'converter' in fallbackOrOptions)\n ) {\n // Modern API\n const options = fallbackOrOptions;\n fallback = options.fallback;\n actualConverter = options.converter;\n hasFallback = 'fallback' in options;\n } else {\n // Classic API\n fallback = fallbackOrOptions as TFallback;\n actualConverter = converter;\n hasFallback = arguments.length > 1;\n }\n\n return createPropertyDecorator(key, fallback, actualConverter, hasFallback);\n}\n","/**\n * Enum for built-in converters\n * @public\n */\nexport enum Converters {\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Bigint = 'bigint',\n Symbol = 'symbol',\n Integer = 'integer',\n Float = 'float',\n Json = 'json',\n Array = 'array',\n Url = 'url',\n Regexp = 'regexp',\n Date = 'date',\n Time = 'time'\n}\n\n/**\n * Type alias for converter values to maintain compatibility with existing string-based API\n * @internal\n */\nexport type ConverterValue = `${Converters}`;\n\n/**\n * Valid array element converter types (excludes array, json, regexp)\n * @internal\n */\nexport type ArrayElementConverter = Exclude<Converters, Converters.Array | Converters.Json | Converters.Regexp>;\n\n/**\n * Type alias for array element converter values\n * @internal\n */\nexport type ArrayElementConverterValue = `${ArrayElementConverter}`;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Error.ts","../src/ListOfBuiltInConverters.ts","../src/Validators.ts","../src/core/EnvapterBase.ts","../src/BuiltInConverters.ts","../src/Parser.ts","../src/core/EnvironmentMethods.ts","../src/core/PrimitiveMethods.ts","../src/core/AdvancedMethods.ts","../src/Envapter.ts","../src/Envapt.ts","../src/Converters.ts"],"names":["EnvaptErrorCodes","config","fs","parsed","Environment","Converters"],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable no-magic-numbers */\nexport enum EnvaptErrorCodes {\n // Fallback related errors\n /** Thrown when an invalid fallback value is provided */\n InvalidFallback = 101,\n /** Thrown when fallback value type doesn't match expected converter type */\n InvalidFallbackType = 102,\n /** Thrown when array fallback contains elements of wrong type */\n ArrayFallbackElementTypeMismatch = 103,\n /** Thrown when fallback type doesn't match the specified converter */\n FallbackConverterTypeMismatch = 104,\n\n // Converter related errors\n /** Thrown when invalid array converter configuration is provided */\n InvalidArrayConverterType = 201,\n /** Thrown when an invalid built-in converter is specified */\n InvalidBuiltInConverter = 202,\n /** Thrown when a custom converter is not a function */\n InvalidCustomConverter = 203,\n /** Thrown when converter type is not recognized */\n InvalidConverterType = 204,\n /** Thrown when primitive type coercion on fallback value fails */\n PrimitiveCoercionFailed = 205,\n\n // Other errors\n /** Thrown when delimiter is missing in array converter configuration */\n // This doesn't happen because 203 is thrown when object without delimiter is passed\n MissingDelimiter = 301,\n /** Thrown when invalid user-defined configuration is provided */\n InvalidUserDefinedConfig = 302,\n /** Thrown when specified environment files don't exist */\n EnvFilesNotFound = 303\n}\n\n/**\n * Custom error for better DX and debugging when using Envapt.\n *\n * @example\n * ```ts\n * throw new EnvaptError(EnvaptErrorCode.InvalidFallback, \"Invalid fallback value provided for environment variable.\");\n * ```\n */\nexport class EnvaptError extends Error {\n public readonly code: EnvaptErrorCodes;\n\n constructor(code: EnvaptErrorCodes, message: string) {\n super(message);\n this.name = `EnvaptError [${code}]`;\n this.code = code;\n\n Error.captureStackTrace(this, EnvaptError);\n }\n}\n","import type { ConverterValue } from './Converters';\nimport type { JsonValue } from './Types';\n\n/**\n * List of built-in converters for Envapt.\n * @internal\n */\nexport const ListOfBuiltInConverters: ConverterValue[] = [\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'symbol',\n 'integer',\n 'float',\n 'json',\n 'array',\n 'url',\n 'regexp',\n 'date',\n 'time'\n] as const;\n\n/**\n * Type checking functions for built-in converter return types.\n * @internal\n */\nexport const BuiltInConverterTypeCheckers: Record<ConverterValue, (value: unknown) => boolean> = {\n string: (value: unknown): value is string => typeof value === 'string',\n number: (value: unknown): value is number => typeof value === 'number',\n boolean: (value: unknown): value is boolean => typeof value === 'boolean',\n bigint: (value: unknown): value is bigint => typeof value === 'bigint',\n symbol: (value: unknown): value is symbol => typeof value === 'symbol',\n integer: (value: unknown): value is number => typeof value === 'number' && Number.isInteger(value),\n float: (value: unknown): value is number => typeof value === 'number',\n json: (value: unknown): value is JsonValue => {\n try {\n JSON.parse(JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n },\n array: (value: unknown): value is unknown[] => Array.isArray(value),\n url: (value: unknown): value is URL => value instanceof URL,\n regexp: (value: unknown): value is RegExp => value instanceof RegExp,\n date: (value: unknown): value is Date => value instanceof Date,\n time: (value: unknown): value is number => typeof value === 'number'\n};\n","import fs from 'node:fs';\n\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { ListOfBuiltInConverters, BuiltInConverterTypeCheckers } from './ListOfBuiltInConverters';\n\nimport type {\n ArrayConverter,\n BuiltInConverter,\n ConverterFunction,\n EnvaptConverter,\n PermittedDotenvConfig,\n ValidArrayConverterBuiltInType\n} from './Types';\n\nexport class Validator {\n /**\n * Check if a value is a built-in converter type\n */\n static isBuiltInConverter<TFallback>(value: EnvaptConverter<TFallback>): value is BuiltInConverter {\n if (typeof value === 'string') return ListOfBuiltInConverters.includes(value);\n return false;\n }\n\n /**\n * Check if a value is an ArrayConverter configuration object\n */\n static isArrayConverter(value: unknown): value is ArrayConverter {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'delimiter' in value &&\n typeof (value as ArrayConverter).delimiter === 'string'\n );\n }\n\n /**\n * Check if a value is a valid ArrayConverter type\n */\n static isValidArrayConverterType(value: unknown): value is ValidArrayConverterBuiltInType {\n if (typeof value !== 'string') return false;\n\n const invalidTypes = ['array', 'json', 'regexp'];\n\n if (invalidTypes.includes(value)) return false;\n const validTypes: ValidArrayConverterBuiltInType[] = ListOfBuiltInConverters.filter(\n (type): type is ValidArrayConverterBuiltInType => !invalidTypes.includes(type)\n );\n\n return validTypes.includes(value as ValidArrayConverterBuiltInType);\n }\n\n static customConvertor<TFallback>(\n converter: EnvaptConverter<TFallback>\n ): asserts converter is ConverterFunction<TFallback> {\n if (typeof converter !== 'function') {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidCustomConverter,\n `Custom converter must be a function, got ${typeof converter}.`\n );\n }\n }\n\n /**\n * Validate ArrayConverter configuration with runtime checks\n */\n static arrayConverter(value: unknown): asserts value is ArrayConverter {\n if (!this.isArrayConverter(value)) {\n throw new EnvaptError(EnvaptErrorCodes.MissingDelimiter, 'Must have delimiter property');\n }\n\n if (value.type !== undefined && !this.isValidArrayConverterType(value.type)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidArrayConverterType,\n `\"${value.type as string}\" is not a valid converter type`\n );\n }\n }\n\n /**\n * Validate that a string is a valid built-in converter type\n */\n static builtInConverter(value: unknown): asserts value is BuiltInConverter {\n if (typeof value !== 'string') {\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Expected string, got ${typeof value}`);\n }\n\n if (!ListOfBuiltInConverters.includes(value as BuiltInConverter)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidBuiltInConverter,\n `\"${value}\" is not a valid converter type. Valid types are: ${ListOfBuiltInConverters.join(',')}`\n );\n }\n }\n\n /**\n * Validate that fallback type matches the converter's return type for built-in converters\n */\n static validateBuiltInConverterFallback(converter: BuiltInConverter, fallback: unknown): void {\n const typeChecker = BuiltInConverterTypeCheckers[converter];\n if (!typeChecker(fallback)) {\n throw new EnvaptError(\n EnvaptErrorCodes.FallbackConverterTypeMismatch,\n `Fallback type does not match converter \"${converter}\". Expected ${converter} compatible type.`\n );\n }\n }\n\n /**\n * Validate that all elements in an array fallback have consistent types\n */\n static validateArrayFallbackElementTypes(fallback: unknown[]): void {\n if (fallback.length === 0) return; // Empty array is valid\n\n const firstElementType = typeof fallback[0];\n const hasInconsistentTypes = fallback.some((element, index) => {\n if (index === 0) return false; // Skip first element\n return typeof element !== firstElementType;\n });\n\n if (hasInconsistentTypes) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayFallbackElementTypeMismatch,\n `All elements in array fallback must have the same type. Found mixed types.`\n );\n }\n }\n\n /**\n * Validate that array converter type matches fallback element types\n */\n static validateArrayConverterElementTypeMatch(converterType: string, fallback: unknown[]): void {\n if (fallback.length === 0) return; // Empty array is valid\n\n const firstElement = fallback[0];\n const typeChecker = BuiltInConverterTypeCheckers[converterType as keyof typeof BuiltInConverterTypeCheckers];\n\n if (!typeChecker(firstElement)) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayFallbackElementTypeMismatch,\n `Array converter type \"${converterType}\" does not match fallback element type. Expected ${converterType} compatible elements.`\n );\n }\n }\n\n /**\n * Check if a value is a primitive constructor\n */\n static isPrimitiveConstructor(\n value: unknown\n ): value is typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol {\n return value === String || value === Number || value === Boolean || value === BigInt || value === Symbol;\n }\n\n /**\n * Safely coerce a fallback value using a primitive constructor\n */\n static coercePrimitiveFallback<CoercedType>(\n converter: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol,\n fallback: unknown\n ): CoercedType {\n // Check if fallback is already the correct type and return as-is\n if (this.isCorrectPrimitiveType(converter, fallback)) return fallback as CoercedType;\n\n // Otherwise, coerce the value\n return this.performPrimitiveCoercion<CoercedType>(converter, fallback);\n }\n\n /**\n * Check if fallback is already the correct primitive type\n */\n private static isCorrectPrimitiveType(\n converter: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol,\n fallback: unknown\n ): boolean {\n if (converter === String && typeof fallback === 'string') return true;\n if (converter === Number && typeof fallback === 'number') return true;\n if (converter === Boolean && typeof fallback === 'boolean') return true;\n if (converter === BigInt && typeof fallback === 'bigint') return true;\n if (converter === Symbol && typeof fallback === 'symbol') return true;\n return false;\n }\n\n /**\n * Perform the actual primitive coercion\n */\n private static performPrimitiveCoercion<CoercedType>(\n converter: typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol,\n fallback: unknown\n ): CoercedType {\n try {\n if (converter === String) return String(fallback) as CoercedType;\n if (converter === Number) return Number(fallback) as CoercedType;\n if (converter === Boolean) return Boolean(fallback) as CoercedType;\n if (converter === BigInt) return BigInt(fallback as string | number | bigint) as CoercedType;\n if (converter === Symbol) return Symbol(fallback as string | number) as CoercedType;\n } catch (error) {\n throw new EnvaptError(\n EnvaptErrorCodes.PrimitiveCoercionFailed,\n `Failed to coerce fallback value using ${converter.name}: ${(error as Error).message}`\n );\n }\n\n // This should never happen but TypeScript needs it\n throw new EnvaptError(EnvaptErrorCodes.PrimitiveCoercionFailed, `Unknown primitive converter: ${converter.name}`);\n }\n\n /**\n * Make sure the user hasn't provided prohibited options in their dotenv config\n */\n static validateDotenvConfig(config: Record<string, unknown>): config is PermittedDotenvConfig {\n if ('path' in config || 'processEnv' in config) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidUserDefinedConfig,\n 'Custom dotenvConfig should not include \"path\" or \"processEnv\" options. Those are managed by Envapter.'\n );\n }\n\n const validKeys = new Set(['encoding', 'quiet', 'debug', 'override', 'DOTENV_KEY']);\n const invalidKeys = Object.keys(config).filter((key) => !validKeys.has(key));\n\n if (invalidKeys.length > 0) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidUserDefinedConfig,\n `Invalid dotenvConfig options: ${invalidKeys.join(', ')}. Allowed options: ${Array.from(validKeys).join(', ')}`\n );\n }\n\n return true;\n }\n\n /**\n * Check if each provided path resolves to an env file by trying to access it\n */\n static validateEnvFilesExist(paths: string[]): void {\n const missing = paths.filter((p) => {\n try {\n fs.accessSync(p, fs.constants.F_OK);\n return false;\n } catch {\n return true;\n }\n });\n\n if (missing.length > 0) {\n throw new EnvaptError(\n EnvaptErrorCodes.EnvFilesNotFound,\n `Environment file not found at path: ${missing.join(', ')}`\n );\n }\n }\n}\n","import { config } from 'dotenv';\n\nimport { Validator } from '../Validators';\n\nimport type { PermittedDotenvConfig } from '../Types';\n\n/**\n * Base cache for environment variables and computed values\n * @internal\n */\nexport const EnvaptCache = new Map<string, unknown>();\n\n/**\n * Base class for environment variable management\n * Handles configuration, caching, and basic environment loading\n * @internal\n */\nexport abstract class EnvapterBase {\n protected static _envPaths: string[] = ['.env']; // default path\n protected static _userDefinedDotenvConfig: PermittedDotenvConfig = { quiet: true };\n\n /**\n * Set custom .env file paths. Accepts either a single path or array of paths.\n * Setting new paths clears the cache and reloads environment variables.\n */\n static set envPaths(paths: string[] | string) {\n const newPaths = Array.isArray(paths) ? paths : [paths];\n Validator.validateEnvFilesExist(newPaths);\n\n this._envPaths = newPaths;\n this.refreshCache();\n }\n\n /**\n * Get currently configured .env file paths\n */\n static get envPaths(): string[] {\n return this._envPaths;\n }\n\n /**\n * Set custom dotenv configuration options.\n */\n static set dotenvConfig(config: PermittedDotenvConfig) {\n Validator.validateDotenvConfig(config);\n this._userDefinedDotenvConfig = config;\n this.refreshCache();\n }\n\n /**\n * Get current dotenv configuration options\n */\n static get dotenvConfig(): PermittedDotenvConfig {\n return this._userDefinedDotenvConfig;\n }\n\n protected static refreshCache(): void {\n EnvaptCache.clear();\n void this.config; // reload config to repopulate cache\n }\n\n protected static get config(): Map<string, unknown> {\n if (EnvaptCache.size === 0) {\n // create isolated environment object to avoid mutating process.env\n const isolatedEnv: Record<string, string> = { ...(process.env as Record<string, string>) };\n\n try {\n // load _envPath file from custom path into isolated environment object\n config({ path: this._envPaths, processEnv: isolatedEnv, ...this._userDefinedDotenvConfig });\n } catch {\n // do nothing\n }\n // populate the Map with global environment variables\n for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);\n }\n\n return EnvaptCache;\n }\n\n /**\n * Get raw environment variable value without parsing or conversion.\n */\n getRaw(key: string): string | undefined {\n return EnvapterBase.config.get(key) as string | undefined;\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport type {\n ArrayConverter,\n BuiltInConverter,\n BuiltInConverterFunction,\n JsonValue,\n MapOfConverterFunctions,\n TimeUnit\n} from './Types';\n\n/**\n * Built-in converter implementations\n * @internal\n */\nexport class BuiltInConverters {\n static string(raw: string, fallback?: string): string | undefined {\n return String(raw) || fallback;\n }\n\n static number(raw: string, fallback?: number): number | undefined {\n const parsed = Number(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static boolean(raw: string, fallback?: boolean): boolean | undefined {\n const lower = raw.toLowerCase().trim();\n\n const truthyValues = ['1', 'yes', 'true', 'on'];\n const falsyValues = ['0', 'no', 'false', 'off'];\n\n if (truthyValues.includes(lower)) return true;\n if (falsyValues.includes(lower)) return false;\n return fallback;\n }\n\n static bigint(raw: string, fallback?: bigint): bigint | undefined {\n try {\n return BigInt(raw);\n } catch {\n return fallback;\n }\n }\n\n static symbol(raw: string, fallback?: symbol): symbol | undefined {\n return raw ? Symbol(raw) : fallback;\n }\n\n static integer(raw: string, fallback?: number): number | undefined {\n const parsed = parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string, fallback?: number): number | undefined {\n const parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static json(raw: string, fallback?: JsonValue): JsonValue | undefined {\n try {\n return JSON.parse(raw) as JsonValue;\n } catch {\n return fallback;\n }\n }\n\n static array(raw: string, fallback?: string[], delimiter = ','): string[] | undefined {\n if (raw.trim() === '') return [];\n const arr = raw\n .split(delimiter)\n .map((item) => item.trim())\n .filter(Boolean);\n return arr.length ? arr : fallback;\n }\n\n static url(raw: string, fallback?: URL): URL | undefined {\n try {\n return new URL(raw);\n } catch {\n return fallback;\n }\n }\n\n static regexp(raw: string, fallback?: RegExp): RegExp | undefined {\n try {\n // Handle flags if provided in format: /pattern/flags\n const match = raw.match(/^\\/(.+)\\/([gimsuvy]*)$/);\n if (match) return new RegExp(match[1] as string, match[2]);\n\n return new RegExp(raw);\n } catch {\n return fallback;\n }\n }\n\n static date(raw: string, fallback?: Date): Date | undefined {\n // Try parsing as timestamp first (if it's all digits)\n if (/^\\d+$/.test(raw)) {\n const timestamp = parseInt(raw, 10);\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n // Try parsing as regular date string\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string, fallback?: number): number | undefined {\n // eslint-disable-next-line security/detect-unsafe-regex\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (!match) return fallback;\n\n const [, numStr, capturedUnit] = match;\n if (!numStr) return fallback;\n\n const value = Number.parseFloat(numStr);\n if (Number.isNaN(value)) return fallback;\n\n const unit: TimeUnit = (capturedUnit ?? 'ms') as TimeUnit;\n\n const SECONDS_TO_MS = 1000;\n const SECONDS_PER_MINUTE = 60;\n const MINUTES_PER_HOUR = 60;\n const MINUTES_TO_MS = SECONDS_PER_MINUTE * SECONDS_TO_MS;\n const HOURS_TO_MS = MINUTES_PER_HOUR * MINUTES_TO_MS;\n\n if (unit === 'ms') return value;\n if (unit === 's') return value * SECONDS_TO_MS;\n if (unit === 'm') return value * MINUTES_TO_MS;\n return value * HOURS_TO_MS;\n }\n\n /**\n * Process array with custom converter config\n */\n static processArrayConverter(raw: string, fallback: unknown, config: ArrayConverter): unknown[] | undefined {\n if (raw.trim() === '') return [];\n\n const items = raw\n .split(config.delimiter)\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n // If no items after split, return fallback if provided\n if (!items.length) return fallback ? (fallback as unknown[]) : undefined;\n\n // If no type specified, return as string array\n const type = config.type;\n if (!type) return items;\n\n // Convert each item using the specified type\n const converter = BuiltInConverters.getConverter(type);\n return items.map((item) => {\n const converted = converter(item, undefined);\n return converted ?? item;\n });\n }\n\n /**\n * Get the converter function for a built-in converter type\n */\n static getConverter<TFallback extends BuiltInConverter>(type: TFallback): BuiltInConverterFunction {\n const converters: MapOfConverterFunctions = {\n string: BuiltInConverters.string,\n number: BuiltInConverters.number,\n boolean: BuiltInConverters.boolean,\n integer: BuiltInConverters.integer,\n bigint: BuiltInConverters.bigint,\n symbol: BuiltInConverters.symbol,\n float: BuiltInConverters.float,\n json: BuiltInConverters.json,\n array: BuiltInConverters.array,\n url: BuiltInConverters.url,\n regexp: BuiltInConverters.regexp,\n date: BuiltInConverters.date,\n time: BuiltInConverters.time\n } as const;\n\n return converters[type];\n }\n}\n","import { BuiltInConverters } from './BuiltInConverters';\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { Validator } from './Validators';\n\nimport type { EnvaptConverter, PrimitiveConstructor, ArrayConverter, BuiltInConverter } from './Types';\n\n/**\n * @internal\n */\nexport interface EnvapterService {\n getRaw(key: string): string | undefined;\n get(key: string, def?: string): string | undefined;\n getNumber(key: string, def?: number): number | undefined;\n getBoolean(key: string, def?: boolean): boolean | undefined;\n}\n\n/**\n * Parser class for handling environment variable template resolution and type conversion\n * @internal\n */\nexport class Parser {\n private readonly TEMPLATE_REGEX = /\\${\\w*}/g;\n\n constructor(private readonly envService: EnvapterService) {}\n\n /**\n * Resolve template variables in a string while handling circular references and missing variables\n * @internal\n */\n resolveTemplate(key: string, value: string, stack = new Set<string>()): string {\n stack.add(key);\n\n const out = value.replace(this.TEMPLATE_REGEX, (template) => {\n const variable = template.slice(2, -1);\n\n if (stack.has(variable)) return template; // cycle, preserve\n\n const raw = this.envService.getRaw(variable);\n if (!raw || raw === '') return template; // missing or empty, preserve\n\n const resolved = this.resolveTemplate(variable, raw, new Set(stack));\n\n // If resolution still references the current key, skip replacement (indirect cycle)\n if (resolved.includes(`\\${${key}}`)) return template;\n\n // If nothing changed (unresolved placeholders stayed), also preserve original template\n if (resolved === raw && /\\$\\{[^}]*\\}/.test(resolved)) return template;\n\n return resolved;\n });\n\n stack.delete(key);\n return out;\n }\n\n convertValue<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n converter: EnvaptConverter<TFallback> | undefined,\n hasFallback: boolean\n ): TFallback | null | undefined {\n const resolvedConverter = this.resolveConverter(converter, fallback);\n const processedFallback = this.processFallbackForConverter(resolvedConverter, fallback);\n\n // Handle different converter types\n if (Validator.isArrayConverter(resolvedConverter)) {\n return this.processArrayConverter(key, processedFallback, resolvedConverter, hasFallback);\n }\n\n if (Validator.isPrimitiveConstructor(resolvedConverter)) {\n const stringConverter = this.convertPrimitiveToString(resolvedConverter);\n return this.processBuiltInConverter(key, processedFallback, stringConverter, hasFallback, true);\n }\n\n if (Validator.isBuiltInConverter(resolvedConverter)) {\n return this.processBuiltInConverter(key, processedFallback, resolvedConverter, hasFallback, false);\n }\n\n return this.processCustomConverter(key, processedFallback, resolvedConverter, hasFallback);\n }\n\n private processFallbackForConverter<TFallback>(\n converter: EnvaptConverter<TFallback>,\n fallback: TFallback | undefined\n ): TFallback | undefined {\n // For primitive constructors, coerce the fallback to match the converter\n if (Validator.isPrimitiveConstructor(converter) && fallback !== undefined) {\n return Validator.coercePrimitiveFallback<TFallback>(converter, fallback);\n }\n return fallback;\n }\n\n private convertPrimitiveToString(primitiveConstructor: PrimitiveConstructor): BuiltInConverter {\n if (primitiveConstructor === String) return 'string';\n if (primitiveConstructor === Number) return 'number';\n if (primitiveConstructor === Boolean) return 'boolean';\n if (primitiveConstructor === BigInt) return 'bigint';\n if (primitiveConstructor === Symbol) return 'symbol';\n\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Unknown primitive constructor`);\n }\n\n private processBuiltInConverter<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n resolvedConverter: BuiltInConverter,\n hasFallback: boolean,\n wasOriginallyConstructor: boolean\n ): TFallback | null | undefined {\n // Validate the built-in converter at runtime\n Validator.builtInConverter(resolvedConverter);\n\n // Validate fallback type matches converter for built-in converters\n // Only apply strict validation if this wasn't originally a constructor\n if (hasFallback && fallback !== undefined && !wasOriginallyConstructor) {\n Validator.validateBuiltInConverterFallback(resolvedConverter, fallback);\n\n // Special handling for 'array' converter - check array element consistency\n if (resolvedConverter === 'array' && Array.isArray(fallback)) {\n Validator.validateArrayFallbackElementTypes(fallback);\n }\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n\n // If converter failed (returned undefined) and no fallback was provided, return null\n if (result === undefined && !hasFallback) return null;\n\n return result as TFallback;\n }\n\n private processArrayConverter<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n resolvedConverter: ArrayConverter,\n hasFallback: boolean\n ): TFallback | null | undefined {\n // Validate the resolvedConverter at runtime and assert that it is indeed an ArrayConverter\n Validator.arrayConverter(resolvedConverter);\n\n // Validate fallback type if a fallback is provided\n if (hasFallback && fallback !== undefined && !Array.isArray(fallback)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayConverter requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n // Additional validations for array converter fallbacks\n if (hasFallback && Array.isArray(fallback)) {\n // Validate that all elements in fallback array have consistent types\n Validator.validateArrayFallbackElementTypes(fallback);\n\n // For array converters with a type, validate that converter type matches fallback elements\n if (resolvedConverter.type) {\n Validator.validateArrayConverterElementTypeMatch(resolvedConverter.type, fallback);\n }\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const result = BuiltInConverters.processArrayConverter(parsed, fallback, resolvedConverter);\n\n // If converter failed (returned undefined) and no fallback was provided, return null\n if (result === undefined && !hasFallback) return null;\n\n return result as TFallback;\n }\n\n private processCustomConverter<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n resolvedConverter: EnvaptConverter<TFallback>,\n hasFallback: boolean\n ): TFallback | null | undefined {\n Validator.customConvertor(resolvedConverter);\n\n // Custom converter function\n const raw = this.envService.get(key, undefined);\n\n // If no fallback provided and no value found, return null\n // If explicit undefined fallback and no value found, return undefined\n\n if (raw === undefined) return hasFallback ? fallback : null;\n\n return resolvedConverter(raw, fallback);\n }\n\n private resolveConverter<TFallback>(\n converter: EnvaptConverter<TFallback> | undefined,\n fallback: TFallback | undefined\n ): EnvaptConverter<TFallback> {\n // User provided explicit converter. Use it\n if (converter) return converter;\n\n // Auto-detect type from fallback using typeof\n const fallbackType = typeof fallback;\n if (fallbackType === 'number') return 'number';\n if (fallbackType === 'boolean') return 'boolean';\n if (fallbackType === 'bigint') return 'bigint';\n if (fallbackType === 'symbol') return 'symbol';\n return 'string';\n }\n}\n","import { EnvapterBase } from './EnvapterBase';\n\n/**\n * Environment types supported by Envapter\n * @public\n */\nexport enum Environment {\n Development,\n Staging,\n Production\n}\n\n/**\n * Mixin for environment detection and checking methods\n * @internal\n */\nexport class EnvironmentMethods extends EnvapterBase {\n protected static _environment: Environment | undefined;\n\n protected static determineEnvironment(env?: string | Environment): void {\n const environment =\n env ?? this.getRawValue('ENVIRONMENT', this.getRawValue('ENV', this.getRawValue('NODE_ENV', 'development')));\n\n if (typeof environment === 'string') {\n this._environment =\n environment.toLowerCase() === 'production'\n ? Environment.Production\n : environment === 'staging'\n ? Environment.Staging\n : Environment.Development;\n } else {\n this._environment = environment;\n }\n }\n\n private static getRawValue(key: string, fallback: string): string {\n return (this.config.get(key) as string) || fallback;\n }\n\n /**\n * Get the current application environment\n */\n static get environment(): Environment {\n if (this._environment === undefined) {\n this.determineEnvironment();\n }\n return this._environment as Environment;\n }\n\n /**\n * Set the application environment. Accepts either Environment enum or string value.\n */\n static set environment(env: string | Environment) {\n this.determineEnvironment(env);\n }\n\n /**\n * @see {@link EnvironmentMethods.environment}\n */\n get environment(): Environment {\n return EnvironmentMethods.environment;\n }\n\n /**\n * @see {@link EnvironmentMethods.environment}\n */\n set environment(env: string | Environment) {\n EnvironmentMethods.determineEnvironment(env);\n }\n\n /**\n * Check if the current environment is production\n */\n static get isProduction(): boolean {\n return this.environment === Environment.Production;\n }\n\n /**\n * @see {@link EnvironmentMethods.isProduction}\n */\n get isProduction(): boolean {\n return EnvironmentMethods.environment === Environment.Production;\n }\n\n /**\n * Check if the current environment is staging\n */\n static get isStaging(): boolean {\n return this.environment === Environment.Staging;\n }\n\n /**\n * @see {@link EnvironmentMethods.isStaging}\n */\n get isStaging(): boolean {\n return EnvironmentMethods.environment === Environment.Staging;\n }\n\n /**\n * Check if the current environment is development\n */\n static get isDevelopment(): boolean {\n return this.environment === Environment.Development;\n }\n\n /**\n * @see {@link EnvironmentMethods.isDevelopment}\n */\n get isDevelopment(): boolean {\n return EnvironmentMethods.environment === Environment.Development;\n }\n\n protected static override refreshCache(): void {\n super.refreshCache();\n this._environment = undefined; // re-evaluate environment on next access\n }\n}\n","import { BuiltInConverters } from '../BuiltInConverters';\nimport { Parser, type EnvapterService } from '../Parser';\nimport { EnvironmentMethods } from './EnvironmentMethods';\n\nimport type { ConditionalReturn } from '../Types';\n\n/**\n * @internal\n */\nenum Primitive {\n String,\n Number,\n Boolean,\n BigInt,\n Symbol\n}\n\n/**\n * Mixin for primitive environment variable getter methods\n * @internal\n */\nexport class PrimitiveMethods extends EnvironmentMethods implements EnvapterService {\n protected static readonly parser = new Parser(new PrimitiveMethods());\n\n private static _get<EnvVarReturnType, DefaultType extends EnvVarReturnType | undefined = undefined>(\n key: string,\n type: Primitive,\n def?: DefaultType\n ): ConditionalReturn<EnvVarReturnType, DefaultType> {\n const rawVal = this.config.get(key) as string | number | boolean;\n if (!rawVal) return def as ConditionalReturn<EnvVarReturnType, DefaultType>;\n\n const parsed = this.parser.resolveTemplate(key, String(rawVal));\n\n let result: EnvVarReturnType;\n if (type === Primitive.Number) result = BuiltInConverters.number(parsed, def as number) as EnvVarReturnType;\n else if (type === Primitive.Boolean) result = BuiltInConverters.boolean(parsed, def as boolean) as EnvVarReturnType;\n else if (type === Primitive.BigInt) result = BuiltInConverters.bigint(parsed, def as bigint) as EnvVarReturnType;\n else if (type === Primitive.Symbol) result = BuiltInConverters.symbol(parsed, def as symbol) as EnvVarReturnType;\n else result = BuiltInConverters.string(parsed, def as string) as EnvVarReturnType;\n\n return result as ConditionalReturn<EnvVarReturnType, DefaultType>;\n }\n\n /**\n * Get a string environment variable with optional fallback.\n * Supports template variable resolution using ${VAR} syntax.\n */\n static get<Default extends string | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<string, Default> {\n return this._get(key, Primitive.String, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.get}\n */\n get<Default extends string | undefined = undefined>(key: string, def?: Default): ConditionalReturn<string, Default> {\n return PrimitiveMethods._get(key, Primitive.String, def);\n }\n\n /**\n * Get a number environment variable with optional fallback.\n * Automatically converts string values to numbers.\n */\n static getNumber<Default extends number | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<number, Default> {\n return this._get(key, Primitive.Number, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getNumber}\n */\n getNumber<Default extends number | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<number, Default> {\n return PrimitiveMethods._get(key, Primitive.Number, def);\n }\n\n /**\n * Get a boolean environment variable with optional fallback.\n * Recognizes: `1`, `yes`, `true`, 'on' as **true**; `0`, `no`, `false`, 'off' as **false** (case-insensitive).\n */\n static getBoolean<Default extends boolean | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<boolean, Default> {\n return this._get(key, Primitive.Boolean, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getBoolean}\n */\n getBoolean<Default extends boolean | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<boolean, Default> {\n return PrimitiveMethods._get(key, Primitive.Boolean, def);\n }\n\n /**\n * Get a bigint environment variable with optional fallback.\n * Automatically converts string values to bigint.\n */\n static getBigInt<Default extends bigint | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<bigint, Default> {\n return this._get(key, Primitive.BigInt, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getBigInt}\n */\n getBigInt<Default extends bigint | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<bigint, Default> {\n return PrimitiveMethods._get(key, Primitive.BigInt, def);\n }\n\n /**\n * Get a symbol environment variable with optional fallback.\n * Creates a symbol from the string value.\n */\n static getSymbol<Default extends symbol | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<symbol, Default> {\n return this._get(key, Primitive.Symbol, def);\n }\n\n /**\n * @see {@link PrimitiveMethods.getSymbol}\n */\n getSymbol<Default extends symbol | undefined = undefined>(\n key: string,\n def?: Default\n ): ConditionalReturn<symbol, Default> {\n return PrimitiveMethods._get(key, Primitive.Symbol, def);\n }\n}\n","import { PrimitiveMethods } from './PrimitiveMethods';\n\nimport type {\n AdvancedConverterReturn,\n ArrayConverter,\n BuiltInConverter,\n ConditionalReturn,\n ConverterFunction\n} from '../Types';\n\n/**\n * Mixin for advanced methods for environment variable conversion using built-in and custom converters\n * @internal\n */\nexport class AdvancedMethods extends PrimitiveMethods {\n /**\n * Get an environment variable using a built-in converter.\n * Supports both Converter enum values and array converter configurations.\n */\n static getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback>;\n static getUsing<TReturn>(key: string, converter: BuiltInConverter | ArrayConverter, fallback?: TReturn): TReturn;\n static getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback> {\n // Check if variable exists first, for consistency with primitive methods\n const rawVal = this.config.get(key);\n if (!rawVal) return fallback as AdvancedConverterReturn<TConverter, TFallback>;\n\n const hasFallback = fallback !== undefined;\n const result = this.parser.convertValue(key, fallback, converter, hasFallback);\n\n return result as AdvancedConverterReturn<TConverter, TFallback>;\n }\n\n /**\n * @see {@link AdvancedMethods.getUsing}\n */\n getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback>;\n getUsing<TReturn>(key: string, converter: BuiltInConverter | ArrayConverter, fallback?: TReturn): TReturn;\n getUsing<TConverter extends BuiltInConverter | ArrayConverter, TFallback = undefined>(\n key: string,\n converter: TConverter,\n fallback?: TFallback\n ): AdvancedConverterReturn<TConverter, TFallback> {\n return AdvancedMethods.getUsing(key, converter, fallback);\n }\n\n /**\n * Get an environment variable using a custom converter function.\n */\n static getWith<TReturnType, TFallback extends TReturnType | undefined = undefined>(\n key: string,\n converter: ConverterFunction<TReturnType>,\n fallback?: TFallback\n ): ConditionalReturn<TReturnType, TFallback> {\n // Check if variable exists first, for consistency with primitive methods\n const rawVal = this.config.get(key);\n if (!rawVal) return fallback as ConditionalReturn<TReturnType, TFallback>;\n\n const hasFallback = fallback !== undefined;\n // Convert the converter to match the expected signature via unknown\n const result = this.parser.convertValue(\n key,\n fallback,\n converter as unknown as ConverterFunction<TFallback>,\n hasFallback\n );\n\n return result as ConditionalReturn<TReturnType, TFallback>;\n }\n\n /**\n * @see {@link AdvancedMethods.getWith}\n */\n getWith<TReturnType, TFallback extends TReturnType | undefined = undefined>(\n key: string,\n converter: ConverterFunction<TReturnType>,\n fallback?: TFallback\n ): ConditionalReturn<TReturnType, TFallback> {\n return AdvancedMethods.getWith(key, converter, fallback);\n }\n}\n","import { AdvancedMethods } from './core/AdvancedMethods';\n\nexport { EnvaptCache } from './core/EnvapterBase';\nexport { Environment } from './core/EnvironmentMethods';\n\n/**\n * Main configuration class for environment variable management.\n *\n * Provides both static and instance methods for retrieving typed environment variables\n * with support for template resolution, multiple .env files, and environment detection.\n *\n * Extend your own classes from this to define properties with \\@Envapt decorators and provide access to environment variables methods.\n *\n * @example\n * ```ts\n * // Static usage\n * const port = Envapter.getNumber('PORT', 3000);\n * const url = Envapter.get('API_URL', 'http://localhost');\n *\n * // Instance usage\n * const env = new Envapter();\n * const dbUrl = env.get('DATABASE_URL', 'sqlite://memory');\n * ```\n *\n * @public\n */\nexport class Envapter extends AdvancedMethods {\n /**\n * Tagged template literal for resolving environment variables in template strings.\n *\n * @example\n * ```ts\n * // Given API_HOST=api.example.com and API_PORT=8080 in environment\n * const endpoint = Envapter.resolve`Connecting to ${'API_HOST'}:${'API_PORT'}`;\n * // Returns: \"Connecting to api.example.com:8080\"\n *\n * // Works with template variables in .env too:\n * // API_URL=https://${API_HOST}:${API_PORT}\n * const message = Envapter.resolve`Service endpoint: ${'API_URL'}`;\n * // Returns: \"Service endpoint: https://api.example.com:8080\"\n * ```\n */\n static resolve(strings: TemplateStringsArray, ...keys: string[]): string {\n return strings.reduce((result, string, i) => {\n const envKey = keys[i];\n const envValue = envKey ? super.get(envKey, '') : '';\n return result + string + envValue;\n }, '');\n }\n\n /**\n * @see {@link Envapter.resolve}\n */\n resolve(strings: TemplateStringsArray, ...keys: string[]): string {\n return Envapter.resolve(strings, ...keys);\n }\n}\n","import { EnvaptCache } from './core/EnvapterBase';\nimport { Envapter } from './Envapter';\nimport { Parser } from './Parser';\n\nimport type {\n ArrayConverter,\n BuiltInConverter,\n ConverterFunction,\n EnvaptConverter,\n EnvaptOptions,\n InferConverterReturnType,\n InferPrimitiveFallbackType,\n InferPrimitiveReturnType,\n PrimitiveConstructor\n} from './Types';\n\nfunction createPropertyDecorator<TFallback>(\n key: string,\n fallback: TFallback | undefined,\n converter: EnvaptConverter<TFallback> | undefined,\n hasFallback: boolean\n): PropertyDecorator {\n return function (target: object, prop: string | symbol): void {\n const propKey = String(prop);\n // For static properties, target is the constructor function itself\n // For instance properties, target is the prototype and we need target.constructor\n // This prevents cache collisions between static and instance properties with the same name\n const className = typeof target === 'function' ? target.name : target.constructor.name;\n const cacheKey = `${className}.${propKey}`;\n\n // Create a property with a getter that handles environment changes\n Object.defineProperty(target, propKey, {\n get: function () {\n // Check if the environment cache has been cleared (indicating config change)\n // If so, we need to re-evaluate our cached value\n let value = EnvaptCache.get(cacheKey) as TFallback | null | undefined;\n\n // Re-evaluate if we don't have a cached value\n if (value === undefined) {\n const parser = new Parser(new Envapter());\n value = parser.convertValue(key, fallback, converter, hasFallback);\n EnvaptCache.set(cacheKey, value);\n }\n\n return value;\n },\n configurable: false,\n enumerable: true\n });\n };\n}\n\n/**\n * Usage 1: Custom converter function with fallback provided\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with custom converter and required fallback\n * @public\n */\nexport function Envapt<TFallback>(\n key: string,\n options: { converter: (raw: string | undefined, fallback: TFallback) => TFallback; fallback: TFallback }\n): PropertyDecorator;\n\n/**\n * Usage 2: Custom converter function without fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with custom converter only\n * @public\n */\nexport function Envapt<TReturnType>(\n key: string,\n options: { converter: ConverterFunction<TReturnType> }\n): PropertyDecorator;\n\n/**\n * Usage 3: Built-in converter with optional fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with built-in converter\n * @public\n */\nexport function Envapt<TConverter extends BuiltInConverter>(\n key: string,\n options: { converter: TConverter; fallback?: InferConverterReturnType<TConverter> }\n): PropertyDecorator;\n\n/**\n * Usage 4: Array converter with optional fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with array converter\n * @public\n */\nexport function Envapt<TConverter extends ArrayConverter>(\n key: string,\n options: { converter: TConverter; fallback?: InferConverterReturnType<TConverter> }\n): PropertyDecorator;\n\n/**\n * Usage 5: Primitive constructor with optional fallback\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with primitive constructor\n * @public\n */\nexport function Envapt<TConstructor extends PrimitiveConstructor>(\n key: string,\n options: {\n converter: TConstructor;\n fallback?: InferPrimitiveReturnType<TConstructor>;\n }\n): PropertyDecorator;\n\n/**\n * Usage 6: Fallback only (no converter)\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options with fallback only\n * @public\n */\nexport function Envapt<TFallback>(\n key: string,\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n options: { fallback: TFallback; converter?: undefined }\n): PropertyDecorator;\n\n/**\n * Classic API: No fallback\n *\n * @param key - Environment variable name to load\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function Envapt<_TReturnType = string | null>(key: string): PropertyDecorator;\n\n/**\n * Classic API: Primitive fallback only\n *\n * @param key - Environment variable name to load\n * @param fallback - Default primitive value\n * @param converter - Optional primitive constructor (String, Number, etc.)\n * @public\n */\nexport function Envapt<TFallback extends string | number | boolean | bigint | symbol | undefined>(\n key: string,\n fallback: InferPrimitiveFallbackType<TFallback>,\n converter?: PrimitiveConstructor\n): PropertyDecorator;\n\n/**\n * Instance/Static Property decorator that automatically loads and converts environment variables.\n */\nexport function Envapt<TFallback = unknown>(\n key: string,\n fallbackOrOptions?: TFallback | EnvaptOptions<TFallback>,\n converter?: EnvaptConverter<TFallback>\n): PropertyDecorator {\n // Determine if using new options API or classic API\n let fallback: TFallback | undefined;\n let actualConverter: EnvaptConverter<TFallback> | undefined;\n let hasFallback = true;\n\n if (\n fallbackOrOptions &&\n typeof fallbackOrOptions === 'object' &&\n ('fallback' in fallbackOrOptions || 'converter' in fallbackOrOptions)\n ) {\n // Modern API\n const options = fallbackOrOptions;\n fallback = options.fallback;\n actualConverter = options.converter;\n hasFallback = 'fallback' in options;\n } else {\n // Classic API\n fallback = fallbackOrOptions as TFallback;\n actualConverter = converter;\n hasFallback = arguments.length > 1;\n }\n\n return createPropertyDecorator(key, fallback, actualConverter, hasFallback);\n}\n","/**\n * Enum for built-in converters\n * @public\n */\nexport enum Converters {\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Bigint = 'bigint',\n Symbol = 'symbol',\n Integer = 'integer',\n Float = 'float',\n Json = 'json',\n Array = 'array',\n Url = 'url',\n Regexp = 'regexp',\n Date = 'date',\n Time = 'time'\n}\n\n/**\n * Type alias for converter values to maintain compatibility with existing string-based API\n * @internal\n */\nexport type ConverterValue = `${Converters}`;\n\n/**\n * Valid array element converter types (excludes array, json, regexp)\n * @internal\n */\nexport type ArrayElementConverter = Exclude<Converters, Converters.Array | Converters.Json | Converters.Regexp>;\n\n/**\n * Type alias for array element converter values\n * @internal\n */\nexport type ArrayElementConverterValue = `${ArrayElementConverter}`;\n"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -493,6 +493,26 @@ declare class AdvancedMethods extends PrimitiveMethods {
|
|
|
493
493
|
* @public
|
|
494
494
|
*/
|
|
495
495
|
declare class Envapter extends AdvancedMethods {
|
|
496
|
+
/**
|
|
497
|
+
* Tagged template literal for resolving environment variables in template strings.
|
|
498
|
+
*
|
|
499
|
+
* @example
|
|
500
|
+
* ```ts
|
|
501
|
+
* // Given API_HOST=api.example.com and API_PORT=8080 in environment
|
|
502
|
+
* const endpoint = Envapter.resolve`Connecting to ${'API_HOST'}:${'API_PORT'}`;
|
|
503
|
+
* // Returns: "Connecting to api.example.com:8080"
|
|
504
|
+
*
|
|
505
|
+
* // Works with template variables in .env too:
|
|
506
|
+
* // API_URL=https://${API_HOST}:${API_PORT}
|
|
507
|
+
* const message = Envapter.resolve`Service endpoint: ${'API_URL'}`;
|
|
508
|
+
* // Returns: "Service endpoint: https://api.example.com:8080"
|
|
509
|
+
* ```
|
|
510
|
+
*/
|
|
511
|
+
static resolve(strings: TemplateStringsArray, ...keys: string[]): string;
|
|
512
|
+
/**
|
|
513
|
+
* @see {@link Envapter.resolve}
|
|
514
|
+
*/
|
|
515
|
+
resolve(strings: TemplateStringsArray, ...keys: string[]): string;
|
|
496
516
|
}
|
|
497
517
|
|
|
498
518
|
declare enum EnvaptErrorCodes {
|
|
@@ -521,5 +541,17 @@ declare enum EnvaptErrorCodes {
|
|
|
521
541
|
/** Thrown when specified environment files don't exist */
|
|
522
542
|
EnvFilesNotFound = 303
|
|
523
543
|
}
|
|
544
|
+
/**
|
|
545
|
+
* Custom error for better DX and debugging when using Envapt.
|
|
546
|
+
*
|
|
547
|
+
* @example
|
|
548
|
+
* ```ts
|
|
549
|
+
* throw new EnvaptError(EnvaptErrorCode.InvalidFallback, "Invalid fallback value provided for environment variable.");
|
|
550
|
+
* ```
|
|
551
|
+
*/
|
|
552
|
+
declare class EnvaptError extends Error {
|
|
553
|
+
readonly code: EnvaptErrorCodes;
|
|
554
|
+
constructor(code: EnvaptErrorCodes, message: string);
|
|
555
|
+
}
|
|
524
556
|
|
|
525
|
-
export { type AdvancedConverterReturn, type ArrayConverter, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, Converters, Envapt, type EnvaptConverter, EnvaptErrorCodes, type EnvaptOptions, Envapter, Environment, type InferConverterReturnType, type InferPrimitiveFallbackType, type InferPrimitiveReturnType, type JsonValue, type MapOfConverterFunctions, type PermittedDotenvConfig, type PrimitiveConstructor, type TimeUnit, type ValidArrayConverterBuiltInType };
|
|
557
|
+
export { type AdvancedConverterReturn, type ArrayConverter, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, Converters, Envapt, type EnvaptConverter, EnvaptError, EnvaptErrorCodes, type EnvaptOptions, Envapter, Environment, type InferConverterReturnType, type InferPrimitiveFallbackType, type InferPrimitiveReturnType, type JsonValue, type MapOfConverterFunctions, type PermittedDotenvConfig, type PrimitiveConstructor, type TimeUnit, type ValidArrayConverterBuiltInType };
|
package/dist/index.d.ts
CHANGED
|
@@ -493,6 +493,26 @@ declare class AdvancedMethods extends PrimitiveMethods {
|
|
|
493
493
|
* @public
|
|
494
494
|
*/
|
|
495
495
|
declare class Envapter extends AdvancedMethods {
|
|
496
|
+
/**
|
|
497
|
+
* Tagged template literal for resolving environment variables in template strings.
|
|
498
|
+
*
|
|
499
|
+
* @example
|
|
500
|
+
* ```ts
|
|
501
|
+
* // Given API_HOST=api.example.com and API_PORT=8080 in environment
|
|
502
|
+
* const endpoint = Envapter.resolve`Connecting to ${'API_HOST'}:${'API_PORT'}`;
|
|
503
|
+
* // Returns: "Connecting to api.example.com:8080"
|
|
504
|
+
*
|
|
505
|
+
* // Works with template variables in .env too:
|
|
506
|
+
* // API_URL=https://${API_HOST}:${API_PORT}
|
|
507
|
+
* const message = Envapter.resolve`Service endpoint: ${'API_URL'}`;
|
|
508
|
+
* // Returns: "Service endpoint: https://api.example.com:8080"
|
|
509
|
+
* ```
|
|
510
|
+
*/
|
|
511
|
+
static resolve(strings: TemplateStringsArray, ...keys: string[]): string;
|
|
512
|
+
/**
|
|
513
|
+
* @see {@link Envapter.resolve}
|
|
514
|
+
*/
|
|
515
|
+
resolve(strings: TemplateStringsArray, ...keys: string[]): string;
|
|
496
516
|
}
|
|
497
517
|
|
|
498
518
|
declare enum EnvaptErrorCodes {
|
|
@@ -521,5 +541,17 @@ declare enum EnvaptErrorCodes {
|
|
|
521
541
|
/** Thrown when specified environment files don't exist */
|
|
522
542
|
EnvFilesNotFound = 303
|
|
523
543
|
}
|
|
544
|
+
/**
|
|
545
|
+
* Custom error for better DX and debugging when using Envapt.
|
|
546
|
+
*
|
|
547
|
+
* @example
|
|
548
|
+
* ```ts
|
|
549
|
+
* throw new EnvaptError(EnvaptErrorCode.InvalidFallback, "Invalid fallback value provided for environment variable.");
|
|
550
|
+
* ```
|
|
551
|
+
*/
|
|
552
|
+
declare class EnvaptError extends Error {
|
|
553
|
+
readonly code: EnvaptErrorCodes;
|
|
554
|
+
constructor(code: EnvaptErrorCodes, message: string);
|
|
555
|
+
}
|
|
524
556
|
|
|
525
|
-
export { type AdvancedConverterReturn, type ArrayConverter, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, Converters, Envapt, type EnvaptConverter, EnvaptErrorCodes, type EnvaptOptions, Envapter, Environment, type InferConverterReturnType, type InferPrimitiveFallbackType, type InferPrimitiveReturnType, type JsonValue, type MapOfConverterFunctions, type PermittedDotenvConfig, type PrimitiveConstructor, type TimeUnit, type ValidArrayConverterBuiltInType };
|
|
557
|
+
export { type AdvancedConverterReturn, type ArrayConverter, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, Converters, Envapt, type EnvaptConverter, EnvaptError, EnvaptErrorCodes, type EnvaptOptions, Envapter, Environment, type InferConverterReturnType, type InferPrimitiveFallbackType, type InferPrimitiveReturnType, type JsonValue, type MapOfConverterFunctions, type PermittedDotenvConfig, type PrimitiveConstructor, type TimeUnit, type ValidArrayConverterBuiltInType };
|
package/dist/index.mjs
CHANGED
|
@@ -782,17 +782,46 @@ var AdvancedMethods = class _AdvancedMethods extends PrimitiveMethods {
|
|
|
782
782
|
};
|
|
783
783
|
|
|
784
784
|
// src/Envapter.ts
|
|
785
|
-
var Envapter = class extends AdvancedMethods {
|
|
785
|
+
var Envapter = class _Envapter extends AdvancedMethods {
|
|
786
786
|
static {
|
|
787
787
|
__name(this, "Envapter");
|
|
788
788
|
}
|
|
789
|
+
/**
|
|
790
|
+
* Tagged template literal for resolving environment variables in template strings.
|
|
791
|
+
*
|
|
792
|
+
* @example
|
|
793
|
+
* ```ts
|
|
794
|
+
* // Given API_HOST=api.example.com and API_PORT=8080 in environment
|
|
795
|
+
* const endpoint = Envapter.resolve`Connecting to ${'API_HOST'}:${'API_PORT'}`;
|
|
796
|
+
* // Returns: "Connecting to api.example.com:8080"
|
|
797
|
+
*
|
|
798
|
+
* // Works with template variables in .env too:
|
|
799
|
+
* // API_URL=https://${API_HOST}:${API_PORT}
|
|
800
|
+
* const message = Envapter.resolve`Service endpoint: ${'API_URL'}`;
|
|
801
|
+
* // Returns: "Service endpoint: https://api.example.com:8080"
|
|
802
|
+
* ```
|
|
803
|
+
*/
|
|
804
|
+
static resolve(strings, ...keys) {
|
|
805
|
+
return strings.reduce((result, string, i) => {
|
|
806
|
+
const envKey = keys[i];
|
|
807
|
+
const envValue = envKey ? super.get(envKey, "") : "";
|
|
808
|
+
return result + string + envValue;
|
|
809
|
+
}, "");
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* @see {@link Envapter.resolve}
|
|
813
|
+
*/
|
|
814
|
+
resolve(strings, ...keys) {
|
|
815
|
+
return _Envapter.resolve(strings, ...keys);
|
|
816
|
+
}
|
|
789
817
|
};
|
|
790
818
|
|
|
791
819
|
// src/Envapt.ts
|
|
792
820
|
function createPropertyDecorator(key, fallback, converter, hasFallback) {
|
|
793
821
|
return function(target, prop) {
|
|
794
822
|
const propKey = String(prop);
|
|
795
|
-
const
|
|
823
|
+
const className = typeof target === "function" ? target.name : target.constructor.name;
|
|
824
|
+
const cacheKey = `${className}.${propKey}`;
|
|
796
825
|
Object.defineProperty(target, propKey, {
|
|
797
826
|
get: /* @__PURE__ */ __name(function() {
|
|
798
827
|
let value = EnvaptCache.get(cacheKey);
|
|
@@ -845,6 +874,6 @@ var Converters = /* @__PURE__ */ ((Converters2) => {
|
|
|
845
874
|
return Converters2;
|
|
846
875
|
})(Converters || {});
|
|
847
876
|
|
|
848
|
-
export { Converters, Envapt, EnvaptErrorCodes, Envapter, Environment };
|
|
877
|
+
export { Converters, Envapt, EnvaptError, EnvaptErrorCodes, Envapter, Environment };
|
|
849
878
|
//# sourceMappingURL=index.mjs.map
|
|
850
879
|
//# sourceMappingURL=index.mjs.map
|