const dev = process.env.NODE_ENV === "dev";
const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');
const exec = require('child_process').exec;
const uglifyJs = require('uglifyjs-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

// html-webpack-plugin configuration
const indexConfig = {
    template: './app/index.hbs',
    excludeChunks: ['electron'],
    chunksSortMode: (chunk1, chunk2) => {
    	// Set the order of files injected (dependencies before app)
		// https://github.com/jantimon/html-webpack-plugin/issues/481
        let orders = ['corejs', 'zonejs', 'app'];
        return orders.indexOf(chunk1.names[0]) - orders.indexOf(chunk2.names[0]);
    }
};

// clean-webpack-plugin configuration
const pathsToClean = [
	'./dist/css',
	'./dist/assets',
    './dist/templates'
];

let webpackConfig = {
	// How source maps are generated : style of source mapping
	devtool: dev ? 'eval-cheap-module-source-map' : false,
	// Development server configuration
	devServer: {
		// Execute custom middleware after all other middleware internally within the server
		after() {
			// Fix whitescreen bug on build with Electron BrowserWindow
			exec('electron . --dev', function(error){
				console.log(error);
			});
		}
	},
	// Where webpack looks to start building the bundle
	entry: {
		'electron': './electron', // Electron entry point
        'corejs': 'core-js/client/shim', // Angular dependency
        'zonejs': 'zone.js/dist/zone', // Angular dependency
        'app': './app/main.ts' // App entry point
    },
	// How the different types of modules within a project will be treated
	module: {
		rules: [{
			// All files with a '.ts' extension will be handled by ts-loader
			test: /\.ts$/,
			use: 'ts-loader',
			exclude: /node_modules/
		}, {
            // All files with a '.scss' extension will be handled by sass-loader
            test: /\.scss$/,
            exclude: /node_modules/,
            use: [{
                loader: 'file-loader',
                options: {
                    name: 'css/[name].[hash:10].css'
                }
            }, 'extract-loader', 'css-loader', 'resolve-url-loader', 'sass-loader'],
        }, {
		    // All files with a '.html' extension will be handled by html-loader and save into external file
            test: /\.html$/,
            exclude: /node_modules/,
            use: [
                {
                    loader: 'file-loader',
                    options: {
                        name: 'templates/[name].[hash:10].html',
                    }
                },
                'extract-loader',
                'html-loader'
            ]
        }, {
			// All images and fonts will be optimized and their paths will be solved
			enforce: 'pre',
			test: /\.(png|jpe?g|gif|svg|woff2?|eot|ttf|otf|wav)(\?.*)?$/,
			use: [{
				loader: 'url-loader',
				options: {
					name: 'assets/[name].[hash:10].[ext]',
                    limit: 8192
				}
			}, {
				loader: 'img-loader'
			}],
			exclude: /node_modules/
		}]
	},
	// Configure how modules are resolved
	resolve: {
		extensions: [".ts", ".js"]
	},
	// How and where webpack should output bundles, assets and anything else
	output: {
		path: path.resolve('./dist'),
		filename: '[name].js'
	},
	// What bundle information gets displayed
	stats: {
		warnings: false
	},
	// Target a specific environment (cf. doc)
	target: 'electron-main',
	// Configure whether to polyfill or mock certain Node.js globals and modules
	node: {
		__dirname: false
	},
	// Customize the webpack build process with additionals plugins
	plugins: [
		new htmlWebpackPlugin(indexConfig)
	]
};

// UglifyJs and clean output folder only for prod
if (!dev) {
	webpackConfig.plugins.push(new CleanWebpackPlugin(pathsToClean));
	webpackConfig.plugins.push(new uglifyJs());
}

// Export the config
module.exports = webpackConfig;
@@ -1224,55 +1224,8 @@
 dev'
-, function(error)%7B%0A%09%09%09%09console.log(error);%0A%09%09%09%7D
 );%0A%09

Remove unused callback