const webpack = require('webpack');
const merge = require('webpack-merge');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const vars = require('postcss-simple-vars');
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const dirs = require('./dirs');

const common = require('./webpack.common.js');

module.exports = merge.smart(common, {
    mode: 'production',

    devtool: 'hidden-source-map',
    entry: {
        show: ['./src/modules/app.ts'],
    },
    output: {
        path: dirs.DEST,
        filename: 'connection.min.js'
    },
    plugins: [
        new MiniCssExtractPlugin({
            path: dirs.DEST,
            filename: "connection.min.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
        })
    ],

    module: {
        rules: [
            {
                test: /\.(css|less)$/,
                use: [
                    {
                        loader: 'postcss-loader',
                        options: {
                            plugins: [vars({
                                variables: {
                                    fontUrl: '${fineServletURL}/resources?path=/com/fr/web/ui/font',
                                    imageUrl: '${fineServletURL}/resources?path=/com/fr/web/resources/dist/images/1x',
                                    image2xUrl: '${fineServletURL}/resources?path=/com/fr/web/resources/dist/images/2x',
                                }
                            })]
                        },
                    },
                ],
            },
        ],
    },
});