envapt 5.0.2 → 5.1.0

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.
Files changed (159) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/Debug.cjs +2 -0
  3. package/dist/Debug.cjs.map +1 -0
  4. package/dist/Debug.d.cts +13 -0
  5. package/dist/Debug.d.cts.map +1 -0
  6. package/dist/Debug.d.mts +13 -0
  7. package/dist/Debug.d.mts.map +1 -0
  8. package/dist/Debug.mjs +2 -0
  9. package/dist/Debug.mjs.map +1 -0
  10. package/dist/Dotenv.cjs +3 -0
  11. package/dist/Dotenv.cjs.map +1 -0
  12. package/dist/Dotenv.d.cts +17 -0
  13. package/dist/Dotenv.d.cts.map +1 -0
  14. package/dist/Dotenv.d.mts +17 -0
  15. package/dist/Dotenv.d.mts.map +1 -0
  16. package/dist/Dotenv.mjs +3 -0
  17. package/dist/Dotenv.mjs.map +1 -0
  18. package/dist/Envapter.cjs +2 -0
  19. package/dist/Envapter.cjs.map +1 -0
  20. package/dist/Envapter.d.cts +70 -0
  21. package/dist/Envapter.d.cts.map +1 -0
  22. package/dist/Envapter.d.mts +70 -0
  23. package/dist/Envapter.d.mts.map +1 -0
  24. package/dist/Envapter.mjs +2 -0
  25. package/dist/Envapter.mjs.map +1 -0
  26. package/dist/Error.cjs +2 -0
  27. package/dist/Error.cjs.map +1 -0
  28. package/dist/Error.d.cts +68 -0
  29. package/dist/Error.d.cts.map +1 -0
  30. package/dist/Error.d.mts +68 -0
  31. package/dist/Error.d.mts.map +1 -0
  32. package/dist/Error.mjs +2 -0
  33. package/dist/Error.mjs.map +1 -0
  34. package/dist/StandardSchema.d.cts +59 -0
  35. package/dist/StandardSchema.d.cts.map +1 -0
  36. package/dist/StandardSchema.d.mts +59 -0
  37. package/dist/StandardSchema.d.mts.map +1 -0
  38. package/dist/TemplateResolver.cjs +2 -0
  39. package/dist/TemplateResolver.cjs.map +1 -0
  40. package/dist/TemplateResolver.d.cts +17 -0
  41. package/dist/TemplateResolver.d.cts.map +1 -0
  42. package/dist/TemplateResolver.d.mts +17 -0
  43. package/dist/TemplateResolver.d.mts.map +1 -0
  44. package/dist/TemplateResolver.mjs +2 -0
  45. package/dist/TemplateResolver.mjs.map +1 -0
  46. package/dist/Validators.cjs +2 -0
  47. package/dist/Validators.cjs.map +1 -0
  48. package/dist/Validators.mjs +2 -0
  49. package/dist/Validators.mjs.map +1 -0
  50. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  51. package/dist/config.cjs +1 -1
  52. package/dist/config.cjs.map +1 -1
  53. package/dist/config.mjs +1 -1
  54. package/dist/config.mjs.map +1 -1
  55. package/dist/converters/BuiltInConverters.cjs +2 -0
  56. package/dist/converters/BuiltInConverters.cjs.map +1 -0
  57. package/dist/converters/BuiltInConverters.mjs +2 -0
  58. package/dist/converters/BuiltInConverters.mjs.map +1 -0
  59. package/dist/converters/Converters.cjs +2 -0
  60. package/dist/converters/Converters.cjs.map +1 -0
  61. package/dist/converters/Converters.d.cts +93 -0
  62. package/dist/converters/Converters.d.cts.map +1 -0
  63. package/dist/converters/Converters.d.mts +93 -0
  64. package/dist/converters/Converters.d.mts.map +1 -0
  65. package/dist/converters/Converters.mjs +2 -0
  66. package/dist/converters/Converters.mjs.map +1 -0
  67. package/dist/converters/ListOfBuiltInConverters.cjs +2 -0
  68. package/dist/converters/ListOfBuiltInConverters.cjs.map +1 -0
  69. package/dist/converters/ListOfBuiltInConverters.mjs +2 -0
  70. package/dist/converters/ListOfBuiltInConverters.mjs.map +1 -0
  71. package/dist/converters/ValueConverter.cjs +2 -0
  72. package/dist/converters/ValueConverter.cjs.map +1 -0
  73. package/dist/converters/ValueConverter.d.cts +25 -0
  74. package/dist/converters/ValueConverter.d.cts.map +1 -0
  75. package/dist/converters/ValueConverter.d.mts +25 -0
  76. package/dist/converters/ValueConverter.d.mts.map +1 -0
  77. package/dist/converters/ValueConverter.mjs +2 -0
  78. package/dist/converters/ValueConverter.mjs.map +1 -0
  79. package/dist/core/AdvancedMethods.cjs +2 -0
  80. package/dist/core/AdvancedMethods.cjs.map +1 -0
  81. package/dist/core/AdvancedMethods.d.cts +76 -0
  82. package/dist/core/AdvancedMethods.d.cts.map +1 -0
  83. package/dist/core/AdvancedMethods.d.mts +76 -0
  84. package/dist/core/AdvancedMethods.d.mts.map +1 -0
  85. package/dist/core/AdvancedMethods.mjs +2 -0
  86. package/dist/core/AdvancedMethods.mjs.map +1 -0
  87. package/dist/core/EnvapterBase.cjs +2 -0
  88. package/dist/core/EnvapterBase.cjs.map +1 -0
  89. package/dist/core/EnvapterBase.d.cts +105 -0
  90. package/dist/core/EnvapterBase.d.cts.map +1 -0
  91. package/dist/core/EnvapterBase.d.mts +105 -0
  92. package/dist/core/EnvapterBase.d.mts.map +1 -0
  93. package/dist/core/EnvapterBase.mjs +2 -0
  94. package/dist/core/EnvapterBase.mjs.map +1 -0
  95. package/dist/core/EnvironmentMethods.cjs +2 -0
  96. package/dist/core/EnvironmentMethods.cjs.map +1 -0
  97. package/dist/core/EnvironmentMethods.d.cts +132 -0
  98. package/dist/core/EnvironmentMethods.d.cts.map +1 -0
  99. package/dist/core/EnvironmentMethods.d.mts +132 -0
  100. package/dist/core/EnvironmentMethods.d.mts.map +1 -0
  101. package/dist/core/EnvironmentMethods.mjs +2 -0
  102. package/dist/core/EnvironmentMethods.mjs.map +1 -0
  103. package/dist/core/PrimitiveMethods.cjs +2 -0
  104. package/dist/core/PrimitiveMethods.cjs.map +1 -0
  105. package/dist/core/PrimitiveMethods.d.cts +70 -0
  106. package/dist/core/PrimitiveMethods.d.cts.map +1 -0
  107. package/dist/core/PrimitiveMethods.d.mts +70 -0
  108. package/dist/core/PrimitiveMethods.d.mts.map +1 -0
  109. package/dist/core/PrimitiveMethods.mjs +2 -0
  110. package/dist/core/PrimitiveMethods.mjs.map +1 -0
  111. package/dist/decorators/Envapt.cjs +2 -0
  112. package/dist/decorators/Envapt.cjs.map +1 -0
  113. package/dist/decorators/Envapt.d.cts +233 -0
  114. package/dist/decorators/Envapt.d.cts.map +1 -0
  115. package/dist/decorators/Envapt.d.mts +233 -0
  116. package/dist/decorators/Envapt.d.mts.map +1 -0
  117. package/dist/decorators/Envapt.mjs +2 -0
  118. package/dist/decorators/Envapt.mjs.map +1 -0
  119. package/dist/decorators/SugarDecorators.cjs +2 -0
  120. package/dist/decorators/SugarDecorators.cjs.map +1 -0
  121. package/dist/decorators/SugarDecorators.d.cts +34 -0
  122. package/dist/decorators/SugarDecorators.d.cts.map +1 -0
  123. package/dist/decorators/SugarDecorators.d.mts +34 -0
  124. package/dist/decorators/SugarDecorators.d.mts.map +1 -0
  125. package/dist/decorators/SugarDecorators.mjs +2 -0
  126. package/dist/decorators/SugarDecorators.mjs.map +1 -0
  127. package/dist/decorators/createPropertyDecorator.cjs +2 -0
  128. package/dist/decorators/createPropertyDecorator.cjs.map +1 -0
  129. package/dist/decorators/createPropertyDecorator.mjs +2 -0
  130. package/dist/decorators/createPropertyDecorator.mjs.map +1 -0
  131. package/dist/index.cjs +1 -2
  132. package/dist/index.d.cts +14 -1127
  133. package/dist/index.d.mts +14 -1127
  134. package/dist/index.mjs +1 -2
  135. package/dist/types/Conversion.d.cts +128 -0
  136. package/dist/types/Conversion.d.cts.map +1 -0
  137. package/dist/types/Conversion.d.mts +128 -0
  138. package/dist/types/Conversion.d.mts.map +1 -0
  139. package/dist/types/Env.d.cts +17 -0
  140. package/dist/types/Env.d.cts.map +1 -0
  141. package/dist/types/Env.d.mts +17 -0
  142. package/dist/types/Env.d.mts.map +1 -0
  143. package/dist/types/Options.d.cts +39 -0
  144. package/dist/types/Options.d.cts.map +1 -0
  145. package/dist/types/Options.d.mts +39 -0
  146. package/dist/types/Options.d.mts.map +1 -0
  147. package/dist/types/Schema.d.cts +12 -0
  148. package/dist/types/Schema.d.cts.map +1 -0
  149. package/dist/types/Schema.d.mts +12 -0
  150. package/dist/types/Schema.d.mts.map +1 -0
  151. package/package.json +2 -2
  152. package/dist/Envapter-CBSM3v-5.cjs +0 -3
  153. package/dist/Envapter-CBSM3v-5.cjs.map +0 -1
  154. package/dist/Envapter-D8FEdzBR.mjs +0 -3
  155. package/dist/Envapter-D8FEdzBR.mjs.map +0 -1
  156. package/dist/index.cjs.map +0 -1
  157. package/dist/index.d.cts.map +0 -1
  158. package/dist/index.d.mts.map +0 -1
  159. package/dist/index.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,2 +1 @@
1
- import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./Envapter-D8FEdzBR.mjs";function l(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}function u(e,t){let{fallback:r,converter:i,hasFallback:s,required:u,schema:d}=t;return function(t,f){let p=String(f),m=`${typeof t==`function`?t.name:t.constructor.name}.${p}`;Object.defineProperty(t,p,{get:function(){let t=o.get(m);if(t===void 0){let f=new c;if(u&&d===void 0){let t=f.getRaw(e);if(t===void 0||t.trim()===``)throw new a(305,`Required environment variable "${l(e)}" is missing or empty.`)}let p=new n(f);t=d===void 0?p.convertValue(e,r,i,s):p.convertWithSchema(e,d,r,s),o.set(m,t)}return t},configurable:!1,enumerable:!0})}}function d(t,n,r){let i,o,s,c=!0,l=!1;if(n&&typeof n==`object`&&(`fallback`in n||`converter`in n||`required`in n||`schema`in n)){let t=n;if(i=t.fallback,o=t.converter,c=`fallback`in t,l=t.required===!0,l&&c&&i!==void 0)throw new a(302,"`required: true` and `fallback` are mutually exclusive on @Envapt options. Drop the fallback or call `Envapter.require()` separately.");if(`schema`in t&&t.schema!==void 0){if(!e.isStandardSchema(t.schema))throw new a(302,"`schema` must be a Standard Schema v1 object (zod, valibot, arktype, or any `~standard`-conformant value).");if(o!==void 0)throw new a(302,"`schema` and `converter` are mutually exclusive on @Envapt options. Drop one as they both turn a raw env string into a typed value.");s=t.schema}}else i=n,o=r,c=arguments.length>1;return u(t,{fallback:i,converter:o,hasFallback:c,required:l,schema:s})}function f(e,t,n){return u(t,{converter:e,fallback:n,hasFallback:n!==void 0,required:!1,schema:void 0})}function p(e,n){return f(t.Boolean,e,n)}function m(e,n){return f(t.Number,e,n)}function h(e,n){return f(t.String,e,n)}function g(e,n){return f(t.Time,e,n)}function _(e,n){return f(t.Url,e,n)}export{t as Converters,p as EnvBool,m as EnvNum,h as EnvStr,g as EnvTime,_ as EnvUrl,d as Envapt,a as EnvaptError,s as EnvaptErrorCodes,c as Envapter,i as Environment,r as isArrayOf};
2
- //# sourceMappingURL=index.mjs.map
1
+ import{Converters as e,isArrayOf as t}from"./converters/Converters.mjs";import{EnvaptError as n,EnvaptErrorCodes as r}from"./Error.mjs";import{Environment as i}from"./core/EnvironmentMethods.mjs";import{Envapter as a}from"./Envapter.mjs";import{Envapt as o}from"./decorators/Envapt.mjs";import{EnvBool as s,EnvNum as c,EnvStr as l,EnvTime as u,EnvUrl as d}from"./decorators/SugarDecorators.mjs";export{e as Converters,s as EnvBool,c as EnvNum,l as EnvStr,u as EnvTime,d as EnvUrl,o as Envapt,n as EnvaptError,r as EnvaptErrorCodes,a as Envapter,i as Environment,t as isArrayOf};
@@ -0,0 +1,128 @@
1
+ import { ArrayOf, ConverterToken, CustomElementConverter } from "../converters/Converters.cjs";
2
+
3
+ //#region src/types/Conversion.d.ts
4
+ /**
5
+ * Scalar built-in converter tokens (e.g. `'number'`, `'time'`).
6
+ * Excludes the array builder (see {@link ArrayOf}).
7
+ * @public
8
+ */
9
+ type BuiltInConverter = ConverterToken;
10
+ /**
11
+ * Primitive types supported by Envapter
12
+ * @public
13
+ */
14
+ type PrimitiveConstructor = typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol;
15
+ /**
16
+ * String value from a .env file or environment variable
17
+ * @public
18
+ */
19
+ type BaseInput = string | undefined;
20
+ /**
21
+ * Custom parser function type for environment variables
22
+ * @param raw - Raw string value from environment
23
+ * @param fallback - Fallback value if parsing fails
24
+ * @returns Parsed value of type T
25
+ * @public
26
+ */
27
+ type ConverterFunction<TFallback = unknown> = (raw: BaseInput, fallback?: TFallback) => TFallback;
28
+ /**
29
+ * Environment variable converter: a primitive constructor, a built-in scalar token, an `ArrayOf<...>`
30
+ * produced by {@link Converters.array}, or a custom parser function.
31
+ * @public
32
+ */
33
+ type EnvaptConverter<TFallback> = PrimitiveConstructor | BuiltInConverter | ArrayOf | ConverterFunction<TFallback>;
34
+ type JsonPrimitive = string | number | boolean | null;
35
+ type JsonArray = JsonValue[];
36
+ interface JsonObject {
37
+ [key: string]: JsonValue;
38
+ }
39
+ /**
40
+ * JSON value types for custom converters
41
+ * @public
42
+ */
43
+ type JsonValue = JsonPrimitive | JsonArray | JsonObject;
44
+ interface ConverterMap {
45
+ string: string;
46
+ number: number;
47
+ boolean: boolean;
48
+ bigint: bigint;
49
+ symbol: symbol;
50
+ integer: number;
51
+ float: number;
52
+ json: JsonValue;
53
+ url: URL;
54
+ regexp: RegExp;
55
+ date: Date;
56
+ time: number;
57
+ }
58
+ /**
59
+ * Type mapping for built-in scalar converters to their return types
60
+ * @internal
61
+ */
62
+ type BuiltInConverterReturnType<ConverterKey extends BuiltInConverter> = ConverterMap[ConverterKey];
63
+ /**
64
+ * Return type for built-in converter functions
65
+ * @internal
66
+ */
67
+ type ReturnValuesOfConverterFunctions = ConverterMap[BuiltInConverter];
68
+ /**
69
+ * Function type for built-in converter functions
70
+ * @internal
71
+ */
72
+ type BuiltInConverterFunction = (...args: Parameters<(...args: any[]) => ReturnValuesOfConverterFunctions>) => ReturnValuesOfConverterFunctions | undefined;
73
+ /**
74
+ * Map of built-in converter functions
75
+ * @internal
76
+ */
77
+ type MapOfConverterFunctions = Record<BuiltInConverter, BuiltInConverterFunction>;
78
+ /**
79
+ * Time unit types for duration conversions
80
+ * @internal
81
+ */
82
+ type TimeUnit = 'ms' | 's' | 'm' | 'h' | 'd' | 'w';
83
+ /**
84
+ * Fallback type for time duration conversions
85
+ * @public
86
+ */
87
+ type TimeFallback = number | `${number}${TimeUnit}`;
88
+ /**
89
+ * Helper type for getter methods that conditionally return undefined based on whether a fallback is provided
90
+ * If fallback is provided, return ReturnType. If no fallback (undefined), return ReturnType | undefined.
91
+ * @internal
92
+ */
93
+ type ConditionalReturn<ReturnType, TFallback> = TFallback extends undefined ? ReturnType | undefined : ReturnType;
94
+ /**
95
+ * Inferred return type for a converter.
96
+ *
97
+ * - `ArrayOf<E>` resolves to the element type's return as an array. When `E` is a custom
98
+ * function, the function's return type drives the array element. When `E` is a scalar
99
+ * token, `ConverterMap` provides the element type.
100
+ * - Bare scalar tokens resolve through `ConverterMap`.
101
+ * @internal
102
+ */
103
+ type InferConverterReturnType<TConverter> = TConverter extends ArrayOf<infer Element> ? Element extends BuiltInConverter ? ConverterMap[Element][] : Element extends CustomElementConverter<infer Returned> ? Returned[] : never : TConverter extends BuiltInConverter ? BuiltInConverterReturnType<TConverter> : never;
104
+ /**
105
+ * Type inference for the *fallback* slot of a converter. `Converters.Time` (scalar or array
106
+ * element) accepts {@link TimeFallback} / `TimeFallback[]`; everything else mirrors the
107
+ * return type. Add future asymmetric fallback/return converters to this conditional.
108
+ * @internal
109
+ */
110
+ type InferConverterFallbackType<TConverter> = TConverter extends 'time' ? TimeFallback : TConverter extends ArrayOf<infer Element> ? Element extends 'time' ? TimeFallback[] : InferConverterReturnType<TConverter> : InferConverterReturnType<TConverter>;
111
+ /**
112
+ * Complete type inference for advanced converter methods
113
+ * @internal
114
+ */
115
+ type AdvancedConverterReturn<TConverter, TFallback = undefined> = ConditionalReturn<InferConverterReturnType<TConverter>, TFallback>;
116
+ /**
117
+ * Type inference for primitive constructor return types
118
+ * @internal
119
+ */
120
+ type InferPrimitiveReturnType<TConstructor extends PrimitiveConstructor> = TConstructor extends typeof String ? string : TConstructor extends typeof Number ? number : TConstructor extends typeof Boolean ? boolean : TConstructor extends typeof BigInt ? bigint : TConstructor extends typeof Symbol ? symbol : never;
121
+ /**
122
+ * Type inference for primitive fallback values
123
+ * @internal
124
+ */
125
+ type InferPrimitiveFallbackType<TFallback extends string | number | boolean | bigint | symbol | undefined> = TFallback extends string ? string : TFallback extends number ? number : TFallback extends boolean ? boolean : TFallback extends bigint ? bigint : TFallback extends symbol ? symbol : undefined;
126
+ //#endregion
127
+ export type { AdvancedConverterReturn, BuiltInConverter, BuiltInConverterFunction, ConditionalReturn, ConverterFunction, EnvaptConverter, InferConverterFallbackType, InferConverterReturnType, InferPrimitiveFallbackType, InferPrimitiveReturnType, JsonValue, MapOfConverterFunctions, PrimitiveConstructor, TimeFallback, TimeUnit };
128
+ //# sourceMappingURL=Conversion.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Conversion.d.cts","names":[],"sources":["../../src/types/Conversion.ts"],"mappings":";;;;;AAAgG;;;KAO3F,gBAAA,GAAmB,cAAc;AAAA;AAAA;;;AAAA,KAMjC,oBAAA,UAA8B,MAAA,UAAgB,MAAA,UAAgB,OAAA,UAAiB,MAAA,UAAgB,MAAA;;;;;KAM/F,SAAA;;;;;;;;KASA,iBAAA,yBAA0C,GAAA,EAAK,SAAA,EAAW,QAAA,GAAW,SAAA,KAAc,SAAA;AAfkB;;;;AAM5F;AAN4F,KAsBrG,eAAA,cAA6B,oBAAA,GAAuB,gBAAA,GAAmB,OAAA,GAAU,iBAAA,CAAkB,SAAA;AAAA,KAEnG,aAAA;AAAA,KACA,SAAA,GAAY,SAAS;AAAA,UAChB,UAAA;EAAA,CACL,GAAA,WAAc,SAAS;AAAA;;;;;KAOvB,SAAA,GAAY,aAAA,GAAgB,SAAA,GAAY,UAAA;AAAA,UAEnC,YAAA;EACN,MAAA;EACA,MAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,OAAA;EACA,KAAA;EACA,IAAA,EAAM,SAAA;EACN,GAAA,EAAK,GAAA;EACL,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,IAAA;EACN,IAAA;AAAA;;;;;KAOC,0BAAA,sBAAgD,gBAAA,IAAoB,YAAA,CAAa,YAAA;;;;AAjC2B;KAuC5G,gCAAA,GAAmC,YAAA,CAAa,gBAAgB;;;;AArCnD;KA2Cb,wBAAA,OACE,IAAA,EAAM,UAAA,KAAe,IAAA,YAAgB,gCAAA,MACvC,gCAAA;;;;AA5CqB;KAkDrB,uBAAA,GAA0B,MAAA,CAAO,gBAAA,EAAkB,wBAAA;;;;AAhD5B;KAsDvB,QAAA;;;;;KAMA,YAAA,wBAAoC,QAAQ;;;;;;KAO5C,iBAAA,0BAA2C,SAAA,qBAA8B,UAAA,eAAyB,UAAA;AA5DhD;AAAA;;;;;;;;AAAA,KAuElD,wBAAA,eACD,UAAA,SAAmB,OAAA,kBACb,OAAA,SAAgB,gBAAA,GACZ,YAAA,CAAa,OAAA,MACb,OAAA,SAAgB,sBAAA,mBACd,QAAA,aAEN,UAAA,SAAmB,gBAAA,GACjB,0BAAA,CAA2B,UAAA;;;;;;;KASlC,0BAAA,eAAyC,UAAA,kBACxC,YAAA,GACA,UAAA,SAAmB,OAAA,kBACjB,OAAA,kBACI,YAAA,KACA,wBAAA,CAAyB,UAAA,IAC7B,wBAAA,CAAyB,UAAA;;;;;KAM5B,uBAAA,sCAA6D,iBAAA,CAC9D,wBAAA,CAAyB,UAAA,GACzB,SAAA;;;;;KAOC,wBAAA,sBAA8C,oBAAA,IAAwB,YAAA,gBAA4B,MAAA,YAEjG,YAAA,gBAA4B,MAAA,YAE1B,YAAA,gBAA4B,OAAA,aAE1B,YAAA,gBAA4B,MAAA,YAE1B,YAAA,gBAA4B,MAAA;AAvGhC;AAAA;;;AAAA,KA+GH,0BAAA,8EACD,SAAA,2BAEM,SAAA,2BAEE,SAAA,6BAEE,SAAA,2BAEE,SAAA"}
@@ -0,0 +1,128 @@
1
+ import { ArrayOf, ConverterToken, CustomElementConverter } from "../converters/Converters.mjs";
2
+
3
+ //#region src/types/Conversion.d.ts
4
+ /**
5
+ * Scalar built-in converter tokens (e.g. `'number'`, `'time'`).
6
+ * Excludes the array builder (see {@link ArrayOf}).
7
+ * @public
8
+ */
9
+ type BuiltInConverter = ConverterToken;
10
+ /**
11
+ * Primitive types supported by Envapter
12
+ * @public
13
+ */
14
+ type PrimitiveConstructor = typeof String | typeof Number | typeof Boolean | typeof BigInt | typeof Symbol;
15
+ /**
16
+ * String value from a .env file or environment variable
17
+ * @public
18
+ */
19
+ type BaseInput = string | undefined;
20
+ /**
21
+ * Custom parser function type for environment variables
22
+ * @param raw - Raw string value from environment
23
+ * @param fallback - Fallback value if parsing fails
24
+ * @returns Parsed value of type T
25
+ * @public
26
+ */
27
+ type ConverterFunction<TFallback = unknown> = (raw: BaseInput, fallback?: TFallback) => TFallback;
28
+ /**
29
+ * Environment variable converter: a primitive constructor, a built-in scalar token, an `ArrayOf<...>`
30
+ * produced by {@link Converters.array}, or a custom parser function.
31
+ * @public
32
+ */
33
+ type EnvaptConverter<TFallback> = PrimitiveConstructor | BuiltInConverter | ArrayOf | ConverterFunction<TFallback>;
34
+ type JsonPrimitive = string | number | boolean | null;
35
+ type JsonArray = JsonValue[];
36
+ interface JsonObject {
37
+ [key: string]: JsonValue;
38
+ }
39
+ /**
40
+ * JSON value types for custom converters
41
+ * @public
42
+ */
43
+ type JsonValue = JsonPrimitive | JsonArray | JsonObject;
44
+ interface ConverterMap {
45
+ string: string;
46
+ number: number;
47
+ boolean: boolean;
48
+ bigint: bigint;
49
+ symbol: symbol;
50
+ integer: number;
51
+ float: number;
52
+ json: JsonValue;
53
+ url: URL;
54
+ regexp: RegExp;
55
+ date: Date;
56
+ time: number;
57
+ }
58
+ /**
59
+ * Type mapping for built-in scalar converters to their return types
60
+ * @internal
61
+ */
62
+ type BuiltInConverterReturnType<ConverterKey extends BuiltInConverter> = ConverterMap[ConverterKey];
63
+ /**
64
+ * Return type for built-in converter functions
65
+ * @internal
66
+ */
67
+ type ReturnValuesOfConverterFunctions = ConverterMap[BuiltInConverter];
68
+ /**
69
+ * Function type for built-in converter functions
70
+ * @internal
71
+ */
72
+ type BuiltInConverterFunction = (...args: Parameters<(...args: any[]) => ReturnValuesOfConverterFunctions>) => ReturnValuesOfConverterFunctions | undefined;
73
+ /**
74
+ * Map of built-in converter functions
75
+ * @internal
76
+ */
77
+ type MapOfConverterFunctions = Record<BuiltInConverter, BuiltInConverterFunction>;
78
+ /**
79
+ * Time unit types for duration conversions
80
+ * @internal
81
+ */
82
+ type TimeUnit = 'ms' | 's' | 'm' | 'h' | 'd' | 'w';
83
+ /**
84
+ * Fallback type for time duration conversions
85
+ * @public
86
+ */
87
+ type TimeFallback = number | `${number}${TimeUnit}`;
88
+ /**
89
+ * Helper type for getter methods that conditionally return undefined based on whether a fallback is provided
90
+ * If fallback is provided, return ReturnType. If no fallback (undefined), return ReturnType | undefined.
91
+ * @internal
92
+ */
93
+ type ConditionalReturn<ReturnType, TFallback> = TFallback extends undefined ? ReturnType | undefined : ReturnType;
94
+ /**
95
+ * Inferred return type for a converter.
96
+ *
97
+ * - `ArrayOf<E>` resolves to the element type's return as an array. When `E` is a custom
98
+ * function, the function's return type drives the array element. When `E` is a scalar
99
+ * token, `ConverterMap` provides the element type.
100
+ * - Bare scalar tokens resolve through `ConverterMap`.
101
+ * @internal
102
+ */
103
+ type InferConverterReturnType<TConverter> = TConverter extends ArrayOf<infer Element> ? Element extends BuiltInConverter ? ConverterMap[Element][] : Element extends CustomElementConverter<infer Returned> ? Returned[] : never : TConverter extends BuiltInConverter ? BuiltInConverterReturnType<TConverter> : never;
104
+ /**
105
+ * Type inference for the *fallback* slot of a converter. `Converters.Time` (scalar or array
106
+ * element) accepts {@link TimeFallback} / `TimeFallback[]`; everything else mirrors the
107
+ * return type. Add future asymmetric fallback/return converters to this conditional.
108
+ * @internal
109
+ */
110
+ type InferConverterFallbackType<TConverter> = TConverter extends 'time' ? TimeFallback : TConverter extends ArrayOf<infer Element> ? Element extends 'time' ? TimeFallback[] : InferConverterReturnType<TConverter> : InferConverterReturnType<TConverter>;
111
+ /**
112
+ * Complete type inference for advanced converter methods
113
+ * @internal
114
+ */
115
+ type AdvancedConverterReturn<TConverter, TFallback = undefined> = ConditionalReturn<InferConverterReturnType<TConverter>, TFallback>;
116
+ /**
117
+ * Type inference for primitive constructor return types
118
+ * @internal
119
+ */
120
+ type InferPrimitiveReturnType<TConstructor extends PrimitiveConstructor> = TConstructor extends typeof String ? string : TConstructor extends typeof Number ? number : TConstructor extends typeof Boolean ? boolean : TConstructor extends typeof BigInt ? bigint : TConstructor extends typeof Symbol ? symbol : never;
121
+ /**
122
+ * Type inference for primitive fallback values
123
+ * @internal
124
+ */
125
+ type InferPrimitiveFallbackType<TFallback extends string | number | boolean | bigint | symbol | undefined> = TFallback extends string ? string : TFallback extends number ? number : TFallback extends boolean ? boolean : TFallback extends bigint ? bigint : TFallback extends symbol ? symbol : undefined;
126
+ //#endregion
127
+ export type { AdvancedConverterReturn, BuiltInConverter, BuiltInConverterFunction, ConditionalReturn, ConverterFunction, EnvaptConverter, InferConverterFallbackType, InferConverterReturnType, InferPrimitiveFallbackType, InferPrimitiveReturnType, JsonValue, MapOfConverterFunctions, PrimitiveConstructor, TimeFallback, TimeUnit };
128
+ //# sourceMappingURL=Conversion.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Conversion.d.mts","names":[],"sources":["../../src/types/Conversion.ts"],"mappings":";;;;;AAAgG;;;KAO3F,gBAAA,GAAmB,cAAc;AAAA;AAAA;;;AAAA,KAMjC,oBAAA,UAA8B,MAAA,UAAgB,MAAA,UAAgB,OAAA,UAAiB,MAAA,UAAgB,MAAA;;;;;KAM/F,SAAA;;;;;;;;KASA,iBAAA,yBAA0C,GAAA,EAAK,SAAA,EAAW,QAAA,GAAW,SAAA,KAAc,SAAA;AAfkB;;;;AAM5F;AAN4F,KAsBrG,eAAA,cAA6B,oBAAA,GAAuB,gBAAA,GAAmB,OAAA,GAAU,iBAAA,CAAkB,SAAA;AAAA,KAEnG,aAAA;AAAA,KACA,SAAA,GAAY,SAAS;AAAA,UAChB,UAAA;EAAA,CACL,GAAA,WAAc,SAAS;AAAA;;;;;KAOvB,SAAA,GAAY,aAAA,GAAgB,SAAA,GAAY,UAAA;AAAA,UAEnC,YAAA;EACN,MAAA;EACA,MAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,OAAA;EACA,KAAA;EACA,IAAA,EAAM,SAAA;EACN,GAAA,EAAK,GAAA;EACL,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,IAAA;EACN,IAAA;AAAA;;;;;KAOC,0BAAA,sBAAgD,gBAAA,IAAoB,YAAA,CAAa,YAAA;;;;AAjC2B;KAuC5G,gCAAA,GAAmC,YAAA,CAAa,gBAAgB;;;;AArCnD;KA2Cb,wBAAA,OACE,IAAA,EAAM,UAAA,KAAe,IAAA,YAAgB,gCAAA,MACvC,gCAAA;;;;AA5CqB;KAkDrB,uBAAA,GAA0B,MAAA,CAAO,gBAAA,EAAkB,wBAAA;;;;AAhD5B;KAsDvB,QAAA;;;;;KAMA,YAAA,wBAAoC,QAAQ;;;;;;KAO5C,iBAAA,0BAA2C,SAAA,qBAA8B,UAAA,eAAyB,UAAA;AA5DhD;AAAA;;;;;;;;AAAA,KAuElD,wBAAA,eACD,UAAA,SAAmB,OAAA,kBACb,OAAA,SAAgB,gBAAA,GACZ,YAAA,CAAa,OAAA,MACb,OAAA,SAAgB,sBAAA,mBACd,QAAA,aAEN,UAAA,SAAmB,gBAAA,GACjB,0BAAA,CAA2B,UAAA;;;;;;;KASlC,0BAAA,eAAyC,UAAA,kBACxC,YAAA,GACA,UAAA,SAAmB,OAAA,kBACjB,OAAA,kBACI,YAAA,KACA,wBAAA,CAAyB,UAAA,IAC7B,wBAAA,CAAyB,UAAA;;;;;KAM5B,uBAAA,sCAA6D,iBAAA,CAC9D,wBAAA,CAAyB,UAAA,GACzB,SAAA;;;;;KAOC,wBAAA,sBAA8C,oBAAA,IAAwB,YAAA,gBAA4B,MAAA,YAEjG,YAAA,gBAA4B,MAAA,YAE1B,YAAA,gBAA4B,OAAA,aAE1B,YAAA,gBAA4B,MAAA,YAE1B,YAAA,gBAA4B,MAAA;AAvGhC;AAAA;;;AAAA,KA+GH,0BAAA,8EACD,SAAA,2BAEM,SAAA,2BAEE,SAAA,6BAEE,SAAA,2BAEE,SAAA"}
@@ -0,0 +1,17 @@
1
+ //#region src/types/Env.d.ts
2
+ /**
3
+ * Accepted shape for environment variable lookups. Either a single key or an ordered list of keys.
4
+ * @public
5
+ */
6
+ type EnvKeyInput = string | readonly [string, ...string[]];
7
+ /**
8
+ * @internal
9
+ */
10
+ interface EnvapterService {
11
+ getRaw(key: EnvKeyInput): string | undefined;
12
+ get(key: EnvKeyInput, def?: string): string | undefined;
13
+ isStrict(): boolean;
14
+ }
15
+ //#endregion
16
+ export type { EnvKeyInput, EnvapterService };
17
+ //# sourceMappingURL=Env.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Env.d.cts","names":[],"sources":["../../src/types/Env.ts"],"mappings":";;;;;KAIK,WAAA;AAAW;AAAA;;AAAA,UAKN,eAAA;EACN,MAAA,CAAO,GAAA,EAAK,WAAA;EACZ,GAAA,CAAI,GAAA,EAAK,WAAW,EAAE,GAAA;EACtB,QAAA;AAAA"}
@@ -0,0 +1,17 @@
1
+ //#region src/types/Env.d.ts
2
+ /**
3
+ * Accepted shape for environment variable lookups. Either a single key or an ordered list of keys.
4
+ * @public
5
+ */
6
+ type EnvKeyInput = string | readonly [string, ...string[]];
7
+ /**
8
+ * @internal
9
+ */
10
+ interface EnvapterService {
11
+ getRaw(key: EnvKeyInput): string | undefined;
12
+ get(key: EnvKeyInput, def?: string): string | undefined;
13
+ isStrict(): boolean;
14
+ }
15
+ //#endregion
16
+ export type { EnvKeyInput, EnvapterService };
17
+ //# sourceMappingURL=Env.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Env.d.mts","names":[],"sources":["../../src/types/Env.ts"],"mappings":";;;;;KAIK,WAAA;AAAW;AAAA;;AAAA,UAKN,eAAA;EACN,MAAA,CAAO,GAAA,EAAK,WAAA;EACZ,GAAA,CAAI,GAAA,EAAK,WAAW,EAAE,GAAA;EACtB,QAAA;AAAA"}
@@ -0,0 +1,39 @@
1
+ import { EnvaptConverter } from "./Conversion.cjs";
2
+ import { Environment } from "../core/EnvironmentMethods.cjs";
3
+
4
+ //#region src/types/Options.d.ts
5
+ /**
6
+ * Options for the \@Envapt decorator (modern API). `required: true` is mutually exclusive
7
+ * with `fallback`; see the per-converter overloads in `Envapt.ts` for the type-level mutex.
8
+ * @public
9
+ */
10
+ interface EnvaptOptions<TFallback = string> {
11
+ fallback?: TFallback;
12
+ converter?: EnvaptConverter<TFallback>;
13
+ required?: boolean;
14
+ }
15
+ /**
16
+ * Per-environment profile entry passed to {@link configureProfiles}.
17
+ * @public
18
+ */
19
+ interface EnvProfile {
20
+ /** One or more `.env` paths to load for this environment. Order matters: earlier paths take precedence. */
21
+ paths: string | string[];
22
+ }
23
+ /**
24
+ * Configuration object for {@link configureProfiles}. Maps each `Environment` to an optional
25
+ * profile override. Unspecified environments fall through to the default cascade behavior
26
+ * (`.env.${env}.local`, `.env.local`, `.env.${env}`, `.env`).
27
+ * @public
28
+ */
29
+ type ProfilesConfig = Partial<Record<Environment, EnvProfile>> & {
30
+ /**
31
+ * When `false`, disables the default dotenv-flow cascade entirely. Only the explicitly
32
+ * configured paths are loaded. Defaults to `true` (cascade still runs, configured paths
33
+ * are layered on top with higher precedence).
34
+ */
35
+ useDefaults?: boolean;
36
+ };
37
+ //#endregion
38
+ export type { EnvProfile, EnvaptOptions, ProfilesConfig };
39
+ //# sourceMappingURL=Options.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Options.d.cts","names":[],"sources":["../../src/types/Options.ts"],"mappings":";;;;;;AAC8D;;;UAOpD,aAAA;EACN,QAAA,GAAW,SAAA;EACX,SAAA,GAAY,eAAA,CAAgB,SAAA;EAC5B,QAAA;AAAA;;;;;UAOM,UAAA;EARsB;EAU5B,KAAK;AAAA;AATG;AAAA;;;;AASH;AATG,KAkBP,cAAA,GAAiB,OAAA,CAAQ,MAAA,CAAO,WAAA,EAAa,UAAA;EAA/B;;;;;EAMf,WAAA;AAAA"}
@@ -0,0 +1,39 @@
1
+ import { EnvaptConverter } from "./Conversion.mjs";
2
+ import { Environment } from "../core/EnvironmentMethods.mjs";
3
+
4
+ //#region src/types/Options.d.ts
5
+ /**
6
+ * Options for the \@Envapt decorator (modern API). `required: true` is mutually exclusive
7
+ * with `fallback`; see the per-converter overloads in `Envapt.ts` for the type-level mutex.
8
+ * @public
9
+ */
10
+ interface EnvaptOptions<TFallback = string> {
11
+ fallback?: TFallback;
12
+ converter?: EnvaptConverter<TFallback>;
13
+ required?: boolean;
14
+ }
15
+ /**
16
+ * Per-environment profile entry passed to {@link configureProfiles}.
17
+ * @public
18
+ */
19
+ interface EnvProfile {
20
+ /** One or more `.env` paths to load for this environment. Order matters: earlier paths take precedence. */
21
+ paths: string | string[];
22
+ }
23
+ /**
24
+ * Configuration object for {@link configureProfiles}. Maps each `Environment` to an optional
25
+ * profile override. Unspecified environments fall through to the default cascade behavior
26
+ * (`.env.${env}.local`, `.env.local`, `.env.${env}`, `.env`).
27
+ * @public
28
+ */
29
+ type ProfilesConfig = Partial<Record<Environment, EnvProfile>> & {
30
+ /**
31
+ * When `false`, disables the default dotenv-flow cascade entirely. Only the explicitly
32
+ * configured paths are loaded. Defaults to `true` (cascade still runs, configured paths
33
+ * are layered on top with higher precedence).
34
+ */
35
+ useDefaults?: boolean;
36
+ };
37
+ //#endregion
38
+ export type { EnvProfile, EnvaptOptions, ProfilesConfig };
39
+ //# sourceMappingURL=Options.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Options.d.mts","names":[],"sources":["../../src/types/Options.ts"],"mappings":";;;;;;AAC8D;;;UAOpD,aAAA;EACN,QAAA,GAAW,SAAA;EACX,SAAA,GAAY,eAAA,CAAgB,SAAA;EAC5B,QAAA;AAAA;;;;;UAOM,UAAA;EARsB;EAU5B,KAAK;AAAA;AATG;AAAA;;;;AASH;AATG,KAkBP,cAAA,GAAiB,OAAA,CAAQ,MAAA,CAAO,WAAA,EAAa,UAAA;EAA/B;;;;;EAMf,WAAA;AAAA"}
@@ -0,0 +1,12 @@
1
+ import { StandardSchemaV1 } from "../StandardSchema.cjs";
2
+
3
+ //#region src/types/Schema.d.ts
4
+ declare const _envaptErrBrand: unique symbol;
5
+ type Err<Msg extends string> = Msg & {
6
+ readonly [_envaptErrBrand]: never;
7
+ };
8
+ type SchemaMustBeSync = Err<'Schema must be synchronous. envapt is boot-time config loading; async refinements (validate returning `Promise<Result>`) belong outside the env layer.'>;
9
+ type SchemaConstraint<Schema extends StandardSchemaV1> = ReturnType<Schema['~standard']['validate']> extends Promise<unknown> ? SchemaMustBeSync : Schema;
10
+ //#endregion
11
+ export type { Err, SchemaConstraint, SchemaMustBeSync };
12
+ //# sourceMappingURL=Schema.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.cts","names":[],"sources":["../../src/types/Schema.ts"],"mappings":";;;cAKc,eAAA;AAAA,KACT,GAAA,uBAA0B,GAAA;EAAA,UAAkB,eAAe;AAAA;AAAA,KAE3D,gBAAA,GACD,GAAG;AAAA,KAIF,gBAAA,gBAAgC,gBAAA,IACjC,UAAA,CAAW,MAAA,mCAAyC,OAAA,YAAmB,gBAAA,GAAmB,MAAA"}
@@ -0,0 +1,12 @@
1
+ import { StandardSchemaV1 } from "../StandardSchema.mjs";
2
+
3
+ //#region src/types/Schema.d.ts
4
+ declare const _envaptErrBrand: unique symbol;
5
+ type Err<Msg extends string> = Msg & {
6
+ readonly [_envaptErrBrand]: never;
7
+ };
8
+ type SchemaMustBeSync = Err<'Schema must be synchronous. envapt is boot-time config loading; async refinements (validate returning `Promise<Result>`) belong outside the env layer.'>;
9
+ type SchemaConstraint<Schema extends StandardSchemaV1> = ReturnType<Schema['~standard']['validate']> extends Promise<unknown> ? SchemaMustBeSync : Schema;
10
+ //#endregion
11
+ export type { Err, SchemaConstraint, SchemaMustBeSync };
12
+ //# sourceMappingURL=Schema.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.mts","names":[],"sources":["../../src/types/Schema.ts"],"mappings":";;;cAKc,eAAA;AAAA,KACT,GAAA,uBAA0B,GAAA;EAAA,UAAkB,eAAe;AAAA;AAAA,KAE3D,gBAAA,GACD,GAAG;AAAA,KAIF,gBAAA,gBAAgC,gBAAA,IACjC,UAAA,CAAW,MAAA,mCAAyC,OAAA,YAAmB,gBAAA,GAAmB,MAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "envapt",
3
3
  "type": "module",
4
- "version": "5.0.2",
4
+ "version": "5.1.0",
5
5
  "description": "Type-safe environment variables for TypeScript. Zero-dependency .env loader and parser with the same API on Node, Bun, and Deno. Decorators, converters, and Standard Schema (zod/valibot/arktype) validation.",
6
6
  "types": "./dist/index.d.mts",
7
7
  "exports": {
@@ -41,7 +41,7 @@
41
41
  "type": "git",
42
42
  "url": "https://github.com/materwelonDhruv/envapt.git"
43
43
  },
44
- "homepage": "https://github.com/materwelonDhruv/envapt/blob/main/README.md",
44
+ "homepage": "https://envapt.materwelon.dev",
45
45
  "keywords": [
46
46
  "env",
47
47
  ".env",
@@ -1,3 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("node:fs");c=s(c,1);let l=require("node:path"),u=require("node:process");u=s(u,1);let d=require("node:url");const f={String:`string`,Number:`number`,Boolean:`boolean`,Bigint:`bigint`,Symbol:`symbol`,Integer:`integer`,Float:`float`,Json:`json`,Url:`url`,Regexp:`regexp`,Date:`date`,Time:`time`};function p(e){return typeof e==`object`&&!!e&&`__envaptKind`in e&&e.__envaptKind===`array`}function m(e){return{__envaptKind:`array`,of:e?.of??f.String,delimiter:e?.delimiter??`,`}}const h={...f,array:m};let g=function(e){return e[e.InvalidFallback=101]=`InvalidFallback`,e[e.InvalidFallbackType=102]=`InvalidFallbackType`,e[e.ArrayFallbackElementTypeMismatch=103]=`ArrayFallbackElementTypeMismatch`,e[e.FallbackConverterTypeMismatch=104]=`FallbackConverterTypeMismatch`,e[e.MalformedTimeFallback=105]=`MalformedTimeFallback`,e[e.InvalidArrayConverterType=201]=`InvalidArrayConverterType`,e[e.InvalidBuiltInConverter=202]=`InvalidBuiltInConverter`,e[e.InvalidCustomConverter=203]=`InvalidCustomConverter`,e[e.InvalidConverterType=204]=`InvalidConverterType`,e[e.PrimitiveCoercionFailed=205]=`PrimitiveCoercionFailed`,e[e.ArrayElementConversionFailed=206]=`ArrayElementConversionFailed`,e[e.EmptyArrayElement=207]=`EmptyArrayElement`,e[e.SchemaValidationFailed=208]=`SchemaValidationFailed`,e[e.SchemaThrew=209]=`SchemaThrew`,e[e.MissingDelimiter=301]=`MissingDelimiter`,e[e.InvalidUserDefinedConfig=302]=`InvalidUserDefinedConfig`,e[e.EnvFilesNotFound=303]=`EnvFilesNotFound`,e[e.InvalidKeyInput=304]=`InvalidKeyInput`,e[e.MissingEnvValue=305]=`MissingEnvValue`,e}({});var _=class extends Error{code;issues;constructor(e,t,n){super(t,n?.cause===void 0?void 0:{cause:n.cause}),this.name=`EnvaptError [${e}]`,this.code=e,this.issues=n?.issues}};const v=1e3,y=60*v,b=60*y,x=24*b,ee={ms:1,s:v,m:y,h:b,d:x,w:7*x},S=new RegExp(String.raw`^(\d+(?:\.\d+)?)(ms|s|m|h|d|w)?$`,`u`),C=new RegExp(String.raw`^(\d+)(ms|s|m|h|d|w)$`,`u`);function w(e,t=!1){let n=e.match(t?C:S);if(!n)return;let[,r,i]=n;if(!r)return;let a=Number.parseFloat(r);if(!Number.isNaN(a))return a*ee[i??`ms`]}var T=class e{static string(e,t){return String(e)}static number(e,t){let n=Number(e);return Number.isNaN(n)?t:n}static boolean(e,t){let n=e.toLowerCase().trim();return[`1`,`yes`,`true`,`on`].includes(n)?!0:[`0`,`no`,`false`,`off`].includes(n)?!1:t}static bigint(e,t){try{return BigInt(e)}catch{return t}}static symbol(e,t){try{return e?Symbol.for(e):t}catch{return t}}static integer(e,t){let n=Number.parseInt(e,10);return Number.isNaN(n)?t:n}static float(e,t){let n=Number.parseFloat(e);return Number.isNaN(n)?t:n}static json(e,t){try{return JSON.parse(e)}catch{return t}}static url(e,t){try{return new URL(e)}catch{return t}}static regexp(e,t){try{let t=e.match(new RegExp(String.raw`^\/(.+)\/([gimsuvy]*)$`));return t?new RegExp(t[1],t[2]):new RegExp(e)}catch{return t}}static date(e,t){if(new RegExp(String.raw`^\d+$`).test(e)){let n=new Date(parseInt(e,10));return Number.isNaN(n.getTime())?t:n}if(!new RegExp(String.raw`^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$`,`u`).test(e))return t;let n=new Date(e);return Number.isNaN(n.getTime())?t:n}static time(e,t){let n=w(e);if(n!==void 0)return n;if(typeof t==`number`)return t;if(typeof t==`string`){let e=w(t,!0);if(e===void 0)throw new _(105,`Time-string fallback "${t}" is not a valid format. Expected <integer><unit> where unit is one of: ms, s, m, h, d, w.`);return e}}static processArrayConverter(t,n,r=!1){if(t.trim()===``)return[];let i=t.split(n.delimiter).map(e=>String(e).trim());if(r){let e=i.findIndex(e=>e===``);if(e!==-1)throw new _(207,`Array element at index ${e} is empty or whitespace only (strict mode).`)}let a=i.filter(Boolean);if(!a.length)return[];let o=n.of;if(typeof o==`function`)return a.map((e,t)=>{let n=o(e);if(n===void 0)throw new _(206,`Custom element converter returned undefined for item "${e}" at index ${t}.`);return n});let s=e.getConverter(o);return a.map((e,t)=>{let n=s(e,void 0);if(n===void 0)throw new _(206,`Element "${e}" at index ${t} could not be converted to ${o}.`);return n})}static getConverter(t){return{string:e.string,number:e.number,boolean:e.boolean,integer:e.integer,bigint:e.bigint,symbol:e.symbol,float:e.float,json:e.json,url:e.url,regexp:e.regexp,date:e.date,time:e.time}[t]}};const E=[`string`,`number`,`boolean`,`bigint`,`symbol`,`integer`,`float`,`json`,`url`,`regexp`,`date`,`time`],D={string:e=>typeof e==`string`,number:e=>typeof e==`number`,boolean:e=>typeof e==`boolean`,bigint:e=>typeof e==`bigint`,symbol:e=>typeof e==`symbol`,integer:e=>typeof e==`number`&&Number.isInteger(e),float:e=>typeof e==`number`,json:e=>{try{return JSON.parse(JSON.stringify(e)),!0}catch{return!1}},url:e=>e instanceof URL,regexp:e=>e instanceof RegExp,date:e=>e instanceof Date,time:e=>typeof e==`number`||typeof e==`string`};var O=class{static isBuiltInConverter(e){return typeof e==`string`?E.includes(e):!1}static isArrayConverter(e){return p(e)}static isStandardSchema(e){if(typeof e!=`object`||!e||!(`~standard`in e))return!1;let t=e[`~standard`];if(typeof t!=`object`||!t)return!1;let n=t;return n.version===1&&typeof n.validate==`function`}static customConvertor(e){if(typeof e!=`function`)throw new _(203,`Custom converter must be a function, got ${typeof e}.`)}static arrayConverter(e){if(!p(e))throw new _(201,`Expected an ArrayOf<...> token produced by Converters.array(...)`);if(typeof e.delimiter!=`string`||e.delimiter.length===0)throw new _(301,`ArrayOf<...> requires a non-empty string delimiter, got ${typeof e.delimiter}`);let t=e.of;if(!(typeof t==`string`&&E.includes(t))&&typeof t!=`function`)throw new _(201,`ArrayOf<...> element ("of") must be a built-in scalar token or a function, got ${typeof t}`)}static builtInConverter(e){if(typeof e!=`string`)throw new _(204,`Expected string, got ${typeof e}`);if(!E.includes(e))throw new _(202,`"${e}" is not a valid converter type. Valid types are: ${E.join(`,`)}`)}static validateBuiltInConverterFallback(e,t){let n=D[e];if(!n(t))throw new _(104,`Fallback type does not match converter "${e}". Expected ${e} compatible type.`)}static validateArrayFallbackElementTypes(e){if(e.length===0)return;let t=typeof e[0];if(e.some((e,n)=>n===0?!1:typeof e!==t))throw new _(103,`All elements in array fallback must have the same type. Found mixed types.`)}static validateArrayConverterElementTypeMatch(e,t){if(t.length===0||typeof e==`function`)return;let n=e;if(n===`time`){let e=t.every(e=>typeof e==`number`),n=t.every(e=>typeof e==`string`);if(!e&&!n)throw new _(103,`Time array fallback must be all numbers or all time-string entries.`);return}let r=D[n],i=t[0];if(!r(i))throw new _(103,`Array converter type "${n}" does not match fallback element type. Expected ${n} compatible elements.`)}static isPrimitiveConstructor(e){return e===String||e===Number||e===Boolean||e===BigInt||e===Symbol}static coercePrimitiveFallback(e,t){return this.isCorrectPrimitiveType(e,t)?t:this.performPrimitiveCoercion(e,t)}static isCorrectPrimitiveType(e,t){return e===String&&typeof t==`string`||e===Number&&typeof t==`number`||e===Boolean&&typeof t==`boolean`||e===BigInt&&typeof t==`bigint`||e===Symbol&&typeof t==`symbol`}static performPrimitiveCoercion(e,t){try{if(e===String)return String(t);if(e===Number)return Number(t);if(e===Boolean)return!!t;if(e===BigInt)return BigInt(t);if(e===Symbol)return Symbol.for(String(t))}catch(t){throw new _(205,`Failed to coerce fallback value using ${e.name}: ${t.message}`)}throw new _(205,`Unknown primitive converter: ${e.name}`)}static validateSyncProcessEnv(e){if(typeof e!=`boolean`)throw new _(302,`Envapter.syncProcessEnv must be a boolean, got ${typeof e}.`)}static validateEnvFileOptions(e){let t=new Set([`encoding`,`override`]),n=Object.keys(e).filter(e=>!t.has(e));if(n.length>0)throw new _(302,`Invalid envFileOptions: ${n.join(`, `)}. Allowed options: ${Array.from(t).join(`, `)}. For debug output, use Envapter.debug or the ENVAPT_DEBUG env var.`);return!0}static validateEnvFilesExist(e){let t=e.filter(e=>{try{return c.default.accessSync(e,c.default.constants.F_OK),!1}catch{return!0}});if(t.length>0)throw new _(303,`Environment file not found at path: ${t.join(`, `)}`)}};function k(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}var A=class{envService;constructor(e){this.envService=e}convertValue(e,t,n,r){let i=this.resolveConverter(n,t),a=this.processFallbackForConverter(i,t);if(O.isArrayConverter(i))return this.processArrayConverter(e,a,i,r);if(O.isPrimitiveConstructor(i)){let t=this.convertPrimitiveToString(i);return this.processBuiltInConverter(e,a,t,r,!0)}return O.isBuiltInConverter(i)?this.processBuiltInConverter(e,a,i,r,!1):this.processCustomConverter(e,a,i,r)}processFallbackForConverter(e,t){return O.isPrimitiveConstructor(e)&&t!==void 0?O.coercePrimitiveFallback(e,t):t}convertPrimitiveToString(e){if(e===String)return`string`;if(e===Number)return`number`;if(e===Boolean)return`boolean`;if(e===BigInt)return`bigint`;if(e===Symbol)return`symbol`;throw new _(204,`Unknown primitive constructor`)}processBuiltInConverter(e,t,n,r,i){O.builtInConverter(n),r&&t!==void 0&&!i&&O.validateBuiltInConverterFallback(n,t);let a=this.envService.get(e,void 0);if(a===void 0)return r?n===`time`&&typeof t==`string`?T.getConverter(n)(``,t):t:null;let o=T.getConverter(n)(a,t);return o===void 0&&!r?null:o}processArrayConverter(e,t,n,r){if(O.arrayConverter(n),r&&t!==void 0&&!Array.isArray(t))throw new _(101,`ArrayOf<...> requires that the fallback be an array, got ${typeof t}`);r&&Array.isArray(t)&&(O.validateArrayFallbackElementTypes(t),O.validateArrayConverterElementTypeMatch(n.of,t));let i=this.envService.get(e,void 0);if(i===void 0){if(!r)return null;if(n.of===`time`&&Array.isArray(t)&&t.every(e=>typeof e==`string`)){let e=T.getConverter(`time`);return t.map(t=>e(``,t))}return t}return T.processArrayConverter(i,n,this.envService.isStrict())}processCustomConverter(e,t,n,r){return O.customConvertor(n),n(this.envService.get(e,void 0),t)}resolveConverter(e,t){if(e)return e;let n=typeof t;return n===`number`?`number`:n===`boolean`?`boolean`:n===`bigint`?`bigint`:n===`symbol`?`symbol`:`string`}convertWithSchema(e,t,n,r){let i=this.envService.get(e,void 0);if(i===void 0){if(r)return n;throw new _(305,`Required environment variable "${k(e)}" is missing or empty.`)}let a;try{a=t[`~standard`].validate(i)}catch(t){throw new _(209,`Schema for "${k(e)}" threw during validation: ${t.message}`,{cause:t})}if(a instanceof Promise)throw new _(302,`Schema for "${k(e)}" returned a Promise. envapt requires synchronous schemas; use a sync validator or perform async checks outside the env layer.`);if(a.issues!==void 0){let t=a.issues[0]?.message??`no issue message`;throw new _(208,`Schema validation failed for "${k(e)}": ${t}`,{issues:a.issues})}return a.value}};const j=new Set([`silent`,`warn`,`verbose`]);let M=`silent`,N=!1;function P(e){return e!==void 0&&j.has(e)}function F(){if(!N){let e=u.default.env.ENVAPT_DEBUG;M=P(e)?e:`silent`,N=!0}return M}function I(e){if(!P(e))throw new _(302,`Invalid debug level "${String(e)}". Expected 'silent' | 'warn' | 'verbose'.`);M=e,N=!0}function te(){return F()}function L(e){let t=F();(t===`warn`||t===`verbose`)&&u.default.stderr.write(`[envapt] ${e}\n`)}function R(e){F()===`verbose`&&u.default.stderr.write(`[envapt] ${e}\n`)}const z=/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=(.*)$/u;function B(e){let t=new Map,n=e.split(/\r?\n/u);for(let e=0;e<n.length;e++){let r=V(n,e);e=r.endLine,r.entry&&t.set(r.entry.key,r.entry.value)}return t}function V(e,t){let n=e[t]??``,r=n.trim();if(r===``||r.startsWith(`#`))return{entry:void 0,endLine:t};let i=n.match(z);if(!i)return{entry:void 0,endLine:t};let a=i[1],o=(i[2]??``).replace(/^\s+/u,``),s=o[0];if(s===`"`||s===`'`||s==="`"){let n=H(o,e,t,s);return{entry:{key:a,value:n.value},endLine:n.endLine}}return{entry:{key:a,value:U(o)},endLine:t}}function H(e,t,n,r){let i=e,a=n,o=G(i,r);for(;o<0&&a<t.length-1;)a++,i+=`\n${t[a]??``}`,o=G(i,r);let s=o>0?i.slice(1,o):i.slice(1);return{value:r===`"`?K(s):s,endLine:a}}function U(e){let t=W(e);return(t===-1?e:e.slice(0,t)).trimEnd()}function W(e){for(let t=0;t<e.length;t++)if(e[t]===`#`&&(t===0||/\s/u.test(e[t-1])))return t;return-1}function G(e,t){for(let n=e.length-1;n>0;n--)if(e[n]===t){if(t===`"`){let t=0,r=n-1;for(;r>=0&&e[r]===`\\`;)t++,r--;if(t%2==1)continue}return n}return-1}function K(e){let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(r!==`\\`||n===e.length-1){t+=r;continue}let i=e[n+1];switch(n++,i){case`n`:t+=`
2
- `;break;case`r`:t+=`\r`;break;case`t`:t+=` `;break;case`\\`:t+=`\\`;break;case`"`:t+=`"`;break;default:t+=`\\${i??``}`}}return t}function q(e){let t=Array.isArray(e.path)?e.path:[e.path],n=e.encoding??`utf8`,r=e.override??!1,i=new Set;for(let a of t){let t;try{t=c.default.readFileSync(a,n)}catch{L(`could not read ${a}`);continue}let o=B(t);R(`loaded ${a}: ${o.size} ${o.size===1?`key`:`keys`}`);for(let[t,n]of o)(!Object.prototype.hasOwnProperty.call(e.processEnv,t)||r)&&(e.processEnv[t]=n,i.add(t),R(`${a} -> ${t}`))}return i}const J=new Map;var Y=class e{static _envPaths=[`.env`];static _envPathsExplicitlySet=!1;static _baseDir=void 0;static _userDefinedEnvFileOptions={};static _strict=!1;static _syncProcessEnv=!1;static _dotenvAddedKeys=new Set;static set strict(t){e._strict=t,this.refreshCache()}static get strict(){return e._strict}static set debug(e){I(e)}static get debug(){return te()}static set syncProcessEnv(t){O.validateSyncProcessEnv(t);let n=e._syncProcessEnv;e._syncProcessEnv=t,!n&&t&&J.size>0&&this.mirrorToProcessEnv()}static get syncProcessEnv(){return e._syncProcessEnv}static treatAsMissing(t){return!!(t===void 0||t===``||e._strict&&t.trim()===``)}static set envPaths(e){let t=Array.isArray(e)?e:[e];O.validateEnvFilesExist(t.map(e=>this.resolveAgainstBase(e))),this._envPaths=t,this._envPathsExplicitlySet=!0,this.refreshCache()}static get envPaths(){return this._envPaths}static set baseDir(t){e._baseDir=t===void 0?void 0:this.normalizeBaseDir(t),this.refreshCache()}static get baseDir(){return e._baseDir}static normalizeBaseDir(e){return e instanceof URL||e.startsWith(`file:`)?(0,l.dirname)((0,d.fileURLToPath)(e)):(0,l.resolve)(e)}static resolveAgainstBase(t){return e._baseDir===void 0||(0,l.isAbsolute)(t)?t:(0,l.join)(e._baseDir,t)}static set envFileOptions(e){O.validateEnvFileOptions(e),this._userDefinedEnvFileOptions=e,this.refreshCache()}static get envFileOptions(){return this._userDefinedEnvFileOptions}static refreshCache(){J.clear(),e._dotenvAddedKeys=new Set,R(`cache cleared, reloading config`),this.config}static mirrorToProcessEnv(){if(e._dotenvAddedKeys.size!==0){for(let t of e._dotenvAddedKeys){let e=J.get(t);typeof e==`string`&&(u.default.env[t]=e,R(`mirrored ${t} to process.env`))}R(`mirrored ${e._dotenvAddedKeys.size} keys to process.env`)}}static resolveEffectivePaths(){return this._envPaths.map(e=>this.resolveAgainstBase(e))}static resolveKeyInput(e){let t=Array.isArray(e)?e:[e];if(t.length===0)throw new _(304,`At least one environment key must be provided.`);if(t.some(e=>typeof e!=`string`))throw new _(304,`Environment keys must be strings.`);if(t.some(e=>e.trim()===``))throw new _(304,`Environment keys cannot be empty strings.`);for(let e of t){let t=this.config.get(e);if(t!==void 0)return{key:e,value:t}}return{key:t[0],value:void 0}}static get config(){if(J.size===0){let t={...u.default.env},n=this.resolveEffectivePaths();R(`effective .env paths: ${n.length===0?`(none)`:n.join(`, `)}`);let r=new Set;try{r=q({...this._userDefinedEnvFileOptions,path:n,processEnv:t})}catch{}e._dotenvAddedKeys=r;for(let[e,n]of Object.entries(t))J.set(e,n);R(`cache populated: ${J.size} keys total`),e._syncProcessEnv&&this.mirrorToProcessEnv()}return J}static load(){this.config}getRaw(t){return e.resolveKeyInput(t).value}};let X=function(e){return e[e.Development=0]=`Development`,e[e.Staging=1]=`Staging`,e[e.Production=2]=`Production`,e}({});var Z=class e extends Y{static _environment;static _environmentExplicitlySet=!1;static _profiles;static determineEnvironment(e){let t=e??this.getRawValue(`ENVIRONMENT`,this.getRawValue(`ENV`,this.getRawValue(`NODE_ENV`,`development`)));typeof t==`string`?this._environment=t.toLowerCase()===`production`?2:+(t===`staging`):this._environment=t,e!==void 0&&(this._environmentExplicitlySet=!0)}static getRawValue(e,t){return this.config.get(e)||t}static get environment(){return this._environment===void 0&&this.determineEnvironment(),this._environment}static set environment(e){this.determineEnvironment(e)}get environment(){return e.environment}set environment(t){e.determineEnvironment(t)}static get isProduction(){return this.environment===2}get isProduction(){return e.environment===2}static get isStaging(){return this.environment===1}get isStaging(){return e.environment===1}static get isDevelopment(){return this.environment===0}get isDevelopment(){return e.environment===0}static refreshCache(){this._environmentExplicitlySet||(this._environment=void 0),super.refreshCache()}static configureProfiles(e){this._profiles=e,this.refreshCache()}static resetProfiles(){this._profiles=void 0,this._envPaths=[`.env`],this._envPathsExplicitlySet=!1,this._environmentExplicitlySet=!1,this._environment=void 0,this.refreshCache()}static getCascadeEnvironment(){if(this._environment!==void 0)return this._environment;let e=(u.default.env.ENVIRONMENT??u.default.env.ENV??u.default.env.NODE_ENV??`development`).toLowerCase();return e===`production`?2:+(e===`staging`)}static buildCascadePaths(e){let t=X[e].toLowerCase();return[`.env.${t}.local`,`.env.${t}`,`.env.local`,`.env`].map(e=>this.resolveAgainstBase(e)).filter(e=>c.default.existsSync(e))}static normalizeProfilePaths(e){return e?Array.isArray(e.paths)?e.paths:[e.paths]:[]}static resolveEffectivePaths(){if(this._envPathsExplicitlySet)return this._envPaths.map(e=>this.resolveAgainstBase(e));let e=this.getCascadeEnvironment(),t=this._profiles?.[e],n=this.normalizeProfilePaths(t);if(n.length>0){let e=n.filter(e=>!c.default.existsSync(this.resolveAgainstBase(e)));if(e.length>0)throw new _(303,`Environment file not found at path: ${e.join(`, `)}`)}let r=this._profiles?.useDefaults===!1?[]:this.buildCascadePaths(e);return[...n.map(e=>this.resolveAgainstBase(e)),...r]}},ne=class{envService;TEMPLATE_REGEX=/\${\w*}/g;constructor(e){this.envService=e}resolveTemplate(e,t,n=new Set){n.add(e);let r=this.envService.isStrict(),i=t.replace(this.TEMPLATE_REGEX,t=>{let i=t.slice(2,-1);if(n.has(i))return t;let a=this.envService.getRaw(i);if(a===void 0||a===``||r&&a.trim()===``){if(r)throw new _(305,`Cannot resolve template variable "\${${i}}": value is missing or empty.`);return L(`unresolved template \${${i}} preserved as literal`),t}let o=this.resolveTemplate(i,a,new Set(n));return o.includes(`\${${e}}`)||o===a&&/\$\{[^}]*\}/.test(o)?t:o});return n.delete(e),i}},re=class e extends Z{static service=new e;static templateResolver=new ne(e.service);static valueConverter=new A(e.service);isStrict(){return Y.strict}static _get(e,t,n){let{key:r,value:i}=this.resolveKeyInput(e);if(this.treatAsMissing(i))return n!==void 0&&L(`${r} not found, using fallback ${String(n)}`),n;let a=i,o=this.templateResolver.resolveTemplate(r,String(a)),s;return s=t===1?T.number(o,n):t===2?T.boolean(o,n):t===3?T.bigint(o,n):t===4?T.symbol(o,n):T.string(o,n),s}static get(e,t){return this._get(e,0,t)}get(t,n){return e._get(t,0,n)}static getNumber(e,t){return this._get(e,1,t)}getNumber(t,n){return e._get(t,1,n)}static getBoolean(e,t){return this._get(e,2,t)}getBoolean(t,n){return e._get(t,2,n)}static getBigInt(e,t){return this._get(e,3,t)}getBigInt(t,n){return e._get(t,3,n)}static getSymbol(e,t){return this._get(e,4,t)}getSymbol(t,n){return e._get(t,4,n)}};function Q(e){return typeof e==`object`&&!!e&&`converter`in e}function $(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}var ie=class e extends re{static getUsing(e,t,n){if(Q(t)){let n=t,{key:r,value:i}=this.resolveKeyInput(e);if(i===void 0||i.trim()===``)throw new _(305,`Required environment variable "${$(e)}" is missing or empty.`);return this.valueConverter.convertValue(r,void 0,n.converter,!1)}let r=t,{key:i,value:a}=this.resolveKeyInput(e);if(this.treatAsMissing(a)&&n===void 0)return;let o=n!==void 0;return this.valueConverter.convertValue(i,n,r,o)}getUsing(t,n,r){return e.getUsing(t,n,r)}static getWith(e,t,n){if(Q(t)){let n=t,{key:r,value:i}=this.resolveKeyInput(e);if(i===void 0||i.trim()===``)throw new _(305,`Required environment variable "${$(e)}" is missing or empty.`);return this.valueConverter.convertValue(r,void 0,n.converter,!1)}let{key:r,value:i}=this.resolveKeyInput(e);if(this.treatAsMissing(i))return n;let a=n!==void 0;return this.valueConverter.convertValue(r,n,t,a)}getWith(t,n,r){return e.getWith(t,n,r)}static parse(e,t,n){let r=arguments.length>2;return this.valueConverter.convertWithSchema(e,t,n,r)}parse(t,n,r){let i=arguments.length>2;return e.valueConverter.convertWithSchema(t,n,r,i)}},ae=class e extends ie{static resolve(t,...n){let r=e.strict;return t.reduce((e,t,i)=>{let a=n[i];if(!a)return e+t;let o=super.get(a,``);if(r&&o.trim()===``)throw new _(305,`Cannot resolve template variable "\${${a}}": value is missing or empty.`);return e+t+o},``)}resolve(t,...n){return e.resolve(t,...n)}static require(...t){let n=[];for(let r of t)e.resolveAndValidate(r)===void 0&&n.push(r);if(n.length>0)throw new _(305,`Missing required environment variables: ${n.join(`, `)}.`)}static resolveAndValidate(e){let{value:t}=this.resolveKeyInput(e);if(t===void 0)return;let n=this.templateResolver.resolveTemplate(e,t);if(n.trim()!==``)return n}require(...t){e.require(...t)}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return ae}});
3
- //# sourceMappingURL=Envapter-CBSM3v-5.cjs.map