var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var helpers = require('./helpers');
var path = require('path');
var fs = require('fs');
var glob = require('glob');
var CopyWebpackPlugin = require('copy-webpack-plugin');

const rootPath = helpers.root('node_modules');

let pattern = '+(alfresco-js-api|ng2-alfresco|ng2-activiti)*';
let options = {
    cwd: rootPath,
    realpath: true
};

let alfrescoLibs = glob.sync(pattern, options);
// console.dir(alfrescoLibs);

// Uncomment if you need all node_modules folders for Alfresco components
// let alfrescoLibsModules = alfrescoLibs.map(p => path.join(p, 'node_modules'));

module.exports = {
    entry: {
        'polyfills': './app/polyfills.ts',
        'vendor': './app/vendor.ts',
        'app': './app/main.ts'
    },

    resolve: {
        extensions: ['', '.ts', '.js'],
        modules: [
            helpers.root('app'),
            helpers.root('node_modules')
        ],
        root: rootPath,
        fallback: rootPath
    },

    resolveLoader: {
        alias: {
            'systemjs-loader': helpers.root('config', 'loaders', 'system.js'),
            'debug-loader': helpers.root('config', 'loaders', 'debug.js')
        },
        fallback: rootPath
    },
    module: {
        preLoaders: [
            {
                test: /\.js$/,
                include: [
                    ...alfrescoLibs
                ],
                loader: 'source-map-loader'
            }
        ],
        loaders: [
            {
                test: /\.ts$/,
                loaders: ['awesome-typescript-loader', 'angular2-template-loader', 'systemjs-loader'],
                exclude: ['node_modules','public']
            },
            {
                test: /\.js$/,
                include: [
                    ...alfrescoLibs
                ],
                loaders: ['angular2-template-loader', 'source-map-loader', 'systemjs-loader']
            },
            {
                test: /\.html$/,
                exclude: alfrescoLibs,
                loader: 'html'
            },
            {
                test: /\.html$/,
                include: alfrescoLibs,
                loader: 'html',
                query: {
                    interpolate: true
                }
            },
            {
                test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
                loader: 'file?name=assets/[name].[hash].[ext]'
            },
            {
                test: /\.css$/,
                exclude: [
                    helpers.root('app'),
                    ...alfrescoLibs
                ],
                loader: ExtractTextPlugin.extract('style', 'css?sourceMap')
            },
            {
                test: /\.css$/,
                include: [
                    helpers.root('app'),
                    ...alfrescoLibs
                ],
                loader: 'raw'
            }
        ]
    },

    plugins: [

        new webpack.ProvidePlugin({
            'dialogPolyfill': 'dialog-polyfill/dialog-polyfill'
        }),

        new CopyWebpackPlugin([
            { from: 'versions.json' }
        ]),

        new webpack.optimize.CommonsChunkPlugin({
            name: ['app', 'vendor', 'polyfills']
        }),

        new HtmlWebpackPlugin({
            template: 'index.html'
        })
    ],

    node: {
        fs: 'empty',
        module: false
    }
};

@@ -572,85 +572,8 @@
 );%0A%0A
-// Uncomment if you need all node_modules folders for Alfresco components%0A// 
 let 
@@ -646,16 +646,86 @@
 ules'));
+%0Alet alfrescoLibsSources = alfrescoLibs.map(p =%3E path.join(p, 'src'));
 %0A%0Amodule
@@ -3145,32 +3145,156 @@
 l'%0A        %7D),%0A%0A
+        new webpack.WatchIgnorePlugin(%5B%0A            ...alfrescoLibsModules,%0A            ...alfrescoLibsSources%0A        %5D),%0A%0A
         new Copy

exclude various folders from live reload