{"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"}