2018-09-17 13:55:49 -07:00
|
|
|
const fs = require('fs');
|
|
|
|
const path = require('path');
|
|
|
|
const paths = require('./paths');
|
2018-11-21 21:45:29 -08:00
|
|
|
const childProcess = require('child_process');
|
2018-11-25 20:02:35 -08:00
|
|
|
const dotenv = require('dotenv');
|
|
|
|
const { logMessage } = require('../bin/utils');
|
2018-09-17 13:55:49 -07:00
|
|
|
|
|
|
|
delete require.cache[require.resolve('./paths')];
|
|
|
|
|
|
|
|
if (!process.env.NODE_ENV) {
|
|
|
|
throw new Error(
|
|
|
|
'The process.env.NODE_ENV environment variable is required but was not specified.',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2018-11-25 20:02:35 -08:00
|
|
|
// Override local ENV variables with .env
|
|
|
|
if (fs.existsSync(paths.dotenv)) {
|
|
|
|
const envConfig = dotenv.parse(fs.readFileSync(paths.dotenv));
|
|
|
|
// tslint:disable-next-line
|
|
|
|
for (const k in envConfig) {
|
|
|
|
if (process.env[k]) {
|
|
|
|
logMessage(`Warning! Over-writing existing ENV Variable ${k}`);
|
|
|
|
}
|
|
|
|
process.env[k] = envConfig[k];
|
2018-09-17 13:55:49 -07:00
|
|
|
}
|
2018-11-25 20:02:35 -08:00
|
|
|
}
|
2018-09-17 13:55:49 -07:00
|
|
|
|
2018-11-21 15:24:33 -08:00
|
|
|
const envProductionRequiredHandler = (envVariable, fallbackValue) => {
|
|
|
|
if (!process.env[envVariable]) {
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
|
|
throw new Error(
|
|
|
|
`The process.env.${envVariable} environment variable is required but was not specified.`,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
process.env[envVariable] = fallbackValue;
|
2018-10-22 10:16:15 -07:00
|
|
|
}
|
2018-11-21 15:24:33 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
envProductionRequiredHandler(
|
|
|
|
'PUBLIC_HOST_URL',
|
|
|
|
'http://localhost:' + (process.env.PORT || 3000),
|
|
|
|
);
|
2018-10-22 10:16:15 -07:00
|
|
|
|
2018-09-17 13:55:49 -07:00
|
|
|
const appDirectory = fs.realpathSync(process.cwd());
|
|
|
|
process.env.NODE_PATH = (process.env.NODE_PATH || '')
|
|
|
|
.split(path.delimiter)
|
|
|
|
.filter(folder => folder && !path.isAbsolute(folder))
|
|
|
|
.map(folder => path.resolve(appDirectory, folder))
|
|
|
|
.join(path.delimiter);
|
|
|
|
|
|
|
|
module.exports = () => {
|
|
|
|
const raw = {
|
2019-01-23 13:30:03 -08:00
|
|
|
BACKEND_URL: process.env.BACKEND_URL || 'http://localhost:5000',
|
2019-01-23 13:34:14 -08:00
|
|
|
EXPLORER_URL: process.env.EXPLORER_URL || 'https://chain.so/zcash/',
|
2018-09-17 13:55:49 -07:00
|
|
|
NODE_ENV: process.env.NODE_ENV || 'development',
|
2018-11-21 19:17:49 -08:00
|
|
|
PORT: process.env.PORT || 3000,
|
2018-10-22 10:16:15 -07:00
|
|
|
PUBLIC_HOST_URL: process.env.PUBLIC_HOST_URL,
|
2018-11-21 21:45:29 -08:00
|
|
|
SENTRY_DSN: process.env.SENTRY_DSN || null,
|
2019-01-23 13:30:03 -08:00
|
|
|
SENTRY_RELEASE: process.env.SENTRY_RELEASE || undefined,
|
2018-09-17 13:55:49 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
// Stringify all values so we can feed into Webpack DefinePlugin
|
|
|
|
const stringified = {
|
|
|
|
'process.env': Object.keys(raw).reduce((env, key) => {
|
|
|
|
env[key] = JSON.stringify(raw[key]);
|
|
|
|
return env;
|
|
|
|
}, {}),
|
|
|
|
};
|
|
|
|
|
|
|
|
return { raw, stringified };
|
|
|
|
};
|