next-csrf
Version:
CSRF mitigation library for Next.js
13 lines • 3.65 kB
JavaScript
;exports.__esModule=true;exports.processEnv=processEnv;exports.loadEnvConfig=loadEnvConfig;var _fs=_interopRequireDefault(require("fs"));var _path=_interopRequireDefault(require("path"));var log=_interopRequireWildcard(require("../build/output/log"));var _dotenvExpand=_interopRequireDefault(require("next/dist/compiled/dotenv-expand"));var _dotenv=_interopRequireDefault(require("next/dist/compiled/dotenv"));function _getRequireWildcardCache(){if(typeof WeakMap!=="function")return null;var cache=new WeakMap();_getRequireWildcardCache=function(){return cache;};return cache;}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache();if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}let combinedEnv=undefined;let cachedLoadedEnvFiles=[];function processEnv(loadedEnvFiles,dir){// don't reload env if we already have since this breaks escaped
// environment values e.g. \$ENV_FILE_KEY
if(combinedEnv||process.env.__NEXT_PROCESSED_ENV||!loadedEnvFiles.length){return process.env;}// flag that we processed the environment values in case a serverless
// function is re-used or we are running in `next start` mode
process.env.__NEXT_PROCESSED_ENV='true';const origEnv=Object.assign({},process.env);const parsed={};for(const envFile of loadedEnvFiles){try{let result={};result.parsed=_dotenv.default.parse(envFile.contents);result=(0,_dotenvExpand.default)(result);if(result.parsed){log.info(`Loaded env from ${_path.default.join(dir||'',envFile.path)}`);}for(const key of Object.keys(result.parsed||{})){if(typeof parsed[key]==='undefined'&&typeof origEnv[key]==='undefined'){var _result$parsed;parsed[key]=(_result$parsed=result.parsed)===null||_result$parsed===void 0?void 0:_result$parsed[key];}}}catch(err){log.error(`Failed to load env from ${_path.default.join(dir||'',envFile.path)}`,err);}}return Object.assign(process.env,parsed);}function loadEnvConfig(dir,dev){// don't reload env if we already have since this breaks escaped
// environment values e.g. \$ENV_FILE_KEY
if(combinedEnv)return{combinedEnv,loadedEnvFiles:cachedLoadedEnvFiles};const isTest=process.env.NODE_ENV==='test';const mode=isTest?'test':dev?'development':'production';const dotenvFiles=[`.env.${mode}.local`,// Don't include `.env.local` for `test` environment
// since normally you expect tests to produce the same
// results for everyone
mode!=='test'&&`.env.local`,`.env.${mode}`,'.env'].filter(Boolean);for(const envFile of dotenvFiles){// only load .env if the user provided has an env config file
const dotEnvPath=_path.default.join(dir,envFile);try{const stats=_fs.default.statSync(dotEnvPath);// make sure to only attempt to read files
if(!stats.isFile()){continue;}const contents=_fs.default.readFileSync(dotEnvPath,'utf8');cachedLoadedEnvFiles.push({path:envFile,contents});}catch(err){if(err.code!=='ENOENT'){log.error(`Failed to load env from ${envFile}`,err);}}}combinedEnv=processEnv(cachedLoadedEnvFiles,dir);return{combinedEnv,loadedEnvFiles:cachedLoadedEnvFiles};}
//# sourceMappingURL=load-env-config.js.map