@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 4.45 kB
Source Map (JSON)
{"version":3,"sources":["../../src/shared/env.ts"],"names":["loadedVars","Map","defaults","packageJson","envVar","name","defaultValue","value","process","env","Error","loadEnv","params","verbosity","reset","envFile","files","logger","packageJsonExists","key","keys","log","clear","forEach","filePath","fs","existsSync","result","dotenv","config","path","parsed","Object","entries","set"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEA,MAAMA,UAAU,GAAG,IAAIC,GAAJ,EAAnB;AAEA,MAAMC,QAAQ,GAAG,CAAC,YAAD,EAAe,MAAf,CAAjB;AAEA,MAAMC,WAAW,GAAG,cAApB;;AASO,SAASC,MAAT,CAAgBC,IAAhB,EAA8BC,YAA9B,EAA6D;AAClE,QAAMC,KAAK,GAAGC,OAAO,CAACC,GAAR,CAAYJ,IAAZ,CAAd;;AACA,MAAIE,KAAJ,EAAW;AACT,WAAOA,KAAP;AACD;;AAED,MAAI,OAAOD,YAAP,KAAwB,WAA5B,EAAyC;AACvC,UAAM,IAAII,KAAJ,CAAW,GAAEL,IAAK,kCAAlB,CAAN;AACD;;AAED,SAAOC,YAAP;AACD;;AAEM,eAAeK,OAAf,CACLC,MAAsB,GAAG;AACvBC,EAAAA,SAAS,EAAE,CADY;AAEvBC,EAAAA,KAAK,EAAE;AAFgB,CADpB,EAKL;AACA,QAAMC,OAAO,GAAGH,MAAM,CAACG,OAAvB;AACA,QAAMC,KAAK,GAAGD,OAAO,GAAG,CAACA,OAAD,EAAU,GAAGb,QAAb,CAAH,GAA4BA,QAAjD;AACA,QAAMe,MAAM,GAAGL,MAAM,CAACK,MAAP,IAAiB,kCAAhC;AAEA,QAAMC,iBAAiB,GAAG,MAAM,yBAAWf,WAAX,CAAhC;;AACA,MAAI,CAACe,iBAAL,EAAwB;AACtB,UAAM,IAAIR,KAAJ,CACJ,gGADI,CAAN;AAGD;;AAED,MAAIE,MAAM,CAACE,KAAX,EAAkB;AAChB,SAAK,MAAMK,GAAX,IAAkBnB,UAAU,CAACoB,IAAX,EAAlB,EAAqC;AACnC,UAAI,OAAOR,MAAM,CAACC,SAAd,KAA4B,QAA5B,IAAwCD,MAAM,CAACC,SAAP,IAAoB,CAAhE,EAAmE;AACjEI,QAAAA,MAAM,CAACI,GAAP,CAAY,GAAEF,GAAI,MAAlB;AACD;;AACD,aAAOX,OAAO,CAACC,GAAR,CAAYU,GAAZ,CAAP;AACD;;AACDnB,IAAAA,UAAU,CAACsB,KAAX;AACD;;AAEDN,EAAAA,KAAK,CAACO,OAAN,CAAcC,QAAQ,IAAI;AACxB,QAAI,CAACC,iBAAGC,UAAH,CAAcF,QAAd,CAAL,EAA8B;AAC5B;AACD;;AAED,QAAI,OAAOZ,MAAM,CAACC,SAAd,KAA4B,QAA5B,IAAwCD,MAAM,CAACC,SAAP,IAAoB,CAAhE,EAAmE;AACjEI,MAAAA,MAAM,CAACI,GAAP,CAAY,aAAYG,QAAS,EAAjC;AACD;;AAED,UAAMG,MAAM,GAAG,2BACbC,gBAAOC,MAAP,CAAc;AACZC,MAAAA,IAAI,EAAEN;AADM,KAAd,CADa,CAAf;AAMA,UAAMO,MAAM,GAAGJ,MAAM,CAACI,MAAtB;;AAEA,QAAI,CAACA,MAAL,EAAa;AACX;AACD;;AAEDC,IAAAA,MAAM,CAACC,OAAP,CAAeF,MAAf,EAAuBR,OAAvB,CAA+B,CAAC,CAACJ,GAAD,EAAMZ,KAAN,CAAD,KAAkB;AAC/CP,MAAAA,UAAU,CAACkC,GAAX,CAAef,GAAf,EAAoBZ,KAApB;;AAEA,UAAI,OAAOK,MAAM,CAACC,SAAd,KAA4B,QAA5B,IAAwCD,MAAM,CAACC,SAAP,IAAoB,CAAhE,EAAmE;AACjEI,QAAAA,MAAM,CAACI,GAAP,CAAY,GAAEF,GAAI,IAAGY,MAAM,CAACZ,GAAD,CAAM,EAAjC;AACD;AACF,KAND;AAOD,GA5BD;AA6BD","sourcesContent":["import dotenvExpand from 'dotenv-expand';\nimport dotenv from 'dotenv';\nimport fs, { pathExists } from 'fs-extra';\nimport { BasicLogger, defaultBasicLogger } from './logging';\n\nconst loadedVars = new Map<string, string>();\n\nconst defaults = ['.env.local', '.env'];\n\nconst packageJson = 'package.json';\n\ninterface ILoadEnvParams {\n envFile?: string;\n verbosity?: 0 | 1 | 2;\n reset?: boolean;\n logger?: BasicLogger;\n}\n\nexport function envVar(name: string, defaultValue?: string): string {\n const value = process.env[name];\n if (value) {\n return value;\n }\n\n if (typeof defaultValue === 'undefined') {\n throw new Error(`${name} environment variable is not set`);\n }\n\n return defaultValue;\n}\n\nexport async function loadEnv(\n params: ILoadEnvParams = {\n verbosity: 0,\n reset: false,\n }\n) {\n const envFile = params.envFile;\n const files = envFile ? [envFile, ...defaults] : defaults;\n const logger = params.logger || defaultBasicLogger();\n\n const packageJsonExists = await pathExists(packageJson);\n if (!packageJsonExists) {\n throw new Error(\n 'Cannot find package.json, this application is meant to be run with current package.json in cwd'\n );\n }\n\n if (params.reset) {\n for (const key of loadedVars.keys()) {\n if (typeof params.verbosity === 'number' && params.verbosity >= 2) {\n logger.log(`${key}=...`);\n }\n delete process.env[key];\n }\n loadedVars.clear();\n }\n\n files.forEach(filePath => {\n if (!fs.existsSync(filePath)) {\n return;\n }\n\n if (typeof params.verbosity === 'number' && params.verbosity >= 1) {\n logger.log(`- Loading ${filePath}`);\n }\n\n const result = dotenvExpand(\n dotenv.config({\n path: filePath,\n })\n );\n\n const parsed = result.parsed;\n\n if (!parsed) {\n return;\n }\n\n Object.entries(parsed).forEach(([key, value]) => {\n loadedVars.set(key, value);\n\n if (typeof params.verbosity === 'number' && params.verbosity >= 2) {\n logger.log(`${key}=${parsed[key]}`);\n }\n });\n });\n}\n"],"file":"env.js"}