import { deepmerge } from '@fesjs/utils';

const defaultTerserOptions = {
    compress: {
    // turn off flags with small gains to speed up minification
        arrows: false,
        collapse_vars: false, // 0.3kb
        comparisons: false,
        computed_props: false,
        hoist_funs: false,
        hoist_props: false,
        hoist_vars: false,
        inline: false,
        loops: false,
        negate_iife: false,
        properties: false,
        reduce_funcs: false,
        reduce_vars: false,
        switches: false,
        toplevel: false,
        typeofs: false,

        // a few flags with noticeable gains/speed ratio
        // numbers based on out of the box vendor bundle
        booleans: true, // 0.7kb
        if_return: true, // 0.4kb
        sequences: true, // 0.7kb
        unused: true, // 2.3kb

        // required features to drop conditional branches
        conditionals: true,
        dead_code: true,
        evaluate: true
    },
    mangle: {
        safari10: true
    }
};

const terserOptions = config => ({
    terserOptions: deepmerge(
        defaultTerserOptions,
        config.terserOptions || {}
    ),
    extractComments: false
});


export default function createMinimizerWebpackConfig({
    isProd,
    config,
    webpackConfig
}) {
    if (isProd) {
        webpackConfig.optimization
            .minimizer('terser')
            .use(require.resolve('terser-webpack-plugin'), [terserOptions(config)]);
    }
    if (process.env.FES_ENV === 'test') {
        webpackConfig.optimization.minimize(false);
    }
}
