@catbee/utils 0.0.8-rc.1 → 0.0.8-rc.2

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 (280) hide show
  1. package/build/esm/config.d.ts +0 -1
  2. package/build/esm/config.js +6 -7
  3. package/build/esm/index.d.ts +0 -1
  4. package/build/esm/index.js +0 -1
  5. package/build/esm/servers/server.builder.d.ts +0 -1
  6. package/build/esm/servers/server.builder.js +99 -147
  7. package/build/esm/servers/server.d.ts +0 -1
  8. package/build/esm/servers/server.js +591 -876
  9. package/build/esm/types/api-response.d.ts +0 -1
  10. package/build/esm/types/api-response.js +0 -1
  11. package/build/esm/types/index.d.ts +0 -1
  12. package/build/esm/types/index.js +0 -1
  13. package/build/esm/types/server.d.ts +0 -1
  14. package/build/esm/types/server.js +0 -1
  15. package/build/esm/utils/array.utils.d.ts +0 -1
  16. package/build/esm/utils/array.utils.js +48 -86
  17. package/build/esm/utils/async.utils.d.ts +0 -1
  18. package/build/esm/utils/async.utils.js +247 -524
  19. package/build/esm/utils/cache.utils.d.ts +0 -1
  20. package/build/esm/utils/cache.utils.js +96 -301
  21. package/build/esm/utils/context-store.utils.d.ts +0 -1
  22. package/build/esm/utils/context-store.utils.js +62 -79
  23. package/build/esm/utils/crypto.utils.d.ts +0 -1
  24. package/build/esm/utils/crypto.utils.js +78 -175
  25. package/build/esm/utils/date.utils.d.ts +0 -1
  26. package/build/esm/utils/date.utils.js +47 -53
  27. package/build/esm/utils/decorators.utils.d.ts +30 -27
  28. package/build/esm/utils/decorators.utils.js +417 -461
  29. package/build/esm/utils/dir.utils.d.ts +0 -1
  30. package/build/esm/utils/dir.utils.js +264 -786
  31. package/build/esm/utils/env.utils.d.ts +0 -1
  32. package/build/esm/utils/env.utils.js +180 -271
  33. package/build/esm/utils/exception.utils.d.ts +0 -1
  34. package/build/esm/utils/exception.utils.js +112 -289
  35. package/build/esm/utils/fs.utils.d.ts +0 -1
  36. package/build/esm/utils/fs.utils.js +169 -401
  37. package/build/esm/utils/http-status-codes.d.ts +0 -1
  38. package/build/esm/utils/http-status-codes.js +0 -1
  39. package/build/esm/utils/id.utils.d.ts +0 -1
  40. package/build/esm/utils/id.utils.js +5 -9
  41. package/build/esm/utils/logger.utils.d.ts +0 -1
  42. package/build/esm/utils/logger.utils.js +34 -71
  43. package/build/esm/utils/middleware.utils.d.ts +0 -1
  44. package/build/esm/utils/middleware.utils.js +65 -155
  45. package/build/esm/utils/obj.utils.d.ts +0 -1
  46. package/build/esm/utils/obj.utils.js +69 -176
  47. package/build/esm/utils/performance.utils.d.ts +0 -1
  48. package/build/esm/utils/performance.utils.js +92 -195
  49. package/build/esm/utils/request.utils.d.ts +0 -1
  50. package/build/esm/utils/request.utils.js +41 -74
  51. package/build/esm/utils/response.utils.d.ts +0 -1
  52. package/build/esm/utils/response.utils.js +84 -107
  53. package/build/esm/utils/stream.utils.d.ts +0 -1
  54. package/build/esm/utils/stream.utils.js +38 -113
  55. package/build/esm/utils/string.utils.d.ts +0 -1
  56. package/build/esm/utils/string.utils.js +6 -11
  57. package/build/esm/utils/type.utils.d.ts +0 -1
  58. package/build/esm/utils/type.utils.js +8 -12
  59. package/build/esm/utils/url.utils.d.ts +0 -1
  60. package/build/esm/utils/url.utils.js +49 -127
  61. package/build/esm/utils/validate.utils.d.ts +0 -1
  62. package/build/esm/utils/validate.utils.js +23 -40
  63. package/package.json +3 -33
  64. package/build/esm/config.js.map +0 -1
  65. package/build/esm/index.js.map +0 -1
  66. package/build/esm/servers/server.builder.js.map +0 -1
  67. package/build/esm/servers/server.js.map +0 -1
  68. package/build/esm/types/api-response.js.map +0 -1
  69. package/build/esm/types/index.js.map +0 -1
  70. package/build/esm/types/server.js.map +0 -1
  71. package/build/esm/utils/array.utils.js.map +0 -1
  72. package/build/esm/utils/async.utils.js.map +0 -1
  73. package/build/esm/utils/cache.utils.js.map +0 -1
  74. package/build/esm/utils/context-store.utils.js.map +0 -1
  75. package/build/esm/utils/crypto.utils.js.map +0 -1
  76. package/build/esm/utils/date.utils.js.map +0 -1
  77. package/build/esm/utils/decorators.utils.js.map +0 -1
  78. package/build/esm/utils/dir.utils.js.map +0 -1
  79. package/build/esm/utils/env.utils.js.map +0 -1
  80. package/build/esm/utils/exception.utils.js.map +0 -1
  81. package/build/esm/utils/fs.utils.js.map +0 -1
  82. package/build/esm/utils/http-status-codes.js.map +0 -1
  83. package/build/esm/utils/id.utils.js.map +0 -1
  84. package/build/esm/utils/logger.utils.js.map +0 -1
  85. package/build/esm/utils/middleware.utils.js.map +0 -1
  86. package/build/esm/utils/obj.utils.js.map +0 -1
  87. package/build/esm/utils/performance.utils.js.map +0 -1
  88. package/build/esm/utils/request.utils.js.map +0 -1
  89. package/build/esm/utils/response.utils.js.map +0 -1
  90. package/build/esm/utils/stream.utils.js.map +0 -1
  91. package/build/esm/utils/string.utils.js.map +0 -1
  92. package/build/esm/utils/type.utils.js.map +0 -1
  93. package/build/esm/utils/url.utils.js.map +0 -1
  94. package/build/esm/utils/validate.utils.js.map +0 -1
  95. package/build/esnext/config.d.ts +0 -122
  96. package/build/esnext/config.js +0 -133
  97. package/build/esnext/config.js.map +0 -1
  98. package/build/esnext/index.d.ts +0 -27
  99. package/build/esnext/index.js +0 -50
  100. package/build/esnext/index.js.map +0 -1
  101. package/build/esnext/servers/server.builder.d.ts +0 -508
  102. package/build/esnext/servers/server.builder.js +0 -657
  103. package/build/esnext/servers/server.builder.js.map +0 -1
  104. package/build/esnext/servers/server.d.ts +0 -256
  105. package/build/esnext/servers/server.js +0 -955
  106. package/build/esnext/servers/server.js.map +0 -1
  107. package/build/esnext/types/api-response.d.ts +0 -152
  108. package/build/esnext/types/api-response.js +0 -34
  109. package/build/esnext/types/api-response.js.map +0 -1
  110. package/build/esnext/types/index.d.ts +0 -125
  111. package/build/esnext/types/index.js +0 -25
  112. package/build/esnext/types/index.js.map +0 -1
  113. package/build/esnext/types/server.d.ts +0 -268
  114. package/build/esnext/types/server.js +0 -25
  115. package/build/esnext/types/server.js.map +0 -1
  116. package/build/esnext/utils/array.utils.d.ts +0 -168
  117. package/build/esnext/utils/array.utils.js +0 -345
  118. package/build/esnext/utils/array.utils.js.map +0 -1
  119. package/build/esnext/utils/async.utils.d.ts +0 -265
  120. package/build/esnext/utils/async.utils.js +0 -620
  121. package/build/esnext/utils/async.utils.js.map +0 -1
  122. package/build/esnext/utils/cache.utils.d.ts +0 -153
  123. package/build/esnext/utils/cache.utils.js +0 -293
  124. package/build/esnext/utils/cache.utils.js.map +0 -1
  125. package/build/esnext/utils/context-store.utils.d.ts +0 -189
  126. package/build/esnext/utils/context-store.utils.js +0 -289
  127. package/build/esnext/utils/context-store.utils.js.map +0 -1
  128. package/build/esnext/utils/crypto.utils.d.ts +0 -160
  129. package/build/esnext/utils/crypto.utils.js +0 -276
  130. package/build/esnext/utils/crypto.utils.js.map +0 -1
  131. package/build/esnext/utils/date.utils.d.ts +0 -159
  132. package/build/esnext/utils/date.utils.js +0 -384
  133. package/build/esnext/utils/date.utils.js.map +0 -1
  134. package/build/esnext/utils/decorators.utils.d.ts +0 -508
  135. package/build/esnext/utils/decorators.utils.js +0 -877
  136. package/build/esnext/utils/decorators.utils.js.map +0 -1
  137. package/build/esnext/utils/dir.utils.d.ts +0 -196
  138. package/build/esnext/utils/dir.utils.js +0 -477
  139. package/build/esnext/utils/dir.utils.js.map +0 -1
  140. package/build/esnext/utils/env.utils.d.ts +0 -377
  141. package/build/esnext/utils/env.utils.js +0 -785
  142. package/build/esnext/utils/env.utils.js.map +0 -1
  143. package/build/esnext/utils/exception.utils.d.ts +0 -230
  144. package/build/esnext/utils/exception.utils.js +0 -381
  145. package/build/esnext/utils/exception.utils.js.map +0 -1
  146. package/build/esnext/utils/fs.utils.d.ts +0 -164
  147. package/build/esnext/utils/fs.utils.js +0 -349
  148. package/build/esnext/utils/fs.utils.js.map +0 -1
  149. package/build/esnext/utils/http-status-codes.d.ts +0 -266
  150. package/build/esnext/utils/http-status-codes.js +0 -295
  151. package/build/esnext/utils/http-status-codes.js.map +0 -1
  152. package/build/esnext/utils/id.utils.d.ts +0 -36
  153. package/build/esnext/utils/id.utils.js +0 -84
  154. package/build/esnext/utils/id.utils.js.map +0 -1
  155. package/build/esnext/utils/logger.utils.d.ts +0 -160
  156. package/build/esnext/utils/logger.utils.js +0 -300
  157. package/build/esnext/utils/logger.utils.js.map +0 -1
  158. package/build/esnext/utils/middleware.utils.d.ts +0 -100
  159. package/build/esnext/utils/middleware.utils.js +0 -236
  160. package/build/esnext/utils/middleware.utils.js.map +0 -1
  161. package/build/esnext/utils/obj.utils.d.ts +0 -124
  162. package/build/esnext/utils/obj.utils.js +0 -413
  163. package/build/esnext/utils/obj.utils.js.map +0 -1
  164. package/build/esnext/utils/performance.utils.d.ts +0 -136
  165. package/build/esnext/utils/performance.utils.js +0 -271
  166. package/build/esnext/utils/performance.utils.js.map +0 -1
  167. package/build/esnext/utils/request.utils.d.ts +0 -86
  168. package/build/esnext/utils/request.utils.js +0 -186
  169. package/build/esnext/utils/request.utils.js.map +0 -1
  170. package/build/esnext/utils/response.utils.d.ts +0 -163
  171. package/build/esnext/utils/response.utils.js +0 -247
  172. package/build/esnext/utils/response.utils.js.map +0 -1
  173. package/build/esnext/utils/stream.utils.d.ts +0 -88
  174. package/build/esnext/utils/stream.utils.js +0 -210
  175. package/build/esnext/utils/stream.utils.js.map +0 -1
  176. package/build/esnext/utils/string.utils.d.ts +0 -93
  177. package/build/esnext/utils/string.utils.js +0 -165
  178. package/build/esnext/utils/string.utils.js.map +0 -1
  179. package/build/esnext/utils/type.utils.d.ts +0 -90
  180. package/build/esnext/utils/type.utils.js +0 -187
  181. package/build/esnext/utils/type.utils.js.map +0 -1
  182. package/build/esnext/utils/url.utils.d.ts +0 -141
  183. package/build/esnext/utils/url.utils.js +0 -304
  184. package/build/esnext/utils/url.utils.js.map +0 -1
  185. package/build/esnext/utils/validate.utils.d.ts +0 -177
  186. package/build/esnext/utils/validate.utils.js +0 -320
  187. package/build/esnext/utils/validate.utils.js.map +0 -1
  188. package/build/src/config.d.ts +0 -122
  189. package/build/src/config.js +0 -138
  190. package/build/src/config.js.map +0 -1
  191. package/build/src/index.d.ts +0 -27
  192. package/build/src/index.js +0 -69
  193. package/build/src/index.js.map +0 -1
  194. package/build/src/servers/server.builder.d.ts +0 -508
  195. package/build/src/servers/server.builder.js +0 -661
  196. package/build/src/servers/server.builder.js.map +0 -1
  197. package/build/src/servers/server.d.ts +0 -256
  198. package/build/src/servers/server.js +0 -962
  199. package/build/src/servers/server.js.map +0 -1
  200. package/build/src/types/api-response.d.ts +0 -152
  201. package/build/src/types/api-response.js +0 -37
  202. package/build/src/types/api-response.js.map +0 -1
  203. package/build/src/types/index.d.ts +0 -125
  204. package/build/src/types/index.js +0 -26
  205. package/build/src/types/index.js.map +0 -1
  206. package/build/src/types/server.d.ts +0 -268
  207. package/build/src/types/server.js +0 -26
  208. package/build/src/types/server.js.map +0 -1
  209. package/build/src/utils/array.utils.d.ts +0 -168
  210. package/build/src/utils/array.utils.js +0 -364
  211. package/build/src/utils/array.utils.js.map +0 -1
  212. package/build/src/utils/async.utils.d.ts +0 -265
  213. package/build/src/utils/async.utils.js +0 -641
  214. package/build/src/utils/async.utils.js.map +0 -1
  215. package/build/src/utils/cache.utils.d.ts +0 -153
  216. package/build/src/utils/cache.utils.js +0 -297
  217. package/build/src/utils/cache.utils.js.map +0 -1
  218. package/build/src/utils/context-store.utils.d.ts +0 -189
  219. package/build/src/utils/context-store.utils.js +0 -296
  220. package/build/src/utils/context-store.utils.js.map +0 -1
  221. package/build/src/utils/crypto.utils.d.ts +0 -160
  222. package/build/src/utils/crypto.utils.js +0 -293
  223. package/build/src/utils/crypto.utils.js.map +0 -1
  224. package/build/src/utils/date.utils.d.ts +0 -159
  225. package/build/src/utils/date.utils.js +0 -396
  226. package/build/src/utils/date.utils.js.map +0 -1
  227. package/build/src/utils/decorators.utils.d.ts +0 -508
  228. package/build/src/utils/decorators.utils.js +0 -896
  229. package/build/src/utils/decorators.utils.js.map +0 -1
  230. package/build/src/utils/dir.utils.d.ts +0 -196
  231. package/build/src/utils/dir.utils.js +0 -501
  232. package/build/src/utils/dir.utils.js.map +0 -1
  233. package/build/src/utils/env.utils.d.ts +0 -377
  234. package/build/src/utils/env.utils.js +0 -789
  235. package/build/src/utils/env.utils.js.map +0 -1
  236. package/build/src/utils/exception.utils.d.ts +0 -230
  237. package/build/src/utils/exception.utils.js +0 -407
  238. package/build/src/utils/exception.utils.js.map +0 -1
  239. package/build/src/utils/fs.utils.d.ts +0 -164
  240. package/build/src/utils/fs.utils.js +0 -372
  241. package/build/src/utils/fs.utils.js.map +0 -1
  242. package/build/src/utils/http-status-codes.d.ts +0 -266
  243. package/build/src/utils/http-status-codes.js +0 -298
  244. package/build/src/utils/http-status-codes.js.map +0 -1
  245. package/build/src/utils/id.utils.d.ts +0 -36
  246. package/build/src/utils/id.utils.js +0 -91
  247. package/build/src/utils/id.utils.js.map +0 -1
  248. package/build/src/utils/logger.utils.d.ts +0 -160
  249. package/build/src/utils/logger.utils.js +0 -346
  250. package/build/src/utils/logger.utils.js.map +0 -1
  251. package/build/src/utils/middleware.utils.d.ts +0 -100
  252. package/build/src/utils/middleware.utils.js +0 -244
  253. package/build/src/utils/middleware.utils.js.map +0 -1
  254. package/build/src/utils/obj.utils.d.ts +0 -124
  255. package/build/src/utils/obj.utils.js +0 -429
  256. package/build/src/utils/obj.utils.js.map +0 -1
  257. package/build/src/utils/performance.utils.d.ts +0 -136
  258. package/build/src/utils/performance.utils.js +0 -278
  259. package/build/src/utils/performance.utils.js.map +0 -1
  260. package/build/src/utils/request.utils.d.ts +0 -86
  261. package/build/src/utils/request.utils.js +0 -195
  262. package/build/src/utils/request.utils.js.map +0 -1
  263. package/build/src/utils/response.utils.d.ts +0 -163
  264. package/build/src/utils/response.utils.js +0 -260
  265. package/build/src/utils/response.utils.js.map +0 -1
  266. package/build/src/utils/stream.utils.d.ts +0 -88
  267. package/build/src/utils/stream.utils.js +0 -218
  268. package/build/src/utils/stream.utils.js.map +0 -1
  269. package/build/src/utils/string.utils.d.ts +0 -93
  270. package/build/src/utils/string.utils.js +0 -179
  271. package/build/src/utils/string.utils.js.map +0 -1
  272. package/build/src/utils/type.utils.d.ts +0 -90
  273. package/build/src/utils/type.utils.js +0 -196
  274. package/build/src/utils/type.utils.js.map +0 -1
  275. package/build/src/utils/url.utils.d.ts +0 -141
  276. package/build/src/utils/url.utils.js +0 -317
  277. package/build/src/utils/url.utils.js.map +0 -1
  278. package/build/src/utils/validate.utils.d.ts +0 -177
  279. package/build/src/utils/validate.utils.js +0 -345
  280. package/build/src/utils/validate.utils.js.map +0 -1
@@ -21,42 +21,6 @@
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  */
24
- var __read = (this && this.__read) || function (o, n) {
25
- var m = typeof Symbol === "function" && o[Symbol.iterator];
26
- if (!m) return o;
27
- var i = m.call(o), r, ar = [], e;
28
- try {
29
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
30
- }
31
- catch (error) { e = { error: error }; }
32
- finally {
33
- try {
34
- if (r && !r.done && (m = i["return"])) m.call(i);
35
- }
36
- finally { if (e) throw e.error; }
37
- }
38
- return ar;
39
- };
40
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
41
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
42
- if (ar || !(i in from)) {
43
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
44
- ar[i] = from[i];
45
- }
46
- }
47
- return to.concat(ar || Array.prototype.slice.call(from));
48
- };
49
- var __values = (this && this.__values) || function(o) {
50
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
51
- if (m) return m.call(o);
52
- if (o && typeof o.length === "number") return {
53
- next: function () {
54
- if (o && i >= o.length) o = void 0;
55
- return { value: o && o[i++], done: !o };
56
- }
57
- };
58
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
59
- };
60
24
  /* eslint-disable n/no-process-env */
61
25
  import { existsSync, readFileSync } from 'fs';
62
26
  import { isAbsolute, resolve } from 'path';
@@ -74,76 +38,65 @@ export var Environment;
74
38
  * Utility class for accessing and managing environment variables.
75
39
  * Provides typed getters with fallback defaults and validation.
76
40
  */
77
- var Env = /** @class */ (function () {
78
- function Env() {
79
- }
41
+ export class Env {
42
+ // Cache for parsed values to avoid repeated parsing of complex values
43
+ static cache = new Map();
80
44
  /**
81
45
  * Checks if the current NODE_ENV is 'development'.
82
46
  *
83
47
  * @returns {boolean} `true` if NODE_ENV is 'development', else `false`.
84
48
  */
85
- Env.isDev = function () {
49
+ static isDev() {
86
50
  return Env.get('NODE_ENV', Environment.DEVELOPMENT) === Environment.DEVELOPMENT;
87
- };
51
+ }
88
52
  /**
89
53
  * Checks if the current NODE_ENV is 'production'.
90
54
  *
91
55
  * @returns {boolean} `true` if NODE_ENV is 'production', else `false`.
92
56
  */
93
- Env.isProd = function () {
57
+ static isProd() {
94
58
  return Env.get('NODE_ENV', Environment.DEVELOPMENT) === Environment.PRODUCTION;
95
- };
59
+ }
96
60
  /**
97
61
  * Checks if the current NODE_ENV is 'testing'.
98
62
  *
99
63
  * @returns {boolean} `true` if NODE_ENV is 'testing', else `false`.
100
64
  */
101
- Env.isTest = function () {
65
+ static isTest() {
102
66
  return Env.get('NODE_ENV', Environment.DEVELOPMENT) === Environment.TESTING;
103
- };
67
+ }
104
68
  /**
105
69
  * Checks if the current NODE_ENV is 'staging'.
106
70
  *
107
71
  * @returns {boolean} `true` if NODE_ENV is 'staging', else `false`.
108
72
  */
109
- Env.isStaging = function () {
73
+ static isStaging() {
110
74
  return Env.get('NODE_ENV', Environment.DEVELOPMENT) === Environment.STAGING;
111
- };
75
+ }
112
76
  /**
113
77
  * Sets an environment variable (only affects runtime memory).
114
78
  *
115
79
  * @param {string} key - The environment variable key.
116
80
  * @param {string} value - The value to set.
117
81
  */
118
- Env.set = function (key, value) {
119
- var e_1, _a;
82
+ static set(key, value) {
120
83
  process.env[key] = value;
121
84
  // Clear all cached values for this key with any prefix
122
85
  this.cache.delete(key);
123
- try {
124
- for (var _b = __values(__spreadArray([], __read(this.cache.keys()), false)), _c = _b.next(); !_c.done; _c = _b.next()) {
125
- var cacheKey = _c.value;
126
- if (cacheKey.includes(":".concat(key))) {
127
- this.cache.delete(cacheKey);
128
- }
86
+ for (const cacheKey of [...this.cache.keys()]) {
87
+ if (cacheKey.includes(`:${key}`)) {
88
+ this.cache.delete(cacheKey);
129
89
  }
130
90
  }
131
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
132
- finally {
133
- try {
134
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
135
- }
136
- finally { if (e_1) throw e_1.error; }
137
- }
138
- };
91
+ }
139
92
  /**
140
93
  * Returns all environment variables as an object.
141
94
  *
142
95
  * @returns {object} The current `process.env` object.
143
96
  */
144
- Env.getAll = function () {
97
+ static getAll() {
145
98
  return process.env;
146
- };
99
+ }
147
100
  /**
148
101
  * Retrieves a string environment variable with a fallback default.
149
102
  * Supports variable expansion with ${VAR_NAME} syntax.
@@ -157,18 +110,16 @@ var Env = /** @class */ (function () {
157
110
  * // and DB_NAME is "myapp"
158
111
  * const url = Env.get('DATABASE_URL', ''); // "postgres://localhost:5432/myapp"
159
112
  */
160
- Env.get = function (key, defaultValue) {
161
- var _a;
162
- var value = (_a = process.env[key]) !== null && _a !== void 0 ? _a : defaultValue;
113
+ static get(key, defaultValue) {
114
+ let value = process.env[key] ?? defaultValue;
163
115
  // Expand ${VAR} references
164
116
  if (value && value.includes('${')) {
165
- value = value.replace(/\${([A-Za-z0-9_]+)}/g, function (_, varName) {
166
- var _a;
167
- return (_a = process.env[varName]) !== null && _a !== void 0 ? _a : '';
117
+ value = value.replace(/\${([A-Za-z0-9_]+)}/g, (_, varName) => {
118
+ return process.env[varName] ?? '';
168
119
  });
169
120
  }
170
121
  return value;
171
- };
122
+ }
172
123
  /**
173
124
  * Retrieves a string environment variable and throws if it's missing.
174
125
  *
@@ -176,13 +127,13 @@ var Env = /** @class */ (function () {
176
127
  * @returns {string} The environment variable's value.
177
128
  * @throws {Error} If the variable is not defined.
178
129
  */
179
- Env.getRequired = function (key) {
180
- var value = process.env[key];
130
+ static getRequired(key) {
131
+ const value = process.env[key];
181
132
  if (value === undefined) {
182
- throw new Error("Required environment variable '".concat(key, "' is missing"));
133
+ throw new Error(`Required environment variable '${key}' is missing`);
183
134
  }
184
135
  return Env.get(key, ''); // Use get to handle variable expansion
185
- };
136
+ }
186
137
  /**
187
138
  * Retrieves a value using a default generating function if the key doesn't exist.
188
139
  * Useful for expensive default calculations.
@@ -197,12 +148,12 @@ var Env = /** @class */ (function () {
197
148
  * return require('os').hostname();
198
149
  * });
199
150
  */
200
- Env.getWithDefault = function (key, defaultFn) {
151
+ static getWithDefault(key, defaultFn) {
201
152
  if (Env.has(key)) {
202
153
  return Env.get(key, '');
203
154
  }
204
155
  return defaultFn();
205
- };
156
+ }
206
157
  /**
207
158
  * Retrieves an environment variable as a number, or returns a default.
208
159
  *
@@ -211,21 +162,21 @@ var Env = /** @class */ (function () {
211
162
  * @returns {number} Parsed numeric value or default.
212
163
  * @throws {Error} If the value is not a valid number.
213
164
  */
214
- Env.getNumber = function (key, defaultValue) {
215
- if (this.cache.has("number:".concat(key))) {
216
- return this.cache.get("number:".concat(key));
165
+ static getNumber(key, defaultValue) {
166
+ if (this.cache.has(`number:${key}`)) {
167
+ return this.cache.get(`number:${key}`);
217
168
  }
218
- var value = process.env[key];
169
+ const value = process.env[key];
219
170
  if (value === undefined) {
220
171
  return defaultValue;
221
172
  }
222
- var numberValue = Number(value);
173
+ const numberValue = Number(value);
223
174
  if (isNaN(numberValue)) {
224
- throw new Error("Environment variable '".concat(key, "' is not a valid number, got: \"").concat(value, "\""));
175
+ throw new Error(`Environment variable '${key}' is not a valid number, got: "${value}"`);
225
176
  }
226
- this.cache.set("number:".concat(key), numberValue);
177
+ this.cache.set(`number:${key}`, numberValue);
227
178
  return numberValue;
228
- };
179
+ }
229
180
  /**
230
181
  * Retrieves a required environment variable as a number.
231
182
  *
@@ -233,13 +184,13 @@ var Env = /** @class */ (function () {
233
184
  * @returns {number} Parsed number.
234
185
  * @throws {Error} If the value is missing or not a number.
235
186
  */
236
- Env.getNumberRequired = function (key) {
237
- var value = process.env[key];
187
+ static getNumberRequired(key) {
188
+ const value = process.env[key];
238
189
  if (value === undefined) {
239
- throw new Error("Required environment variable '".concat(key, "' is missing"));
190
+ throw new Error(`Required environment variable '${key}' is missing`);
240
191
  }
241
192
  return Env.getNumber(key, 0); // The default is ignored since we know the key exists
242
- };
193
+ }
243
194
  /**
244
195
  * Retrieves an integer environment variable and validates it.
245
196
  *
@@ -254,21 +205,20 @@ var Env = /** @class */ (function () {
254
205
  * // Require PORT to be between 1000 and 9999
255
206
  * const port = Env.getInteger('PORT', 3000, { min: 1000, max: 9999 });
256
207
  */
257
- Env.getInteger = function (key, defaultValue, options) {
258
- if (options === void 0) { options = {}; }
259
- var num = Env.getNumber(key, defaultValue);
260
- var intValue = Math.floor(num);
208
+ static getInteger(key, defaultValue, options = {}) {
209
+ const num = Env.getNumber(key, defaultValue);
210
+ const intValue = Math.floor(num);
261
211
  if (intValue !== num) {
262
- throw new Error("Environment variable '".concat(key, "' must be an integer, got: ").concat(num));
212
+ throw new Error(`Environment variable '${key}' must be an integer, got: ${num}`);
263
213
  }
264
214
  if (options.min !== undefined && intValue < options.min) {
265
- throw new Error("Environment variable '".concat(key, "' must be at least ").concat(options.min, ", got: ").concat(intValue));
215
+ throw new Error(`Environment variable '${key}' must be at least ${options.min}, got: ${intValue}`);
266
216
  }
267
217
  if (options.max !== undefined && intValue > options.max) {
268
- throw new Error("Environment variable '".concat(key, "' must be at most ").concat(options.max, ", got: ").concat(intValue));
218
+ throw new Error(`Environment variable '${key}' must be at most ${options.max}, got: ${intValue}`);
269
219
  }
270
220
  return intValue;
271
- };
221
+ }
272
222
  /**
273
223
  * Retrieves an environment variable as a boolean.
274
224
  * Accepts `true`, `1`, `yes`, `on` as true; `false`, `0`, `no`, `off` as false.
@@ -282,26 +232,25 @@ var Env = /** @class */ (function () {
282
232
  * // If DEBUG=yes
283
233
  * const isDebug = Env.getBoolean('DEBUG', false); // true
284
234
  */
285
- Env.getBoolean = function (key, defaultValue) {
286
- if (defaultValue === void 0) { defaultValue = false; }
287
- if (this.cache.has("bool:".concat(key))) {
288
- return this.cache.get("bool:".concat(key));
235
+ static getBoolean(key, defaultValue = false) {
236
+ if (this.cache.has(`bool:${key}`)) {
237
+ return this.cache.get(`bool:${key}`);
289
238
  }
290
- var value = process.env[key];
239
+ const value = process.env[key];
291
240
  if (value === undefined) {
292
241
  return defaultValue;
293
242
  }
294
- var lowerValue = value.toLowerCase();
243
+ const lowerValue = value.toLowerCase();
295
244
  if (['true', '1', 'yes', 'on'].includes(lowerValue)) {
296
- this.cache.set("bool:".concat(key), true);
245
+ this.cache.set(`bool:${key}`, true);
297
246
  return true;
298
247
  }
299
248
  if (['false', '0', 'no', 'off'].includes(lowerValue)) {
300
- this.cache.set("bool:".concat(key), false);
249
+ this.cache.set(`bool:${key}`, false);
301
250
  return false;
302
251
  }
303
- throw new Error("Environment variable '".concat(key, "' is not a valid boolean, got: \"").concat(value, "\". Use true/false, yes/no, 1/0, or on/off."));
304
- };
252
+ throw new Error(`Environment variable '${key}' is not a valid boolean, got: "${value}". Use true/false, yes/no, 1/0, or on/off.`);
253
+ }
305
254
  /**
306
255
  * Retrieves a required environment variable as a boolean.
307
256
  *
@@ -309,13 +258,13 @@ var Env = /** @class */ (function () {
309
258
  * @returns {boolean} Parsed boolean value.
310
259
  * @throws {Error} If missing or invalid.
311
260
  */
312
- Env.getBooleanRequired = function (key) {
313
- var value = process.env[key];
261
+ static getBooleanRequired(key) {
262
+ const value = process.env[key];
314
263
  if (value === undefined) {
315
- throw new Error("Required environment variable '".concat(key, "' is missing"));
264
+ throw new Error(`Required environment variable '${key}' is missing`);
316
265
  }
317
266
  return Env.getBoolean(key);
318
- };
267
+ }
319
268
  /**
320
269
  * Parses a stringified JSON object from an environment variable.
321
270
  *
@@ -330,23 +279,23 @@ var Env = /** @class */ (function () {
330
279
  * const config = Env.getJSON('CONFIG', { debug: false });
331
280
  * // { debug: true, api: { url: "https://api.example.com" }}
332
281
  */
333
- Env.getJSON = function (key, defaultValue) {
334
- if (this.cache.has("json:".concat(key))) {
335
- return this.cache.get("json:".concat(key));
282
+ static getJSON(key, defaultValue) {
283
+ if (this.cache.has(`json:${key}`)) {
284
+ return this.cache.get(`json:${key}`);
336
285
  }
337
- var v = process.env[key];
286
+ const v = process.env[key];
338
287
  if (v === undefined) {
339
288
  return defaultValue;
340
289
  }
341
290
  try {
342
- var parsed = JSON.parse(v);
343
- this.cache.set("json:".concat(key), parsed);
291
+ const parsed = JSON.parse(v);
292
+ this.cache.set(`json:${key}`, parsed);
344
293
  return parsed;
345
294
  }
346
295
  catch (error) {
347
- throw new Error("Environment variable '".concat(key, "' is not valid JSON: ").concat(error.message));
296
+ throw new Error(`Environment variable '${key}' is not valid JSON: ${error.message}`);
348
297
  }
349
- };
298
+ }
350
299
  /**
351
300
  * Parses a comma-separated string as an array.
352
301
  *
@@ -365,35 +314,33 @@ var Env = /** @class */ (function () {
365
314
  * // With transformation function
366
315
  * const ports = Env.getArray('PORTS', [], ',', (p) => parseInt(p, 10));
367
316
  */
368
- Env.getArray = function (key, defaultValue, splitter, transform) {
369
- if (defaultValue === void 0) { defaultValue = []; }
370
- if (splitter === void 0) { splitter = ','; }
371
- var cacheKey = "array:".concat(key, ":").concat(splitter, ":").concat(transform ? 'transformed' : 'raw');
317
+ static getArray(key, defaultValue = [], splitter = ',', transform) {
318
+ const cacheKey = `array:${key}:${splitter}:${transform ? 'transformed' : 'raw'}`;
372
319
  if (this.cache.has(cacheKey)) {
373
320
  return this.cache.get(cacheKey);
374
321
  }
375
- var value = process.env[key];
322
+ const value = process.env[key];
376
323
  if (!value || value.trim() === '') {
377
324
  return defaultValue;
378
325
  }
379
- var items = value
326
+ const items = value
380
327
  .split(splitter)
381
- .map(function (item) { return item.trim(); })
382
- .filter(function (item) { return item.length > 0; });
328
+ .map(item => item.trim())
329
+ .filter(item => item.length > 0);
383
330
  if (transform) {
384
331
  try {
385
- var result_1 = items.map(transform);
386
- this.cache.set(cacheKey, result_1);
387
- return result_1;
332
+ const result = items.map(transform);
333
+ this.cache.set(cacheKey, result);
334
+ return result;
388
335
  }
389
336
  catch (error) {
390
- throw new Error("Failed to transform items in '".concat(key, "': ").concat(error.message));
337
+ throw new Error(`Failed to transform items in '${key}': ${error.message}`);
391
338
  }
392
339
  }
393
- var result = items;
340
+ const result = items;
394
341
  this.cache.set(cacheKey, result);
395
342
  return result;
396
- };
343
+ }
397
344
  /**
398
345
  * Parses a comma-separated list of numbers.
399
346
  *
@@ -407,17 +354,15 @@ var Env = /** @class */ (function () {
407
354
  * const ports = Env.getNumberArray('ALLOWED_PORTS');
408
355
  * // [80, 443, 3000, 8080]
409
356
  */
410
- Env.getNumberArray = function (key, defaultValue, splitter) {
411
- if (defaultValue === void 0) { defaultValue = []; }
412
- if (splitter === void 0) { splitter = ','; }
413
- return Env.getArray(key, defaultValue, splitter, function (item) {
414
- var num = Number(item);
357
+ static getNumberArray(key, defaultValue = [], splitter = ',') {
358
+ return Env.getArray(key, defaultValue, splitter, item => {
359
+ const num = Number(item);
415
360
  if (isNaN(num)) {
416
- throw new Error("Value \"".concat(item, "\" in array '").concat(key, "' is not a valid number"));
361
+ throw new Error(`Value "${item}" in array '${key}' is not a valid number`);
417
362
  }
418
363
  return num;
419
364
  });
420
- };
365
+ }
421
366
  /**
422
367
  * Retrieves an enum-like environment variable value, validating against allowed values.
423
368
  *
@@ -433,16 +378,16 @@ var Env = /** @class */ (function () {
433
378
  * const level = Env.getEnum('LOG_LEVEL', ['debug', 'info', 'warn', 'error'] as const, 'info');
434
379
  * // 'debug' (typed as 'debug' | 'info' | 'warn' | 'error')
435
380
  */
436
- Env.getEnum = function (key, allowedValues, defaultValue) {
437
- var value = process.env[key];
381
+ static getEnum(key, allowedValues, defaultValue) {
382
+ const value = process.env[key];
438
383
  if (!value) {
439
384
  return defaultValue;
440
385
  }
441
386
  if (!allowedValues.includes(value)) {
442
- throw new Error("Environment variable '".concat(key, "' must be one of: ").concat(allowedValues.join(', '), ". Received: \"").concat(value, "\""));
387
+ throw new Error(`Environment variable '${key}' must be one of: ${allowedValues.join(', ')}. Received: "${value}"`);
443
388
  }
444
389
  return value;
445
- };
390
+ }
446
391
  /**
447
392
  * Retrieves an enum-like numeric environment variable.
448
393
  *
@@ -455,13 +400,13 @@ var Env = /** @class */ (function () {
455
400
  * // If NODE_VERSION=16
456
401
  * const version = Env.getNumberEnum('NODE_VERSION', [14, 16, 18], 16);
457
402
  */
458
- Env.getNumberEnum = function (key, allowedValues, defaultValue) {
459
- var value = Env.getNumber(key, defaultValue);
403
+ static getNumberEnum(key, allowedValues, defaultValue) {
404
+ const value = Env.getNumber(key, defaultValue);
460
405
  if (!allowedValues.includes(value)) {
461
- throw new Error("Environment variable '".concat(key, "' must be one of: ").concat(allowedValues.join(', '), ". Received: ").concat(value));
406
+ throw new Error(`Environment variable '${key}' must be one of: ${allowedValues.join(', ')}. Received: ${value}`);
462
407
  }
463
408
  return value;
464
- };
409
+ }
465
410
  /**
466
411
  * Retrieves a URL environment variable and validates it.
467
412
  *
@@ -479,41 +424,40 @@ var Env = /** @class */ (function () {
479
424
  * allowIp: false
480
425
  * });
481
426
  */
482
- Env.getUrl = function (key, defaultValue, options) {
483
- if (options === void 0) { options = {}; }
484
- var cacheKey = "url:".concat(key, ":").concat(JSON.stringify(options));
427
+ static getUrl(key, defaultValue, options = {}) {
428
+ const cacheKey = `url:${key}:${JSON.stringify(options)}`;
485
429
  if (this.cache.has(cacheKey)) {
486
430
  return this.cache.get(cacheKey);
487
431
  }
488
- var value = Env.get(key, defaultValue);
432
+ const value = Env.get(key, defaultValue);
489
433
  if (!value) {
490
- throw new Error("URL environment variable '".concat(key, "' is missing or empty"));
434
+ throw new Error(`URL environment variable '${key}' is missing or empty`);
491
435
  }
492
- var url;
436
+ let url;
493
437
  try {
494
438
  url = new URL(value);
495
439
  }
496
- catch (_a) {
497
- throw new Error("Environment variable '".concat(key, "' is not a valid URL: \"").concat(value, "\""));
440
+ catch {
441
+ throw new Error(`Environment variable '${key}' is not a valid URL: "${value}"`);
498
442
  }
499
443
  // Validate protocol
500
444
  if (options.protocols && options.protocols.length > 0) {
501
- var protocol = url.protocol.replace(':', '');
445
+ const protocol = url.protocol.replace(':', '');
502
446
  if (!options.protocols.includes(protocol)) {
503
- throw new Error("Environment variable '".concat(key, "' must use one of the protocols: ").concat(options.protocols.join(', '), ". Got: ").concat(protocol));
447
+ throw new Error(`Environment variable '${key}' must use one of the protocols: ${options.protocols.join(', ')}. Got: ${protocol}`);
504
448
  }
505
449
  }
506
450
  // Validate hostname
507
- var hostname = url.hostname;
508
- var isIp = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(hostname);
509
- var isLocalhost = hostname === 'localhost';
451
+ const { hostname } = url;
452
+ const isIp = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(hostname);
453
+ const isLocalhost = hostname === 'localhost';
510
454
  // Check if hostname is an IP address when not allowed
511
455
  if (isIp && options.allowIp === false) {
512
- throw new Error("Environment variable '".concat(key, "' cannot be an IP address: \"").concat(hostname, "\""));
456
+ throw new Error(`Environment variable '${key}' cannot be an IP address: "${hostname}"`);
513
457
  }
514
458
  // Check if hostname is localhost when not allowed
515
459
  if (isLocalhost && options.allowLocalhost === false) {
516
- throw new Error("Environment variable '".concat(key, "' cannot be localhost"));
460
+ throw new Error(`Environment variable '${key}' cannot be localhost`);
517
461
  }
518
462
  // Check for TLD requirement - include localhost in check if requireTld is true and allowLocalhost is false
519
463
  if (options.requireTld === true) {
@@ -524,12 +468,12 @@ var Env = /** @class */ (function () {
524
468
  // IP is allowed, so no TLD check needed for it
525
469
  }
526
470
  else if (!hostname.includes('.') || hostname.endsWith('.')) {
527
- throw new Error("Environment variable '".concat(key, "' must have a valid host with TLD: \"").concat(hostname, "\""));
471
+ throw new Error(`Environment variable '${key}' must have a valid host with TLD: "${hostname}"`);
528
472
  }
529
473
  }
530
474
  this.cache.set(cacheKey, value);
531
475
  return value;
532
- };
476
+ }
533
477
  /**
534
478
  * Retrieves an email environment variable and validates it.
535
479
  *
@@ -541,25 +485,25 @@ var Env = /** @class */ (function () {
541
485
  * @example
542
486
  * const supportEmail = Env.getEmail('SUPPORT_EMAIL', 'support@example.com');
543
487
  */
544
- Env.getEmail = function (key, defaultValue) {
545
- if (this.cache.has("email:".concat(key))) {
546
- return this.cache.get("email:".concat(key));
488
+ static getEmail(key, defaultValue) {
489
+ if (this.cache.has(`email:${key}`)) {
490
+ return this.cache.get(`email:${key}`);
547
491
  }
548
- var value = Env.get(key, defaultValue);
492
+ const value = Env.get(key, defaultValue);
549
493
  if (!value) {
550
494
  if (defaultValue === undefined) {
551
- throw new Error("Email environment variable '".concat(key, "' is missing"));
495
+ throw new Error(`Email environment variable '${key}' is missing`);
552
496
  }
553
497
  return defaultValue;
554
498
  }
555
499
  // More comprehensive email validation regex
556
- var emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
500
+ const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
557
501
  if (!emailRegex.test(value)) {
558
- throw new Error("Environment variable '".concat(key, "' is not a valid email address: \"").concat(value, "\""));
502
+ throw new Error(`Environment variable '${key}' is not a valid email address: "${value}"`);
559
503
  }
560
- this.cache.set("email:".concat(key), value);
504
+ this.cache.set(`email:${key}`, value);
561
505
  return value;
562
- };
506
+ }
563
507
  /**
564
508
  * Retrieves a path environment variable and validates it exists.
565
509
  *
@@ -576,34 +520,33 @@ var Env = /** @class */ (function () {
576
520
  * allowedExtensions: ['.json', '.yaml']
577
521
  * });
578
522
  */
579
- Env.getPath = function (key, defaultValue, options) {
580
- if (options === void 0) { options = {}; }
581
- var cacheKey = "path:".concat(key, ":").concat(JSON.stringify(options));
523
+ static getPath(key, defaultValue, options = {}) {
524
+ const cacheKey = `path:${key}:${JSON.stringify(options)}`;
582
525
  if (this.cache.has(cacheKey)) {
583
526
  return this.cache.get(cacheKey);
584
527
  }
585
- var value = Env.get(key, defaultValue);
528
+ const value = Env.get(key, defaultValue);
586
529
  if (!value) {
587
530
  if (defaultValue === undefined) {
588
- throw new Error("Path environment variable '".concat(key, "' is missing"));
531
+ throw new Error(`Path environment variable '${key}' is missing`);
589
532
  }
590
533
  return defaultValue;
591
534
  }
592
- var path = options.makeAbsolute !== false && !isAbsolute(value) ? resolve(process.cwd(), value) : value;
535
+ const path = options.makeAbsolute !== false && !isAbsolute(value) ? resolve(process.cwd(), value) : value;
593
536
  // Validate path exists if required
594
537
  if (options.mustExist && !existsSync(path)) {
595
- throw new Error("Path in environment variable '".concat(key, "' does not exist: \"").concat(path, "\""));
538
+ throw new Error(`Path in environment variable '${key}' does not exist: "${path}"`);
596
539
  }
597
540
  // Validate file extension if specified
598
541
  if (options.allowedExtensions && options.allowedExtensions.length > 0) {
599
- var hasValidExtension = options.allowedExtensions.some(function (ext) { return path.toLowerCase().endsWith(ext.toLowerCase()); });
542
+ const hasValidExtension = options.allowedExtensions.some(ext => path.toLowerCase().endsWith(ext.toLowerCase()));
600
543
  if (!hasValidExtension) {
601
- throw new Error("Path in environment variable '".concat(key, "' must have one of these extensions: ").concat(options.allowedExtensions.join(', '), ". Got: \"").concat(path, "\""));
544
+ throw new Error(`Path in environment variable '${key}' must have one of these extensions: ${options.allowedExtensions.join(', ')}. Got: "${path}"`);
602
545
  }
603
546
  }
604
547
  this.cache.set(cacheKey, path);
605
548
  return path;
606
- };
549
+ }
607
550
  /**
608
551
  * Retrieves a port environment variable and validates it.
609
552
  *
@@ -615,18 +558,18 @@ var Env = /** @class */ (function () {
615
558
  * @example
616
559
  * const serverPort = Env.getPort('PORT', 3000);
617
560
  */
618
- Env.getPort = function (key, defaultValue) {
561
+ static getPort(key, defaultValue) {
619
562
  try {
620
563
  return Env.getInteger(key, defaultValue, { min: 0, max: 65535 });
621
564
  }
622
565
  catch (error) {
623
566
  // Rewrite the error message to match the expected pattern
624
567
  if (error.message.includes('must be at most 65535')) {
625
- throw new Error("Environment variable '".concat(key, "' must be a valid port number (0-65535)"));
568
+ throw new Error(`Environment variable '${key}' must be a valid port number (0-65535)`);
626
569
  }
627
570
  throw error;
628
571
  }
629
- };
572
+ }
630
573
  /**
631
574
  * Retrieves an ISO date string and converts it to a Date object.
632
575
  *
@@ -638,18 +581,17 @@ var Env = /** @class */ (function () {
638
581
  * // If EXPIRY_DATE=2023-12-31T23:59:59Z
639
582
  * const expiryDate = Env.getDate('EXPIRY_DATE', new Date());
640
583
  */
641
- Env.getDate = function (key, defaultValue) {
642
- if (defaultValue === void 0) { defaultValue = new Date(); }
643
- var value = Env.get(key, defaultValue instanceof Date ? defaultValue.toISOString() : defaultValue);
584
+ static getDate(key, defaultValue = new Date()) {
585
+ const value = Env.get(key, defaultValue instanceof Date ? defaultValue.toISOString() : defaultValue);
644
586
  if (!value) {
645
587
  return defaultValue instanceof Date ? defaultValue : new Date();
646
588
  }
647
- var date = new Date(value);
589
+ const date = new Date(value);
648
590
  if (isNaN(date.getTime())) {
649
- throw new Error("Environment variable '".concat(key, "' is not a valid date: \"").concat(value, "\""));
591
+ throw new Error(`Environment variable '${key}' is not a valid date: "${value}"`);
650
592
  }
651
593
  return date;
652
- };
594
+ }
653
595
  /**
654
596
  * Retrieves a duration string and converts it to milliseconds.
655
597
  * Supports formats like "1d", "2h", "30m", "45s", "100ms" or combinations like "1h30m".
@@ -664,29 +606,28 @@ var Env = /** @class */ (function () {
664
606
  * const cacheTtlMs = Env.getDuration('CACHE_TTL', '1h');
665
607
  * // 9000000 (2.5 hours in milliseconds)
666
608
  */
667
- Env.getDuration = function (key, defaultValue) {
668
- if (defaultValue === void 0) { defaultValue = '0'; }
669
- var cacheKey = "duration:".concat(key);
609
+ static getDuration(key, defaultValue = '0') {
610
+ const cacheKey = `duration:${key}`;
670
611
  if (this.cache.has(cacheKey)) {
671
612
  return this.cache.get(cacheKey);
672
613
  }
673
- var value = Env.get(key, String(defaultValue));
614
+ const value = Env.get(key, String(defaultValue));
674
615
  if (!value)
675
616
  return 0;
676
617
  // Handle plain number input (assume milliseconds)
677
618
  if (/^\d+$/.test(value)) {
678
- var ms_1 = parseInt(value, 10);
679
- this.cache.set(cacheKey, ms_1);
680
- return ms_1;
619
+ const ms = parseInt(value, 10);
620
+ this.cache.set(cacheKey, ms);
621
+ return ms;
681
622
  }
682
623
  // Enhanced duration parsing with more precise regex
683
- var durationRegex = /^(?:(\d+)y)?(?:(\d+)w)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?(?:(\d+)ms)?$/;
684
- var matches = value.match(durationRegex);
624
+ const durationRegex = /^(?:(\d+)y)?(?:(\d+)w)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?(?:(\d+)ms)?$/;
625
+ const matches = value.match(durationRegex);
685
626
  if (!matches || matches[0] === '') {
686
- throw new Error("Environment variable '".concat(key, "' has invalid duration format: \"").concat(value, "\". ") +
687
- "Use formats like 1y, 2w, 3d, 4h, 5m, 6s, or 7ms.");
627
+ throw new Error(`Environment variable '${key}' has invalid duration format: "${value}". ` +
628
+ `Use formats like 1y, 2w, 3d, 4h, 5m, 6s, or 7ms.`);
688
629
  }
689
- var ms = 0;
630
+ let ms = 0;
690
631
  if (matches[1])
691
632
  ms += parseInt(matches[1], 10) * 31536000000; // years (approximate)
692
633
  if (matches[2])
@@ -703,7 +644,7 @@ var Env = /** @class */ (function () {
703
644
  ms += parseInt(matches[7], 10); // milliseconds
704
645
  this.cache.set(cacheKey, ms);
705
646
  return ms;
706
- };
647
+ }
707
648
  /**
708
649
  * Gets all environment variables with sensitive values masked for safe logging.
709
650
  *
@@ -714,31 +655,16 @@ var Env = /** @class */ (function () {
714
655
  * console.log(Env.getSafeEnv(['password', 'secret', 'key']));
715
656
  * // { DATABASE_URL: "postgres://...", API_KEY: "******", ... }
716
657
  */
717
- Env.getSafeEnv = function (sensitiveKeys) {
718
- var e_2, _a;
719
- if (sensitiveKeys === void 0) { sensitiveKeys = ['password', 'secret', 'key', 'token', 'auth']; }
720
- var safeEnv = {};
721
- var _loop_1 = function (key, value) {
658
+ static getSafeEnv(sensitiveKeys = ['password', 'secret', 'key', 'token', 'auth']) {
659
+ const safeEnv = {};
660
+ for (const [key, value] of Object.entries(process.env)) {
722
661
  if (!value)
723
- return "continue";
724
- var isSensitive = sensitiveKeys.some(function (sensitiveKey) { return key.toLowerCase().includes(sensitiveKey.toLowerCase()); });
662
+ continue;
663
+ const isSensitive = sensitiveKeys.some(sensitiveKey => key.toLowerCase().includes(sensitiveKey.toLowerCase()));
725
664
  safeEnv[key] = isSensitive ? '******' : value;
726
- };
727
- try {
728
- for (var _b = __values(Object.entries(process.env)), _c = _b.next(); !_c.done; _c = _b.next()) {
729
- var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
730
- _loop_1(key, value);
731
- }
732
- }
733
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
734
- finally {
735
- try {
736
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
737
- }
738
- finally { if (e_2) throw e_2.error; }
739
665
  }
740
666
  return safeEnv;
741
- };
667
+ }
742
668
  /**
743
669
  * Loads environment variables from a .env file.
744
670
  * Does not override existing variables.
@@ -750,45 +676,44 @@ var Env = /** @class */ (function () {
750
676
  * // Load variables from .env.development
751
677
  * Env.loadFromFile('.env.development');
752
678
  */
753
- Env.loadFromFile = function (path) {
754
- if (path === void 0) { path = '.env'; }
679
+ static loadFromFile(path = '.env') {
755
680
  if (!existsSync(path)) {
756
- throw new Error("Environment file not found: \"".concat(path, "\""));
681
+ throw new Error(`Environment file not found: "${path}"`);
757
682
  }
758
- var content = readFileSync(path, 'utf8');
759
- var variables = {};
760
- var lines = content.split(/\r?\n/);
761
- var i = 0;
683
+ const content = readFileSync(path, 'utf8');
684
+ const variables = {};
685
+ const lines = content.split(/\r?\n/);
686
+ let i = 0;
762
687
  while (i < lines.length) {
763
- var line = lines[i].trim();
688
+ let line = lines[i].trim();
764
689
  // Skip empty lines or comment-only lines
765
690
  if (!line || line.startsWith('#')) {
766
691
  i++;
767
692
  continue;
768
693
  }
769
- var match = line.match(/^([^=]+)=(.*)$/);
694
+ const match = line.match(/^([^=]+)=(.*)$/);
770
695
  if (!match) {
771
696
  i++;
772
697
  continue;
773
698
  }
774
- var key = match[1].trim();
775
- var value = match[2].trim();
699
+ const key = match[1].trim();
700
+ let value = match[2].trim();
776
701
  // Remove inline comment for unquoted values
777
702
  if (!/^['"]/.test(value)) {
778
- var hashIndex = value.indexOf(' #');
703
+ const hashIndex = value.indexOf(' #');
779
704
  if (hashIndex !== -1) {
780
705
  value = value.slice(0, hashIndex).trim();
781
706
  }
782
707
  }
783
708
  // Handle quoted values
784
709
  if ((value.startsWith('"') || value.startsWith("'")) && value.length > 1) {
785
- var quote = value[0];
710
+ const quote = value[0];
786
711
  if (!value.endsWith(quote) || value.length === 1) {
787
712
  // multiline quoted
788
- var multilineValue = value.slice(1);
713
+ let multilineValue = value.slice(1);
789
714
  i++;
790
715
  while (i < lines.length) {
791
- var nextLine = lines[i];
716
+ const nextLine = lines[i];
792
717
  if (nextLine.endsWith(quote)) {
793
718
  multilineValue += '\n' + nextLine.slice(0, -1);
794
719
  break;
@@ -821,53 +746,37 @@ var Env = /** @class */ (function () {
821
746
  i++;
822
747
  }
823
748
  return variables;
824
- };
749
+ }
825
750
  /**
826
751
  * Checks whether the specified environment variable exists.
827
752
  *
828
753
  * @param {string} key - The environment variable key.
829
754
  * @returns {boolean} `true` if the variable is defined, otherwise `false`.
830
755
  */
831
- Env.has = function (key) {
756
+ static has(key) {
832
757
  return process.env[key] !== undefined;
833
- };
758
+ }
834
759
  /**
835
760
  * Deletes the given environment variable (useful in tests).
836
761
  *
837
762
  * @param {string} key - The environment variable key to delete.
838
763
  * @returns {void}
839
764
  */
840
- Env.delete = function (key) {
841
- var e_3, _a;
765
+ static delete(key) {
842
766
  delete process.env[key];
843
767
  this.cache.delete(key);
844
- try {
845
- // Also clear all cached variations of this key
846
- for (var _b = __values(this.cache.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
847
- var cacheKey = _c.value;
848
- if (cacheKey.includes(":".concat(key))) {
849
- this.cache.delete(cacheKey);
850
- }
768
+ // Also clear all cached variations of this key
769
+ for (const cacheKey of this.cache.keys()) {
770
+ if (cacheKey.includes(`:${key}`)) {
771
+ this.cache.delete(cacheKey);
851
772
  }
852
773
  }
853
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
854
- finally {
855
- try {
856
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
857
- }
858
- finally { if (e_3) throw e_3.error; }
859
- }
860
- };
774
+ }
861
775
  /**
862
776
  * Clears the internal cache of parsed environment values.
863
777
  * Useful for testing or when environment variables might change.
864
778
  */
865
- Env.clearCache = function () {
779
+ static clearCache() {
866
780
  this.cache.clear();
867
- };
868
- // Cache for parsed values to avoid repeated parsing of complex values
869
- Env.cache = new Map();
870
- return Env;
871
- }());
872
- export { Env };
873
- //# sourceMappingURL=env.utils.js.map
781
+ }
782
+ }