envapt 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index.mjs → index.cjs} +9 -5
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +3 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/index.mjs.map +0 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var dotenv = require('dotenv');
|
|
2
4
|
|
|
3
5
|
var __defProp = Object.defineProperty;
|
|
4
6
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -440,7 +442,7 @@ var Envapter = class _Envapter {
|
|
|
440
442
|
if (EnvaptCache.size === 0) {
|
|
441
443
|
const isolatedEnv = { ...process.env };
|
|
442
444
|
try {
|
|
443
|
-
config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });
|
|
445
|
+
dotenv.config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });
|
|
444
446
|
} catch {
|
|
445
447
|
}
|
|
446
448
|
for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);
|
|
@@ -616,6 +618,8 @@ function Envapt(key, fallbackOrOptions, converter) {
|
|
|
616
618
|
}
|
|
617
619
|
__name(Envapt, "Envapt");
|
|
618
620
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
621
|
+
exports.Envapt = Envapt;
|
|
622
|
+
exports.Envapter = Envapter;
|
|
623
|
+
exports.Environment = Environment;
|
|
624
|
+
//# sourceMappingURL=index.cjs.map
|
|
625
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Error.ts","../src/ListOfBuiltInConverters.ts","../src/Validators.ts","../src/BuiltInConverters.ts","../src/Parser.ts","../src/Envapter.ts","../src/Envapt.ts"],"names":["parsed","config","Environment"],"mappings":";;;;;;;;AAAO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,eAAA,EAAiB,MAAA;AAAA,EACjB,gBAAA,EAAkB,MAAA;AAAA,EAClB,yBAAA,EAA2B,MAAA;AAAA,EAC3B,uBAAA,EAAyB,MAAA;AAAA,EACzB,oBAAA,EAAsB,MAAA;AAAA,EACtB,sBAAA,EAAwB;AAC1B,CAAA;AAIA,IAAM,2BAA2B,MAAA,CAAO,WAAA;AAAA,EACtC,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,KAAA,EAAO,GAAG,CAAC;AACrE,CAAA;AAUO,IAAM,WAAA,GAAN,MAAM,YAAA,SAAoB,KAAA,CAAM;AAAA,EAvBvC;AAuBuC,IAAA,MAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAAA;AAAA,EACrB,IAAA;AAAA,EAEhB,WAAA,CAAY,MAAuB,OAAA,EAAiB;AAClD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,OAAO,CAAA,EAAG,wBAAA,CAAyB,IAAI,CAAC,KAAK,IAAI,CAAA,CAAA,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,YAAW,CAAA;AAAA,EAC3C;AACF,CAAA;;;AC7BO,IAAM,uBAAA,GAA0B;AAAA,EACrC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;;;ACNO,IAAM,YAAN,MAAgB;AAAA,EAZvB;AAYuB,IAAA,MAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrB,OAAO,mBAAmB,KAAA,EAA4D;AACpF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,uBAAA,CAAwB,SAAS,KAAK,CAAA;AAC5E,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,KAAA,EAAyC;AAC/D,IAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,WAAA,IAAe,KAAA,IACf,OAAQ,KAAA,CAAyB,SAAA,KAAc,QAAA;AAAA,EAEnD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAA0B,KAAA,EAAyD;AACxF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAEtC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AAE/C,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACzC,IAAA,MAAM,aAA+C,uBAAA,CAAwB,MAAA;AAAA,MAC3E,CAAC,IAAA,KAAiD,CAAC,YAAA,CAAa,SAAS,IAAI;AAAA,KAC/E;AAEA,IAAA,OAAO,UAAA,CAAW,SAAS,KAAuC,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,yBACL,SAAA,EAI4C;AAC5C,IAAA,OAAO,OAAO,SAAA,KAAc,UAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,gBACL,SAAA,EACsD;AACtD,IAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACnC,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,sBAAA;AAAA,QACjB,CAAA,yCAAA,EAA4C,OAAO,SAAS,CAAA,CAAA;AAAA,OAC9D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAe,KAAA,EAAiD;AACrE,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,gBAAA,EAAkB,8BAA8B,CAAA;AAAA,IACzF;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,IAAa,CAAC,KAAK,yBAAA,CAA0B,KAAA,CAAM,IAAI,CAAA,EAAG;AAC3E,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,yBAAA;AAAA,QACjB,CAAA,CAAA,EAAI,MAAM,IAAc,CAAA,+BAAA;AAAA,OAC1B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,KAAA,EAAmD;AACzE,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,sBAAsB,CAAA,qBAAA,EAAwB,OAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IACrG;AAEA,IAAA,IAAI,CAAC,uBAAA,CAAwB,QAAA,CAAS,KAAyB,CAAA,EAAG;AAChE,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,uBAAA;AAAA,QACjB,IAAI,KAAK,CAAA,kDAAA,EAAqD,uBAAA,CAAwB,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,OACjG;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;AC7FO,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EAV/B;AAU+B,IAAA,MAAA,CAAA,IAAA,EAAA,mBAAA,CAAA;AAAA;AAAA,EAC7B,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,OAAO,GAAA,IAAO,QAAA;AAAA,EAChB;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,OAAO,GAAG,CAAA;AACzB,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAA,CAAQ,GAAA,EAAyB,QAAA,EAAyC;AAC/E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,EAAY,CAAE,IAAA,EAAK;AAErC,IAAA,MAAM,YAAA,GAAe,CAAC,GAAA,EAAK,KAAA,EAAO,QAAQ,IAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAK,IAAA,EAAM,SAAS,KAAK,CAAA;AAE9C,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,IAAA;AACzC,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACxC,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAG,CAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,OAAO,GAAA,GAAM,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,OAAA,CAAQ,GAAA,EAAyB,QAAA,EAAuC;AAC7E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,KAAA,CAAM,GAAA,EAAyB,QAAA,EAAuC;AAC3E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,IAAA,CAA2B,GAAA,EAAyB,QAAA,EAA+C;AACxG,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,KAAA,CAAM,GAAA,EAAyB,QAAA,EAAqB,YAAY,GAAA,EAA2B;AAChG,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,EAAA,SAAW,EAAC;AAC/B,IAAA,OAAO,IACJ,KAAA,CAAM,SAAS,CAAA,CACf,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EACrC;AAAA,EAEA,OAAO,GAAA,CAAI,GAAA,EAAyB,QAAA,EAAiC;AACnE,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,IAAI,GAAG,CAAA;AAAA,IACpB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AAEF,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,wBAAwB,CAAA;AAChD,MAAA,IAAI,KAAA,SAAc,IAAI,MAAA,CAAO,MAAM,CAAC,CAAA,EAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAEzD,MAAA,OAAO,IAAI,OAAO,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,IAAA,CAAK,GAAA,EAAyB,QAAA,EAAmC;AACtE,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAG9B,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG;AACrB,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAClC,MAAA,MAAMA,OAAAA,GAAS,IAAI,IAAA,CAAK,SAAS,CAAA;AACjC,MAAA,OAAO,OAAO,KAAA,CAAMA,OAAAA,CAAO,OAAA,EAAS,IAAI,QAAA,GAAWA,OAAAA;AAAA,IACrD;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,GAAG,CAAA;AAC3B,IAAA,OAAO,OAAO,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,IAAI,QAAA,GAAW,MAAA;AAAA,EACrD;AAAA,EAEA,OAAO,IAAA,CAAK,GAAA,EAAyB,QAAA,EAAuC;AAC1E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAI9B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,+BAA+B,CAAA;AACvD,IAAA,IAAI,CAAC,OAAO,OAAO,QAAA;AAEnB,IAAA,MAAM,GAAG,MAAA,EAAQ,IAAA,GAAO,IAAI,CAAA,GAAI,KAAA;AAChC,IAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AAEpB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAEtC,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG,OAAO,QAAA;AAEhC,IAAA,MAAM,aAAA,GAAgB,GAAA;AACtB,IAAA,MAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAA,MAAM,gBAAA,GAAmB,EAAA;AACzB,IAAA,MAAM,gBAAgB,kBAAA,GAAqB,aAAA;AAC3C,IAAA,MAAM,cAAc,gBAAA,GAAmB,aAAA;AAEvC,IAAA,IAAI,IAAA,KAAS,MAAM,OAAO,KAAA;AAC1B,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,GAAQ,aAAA;AACjC,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,GAAQ,aAAA;AACjC,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,GAAQ,WAAA;AACjC,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,qBAAA,CACL,GAAA,EACA,QAAA,EACAC,OAAAA,EACuB;AACvB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG,OAAO,QAAA;AACpC,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,eAAA;AAAA,QACjB,CAAA,2DAAA,EAA8D,OAAO,QAAQ,CAAA;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,EAAA,SAAW,EAAC;AAE/B,IAAA,MAAM,QAAQ,GAAA,CACX,KAAA,CAAMA,OAAAA,CAAO,SAAS,EACtB,GAAA,CAAI,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,EAAM,CAAA,CACjC,OAAO,OAAO,CAAA;AAGjB,IAAA,IAAI,CAACA,OAAAA,CAAO,IAAA,EAAM,OAAO,KAAA;AAGzB,IAAA,MAAM,SAAA,GAAY,kBAAA,CAAkB,YAAA,CAAaA,OAAAA,CAAO,IAAI,CAAA;AAC5D,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,IAAA,EAAM,MAAS,CAAA;AAC3C,MAAA,OAAO,SAAA,IAAa,IAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aACL,IAAA,EAI4C;AAC5C,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,SAAS,kBAAA,CAAkB,OAAA;AAAA,MAC3B,SAAS,kBAAA,CAAkB,OAAA;AAAA,MAC3B,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,OAAO,kBAAA,CAAkB,KAAA;AAAA,MACzB,MAAM,kBAAA,CAAkB,IAAA;AAAA,MACxB,OAAO,kBAAA,CAAkB,KAAA;AAAA,MACzB,KAAK,kBAAA,CAAkB,GAAA;AAAA,MACvB,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,MAAM,kBAAA,CAAkB,IAAA;AAAA,MACxB,MAAM,kBAAA,CAAkB;AAAA,KAC1B;AAEA,IAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAEjC,IAAA,IAAI,CAAC,SAAA,CAAU,wBAAA,CAAyB,SAAS,CAAA,EAAG;AAClD,MAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,uBAAA,EAAyB,CAAA,4BAAA,EAA+B,IAAc,CAAA,CAAE,CAAA;AAAA,IACjH;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;;;AC7LO,IAAM,SAAN,MAAa;AAAA,EAGlB,YAA6B,UAAA,EAA6B;AAA7B,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAA8B;AAAA,EAtB7D;AAmBoB,IAAA,MAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AAAA,EACD,cAAA,GAAiB,UAAA;AAAA,EAIlC,gBAAgB,GAAA,EAAa,KAAA,EAAe,KAAA,mBAAQ,IAAI,KAAY,EAAW;AAC7E,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,KAAA;AAE3B,IAAA,KAAA,CAAM,IAAI,GAAG,CAAA;AAEb,IAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,CAAC,QAAA,KAAa;AAC3D,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACrC,MAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AAEtB,MAAA,IAAI,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,QAAA;AAEhC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA;AAC3C,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,EAAA,EAAI,OAAO,QAAA;AAE/B,MAAA,MAAM,QAAA,GAAW,KAAK,eAAA,CAAgB,QAAA,EAAU,KAAK,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAGnE,MAAA,IAAI,SAAS,QAAA,CAAS,CAAA,GAAA,EAAM,GAAG,CAAA,CAAA,CAAG,GAAG,OAAO,QAAA;AAG5C,MAAA,IAAI,aAAa,GAAA,IAAO,aAAA,CAAc,IAAA,CAAK,QAAQ,GAAG,OAAO,QAAA;AAE7D,MAAA,OAAO,QAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,YAAA,CACE,GAAA,EACA,QAAA,EACA,SAAA,EACA,cAAc,IAAA,EACmB;AAEjC,IAAA,IAAI,iBAAA,GAAoB,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,QAAQ,CAAA;AAEjE,IAAA,IAAI,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAAA,SAAA,IAC7C,iBAAA,KAAsB,SAAS,iBAAA,GAAoB,SAAA;AAAA,SAAA,IACnD,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAAA,SAAA,IAClD,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAAA,SAAA,IAClD,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAG3D,IAAA,IAAI,SAAA,CAAU,gBAAA,CAAiB,iBAAiB,CAAA,EAAG;AAEjD,MAAA,SAAA,CAAU,eAAe,iBAAiB,CAAA;AAE1C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,MAAS,CAAA;AAEjD,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,WAAA,GAAc,QAAA,GAAW,IAAA;AAE1D,MAAA,OAAO,iBAAA,CAAkB,qBAAA,CAAsB,MAAA,EAAQ,QAAA,EAAU,iBAAiB,CAAA;AAAA,IACpF;AAGA,IAAA,IAAI,SAAA,CAAU,kBAAA,CAAmB,iBAA6C,CAAA,EAAG;AAE/E,MAAA,SAAA,CAAU,iBAAiB,iBAAiB,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,MAAS,CAAA;AAEjD,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,WAAA,GAAc,QAAA,GAAW,IAAA;AAE1D,MAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,YAAA,CAAa,iBAAiB,CAAA;AACpE,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,QAAQ,CAAA;AAC3C,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,SAAA,CAAU,gBAAgB,iBAAiB,CAAA;AAG3C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,MAAS,CAAA;AAK9C,IAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,OAAO,WAAA,GAAc,QAAA,GAAW,IAAA;AAEvD,IAAA,OAAO,iBAAA,CAAkB,KAAK,QAAQ,CAAA;AAAA,EACxC;AAAA,EAEQ,gBAAA,CACN,WACA,QAAA,EAC+B;AAE/B,IAAA,IAAI,WAAW,OAAO,SAAA;AAGtB,IAAA,MAAM,eAAe,OAAO,QAAA;AAC5B,IAAA,IAAI,YAAA,KAAiB,UAAU,OAAO,QAAA;AACtC,IAAA,IAAI,YAAA,KAAiB,WAAW,OAAO,SAAA;AACvC,IAAA,IAAI,YAAA,KAAiB,UAAU,OAAO,QAAA;AACtC,IAAA,IAAI,YAAA,KAAiB,UAAU,OAAO,QAAA;AACtC,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;;;AChHO,IAAM,WAAA,uBAAkB,GAAA,EAAqB;AAiB7C,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACL,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AAHU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA2BL,IAAM,QAAA,GAAN,MAAM,SAAA,CAAoC;AAAA,EArDjD;AAqDiD,IAAA,MAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AAAA;AAAA,EAC/C,OAAwB,MAAA,GAAS,IAAI,MAAA,CAAO,IAAI,WAAU,CAAA;AAAA,EAC1D,OAAe,SAAA,GAAsB,CAAC,MAAM,CAAA;AAAA;AAAA;AAAA,EAG5C,OAAe,sBAAsB,IAAA,CAAK,oBAAA;AAAA,IACxC,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,aAAa,CAAC,CAAC;AAAA,GAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,WAAW,SAAS,KAAA,EAA0B;AAC5C,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAGtD,IAAA,WAAA,CAAY,KAAA,EAAM;AAClB,IAAA,KAAK,IAAA,CAAK,MAAA;AAGV,IAAA,IAAA,CAAK,sBAAsB,IAAA,CAAK,oBAAA;AAAA,MAC9B,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,aAAa,CAAC,CAAC;AAAA,KAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,QAAA,GAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,OAAe,qBAAqB,GAAA,EAAwC;AAC1E,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,QAAQ,GAAA,CAAI,aAAY;AAAG,QACzB,KAAK,YAAA;AACH,UAAA,OAAO,CAAA;AAAA,QACT,KAAK,SAAA;AACH,UAAA,OAAO,CAAA;AAAA,QACT;AACE,UAAA,OAAO,CAAA;AAAA;AACX,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW,YAAY,GAAA,EAA2B;AAChD,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,oBAAA,CAAqB,GAAG,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,WAAA,GAA2B;AACpC,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,YAAA,GAAwB;AACjC,IAAA,OAAO,KAAK,mBAAA,KAAwB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,SAAA,GAAqB;AAC9B,IAAA,OAAO,KAAK,mBAAA,KAAwB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,aAAA,GAAyB;AAClC,IAAA,OAAO,KAAK,mBAAA,KAAwB,CAAA;AAAA,EACtC;AAAA,EAEA,WAAmB,MAAA,GAA+B;AAChD,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAE1B,MAAA,MAAM,WAAA,GAAsC,EAAE,GAAI,OAAA,CAAQ,GAAA,EAA+B;AAEzF,MAAA,IAAI;AAEF,QAAAD,aAAA,CAAO,EAAE,MAAM,IAAA,CAAK,SAAA,EAAW,OAAO,IAAA,EAAM,UAAA,EAAY,aAAa,CAAA;AAAA,MACvE,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IACpF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,OAAe,IAAA,CAAK,GAAA,EAAa,IAAA,GAAkB,gBAAkB,GAAA,EAAwB;AAC3F,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,CAAC,QAAQ,OAAO,GAAA;AAEpB,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,CAAO,gBAAgB,GAAA,EAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAE9D,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,KAAK,CAAA,gBAAmB;AACtB,QAAA,OAAO,iBAAA,CAAkB,OAAA,CAAQ,MAAA,EAAQ,GAAc,CAAA;AAAA,MACzD;AAAA,MAEA,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,SAAS;AACP,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA;AACF,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,GAAA,CAAI,GAAA,EAAa,GAAA,EAAsB;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,SAAA,CAAU,GAAA,EAAa,GAAA,EAAsB;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,UAAA,CAAW,GAAA,EAAa,GAAA,EAAwB;AACrD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,gBAAmB,GAAG,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,SAAA,CAAU,GAAA,EAAa,GAAA,EAAsB;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,SAAA,CAAU,GAAA,EAAa,GAAA,EAAsB;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA,EAEA,GAAA,CAAI,KAAa,GAAA,EAAsB;AACrC,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,UAAA,CAAW,KAAa,GAAA,EAAwB;AAC9C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,gBAAmB,GAAG,CAAA;AAAA,EAClD;AAAA,EAEA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAA,EAAiC;AACtC,IAAA,OAAO,SAAA,CAAS,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAAA,EAChC;AACF;;;AC9TA,SAAS,uBAAA,CACP,GAAA,EACA,QAAA,EACA,SAAA,EACA,cAAc,IAAA,EACK;AACnB,EAAA,OAAO,SAAU,QAAgB,IAAA,EAA6B;AAC5D,IAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAC3B,IAAA,MAAM,WAAW,CAAA,EAAG,MAAA,CAAO,WAAA,CAAY,IAAI,IAAI,OAAO,CAAA,CAAA;AAGtD,IAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,OAAA,EAAS;AAAA,MACrC,qBAAK,MAAA,CAAA,WAAY;AAGf,QAAA,IAAI,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAGpC,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,IAAI,UAAU,CAAA;AACxC,UAAA,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,GAAA,EAAK,QAAA,EAAU,WAAW,WAAW,CAAA;AACjE,UAAA,WAAA,CAAY,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,QACjC;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA,EAbK,KAAA,CAAA;AAAA,MAcL,YAAA,EAAc,KAAA;AAAA,MACd,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH,CAAA;AACF;AA9BS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AA8FF,SAAS,MAAA,CACd,GAAA,EACA,iBAAA,EACA,SAAA,EACmB;AAEnB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,WAAA,GAAc,IAAA;AAElB,EAAA,IACE,qBACA,OAAO,iBAAA,KAAsB,aAC5B,UAAA,IAAc,iBAAA,IAAqB,eAAe,iBAAA,CAAA,EACnD;AAEA,IAAA,MAAM,OAAA,GAAU,iBAAA;AAChB,IAAA,QAAA,GAAW,OAAA,CAAQ,QAAA;AACnB,IAAA,eAAA,GAAkB,OAAA,CAAQ,SAAA;AAC1B,IAAA,WAAA,GAAc,UAAA,IAAc,OAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,QAAA,GAAW,iBAAA;AACX,IAAA,eAAA,GAAkB,SAAA;AAClB,IAAA,WAAA,GAAc,UAAU,MAAA,GAAS,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,uBAAA,CAAwB,GAAA,EAAK,QAAA,EAAU,eAAA,EAAiB,WAAW,CAAA;AAC5E;AA5BgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA","file":"index.cjs","sourcesContent":["export const EnvaptErrorCodes = {\n InvalidFallback: 617404,\n MissingDelimiter: 967308,\n InvalidArrayConverterType: 193159,\n InvalidBuiltInConverter: 337271,\n InvalidConverterType: 453217,\n InvalidCustomConverter: 789432\n} as const;\n\nexport type EnvaptErrorCode = (typeof EnvaptErrorCodes)[keyof typeof EnvaptErrorCodes];\n\nconst ReversedEnvaptErrorCodes = Object.fromEntries(\n Object.entries(EnvaptErrorCodes).map(([key, value]) => [value, key])\n) as Record<EnvaptErrorCode, string>;\n\n/**\n * Custom error for better DX and debugging when using Envapt.\n *\n * @example\n * ```ts\n * throw new EnvaptError(EnvaptErrorCode.InvalidFallback, \"Invalid fallback value provided for environment variable.\");\n * ```\n */\nexport class EnvaptError extends Error {\n public readonly code: EnvaptErrorCode;\n\n constructor(code: EnvaptErrorCode, message: string) {\n super(message);\n this.name = `${ReversedEnvaptErrorCodes[code]} [${code}]`;\n this.code = code;\n\n Error.captureStackTrace(this, EnvaptError);\n }\n}\n","/**\n * List of built-in converters for Envapt.\n * @internal\n */\nexport const ListOfBuiltInConverters = [\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'symbol',\n 'integer',\n 'float',\n 'json',\n 'array',\n 'url',\n 'regexp',\n 'date',\n 'time'\n] as const;\n","import { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { ListOfBuiltInConverters } from './ListOfBuiltInConverters';\n\nimport type {\n EnvaptConverter,\n ConverterFunction,\n ArrayConverter,\n BuiltInConverter,\n ValidArrayConverterBuiltInType,\n BuiltInConverterReturnType\n} from './Types';\n\nexport class Validator {\n /**\n * Check if a value is a built-in converter type\n */\n static isBuiltInConverter(value: EnvaptConverter<unknown>): value is BuiltInConverter {\n if (typeof value === 'string') return ListOfBuiltInConverters.includes(value);\n return false;\n }\n\n /**\n * Check if a value is an ArrayConverter configuration object\n */\n static isArrayConverter(value: unknown): value is ArrayConverter {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'delimiter' in value &&\n typeof (value as ArrayConverter).delimiter === 'string'\n );\n }\n\n /**\n * Check if a value is a valid ArrayConverter type\n */\n static isValidArrayConverterType(value: unknown): value is ValidArrayConverterBuiltInType {\n if (typeof value !== 'string') return false;\n\n const invalidTypes = ['array', 'json', 'regexp'];\n\n if (invalidTypes.includes(value)) return false;\n const validTypes: ValidArrayConverterBuiltInType[] = ListOfBuiltInConverters.filter(\n (type): type is ValidArrayConverterBuiltInType => !invalidTypes.includes(type)\n );\n\n return validTypes.includes(value as ValidArrayConverterBuiltInType);\n }\n\n /**\n * Check if a value is a valid custom converter function\n */\n static isValidConverterFunction<FallbackType extends BuiltInConverter>(\n converter: unknown\n ): converter is (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n return typeof converter === 'function';\n }\n\n static customConvertor<FallbackType>(\n converter: EnvaptConverter<FallbackType>\n ): asserts converter is ConverterFunction<FallbackType> {\n if (typeof converter !== 'function') {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidCustomConverter,\n `Custom converter must be a function, got ${typeof converter}.`\n );\n }\n }\n\n /**\n * Validate ArrayConverter configuration with runtime checks\n */\n static arrayConverter(value: unknown): asserts value is ArrayConverter {\n if (!this.isArrayConverter(value)) {\n throw new EnvaptError(EnvaptErrorCodes.MissingDelimiter, 'Must have delimiter property');\n }\n\n if (value.type !== undefined && !this.isValidArrayConverterType(value.type)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidArrayConverterType,\n `\"${value.type as string}\" is not a valid converter type`\n );\n }\n }\n\n /**\n * Validate that a string is a valid built-in converter type\n */\n static builtInConverter(value: unknown): asserts value is BuiltInConverter {\n if (typeof value !== 'string') {\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Expected string, got ${typeof value}`);\n }\n\n if (!ListOfBuiltInConverters.includes(value as BuiltInConverter)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidBuiltInConverter,\n `\"${value}\" is not a valid converter type. Valid types are: ${ListOfBuiltInConverters.join(',')}`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { Validator } from './Validators';\n\nimport type { ArrayConverter, BuiltInConverter, BuiltInConverterReturnType } from './Types';\n\n/**\n * Built-in converter implementations\n * @internal\n */\nexport class BuiltInConverters {\n static string(raw: string | undefined, fallback?: string): string | undefined {\n return raw ?? fallback;\n }\n\n static number(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = Number(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static boolean(raw: string | undefined, fallback?: boolean): boolean | undefined {\n if (raw === undefined) return fallback;\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 | undefined, fallback?: bigint): bigint | undefined {\n if (raw === undefined) return fallback;\n try {\n return BigInt(raw);\n } catch {\n return fallback;\n }\n }\n\n static symbol(raw: string | undefined, fallback?: symbol): symbol | undefined {\n return raw ? Symbol(raw) : fallback;\n }\n\n static integer(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static json<ParsedJson = unknown>(raw: string | undefined, fallback?: ParsedJson): ParsedJson | undefined {\n if (raw === undefined) return fallback;\n try {\n return JSON.parse(raw) as ParsedJson;\n } catch {\n return fallback;\n }\n }\n\n static array(raw: string | undefined, fallback?: string[], delimiter = ','): string[] | undefined {\n if (raw === undefined) return fallback;\n if (raw.trim() === '') return [];\n return raw\n .split(delimiter)\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n }\n\n static url(raw: string | undefined, fallback?: URL): URL | undefined {\n if (raw === undefined) return fallback;\n try {\n return new URL(raw);\n } catch {\n return fallback;\n }\n }\n\n static regexp(raw: string | undefined, fallback?: RegExp): RegExp | undefined {\n if (raw === undefined) return fallback;\n try {\n // Handle flags if provided in format: /pattern/flags\n const match = raw.match(/^\\/(.+)\\/([gimsuvy]*)$/);\n if (match) return new RegExp(match[1] as string, match[2]);\n\n return new RegExp(raw);\n } catch {\n return fallback;\n }\n }\n\n static date(raw: string | undefined, fallback?: Date): Date | undefined {\n if (raw === undefined) return fallback;\n\n // Try parsing as timestamp first (if it's all digits)\n if (/^\\d+$/.test(raw)) {\n const timestamp = parseInt(raw, 10);\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n // Try parsing as regular date string\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n\n // Match formats like: 5s, 30m, 2h, 500ms, 1000 (plain number treated as ms)\n // eslint-disable-next-line security/detect-unsafe-regex\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (!match) return fallback;\n\n const [, numStr, unit = 'ms'] = match;\n if (!numStr) return fallback;\n\n const value = Number.parseFloat(numStr);\n\n if (Number.isNaN(value)) return fallback;\n\n const SECONDS_TO_MS = 1000;\n const SECONDS_PER_MINUTE = 60;\n const MINUTES_PER_HOUR = 60;\n const MINUTES_TO_MS = SECONDS_PER_MINUTE * SECONDS_TO_MS;\n const HOURS_TO_MS = MINUTES_PER_HOUR * MINUTES_TO_MS;\n\n if (unit === 'ms') return value;\n if (unit === 's') return value * SECONDS_TO_MS;\n if (unit === 'm') return value * MINUTES_TO_MS;\n if (unit === 'h') return value * HOURS_TO_MS;\n return fallback;\n }\n\n /**\n * Process array with custom converter config\n */\n static processArrayConverter(\n raw: string | undefined,\n fallback: unknown,\n config: ArrayConverter\n ): unknown[] | undefined {\n if (raw === undefined) {\n if (Array.isArray(fallback)) return fallback as unknown[];\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayConverter requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n if (raw.trim() === '') return [];\n\n const items = raw\n .split(config.delimiter)\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n // If no type specified, return as string array\n if (!config.type) return items;\n\n // Convert each item using the specified type\n const converter = BuiltInConverters.getConverter(config.type);\n return items.map((item) => {\n const converted = converter(item, undefined);\n return converted ?? item;\n });\n }\n\n /**\n * Get the converter function for a built-in converter type\n */\n static getConverter<FallbackType extends BuiltInConverter>(\n type: FallbackType\n ): (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n const converters = {\n string: BuiltInConverters.string,\n number: BuiltInConverters.number,\n boolean: BuiltInConverters.boolean,\n integer: BuiltInConverters.integer,\n bigint: BuiltInConverters.bigint,\n symbol: BuiltInConverters.symbol,\n float: BuiltInConverters.float,\n json: BuiltInConverters.json,\n array: BuiltInConverters.array,\n url: BuiltInConverters.url,\n regexp: BuiltInConverters.regexp,\n date: BuiltInConverters.date,\n time: BuiltInConverters.time\n } as const;\n\n const converter = converters[type];\n\n if (!Validator.isValidConverterFunction(converter)) {\n throw new EnvaptError(EnvaptErrorCodes.InvalidBuiltInConverter, `Unknown built-in converter: ${type as string}`);\n }\n\n return converter;\n }\n}\n","import { BuiltInConverters } from './BuiltInConverters';\nimport { Validator } from './Validators';\n\nimport type { EnvaptConverter } from './Types';\n\n/**\n * @internal\n */\nexport interface EnvapterService {\n getRaw(key: string): string | undefined;\n get(key: string, def?: string): string;\n getNumber(key: string, def?: number): number;\n getBoolean(key: string, def?: boolean): boolean;\n}\n\n/**\n * Parser class for handling environment variable template resolution and type conversion\n * @internal\n */\nexport class Parser {\n private readonly TEMPLATE_REGEX = /\\${\\w*}/g;\n\n constructor(private readonly envService: EnvapterService) {}\n\n resolveTemplate(key: string, value: string, stack = new Set<string>()): string {\n if (stack.has(key)) return value; // direct cycle, keep as is\n\n stack.add(key);\n\n const out = value.replace(this.TEMPLATE_REGEX, (template) => {\n const variable = template.slice(2, -1);\n if (!variable) return template; // empty name, preserve\n\n if (stack.has(variable)) return template; // cycle, preserve\n\n const raw = this.envService.getRaw(variable);\n if (!raw || raw === '') return template; // missing or empty, preserve\n\n const resolved = this.resolveTemplate(variable, raw, new Set(stack));\n\n // If resolution still references the current key, skip replacement (indirect cycle)\n if (resolved.includes(`\\${${key}}`)) return template;\n\n // If nothing changed (unresolved placeholders stayed), also preserve original template\n if (resolved === raw && /\\$\\{[^}]*\\}/.test(resolved)) return template;\n\n return resolved;\n });\n\n stack.delete(key);\n return out;\n }\n\n convertValue<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n ): FallbackType | null | undefined {\n // Determine which converter to use\n let resolvedConverter = this.resolveConverter(converter, fallback);\n\n if (resolvedConverter === Number) resolvedConverter = 'number';\n else if (resolvedConverter === Boolean) resolvedConverter = 'boolean';\n else if (resolvedConverter === String) resolvedConverter = 'string';\n else if (resolvedConverter === BigInt) resolvedConverter = 'bigint';\n else if (resolvedConverter === Symbol) resolvedConverter = 'symbol';\n\n // Check if it's an ArrayConverter object\n if (Validator.isArrayConverter(resolvedConverter)) {\n // Validate the ArrayConverter configuration at runtime\n Validator.arrayConverter(resolvedConverter);\n\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n return BuiltInConverters.processArrayConverter(parsed, fallback, resolvedConverter) as FallbackType;\n }\n\n // Check if it's a built-in converter\n if (Validator.isBuiltInConverter(resolvedConverter as EnvaptConverter<unknown>)) {\n // Validate the built-in converter at runtime\n Validator.builtInConverter(resolvedConverter);\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n return result as FallbackType;\n }\n\n Validator.customConvertor(resolvedConverter);\n\n // Custom converter function\n const raw = this.envService.get(key, undefined);\n\n // If no fallback provided and no value found, return null\n // If explicit undefined fallback and no value found, return undefined\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (raw === undefined) return hasFallback ? fallback : null;\n\n return resolvedConverter(raw, fallback);\n }\n\n private resolveConverter<FallbackType>(\n converter: EnvaptConverter<FallbackType> | undefined,\n fallback: FallbackType | undefined\n ): EnvaptConverter<FallbackType> {\n // User provided explicit converter. Use it\n if (converter) return converter;\n\n // Auto-detect type from fallback using typeof\n const fallbackType = typeof fallback;\n if (fallbackType === 'number') return 'number';\n if (fallbackType === 'boolean') return 'boolean';\n if (fallbackType === 'bigint') return 'bigint';\n if (fallbackType === 'symbol') return 'symbol';\n return 'string';\n }\n}\n","import { config } from 'dotenv';\n\nimport { BuiltInConverters } from './BuiltInConverters';\nimport { Parser, type EnvapterService } from './Parser';\n\n/**\n * Internal cache for environment variables and computed values\n * @internal\n */\nexport const EnvaptCache = new Map<string, unknown>();\n\n/**\n * @internal\n */\nenum Primitive {\n String,\n Number,\n Boolean,\n BigInt,\n Symbol\n}\n\n/**\n * Environment types supported by Envapter\n * @public\n */\nexport enum Environment {\n Development,\n Staging,\n Production\n}\n\n/**\n * Main configuration class for environment variable management.\n *\n * Provides both static and instance methods for retrieving typed environment variables\n * with support for template resolution, multiple .env files, and environment detection.\n *\n * Extend your own classes from this to define properties with \\@Envapt decorators and provide access to environment variables methods.\n *\n * @example\n * ```ts\n * // Static usage\n * const port = Envapter.getNumber('PORT', 3000);\n * const url = Envapter.get('API_URL', 'http://localhost');\n *\n * // Instance usage\n * const env = new Envapter();\n * const dbUrl = env.get('DATABASE_URL', 'sqlite://memory');\n * ```\n *\n * @public\n */\nexport class Envapter implements EnvapterService {\n private static readonly parser = new Parser(new Envapter());\n private static _envPaths: string[] = ['.env']; // default path\n\n // Environment handling\n private static internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n\n /**\n * Set custom .env file paths. Accepts either a single path or array of paths.\n * Setting new paths clears the cache and reloads environment variables.\n *\n * @param paths - Single file path or array of file paths to load\n *\n * @example\n * ```ts\n * // Single file\n * Envapter.envPaths = '.env.production';\n *\n * // Multiple files (loaded in order)\n * Envapter.envPaths = ['.env', '.env.local', '.env.production'];\n * ```\n */\n static set envPaths(paths: string[] | string) {\n this._envPaths = Array.isArray(paths) ? paths : [paths];\n\n // clear cache to force reload with new path\n EnvaptCache.clear();\n void this.config;\n\n // reset internal environment to force re-evaluation\n this.internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n }\n\n /**\n * Get currently configured .env file paths\n * @returns Array of file paths being loaded\n */\n static get envPaths(): string[] {\n return this._envPaths;\n }\n\n private static determineEnvironment(env: string | Environment): Environment {\n if (typeof env === 'string') {\n switch (env.toLowerCase()) {\n case 'production':\n return Environment.Production;\n case 'staging':\n return Environment.Staging;\n default:\n return Environment.Development;\n }\n }\n\n return env;\n }\n\n /**\n * Set the application environment. Accepts either Environment enum or string value.\n *\n * @param env - Environment value ('development', 'staging', 'production') or Environment enum\n *\n * @example\n * ```ts\n * Envapter.environment = Environment.Production;\n * Envapter.environment = 'staging';\n * ```\n */\n static set environment(env: string | Environment) {\n this.internalEnvironment = this.determineEnvironment(env);\n }\n\n /**\n * Get the current application environment\n * @returns Current environment enum value\n */\n static get environment(): Environment {\n return this.internalEnvironment;\n }\n\n /**\n * Check if the current environment is production\n * @returns true if environment is production\n */\n static get isProduction(): boolean {\n return this.internalEnvironment === Environment.Production;\n }\n\n /**\n * Check if the current environment is staging\n * @returns true if environment is staging\n */\n static get isStaging(): boolean {\n return this.internalEnvironment === Environment.Staging;\n }\n\n /**\n * Check if the current environment is development\n * @returns true if environment is development\n */\n static get isDevelopment(): boolean {\n return this.internalEnvironment === Environment.Development;\n }\n\n private static get config(): Map<string, unknown> {\n if (EnvaptCache.size === 0) {\n // create isolated environment object to avoid mutating process.env\n const isolatedEnv: Record<string, string> = { ...(process.env as Record<string, string>) };\n\n try {\n // load _envPath file from custom path into isolated environment object\n config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });\n } catch {\n // do nothing\n }\n // populate the Map with global environment variables\n for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);\n }\n\n return EnvaptCache;\n }\n\n private static _get(key: string, type: Primitive = Primitive.String, def?: unknown): unknown {\n const rawVal = this.config.get(key) as string | number | boolean;\n if (!rawVal) return def;\n\n const parsed = this.parser.resolveTemplate(key, String(rawVal));\n\n switch (type) {\n case Primitive.String: {\n return BuiltInConverters.string(parsed, def as string);\n }\n\n case Primitive.Number: {\n return BuiltInConverters.number(parsed, def as number);\n }\n\n case Primitive.Boolean: {\n return BuiltInConverters.boolean(parsed, def as boolean);\n }\n\n case Primitive.BigInt: {\n return BuiltInConverters.bigint(parsed, def as bigint);\n }\n\n case Primitive.Symbol: {\n return BuiltInConverters.symbol(parsed, def as symbol);\n }\n\n default: {\n return BuiltInConverters.string(parsed, def as string);\n }\n }\n }\n\n /**\n * Get a string environment variable with optional fallback.\n * Supports template variable resolution using ${VAR} syntax.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value or default\n *\n * @example\n * ```ts\n * const apiUrl = Envapter.get('API_URL', 'http://localhost:3000');\n * ```\n */\n static get(key: string, def?: string): string {\n return this._get(key, Primitive.String, def) as string;\n }\n\n /**\n * Get a number environment variable with optional fallback.\n * Automatically converts string values to numbers.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as number or default\n *\n * @example\n * ```ts\n * const port = Envapter.getNumber('PORT', 3000);\n * ```\n */\n static getNumber(key: string, def?: number): number {\n return this._get(key, Primitive.Number, def) as number;\n }\n\n /**\n * Get a boolean environment variable with optional fallback.\n * Recognizes: `1`, `yes`, `true` as **true**; `0`, `no`, `false` as **false** (case-insensitive).\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as boolean or default\n *\n * @example\n * ```ts\n * const isProduction = Envapter.getBoolean('IS_PRODUCTION', false);\n * ```\n */\n static getBoolean(key: string, def?: boolean): boolean {\n return this._get(key, Primitive.Boolean, def) as boolean;\n }\n\n /**\n * Get a bigint environment variable with optional fallback.\n * Automatically converts string values to bigint.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as bigint or default\n *\n * @example\n * ```ts\n * const largeNumber = Envapter.getBigInt('LARGE_NUMBER', 123456789012345678901234567890n);\n * ```\n */\n static getBigInt(key: string, def?: bigint): bigint {\n return this._get(key, Primitive.BigInt, def) as bigint;\n }\n\n /**\n * Get a symbol environment variable with optional fallback.\n * Creates a symbol from the string value.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value as symbol or default\n *\n * @example\n * ```ts\n * const uniqueKey = Envapter.getSymbol('UNIQUE_KEY', Symbol('default'));\n * ```\n */\n static getSymbol(key: string, def?: symbol): symbol {\n return this._get(key, Primitive.Symbol, def) as symbol;\n }\n\n get(key: string, def?: string): string {\n return Envapter._get(key, Primitive.String, def) as string;\n }\n\n getNumber(key: string, def?: number): number {\n return Envapter._get(key, Primitive.Number, def) as number;\n }\n\n getBoolean(key: string, def?: boolean): boolean {\n return Envapter._get(key, Primitive.Boolean, def) as boolean;\n }\n\n getBigInt(key: string, def?: bigint): bigint {\n return Envapter._get(key, Primitive.BigInt, def) as bigint;\n }\n\n getSymbol(key: string, def?: symbol): symbol {\n return Envapter._get(key, Primitive.Symbol, def) as symbol;\n }\n\n /**\n * Get raw environment variable value without parsing or conversion.\n *\n * @internal\n */\n getRaw(key: string): string | undefined {\n return Envapter.config.get(key) as string | undefined;\n }\n}\n","/* eslint-disable security/detect-bidi-characters */\nimport { Envapter, EnvaptCache } from './Envapter';\nimport { Parser } from './Parser';\n\nimport type { EnvaptConverter, EnvaptOptions } from './Types';\n\nfunction createPropertyDecorator<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n): PropertyDecorator {\n return function (target: object, prop: string | symbol): void {\n const propKey = String(prop);\n const cacheKey = `${target.constructor.name}.${propKey}`;\n\n // Create a property with a getter that handles environment changes\n Object.defineProperty(target, propKey, {\n get: function () {\n // Check if the environment cache has been cleared (indicating config change)\n // If so, we need to re-evaluate our cached value\n let value = EnvaptCache.get(cacheKey) as FallbackType | null | undefined;\n\n // Re-evaluate if we don't have a cached value\n if (value === undefined) {\n const parser = new Parser(new Envapter());\n value = parser.convertValue(key, fallback, converter, hasFallback);\n EnvaptCache.set(cacheKey, value);\n }\n\n return value;\n },\n configurable: false,\n enumerable: true\n });\n };\n}\n\n/**\n * Instance/Static Property decorator that automatically loads and converts environment variables.\n *\n * Supports both modern options-based API and classic parameter-based API.\n * Automatically detects types from fallback values and provides caching for performance.\n *\n * Note: Using \\@Envapt on a variable for an env that doesn't exist will set the value to `null` if no fallback is provided, regardless of a converter being used.\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options (modern API)\n *\n * @example Modern API (recommended):\n * ```ts\n * class Config extends Envapter {\n * \\@Envapt('PORT', { fallback: 3000 })\n * static readonly port: number;\n *\n * \\@Envapt('FEATURES', { fallback: ['auth'], converter: 'array' })\n * declare private readonly features: string[];\n *\n * \\@Envapt('CONFIG', { converter: 'json' })\n * static readonly config: object;\n *\n * \\@Envapt('API_URL', { converter: 'url' })\n * declare public readonly apiUrl: URL;\n *\n * \\@Envapt('CUSTOM_LIST', {\n * fallback: [1, 2, 3],\n * converter: {\n * delimiter: ',',\n * type: 'number' // Convert each item to number\n * }\n * })\n * static readonly customList: string[];\n * }\n * ```\n *\n * @param key - Environment variable name to load\n * @param fallback - Default value if variable is not found. Only suppoerts primitive types (string, number, boolean, bigint, symbol).\n * @param converter - Custom converter function or built-in converter\n *\n * @example Classic API\n * ```ts\n * class HealthCheck {\n * \\@Envapt('PORT', 3000) declare readonly port: number;\n *\n * // code to start server\n * public start() {\n * // works on instance properties\n * console.log(`Server running on port ${this.port}`);\n * }\n * }\n * ```\n *\n * @public\n */\nexport function Envapt<FallbackType = unknown>(key: string, options?: EnvaptOptions<FallbackType>): PropertyDecorator;\nexport function Envapt<FallbackType = string | number | boolean | bigint | symbol>(\n key: string,\n fallback?: FallbackType,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator;\nexport function Envapt<FallbackType = unknown>(\n key: string,\n fallbackOrOptions?: FallbackType | EnvaptOptions<FallbackType>,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator {\n // Determine if using new options API or classic API\n let fallback: FallbackType | undefined;\n let actualConverter: EnvaptConverter<FallbackType> | undefined;\n let hasFallback = true;\n\n if (\n fallbackOrOptions &&\n typeof fallbackOrOptions === 'object' &&\n ('fallback' in fallbackOrOptions || 'converter' in fallbackOrOptions)\n ) {\n // Modern API\n const options = fallbackOrOptions;\n fallback = options.fallback;\n actualConverter = options.converter;\n hasFallback = 'fallback' in options;\n } else {\n // Classic API\n fallback = fallbackOrOptions as FallbackType;\n actualConverter = converter;\n hasFallback = arguments.length > 1;\n }\n\n return createPropertyDecorator(key, fallback, actualConverter, hasFallback);\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var dotenv = require('dotenv');
|
|
1
|
+
import { config } from 'dotenv';
|
|
4
2
|
|
|
5
3
|
var __defProp = Object.defineProperty;
|
|
6
4
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -442,7 +440,7 @@ var Envapter = class _Envapter {
|
|
|
442
440
|
if (EnvaptCache.size === 0) {
|
|
443
441
|
const isolatedEnv = { ...process.env };
|
|
444
442
|
try {
|
|
445
|
-
|
|
443
|
+
config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });
|
|
446
444
|
} catch {
|
|
447
445
|
}
|
|
448
446
|
for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);
|
|
@@ -618,8 +616,6 @@ function Envapt(key, fallbackOrOptions, converter) {
|
|
|
618
616
|
}
|
|
619
617
|
__name(Envapt, "Envapt");
|
|
620
618
|
|
|
621
|
-
|
|
622
|
-
exports.Envapter = Envapter;
|
|
623
|
-
exports.Environment = Environment;
|
|
619
|
+
export { Envapt, Envapter, Environment };
|
|
624
620
|
//# sourceMappingURL=index.js.map
|
|
625
621
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Error.ts","../src/ListOfBuiltInConverters.ts","../src/Validators.ts","../src/BuiltInConverters.ts","../src/Parser.ts","../src/Envapter.ts","../src/Envapt.ts"],"names":["parsed","config","Environment"],"mappings":"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","file":"index.js","sourcesContent":["export const EnvaptErrorCodes = {\n InvalidFallback: 617404,\n MissingDelimiter: 967308,\n InvalidArrayConverterType: 193159,\n InvalidBuiltInConverter: 337271,\n InvalidConverterType: 453217,\n InvalidCustomConverter: 789432\n} as const;\n\nexport type EnvaptErrorCode = (typeof EnvaptErrorCodes)[keyof typeof EnvaptErrorCodes];\n\nconst ReversedEnvaptErrorCodes = Object.fromEntries(\n Object.entries(EnvaptErrorCodes).map(([key, value]) => [value, key])\n) as Record<EnvaptErrorCode, string>;\n\n/**\n * Custom error for better DX and debugging when using Envapt.\n *\n * @example\n * ```ts\n * throw new EnvaptError(EnvaptErrorCode.InvalidFallback, \"Invalid fallback value provided for environment variable.\");\n * ```\n */\nexport class EnvaptError extends Error {\n public readonly code: EnvaptErrorCode;\n\n constructor(code: EnvaptErrorCode, message: string) {\n super(message);\n this.name = `${ReversedEnvaptErrorCodes[code]} [${code}]`;\n this.code = code;\n\n Error.captureStackTrace(this, EnvaptError);\n }\n}\n","/**\n * List of built-in converters for Envapt.\n * @internal\n */\nexport const ListOfBuiltInConverters = [\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'symbol',\n 'integer',\n 'float',\n 'json',\n 'array',\n 'url',\n 'regexp',\n 'date',\n 'time'\n] as const;\n","import { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { ListOfBuiltInConverters } from './ListOfBuiltInConverters';\n\nimport type {\n EnvaptConverter,\n ConverterFunction,\n ArrayConverter,\n BuiltInConverter,\n ValidArrayConverterBuiltInType,\n BuiltInConverterReturnType\n} from './Types';\n\nexport class Validator {\n /**\n * Check if a value is a built-in converter type\n */\n static isBuiltInConverter(value: EnvaptConverter<unknown>): value is BuiltInConverter {\n if (typeof value === 'string') return ListOfBuiltInConverters.includes(value);\n return false;\n }\n\n /**\n * Check if a value is an ArrayConverter configuration object\n */\n static isArrayConverter(value: unknown): value is ArrayConverter {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'delimiter' in value &&\n typeof (value as ArrayConverter).delimiter === 'string'\n );\n }\n\n /**\n * Check if a value is a valid ArrayConverter type\n */\n static isValidArrayConverterType(value: unknown): value is ValidArrayConverterBuiltInType {\n if (typeof value !== 'string') return false;\n\n const invalidTypes = ['array', 'json', 'regexp'];\n\n if (invalidTypes.includes(value)) return false;\n const validTypes: ValidArrayConverterBuiltInType[] = ListOfBuiltInConverters.filter(\n (type): type is ValidArrayConverterBuiltInType => !invalidTypes.includes(type)\n );\n\n return validTypes.includes(value as ValidArrayConverterBuiltInType);\n }\n\n /**\n * Check if a value is a valid custom converter function\n */\n static isValidConverterFunction<FallbackType extends BuiltInConverter>(\n converter: unknown\n ): converter is (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n return typeof converter === 'function';\n }\n\n static customConvertor<FallbackType>(\n converter: EnvaptConverter<FallbackType>\n ): asserts converter is ConverterFunction<FallbackType> {\n if (typeof converter !== 'function') {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidCustomConverter,\n `Custom converter must be a function, got ${typeof converter}.`\n );\n }\n }\n\n /**\n * Validate ArrayConverter configuration with runtime checks\n */\n static arrayConverter(value: unknown): asserts value is ArrayConverter {\n if (!this.isArrayConverter(value)) {\n throw new EnvaptError(EnvaptErrorCodes.MissingDelimiter, 'Must have delimiter property');\n }\n\n if (value.type !== undefined && !this.isValidArrayConverterType(value.type)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidArrayConverterType,\n `\"${value.type as string}\" is not a valid converter type`\n );\n }\n }\n\n /**\n * Validate that a string is a valid built-in converter type\n */\n static builtInConverter(value: unknown): asserts value is BuiltInConverter {\n if (typeof value !== 'string') {\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Expected string, got ${typeof value}`);\n }\n\n if (!ListOfBuiltInConverters.includes(value as BuiltInConverter)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidBuiltInConverter,\n `\"${value}\" is not a valid converter type. Valid types are: ${ListOfBuiltInConverters.join(',')}`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { Validator } from './Validators';\n\nimport type { ArrayConverter, BuiltInConverter, BuiltInConverterReturnType } from './Types';\n\n/**\n * Built-in converter implementations\n * @internal\n */\nexport class BuiltInConverters {\n static string(raw: string | undefined, fallback?: string): string | undefined {\n return raw ?? fallback;\n }\n\n static number(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = Number(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static boolean(raw: string | undefined, fallback?: boolean): boolean | undefined {\n if (raw === undefined) return fallback;\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 | undefined, fallback?: bigint): bigint | undefined {\n if (raw === undefined) return fallback;\n try {\n return BigInt(raw);\n } catch {\n return fallback;\n }\n }\n\n static symbol(raw: string | undefined, fallback?: symbol): symbol | undefined {\n return raw ? Symbol(raw) : fallback;\n }\n\n static integer(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static json<ParsedJson = unknown>(raw: string | undefined, fallback?: ParsedJson): ParsedJson | undefined {\n if (raw === undefined) return fallback;\n try {\n return JSON.parse(raw) as ParsedJson;\n } catch {\n return fallback;\n }\n }\n\n static array(raw: string | undefined, fallback?: string[], delimiter = ','): string[] | undefined {\n if (raw === undefined) return fallback;\n if (raw.trim() === '') return [];\n return raw\n .split(delimiter)\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n }\n\n static url(raw: string | undefined, fallback?: URL): URL | undefined {\n if (raw === undefined) return fallback;\n try {\n return new URL(raw);\n } catch {\n return fallback;\n }\n }\n\n static regexp(raw: string | undefined, fallback?: RegExp): RegExp | undefined {\n if (raw === undefined) return fallback;\n try {\n // Handle flags if provided in format: /pattern/flags\n const match = raw.match(/^\\/(.+)\\/([gimsuvy]*)$/);\n if (match) return new RegExp(match[1] as string, match[2]);\n\n return new RegExp(raw);\n } catch {\n return fallback;\n }\n }\n\n static date(raw: string | undefined, fallback?: Date): Date | undefined {\n if (raw === undefined) return fallback;\n\n // Try parsing as timestamp first (if it's all digits)\n if (/^\\d+$/.test(raw)) {\n const timestamp = parseInt(raw, 10);\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n // Try parsing as regular date string\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n\n // Match formats like: 5s, 30m, 2h, 500ms, 1000 (plain number treated as ms)\n // eslint-disable-next-line security/detect-unsafe-regex\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (!match) return fallback;\n\n const [, numStr, unit = 'ms'] = match;\n if (!numStr) return fallback;\n\n const value = Number.parseFloat(numStr);\n\n if (Number.isNaN(value)) return fallback;\n\n const SECONDS_TO_MS = 1000;\n const SECONDS_PER_MINUTE = 60;\n const MINUTES_PER_HOUR = 60;\n const MINUTES_TO_MS = SECONDS_PER_MINUTE * SECONDS_TO_MS;\n const HOURS_TO_MS = MINUTES_PER_HOUR * MINUTES_TO_MS;\n\n if (unit === 'ms') return value;\n if (unit === 's') return value * SECONDS_TO_MS;\n if (unit === 'm') return value * MINUTES_TO_MS;\n if (unit === 'h') return value * HOURS_TO_MS;\n return fallback;\n }\n\n /**\n * Process array with custom converter config\n */\n static processArrayConverter(\n raw: string | undefined,\n fallback: unknown,\n config: ArrayConverter\n ): unknown[] | undefined {\n if (raw === undefined) {\n if (Array.isArray(fallback)) return fallback as unknown[];\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayConverter requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n if (raw.trim() === '') return [];\n\n const items = raw\n .split(config.delimiter)\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n // If no type specified, return as string array\n if (!config.type) return items;\n\n // Convert each item using the specified type\n const converter = BuiltInConverters.getConverter(config.type);\n return items.map((item) => {\n const converted = converter(item, undefined);\n return converted ?? item;\n });\n }\n\n /**\n * Get the converter function for a built-in converter type\n */\n static getConverter<FallbackType extends BuiltInConverter>(\n type: FallbackType\n ): (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n const converters = {\n string: BuiltInConverters.string,\n number: BuiltInConverters.number,\n boolean: BuiltInConverters.boolean,\n integer: BuiltInConverters.integer,\n bigint: BuiltInConverters.bigint,\n symbol: BuiltInConverters.symbol,\n float: BuiltInConverters.float,\n json: BuiltInConverters.json,\n array: BuiltInConverters.array,\n url: BuiltInConverters.url,\n regexp: BuiltInConverters.regexp,\n date: BuiltInConverters.date,\n time: BuiltInConverters.time\n } as const;\n\n const converter = converters[type];\n\n if (!Validator.isValidConverterFunction(converter)) {\n throw new EnvaptError(EnvaptErrorCodes.InvalidBuiltInConverter, `Unknown built-in converter: ${type as string}`);\n }\n\n return converter;\n }\n}\n","import { BuiltInConverters } from './BuiltInConverters';\nimport { Validator } from './Validators';\n\nimport type { EnvaptConverter } from './Types';\n\n/**\n * @internal\n */\nexport interface EnvapterService {\n getRaw(key: string): string | undefined;\n get(key: string, def?: string): string;\n getNumber(key: string, def?: number): number;\n getBoolean(key: string, def?: boolean): boolean;\n}\n\n/**\n * Parser class for handling environment variable template resolution and type conversion\n * @internal\n */\nexport class Parser {\n private readonly TEMPLATE_REGEX = /\\${\\w*}/g;\n\n constructor(private readonly envService: EnvapterService) {}\n\n resolveTemplate(key: string, value: string, stack = new Set<string>()): string {\n if (stack.has(key)) return value; // direct cycle, keep as is\n\n stack.add(key);\n\n const out = value.replace(this.TEMPLATE_REGEX, (template) => {\n const variable = template.slice(2, -1);\n if (!variable) return template; // empty name, preserve\n\n if (stack.has(variable)) return template; // cycle, preserve\n\n const raw = this.envService.getRaw(variable);\n if (!raw || raw === '') return template; // missing or empty, preserve\n\n const resolved = this.resolveTemplate(variable, raw, new Set(stack));\n\n // If resolution still references the current key, skip replacement (indirect cycle)\n if (resolved.includes(`\\${${key}}`)) return template;\n\n // If nothing changed (unresolved placeholders stayed), also preserve original template\n if (resolved === raw && /\\$\\{[^}]*\\}/.test(resolved)) return template;\n\n return resolved;\n });\n\n stack.delete(key);\n return out;\n }\n\n convertValue<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n ): FallbackType | null | undefined {\n // Determine which converter to use\n let resolvedConverter = this.resolveConverter(converter, fallback);\n\n if (resolvedConverter === Number) resolvedConverter = 'number';\n else if (resolvedConverter === Boolean) resolvedConverter = 'boolean';\n else if (resolvedConverter === String) resolvedConverter = 'string';\n else if (resolvedConverter === BigInt) resolvedConverter = 'bigint';\n else if (resolvedConverter === Symbol) resolvedConverter = 'symbol';\n\n // Check if it's an ArrayConverter object\n if (Validator.isArrayConverter(resolvedConverter)) {\n // Validate the ArrayConverter configuration at runtime\n Validator.arrayConverter(resolvedConverter);\n\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n return BuiltInConverters.processArrayConverter(parsed, fallback, resolvedConverter) as FallbackType;\n }\n\n // Check if it's a built-in converter\n if (Validator.isBuiltInConverter(resolvedConverter as EnvaptConverter<unknown>)) {\n // Validate the built-in converter at runtime\n Validator.builtInConverter(resolvedConverter);\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n return result as FallbackType;\n }\n\n Validator.customConvertor(resolvedConverter);\n\n // Custom converter function\n const raw = this.envService.get(key, undefined);\n\n // If no fallback provided and no value found, return null\n // If explicit undefined fallback and no value found, return undefined\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (raw === undefined) return hasFallback ? fallback : null;\n\n return resolvedConverter(raw, fallback);\n }\n\n private resolveConverter<FallbackType>(\n converter: EnvaptConverter<FallbackType> | undefined,\n fallback: FallbackType | undefined\n ): EnvaptConverter<FallbackType> {\n // User provided explicit converter. Use it\n if (converter) return converter;\n\n // Auto-detect type from fallback using typeof\n const fallbackType = typeof fallback;\n if (fallbackType === 'number') return 'number';\n if (fallbackType === 'boolean') return 'boolean';\n if (fallbackType === 'bigint') return 'bigint';\n if (fallbackType === 'symbol') return 'symbol';\n return 'string';\n }\n}\n","import { config } from 'dotenv';\n\nimport { BuiltInConverters } from './BuiltInConverters';\nimport { Parser, type EnvapterService } from './Parser';\n\n/**\n * Internal cache for environment variables and computed values\n * @internal\n */\nexport const EnvaptCache = new Map<string, unknown>();\n\n/**\n * @internal\n */\nenum Primitive {\n String,\n Number,\n Boolean,\n BigInt,\n Symbol\n}\n\n/**\n * Environment types supported by Envapter\n * @public\n */\nexport enum Environment {\n Development,\n Staging,\n Production\n}\n\n/**\n * Main configuration class for environment variable management.\n *\n * Provides both static and instance methods for retrieving typed environment variables\n * with support for template resolution, multiple .env files, and environment detection.\n *\n * Extend your own classes from this to define properties with \\@Envapt decorators and provide access to environment variables methods.\n *\n * @example\n * ```ts\n * // Static usage\n * const port = Envapter.getNumber('PORT', 3000);\n * const url = Envapter.get('API_URL', 'http://localhost');\n *\n * // Instance usage\n * const env = new Envapter();\n * const dbUrl = env.get('DATABASE_URL', 'sqlite://memory');\n * ```\n *\n * @public\n */\nexport class Envapter implements EnvapterService {\n private static readonly parser = new Parser(new Envapter());\n private static _envPaths: string[] = ['.env']; // default path\n\n // Environment handling\n private static internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n\n /**\n * Set custom .env file paths. Accepts either a single path or array of paths.\n * Setting new paths clears the cache and reloads environment variables.\n *\n * @param paths - Single file path or array of file paths to load\n *\n * @example\n * ```ts\n * // Single file\n * Envapter.envPaths = '.env.production';\n *\n * // Multiple files (loaded in order)\n * Envapter.envPaths = ['.env', '.env.local', '.env.production'];\n * ```\n */\n static set envPaths(paths: string[] | string) {\n this._envPaths = Array.isArray(paths) ? paths : [paths];\n\n // clear cache to force reload with new path\n EnvaptCache.clear();\n void this.config;\n\n // reset internal environment to force re-evaluation\n this.internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n }\n\n /**\n * Get currently configured .env file paths\n * @returns Array of file paths being loaded\n */\n static get envPaths(): string[] {\n return this._envPaths;\n }\n\n private static determineEnvironment(env: string | Environment): Environment {\n if (typeof env === 'string') {\n switch (env.toLowerCase()) {\n case 'production':\n return Environment.Production;\n case 'staging':\n return Environment.Staging;\n default:\n return Environment.Development;\n }\n }\n\n return env;\n }\n\n /**\n * Set the application environment. Accepts either Environment enum or string value.\n *\n * @param env - Environment value ('development', 'staging', 'production') or Environment enum\n *\n * @example\n * ```ts\n * Envapter.environment = Environment.Production;\n * Envapter.environment = 'staging';\n * ```\n */\n static set environment(env: string | Environment) {\n this.internalEnvironment = this.determineEnvironment(env);\n }\n\n /**\n * Get the current application environment\n * @returns Current environment enum value\n */\n static get environment(): Environment {\n return this.internalEnvironment;\n }\n\n /**\n * Check if the current environment is production\n * @returns true if environment is production\n */\n static get isProduction(): boolean {\n return this.internalEnvironment === Environment.Production;\n }\n\n /**\n * Check if the current environment is staging\n * @returns true if environment is staging\n */\n static get isStaging(): boolean {\n return this.internalEnvironment === Environment.Staging;\n }\n\n /**\n * Check if the current environment is development\n * @returns true if environment is development\n */\n static get isDevelopment(): boolean {\n return this.internalEnvironment === Environment.Development;\n }\n\n private static get config(): Map<string, unknown> {\n if (EnvaptCache.size === 0) {\n // create isolated environment object to avoid mutating process.env\n const isolatedEnv: Record<string, string> = { ...(process.env as Record<string, string>) };\n\n try {\n // load _envPath file from custom path into isolated environment object\n config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });\n } catch {\n // do nothing\n }\n // populate the Map with global environment variables\n for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);\n }\n\n return EnvaptCache;\n }\n\n private static _get(key: string, type: Primitive = Primitive.String, def?: unknown): unknown {\n const rawVal = this.config.get(key) as string | number | boolean;\n if (!rawVal) return def;\n\n const parsed = this.parser.resolveTemplate(key, String(rawVal));\n\n switch (type) {\n case Primitive.String: {\n return BuiltInConverters.string(parsed, def as string);\n }\n\n case Primitive.Number: {\n return BuiltInConverters.number(parsed, def as number);\n }\n\n case Primitive.Boolean: {\n return BuiltInConverters.boolean(parsed, def as boolean);\n }\n\n case Primitive.BigInt: {\n return BuiltInConverters.bigint(parsed, def as bigint);\n }\n\n case Primitive.Symbol: {\n return BuiltInConverters.symbol(parsed, def as symbol);\n }\n\n default: {\n return BuiltInConverters.string(parsed, def as string);\n }\n }\n }\n\n /**\n * Get a string environment variable with optional fallback.\n * Supports template variable resolution using ${VAR} syntax.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value or default\n *\n * @example\n * ```ts\n * const apiUrl = Envapter.get('API_URL', 'http://localhost:3000');\n * ```\n */\n static get(key: string, def?: string): string {\n return this._get(key, Primitive.String, def) as string;\n }\n\n /**\n * Get a number environment variable with optional fallback.\n * Automatically converts string values to numbers.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as number or default\n *\n * @example\n * ```ts\n * const port = Envapter.getNumber('PORT', 3000);\n * ```\n */\n static getNumber(key: string, def?: number): number {\n return this._get(key, Primitive.Number, def) as number;\n }\n\n /**\n * Get a boolean environment variable with optional fallback.\n * Recognizes: `1`, `yes`, `true` as **true**; `0`, `no`, `false` as **false** (case-insensitive).\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as boolean or default\n *\n * @example\n * ```ts\n * const isProduction = Envapter.getBoolean('IS_PRODUCTION', false);\n * ```\n */\n static getBoolean(key: string, def?: boolean): boolean {\n return this._get(key, Primitive.Boolean, def) as boolean;\n }\n\n /**\n * Get a bigint environment variable with optional fallback.\n * Automatically converts string values to bigint.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as bigint or default\n *\n * @example\n * ```ts\n * const largeNumber = Envapter.getBigInt('LARGE_NUMBER', 123456789012345678901234567890n);\n * ```\n */\n static getBigInt(key: string, def?: bigint): bigint {\n return this._get(key, Primitive.BigInt, def) as bigint;\n }\n\n /**\n * Get a symbol environment variable with optional fallback.\n * Creates a symbol from the string value.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value as symbol or default\n *\n * @example\n * ```ts\n * const uniqueKey = Envapter.getSymbol('UNIQUE_KEY', Symbol('default'));\n * ```\n */\n static getSymbol(key: string, def?: symbol): symbol {\n return this._get(key, Primitive.Symbol, def) as symbol;\n }\n\n get(key: string, def?: string): string {\n return Envapter._get(key, Primitive.String, def) as string;\n }\n\n getNumber(key: string, def?: number): number {\n return Envapter._get(key, Primitive.Number, def) as number;\n }\n\n getBoolean(key: string, def?: boolean): boolean {\n return Envapter._get(key, Primitive.Boolean, def) as boolean;\n }\n\n getBigInt(key: string, def?: bigint): bigint {\n return Envapter._get(key, Primitive.BigInt, def) as bigint;\n }\n\n getSymbol(key: string, def?: symbol): symbol {\n return Envapter._get(key, Primitive.Symbol, def) as symbol;\n }\n\n /**\n * Get raw environment variable value without parsing or conversion.\n *\n * @internal\n */\n getRaw(key: string): string | undefined {\n return Envapter.config.get(key) as string | undefined;\n }\n}\n","/* eslint-disable security/detect-bidi-characters */\nimport { Envapter, EnvaptCache } from './Envapter';\nimport { Parser } from './Parser';\n\nimport type { EnvaptConverter, EnvaptOptions } from './Types';\n\nfunction createPropertyDecorator<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n): PropertyDecorator {\n return function (target: object, prop: string | symbol): void {\n const propKey = String(prop);\n const cacheKey = `${target.constructor.name}.${propKey}`;\n\n // Create a property with a getter that handles environment changes\n Object.defineProperty(target, propKey, {\n get: function () {\n // Check if the environment cache has been cleared (indicating config change)\n // If so, we need to re-evaluate our cached value\n let value = EnvaptCache.get(cacheKey) as FallbackType | null | undefined;\n\n // Re-evaluate if we don't have a cached value\n if (value === undefined) {\n const parser = new Parser(new Envapter());\n value = parser.convertValue(key, fallback, converter, hasFallback);\n EnvaptCache.set(cacheKey, value);\n }\n\n return value;\n },\n configurable: false,\n enumerable: true\n });\n };\n}\n\n/**\n * Instance/Static Property decorator that automatically loads and converts environment variables.\n *\n * Supports both modern options-based API and classic parameter-based API.\n * Automatically detects types from fallback values and provides caching for performance.\n *\n * Note: Using \\@Envapt on a variable for an env that doesn't exist will set the value to `null` if no fallback is provided, regardless of a converter being used.\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options (modern API)\n *\n * @example Modern API (recommended):\n * ```ts\n * class Config extends Envapter {\n * \\@Envapt('PORT', { fallback: 3000 })\n * static readonly port: number;\n *\n * \\@Envapt('FEATURES', { fallback: ['auth'], converter: 'array' })\n * declare private readonly features: string[];\n *\n * \\@Envapt('CONFIG', { converter: 'json' })\n * static readonly config: object;\n *\n * \\@Envapt('API_URL', { converter: 'url' })\n * declare public readonly apiUrl: URL;\n *\n * \\@Envapt('CUSTOM_LIST', {\n * fallback: [1, 2, 3],\n * converter: {\n * delimiter: ',',\n * type: 'number' // Convert each item to number\n * }\n * })\n * static readonly customList: string[];\n * }\n * ```\n *\n * @param key - Environment variable name to load\n * @param fallback - Default value if variable is not found. Only suppoerts primitive types (string, number, boolean, bigint, symbol).\n * @param converter - Custom converter function or built-in converter\n *\n * @example Classic API\n * ```ts\n * class HealthCheck {\n * \\@Envapt('PORT', 3000) declare readonly port: number;\n *\n * // code to start server\n * public start() {\n * // works on instance properties\n * console.log(`Server running on port ${this.port}`);\n * }\n * }\n * ```\n *\n * @public\n */\nexport function Envapt<FallbackType = unknown>(key: string, options?: EnvaptOptions<FallbackType>): PropertyDecorator;\nexport function Envapt<FallbackType = string | number | boolean | bigint | symbol>(\n key: string,\n fallback?: FallbackType,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator;\nexport function Envapt<FallbackType = unknown>(\n key: string,\n fallbackOrOptions?: FallbackType | EnvaptOptions<FallbackType>,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator {\n // Determine if using new options API or classic API\n let fallback: FallbackType | undefined;\n let actualConverter: EnvaptConverter<FallbackType> | undefined;\n let hasFallback = true;\n\n if (\n fallbackOrOptions &&\n typeof fallbackOrOptions === 'object' &&\n ('fallback' in fallbackOrOptions || 'converter' in fallbackOrOptions)\n ) {\n // Modern API\n const options = fallbackOrOptions;\n fallback = options.fallback;\n actualConverter = options.converter;\n hasFallback = 'fallback' in options;\n } else {\n // Classic API\n fallback = fallbackOrOptions as FallbackType;\n actualConverter = converter;\n hasFallback = arguments.length > 1;\n }\n\n return createPropertyDecorator(key, fallback, actualConverter, hasFallback);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Error.ts","../src/ListOfBuiltInConverters.ts","../src/Validators.ts","../src/BuiltInConverters.ts","../src/Parser.ts","../src/Envapter.ts","../src/Envapt.ts"],"names":["parsed","config","Environment"],"mappings":";;;;;;AAAO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,eAAA,EAAiB,MAAA;AAAA,EACjB,gBAAA,EAAkB,MAAA;AAAA,EAClB,yBAAA,EAA2B,MAAA;AAAA,EAC3B,uBAAA,EAAyB,MAAA;AAAA,EACzB,oBAAA,EAAsB,MAAA;AAAA,EACtB,sBAAA,EAAwB;AAC1B,CAAA;AAIA,IAAM,2BAA2B,MAAA,CAAO,WAAA;AAAA,EACtC,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,KAAA,EAAO,GAAG,CAAC;AACrE,CAAA;AAUO,IAAM,WAAA,GAAN,MAAM,YAAA,SAAoB,KAAA,CAAM;AAAA,EAvBvC;AAuBuC,IAAA,MAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAAA;AAAA,EACrB,IAAA;AAAA,EAEhB,WAAA,CAAY,MAAuB,OAAA,EAAiB;AAClD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,OAAO,CAAA,EAAG,wBAAA,CAAyB,IAAI,CAAC,KAAK,IAAI,CAAA,CAAA,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,YAAW,CAAA;AAAA,EAC3C;AACF,CAAA;;;AC7BO,IAAM,uBAAA,GAA0B;AAAA,EACrC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;;;ACNO,IAAM,YAAN,MAAgB;AAAA,EAZvB;AAYuB,IAAA,MAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrB,OAAO,mBAAmB,KAAA,EAA4D;AACpF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,uBAAA,CAAwB,SAAS,KAAK,CAAA;AAC5E,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,KAAA,EAAyC;AAC/D,IAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,WAAA,IAAe,KAAA,IACf,OAAQ,KAAA,CAAyB,SAAA,KAAc,QAAA;AAAA,EAEnD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAA0B,KAAA,EAAyD;AACxF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAEtC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AAE/C,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACzC,IAAA,MAAM,aAA+C,uBAAA,CAAwB,MAAA;AAAA,MAC3E,CAAC,IAAA,KAAiD,CAAC,YAAA,CAAa,SAAS,IAAI;AAAA,KAC/E;AAEA,IAAA,OAAO,UAAA,CAAW,SAAS,KAAuC,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,yBACL,SAAA,EAI4C;AAC5C,IAAA,OAAO,OAAO,SAAA,KAAc,UAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,gBACL,SAAA,EACsD;AACtD,IAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACnC,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,sBAAA;AAAA,QACjB,CAAA,yCAAA,EAA4C,OAAO,SAAS,CAAA,CAAA;AAAA,OAC9D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAe,KAAA,EAAiD;AACrE,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,gBAAA,EAAkB,8BAA8B,CAAA;AAAA,IACzF;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,IAAa,CAAC,KAAK,yBAAA,CAA0B,KAAA,CAAM,IAAI,CAAA,EAAG;AAC3E,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,yBAAA;AAAA,QACjB,CAAA,CAAA,EAAI,MAAM,IAAc,CAAA,+BAAA;AAAA,OAC1B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,KAAA,EAAmD;AACzE,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,sBAAsB,CAAA,qBAAA,EAAwB,OAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IACrG;AAEA,IAAA,IAAI,CAAC,uBAAA,CAAwB,QAAA,CAAS,KAAyB,CAAA,EAAG;AAChE,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,uBAAA;AAAA,QACjB,IAAI,KAAK,CAAA,kDAAA,EAAqD,uBAAA,CAAwB,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,OACjG;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;AC7FO,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EAV/B;AAU+B,IAAA,MAAA,CAAA,IAAA,EAAA,mBAAA,CAAA;AAAA;AAAA,EAC7B,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,OAAO,GAAA,IAAO,QAAA;AAAA,EAChB;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,OAAO,GAAG,CAAA;AACzB,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAA,CAAQ,GAAA,EAAyB,QAAA,EAAyC;AAC/E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,EAAY,CAAE,IAAA,EAAK;AAErC,IAAA,MAAM,YAAA,GAAe,CAAC,GAAA,EAAK,KAAA,EAAO,QAAQ,IAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAK,IAAA,EAAM,SAAS,KAAK,CAAA;AAE9C,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,IAAA;AACzC,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACxC,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAG,CAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,OAAO,GAAA,GAAM,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,OAAA,CAAQ,GAAA,EAAyB,QAAA,EAAuC;AAC7E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,KAAA,CAAM,GAAA,EAAyB,QAAA,EAAuC;AAC3E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,IAAA,CAA2B,GAAA,EAAyB,QAAA,EAA+C;AACxG,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,KAAA,CAAM,GAAA,EAAyB,QAAA,EAAqB,YAAY,GAAA,EAA2B;AAChG,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,EAAA,SAAW,EAAC;AAC/B,IAAA,OAAO,IACJ,KAAA,CAAM,SAAS,CAAA,CACf,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EACrC;AAAA,EAEA,OAAO,GAAA,CAAI,GAAA,EAAyB,QAAA,EAAiC;AACnE,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,IAAI,GAAG,CAAA;AAAA,IACpB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,MAAA,CAAO,GAAA,EAAyB,QAAA,EAAuC;AAC5E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAC9B,IAAA,IAAI;AAEF,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,wBAAwB,CAAA;AAChD,MAAA,IAAI,KAAA,SAAc,IAAI,MAAA,CAAO,MAAM,CAAC,CAAA,EAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAEzD,MAAA,OAAO,IAAI,OAAO,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO,IAAA,CAAK,GAAA,EAAyB,QAAA,EAAmC;AACtE,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAG9B,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG;AACrB,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAClC,MAAA,MAAMA,OAAAA,GAAS,IAAI,IAAA,CAAK,SAAS,CAAA;AACjC,MAAA,OAAO,OAAO,KAAA,CAAMA,OAAAA,CAAO,OAAA,EAAS,IAAI,QAAA,GAAWA,OAAAA;AAAA,IACrD;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,GAAG,CAAA;AAC3B,IAAA,OAAO,OAAO,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,IAAI,QAAA,GAAW,MAAA;AAAA,EACrD;AAAA,EAEA,OAAO,IAAA,CAAK,GAAA,EAAyB,QAAA,EAAuC;AAC1E,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,QAAA;AAI9B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,+BAA+B,CAAA;AACvD,IAAA,IAAI,CAAC,OAAO,OAAO,QAAA;AAEnB,IAAA,MAAM,GAAG,MAAA,EAAQ,IAAA,GAAO,IAAI,CAAA,GAAI,KAAA;AAChC,IAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AAEpB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAEtC,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG,OAAO,QAAA;AAEhC,IAAA,MAAM,aAAA,GAAgB,GAAA;AACtB,IAAA,MAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAA,MAAM,gBAAA,GAAmB,EAAA;AACzB,IAAA,MAAM,gBAAgB,kBAAA,GAAqB,aAAA;AAC3C,IAAA,MAAM,cAAc,gBAAA,GAAmB,aAAA;AAEvC,IAAA,IAAI,IAAA,KAAS,MAAM,OAAO,KAAA;AAC1B,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,GAAQ,aAAA;AACjC,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,GAAQ,aAAA;AACjC,IAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,KAAA,GAAQ,WAAA;AACjC,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,qBAAA,CACL,GAAA,EACA,QAAA,EACAC,OAAAA,EACuB;AACvB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG,OAAO,QAAA;AACpC,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,gBAAA,CAAiB,eAAA;AAAA,QACjB,CAAA,2DAAA,EAA8D,OAAO,QAAQ,CAAA;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,EAAA,SAAW,EAAC;AAE/B,IAAA,MAAM,QAAQ,GAAA,CACX,KAAA,CAAMA,OAAAA,CAAO,SAAS,EACtB,GAAA,CAAI,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,EAAM,CAAA,CACjC,OAAO,OAAO,CAAA;AAGjB,IAAA,IAAI,CAACA,OAAAA,CAAO,IAAA,EAAM,OAAO,KAAA;AAGzB,IAAA,MAAM,SAAA,GAAY,kBAAA,CAAkB,YAAA,CAAaA,OAAAA,CAAO,IAAI,CAAA;AAC5D,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,IAAA,EAAM,MAAS,CAAA;AAC3C,MAAA,OAAO,SAAA,IAAa,IAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aACL,IAAA,EAI4C;AAC5C,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,SAAS,kBAAA,CAAkB,OAAA;AAAA,MAC3B,SAAS,kBAAA,CAAkB,OAAA;AAAA,MAC3B,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,OAAO,kBAAA,CAAkB,KAAA;AAAA,MACzB,MAAM,kBAAA,CAAkB,IAAA;AAAA,MACxB,OAAO,kBAAA,CAAkB,KAAA;AAAA,MACzB,KAAK,kBAAA,CAAkB,GAAA;AAAA,MACvB,QAAQ,kBAAA,CAAkB,MAAA;AAAA,MAC1B,MAAM,kBAAA,CAAkB,IAAA;AAAA,MACxB,MAAM,kBAAA,CAAkB;AAAA,KAC1B;AAEA,IAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAEjC,IAAA,IAAI,CAAC,SAAA,CAAU,wBAAA,CAAyB,SAAS,CAAA,EAAG;AAClD,MAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,uBAAA,EAAyB,CAAA,4BAAA,EAA+B,IAAc,CAAA,CAAE,CAAA;AAAA,IACjH;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;;;AC7LO,IAAM,SAAN,MAAa;AAAA,EAGlB,YAA6B,UAAA,EAA6B;AAA7B,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAA8B;AAAA,EAtB7D;AAmBoB,IAAA,MAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AAAA,EACD,cAAA,GAAiB,UAAA;AAAA,EAIlC,gBAAgB,GAAA,EAAa,KAAA,EAAe,KAAA,mBAAQ,IAAI,KAAY,EAAW;AAC7E,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,KAAA;AAE3B,IAAA,KAAA,CAAM,IAAI,GAAG,CAAA;AAEb,IAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,CAAC,QAAA,KAAa;AAC3D,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACrC,MAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AAEtB,MAAA,IAAI,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,QAAA;AAEhC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA;AAC3C,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,EAAA,EAAI,OAAO,QAAA;AAE/B,MAAA,MAAM,QAAA,GAAW,KAAK,eAAA,CAAgB,QAAA,EAAU,KAAK,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAGnE,MAAA,IAAI,SAAS,QAAA,CAAS,CAAA,GAAA,EAAM,GAAG,CAAA,CAAA,CAAG,GAAG,OAAO,QAAA;AAG5C,MAAA,IAAI,aAAa,GAAA,IAAO,aAAA,CAAc,IAAA,CAAK,QAAQ,GAAG,OAAO,QAAA;AAE7D,MAAA,OAAO,QAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,YAAA,CACE,GAAA,EACA,QAAA,EACA,SAAA,EACA,cAAc,IAAA,EACmB;AAEjC,IAAA,IAAI,iBAAA,GAAoB,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,QAAQ,CAAA;AAEjE,IAAA,IAAI,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAAA,SAAA,IAC7C,iBAAA,KAAsB,SAAS,iBAAA,GAAoB,SAAA;AAAA,SAAA,IACnD,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAAA,SAAA,IAClD,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAAA,SAAA,IAClD,iBAAA,KAAsB,QAAQ,iBAAA,GAAoB,QAAA;AAG3D,IAAA,IAAI,SAAA,CAAU,gBAAA,CAAiB,iBAAiB,CAAA,EAAG;AAEjD,MAAA,SAAA,CAAU,eAAe,iBAAiB,CAAA;AAE1C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,MAAS,CAAA;AAEjD,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,WAAA,GAAc,QAAA,GAAW,IAAA;AAE1D,MAAA,OAAO,iBAAA,CAAkB,qBAAA,CAAsB,MAAA,EAAQ,QAAA,EAAU,iBAAiB,CAAA;AAAA,IACpF;AAGA,IAAA,IAAI,SAAA,CAAU,kBAAA,CAAmB,iBAA6C,CAAA,EAAG;AAE/E,MAAA,SAAA,CAAU,iBAAiB,iBAAiB,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,MAAS,CAAA;AAEjD,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,WAAA,GAAc,QAAA,GAAW,IAAA;AAE1D,MAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,YAAA,CAAa,iBAAiB,CAAA;AACpE,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,QAAQ,CAAA;AAC3C,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,SAAA,CAAU,gBAAgB,iBAAiB,CAAA;AAG3C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,MAAS,CAAA;AAK9C,IAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,OAAO,WAAA,GAAc,QAAA,GAAW,IAAA;AAEvD,IAAA,OAAO,iBAAA,CAAkB,KAAK,QAAQ,CAAA;AAAA,EACxC;AAAA,EAEQ,gBAAA,CACN,WACA,QAAA,EAC+B;AAE/B,IAAA,IAAI,WAAW,OAAO,SAAA;AAGtB,IAAA,MAAM,eAAe,OAAO,QAAA;AAC5B,IAAA,IAAI,YAAA,KAAiB,UAAU,OAAO,QAAA;AACtC,IAAA,IAAI,YAAA,KAAiB,WAAW,OAAO,SAAA;AACvC,IAAA,IAAI,YAAA,KAAiB,UAAU,OAAO,QAAA;AACtC,IAAA,IAAI,YAAA,KAAiB,UAAU,OAAO,QAAA;AACtC,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;;;AChHO,IAAM,WAAA,uBAAkB,GAAA,EAAqB;AAiB7C,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACL,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AAHU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA2BL,IAAM,QAAA,GAAN,MAAM,SAAA,CAAoC;AAAA,EArDjD;AAqDiD,IAAA,MAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AAAA;AAAA,EAC/C,OAAwB,MAAA,GAAS,IAAI,MAAA,CAAO,IAAI,WAAU,CAAA;AAAA,EAC1D,OAAe,SAAA,GAAsB,CAAC,MAAM,CAAA;AAAA;AAAA;AAAA,EAG5C,OAAe,sBAAsB,IAAA,CAAK,oBAAA;AAAA,IACxC,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,aAAa,CAAC,CAAC;AAAA,GAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,WAAW,SAAS,KAAA,EAA0B;AAC5C,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAGtD,IAAA,WAAA,CAAY,KAAA,EAAM;AAClB,IAAA,KAAK,IAAA,CAAK,MAAA;AAGV,IAAA,IAAA,CAAK,sBAAsB,IAAA,CAAK,oBAAA;AAAA,MAC9B,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,aAAa,CAAC,CAAC;AAAA,KAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,QAAA,GAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,OAAe,qBAAqB,GAAA,EAAwC;AAC1E,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,QAAQ,GAAA,CAAI,aAAY;AAAG,QACzB,KAAK,YAAA;AACH,UAAA,OAAO,CAAA;AAAA,QACT,KAAK,SAAA;AACH,UAAA,OAAO,CAAA;AAAA,QACT;AACE,UAAA,OAAO,CAAA;AAAA;AACX,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW,YAAY,GAAA,EAA2B;AAChD,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,oBAAA,CAAqB,GAAG,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,WAAA,GAA2B;AACpC,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,YAAA,GAAwB;AACjC,IAAA,OAAO,KAAK,mBAAA,KAAwB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,SAAA,GAAqB;AAC9B,IAAA,OAAO,KAAK,mBAAA,KAAwB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,aAAA,GAAyB;AAClC,IAAA,OAAO,KAAK,mBAAA,KAAwB,CAAA;AAAA,EACtC;AAAA,EAEA,WAAmB,MAAA,GAA+B;AAChD,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAE1B,MAAA,MAAM,WAAA,GAAsC,EAAE,GAAI,OAAA,CAAQ,GAAA,EAA+B;AAEzF,MAAA,IAAI;AAEF,QAAA,MAAA,CAAO,EAAE,MAAM,IAAA,CAAK,SAAA,EAAW,OAAO,IAAA,EAAM,UAAA,EAAY,aAAa,CAAA;AAAA,MACvE,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IACpF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,OAAe,IAAA,CAAK,GAAA,EAAa,IAAA,GAAkB,gBAAkB,GAAA,EAAwB;AAC3F,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,CAAC,QAAQ,OAAO,GAAA;AAEpB,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,CAAO,gBAAgB,GAAA,EAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAE9D,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,KAAK,CAAA,gBAAmB;AACtB,QAAA,OAAO,iBAAA,CAAkB,OAAA,CAAQ,MAAA,EAAQ,GAAc,CAAA;AAAA,MACzD;AAAA,MAEA,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,KAAK,CAAA,eAAkB;AACrB,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA,MAEA,SAAS;AACP,QAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,GAAa,CAAA;AAAA,MACvD;AAAA;AACF,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,GAAA,CAAI,GAAA,EAAa,GAAA,EAAsB;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,SAAA,CAAU,GAAA,EAAa,GAAA,EAAsB;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,UAAA,CAAW,GAAA,EAAa,GAAA,EAAwB;AACrD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,gBAAmB,GAAG,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,SAAA,CAAU,GAAA,EAAa,GAAA,EAAsB;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,SAAA,CAAU,GAAA,EAAa,GAAA,EAAsB;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EAC7C;AAAA,EAEA,GAAA,CAAI,KAAa,GAAA,EAAsB;AACrC,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,UAAA,CAAW,KAAa,GAAA,EAAwB;AAC9C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,gBAAmB,GAAG,CAAA;AAAA,EAClD;AAAA,EAEA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,SAAA,CAAU,KAAa,GAAA,EAAsB;AAC3C,IAAA,OAAO,SAAA,CAAS,IAAA,CAAK,GAAA,EAAK,CAAA,eAAkB,GAAG,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAA,EAAiC;AACtC,IAAA,OAAO,SAAA,CAAS,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAAA,EAChC;AACF;;;AC9TA,SAAS,uBAAA,CACP,GAAA,EACA,QAAA,EACA,SAAA,EACA,cAAc,IAAA,EACK;AACnB,EAAA,OAAO,SAAU,QAAgB,IAAA,EAA6B;AAC5D,IAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAC3B,IAAA,MAAM,WAAW,CAAA,EAAG,MAAA,CAAO,WAAA,CAAY,IAAI,IAAI,OAAO,CAAA,CAAA;AAGtD,IAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,OAAA,EAAS;AAAA,MACrC,qBAAK,MAAA,CAAA,WAAY;AAGf,QAAA,IAAI,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAGpC,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,IAAI,UAAU,CAAA;AACxC,UAAA,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,GAAA,EAAK,QAAA,EAAU,WAAW,WAAW,CAAA;AACjE,UAAA,WAAA,CAAY,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,QACjC;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA,EAbK,KAAA,CAAA;AAAA,MAcL,YAAA,EAAc,KAAA;AAAA,MACd,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH,CAAA;AACF;AA9BS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AA8FF,SAAS,MAAA,CACd,GAAA,EACA,iBAAA,EACA,SAAA,EACmB;AAEnB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,WAAA,GAAc,IAAA;AAElB,EAAA,IACE,qBACA,OAAO,iBAAA,KAAsB,aAC5B,UAAA,IAAc,iBAAA,IAAqB,eAAe,iBAAA,CAAA,EACnD;AAEA,IAAA,MAAM,OAAA,GAAU,iBAAA;AAChB,IAAA,QAAA,GAAW,OAAA,CAAQ,QAAA;AACnB,IAAA,eAAA,GAAkB,OAAA,CAAQ,SAAA;AAC1B,IAAA,WAAA,GAAc,UAAA,IAAc,OAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,QAAA,GAAW,iBAAA;AACX,IAAA,eAAA,GAAkB,SAAA;AAClB,IAAA,WAAA,GAAc,UAAU,MAAA,GAAS,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,uBAAA,CAAwB,GAAA,EAAK,QAAA,EAAU,eAAA,EAAiB,WAAW,CAAA;AAC5E;AA5BgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA","file":"index.js","sourcesContent":["export const EnvaptErrorCodes = {\n InvalidFallback: 617404,\n MissingDelimiter: 967308,\n InvalidArrayConverterType: 193159,\n InvalidBuiltInConverter: 337271,\n InvalidConverterType: 453217,\n InvalidCustomConverter: 789432\n} as const;\n\nexport type EnvaptErrorCode = (typeof EnvaptErrorCodes)[keyof typeof EnvaptErrorCodes];\n\nconst ReversedEnvaptErrorCodes = Object.fromEntries(\n Object.entries(EnvaptErrorCodes).map(([key, value]) => [value, key])\n) as Record<EnvaptErrorCode, string>;\n\n/**\n * Custom error for better DX and debugging when using Envapt.\n *\n * @example\n * ```ts\n * throw new EnvaptError(EnvaptErrorCode.InvalidFallback, \"Invalid fallback value provided for environment variable.\");\n * ```\n */\nexport class EnvaptError extends Error {\n public readonly code: EnvaptErrorCode;\n\n constructor(code: EnvaptErrorCode, message: string) {\n super(message);\n this.name = `${ReversedEnvaptErrorCodes[code]} [${code}]`;\n this.code = code;\n\n Error.captureStackTrace(this, EnvaptError);\n }\n}\n","/**\n * List of built-in converters for Envapt.\n * @internal\n */\nexport const ListOfBuiltInConverters = [\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'symbol',\n 'integer',\n 'float',\n 'json',\n 'array',\n 'url',\n 'regexp',\n 'date',\n 'time'\n] as const;\n","import { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { ListOfBuiltInConverters } from './ListOfBuiltInConverters';\n\nimport type {\n EnvaptConverter,\n ConverterFunction,\n ArrayConverter,\n BuiltInConverter,\n ValidArrayConverterBuiltInType,\n BuiltInConverterReturnType\n} from './Types';\n\nexport class Validator {\n /**\n * Check if a value is a built-in converter type\n */\n static isBuiltInConverter(value: EnvaptConverter<unknown>): value is BuiltInConverter {\n if (typeof value === 'string') return ListOfBuiltInConverters.includes(value);\n return false;\n }\n\n /**\n * Check if a value is an ArrayConverter configuration object\n */\n static isArrayConverter(value: unknown): value is ArrayConverter {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'delimiter' in value &&\n typeof (value as ArrayConverter).delimiter === 'string'\n );\n }\n\n /**\n * Check if a value is a valid ArrayConverter type\n */\n static isValidArrayConverterType(value: unknown): value is ValidArrayConverterBuiltInType {\n if (typeof value !== 'string') return false;\n\n const invalidTypes = ['array', 'json', 'regexp'];\n\n if (invalidTypes.includes(value)) return false;\n const validTypes: ValidArrayConverterBuiltInType[] = ListOfBuiltInConverters.filter(\n (type): type is ValidArrayConverterBuiltInType => !invalidTypes.includes(type)\n );\n\n return validTypes.includes(value as ValidArrayConverterBuiltInType);\n }\n\n /**\n * Check if a value is a valid custom converter function\n */\n static isValidConverterFunction<FallbackType extends BuiltInConverter>(\n converter: unknown\n ): converter is (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n return typeof converter === 'function';\n }\n\n static customConvertor<FallbackType>(\n converter: EnvaptConverter<FallbackType>\n ): asserts converter is ConverterFunction<FallbackType> {\n if (typeof converter !== 'function') {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidCustomConverter,\n `Custom converter must be a function, got ${typeof converter}.`\n );\n }\n }\n\n /**\n * Validate ArrayConverter configuration with runtime checks\n */\n static arrayConverter(value: unknown): asserts value is ArrayConverter {\n if (!this.isArrayConverter(value)) {\n throw new EnvaptError(EnvaptErrorCodes.MissingDelimiter, 'Must have delimiter property');\n }\n\n if (value.type !== undefined && !this.isValidArrayConverterType(value.type)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidArrayConverterType,\n `\"${value.type as string}\" is not a valid converter type`\n );\n }\n }\n\n /**\n * Validate that a string is a valid built-in converter type\n */\n static builtInConverter(value: unknown): asserts value is BuiltInConverter {\n if (typeof value !== 'string') {\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Expected string, got ${typeof value}`);\n }\n\n if (!ListOfBuiltInConverters.includes(value as BuiltInConverter)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidBuiltInConverter,\n `\"${value}\" is not a valid converter type. Valid types are: ${ListOfBuiltInConverters.join(',')}`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { Validator } from './Validators';\n\nimport type { ArrayConverter, BuiltInConverter, BuiltInConverterReturnType } from './Types';\n\n/**\n * Built-in converter implementations\n * @internal\n */\nexport class BuiltInConverters {\n static string(raw: string | undefined, fallback?: string): string | undefined {\n return raw ?? fallback;\n }\n\n static number(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = Number(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static boolean(raw: string | undefined, fallback?: boolean): boolean | undefined {\n if (raw === undefined) return fallback;\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 | undefined, fallback?: bigint): bigint | undefined {\n if (raw === undefined) return fallback;\n try {\n return BigInt(raw);\n } catch {\n return fallback;\n }\n }\n\n static symbol(raw: string | undefined, fallback?: symbol): symbol | undefined {\n return raw ? Symbol(raw) : fallback;\n }\n\n static integer(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static json<ParsedJson = unknown>(raw: string | undefined, fallback?: ParsedJson): ParsedJson | undefined {\n if (raw === undefined) return fallback;\n try {\n return JSON.parse(raw) as ParsedJson;\n } catch {\n return fallback;\n }\n }\n\n static array(raw: string | undefined, fallback?: string[], delimiter = ','): string[] | undefined {\n if (raw === undefined) return fallback;\n if (raw.trim() === '') return [];\n return raw\n .split(delimiter)\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n }\n\n static url(raw: string | undefined, fallback?: URL): URL | undefined {\n if (raw === undefined) return fallback;\n try {\n return new URL(raw);\n } catch {\n return fallback;\n }\n }\n\n static regexp(raw: string | undefined, fallback?: RegExp): RegExp | undefined {\n if (raw === undefined) return fallback;\n try {\n // Handle flags if provided in format: /pattern/flags\n const match = raw.match(/^\\/(.+)\\/([gimsuvy]*)$/);\n if (match) return new RegExp(match[1] as string, match[2]);\n\n return new RegExp(raw);\n } catch {\n return fallback;\n }\n }\n\n static date(raw: string | undefined, fallback?: Date): Date | undefined {\n if (raw === undefined) return fallback;\n\n // Try parsing as timestamp first (if it's all digits)\n if (/^\\d+$/.test(raw)) {\n const timestamp = parseInt(raw, 10);\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n // Try parsing as regular date string\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n\n // Match formats like: 5s, 30m, 2h, 500ms, 1000 (plain number treated as ms)\n // eslint-disable-next-line security/detect-unsafe-regex\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (!match) return fallback;\n\n const [, numStr, unit = 'ms'] = match;\n if (!numStr) return fallback;\n\n const value = Number.parseFloat(numStr);\n\n if (Number.isNaN(value)) return fallback;\n\n const SECONDS_TO_MS = 1000;\n const SECONDS_PER_MINUTE = 60;\n const MINUTES_PER_HOUR = 60;\n const MINUTES_TO_MS = SECONDS_PER_MINUTE * SECONDS_TO_MS;\n const HOURS_TO_MS = MINUTES_PER_HOUR * MINUTES_TO_MS;\n\n if (unit === 'ms') return value;\n if (unit === 's') return value * SECONDS_TO_MS;\n if (unit === 'm') return value * MINUTES_TO_MS;\n if (unit === 'h') return value * HOURS_TO_MS;\n return fallback;\n }\n\n /**\n * Process array with custom converter config\n */\n static processArrayConverter(\n raw: string | undefined,\n fallback: unknown,\n config: ArrayConverter\n ): unknown[] | undefined {\n if (raw === undefined) {\n if (Array.isArray(fallback)) return fallback as unknown[];\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayConverter requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n if (raw.trim() === '') return [];\n\n const items = raw\n .split(config.delimiter)\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n // If no type specified, return as string array\n if (!config.type) return items;\n\n // Convert each item using the specified type\n const converter = BuiltInConverters.getConverter(config.type);\n return items.map((item) => {\n const converted = converter(item, undefined);\n return converted ?? item;\n });\n }\n\n /**\n * Get the converter function for a built-in converter type\n */\n static getConverter<FallbackType extends BuiltInConverter>(\n type: FallbackType\n ): (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n const converters = {\n string: BuiltInConverters.string,\n number: BuiltInConverters.number,\n boolean: BuiltInConverters.boolean,\n integer: BuiltInConverters.integer,\n bigint: BuiltInConverters.bigint,\n symbol: BuiltInConverters.symbol,\n float: BuiltInConverters.float,\n json: BuiltInConverters.json,\n array: BuiltInConverters.array,\n url: BuiltInConverters.url,\n regexp: BuiltInConverters.regexp,\n date: BuiltInConverters.date,\n time: BuiltInConverters.time\n } as const;\n\n const converter = converters[type];\n\n if (!Validator.isValidConverterFunction(converter)) {\n throw new EnvaptError(EnvaptErrorCodes.InvalidBuiltInConverter, `Unknown built-in converter: ${type as string}`);\n }\n\n return converter;\n }\n}\n","import { BuiltInConverters } from './BuiltInConverters';\nimport { Validator } from './Validators';\n\nimport type { EnvaptConverter } from './Types';\n\n/**\n * @internal\n */\nexport interface EnvapterService {\n getRaw(key: string): string | undefined;\n get(key: string, def?: string): string;\n getNumber(key: string, def?: number): number;\n getBoolean(key: string, def?: boolean): boolean;\n}\n\n/**\n * Parser class for handling environment variable template resolution and type conversion\n * @internal\n */\nexport class Parser {\n private readonly TEMPLATE_REGEX = /\\${\\w*}/g;\n\n constructor(private readonly envService: EnvapterService) {}\n\n resolveTemplate(key: string, value: string, stack = new Set<string>()): string {\n if (stack.has(key)) return value; // direct cycle, keep as is\n\n stack.add(key);\n\n const out = value.replace(this.TEMPLATE_REGEX, (template) => {\n const variable = template.slice(2, -1);\n if (!variable) return template; // empty name, preserve\n\n if (stack.has(variable)) return template; // cycle, preserve\n\n const raw = this.envService.getRaw(variable);\n if (!raw || raw === '') return template; // missing or empty, preserve\n\n const resolved = this.resolveTemplate(variable, raw, new Set(stack));\n\n // If resolution still references the current key, skip replacement (indirect cycle)\n if (resolved.includes(`\\${${key}}`)) return template;\n\n // If nothing changed (unresolved placeholders stayed), also preserve original template\n if (resolved === raw && /\\$\\{[^}]*\\}/.test(resolved)) return template;\n\n return resolved;\n });\n\n stack.delete(key);\n return out;\n }\n\n convertValue<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n ): FallbackType | null | undefined {\n // Determine which converter to use\n let resolvedConverter = this.resolveConverter(converter, fallback);\n\n if (resolvedConverter === Number) resolvedConverter = 'number';\n else if (resolvedConverter === Boolean) resolvedConverter = 'boolean';\n else if (resolvedConverter === String) resolvedConverter = 'string';\n else if (resolvedConverter === BigInt) resolvedConverter = 'bigint';\n else if (resolvedConverter === Symbol) resolvedConverter = 'symbol';\n\n // Check if it's an ArrayConverter object\n if (Validator.isArrayConverter(resolvedConverter)) {\n // Validate the ArrayConverter configuration at runtime\n Validator.arrayConverter(resolvedConverter);\n\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n return BuiltInConverters.processArrayConverter(parsed, fallback, resolvedConverter) as FallbackType;\n }\n\n // Check if it's a built-in converter\n if (Validator.isBuiltInConverter(resolvedConverter as EnvaptConverter<unknown>)) {\n // Validate the built-in converter at runtime\n Validator.builtInConverter(resolvedConverter);\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n return result as FallbackType;\n }\n\n Validator.customConvertor(resolvedConverter);\n\n // Custom converter function\n const raw = this.envService.get(key, undefined);\n\n // If no fallback provided and no value found, return null\n // If explicit undefined fallback and no value found, return undefined\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (raw === undefined) return hasFallback ? fallback : null;\n\n return resolvedConverter(raw, fallback);\n }\n\n private resolveConverter<FallbackType>(\n converter: EnvaptConverter<FallbackType> | undefined,\n fallback: FallbackType | undefined\n ): EnvaptConverter<FallbackType> {\n // User provided explicit converter. Use it\n if (converter) return converter;\n\n // Auto-detect type from fallback using typeof\n const fallbackType = typeof fallback;\n if (fallbackType === 'number') return 'number';\n if (fallbackType === 'boolean') return 'boolean';\n if (fallbackType === 'bigint') return 'bigint';\n if (fallbackType === 'symbol') return 'symbol';\n return 'string';\n }\n}\n","import { config } from 'dotenv';\n\nimport { BuiltInConverters } from './BuiltInConverters';\nimport { Parser, type EnvapterService } from './Parser';\n\n/**\n * Internal cache for environment variables and computed values\n * @internal\n */\nexport const EnvaptCache = new Map<string, unknown>();\n\n/**\n * @internal\n */\nenum Primitive {\n String,\n Number,\n Boolean,\n BigInt,\n Symbol\n}\n\n/**\n * Environment types supported by Envapter\n * @public\n */\nexport enum Environment {\n Development,\n Staging,\n Production\n}\n\n/**\n * Main configuration class for environment variable management.\n *\n * Provides both static and instance methods for retrieving typed environment variables\n * with support for template resolution, multiple .env files, and environment detection.\n *\n * Extend your own classes from this to define properties with \\@Envapt decorators and provide access to environment variables methods.\n *\n * @example\n * ```ts\n * // Static usage\n * const port = Envapter.getNumber('PORT', 3000);\n * const url = Envapter.get('API_URL', 'http://localhost');\n *\n * // Instance usage\n * const env = new Envapter();\n * const dbUrl = env.get('DATABASE_URL', 'sqlite://memory');\n * ```\n *\n * @public\n */\nexport class Envapter implements EnvapterService {\n private static readonly parser = new Parser(new Envapter());\n private static _envPaths: string[] = ['.env']; // default path\n\n // Environment handling\n private static internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n\n /**\n * Set custom .env file paths. Accepts either a single path or array of paths.\n * Setting new paths clears the cache and reloads environment variables.\n *\n * @param paths - Single file path or array of file paths to load\n *\n * @example\n * ```ts\n * // Single file\n * Envapter.envPaths = '.env.production';\n *\n * // Multiple files (loaded in order)\n * Envapter.envPaths = ['.env', '.env.local', '.env.production'];\n * ```\n */\n static set envPaths(paths: string[] | string) {\n this._envPaths = Array.isArray(paths) ? paths : [paths];\n\n // clear cache to force reload with new path\n EnvaptCache.clear();\n void this.config;\n\n // reset internal environment to force re-evaluation\n this.internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n }\n\n /**\n * Get currently configured .env file paths\n * @returns Array of file paths being loaded\n */\n static get envPaths(): string[] {\n return this._envPaths;\n }\n\n private static determineEnvironment(env: string | Environment): Environment {\n if (typeof env === 'string') {\n switch (env.toLowerCase()) {\n case 'production':\n return Environment.Production;\n case 'staging':\n return Environment.Staging;\n default:\n return Environment.Development;\n }\n }\n\n return env;\n }\n\n /**\n * Set the application environment. Accepts either Environment enum or string value.\n *\n * @param env - Environment value ('development', 'staging', 'production') or Environment enum\n *\n * @example\n * ```ts\n * Envapter.environment = Environment.Production;\n * Envapter.environment = 'staging';\n * ```\n */\n static set environment(env: string | Environment) {\n this.internalEnvironment = this.determineEnvironment(env);\n }\n\n /**\n * Get the current application environment\n * @returns Current environment enum value\n */\n static get environment(): Environment {\n return this.internalEnvironment;\n }\n\n /**\n * Check if the current environment is production\n * @returns true if environment is production\n */\n static get isProduction(): boolean {\n return this.internalEnvironment === Environment.Production;\n }\n\n /**\n * Check if the current environment is staging\n * @returns true if environment is staging\n */\n static get isStaging(): boolean {\n return this.internalEnvironment === Environment.Staging;\n }\n\n /**\n * Check if the current environment is development\n * @returns true if environment is development\n */\n static get isDevelopment(): boolean {\n return this.internalEnvironment === Environment.Development;\n }\n\n private static get config(): Map<string, unknown> {\n if (EnvaptCache.size === 0) {\n // create isolated environment object to avoid mutating process.env\n const isolatedEnv: Record<string, string> = { ...(process.env as Record<string, string>) };\n\n try {\n // load _envPath file from custom path into isolated environment object\n config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });\n } catch {\n // do nothing\n }\n // populate the Map with global environment variables\n for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);\n }\n\n return EnvaptCache;\n }\n\n private static _get(key: string, type: Primitive = Primitive.String, def?: unknown): unknown {\n const rawVal = this.config.get(key) as string | number | boolean;\n if (!rawVal) return def;\n\n const parsed = this.parser.resolveTemplate(key, String(rawVal));\n\n switch (type) {\n case Primitive.String: {\n return BuiltInConverters.string(parsed, def as string);\n }\n\n case Primitive.Number: {\n return BuiltInConverters.number(parsed, def as number);\n }\n\n case Primitive.Boolean: {\n return BuiltInConverters.boolean(parsed, def as boolean);\n }\n\n case Primitive.BigInt: {\n return BuiltInConverters.bigint(parsed, def as bigint);\n }\n\n case Primitive.Symbol: {\n return BuiltInConverters.symbol(parsed, def as symbol);\n }\n\n default: {\n return BuiltInConverters.string(parsed, def as string);\n }\n }\n }\n\n /**\n * Get a string environment variable with optional fallback.\n * Supports template variable resolution using ${VAR} syntax.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value or default\n *\n * @example\n * ```ts\n * const apiUrl = Envapter.get('API_URL', 'http://localhost:3000');\n * ```\n */\n static get(key: string, def?: string): string {\n return this._get(key, Primitive.String, def) as string;\n }\n\n /**\n * Get a number environment variable with optional fallback.\n * Automatically converts string values to numbers.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as number or default\n *\n * @example\n * ```ts\n * const port = Envapter.getNumber('PORT', 3000);\n * ```\n */\n static getNumber(key: string, def?: number): number {\n return this._get(key, Primitive.Number, def) as number;\n }\n\n /**\n * Get a boolean environment variable with optional fallback.\n * Recognizes: `1`, `yes`, `true` as **true**; `0`, `no`, `false` as **false** (case-insensitive).\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as boolean or default\n *\n * @example\n * ```ts\n * const isProduction = Envapter.getBoolean('IS_PRODUCTION', false);\n * ```\n */\n static getBoolean(key: string, def?: boolean): boolean {\n return this._get(key, Primitive.Boolean, def) as boolean;\n }\n\n /**\n * Get a bigint environment variable with optional fallback.\n * Automatically converts string values to bigint.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as bigint or default\n *\n * @example\n * ```ts\n * const largeNumber = Envapter.getBigInt('LARGE_NUMBER', 123456789012345678901234567890n);\n * ```\n */\n static getBigInt(key: string, def?: bigint): bigint {\n return this._get(key, Primitive.BigInt, def) as bigint;\n }\n\n /**\n * Get a symbol environment variable with optional fallback.\n * Creates a symbol from the string value.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value as symbol or default\n *\n * @example\n * ```ts\n * const uniqueKey = Envapter.getSymbol('UNIQUE_KEY', Symbol('default'));\n * ```\n */\n static getSymbol(key: string, def?: symbol): symbol {\n return this._get(key, Primitive.Symbol, def) as symbol;\n }\n\n get(key: string, def?: string): string {\n return Envapter._get(key, Primitive.String, def) as string;\n }\n\n getNumber(key: string, def?: number): number {\n return Envapter._get(key, Primitive.Number, def) as number;\n }\n\n getBoolean(key: string, def?: boolean): boolean {\n return Envapter._get(key, Primitive.Boolean, def) as boolean;\n }\n\n getBigInt(key: string, def?: bigint): bigint {\n return Envapter._get(key, Primitive.BigInt, def) as bigint;\n }\n\n getSymbol(key: string, def?: symbol): symbol {\n return Envapter._get(key, Primitive.Symbol, def) as symbol;\n }\n\n /**\n * Get raw environment variable value without parsing or conversion.\n *\n * @internal\n */\n getRaw(key: string): string | undefined {\n return Envapter.config.get(key) as string | undefined;\n }\n}\n","/* eslint-disable security/detect-bidi-characters */\nimport { Envapter, EnvaptCache } from './Envapter';\nimport { Parser } from './Parser';\n\nimport type { EnvaptConverter, EnvaptOptions } from './Types';\n\nfunction createPropertyDecorator<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n): PropertyDecorator {\n return function (target: object, prop: string | symbol): void {\n const propKey = String(prop);\n const cacheKey = `${target.constructor.name}.${propKey}`;\n\n // Create a property with a getter that handles environment changes\n Object.defineProperty(target, propKey, {\n get: function () {\n // Check if the environment cache has been cleared (indicating config change)\n // If so, we need to re-evaluate our cached value\n let value = EnvaptCache.get(cacheKey) as FallbackType | null | undefined;\n\n // Re-evaluate if we don't have a cached value\n if (value === undefined) {\n const parser = new Parser(new Envapter());\n value = parser.convertValue(key, fallback, converter, hasFallback);\n EnvaptCache.set(cacheKey, value);\n }\n\n return value;\n },\n configurable: false,\n enumerable: true\n });\n };\n}\n\n/**\n * Instance/Static Property decorator that automatically loads and converts environment variables.\n *\n * Supports both modern options-based API and classic parameter-based API.\n * Automatically detects types from fallback values and provides caching for performance.\n *\n * Note: Using \\@Envapt on a variable for an env that doesn't exist will set the value to `null` if no fallback is provided, regardless of a converter being used.\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options (modern API)\n *\n * @example Modern API (recommended):\n * ```ts\n * class Config extends Envapter {\n * \\@Envapt('PORT', { fallback: 3000 })\n * static readonly port: number;\n *\n * \\@Envapt('FEATURES', { fallback: ['auth'], converter: 'array' })\n * declare private readonly features: string[];\n *\n * \\@Envapt('CONFIG', { converter: 'json' })\n * static readonly config: object;\n *\n * \\@Envapt('API_URL', { converter: 'url' })\n * declare public readonly apiUrl: URL;\n *\n * \\@Envapt('CUSTOM_LIST', {\n * fallback: [1, 2, 3],\n * converter: {\n * delimiter: ',',\n * type: 'number' // Convert each item to number\n * }\n * })\n * static readonly customList: string[];\n * }\n * ```\n *\n * @param key - Environment variable name to load\n * @param fallback - Default value if variable is not found. Only suppoerts primitive types (string, number, boolean, bigint, symbol).\n * @param converter - Custom converter function or built-in converter\n *\n * @example Classic API\n * ```ts\n * class HealthCheck {\n * \\@Envapt('PORT', 3000) declare readonly port: number;\n *\n * // code to start server\n * public start() {\n * // works on instance properties\n * console.log(`Server running on port ${this.port}`);\n * }\n * }\n * ```\n *\n * @public\n */\nexport function Envapt<FallbackType = unknown>(key: string, options?: EnvaptOptions<FallbackType>): PropertyDecorator;\nexport function Envapt<FallbackType = string | number | boolean | bigint | symbol>(\n key: string,\n fallback?: FallbackType,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator;\nexport function Envapt<FallbackType = unknown>(\n key: string,\n fallbackOrOptions?: FallbackType | EnvaptOptions<FallbackType>,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator {\n // Determine if using new options API or classic API\n let fallback: FallbackType | undefined;\n let actualConverter: EnvaptConverter<FallbackType> | undefined;\n let hasFallback = true;\n\n if (\n fallbackOrOptions &&\n typeof fallbackOrOptions === 'object' &&\n ('fallback' in fallbackOrOptions || 'converter' in fallbackOrOptions)\n ) {\n // Modern API\n const options = fallbackOrOptions;\n fallback = options.fallback;\n actualConverter = options.converter;\n hasFallback = 'fallback' in options;\n } else {\n // Classic API\n fallback = fallbackOrOptions as FallbackType;\n actualConverter = converter;\n hasFallback = arguments.length > 1;\n }\n\n return createPropertyDecorator(key, fallback, actualConverter, hasFallback);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "envapt",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"description": "The apt way to handle env",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"require": {
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
|
-
"default": "./dist/index.
|
|
13
|
+
"default": "./dist/index.cjs"
|
|
14
14
|
},
|
|
15
15
|
"import": {
|
|
16
16
|
"types": "./dist/index.d.mts",
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Error.ts","../src/ListOfBuiltInConverters.ts","../src/Validators.ts","../src/BuiltInConverters.ts","../src/Parser.ts","../src/Envapter.ts","../src/Envapt.ts"],"names":["parsed","config","Environment"],"mappings":"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","file":"index.mjs","sourcesContent":["export const EnvaptErrorCodes = {\n InvalidFallback: 617404,\n MissingDelimiter: 967308,\n InvalidArrayConverterType: 193159,\n InvalidBuiltInConverter: 337271,\n InvalidConverterType: 453217,\n InvalidCustomConverter: 789432\n} as const;\n\nexport type EnvaptErrorCode = (typeof EnvaptErrorCodes)[keyof typeof EnvaptErrorCodes];\n\nconst ReversedEnvaptErrorCodes = Object.fromEntries(\n Object.entries(EnvaptErrorCodes).map(([key, value]) => [value, key])\n) as Record<EnvaptErrorCode, string>;\n\n/**\n * Custom error for better DX and debugging when using Envapt.\n *\n * @example\n * ```ts\n * throw new EnvaptError(EnvaptErrorCode.InvalidFallback, \"Invalid fallback value provided for environment variable.\");\n * ```\n */\nexport class EnvaptError extends Error {\n public readonly code: EnvaptErrorCode;\n\n constructor(code: EnvaptErrorCode, message: string) {\n super(message);\n this.name = `${ReversedEnvaptErrorCodes[code]} [${code}]`;\n this.code = code;\n\n Error.captureStackTrace(this, EnvaptError);\n }\n}\n","/**\n * List of built-in converters for Envapt.\n * @internal\n */\nexport const ListOfBuiltInConverters = [\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'symbol',\n 'integer',\n 'float',\n 'json',\n 'array',\n 'url',\n 'regexp',\n 'date',\n 'time'\n] as const;\n","import { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { ListOfBuiltInConverters } from './ListOfBuiltInConverters';\n\nimport type {\n EnvaptConverter,\n ConverterFunction,\n ArrayConverter,\n BuiltInConverter,\n ValidArrayConverterBuiltInType,\n BuiltInConverterReturnType\n} from './Types';\n\nexport class Validator {\n /**\n * Check if a value is a built-in converter type\n */\n static isBuiltInConverter(value: EnvaptConverter<unknown>): value is BuiltInConverter {\n if (typeof value === 'string') return ListOfBuiltInConverters.includes(value);\n return false;\n }\n\n /**\n * Check if a value is an ArrayConverter configuration object\n */\n static isArrayConverter(value: unknown): value is ArrayConverter {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'delimiter' in value &&\n typeof (value as ArrayConverter).delimiter === 'string'\n );\n }\n\n /**\n * Check if a value is a valid ArrayConverter type\n */\n static isValidArrayConverterType(value: unknown): value is ValidArrayConverterBuiltInType {\n if (typeof value !== 'string') return false;\n\n const invalidTypes = ['array', 'json', 'regexp'];\n\n if (invalidTypes.includes(value)) return false;\n const validTypes: ValidArrayConverterBuiltInType[] = ListOfBuiltInConverters.filter(\n (type): type is ValidArrayConverterBuiltInType => !invalidTypes.includes(type)\n );\n\n return validTypes.includes(value as ValidArrayConverterBuiltInType);\n }\n\n /**\n * Check if a value is a valid custom converter function\n */\n static isValidConverterFunction<FallbackType extends BuiltInConverter>(\n converter: unknown\n ): converter is (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n return typeof converter === 'function';\n }\n\n static customConvertor<FallbackType>(\n converter: EnvaptConverter<FallbackType>\n ): asserts converter is ConverterFunction<FallbackType> {\n if (typeof converter !== 'function') {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidCustomConverter,\n `Custom converter must be a function, got ${typeof converter}.`\n );\n }\n }\n\n /**\n * Validate ArrayConverter configuration with runtime checks\n */\n static arrayConverter(value: unknown): asserts value is ArrayConverter {\n if (!this.isArrayConverter(value)) {\n throw new EnvaptError(EnvaptErrorCodes.MissingDelimiter, 'Must have delimiter property');\n }\n\n if (value.type !== undefined && !this.isValidArrayConverterType(value.type)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidArrayConverterType,\n `\"${value.type as string}\" is not a valid converter type`\n );\n }\n }\n\n /**\n * Validate that a string is a valid built-in converter type\n */\n static builtInConverter(value: unknown): asserts value is BuiltInConverter {\n if (typeof value !== 'string') {\n throw new EnvaptError(EnvaptErrorCodes.InvalidConverterType, `Expected string, got ${typeof value}`);\n }\n\n if (!ListOfBuiltInConverters.includes(value as BuiltInConverter)) {\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidBuiltInConverter,\n `\"${value}\" is not a valid converter type. Valid types are: ${ListOfBuiltInConverters.join(',')}`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { EnvaptError, EnvaptErrorCodes } from './Error';\nimport { Validator } from './Validators';\n\nimport type { ArrayConverter, BuiltInConverter, BuiltInConverterReturnType } from './Types';\n\n/**\n * Built-in converter implementations\n * @internal\n */\nexport class BuiltInConverters {\n static string(raw: string | undefined, fallback?: string): string | undefined {\n return raw ?? fallback;\n }\n\n static number(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = Number(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static boolean(raw: string | undefined, fallback?: boolean): boolean | undefined {\n if (raw === undefined) return fallback;\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 | undefined, fallback?: bigint): bigint | undefined {\n if (raw === undefined) return fallback;\n try {\n return BigInt(raw);\n } catch {\n return fallback;\n }\n }\n\n static symbol(raw: string | undefined, fallback?: symbol): symbol | undefined {\n return raw ? Symbol(raw) : fallback;\n }\n\n static integer(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseInt(raw, 10);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static float(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n const parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n\n static json<ParsedJson = unknown>(raw: string | undefined, fallback?: ParsedJson): ParsedJson | undefined {\n if (raw === undefined) return fallback;\n try {\n return JSON.parse(raw) as ParsedJson;\n } catch {\n return fallback;\n }\n }\n\n static array(raw: string | undefined, fallback?: string[], delimiter = ','): string[] | undefined {\n if (raw === undefined) return fallback;\n if (raw.trim() === '') return [];\n return raw\n .split(delimiter)\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n }\n\n static url(raw: string | undefined, fallback?: URL): URL | undefined {\n if (raw === undefined) return fallback;\n try {\n return new URL(raw);\n } catch {\n return fallback;\n }\n }\n\n static regexp(raw: string | undefined, fallback?: RegExp): RegExp | undefined {\n if (raw === undefined) return fallback;\n try {\n // Handle flags if provided in format: /pattern/flags\n const match = raw.match(/^\\/(.+)\\/([gimsuvy]*)$/);\n if (match) return new RegExp(match[1] as string, match[2]);\n\n return new RegExp(raw);\n } catch {\n return fallback;\n }\n }\n\n static date(raw: string | undefined, fallback?: Date): Date | undefined {\n if (raw === undefined) return fallback;\n\n // Try parsing as timestamp first (if it's all digits)\n if (/^\\d+$/.test(raw)) {\n const timestamp = parseInt(raw, 10);\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n // Try parsing as regular date string\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? fallback : parsed;\n }\n\n static time(raw: string | undefined, fallback?: number): number | undefined {\n if (raw === undefined) return fallback;\n\n // Match formats like: 5s, 30m, 2h, 500ms, 1000 (plain number treated as ms)\n // eslint-disable-next-line security/detect-unsafe-regex\n const match = raw.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/u);\n if (!match) return fallback;\n\n const [, numStr, unit = 'ms'] = match;\n if (!numStr) return fallback;\n\n const value = Number.parseFloat(numStr);\n\n if (Number.isNaN(value)) return fallback;\n\n const SECONDS_TO_MS = 1000;\n const SECONDS_PER_MINUTE = 60;\n const MINUTES_PER_HOUR = 60;\n const MINUTES_TO_MS = SECONDS_PER_MINUTE * SECONDS_TO_MS;\n const HOURS_TO_MS = MINUTES_PER_HOUR * MINUTES_TO_MS;\n\n if (unit === 'ms') return value;\n if (unit === 's') return value * SECONDS_TO_MS;\n if (unit === 'm') return value * MINUTES_TO_MS;\n if (unit === 'h') return value * HOURS_TO_MS;\n return fallback;\n }\n\n /**\n * Process array with custom converter config\n */\n static processArrayConverter(\n raw: string | undefined,\n fallback: unknown,\n config: ArrayConverter\n ): unknown[] | undefined {\n if (raw === undefined) {\n if (Array.isArray(fallback)) return fallback as unknown[];\n throw new EnvaptError(\n EnvaptErrorCodes.InvalidFallback,\n `ArrayConverter requires that the fallback be an array, got ${typeof fallback}`\n );\n }\n\n if (raw.trim() === '') return [];\n\n const items = raw\n .split(config.delimiter)\n .map((item) => String(item).trim())\n .filter(Boolean);\n\n // If no type specified, return as string array\n if (!config.type) return items;\n\n // Convert each item using the specified type\n const converter = BuiltInConverters.getConverter(config.type);\n return items.map((item) => {\n const converted = converter(item, undefined);\n return converted ?? item;\n });\n }\n\n /**\n * Get the converter function for a built-in converter type\n */\n static getConverter<FallbackType extends BuiltInConverter>(\n type: FallbackType\n ): (\n raw: string | undefined,\n fallback?: BuiltInConverterReturnType[FallbackType]\n ) => BuiltInConverterReturnType[FallbackType] {\n const converters = {\n string: BuiltInConverters.string,\n number: BuiltInConverters.number,\n boolean: BuiltInConverters.boolean,\n integer: BuiltInConverters.integer,\n bigint: BuiltInConverters.bigint,\n symbol: BuiltInConverters.symbol,\n float: BuiltInConverters.float,\n json: BuiltInConverters.json,\n array: BuiltInConverters.array,\n url: BuiltInConverters.url,\n regexp: BuiltInConverters.regexp,\n date: BuiltInConverters.date,\n time: BuiltInConverters.time\n } as const;\n\n const converter = converters[type];\n\n if (!Validator.isValidConverterFunction(converter)) {\n throw new EnvaptError(EnvaptErrorCodes.InvalidBuiltInConverter, `Unknown built-in converter: ${type as string}`);\n }\n\n return converter;\n }\n}\n","import { BuiltInConverters } from './BuiltInConverters';\nimport { Validator } from './Validators';\n\nimport type { EnvaptConverter } from './Types';\n\n/**\n * @internal\n */\nexport interface EnvapterService {\n getRaw(key: string): string | undefined;\n get(key: string, def?: string): string;\n getNumber(key: string, def?: number): number;\n getBoolean(key: string, def?: boolean): boolean;\n}\n\n/**\n * Parser class for handling environment variable template resolution and type conversion\n * @internal\n */\nexport class Parser {\n private readonly TEMPLATE_REGEX = /\\${\\w*}/g;\n\n constructor(private readonly envService: EnvapterService) {}\n\n resolveTemplate(key: string, value: string, stack = new Set<string>()): string {\n if (stack.has(key)) return value; // direct cycle, keep as is\n\n stack.add(key);\n\n const out = value.replace(this.TEMPLATE_REGEX, (template) => {\n const variable = template.slice(2, -1);\n if (!variable) return template; // empty name, preserve\n\n if (stack.has(variable)) return template; // cycle, preserve\n\n const raw = this.envService.getRaw(variable);\n if (!raw || raw === '') return template; // missing or empty, preserve\n\n const resolved = this.resolveTemplate(variable, raw, new Set(stack));\n\n // If resolution still references the current key, skip replacement (indirect cycle)\n if (resolved.includes(`\\${${key}}`)) return template;\n\n // If nothing changed (unresolved placeholders stayed), also preserve original template\n if (resolved === raw && /\\$\\{[^}]*\\}/.test(resolved)) return template;\n\n return resolved;\n });\n\n stack.delete(key);\n return out;\n }\n\n convertValue<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n ): FallbackType | null | undefined {\n // Determine which converter to use\n let resolvedConverter = this.resolveConverter(converter, fallback);\n\n if (resolvedConverter === Number) resolvedConverter = 'number';\n else if (resolvedConverter === Boolean) resolvedConverter = 'boolean';\n else if (resolvedConverter === String) resolvedConverter = 'string';\n else if (resolvedConverter === BigInt) resolvedConverter = 'bigint';\n else if (resolvedConverter === Symbol) resolvedConverter = 'symbol';\n\n // Check if it's an ArrayConverter object\n if (Validator.isArrayConverter(resolvedConverter)) {\n // Validate the ArrayConverter configuration at runtime\n Validator.arrayConverter(resolvedConverter);\n\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n return BuiltInConverters.processArrayConverter(parsed, fallback, resolvedConverter) as FallbackType;\n }\n\n // Check if it's a built-in converter\n if (Validator.isBuiltInConverter(resolvedConverter as EnvaptConverter<unknown>)) {\n // Validate the built-in converter at runtime\n Validator.builtInConverter(resolvedConverter);\n const parsed = this.envService.get(key, undefined);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (parsed === undefined) return hasFallback ? fallback : null;\n\n const converterFn = BuiltInConverters.getConverter(resolvedConverter);\n const result = converterFn(parsed, fallback);\n return result as FallbackType;\n }\n\n Validator.customConvertor(resolvedConverter);\n\n // Custom converter function\n const raw = this.envService.get(key, undefined);\n\n // If no fallback provided and no value found, return null\n // If explicit undefined fallback and no value found, return undefined\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (raw === undefined) return hasFallback ? fallback : null;\n\n return resolvedConverter(raw, fallback);\n }\n\n private resolveConverter<FallbackType>(\n converter: EnvaptConverter<FallbackType> | undefined,\n fallback: FallbackType | undefined\n ): EnvaptConverter<FallbackType> {\n // User provided explicit converter. Use it\n if (converter) return converter;\n\n // Auto-detect type from fallback using typeof\n const fallbackType = typeof fallback;\n if (fallbackType === 'number') return 'number';\n if (fallbackType === 'boolean') return 'boolean';\n if (fallbackType === 'bigint') return 'bigint';\n if (fallbackType === 'symbol') return 'symbol';\n return 'string';\n }\n}\n","import { config } from 'dotenv';\n\nimport { BuiltInConverters } from './BuiltInConverters';\nimport { Parser, type EnvapterService } from './Parser';\n\n/**\n * Internal cache for environment variables and computed values\n * @internal\n */\nexport const EnvaptCache = new Map<string, unknown>();\n\n/**\n * @internal\n */\nenum Primitive {\n String,\n Number,\n Boolean,\n BigInt,\n Symbol\n}\n\n/**\n * Environment types supported by Envapter\n * @public\n */\nexport enum Environment {\n Development,\n Staging,\n Production\n}\n\n/**\n * Main configuration class for environment variable management.\n *\n * Provides both static and instance methods for retrieving typed environment variables\n * with support for template resolution, multiple .env files, and environment detection.\n *\n * Extend your own classes from this to define properties with \\@Envapt decorators and provide access to environment variables methods.\n *\n * @example\n * ```ts\n * // Static usage\n * const port = Envapter.getNumber('PORT', 3000);\n * const url = Envapter.get('API_URL', 'http://localhost');\n *\n * // Instance usage\n * const env = new Envapter();\n * const dbUrl = env.get('DATABASE_URL', 'sqlite://memory');\n * ```\n *\n * @public\n */\nexport class Envapter implements EnvapterService {\n private static readonly parser = new Parser(new Envapter());\n private static _envPaths: string[] = ['.env']; // default path\n\n // Environment handling\n private static internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n\n /**\n * Set custom .env file paths. Accepts either a single path or array of paths.\n * Setting new paths clears the cache and reloads environment variables.\n *\n * @param paths - Single file path or array of file paths to load\n *\n * @example\n * ```ts\n * // Single file\n * Envapter.envPaths = '.env.production';\n *\n * // Multiple files (loaded in order)\n * Envapter.envPaths = ['.env', '.env.local', '.env.production'];\n * ```\n */\n static set envPaths(paths: string[] | string) {\n this._envPaths = Array.isArray(paths) ? paths : [paths];\n\n // clear cache to force reload with new path\n EnvaptCache.clear();\n void this.config;\n\n // reset internal environment to force re-evaluation\n this.internalEnvironment = this.determineEnvironment(\n this.get('ENVIRONMENT', this.get('ENV', this.get('NODE_ENV', 'development')))\n );\n }\n\n /**\n * Get currently configured .env file paths\n * @returns Array of file paths being loaded\n */\n static get envPaths(): string[] {\n return this._envPaths;\n }\n\n private static determineEnvironment(env: string | Environment): Environment {\n if (typeof env === 'string') {\n switch (env.toLowerCase()) {\n case 'production':\n return Environment.Production;\n case 'staging':\n return Environment.Staging;\n default:\n return Environment.Development;\n }\n }\n\n return env;\n }\n\n /**\n * Set the application environment. Accepts either Environment enum or string value.\n *\n * @param env - Environment value ('development', 'staging', 'production') or Environment enum\n *\n * @example\n * ```ts\n * Envapter.environment = Environment.Production;\n * Envapter.environment = 'staging';\n * ```\n */\n static set environment(env: string | Environment) {\n this.internalEnvironment = this.determineEnvironment(env);\n }\n\n /**\n * Get the current application environment\n * @returns Current environment enum value\n */\n static get environment(): Environment {\n return this.internalEnvironment;\n }\n\n /**\n * Check if the current environment is production\n * @returns true if environment is production\n */\n static get isProduction(): boolean {\n return this.internalEnvironment === Environment.Production;\n }\n\n /**\n * Check if the current environment is staging\n * @returns true if environment is staging\n */\n static get isStaging(): boolean {\n return this.internalEnvironment === Environment.Staging;\n }\n\n /**\n * Check if the current environment is development\n * @returns true if environment is development\n */\n static get isDevelopment(): boolean {\n return this.internalEnvironment === Environment.Development;\n }\n\n private static get config(): Map<string, unknown> {\n if (EnvaptCache.size === 0) {\n // create isolated environment object to avoid mutating process.env\n const isolatedEnv: Record<string, string> = { ...(process.env as Record<string, string>) };\n\n try {\n // load _envPath file from custom path into isolated environment object\n config({ path: this._envPaths, quiet: true, processEnv: isolatedEnv });\n } catch {\n // do nothing\n }\n // populate the Map with global environment variables\n for (const [key, value] of Object.entries(isolatedEnv)) EnvaptCache.set(key, value);\n }\n\n return EnvaptCache;\n }\n\n private static _get(key: string, type: Primitive = Primitive.String, def?: unknown): unknown {\n const rawVal = this.config.get(key) as string | number | boolean;\n if (!rawVal) return def;\n\n const parsed = this.parser.resolveTemplate(key, String(rawVal));\n\n switch (type) {\n case Primitive.String: {\n return BuiltInConverters.string(parsed, def as string);\n }\n\n case Primitive.Number: {\n return BuiltInConverters.number(parsed, def as number);\n }\n\n case Primitive.Boolean: {\n return BuiltInConverters.boolean(parsed, def as boolean);\n }\n\n case Primitive.BigInt: {\n return BuiltInConverters.bigint(parsed, def as bigint);\n }\n\n case Primitive.Symbol: {\n return BuiltInConverters.symbol(parsed, def as symbol);\n }\n\n default: {\n return BuiltInConverters.string(parsed, def as string);\n }\n }\n }\n\n /**\n * Get a string environment variable with optional fallback.\n * Supports template variable resolution using ${VAR} syntax.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value or default\n *\n * @example\n * ```ts\n * const apiUrl = Envapter.get('API_URL', 'http://localhost:3000');\n * ```\n */\n static get(key: string, def?: string): string {\n return this._get(key, Primitive.String, def) as string;\n }\n\n /**\n * Get a number environment variable with optional fallback.\n * Automatically converts string values to numbers.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as number or default\n *\n * @example\n * ```ts\n * const port = Envapter.getNumber('PORT', 3000);\n * ```\n */\n static getNumber(key: string, def?: number): number {\n return this._get(key, Primitive.Number, def) as number;\n }\n\n /**\n * Get a boolean environment variable with optional fallback.\n * Recognizes: `1`, `yes`, `true` as **true**; `0`, `no`, `false` as **false** (case-insensitive).\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as boolean or default\n *\n * @example\n * ```ts\n * const isProduction = Envapter.getBoolean('IS_PRODUCTION', false);\n * ```\n */\n static getBoolean(key: string, def?: boolean): boolean {\n return this._get(key, Primitive.Boolean, def) as boolean;\n }\n\n /**\n * Get a bigint environment variable with optional fallback.\n * Automatically converts string values to bigint.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found or cannot be converted\n * @returns The environment variable value as bigint or default\n *\n * @example\n * ```ts\n * const largeNumber = Envapter.getBigInt('LARGE_NUMBER', 123456789012345678901234567890n);\n * ```\n */\n static getBigInt(key: string, def?: bigint): bigint {\n return this._get(key, Primitive.BigInt, def) as bigint;\n }\n\n /**\n * Get a symbol environment variable with optional fallback.\n * Creates a symbol from the string value.\n *\n * @param key - Environment variable name\n * @param def - Default value if variable is not found\n * @returns The environment variable value as symbol or default\n *\n * @example\n * ```ts\n * const uniqueKey = Envapter.getSymbol('UNIQUE_KEY', Symbol('default'));\n * ```\n */\n static getSymbol(key: string, def?: symbol): symbol {\n return this._get(key, Primitive.Symbol, def) as symbol;\n }\n\n get(key: string, def?: string): string {\n return Envapter._get(key, Primitive.String, def) as string;\n }\n\n getNumber(key: string, def?: number): number {\n return Envapter._get(key, Primitive.Number, def) as number;\n }\n\n getBoolean(key: string, def?: boolean): boolean {\n return Envapter._get(key, Primitive.Boolean, def) as boolean;\n }\n\n getBigInt(key: string, def?: bigint): bigint {\n return Envapter._get(key, Primitive.BigInt, def) as bigint;\n }\n\n getSymbol(key: string, def?: symbol): symbol {\n return Envapter._get(key, Primitive.Symbol, def) as symbol;\n }\n\n /**\n * Get raw environment variable value without parsing or conversion.\n *\n * @internal\n */\n getRaw(key: string): string | undefined {\n return Envapter.config.get(key) as string | undefined;\n }\n}\n","/* eslint-disable security/detect-bidi-characters */\nimport { Envapter, EnvaptCache } from './Envapter';\nimport { Parser } from './Parser';\n\nimport type { EnvaptConverter, EnvaptOptions } from './Types';\n\nfunction createPropertyDecorator<FallbackType>(\n key: string,\n fallback: FallbackType | undefined,\n converter: EnvaptConverter<FallbackType> | undefined,\n hasFallback = true\n): PropertyDecorator {\n return function (target: object, prop: string | symbol): void {\n const propKey = String(prop);\n const cacheKey = `${target.constructor.name}.${propKey}`;\n\n // Create a property with a getter that handles environment changes\n Object.defineProperty(target, propKey, {\n get: function () {\n // Check if the environment cache has been cleared (indicating config change)\n // If so, we need to re-evaluate our cached value\n let value = EnvaptCache.get(cacheKey) as FallbackType | null | undefined;\n\n // Re-evaluate if we don't have a cached value\n if (value === undefined) {\n const parser = new Parser(new Envapter());\n value = parser.convertValue(key, fallback, converter, hasFallback);\n EnvaptCache.set(cacheKey, value);\n }\n\n return value;\n },\n configurable: false,\n enumerable: true\n });\n };\n}\n\n/**\n * Instance/Static Property decorator that automatically loads and converts environment variables.\n *\n * Supports both modern options-based API and classic parameter-based API.\n * Automatically detects types from fallback values and provides caching for performance.\n *\n * Note: Using \\@Envapt on a variable for an env that doesn't exist will set the value to `null` if no fallback is provided, regardless of a converter being used.\n *\n * @param key - Environment variable name to load\n * @param options - Configuration options (modern API)\n *\n * @example Modern API (recommended):\n * ```ts\n * class Config extends Envapter {\n * \\@Envapt('PORT', { fallback: 3000 })\n * static readonly port: number;\n *\n * \\@Envapt('FEATURES', { fallback: ['auth'], converter: 'array' })\n * declare private readonly features: string[];\n *\n * \\@Envapt('CONFIG', { converter: 'json' })\n * static readonly config: object;\n *\n * \\@Envapt('API_URL', { converter: 'url' })\n * declare public readonly apiUrl: URL;\n *\n * \\@Envapt('CUSTOM_LIST', {\n * fallback: [1, 2, 3],\n * converter: {\n * delimiter: ',',\n * type: 'number' // Convert each item to number\n * }\n * })\n * static readonly customList: string[];\n * }\n * ```\n *\n * @param key - Environment variable name to load\n * @param fallback - Default value if variable is not found. Only suppoerts primitive types (string, number, boolean, bigint, symbol).\n * @param converter - Custom converter function or built-in converter\n *\n * @example Classic API\n * ```ts\n * class HealthCheck {\n * \\@Envapt('PORT', 3000) declare readonly port: number;\n *\n * // code to start server\n * public start() {\n * // works on instance properties\n * console.log(`Server running on port ${this.port}`);\n * }\n * }\n * ```\n *\n * @public\n */\nexport function Envapt<FallbackType = unknown>(key: string, options?: EnvaptOptions<FallbackType>): PropertyDecorator;\nexport function Envapt<FallbackType = string | number | boolean | bigint | symbol>(\n key: string,\n fallback?: FallbackType,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator;\nexport function Envapt<FallbackType = unknown>(\n key: string,\n fallbackOrOptions?: FallbackType | EnvaptOptions<FallbackType>,\n converter?: EnvaptConverter<FallbackType>\n): PropertyDecorator {\n // Determine if using new options API or classic API\n let fallback: FallbackType | undefined;\n let actualConverter: EnvaptConverter<FallbackType> | undefined;\n let hasFallback = true;\n\n if (\n fallbackOrOptions &&\n typeof fallbackOrOptions === 'object' &&\n ('fallback' in fallbackOrOptions || 'converter' in fallbackOrOptions)\n ) {\n // Modern API\n const options = fallbackOrOptions;\n fallback = options.fallback;\n actualConverter = options.converter;\n hasFallback = 'fallback' in options;\n } else {\n // Classic API\n fallback = fallbackOrOptions as FallbackType;\n actualConverter = converter;\n hasFallback = arguments.length > 1;\n }\n\n return createPropertyDecorator(key, fallback, actualConverter, hasFallback);\n}\n"]}
|