const path = require('path');

// Plugins
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const env = process.env;

module.exports = {
  mode: `${env.NODE_ENV ? env.NODE_ENV : 'production'}`,
  entry: path.join(__dirname, './cmd/fake-smtp/public/src/index.js'),
  output: {
    filename: '[name].js',
    path: path.join(__dirname, './cmd/fake-smtp/public/dist')
  },
  module: {
    rules: [{
      test: /\.js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env'],
          plugins: ['@babel/plugin-proposal-class-properties']
        }
      }
    },{
      test: /\.s(a|c)ss$/,
      use: [
        MiniCssExtractPlugin.loader,
        {
          loader: "css-loader",
          options: {}
        },
        {
          loader: "resolve-url-loader",
          options: {}
        },
        {
          loader: "sass-loader",
          options: {
            sourceMap: true,
          }
        }
      ]
    },{
      test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/,
      use: [{
          loader: 'file-loader',
          options: {
              name: '[name].[ext]',
              outputPath: '/fonts/'
          }
      }]
    },{
      test: /\.(svg|png|jpg)(\?v=\d+\.\d+\.\d+)?$/,
      use: [{
          loader: 'file-loader',
          options: {
              name: '[name].[ext]',
              outputPath: '/img/'
          }
      }]
    }]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: "./css/[name].css",
      chunkFilename: "./css/[id].css"
    })
  ]
}