const webpack = require('webpack');
const merge = require('webpack-merge');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const dirs = require('./dirs');
const common = require('./webpack.common.js');

module.exports = merge.smart(common, {
    mode: 'production',
    optimization: {
        minimizer: [
            new UglifyJsPlugin({
                parallel: true,
                sourceMap: true,
                uglifyOptions: {
                    ie8: true,
                    output: {
                        comments: false,
                    },
                },
            }),
        ],
    },
    devtool: 'hidden-source-map',
    output: {
        path: dirs.DEST,
        filename: 'bundle.js',
    },
    plugins: [
        new ForkTsCheckerWebpackPlugin({}),
        new MiniCssExtractPlugin({
            path: dirs.DEST,
            filename: 'bundle.css',
        }),
        new webpack.BannerPlugin({
            banner: `time: ${new Date().toLocaleString()}`,
        }),
        new OptimizeCssAssetsPlugin({
            assetNameRegExp: /\.css$/g,
            cssProcessor: require('cssnano'),
            cssProcessorPluginOptions: {
                preset: [
                    'default',
                    {
                        discardComments: {
                            removeAll: true,
                        },
                        normalizeUnicode: false,
                    },
                ],
            },
            canPrint: true,
        }),
    ],
});