Files
w4rpservices/node_modules/laravel-mix/src/webpackPlugins/MixDefinitionsPlugin.js
2018-10-27 03:51:47 -05:00

60 lines
1.4 KiB
JavaScript
Vendored

let webpack = require('webpack');
let dotenv = require('dotenv');
let expand = require('dotenv-expand');
/**
* Create a new plugin instance.
*
* @param {string} envPath
*/
function MixDefinitionsPlugin(envPath) {
expand(
dotenv.config({
path: envPath || Mix.paths.root('.env')
})
);
}
/**
* Build up the necessary definitions and add them to the DefinePlugin.
*
* @param {Object|null} merge
*/
MixDefinitionsPlugin.build = function(merge = {}) {
return new webpack.DefinePlugin(
new MixDefinitionsPlugin().getDefinitions(merge)
);
};
/**
* Build all MIX_ definitions for Webpack's DefinePlugin.
*
* @param {object} merge
*/
MixDefinitionsPlugin.prototype.getDefinitions = function(merge) {
let regex = /^MIX_/i;
// Filter out env vars that don't begin with MIX_.
let env = Object.keys(process.env)
.filter(key => regex.test(key))
.reduce((value, key) => {
value[key] = process.env[key];
return value;
}, {});
let values = Object.assign(env, merge);
return {
'process.env': Object.keys(values)
// Stringify all values so they can be fed into Webpack's DefinePlugin.
.reduce((value, key) => {
value[key] = JSON.stringify(values[key]);
return value;
}, {})
};
};
module.exports = MixDefinitionsPlugin;