envapt 6.0.2 → 7.0.0-next.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.
Files changed (372) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +5 -8
  3. package/dist/browser/converters/BuiltInConverters.mjs +1 -1
  4. package/dist/browser/converters/BuiltInConverters.mjs.map +1 -1
  5. package/dist/browser/converters/ValueConverter.mjs +1 -1
  6. package/dist/browser/converters/ValueConverter.mjs.map +1 -1
  7. package/dist/browser/core/AdvancedMethods.mjs +1 -1
  8. package/dist/browser/core/AdvancedMethods.mjs.map +1 -1
  9. package/dist/browser/core/EnvapterBase.mjs +1 -1
  10. package/dist/browser/core/EnvapterBase.mjs.map +1 -1
  11. package/dist/browser/core/EnvironmentMethods.mjs +1 -1
  12. package/dist/browser/core/EnvironmentMethods.mjs.map +1 -1
  13. package/dist/browser/core/PrimitiveMethods.mjs +1 -1
  14. package/dist/browser/core/PrimitiveMethods.mjs.map +1 -1
  15. package/dist/browser/decorators/legacy/Envapt.mjs +2 -0
  16. package/dist/browser/decorators/legacy/Envapt.mjs.map +1 -0
  17. package/dist/browser/decorators/legacy/SugarDecorators.mjs +2 -0
  18. package/dist/browser/decorators/legacy/SugarDecorators.mjs.map +1 -0
  19. package/dist/browser/decorators/legacy/createPropertyDecorator.mjs +2 -0
  20. package/dist/browser/decorators/legacy/createPropertyDecorator.mjs.map +1 -0
  21. package/dist/browser/decorators/modern/Envapt.mjs +2 -0
  22. package/dist/browser/decorators/modern/Envapt.mjs.map +1 -0
  23. package/dist/browser/decorators/modern/SugarDecorators.mjs +2 -0
  24. package/dist/browser/decorators/modern/SugarDecorators.mjs.map +1 -0
  25. package/dist/browser/decorators/modern/createAccessorDecorator.mjs +2 -0
  26. package/dist/browser/decorators/modern/createAccessorDecorator.mjs.map +1 -0
  27. package/dist/browser/decorators/parseEnvaptOptions.mjs +2 -0
  28. package/dist/browser/decorators/parseEnvaptOptions.mjs.map +1 -0
  29. package/dist/browser/decorators/resolveDecoratorValue.mjs +2 -0
  30. package/dist/browser/decorators/resolveDecoratorValue.mjs.map +1 -0
  31. package/dist/browser/engine/Envapter.mjs +2 -0
  32. package/dist/browser/engine/Envapter.mjs.map +1 -0
  33. package/dist/browser/engine/TemplateResolver.mjs +2 -0
  34. package/dist/browser/engine/TemplateResolver.mjs.map +1 -0
  35. package/dist/browser/engine/Validators.mjs +2 -0
  36. package/dist/browser/engine/Validators.mjs.map +1 -0
  37. package/dist/browser/engine/installFileApiStubs.mjs +2 -0
  38. package/dist/browser/engine/installFileApiStubs.mjs.map +1 -0
  39. package/dist/browser/index.mjs +1 -1
  40. package/dist/browser/index.mjs.map +1 -1
  41. package/dist/browser/infra/Debug.mjs.map +1 -0
  42. package/dist/browser/infra/Dotenv.mjs.map +1 -0
  43. package/dist/browser/infra/Error.mjs.map +1 -0
  44. package/dist/browser/infra/runtime.mjs.map +1 -0
  45. package/dist/browser/legacy.mjs +1 -0
  46. package/dist/browser/sources/UnboundEnvSource.mjs +1 -1
  47. package/dist/browser/sources/UnboundEnvSource.mjs.map +1 -1
  48. package/dist/node/config.cjs +1 -1
  49. package/dist/node/config.cjs.map +1 -1
  50. package/dist/node/config.mjs +1 -1
  51. package/dist/node/config.mjs.map +1 -1
  52. package/dist/node/converters/BuiltInConverters.cjs +1 -1
  53. package/dist/node/converters/BuiltInConverters.cjs.map +1 -1
  54. package/dist/node/converters/BuiltInConverters.mjs +1 -1
  55. package/dist/node/converters/BuiltInConverters.mjs.map +1 -1
  56. package/dist/node/converters/ValueConverter.cjs +1 -1
  57. package/dist/node/converters/ValueConverter.cjs.map +1 -1
  58. package/dist/node/converters/ValueConverter.mjs +1 -1
  59. package/dist/node/converters/ValueConverter.mjs.map +1 -1
  60. package/dist/node/core/AdvancedMethods.cjs +1 -1
  61. package/dist/node/core/AdvancedMethods.cjs.map +1 -1
  62. package/dist/node/core/AdvancedMethods.mjs +1 -1
  63. package/dist/node/core/AdvancedMethods.mjs.map +1 -1
  64. package/dist/node/core/EnvapterBase.cjs +1 -1
  65. package/dist/node/core/EnvapterBase.cjs.map +1 -1
  66. package/dist/node/core/EnvapterBase.mjs +1 -1
  67. package/dist/node/core/EnvapterBase.mjs.map +1 -1
  68. package/dist/node/core/EnvironmentMethods.cjs +1 -1
  69. package/dist/node/core/EnvironmentMethods.cjs.map +1 -1
  70. package/dist/node/core/EnvironmentMethods.mjs +1 -1
  71. package/dist/node/core/EnvironmentMethods.mjs.map +1 -1
  72. package/dist/node/core/PrimitiveMethods.cjs +1 -1
  73. package/dist/node/core/PrimitiveMethods.cjs.map +1 -1
  74. package/dist/node/core/PrimitiveMethods.mjs +1 -1
  75. package/dist/node/core/PrimitiveMethods.mjs.map +1 -1
  76. package/dist/node/decorators/legacy/Envapt.cjs +2 -0
  77. package/dist/node/decorators/legacy/Envapt.cjs.map +1 -0
  78. package/dist/node/decorators/legacy/Envapt.mjs +2 -0
  79. package/dist/node/decorators/legacy/Envapt.mjs.map +1 -0
  80. package/dist/node/decorators/legacy/SugarDecorators.cjs +2 -0
  81. package/dist/node/decorators/legacy/SugarDecorators.cjs.map +1 -0
  82. package/dist/node/decorators/legacy/SugarDecorators.mjs +2 -0
  83. package/dist/node/decorators/legacy/SugarDecorators.mjs.map +1 -0
  84. package/dist/node/decorators/legacy/createPropertyDecorator.cjs +2 -0
  85. package/dist/node/decorators/legacy/createPropertyDecorator.cjs.map +1 -0
  86. package/dist/node/decorators/legacy/createPropertyDecorator.mjs +2 -0
  87. package/dist/node/decorators/legacy/createPropertyDecorator.mjs.map +1 -0
  88. package/dist/node/decorators/modern/Envapt.cjs +2 -0
  89. package/dist/node/decorators/modern/Envapt.cjs.map +1 -0
  90. package/dist/node/decorators/modern/Envapt.mjs +2 -0
  91. package/dist/node/decorators/modern/Envapt.mjs.map +1 -0
  92. package/dist/node/decorators/modern/SugarDecorators.cjs +2 -0
  93. package/dist/node/decorators/modern/SugarDecorators.cjs.map +1 -0
  94. package/dist/node/decorators/modern/SugarDecorators.mjs +2 -0
  95. package/dist/node/decorators/modern/SugarDecorators.mjs.map +1 -0
  96. package/dist/node/decorators/modern/createAccessorDecorator.cjs +2 -0
  97. package/dist/node/decorators/modern/createAccessorDecorator.cjs.map +1 -0
  98. package/dist/node/decorators/modern/createAccessorDecorator.mjs +2 -0
  99. package/dist/node/decorators/modern/createAccessorDecorator.mjs.map +1 -0
  100. package/dist/node/decorators/parseEnvaptOptions.cjs +2 -0
  101. package/dist/node/decorators/parseEnvaptOptions.cjs.map +1 -0
  102. package/dist/node/decorators/parseEnvaptOptions.mjs +2 -0
  103. package/dist/node/decorators/parseEnvaptOptions.mjs.map +1 -0
  104. package/dist/node/decorators/resolveDecoratorValue.cjs +2 -0
  105. package/dist/node/decorators/resolveDecoratorValue.cjs.map +1 -0
  106. package/dist/node/decorators/resolveDecoratorValue.mjs +2 -0
  107. package/dist/node/decorators/resolveDecoratorValue.mjs.map +1 -0
  108. package/dist/node/engine/Envapter.cjs +2 -0
  109. package/dist/node/engine/Envapter.cjs.map +1 -0
  110. package/dist/node/engine/Envapter.mjs +2 -0
  111. package/dist/node/engine/Envapter.mjs.map +1 -0
  112. package/dist/node/engine/NodeEnvapter.cjs +2 -0
  113. package/dist/node/engine/NodeEnvapter.cjs.map +1 -0
  114. package/dist/node/engine/NodeEnvapter.mjs +2 -0
  115. package/dist/node/engine/NodeEnvapter.mjs.map +1 -0
  116. package/dist/node/engine/TemplateResolver.cjs +2 -0
  117. package/dist/node/engine/TemplateResolver.cjs.map +1 -0
  118. package/dist/node/engine/TemplateResolver.mjs +2 -0
  119. package/dist/node/engine/TemplateResolver.mjs.map +1 -0
  120. package/dist/node/engine/Validators.cjs +2 -0
  121. package/dist/node/engine/Validators.cjs.map +1 -0
  122. package/dist/node/engine/Validators.mjs +2 -0
  123. package/dist/node/engine/Validators.mjs.map +1 -0
  124. package/dist/node/index.cjs +1 -1
  125. package/dist/node/index.mjs +1 -1
  126. package/dist/node/infra/Debug.cjs.map +1 -0
  127. package/dist/node/infra/Debug.mjs.map +1 -0
  128. package/dist/node/infra/Dotenv.cjs.map +1 -0
  129. package/dist/node/infra/Dotenv.mjs.map +1 -0
  130. package/dist/node/infra/Error.cjs.map +1 -0
  131. package/dist/node/infra/Error.mjs.map +1 -0
  132. package/dist/node/infra/runtime.cjs.map +1 -0
  133. package/dist/node/infra/runtime.mjs.map +1 -0
  134. package/dist/node/legacy.cjs +1 -0
  135. package/dist/node/legacy.mjs +1 -0
  136. package/dist/node/sources/UnboundEnvSource.cjs +1 -1
  137. package/dist/node/sources/UnboundEnvSource.cjs.map +1 -1
  138. package/dist/node/sources/UnboundEnvSource.mjs +1 -1
  139. package/dist/node/sources/UnboundEnvSource.mjs.map +1 -1
  140. package/dist/{browser → types}/converters/ValueConverter.d.mts +1 -1
  141. package/dist/{workerd → types}/core/AdvancedMethods.d.mts +1 -1
  142. package/dist/{workerd → types}/core/EnvapterBase.d.mts +2 -2
  143. package/dist/{browser → types}/core/PrimitiveMethods.d.mts +1 -1
  144. package/dist/{browser/decorators → types/decorators/legacy}/Envapt.d.mts +59 -49
  145. package/dist/types/decorators/legacy/SugarDecorators.d.mts +40 -0
  146. package/dist/types/decorators/modern/Envapt.d.mts +218 -0
  147. package/dist/types/decorators/modern/SugarDecorators.d.mts +40 -0
  148. package/dist/{browser → types/engine}/Envapter.d.mts +3 -3
  149. package/dist/{node/NodeEnvapter.d.cts → types/engine/NodeEnvapter.d.mts} +5 -5
  150. package/dist/{browser → types/engine}/TemplateResolver.d.mts +2 -2
  151. package/dist/{node → types}/index.d.mts +9 -10
  152. package/dist/{workerd/index.d.mts → types/index.portable.d.mts} +9 -8
  153. package/dist/{browser → types/infra}/Debug.d.mts +1 -1
  154. package/dist/{workerd → types/infra}/Dotenv.d.mts +1 -1
  155. package/dist/{browser → types/infra}/Error.d.mts +1 -1
  156. package/dist/{browser → types/infra}/StandardSchema.d.mts +1 -1
  157. package/dist/types/legacy.d.mts +4 -0
  158. package/dist/{node/sources/NodeEnvSource.d.cts → types/sources/NodeEnvSource.d.mts} +2 -2
  159. package/dist/types/types/Decorator.d.mts +26 -0
  160. package/dist/{browser → types}/types/Schema.d.mts +1 -1
  161. package/dist/workerd/converters/BuiltInConverters.mjs +1 -1
  162. package/dist/workerd/converters/BuiltInConverters.mjs.map +1 -1
  163. package/dist/workerd/converters/ValueConverter.mjs +1 -1
  164. package/dist/workerd/converters/ValueConverter.mjs.map +1 -1
  165. package/dist/workerd/core/AdvancedMethods.mjs +1 -1
  166. package/dist/workerd/core/AdvancedMethods.mjs.map +1 -1
  167. package/dist/workerd/core/EnvapterBase.mjs +1 -1
  168. package/dist/workerd/core/EnvapterBase.mjs.map +1 -1
  169. package/dist/workerd/core/EnvironmentMethods.mjs +1 -1
  170. package/dist/workerd/core/EnvironmentMethods.mjs.map +1 -1
  171. package/dist/workerd/core/PrimitiveMethods.mjs +1 -1
  172. package/dist/workerd/core/PrimitiveMethods.mjs.map +1 -1
  173. package/dist/workerd/decorators/legacy/Envapt.mjs +2 -0
  174. package/dist/workerd/decorators/legacy/Envapt.mjs.map +1 -0
  175. package/dist/workerd/decorators/legacy/SugarDecorators.mjs +2 -0
  176. package/dist/workerd/decorators/legacy/SugarDecorators.mjs.map +1 -0
  177. package/dist/workerd/decorators/legacy/createPropertyDecorator.mjs +2 -0
  178. package/dist/workerd/decorators/legacy/createPropertyDecorator.mjs.map +1 -0
  179. package/dist/workerd/decorators/modern/Envapt.mjs +2 -0
  180. package/dist/workerd/decorators/modern/Envapt.mjs.map +1 -0
  181. package/dist/workerd/decorators/modern/SugarDecorators.mjs +2 -0
  182. package/dist/workerd/decorators/modern/SugarDecorators.mjs.map +1 -0
  183. package/dist/workerd/decorators/modern/createAccessorDecorator.mjs +2 -0
  184. package/dist/workerd/decorators/modern/createAccessorDecorator.mjs.map +1 -0
  185. package/dist/workerd/decorators/parseEnvaptOptions.mjs +2 -0
  186. package/dist/workerd/decorators/parseEnvaptOptions.mjs.map +1 -0
  187. package/dist/workerd/decorators/resolveDecoratorValue.mjs +2 -0
  188. package/dist/workerd/decorators/resolveDecoratorValue.mjs.map +1 -0
  189. package/dist/workerd/engine/Envapter.mjs +2 -0
  190. package/dist/workerd/engine/Envapter.mjs.map +1 -0
  191. package/dist/workerd/engine/TemplateResolver.mjs +2 -0
  192. package/dist/workerd/engine/TemplateResolver.mjs.map +1 -0
  193. package/dist/workerd/engine/Validators.mjs +2 -0
  194. package/dist/workerd/engine/Validators.mjs.map +1 -0
  195. package/dist/workerd/engine/installFileApiStubs.mjs +2 -0
  196. package/dist/workerd/engine/installFileApiStubs.mjs.map +1 -0
  197. package/dist/workerd/index.mjs +1 -1
  198. package/dist/workerd/index.mjs.map +1 -1
  199. package/dist/workerd/infra/Debug.mjs.map +1 -0
  200. package/dist/workerd/infra/Dotenv.mjs.map +1 -0
  201. package/dist/workerd/infra/Error.mjs.map +1 -0
  202. package/dist/workerd/infra/runtime.mjs.map +1 -0
  203. package/dist/workerd/legacy.mjs +1 -0
  204. package/dist/workerd/sources/UnboundEnvSource.mjs +1 -1
  205. package/dist/workerd/sources/UnboundEnvSource.mjs.map +1 -1
  206. package/package.json +50 -15
  207. package/dist/browser/Debug.mjs.map +0 -1
  208. package/dist/browser/Dotenv.d.mts +0 -17
  209. package/dist/browser/Dotenv.mjs.map +0 -1
  210. package/dist/browser/Envapter.mjs +0 -2
  211. package/dist/browser/Envapter.mjs.map +0 -1
  212. package/dist/browser/Error.mjs.map +0 -1
  213. package/dist/browser/TemplateResolver.mjs +0 -2
  214. package/dist/browser/TemplateResolver.mjs.map +0 -1
  215. package/dist/browser/Validators.mjs +0 -2
  216. package/dist/browser/Validators.mjs.map +0 -1
  217. package/dist/browser/core/AdvancedMethods.d.mts +0 -76
  218. package/dist/browser/core/EnvapterBase.d.mts +0 -75
  219. package/dist/browser/decorators/Envapt.mjs +0 -2
  220. package/dist/browser/decorators/Envapt.mjs.map +0 -1
  221. package/dist/browser/decorators/SugarDecorators.d.mts +0 -34
  222. package/dist/browser/decorators/SugarDecorators.mjs +0 -2
  223. package/dist/browser/decorators/SugarDecorators.mjs.map +0 -1
  224. package/dist/browser/decorators/createPropertyDecorator.mjs +0 -2
  225. package/dist/browser/decorators/createPropertyDecorator.mjs.map +0 -1
  226. package/dist/browser/index.d.mts +0 -17
  227. package/dist/browser/installFileApiStubs.mjs +0 -2
  228. package/dist/browser/installFileApiStubs.mjs.map +0 -1
  229. package/dist/browser/runtime.mjs.map +0 -1
  230. package/dist/node/Debug.cjs.map +0 -1
  231. package/dist/node/Debug.d.cts +0 -13
  232. package/dist/node/Debug.d.mts +0 -15
  233. package/dist/node/Debug.mjs.map +0 -1
  234. package/dist/node/Dotenv.cjs.map +0 -1
  235. package/dist/node/Dotenv.d.cts +0 -17
  236. package/dist/node/Dotenv.d.mts +0 -19
  237. package/dist/node/Dotenv.mjs.map +0 -1
  238. package/dist/node/Envapter.cjs +0 -2
  239. package/dist/node/Envapter.cjs.map +0 -1
  240. package/dist/node/Envapter.d.cts +0 -70
  241. package/dist/node/Envapter.d.mts +0 -72
  242. package/dist/node/Envapter.mjs +0 -2
  243. package/dist/node/Envapter.mjs.map +0 -1
  244. package/dist/node/Error.cjs.map +0 -1
  245. package/dist/node/Error.d.cts +0 -72
  246. package/dist/node/Error.d.mts +0 -74
  247. package/dist/node/Error.mjs.map +0 -1
  248. package/dist/node/NodeEnvapter.cjs +0 -2
  249. package/dist/node/NodeEnvapter.cjs.map +0 -1
  250. package/dist/node/NodeEnvapter.d.mts +0 -75
  251. package/dist/node/NodeEnvapter.mjs +0 -2
  252. package/dist/node/NodeEnvapter.mjs.map +0 -1
  253. package/dist/node/StandardSchema.d.cts +0 -59
  254. package/dist/node/StandardSchema.d.mts +0 -61
  255. package/dist/node/TemplateResolver.cjs +0 -2
  256. package/dist/node/TemplateResolver.cjs.map +0 -1
  257. package/dist/node/TemplateResolver.d.cts +0 -17
  258. package/dist/node/TemplateResolver.d.mts +0 -19
  259. package/dist/node/TemplateResolver.mjs +0 -2
  260. package/dist/node/TemplateResolver.mjs.map +0 -1
  261. package/dist/node/Validators.cjs +0 -2
  262. package/dist/node/Validators.cjs.map +0 -1
  263. package/dist/node/Validators.mjs +0 -2
  264. package/dist/node/Validators.mjs.map +0 -1
  265. package/dist/node/config.d.mts +0 -2
  266. package/dist/node/converters/Converters.d.cts +0 -93
  267. package/dist/node/converters/Converters.d.mts +0 -95
  268. package/dist/node/converters/ValueConverter.d.cts +0 -25
  269. package/dist/node/converters/ValueConverter.d.mts +0 -27
  270. package/dist/node/core/AdvancedMethods.d.cts +0 -76
  271. package/dist/node/core/AdvancedMethods.d.mts +0 -78
  272. package/dist/node/core/EnvapterBase.d.cts +0 -75
  273. package/dist/node/core/EnvapterBase.d.mts +0 -77
  274. package/dist/node/core/EnvironmentMethods.d.cts +0 -115
  275. package/dist/node/core/EnvironmentMethods.d.mts +0 -117
  276. package/dist/node/core/PrimitiveMethods.d.cts +0 -70
  277. package/dist/node/core/PrimitiveMethods.d.mts +0 -72
  278. package/dist/node/decorators/Envapt.cjs +0 -2
  279. package/dist/node/decorators/Envapt.cjs.map +0 -1
  280. package/dist/node/decorators/Envapt.d.cts +0 -208
  281. package/dist/node/decorators/Envapt.d.mts +0 -210
  282. package/dist/node/decorators/Envapt.mjs +0 -2
  283. package/dist/node/decorators/Envapt.mjs.map +0 -1
  284. package/dist/node/decorators/SugarDecorators.cjs +0 -2
  285. package/dist/node/decorators/SugarDecorators.cjs.map +0 -1
  286. package/dist/node/decorators/SugarDecorators.d.cts +0 -34
  287. package/dist/node/decorators/SugarDecorators.d.mts +0 -36
  288. package/dist/node/decorators/SugarDecorators.mjs +0 -2
  289. package/dist/node/decorators/SugarDecorators.mjs.map +0 -1
  290. package/dist/node/decorators/createPropertyDecorator.cjs +0 -2
  291. package/dist/node/decorators/createPropertyDecorator.cjs.map +0 -1
  292. package/dist/node/decorators/createPropertyDecorator.mjs +0 -2
  293. package/dist/node/decorators/createPropertyDecorator.mjs.map +0 -1
  294. package/dist/node/index.d.cts +0 -18
  295. package/dist/node/runtime.cjs.map +0 -1
  296. package/dist/node/runtime.mjs.map +0 -1
  297. package/dist/node/sources/ManualEnvSource.d.cts +0 -19
  298. package/dist/node/sources/ManualEnvSource.d.mts +0 -21
  299. package/dist/node/sources/NodeEnvSource.d.mts +0 -22
  300. package/dist/node/sources/WorkerEnvSource.d.cts +0 -19
  301. package/dist/node/sources/WorkerEnvSource.d.mts +0 -21
  302. package/dist/node/types/Conversion.d.cts +0 -123
  303. package/dist/node/types/Conversion.d.mts +0 -125
  304. package/dist/node/types/Env.d.cts +0 -17
  305. package/dist/node/types/Env.d.mts +0 -19
  306. package/dist/node/types/Options.d.cts +0 -39
  307. package/dist/node/types/Options.d.mts +0 -41
  308. package/dist/node/types/Schema.d.cts +0 -12
  309. package/dist/node/types/Schema.d.mts +0 -14
  310. package/dist/node/types/Source.d.cts +0 -44
  311. package/dist/node/types/Source.d.mts +0 -46
  312. package/dist/workerd/Debug.d.mts +0 -13
  313. package/dist/workerd/Debug.mjs.map +0 -1
  314. package/dist/workerd/Dotenv.mjs.map +0 -1
  315. package/dist/workerd/Envapter.d.mts +0 -70
  316. package/dist/workerd/Envapter.mjs +0 -2
  317. package/dist/workerd/Envapter.mjs.map +0 -1
  318. package/dist/workerd/Error.d.mts +0 -72
  319. package/dist/workerd/Error.mjs.map +0 -1
  320. package/dist/workerd/StandardSchema.d.mts +0 -59
  321. package/dist/workerd/TemplateResolver.d.mts +0 -17
  322. package/dist/workerd/TemplateResolver.mjs +0 -2
  323. package/dist/workerd/TemplateResolver.mjs.map +0 -1
  324. package/dist/workerd/Validators.mjs +0 -2
  325. package/dist/workerd/Validators.mjs.map +0 -1
  326. package/dist/workerd/converters/Converters.d.mts +0 -93
  327. package/dist/workerd/converters/ValueConverter.d.mts +0 -25
  328. package/dist/workerd/core/EnvironmentMethods.d.mts +0 -115
  329. package/dist/workerd/core/PrimitiveMethods.d.mts +0 -70
  330. package/dist/workerd/decorators/Envapt.d.mts +0 -208
  331. package/dist/workerd/decorators/Envapt.mjs +0 -2
  332. package/dist/workerd/decorators/Envapt.mjs.map +0 -1
  333. package/dist/workerd/decorators/SugarDecorators.d.mts +0 -34
  334. package/dist/workerd/decorators/SugarDecorators.mjs +0 -2
  335. package/dist/workerd/decorators/SugarDecorators.mjs.map +0 -1
  336. package/dist/workerd/decorators/createPropertyDecorator.mjs +0 -2
  337. package/dist/workerd/decorators/createPropertyDecorator.mjs.map +0 -1
  338. package/dist/workerd/installFileApiStubs.mjs +0 -2
  339. package/dist/workerd/installFileApiStubs.mjs.map +0 -1
  340. package/dist/workerd/runtime.mjs.map +0 -1
  341. package/dist/workerd/sources/ManualEnvSource.d.mts +0 -19
  342. package/dist/workerd/sources/WorkerEnvSource.d.mts +0 -19
  343. package/dist/workerd/types/Conversion.d.mts +0 -123
  344. package/dist/workerd/types/Env.d.mts +0 -17
  345. package/dist/workerd/types/Options.d.mts +0 -39
  346. package/dist/workerd/types/Schema.d.mts +0 -12
  347. package/dist/workerd/types/Source.d.mts +0 -44
  348. /package/dist/browser/{Debug.mjs → infra/Debug.mjs} +0 -0
  349. /package/dist/browser/{Dotenv.mjs → infra/Dotenv.mjs} +0 -0
  350. /package/dist/browser/{Error.mjs → infra/Error.mjs} +0 -0
  351. /package/dist/browser/{runtime.mjs → infra/runtime.mjs} +0 -0
  352. /package/dist/node/{Debug.cjs → infra/Debug.cjs} +0 -0
  353. /package/dist/node/{Debug.mjs → infra/Debug.mjs} +0 -0
  354. /package/dist/node/{Dotenv.cjs → infra/Dotenv.cjs} +0 -0
  355. /package/dist/node/{Dotenv.mjs → infra/Dotenv.mjs} +0 -0
  356. /package/dist/node/{Error.cjs → infra/Error.cjs} +0 -0
  357. /package/dist/node/{Error.mjs → infra/Error.mjs} +0 -0
  358. /package/dist/node/{runtime.cjs → infra/runtime.cjs} +0 -0
  359. /package/dist/node/{runtime.mjs → infra/runtime.mjs} +0 -0
  360. /package/dist/{node/config.d.cts → types/config.d.mts} +0 -0
  361. /package/dist/{browser → types}/converters/Converters.d.mts +0 -0
  362. /package/dist/{browser → types}/core/EnvironmentMethods.d.mts +0 -0
  363. /package/dist/{browser → types}/sources/ManualEnvSource.d.mts +0 -0
  364. /package/dist/{browser → types}/sources/WorkerEnvSource.d.mts +0 -0
  365. /package/dist/{browser → types}/types/Conversion.d.mts +0 -0
  366. /package/dist/{browser → types}/types/Env.d.mts +0 -0
  367. /package/dist/{browser → types}/types/Options.d.mts +0 -0
  368. /package/dist/{browser → types}/types/Source.d.mts +0 -0
  369. /package/dist/workerd/{Debug.mjs → infra/Debug.mjs} +0 -0
  370. /package/dist/workerd/{Dotenv.mjs → infra/Dotenv.mjs} +0 -0
  371. /package/dist/workerd/{Error.mjs → infra/Error.mjs} +0 -0
  372. /package/dist/workerd/{runtime.mjs → infra/runtime.mjs} +0 -0
@@ -0,0 +1,218 @@
1
+ import { ArrayOf } from "../../converters/Converters.mjs";
2
+ import { BuiltInConverter, ConverterFunction, InferConverterFallbackType, InferConverterReturnType, InferPrimitiveReturnType, PrimitiveConstructor } from "../../types/Conversion.mjs";
3
+ import { InferSchemaOutput, StandardSchemaV1 } from "../../infra/StandardSchema.mjs";
4
+ import { SchemaConstraint } from "../../types/Schema.mjs";
5
+ import { EnvKeyInput } from "../../types/Env.mjs";
6
+ import { EnvaptAccessorDecorator } from "../../types/Decorator.mjs";
7
+
8
+ //#region src/decorators/modern/Envapt.d.ts
9
+ /**
10
+ * A custom converter function with a fallback (both required), or a fallback only.
11
+ *
12
+ * @param key - Environment variable name(s) to load
13
+ * @param options - Configuration options
14
+ * @public
15
+ * @example
16
+ * ```ts
17
+ * class Config {
18
+ * \@Envapt('API_KEY', {
19
+ * fallback: 'default-key',
20
+ * converter(raw, _fallback) {
21
+ * if (!raw || raw.trim() === '') throw new Error('API_KEY required');
22
+ * return raw.trim();
23
+ * }
24
+ * })
25
+ * static accessor apiKey: string;
26
+ *
27
+ * \@Envapt('LOG_FILE', { fallback: '/var/log/app.log' })
28
+ * static accessor logFile: string;
29
+ *
30
+ * \@Envapt('RETRY_POLICY', { fallback: { retries: 3, backoff: 'exponential' } })
31
+ * static accessor retryPolicy: unknown;
32
+ * }
33
+ * ```
34
+ */
35
+ declare function Envapt(key: EnvKeyInput, options: {
36
+ fallback: undefined;
37
+ converter?: undefined;
38
+ }): EnvaptAccessorDecorator<string | undefined>;
39
+ declare function Envapt<TFallback>(key: EnvKeyInput, options: {
40
+ converter: (raw: string | undefined, fallback: TFallback) => TFallback;
41
+ fallback: TFallback;
42
+ } | {
43
+ fallback: TFallback;
44
+ converter?: undefined;
45
+ }): EnvaptAccessorDecorator<TFallback>;
46
+ /**
47
+ * A custom converter function without a fallback. Omit `required` to return the converter's
48
+ * output (possibly `undefined`), or pass `required: true` to throw `MissingEnvValue` on
49
+ * missing or empty values.
50
+ *
51
+ * @param key - Environment variable name(s) to load
52
+ * @param options - Configuration options
53
+ * @public
54
+ * @example
55
+ * ```ts
56
+ * class Config {
57
+ * \@Envapt('FEATURE_FLAGS', { converter(raw) {
58
+ * return raw ? raw.split('|').map(s => s.trim()) : [];
59
+ * } })
60
+ * static accessor featureFlags: string[];
61
+ *
62
+ * \@Envapt('JWT_SECRET', {
63
+ * converter: (raw) => Buffer.from(raw ?? '', 'base64'),
64
+ * required: true
65
+ * })
66
+ * static accessor jwtSecret: Buffer;
67
+ * }
68
+ * ```
69
+ */
70
+ declare function Envapt<TReturnType>(key: EnvKeyInput, options: {
71
+ converter: ConverterFunction<TReturnType>;
72
+ required?: false;
73
+ } | {
74
+ converter: ConverterFunction<TReturnType>;
75
+ required: true;
76
+ }): EnvaptAccessorDecorator<TReturnType>;
77
+ /**
78
+ * A built-in or array converter with a fallback, or `required: true`. The fallback type tracks
79
+ * the converter, so `Converters.Time` takes a number or time-string and `Converters.Url` takes
80
+ * a `URL` instance.
81
+ *
82
+ * @param key - Environment variable name(s) to load
83
+ * @param options - Configuration options
84
+ * @public
85
+ * @example
86
+ * ```ts
87
+ * import { Converters } from 'envapt';
88
+ *
89
+ * class Config {
90
+ * \@Envapt('APP_PORT', { converter: Converters.Number, fallback: 3000 })
91
+ * static accessor port: number;
92
+ *
93
+ * // the Url fallback is a URL instance, not a string
94
+ * \@Envapt('APP_URL', { converter: Converters.Url, fallback: new URL('http://localhost:3000') })
95
+ * static accessor url: URL;
96
+ *
97
+ * // prefers CANARY_URL when present, otherwise APP_URL
98
+ * \@Envapt(['CANARY_URL', 'APP_URL'], { converter: Converters.Url })
99
+ * static accessor canaryUrl: URL | null;
100
+ *
101
+ * // Time takes a number (milliseconds) or a time-string fallback (`<number><unit>`)
102
+ * \@Envapt('REQUEST_TIMEOUT', { converter: Converters.Time, fallback: '10s' })
103
+ * static accessor requestTimeout: number;
104
+ *
105
+ * \@Envapt('ALLOWED_ORIGINS', {
106
+ * converter: Converters.array({ of: Converters.String }),
107
+ * fallback: ['https://example.com']
108
+ * })
109
+ * static accessor allowedOrigins: string[];
110
+ *
111
+ * \@Envapt('DATABASE_URL', { converter: Converters.Url, required: true })
112
+ * static accessor databaseUrl: URL;
113
+ * }
114
+ * ```
115
+ */
116
+ declare function Envapt<TConverter extends BuiltInConverter | ArrayOf>(key: EnvKeyInput, options: {
117
+ converter: TConverter;
118
+ fallback: InferConverterFallbackType<TConverter>;
119
+ required?: false;
120
+ } | {
121
+ converter: TConverter;
122
+ required: true;
123
+ }): EnvaptAccessorDecorator<InferConverterReturnType<TConverter>>;
124
+ declare function Envapt<TConverter extends BuiltInConverter | ArrayOf>(key: EnvKeyInput, options: {
125
+ converter: TConverter;
126
+ fallback: undefined;
127
+ required?: false;
128
+ }): EnvaptAccessorDecorator<InferConverterReturnType<TConverter> | undefined>;
129
+ declare function Envapt<TConverter extends BuiltInConverter | ArrayOf>(key: EnvKeyInput, options: {
130
+ converter: TConverter;
131
+ required?: false;
132
+ }): EnvaptAccessorDecorator<InferConverterReturnType<TConverter> | null>;
133
+ /**
134
+ * A primitive constructor (`Number`, `Boolean`) with an optional fallback.
135
+ *
136
+ * @param key - Environment variable name(s) to load
137
+ * @param options - Configuration options
138
+ * @public
139
+ * @example
140
+ * ```ts
141
+ * class Config {
142
+ * \@Envapt('MAX_CONNECTIONS', { converter: Number, fallback: 100 })
143
+ * static accessor maxConnections: number;
144
+ *
145
+ * \@Envapt('FEATURE_ENABLED', { converter: Boolean, fallback: false })
146
+ * static accessor featureEnabled: boolean;
147
+ * }
148
+ * ```
149
+ */
150
+ declare function Envapt<TConstructor extends PrimitiveConstructor>(key: EnvKeyInput, options: {
151
+ converter: TConstructor;
152
+ fallback: InferPrimitiveReturnType<TConstructor>;
153
+ required?: false;
154
+ } | {
155
+ converter: TConstructor;
156
+ required: true;
157
+ }): EnvaptAccessorDecorator<InferPrimitiveReturnType<TConstructor>>;
158
+ declare function Envapt<TConstructor extends PrimitiveConstructor>(key: EnvKeyInput, options: {
159
+ converter: TConstructor;
160
+ fallback: undefined;
161
+ required?: false;
162
+ }): EnvaptAccessorDecorator<InferPrimitiveReturnType<TConstructor> | undefined>;
163
+ declare function Envapt<TConstructor extends PrimitiveConstructor>(key: EnvKeyInput, options: {
164
+ converter: TConstructor;
165
+ required?: false;
166
+ }): EnvaptAccessorDecorator<InferPrimitiveReturnType<TConstructor> | null>;
167
+ /**
168
+ * Required, no converter (raw string). Throws `MissingEnvValue` on first access when the env
169
+ * value is missing or empty after trimming, independent of the global `Envapter.strict` flag.
170
+ * Pairing `required: true` with `fallback` matches no overload at compile time, and the runtime
171
+ * Validator rejects dynamic objects that bypass the types.
172
+ *
173
+ * @param key - Environment variable name(s) to load
174
+ * @param options - `{ required: true }`
175
+ * @public
176
+ * @example
177
+ * ```ts
178
+ * class Config {
179
+ * \@Envapt('API_KEY', { required: true })
180
+ * static accessor apiKey: string;
181
+ * }
182
+ * ```
183
+ */
184
+ declare function Envapt(key: EnvKeyInput, options: {
185
+ required: true;
186
+ }): EnvaptAccessorDecorator<string>;
187
+ /**
188
+ * No-fallback form. The property resolves from env or `null`.
189
+ *
190
+ * @param key - Environment variable name(s) to load
191
+ * @public
192
+ * @example
193
+ * ```ts
194
+ * class Config {
195
+ * \@Envapt('SIMPLE_VALUE')
196
+ * static accessor simple: string | null;
197
+ * }
198
+ * ```
199
+ */
200
+ declare function Envapt(key: EnvKeyInput): EnvaptAccessorDecorator<string | null>;
201
+ /**
202
+ * A Standard Schema v1 adapter (zod, valibot, arktype, hand-rolled). Synchronous schemas only,
203
+ * so a Promise-returning `validate` throws `InvalidUserDefinedConfig` at runtime. Pairing
204
+ * `schema` with `converter` matches no overload at compile time, and the runtime Validator
205
+ * rejects dynamic objects that bypass the types.
206
+ * @public
207
+ */
208
+ declare function Envapt<Schema extends StandardSchemaV1>(key: EnvKeyInput, options: {
209
+ schema: SchemaConstraint<Schema>;
210
+ fallback?: InferSchemaOutput<Schema>;
211
+ required?: false;
212
+ } | {
213
+ schema: SchemaConstraint<Schema>;
214
+ required: true;
215
+ }): EnvaptAccessorDecorator<InferSchemaOutput<Schema>>;
216
+ //#endregion
217
+ export { Envapt };
218
+ //# sourceMappingURL=Envapt.d.mts.map
@@ -0,0 +1,40 @@
1
+ import { TimeFallback } from "../../types/Conversion.mjs";
2
+ import { EnvKeyInput } from "../../types/Env.mjs";
3
+ import { EnvaptAccessorDecorator } from "../../types/Decorator.mjs";
4
+
5
+ //#region src/decorators/modern/SugarDecorators.d.ts
6
+ /**
7
+ * Shorthand for `@Envapt(key, { converter: Converters.Boolean, fallback })`.
8
+ * @public
9
+ */
10
+ declare function EnvBool(key: EnvKeyInput, fallback: boolean): EnvaptAccessorDecorator<boolean>;
11
+ declare function EnvBool(key: EnvKeyInput): EnvaptAccessorDecorator<boolean | null>;
12
+ /**
13
+ * Shorthand for `@Envapt(key, { converter: Converters.Number, fallback })`.
14
+ * @public
15
+ */
16
+ declare function EnvNum(key: EnvKeyInput, fallback: number): EnvaptAccessorDecorator<number>;
17
+ declare function EnvNum(key: EnvKeyInput): EnvaptAccessorDecorator<number | null>;
18
+ /**
19
+ * Shorthand for `@Envapt(key, { converter: Converters.String, fallback })`.
20
+ * @public
21
+ */
22
+ declare function EnvStr(key: EnvKeyInput, fallback: string): EnvaptAccessorDecorator<string>;
23
+ declare function EnvStr(key: EnvKeyInput): EnvaptAccessorDecorator<string | null>;
24
+ /**
25
+ * Shorthand for `@Envapt(key, { converter: Converters.Time, fallback })`. The fallback is a
26
+ * millisecond number or a time string (`'15m'`), and the resolved value is always milliseconds.
27
+ * @public
28
+ */
29
+ declare function EnvTime(key: EnvKeyInput, fallback: TimeFallback): EnvaptAccessorDecorator<number>;
30
+ declare function EnvTime(key: EnvKeyInput): EnvaptAccessorDecorator<number | null>;
31
+ /**
32
+ * Shorthand for `@Envapt(key, { converter: Converters.Url, fallback })`. The fallback is a `URL`
33
+ * instance, not a URL string.
34
+ * @public
35
+ */
36
+ declare function EnvUrl(key: EnvKeyInput, fallback: URL): EnvaptAccessorDecorator<URL>;
37
+ declare function EnvUrl(key: EnvKeyInput): EnvaptAccessorDecorator<URL | null>;
38
+ //#endregion
39
+ export { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl };
40
+ //# sourceMappingURL=SugarDecorators.d.mts.map
@@ -1,7 +1,7 @@
1
- import { Environment } from "./core/EnvironmentMethods.mjs";
2
- import { AdvancedMethods } from "./core/AdvancedMethods.mjs";
1
+ import { Environment } from "../core/EnvironmentMethods.mjs";
2
+ import { AdvancedMethods } from "../core/AdvancedMethods.mjs";
3
3
 
4
- //#region src/Envapter.d.ts
4
+ //#region src/engine/Envapter.d.ts
5
5
  /**
6
6
  * Main configuration class for environment variable management.
7
7
  *
@@ -1,8 +1,8 @@
1
- import { EnvFileOptions } from "./Dotenv.cjs";
2
- import { ProfilesConfig } from "./types/Options.cjs";
3
- import { Envapter } from "./Envapter.cjs";
1
+ import { EnvFileOptions } from "../infra/Dotenv.mjs";
2
+ import { ProfilesConfig } from "../types/Options.mjs";
3
+ import { Envapter } from "./Envapter.mjs";
4
4
 
5
- //#region src/NodeEnvapter.d.ts
5
+ //#region src/engine/NodeEnvapter.d.ts
6
6
  /**
7
7
  * The Node/Bun/Deno facade: {@link Envapter} plus the filesystem-only configuration APIs (`.env`
8
8
  * path selection, base directory, dotenv options, and per-environment profiles). The browser and
@@ -70,4 +70,4 @@ declare class NodeEnvapter extends Envapter {
70
70
  }
71
71
  //#endregion
72
72
  export { NodeEnvapter };
73
- //# sourceMappingURL=NodeEnvapter.d.cts.map
73
+ //# sourceMappingURL=NodeEnvapter.d.mts.map
@@ -1,6 +1,6 @@
1
- import { EnvapterService } from "./types/Env.mjs";
1
+ import { EnvapterService } from "../types/Env.mjs";
2
2
 
3
- //#region src/TemplateResolver.d.ts
3
+ //#region src/engine/TemplateResolver.d.ts
4
4
  /**
5
5
  * Resolve `${VAR}` template references in environment values, guarding against circular
6
6
  * references and missing variables.
@@ -1,20 +1,19 @@
1
- import __tsdown_shims_path from 'node:path';
2
- import __tsdown_shims_url from 'node:url';
1
+ import { DebugLevel } from "./infra/Debug.mjs";
2
+ import { EnvFileOptions } from "./infra/Dotenv.mjs";
3
3
  import { ArrayElement, ArrayOf, ConverterToken, Converters, CustomElementConverter, isArrayOf } from "./converters/Converters.mjs";
4
4
  import { AdvancedConverterReturn, BuiltInConverter, BuiltInConverterFunction, ConditionalReturn, ConverterFunction, EnvaptConverter, InferConverterFallbackType, InferConverterReturnType, InferPrimitiveReturnType, JsonValue, MapOfConverterFunctions, PrimitiveConstructor, TimeFallback, TimeUnit } from "./types/Conversion.mjs";
5
- import { InferSchemaInput, InferSchemaOutput, StandardSchemaV1 } from "./StandardSchema.mjs";
5
+ import { InferSchemaInput, InferSchemaOutput, StandardSchemaV1 } from "./infra/StandardSchema.mjs";
6
6
  import { Err, SchemaConstraint, SchemaMustBeSync } from "./types/Schema.mjs";
7
- import { DebugLevel } from "./Debug.mjs";
8
- import { EnvFileOptions } from "./Dotenv.mjs";
9
7
  import { Environment } from "./core/EnvironmentMethods.mjs";
10
8
  import { EnvProfile, EnvaptOptions, ProfilesConfig } from "./types/Options.mjs";
11
9
  import { EnvKeyInput } from "./types/Env.mjs";
12
10
  import { BareEnvSource, EnvSource, FileEnvSource } from "./types/Source.mjs";
13
- import { Envapt } from "./decorators/Envapt.mjs";
14
- import { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl } from "./decorators/SugarDecorators.mjs";
11
+ import { EnvaptAccessorDecorator, EnvaptFieldDecorator } from "./types/Decorator.mjs";
15
12
  import { ManualEnvSource } from "./sources/ManualEnvSource.mjs";
16
13
  import { WorkerEnvSource } from "./sources/WorkerEnvSource.mjs";
17
- import { EnvaptError, EnvaptErrorCodes } from "./Error.mjs";
18
- import { NodeEnvapter } from "./NodeEnvapter.mjs";
14
+ import { EnvaptError, EnvaptErrorCodes } from "./infra/Error.mjs";
15
+ import { Envapt } from "./decorators/modern/Envapt.mjs";
16
+ import { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl } from "./decorators/modern/SugarDecorators.mjs";
17
+ import { NodeEnvapter } from "./engine/NodeEnvapter.mjs";
19
18
  import { NodeEnvSource } from "./sources/NodeEnvSource.mjs";
20
- export { type AdvancedConverterReturn, type ArrayElement, type ArrayOf, type BareEnvSource, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, type ConverterToken, Converters, type CustomElementConverter, type DebugLevel, EnvBool, type EnvFileOptions, type EnvKeyInput, EnvNum, type EnvProfile, type EnvSource, EnvStr, EnvTime, EnvUrl, Envapt, type EnvaptConverter, EnvaptError, EnvaptErrorCodes, type EnvaptOptions, NodeEnvapter as Envapter, Environment, type Err, type FileEnvSource, type InferConverterFallbackType, type InferConverterReturnType, type InferPrimitiveReturnType, type InferSchemaInput, type InferSchemaOutput, type JsonValue, ManualEnvSource, type MapOfConverterFunctions, NodeEnvSource, type PrimitiveConstructor, type ProfilesConfig, type SchemaConstraint, type SchemaMustBeSync, type StandardSchemaV1, type TimeFallback, type TimeUnit, WorkerEnvSource, isArrayOf };
19
+ export { type AdvancedConverterReturn, type ArrayElement, type ArrayOf, type BareEnvSource, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, type ConverterToken, Converters, type CustomElementConverter, type DebugLevel, EnvBool, type EnvFileOptions, type EnvKeyInput, EnvNum, type EnvProfile, type EnvSource, EnvStr, EnvTime, EnvUrl, Envapt, type EnvaptAccessorDecorator, type EnvaptConverter, EnvaptError, EnvaptErrorCodes, type EnvaptFieldDecorator, type EnvaptOptions, NodeEnvapter as Envapter, Environment, type Err, type FileEnvSource, type InferConverterFallbackType, type InferConverterReturnType, type InferPrimitiveReturnType, type InferSchemaInput, type InferSchemaOutput, type JsonValue, ManualEnvSource, type MapOfConverterFunctions, NodeEnvSource, type PrimitiveConstructor, type ProfilesConfig, type SchemaConstraint, type SchemaMustBeSync, type StandardSchemaV1, type TimeFallback, type TimeUnit, WorkerEnvSource, isArrayOf };
@@ -1,17 +1,18 @@
1
- import { DebugLevel } from "./Debug.mjs";
2
- import { EnvFileOptions } from "./Dotenv.mjs";
1
+ import { DebugLevel } from "./infra/Debug.mjs";
2
+ import { EnvFileOptions } from "./infra/Dotenv.mjs";
3
3
  import { ArrayElement, ArrayOf, ConverterToken, Converters, CustomElementConverter, isArrayOf } from "./converters/Converters.mjs";
4
4
  import { AdvancedConverterReturn, BuiltInConverter, BuiltInConverterFunction, ConditionalReturn, ConverterFunction, EnvaptConverter, InferConverterFallbackType, InferConverterReturnType, InferPrimitiveReturnType, JsonValue, MapOfConverterFunctions, PrimitiveConstructor, TimeFallback, TimeUnit } from "./types/Conversion.mjs";
5
- import { InferSchemaInput, InferSchemaOutput, StandardSchemaV1 } from "./StandardSchema.mjs";
5
+ import { InferSchemaInput, InferSchemaOutput, StandardSchemaV1 } from "./infra/StandardSchema.mjs";
6
6
  import { Err, SchemaConstraint, SchemaMustBeSync } from "./types/Schema.mjs";
7
7
  import { Environment } from "./core/EnvironmentMethods.mjs";
8
8
  import { EnvProfile, EnvaptOptions, ProfilesConfig } from "./types/Options.mjs";
9
9
  import { EnvKeyInput } from "./types/Env.mjs";
10
10
  import { BareEnvSource, EnvSource, FileEnvSource } from "./types/Source.mjs";
11
- import { Envapter } from "./Envapter.mjs";
12
- import { Envapt } from "./decorators/Envapt.mjs";
13
- import { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl } from "./decorators/SugarDecorators.mjs";
11
+ import { EnvaptAccessorDecorator, EnvaptFieldDecorator } from "./types/Decorator.mjs";
12
+ import { Envapter } from "./engine/Envapter.mjs";
14
13
  import { ManualEnvSource } from "./sources/ManualEnvSource.mjs";
15
14
  import { WorkerEnvSource } from "./sources/WorkerEnvSource.mjs";
16
- import { EnvaptError, EnvaptErrorCodes } from "./Error.mjs";
17
- export { type AdvancedConverterReturn, type ArrayElement, type ArrayOf, type BareEnvSource, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, type ConverterToken, Converters, type CustomElementConverter, type DebugLevel, EnvBool, type EnvFileOptions, type EnvKeyInput, EnvNum, type EnvProfile, type EnvSource, EnvStr, EnvTime, EnvUrl, Envapt, type EnvaptConverter, EnvaptError, EnvaptErrorCodes, type EnvaptOptions, Envapter, Environment, type Err, type FileEnvSource, type InferConverterFallbackType, type InferConverterReturnType, type InferPrimitiveReturnType, type InferSchemaInput, type InferSchemaOutput, type JsonValue, ManualEnvSource, type MapOfConverterFunctions, type PrimitiveConstructor, type ProfilesConfig, type SchemaConstraint, type SchemaMustBeSync, type StandardSchemaV1, type TimeFallback, type TimeUnit, WorkerEnvSource, isArrayOf };
15
+ import { EnvaptError, EnvaptErrorCodes } from "./infra/Error.mjs";
16
+ import { Envapt } from "./decorators/modern/Envapt.mjs";
17
+ import { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl } from "./decorators/modern/SugarDecorators.mjs";
18
+ export { type AdvancedConverterReturn, type ArrayElement, type ArrayOf, type BareEnvSource, type BuiltInConverter, type BuiltInConverterFunction, type ConditionalReturn, type ConverterFunction, type ConverterToken, Converters, type CustomElementConverter, type DebugLevel, EnvBool, type EnvFileOptions, type EnvKeyInput, EnvNum, type EnvProfile, type EnvSource, EnvStr, EnvTime, EnvUrl, Envapt, type EnvaptAccessorDecorator, type EnvaptConverter, EnvaptError, EnvaptErrorCodes, type EnvaptFieldDecorator, type EnvaptOptions, Envapter, Environment, type Err, type FileEnvSource, type InferConverterFallbackType, type InferConverterReturnType, type InferPrimitiveReturnType, type InferSchemaInput, type InferSchemaOutput, type JsonValue, ManualEnvSource, type MapOfConverterFunctions, type PrimitiveConstructor, type ProfilesConfig, type SchemaConstraint, type SchemaMustBeSync, type StandardSchemaV1, type TimeFallback, type TimeUnit, WorkerEnvSource, isArrayOf };
@@ -1,4 +1,4 @@
1
- //#region src/Debug.d.ts
1
+ //#region src/infra/Debug.d.ts
2
2
  /**
3
3
  * Debug log levels for {@link Envapter.debug}. `silent` (default) emits nothing.
4
4
  * `warn` covers signals that might indicate misconfiguration: failed file reads,
@@ -1,4 +1,4 @@
1
- //#region src/Dotenv.d.ts
1
+ //#region src/infra/Dotenv.d.ts
2
2
  /**
3
3
  * Public options for the internal `.env` loader. Mirrors the subset of dotenv's
4
4
  * `config()` options that envapt actually supports (no DOTENV_KEY, no quiet).
@@ -1,6 +1,6 @@
1
1
  import { StandardSchemaV1 } from "./StandardSchema.mjs";
2
2
 
3
- //#region src/Error.d.ts
3
+ //#region src/infra/Error.d.ts
4
4
  declare enum EnvaptErrorCodes {
5
5
  /** Thrown when an invalid fallback value is provided */
6
6
  InvalidFallback = 101,
@@ -1,4 +1,4 @@
1
- //#region src/StandardSchema.d.ts
1
+ //#region src/infra/StandardSchema.d.ts
2
2
  /**
3
3
  * Standard Schema V1 interface. Inlined verbatim from the spec at https://standardschema.dev
4
4
  * so envapt has zero runtime peer dependencies on any specific schema library
@@ -0,0 +1,4 @@
1
+ import { EnvaptFieldDecorator } from "./types/Decorator.mjs";
2
+ import { Envapt } from "./decorators/legacy/Envapt.mjs";
3
+ import { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl } from "./decorators/legacy/SugarDecorators.mjs";
4
+ export { EnvBool, EnvNum, EnvStr, EnvTime, EnvUrl, Envapt, type EnvaptFieldDecorator };
@@ -1,4 +1,4 @@
1
- import { FileEnvSource } from "../types/Source.cjs";
1
+ import { FileEnvSource } from "../types/Source.mjs";
2
2
 
3
3
  //#region src/sources/NodeEnvSource.d.ts
4
4
  /**
@@ -17,4 +17,4 @@ declare class NodeEnvSource implements FileEnvSource {
17
17
  }
18
18
  //#endregion
19
19
  export { NodeEnvSource };
20
- //# sourceMappingURL=NodeEnvSource.d.cts.map
20
+ //# sourceMappingURL=NodeEnvSource.d.mts.map
@@ -0,0 +1,26 @@
1
+ //#region src/types/Decorator.d.ts
2
+ /**
3
+ * A legacy (experimentalDecorators) property decorator that also constrains the decorated field's
4
+ * declared type. `Output` is the value the decorator produces. The field must be wide enough to hold
5
+ * it, so a field narrower than `Output` fails to compile while a wider or nullable field is accepted.
6
+ * The tuple wrap stops `Output` from distributing when it is a union.
7
+ * @public
8
+ */
9
+ type EnvaptFieldDecorator<Output> = <Target, Key extends keyof Target>(target: Target, key: [Output] extends [Target[Key]] ? Key : {
10
+ '[envapt] field type must hold the converter output': Output;
11
+ }) => void;
12
+ /**
13
+ * A modern (TC39 Stage 3) accessor decorator that also constrains the decorated `accessor`'s
14
+ * declared type. `Output` is the value the decorator produces. The accessor must be wide enough to
15
+ * hold it, so an accessor narrower than `Output` fails to compile while a wider or nullable one is
16
+ * accepted. The tuple wrap stops `Output` from distributing when it is a union.
17
+ * @public
18
+ */
19
+ type EnvaptAccessorDecorator<Output> = <This, Value>(target: ClassAccessorDecoratorTarget<This, [Output] extends [Value] ? Value : {
20
+ '[envapt] field type must hold the converter output': Output;
21
+ }>, context: ClassAccessorDecoratorContext<This, [Output] extends [Value] ? Value : {
22
+ '[envapt] field type must hold the converter output': Output;
23
+ }>) => ClassAccessorDecoratorResult<This, Value>;
24
+ //#endregion
25
+ export { EnvaptAccessorDecorator, EnvaptFieldDecorator };
26
+ //# sourceMappingURL=Decorator.d.mts.map
@@ -1,4 +1,4 @@
1
- import { StandardSchemaV1 } from "../StandardSchema.mjs";
1
+ import { StandardSchemaV1 } from "../infra/StandardSchema.mjs";
2
2
 
3
3
  //#region src/types/Schema.d.ts
4
4
  declare const _envaptErrBrand: unique symbol;
@@ -1,2 +1,2 @@
1
- import{EnvaptError as e}from"../Error.mjs";const t=1e3,n=60*t,r=60*n,i=24*r,a={ms:1,s:t,m:n,h:r,d:i,w:7*i},o=new RegExp(String.raw`^(\d+(?:\.\d+)?)(ms|s|m|h|d|w)?$`,`u`),s=new RegExp(String.raw`^(\d+(?:\.\d+)?)(ms|s|m|h|d|w)$`,`u`);function c(e,t=!1){let n=e.match(t?s:o);if(!n)return;let[,r,i]=n;if(!r)return;let c=Number.parseFloat(r);if(!Number.isNaN(c))return c*a[i??`ms`]}var l=class t{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(t,n){let r=c(t);if(r!==void 0)return r;if(typeof n==`number`)return n;if(typeof n==`string`){let t=c(n,!0);if(t===void 0)throw new e(105,`Time-string fallback "${n}" is not a valid format. Expected <number><unit> where unit is one of: ms, s, m, h, d, w.`);return t}}static processArrayConverter(n,r,i=!1){if(n.trim()===``)return[];let a=n.split(r.delimiter).map(e=>String(e).trim());if(i){let t=a.findIndex(e=>e===``);if(t!==-1)throw new e(207,`Array element at index ${t} is empty or whitespace only (strict mode).`)}let o=a.filter(Boolean);if(!o.length)return[];let s=r.of;if(typeof s==`function`)return o.map((t,n)=>{let r=s(t);if(r===void 0)throw new e(206,`Custom element converter returned undefined for item "${t}" at index ${n}.`);return r});let c=t.getConverter(s);return o.map((t,n)=>{let r=c(t,void 0);if(r===void 0)throw new e(206,`Element "${t}" at index ${n} could not be converted to ${s}.`);return r})}static getConverter(e){return{string:t.string,number:t.number,boolean:t.boolean,integer:t.integer,bigint:t.bigint,symbol:t.symbol,float:t.float,json:t.json,url:t.url,regexp:t.regexp,date:t.date,time:t.time}[e]}};export{l as BuiltInConverters};
1
+ import{EnvaptError as e}from"../infra/Error.mjs";const t=1e3,n=60*t,r=60*n,i=24*r,a={ms:1,s:t,m:n,h:r,d:i,w:7*i},o=new RegExp(String.raw`^(\d+(?:\.\d+)?)(ms|s|m|h|d|w)?$`,`u`),s=new RegExp(String.raw`^(\d+(?:\.\d+)?)(ms|s|m|h|d|w)$`,`u`);function c(e,t=!1){let n=e.match(t?s:o);if(!n)return;let[,r,i]=n;if(!r)return;let c=Number.parseFloat(r);if(!Number.isNaN(c))return c*a[i??`ms`]}var l=class t{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(t,n){let r=c(t);if(r!==void 0)return r;if(typeof n==`number`)return n;if(typeof n==`string`){let t=c(n,!0);if(t===void 0)throw new e(105,`Time-string fallback "${n}" is not a valid format. Expected <number><unit> where unit is one of: ms, s, m, h, d, w.`);return t}}static processArrayConverter(n,r,i=!1){if(n.trim()===``)return[];let a=n.split(r.delimiter).map(e=>String(e).trim());if(i){let t=a.findIndex(e=>e===``);if(t!==-1)throw new e(207,`Array element at index ${t} is empty or whitespace only (strict mode).`)}let o=a.filter(Boolean);if(!o.length)return[];let s=r.of;if(typeof s==`function`)return o.map((t,n)=>{let r=s(t);if(r===void 0)throw new e(206,`Custom element converter returned undefined for item "${t}" at index ${n}.`);return r});let c=t.getConverter(s);return o.map((t,n)=>{let r=c(t,void 0);if(r===void 0)throw new e(206,`Element "${t}" at index ${n} could not be converted to ${s}.`);return r})}static getConverter(e){return{string:t.string,number:t.number,boolean:t.boolean,integer:t.integer,bigint:t.bigint,symbol:t.symbol,float:t.float,json:t.json,url:t.url,regexp:t.regexp,date:t.date,time:t.time}[e]}};export{l as BuiltInConverters};
2
2
  //# sourceMappingURL=BuiltInConverters.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuiltInConverters.mjs","names":["converter"],"sources":["../../../src/converters/BuiltInConverters.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { EnvaptError, EnvaptErrorCodes } from '../Error';\n\nimport type { ArrayOf, CustomElementConverter } from './Converters';\nimport type {\n BuiltInConverter,\n BuiltInConverterFunction,\n JsonValue,\n MapOfConverterFunctions,\n TimeFallback,\n TimeUnit\n} from '../types';\n\nconst MS_PER_SECOND = 1000;\nconst SECONDS_PER_MINUTE = 60;\nconst MINUTES_PER_HOUR = 60;\nconst HOURS_PER_DAY = 24;\nconst DAYS_PER_WEEK = 7;\nconst MS_PER_MINUTE = SECONDS_PER_MINUTE * MS_PER_SECOND;\nconst MS_PER_HOUR = MINUTES_PER_HOUR * MS_PER_MINUTE;\nconst MS_PER_DAY = HOURS_PER_DAY * MS_PER_HOUR;\nconst MS_PER_WEEK = DAYS_PER_WEEK * MS_PER_DAY;\n\nconst TIME_UNIT_MS: Record<TimeUnit, number> = {\n ms: 1,\n s: MS_PER_SECOND,\n m: MS_PER_MINUTE,\n h: MS_PER_HOUR,\n d: MS_PER_DAY,\n w: MS_PER_WEEK\n};\n\nconst TIME_LOOSE_RE = new RegExp(String.raw`^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d|w)?$`, 'u');\nconst TIME_STRICT_RE = new RegExp(String.raw`^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d|w)$`, 'u');\n\n/**\n * Parse a time string (e.g. `\"30s\"`, `\"1.5h\"`) into milliseconds.\n *\n * @param input - The string to parse.\n * @param strict - When `true`, require an explicit unit (used for fallback strings).\n * When `false` (default), treat a missing unit as `ms` (used for raw env values). Both allow decimals.\n * @returns The duration in milliseconds, or `undefined` if the input does not match the expected format.\n * @internal\n */\nfunction parseTimeString(input: string, strict = false): number | undefined {\n const match = input.match(strict ? TIME_STRICT_RE : TIME_LOOSE_RE);\n if (!match) return undefined;\n\n const [, numStr, capturedUnit] = match;\n if (!numStr) return undefined;\n\n const value = Number.parseFloat(numStr);\n if (Number.isNaN(value)) return undefined;\n\n const unit = (capturedUnit ?? 'ms') as TimeUnit;\n return value * TIME_UNIT_MS[unit];\n}\n\n/**\n * Built-in converter implementations\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- dispatch-table helper, the documented exception to the no-static-class rule\nexport class BuiltInConverters {\n static string(raw: string, _fallback?: string): string | undefined {\n return String(raw);\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 try {\n return raw ? Symbol.for(raw) : fallback;\n } catch {\n return fallback;\n }\n }\n\n static integer(raw: string, fallback?: number): number | undefined {\n const parsed = Number.parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string, fallback?: number): number | undefined {\n const parsed = Number.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 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(new RegExp(String.raw`^\\/(.+)\\/([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 (new RegExp(String.raw`^\\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 // Only accept ISO 8601 date strings (strict format)\n const isoRegex = new RegExp(String.raw`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$`, 'u');\n if (!isoRegex.test(raw)) return fallback;\n\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string, fallback?: TimeFallback): number | undefined {\n const parsedRaw = parseTimeString(raw);\n if (parsedRaw !== undefined) return parsedRaw;\n\n // Raw didn't parse so apply fallback\n if (typeof fallback === 'number') return fallback;\n if (typeof fallback === 'string') {\n // A string fallback must name a unit; a unitless number is expressed as a number fallback, not a string.\n const parsedFallback = parseTimeString(fallback, true);\n if (parsedFallback === undefined) {\n throw new EnvaptError(\n EnvaptErrorCodes.MalformedTimeFallback,\n `Time-string fallback \"${fallback}\" is not a valid format. Expected <number><unit> where unit is one of: ms, s, m, h, d, w.`\n );\n }\n return parsedFallback;\n }\n return undefined;\n }\n\n /**\n * Process the raw env value for an {@link ArrayOf} configuration.\n *\n * Behaviour:\n * - Splits on `config.delimiter`, trims each item, and filters out empty entries.\n * - With a scalar element token: runs each item through the matching built-in converter.\n * If any element returns `undefined`, throws `ArrayElementConversionFailed` with positional info.\n * - With a custom function element: runs each item through the function. Propagates user\n * exceptions; treats `undefined` returns as conversion failures (same throw as scalar path).\n * - Returns `[]` when the raw value is empty/whitespace.\n * - When `strict` is true, throws `EmptyArrayElement` on any empty/whitespace item instead\n * of silently filtering it out.\n */\n static processArrayConverter(raw: string, config: ArrayOf, strict = false): unknown[] {\n if (raw.trim() === '') return [];\n\n const trimmedItems = raw.split(config.delimiter).map((item) => String(item).trim());\n\n if (strict) {\n const emptyIdx = trimmedItems.findIndex((item) => item === '');\n if (emptyIdx !== -1) {\n throw new EnvaptError(\n EnvaptErrorCodes.EmptyArrayElement,\n `Array element at index ${emptyIdx} is empty or whitespace only (strict mode).`\n );\n }\n }\n\n const items = trimmedItems.filter(Boolean);\n\n if (!items.length) return [];\n\n const elementOf = config.of;\n\n if (typeof elementOf === 'function') {\n return items.map((item, index) => {\n const converter = elementOf as CustomElementConverter;\n const result = converter(item);\n if (result === undefined) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayElementConversionFailed,\n `Custom element converter returned undefined for item \"${item}\" at index ${index}.`\n );\n }\n return result;\n });\n }\n\n const converter = BuiltInConverters.getConverter(elementOf);\n return items.map((item, index) => {\n const converted = converter(item, undefined);\n if (converted === undefined) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayElementConversionFailed,\n `Element \"${item}\" at index ${index} could not be converted to ${elementOf}.`\n );\n }\n return converted;\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 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"],"mappings":"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"}
1
+ {"version":3,"file":"BuiltInConverters.mjs","names":["converter"],"sources":["../../../src/converters/BuiltInConverters.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { EnvaptError, EnvaptErrorCodes } from '../infra/Error';\n\nimport type { ArrayOf, CustomElementConverter } from './Converters';\nimport type {\n BuiltInConverter,\n BuiltInConverterFunction,\n JsonValue,\n MapOfConverterFunctions,\n TimeFallback,\n TimeUnit\n} from '../types';\n\nconst MS_PER_SECOND = 1000;\nconst SECONDS_PER_MINUTE = 60;\nconst MINUTES_PER_HOUR = 60;\nconst HOURS_PER_DAY = 24;\nconst DAYS_PER_WEEK = 7;\nconst MS_PER_MINUTE = SECONDS_PER_MINUTE * MS_PER_SECOND;\nconst MS_PER_HOUR = MINUTES_PER_HOUR * MS_PER_MINUTE;\nconst MS_PER_DAY = HOURS_PER_DAY * MS_PER_HOUR;\nconst MS_PER_WEEK = DAYS_PER_WEEK * MS_PER_DAY;\n\nconst TIME_UNIT_MS: Record<TimeUnit, number> = {\n ms: 1,\n s: MS_PER_SECOND,\n m: MS_PER_MINUTE,\n h: MS_PER_HOUR,\n d: MS_PER_DAY,\n w: MS_PER_WEEK\n};\n\nconst TIME_LOOSE_RE = new RegExp(String.raw`^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d|w)?$`, 'u');\nconst TIME_STRICT_RE = new RegExp(String.raw`^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d|w)$`, 'u');\n\n/**\n * Parse a time string (e.g. `\"30s\"`, `\"1.5h\"`) into milliseconds.\n *\n * @param input - The string to parse.\n * @param strict - When `true`, require an explicit unit (used for fallback strings).\n * When `false` (default), treat a missing unit as `ms` (used for raw env values). Both allow decimals.\n * @returns The duration in milliseconds, or `undefined` if the input does not match the expected format.\n * @internal\n */\nfunction parseTimeString(input: string, strict = false): number | undefined {\n const match = input.match(strict ? TIME_STRICT_RE : TIME_LOOSE_RE);\n if (!match) return undefined;\n\n const [, numStr, capturedUnit] = match;\n if (!numStr) return undefined;\n\n const value = Number.parseFloat(numStr);\n if (Number.isNaN(value)) return undefined;\n\n const unit = (capturedUnit ?? 'ms') as TimeUnit;\n return value * TIME_UNIT_MS[unit];\n}\n\n/**\n * Built-in converter implementations\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- dispatch-table helper, the documented exception to the no-static-class rule\nexport class BuiltInConverters {\n static string(raw: string, _fallback?: string): string | undefined {\n return String(raw);\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 try {\n return raw ? Symbol.for(raw) : fallback;\n } catch {\n return fallback;\n }\n }\n\n static integer(raw: string, fallback?: number): number | undefined {\n const parsed = Number.parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string, fallback?: number): number | undefined {\n const parsed = Number.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 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(new RegExp(String.raw`^\\/(.+)\\/([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 (new RegExp(String.raw`^\\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 // Only accept ISO 8601 date strings (strict format)\n const isoRegex = new RegExp(String.raw`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$`, 'u');\n if (!isoRegex.test(raw)) return fallback;\n\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string, fallback?: TimeFallback): number | undefined {\n const parsedRaw = parseTimeString(raw);\n if (parsedRaw !== undefined) return parsedRaw;\n\n // Raw didn't parse so apply fallback\n if (typeof fallback === 'number') return fallback;\n if (typeof fallback === 'string') {\n // A string fallback must name a unit; a unitless number is expressed as a number fallback, not a string.\n const parsedFallback = parseTimeString(fallback, true);\n if (parsedFallback === undefined) {\n throw new EnvaptError(\n EnvaptErrorCodes.MalformedTimeFallback,\n `Time-string fallback \"${fallback}\" is not a valid format. Expected <number><unit> where unit is one of: ms, s, m, h, d, w.`\n );\n }\n return parsedFallback;\n }\n return undefined;\n }\n\n /**\n * Process the raw env value for an {@link ArrayOf} configuration.\n *\n * Behaviour:\n * - Splits on `config.delimiter`, trims each item, and filters out empty entries.\n * - With a scalar element token: runs each item through the matching built-in converter.\n * If any element returns `undefined`, throws `ArrayElementConversionFailed` with positional info.\n * - With a custom function element: runs each item through the function. Propagates user\n * exceptions; treats `undefined` returns as conversion failures (same throw as scalar path).\n * - Returns `[]` when the raw value is empty/whitespace.\n * - When `strict` is true, throws `EmptyArrayElement` on any empty/whitespace item instead\n * of silently filtering it out.\n */\n static processArrayConverter(raw: string, config: ArrayOf, strict = false): unknown[] {\n if (raw.trim() === '') return [];\n\n const trimmedItems = raw.split(config.delimiter).map((item) => String(item).trim());\n\n if (strict) {\n const emptyIdx = trimmedItems.findIndex((item) => item === '');\n if (emptyIdx !== -1) {\n throw new EnvaptError(\n EnvaptErrorCodes.EmptyArrayElement,\n `Array element at index ${emptyIdx} is empty or whitespace only (strict mode).`\n );\n }\n }\n\n const items = trimmedItems.filter(Boolean);\n\n if (!items.length) return [];\n\n const elementOf = config.of;\n\n if (typeof elementOf === 'function') {\n return items.map((item, index) => {\n const converter = elementOf as CustomElementConverter;\n const result = converter(item);\n if (result === undefined) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayElementConversionFailed,\n `Custom element converter returned undefined for item \"${item}\" at index ${index}.`\n );\n }\n return result;\n });\n }\n\n const converter = BuiltInConverters.getConverter(elementOf);\n return items.map((item, index) => {\n const converted = converter(item, undefined);\n if (converted === undefined) {\n throw new EnvaptError(\n EnvaptErrorCodes.ArrayElementConversionFailed,\n `Element \"${item}\" at index ${index} could not be converted to ${elementOf}.`\n );\n }\n return converted;\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 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"],"mappings":"iDAcA,MAAM,EAAgB,IAKhB,EAAgB,GAAqB,EACrC,EAAc,GAAmB,EACjC,EAAa,GAAgB,EAG7B,EAAyC,CAC3C,GAAI,EACJ,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EARgB,EAAgB,CASpC,EAEM,EAAgB,IAAI,OAAO,OAAO,GAAG,mCAAoC,GAAG,EAC5E,EAAiB,IAAI,OAAO,OAAO,GAAG,kCAAmC,GAAG,EAWlF,SAAS,EAAgB,EAAe,EAAS,GAA2B,CACxE,IAAM,EAAQ,EAAM,MAAM,EAAS,EAAiB,CAAa,EACjE,GAAI,CAAC,EAAO,OAEZ,GAAM,EAAG,EAAQ,GAAgB,EACjC,GAAI,CAAC,EAAQ,OAEb,IAAM,EAAQ,OAAO,WAAW,CAAM,EAClC,WAAO,MAAM,CAAK,EAGtB,OAAO,EAAQ,EADD,GAAgB,KAElC,CAOA,IAAa,EAAb,MAAa,CAAkB,CAC3B,OAAO,OAAO,EAAa,EAAwC,CAC/D,OAAO,OAAO,CAAG,CACrB,CAEA,OAAO,OAAO,EAAa,EAAuC,CAC9D,IAAM,EAAS,OAAO,CAAG,EACzB,OAAO,OAAO,MAAM,CAAM,EAAI,EAAW,CAC7C,CAEA,OAAO,QAAQ,EAAa,EAAyC,CACjE,IAAM,EAAQ,EAAI,YAAY,CAAC,CAAC,KAAK,EAOrC,MAFI,CAHkB,IAAK,MAAO,OAAQ,IAGtC,CAAA,CAAa,SAAS,CAAK,EAAU,GACrC,CAHiB,IAAK,KAAM,QAAS,KAGrC,CAAA,CAAY,SAAS,CAAK,EAAU,GACjC,CACX,CAEA,OAAO,OAAO,EAAa,EAAuC,CAC9D,GAAI,CACA,OAAO,OAAO,CAAG,CACrB,MAAQ,CACJ,OAAO,CACX,CACJ,CAEA,OAAO,OAAO,EAAa,EAAuC,CAC9D,GAAI,CACA,OAAO,EAAM,OAAO,IAAI,CAAG,EAAI,CACnC,MAAQ,CACJ,OAAO,CACX,CACJ,CAEA,OAAO,QAAQ,EAAa,EAAuC,CAC/D,IAAM,EAAS,OAAO,SAAS,EAAK,EAAE,EACtC,OAAO,OAAO,MAAM,CAAM,EAAI,EAAW,CAC7C,CAEA,OAAO,MAAM,EAAa,EAAuC,CAC7D,IAAM,EAAS,OAAO,WAAW,CAAG,EACpC,OAAO,OAAO,MAAM,CAAM,EAAI,EAAW,CAC7C,CAEA,OAAO,KAAK,EAAa,EAA6C,CAClE,GAAI,CACA,OAAO,KAAK,MAAM,CAAG,CACzB,MAAQ,CACJ,OAAO,CACX,CACJ,CAEA,OAAO,IAAI,EAAa,EAAiC,CACrD,GAAI,CACA,OAAO,IAAI,IAAI,CAAG,CACtB,MAAQ,CACJ,OAAO,CACX,CACJ,CAEA,OAAO,OAAO,EAAa,EAAuC,CAC9D,GAAI,CAEA,IAAM,EAAQ,EAAI,MAAM,IAAI,OAAO,OAAO,GAAG,wBAAwB,CAAC,EAGtE,OAFI,EAAc,IAAI,OAAO,EAAM,GAAc,EAAM,EAAE,EAElD,IAAI,OAAO,CAAG,CACzB,MAAQ,CACJ,OAAO,CACX,CACJ,CAEA,OAAO,KAAK,EAAa,EAAmC,CAExD,GAAI,IAAI,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC,KAAK,CAAG,EAAG,CAEzC,IAAM,EAAS,IAAI,KADD,SAAS,EAAK,EACA,CAAC,EACjC,OAAO,OAAO,MAAM,EAAO,QAAQ,CAAC,EAAI,EAAW,CACvD,CAIA,GAAI,CAAC,IADgB,OAAO,OAAO,GAAG,mDAAoD,GAC9E,CAAC,CAAC,KAAK,CAAG,EAAG,OAAO,EAEhC,IAAM,EAAS,IAAI,KAAK,CAAG,EAC3B,OAAO,OAAO,MAAM,EAAO,QAAQ,CAAC,EAAI,EAAW,CACvD,CAEA,OAAO,KAAK,EAAa,EAA6C,CAClE,IAAM,EAAY,EAAgB,CAAG,EACrC,GAAI,IAAc,IAAA,GAAW,OAAO,EAGpC,GAAI,OAAO,GAAa,SAAU,OAAO,EACzC,GAAI,OAAO,GAAa,SAAU,CAE9B,IAAM,EAAiB,EAAgB,EAAU,EAAI,EACrD,GAAI,IAAmB,IAAA,GACnB,MAAM,IAAI,EAAA,IAEN,yBAAyB,EAAS,0FACtC,EAEJ,OAAO,CACX,CAEJ,CAeA,OAAO,sBAAsB,EAAa,EAAiB,EAAS,GAAkB,CAClF,GAAI,EAAI,KAAK,IAAM,GAAI,MAAO,CAAC,EAE/B,IAAM,EAAe,EAAI,MAAM,EAAO,SAAS,CAAC,CAAC,IAAK,GAAS,OAAO,CAAI,CAAC,CAAC,KAAK,CAAC,EAElF,GAAI,EAAQ,CACR,IAAM,EAAW,EAAa,UAAW,GAAS,IAAS,EAAE,EAC7D,GAAI,IAAa,GACb,MAAM,IAAI,EAAA,IAEN,0BAA0B,EAAS,4CACvC,CAER,CAEA,IAAM,EAAQ,EAAa,OAAO,OAAO,EAEzC,GAAI,CAAC,EAAM,OAAQ,MAAO,CAAC,EAE3B,IAAM,EAAY,EAAO,GAEzB,GAAI,OAAO,GAAc,WACrB,OAAO,EAAM,KAAK,EAAM,IAAU,CAE9B,IAAM,EAASA,EAAU,CAAI,EAC7B,GAAI,IAAW,IAAA,GACX,MAAM,IAAI,EAAA,IAEN,yDAAyD,EAAK,aAAa,EAAM,EACrF,EAEJ,OAAO,CACX,CAAC,EAGL,IAAM,EAAY,EAAkB,aAAa,CAAS,EAC1D,OAAO,EAAM,KAAK,EAAM,IAAU,CAC9B,IAAM,EAAY,EAAU,EAAM,IAAA,EAAS,EAC3C,GAAI,IAAc,IAAA,GACd,MAAM,IAAI,EAAA,IAEN,YAAY,EAAK,aAAa,EAAM,6BAA6B,EAAU,EAC/E,EAEJ,OAAO,CACX,CAAC,CACL,CAKA,OAAO,aAAiD,EAA2C,CAgB/F,MAAO,CAdH,OAAQ,EAAkB,OAC1B,OAAQ,EAAkB,OAC1B,QAAS,EAAkB,QAC3B,QAAS,EAAkB,QAC3B,OAAQ,EAAkB,OAC1B,OAAQ,EAAkB,OAC1B,MAAO,EAAkB,MACzB,KAAM,EAAkB,KACxB,IAAK,EAAkB,IACvB,OAAQ,EAAkB,OAC1B,KAAM,EAAkB,KACxB,KAAM,EAAkB,IAGZ,EAAE,EACtB,CACJ"}
@@ -1,2 +1,2 @@
1
- import{EnvaptError as e}from"../Error.mjs";import{Validator as t}from"../Validators.mjs";import{BuiltInConverters as n}from"./BuiltInConverters.mjs";function r(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}var i=class{envService;constructor(e){this.envService=e}convertValue(e,n,r,i){let a=this.resolveConverter(r,n),o=this.processFallbackForConverter(a,n);if(t.isArrayConverter(a))return this.processArrayConverter(e,o,a,i);if(t.isPrimitiveConstructor(a)){let t=this.convertPrimitiveToString(a);return this.processBuiltInConverter(e,o,t,i,!0)}return t.isBuiltInConverter(a)?this.processBuiltInConverter(e,o,a,i,!1):this.processCustomConverter(e,o,a,i)}processFallbackForConverter(e,n){return t.isPrimitiveConstructor(e)&&n!==void 0?t.coercePrimitiveFallback(e,n):n}convertPrimitiveToString(t){if(t===String)return`string`;if(t===Number)return`number`;if(t===Boolean)return`boolean`;if(t===BigInt)return`bigint`;if(t===Symbol)return`symbol`;throw new e(204,`Unknown primitive constructor`)}processBuiltInConverter(e,r,i,a,o){t.builtInConverter(i),a&&r!==void 0&&!o&&t.validateBuiltInConverterFallback(i,r);let s=this.envService.get(e,void 0);if(s===void 0)return a?i===`time`&&typeof r==`string`?n.getConverter(i)(``,r):r:null;let c=n.getConverter(i)(s,r);return c===void 0&&!a?null:c}processArrayConverter(r,i,a,o){if(t.arrayConverter(a),o&&i!==void 0&&!Array.isArray(i))throw new e(101,`ArrayOf<...> requires that the fallback be an array, got ${typeof i}`);o&&Array.isArray(i)&&(t.validateArrayFallbackElementTypes(i),t.validateArrayConverterElementTypeMatch(a.of,i));let s=this.envService.get(r,void 0);if(s===void 0){if(!o)return null;if(a.of===`time`&&Array.isArray(i)&&i.every(e=>typeof e==`string`)){let e=n.getConverter(`time`);return i.map(t=>e(``,t))}return i}return n.processArrayConverter(s,a,this.envService.isStrict())}processCustomConverter(e,n,r,i){return t.customConvertor(r),r(this.envService.get(e,void 0),n)}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(t,n,i,a){let o=this.envService.get(t,void 0);if(o===void 0){if(a)return i;throw new e(305,`Required environment variable "${r(t)}" is missing or empty.`)}let s;try{s=n[`~standard`].validate(o)}catch(n){throw new e(209,`Schema for "${r(t)}" threw during validation: ${n.message}`,{cause:n})}if(s instanceof Promise)throw new e(302,`Schema for "${r(t)}" returned a Promise. envapt requires synchronous schemas; use a sync validator or perform async checks outside the env layer.`);if(s.issues!==void 0){let n=s.issues[0]?.message??`no issue message`;throw new e(208,`Schema validation failed for "${r(t)}": ${n}`,{issues:s.issues})}return s.value}};export{i as ValueConverter};
1
+ import{EnvaptError as e}from"../infra/Error.mjs";import{Validator as t}from"../engine/Validators.mjs";import{BuiltInConverters as n}from"./BuiltInConverters.mjs";function r(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}var i=class{envService;constructor(e){this.envService=e}convertValue(e,n,r,i){let a=this.resolveConverter(r,n),o=this.processFallbackForConverter(a,n);if(t.isArrayConverter(a))return this.processArrayConverter(e,o,a,i);if(t.isPrimitiveConstructor(a)){let t=this.convertPrimitiveToString(a);return this.processBuiltInConverter(e,o,t,i,!0)}return t.isBuiltInConverter(a)?this.processBuiltInConverter(e,o,a,i,!1):this.processCustomConverter(e,o,a,i)}processFallbackForConverter(e,n){return t.isPrimitiveConstructor(e)&&n!==void 0?t.coercePrimitiveFallback(e,n):n}convertPrimitiveToString(t){if(t===String)return`string`;if(t===Number)return`number`;if(t===Boolean)return`boolean`;if(t===BigInt)return`bigint`;if(t===Symbol)return`symbol`;throw new e(204,`Unknown primitive constructor`)}processBuiltInConverter(e,r,i,a,o){t.builtInConverter(i),a&&r!==void 0&&!o&&t.validateBuiltInConverterFallback(i,r);let s=this.envService.get(e,void 0);if(s===void 0)return a?i===`time`&&typeof r==`string`?n.getConverter(i)(``,r):r:null;let c=n.getConverter(i)(s,r);return c===void 0&&!a?null:c}processArrayConverter(r,i,a,o){if(t.arrayConverter(a),o&&i!==void 0&&!Array.isArray(i))throw new e(101,`ArrayOf<...> requires that the fallback be an array, got ${typeof i}`);o&&Array.isArray(i)&&(t.validateArrayFallbackElementTypes(i),t.validateArrayConverterElementTypeMatch(a.of,i));let s=this.envService.get(r,void 0);if(s===void 0){if(!o)return null;if(a.of===`time`&&Array.isArray(i)&&i.every(e=>typeof e==`string`)){let e=n.getConverter(`time`);return i.map(t=>e(``,t))}return i}return n.processArrayConverter(s,a,this.envService.isStrict())}processCustomConverter(e,n,r,i){return t.customConvertor(r),r(this.envService.get(e,void 0),n)}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(t,n,i,a){let o=this.envService.get(t,void 0);if(o===void 0){if(a)return i;throw new e(305,`Required environment variable "${r(t)}" is missing or empty.`)}let s;try{s=n[`~standard`].validate(o)}catch(n){throw new e(209,`Schema for "${r(t)}" threw during validation: ${n.message}`,{cause:n})}if(s instanceof Promise)throw new e(302,`Schema for "${r(t)}" returned a Promise. envapt requires synchronous schemas; use a sync validator or perform async checks outside the env layer.`);if(s.issues!==void 0){let n=s.issues[0]?.message??`no issue message`;throw new e(208,`Schema validation failed for "${r(t)}": ${n}`,{issues:s.issues})}return s.value}};export{i as ValueConverter};
2
2
  //# sourceMappingURL=ValueConverter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ValueConverter.mjs","names":[],"sources":["../../../src/converters/ValueConverter.ts"],"sourcesContent":["import { BuiltInConverters } from './BuiltInConverters';\nimport { EnvaptError, EnvaptErrorCodes } from '../Error';\nimport { Validator } from '../Validators';\n\nimport type { ArrayOf } from './Converters';\nimport type { StandardSchemaV1 } from '../StandardSchema';\nimport type { BuiltInConverter, EnvKeyInput, EnvaptConverter, PrimitiveConstructor } from '../types';\nimport type { EnvapterService } from '../types/Env';\n\nfunction formatKeyForError(key: EnvKeyInput): string {\n return Array.isArray(key) ? `[${key.join(', ')}]` : String(key);\n}\n\n/**\n * Convert a resolved environment value to its declared type via built-in, primitive, array,\n * custom, or Standard Schema converters.\n * @internal\n */\nexport class ValueConverter {\n constructor(private readonly envService: EnvapterService) {}\n\n convertValue<TFallback>(\n key: EnvKeyInput,\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 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 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 /* v8 ignore next -- @preserve */\n if (primitiveConstructor === Symbol) return 'symbol';\n\n /* v8 ignore next -- @preserve */\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Unknown primitive constructor`);\n }\n\n private processBuiltInConverter<TFallback>(\n key: EnvKeyInput,\n fallback: TFallback | undefined,\n resolvedConverter: BuiltInConverter,\n hasFallback: boolean,\n wasOriginallyConstructor: boolean\n ): TFallback | null | undefined {\n Validator.builtInConverter(resolvedConverter);\n\n if (hasFallback && fallback !== undefined && !wasOriginallyConstructor) {\n Validator.validateBuiltInConverterFallback(resolvedConverter, fallback);\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) {\n if (!hasFallback) return null;\n // For converters with asymmetric fallback / return types — currently only `time`,\n // whose fallback may be a string while the return type is `number` — route the\n // fallback through the converter so it gets coerced to the return type.\n if (resolvedConverter === 'time' && typeof fallback === 'string') {\n const timeFn = BuiltInConverters.getConverter(resolvedConverter);\n return timeFn('', fallback) as TFallback;\n }\n return fallback;\n }\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n\n if (result === undefined && !hasFallback) return null;\n\n return result as TFallback;\n }\n\n private processArrayConverter<TFallback>(\n key: EnvKeyInput,\n fallback: TFallback | undefined,\n resolvedConverter: ArrayOf,\n hasFallback: boolean\n ): TFallback | null | undefined {\n Validator.arrayConverter(resolvedConverter);\n\n if (hasFallback && fallback !== undefined && !Array.isArray(fallback)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayOf<...> requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n if (hasFallback && Array.isArray(fallback)) {\n Validator.validateArrayFallbackElementTypes(fallback);\n Validator.validateArrayConverterElementTypeMatch(resolvedConverter.of, fallback);\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) {\n if (!hasFallback) return null;\n // When the array element is `time` and the fallback is a list of time-strings,\n // coerce each entry through the time converter so the returned array is\n // `number[]` matching the declared return type.\n if (\n resolvedConverter.of === 'time' &&\n Array.isArray(fallback) &&\n fallback.every((v) => typeof v === 'string')\n ) {\n const timeFn = BuiltInConverters.getConverter('time');\n return fallback.map((v) => timeFn('', v as string)) as TFallback;\n }\n return fallback;\n }\n\n const result = BuiltInConverters.processArrayConverter(parsed, resolvedConverter, this.envService.isStrict());\n return result as TFallback;\n }\n\n private processCustomConverter<TFallback>(\n key: EnvKeyInput,\n fallback: TFallback | undefined,\n resolvedConverter: EnvaptConverter<TFallback>,\n _hasFallback: boolean // hasFallback is not needed because customConverter is called even if the raw value is undefined\n ): TFallback | null | undefined {\n Validator.customConvertor(resolvedConverter);\n\n const raw = this.envService.get(key, undefined);\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 if (converter) return converter;\n\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 // Single dispatch site for decorator + `Envapter.parse()` so error codes (208 / 209 / 305)\n // stay consistent. Missing+no-fallback throws here so callers don't duplicate the check.\n convertWithSchema(key: EnvKeyInput, schema: StandardSchemaV1, fallback: unknown, hasFallback: boolean): unknown {\n const raw = this.envService.get(key, undefined);\n\n if (raw === undefined) {\n if (hasFallback) return fallback;\n throw new EnvaptError(\n EnvaptErrorCodes.MissingEnvValue,\n `Required environment variable \"${formatKeyForError(key)}\" is missing or empty.`\n );\n }\n\n let outcome: StandardSchemaV1.Result<unknown> | Promise<StandardSchemaV1.Result<unknown>>;\n try {\n outcome = schema['~standard'].validate(raw);\n } catch (cause) {\n throw new EnvaptError(\n EnvaptErrorCodes.SchemaThrew,\n `Schema for \"${formatKeyForError(key)}\" threw during validation: ${(cause as Error).message}`,\n { cause }\n );\n }\n\n if (outcome instanceof Promise) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidUserDefinedConfig,\n `Schema for \"${formatKeyForError(key)}\" returned a Promise. envapt requires synchronous schemas; use a sync validator or perform async checks outside the env layer.`\n );\n }\n\n if (outcome.issues !== undefined) {\n const first = outcome.issues[0];\n const firstMessage = first?.message ?? 'no issue message';\n throw new EnvaptError(\n EnvaptErrorCodes.SchemaValidationFailed,\n `Schema validation failed for \"${formatKeyForError(key)}\": ${firstMessage}`,\n { issues: outcome.issues }\n );\n }\n\n return outcome.value;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ValueConverter.mjs","names":[],"sources":["../../../src/converters/ValueConverter.ts"],"sourcesContent":["import { BuiltInConverters } from './BuiltInConverters';\nimport { Validator } from '../engine/Validators';\nimport { EnvaptError, EnvaptErrorCodes } from '../infra/Error';\n\nimport type { ArrayOf } from './Converters';\nimport type { StandardSchemaV1 } from '../infra/StandardSchema';\nimport type { BuiltInConverter, EnvKeyInput, EnvaptConverter, PrimitiveConstructor } from '../types';\nimport type { EnvapterService } from '../types/Env';\n\nfunction formatKeyForError(key: EnvKeyInput): string {\n return Array.isArray(key) ? `[${key.join(', ')}]` : String(key);\n}\n\n/**\n * Convert a resolved environment value to its declared type via built-in, primitive, array,\n * custom, or Standard Schema converters.\n * @internal\n */\nexport class ValueConverter {\n constructor(private readonly envService: EnvapterService) {}\n\n convertValue<TFallback>(\n key: EnvKeyInput,\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 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 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 /* v8 ignore next -- @preserve */\n if (primitiveConstructor === Symbol) return 'symbol';\n\n /* v8 ignore next -- @preserve */\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Unknown primitive constructor`);\n }\n\n private processBuiltInConverter<TFallback>(\n key: EnvKeyInput,\n fallback: TFallback | undefined,\n resolvedConverter: BuiltInConverter,\n hasFallback: boolean,\n wasOriginallyConstructor: boolean\n ): TFallback | null | undefined {\n Validator.builtInConverter(resolvedConverter);\n\n if (hasFallback && fallback !== undefined && !wasOriginallyConstructor) {\n Validator.validateBuiltInConverterFallback(resolvedConverter, fallback);\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) {\n if (!hasFallback) return null;\n // For converters with asymmetric fallback / return types — currently only `time`,\n // whose fallback may be a string while the return type is `number` — route the\n // fallback through the converter so it gets coerced to the return type.\n if (resolvedConverter === 'time' && typeof fallback === 'string') {\n const timeFn = BuiltInConverters.getConverter(resolvedConverter);\n return timeFn('', fallback) as TFallback;\n }\n return fallback;\n }\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n\n if (result === undefined && !hasFallback) return null;\n\n return result as TFallback;\n }\n\n private processArrayConverter<TFallback>(\n key: EnvKeyInput,\n fallback: TFallback | undefined,\n resolvedConverter: ArrayOf,\n hasFallback: boolean\n ): TFallback | null | undefined {\n Validator.arrayConverter(resolvedConverter);\n\n if (hasFallback && fallback !== undefined && !Array.isArray(fallback)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayOf<...> requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n if (hasFallback && Array.isArray(fallback)) {\n Validator.validateArrayFallbackElementTypes(fallback);\n Validator.validateArrayConverterElementTypeMatch(resolvedConverter.of, fallback);\n }\n\n const parsed = this.envService.get(key, undefined);\n\n if (parsed === undefined) {\n if (!hasFallback) return null;\n // When the array element is `time` and the fallback is a list of time-strings,\n // coerce each entry through the time converter so the returned array is\n // `number[]` matching the declared return type.\n if (\n resolvedConverter.of === 'time' &&\n Array.isArray(fallback) &&\n fallback.every((v) => typeof v === 'string')\n ) {\n const timeFn = BuiltInConverters.getConverter('time');\n return fallback.map((v) => timeFn('', v as string)) as TFallback;\n }\n return fallback;\n }\n\n const result = BuiltInConverters.processArrayConverter(parsed, resolvedConverter, this.envService.isStrict());\n return result as TFallback;\n }\n\n private processCustomConverter<TFallback>(\n key: EnvKeyInput,\n fallback: TFallback | undefined,\n resolvedConverter: EnvaptConverter<TFallback>,\n _hasFallback: boolean // hasFallback is not needed because customConverter is called even if the raw value is undefined\n ): TFallback | null | undefined {\n Validator.customConvertor(resolvedConverter);\n\n const raw = this.envService.get(key, undefined);\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 if (converter) return converter;\n\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 // Single dispatch site for decorator + `Envapter.parse()` so error codes (208 / 209 / 305)\n // stay consistent. Missing+no-fallback throws here so callers don't duplicate the check.\n convertWithSchema(key: EnvKeyInput, schema: StandardSchemaV1, fallback: unknown, hasFallback: boolean): unknown {\n const raw = this.envService.get(key, undefined);\n\n if (raw === undefined) {\n if (hasFallback) return fallback;\n throw new EnvaptError(\n EnvaptErrorCodes.MissingEnvValue,\n `Required environment variable \"${formatKeyForError(key)}\" is missing or empty.`\n );\n }\n\n let outcome: StandardSchemaV1.Result<unknown> | Promise<StandardSchemaV1.Result<unknown>>;\n try {\n outcome = schema['~standard'].validate(raw);\n } catch (cause) {\n throw new EnvaptError(\n EnvaptErrorCodes.SchemaThrew,\n `Schema for \"${formatKeyForError(key)}\" threw during validation: ${(cause as Error).message}`,\n { cause }\n );\n }\n\n if (outcome instanceof Promise) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidUserDefinedConfig,\n `Schema for \"${formatKeyForError(key)}\" returned a Promise. envapt requires synchronous schemas; use a sync validator or perform async checks outside the env layer.`\n );\n }\n\n if (outcome.issues !== undefined) {\n const first = outcome.issues[0];\n const firstMessage = first?.message ?? 'no issue message';\n throw new EnvaptError(\n EnvaptErrorCodes.SchemaValidationFailed,\n `Schema validation failed for \"${formatKeyForError(key)}\": ${firstMessage}`,\n { issues: outcome.issues }\n );\n }\n\n return outcome.value;\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{EnvaptError as e}from"../Error.mjs";import{PrimitiveMethods as t}from"./PrimitiveMethods.mjs";function n(e){return typeof e==`object`&&!!e&&`converter`in e}function r(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}var i=class i extends t{static getUsing(t,i,a){if(n(i)){let n=i,{key:a,value:o}=this.resolveKeyInput(t);if(o===void 0||o.trim()===``)throw new e(305,`Required environment variable "${r(t)}" is missing or empty.`);return this.valueConverter.convertValue(a,void 0,n.converter,!1)}let o=i,{key:s,value:c}=this.resolveKeyInput(t);if(this.treatAsMissing(c)&&a===void 0)return;let l=a!==void 0;return this.valueConverter.convertValue(s,a,o,l)}getUsing(e,t,n){return i.getUsing(e,t,n)}static getWith(t,i,a){if(n(i)){let n=i,{key:a,value:o}=this.resolveKeyInput(t);if(o===void 0||o.trim()===``)throw new e(305,`Required environment variable "${r(t)}" is missing or empty.`);return this.valueConverter.convertValue(a,void 0,n.converter,!1)}let{key:o,value:s}=this.resolveKeyInput(t);if(this.treatAsMissing(s))return a;let c=a!==void 0;return this.valueConverter.convertValue(o,a,i,c)}getWith(e,t,n){return i.getWith(e,t,n)}static parse(e,t,n){let r=arguments.length>2;return this.valueConverter.convertWithSchema(e,t,n,r)}parse(e,t,n){let r=arguments.length>2;return i.valueConverter.convertWithSchema(e,t,n,r)}};export{i as AdvancedMethods};
1
+ import{EnvaptError as e}from"../infra/Error.mjs";import{PrimitiveMethods as t}from"./PrimitiveMethods.mjs";function n(e){return typeof e==`object`&&!!e&&`converter`in e}function r(e){return Array.isArray(e)?`[${e.join(`, `)}]`:String(e)}var i=class i extends t{static getUsing(t,i,a){if(n(i)){let n=i,{key:a,value:o}=this.resolveKeyInput(t);if(o===void 0||o.trim()===``)throw new e(305,`Required environment variable "${r(t)}" is missing or empty.`);return this.valueConverter.convertValue(a,void 0,n.converter,!1)}let o=i,{key:s,value:c}=this.resolveKeyInput(t);if(this.treatAsMissing(c)&&a===void 0)return;let l=a!==void 0;return this.valueConverter.convertValue(s,a,o,l)}getUsing(e,t,n){return i.getUsing(e,t,n)}static getWith(t,i,a){if(n(i)){let n=i,{key:a,value:o}=this.resolveKeyInput(t);if(o===void 0||o.trim()===``)throw new e(305,`Required environment variable "${r(t)}" is missing or empty.`);return this.valueConverter.convertValue(a,void 0,n.converter,!1)}let{key:o,value:s}=this.resolveKeyInput(t);if(this.treatAsMissing(s))return a;let c=a!==void 0;return this.valueConverter.convertValue(o,a,i,c)}getWith(e,t,n){return i.getWith(e,t,n)}static parse(e,t,n){let r=arguments.length>2;return this.valueConverter.convertWithSchema(e,t,n,r)}parse(e,t,n){let r=arguments.length>2;return i.valueConverter.convertWithSchema(e,t,n,r)}};export{i as AdvancedMethods};
2
2
  //# sourceMappingURL=AdvancedMethods.mjs.map