11import { iter_first_not_null } from "@gaubee/util" ;
22
3- type CustomEnvConfig < T = unknown , Env = unknown > = {
4- default : ( env : Env ) => T ;
5- stringify : ( v : T , env : Env ) => string ;
6- parse : ( v : string , env : Env ) => T ;
7- } ;
8- type CustomEnvGetter < Env > = ( env : Env ) => string ;
9- type EnvConfig < Env = unknown > = string | number | boolean | CustomEnvConfig < unknown , Env > | CustomEnvGetter < Env > ;
10- export type DefineEnv < P extends string , KV extends Record < string , EnvConfig < any > > > = {
11- [ K in keyof KV as `${Uppercase < P > } _${Uppercase < K & string > } `] : KV [ K ] extends CustomEnvConfig < infer V > ? V : KV [ K ] extends CustomEnvGetter < any > ? string : KV [ K ] ;
12- // defineEnv<P2 extends string, KV2 extends Record<string, EnvConfig<>>>()
13- } ;
14- export type DefineEnvChain < P extends string , Env > = Env & {
15- and < KV2 extends Record < string , EnvConfig < Env > > > ( kv : KV2 , env ?: Record < string , string > ) : DefineEnvChain < P , Env & DefineEnv < P , KV2 > > ;
16- end ( ) : Env ;
17- } ;
3+ type CommonEnv = Record < string , string | undefined > ;
184
195declare const process : any ;
206export const nodeEnvSource = ( ) => process . env ;
217declare const Deno : any ;
22- export const denoEnvSource = ( ) =>
8+ export const denoEnvSource = ( ) : CommonEnv =>
239 new Proxy (
2410 { } ,
2511 {
@@ -33,8 +19,8 @@ export const denoEnvSource = () =>
3319 } ,
3420 ) ;
3521declare const Bun : any ;
36- export const bunEnvSource = ( ) => Bun . env ;
37- export const storageEnvSource = ( storages : Storage [ ] = [ sessionStorage , localStorage ] ) =>
22+ export const bunEnvSource = ( ) : CommonEnv => Bun . env ;
23+ export const storageEnvSource = ( storages : Storage [ ] = [ sessionStorage , localStorage ] ) : CommonEnv =>
3824 new Proxy (
3925 { } ,
4026 {
@@ -55,7 +41,7 @@ export const storageEnvSource = (storages: Storage[] = [sessionStorage, localSto
5541 } ,
5642 } ,
5743 ) ;
58- export const autoEnvSource = ( fallback : ( ) => Record < string , string > = ( ) => ( { } ) ) : Record < string , string | undefined > => {
44+ export const autoEnvSource = ( fallback : ( ) => Record < string , string > = ( ) => ( { } ) ) : CommonEnv => {
5945 return (
6046 iter_first_not_null (
6147 [
@@ -101,8 +87,8 @@ type SaveEnvReturn<T extends Record<string, Parser>> = {
10187 * @param envShape
10288 * @returns
10389 */
104- export const defineSafeEnv = < ENV extends Record < string , Parser > > ( envShape : ENV ) => {
105- return ( source : Record < string , string | undefined > = autoEnvSource ( ) ) : SaveEnvReturn < ENV > => {
90+ export const defineSafeEnv = < ENV extends Record < string , Parser > > ( envShape : ENV ) : ( ( source ?: CommonEnv ) => SaveEnvReturn < ENV > ) => {
91+ return ( source : CommonEnv = autoEnvSource ( ) ) : SaveEnvReturn < ENV > => {
10692 const env : any = { } ;
10793 for ( const prop in envShape ) {
10894 const parser = envShape [ prop as keyof ENV ] ;
0 commit comments