const path = require('path');

const plugins = require('./plugins');

const CONTEXT = path.join(__dirname, '../../');
const STATIC = path.join(__dirname, '../static');
const DOCS = path.join(CONTEXT, 'docs');
const NODE_MODULES = path.join(DOCS, 'node_modules');
const SRC = path.join(CONTEXT, 'src');

const MODULES = [
  path.join(DOCS, 'node_modules'),
  path.join(CONTEXT, 'node_modules')
];

const INCLUDE = [
  DOCS,
  SRC
];

module.exports = {
  context: CONTEXT,
  entry: './docs/src/index.js',
  resolveLoader: {
    alias: {
      'embed-markdown-loader': path.join(__dirname, './embed-markdown-loader'),
      'babel-loader': path.join(NODE_MODULES, 'babel-loader'),
      'json-loader': path.join(NODE_MODULES, 'json-loader'),
      'raw-loader': path.join(NODE_MODULES, 'raw-loader')
    }
  },
  resolve: {
    modules: MODULES,
    alias: {
      '@root': path.join(DOCS, 'src'),
      '@ui': SRC
    }
  },
  output: {
    path: STATIC,
    publicPath: '/',
    filename: '[name].js'
  },
  plugins: [
    plugins['named-modules'],
    plugins['no-errors'],
    plugins['loader-options'],
    plugins['define']
  ],
  module: {
    rules: [{
      test: /js?$/,
      exclude: [/node_modules/g],
      include: INCLUDE,
      loader: 'babel-loader'
    }, {
      test: /\.json?$/,
      exclude: [/node_modules/g],
      include: INCLUDE,
      loader: 'json-loader'
    }, {
      test: /\.md?$/,
      exclude: [/node_modules/g],
      include: INCLUDE,
      loader: 'raw-loader!embed-markdown-loader'
    }, {
      test: /\.svg?$/,
      exclude: [/node_modules/g],
      include: INCLUDE,
      loader: 'svg-react'
    },
    {
      test: /\.(eot|svg|ttf|woff|woff2)$/,
      exclude: /node_modules/,
      loader: 'file-loader',
      include: INCLUDE
    }]
  }
};
