11import { readFileSync , existsSync } from "fs" ;
2+ import { T } from "vitest/dist/chunks/global.d.MAmajcmJ" ;
23
34function loadDotEnv ( file = ".env" ) {
45 if ( ! existsSync ( file ) ) return { } ;
@@ -41,7 +42,6 @@ export const env = Object.freeze({
4142 if ( ! ( key in process . env ) ) process . env [ key ] = _default ?? "" ;
4243 return process . env [ key ] as T ;
4344 } ,
44-
4545 number ( key : Uppercase < string > , _default = 0 ) : number {
4646 const raw = process . env [ key ] ;
4747 if ( raw === undefined ) {
@@ -51,7 +51,6 @@ export const env = Object.freeze({
5151 const val = Number ( raw ) ;
5252 return Number . isFinite ( val ) ? val : _default ;
5353 } ,
54-
5554 boolean ( key : Uppercase < string > , _default = false ) : boolean {
5655 const raw = process . env [ key ] ;
5756 if ( raw === undefined ) {
@@ -61,13 +60,20 @@ export const env = Object.freeze({
6160 const val = raw . toLowerCase ( ) ;
6261 return val === "true" || val === "1" ;
6362 } ,
64-
63+ url ( key : Uppercase < string > , _default = new URL ( "http://localhost" ) ) : URL {
64+ const raw = process . env [ key ] ;
65+ if ( raw === undefined || ! URL . canParse ( raw ) ) {
66+ process . env [ key ] = _default . toString ( ) ;
67+ return _default ;
68+ }
69+ return URL . parse ( raw ) ! ;
70+ } ,
6571 has ( key : Uppercase < string > ) : boolean {
6672 return Object . prototype . hasOwnProperty . call ( process . env , key ) ;
6773 } ,
6874 assert ( keys : Uppercase < string > [ ] , error_builder : ( missing_keys : string [ ] ) => string | Error = ( ( missing_keys ) => new Error ( `Missing required keys(${ missing_keys . join ( ) } ) in environment` ) ) , ) {
6975 const missing_keys : string [ ] = [ ] ;
70- keys . forEach ( ( key ) => this . has ( key ) ? void 0 : missing_keys . push ( key ) ) ;
76+ keys . forEach ( ( key ) => this . has ( key ) ? void 0 : missing_keys . push ( key ) ) ;
7177 if ( missing_keys . length > 0 ) {
7278 const result = error_builder ( missing_keys ) ;
7379 if ( typeof result === "string" ) throw new Error ( result ) ;
@@ -113,5 +119,5 @@ export const env = Object.freeze({
113119 } ) ,
114120 get raw ( ) {
115121 return Object . freeze ( dotEnvVars )
116- }
122+ } ,
117123} ) ;
0 commit comments