const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');

const isProduction = (process.env.NODE_ENV === 'production');

console.log(`Main module building in production mode? ${isProduction}`);

const babelOptions = {
    // Explicitly disable babelrc so we don't catch various config
    // in much lower dependencies.
    babelrc: false,
    plugins: [
        '@babel/plugin-syntax-dynamic-import',
        '@babel/plugin-transform-async-to-generator',
        '@babel/plugin-proposal-object-rest-spread'
    ],
    presets: [
        ['@babel/preset-env', {targets: {electron: '3.0.2'}}]
    ]
};

module.exports = {
    mode: isProduction ? 'production' : 'development',
    module: {
        rules: [
            // Override the *.js defaults from electron-webpack
            // The test/include/exclude must match the defaults exactly for webpack-merge to do the override
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                loader: 'babel-loader',
                options: babelOptions
            },
            {
                test: /.js$/,
                loader: 'source-map-loader',
                enforce: 'pre'
            }
        ]
    },
    optimization: {
        // Use `--env.minify=false` to disable the UglifyJsPlugin instance automatically injected by electron-webpack.
        // Otherwise it will do double-duty with this one.
        minimizer: [new UglifyJsPlugin({
            cache: true,
            parallel: true,
            sourceMap: true, // disable this if UglifyJSPlugin takes too long and/or runs out of memory
            uglifyOptions: {
                compress: isProduction ? {} : false,
                mangle: isProduction
            }
        })],
        splitChunks: {
            chunks: 'all'
        }
    },
    plugins: [
        new webpack.SourceMapDevToolPlugin({
            filename: '[file].map'
        })
    ],
    resolve: {
        symlinks: false
    }
};