text: const TerserPlugin = require('terser-webpack-plugin');
  const CopyPlugin = require('copy-webpack-plugin');
  const ExampleBuilder = require('./example-builder');
  const fs = require('fs');
  const path = require('path');
  
  const src = path.join(__dirname, '..');
  
  const examples = fs
    .readdirSync(src)
    .filter((name) => /^(?!index).*\.html$/.test(name))
    .map((name) => name.replace(/\.html$/, ''));
  
  const entry = {};
  examples.forEach((example) => {
    entry[example] = `./${example}.js`;
  });
  
  module.exports = {
    context: src,
    target: 'web',
    entry: entry,
    stats: 'minimal',
    module: {
      rules: [
        {
          test: /^((?!es2015-)[\s\S])*\.js$/,
          use: {
            loader: 'buble-loader',
          },
          include: [
            path.join(__dirname, '..', '..', 'src'),
            path.join(__dirname, '..'),
          ],
        },
        {
          test: /\.js$/,
          use: {
            loader: path.join(__dirname, './worker-loader.js'),
          },
          include: [path.join(__dirname, '../../src/ol/worker')],
        },
      ],
    },
    optimization: {
      minimizer: [
        new TerserPlugin({
          sourceMap: true,
          // Do not minify examples that inject code into workers
          exclude: [/(color-manipulation|region-growing|raster)\.js/],
          extractComments: false,
        }),
      ],
      runtimeChunk: {
        name: 'common',
      },
      splitChunks: {
        name: 'common',
        chunks: 'initial',
        minChunks: 2,
      },
    },
    plugins: [
      new ExampleBuilder({
        templates: path.join(__dirname, '..', 'templates'),
        common: 'common',
      }),
      new CopyPlugin({
        patterns: [
          {from: '../src/ol/ol.css', to: 'css'},
          {from: 'data', to: 'data'},
          {from: 'resources', to: 'resources'},
          {from: 'Jugl.js', to: 'Jugl.js'},
          {from: 'index.html', to: 'index.html'},
          {from: 'index.js', to: 'index.js'},
        ],
      }),
    ],
    devtool: 'source-map',
    output: {
      filename: '[name].js',
      path: path.join(__dirname, '..', '..', 'build', 'examples'),
    },
    node: {
      fs: 'empty', // required by ol-mapbox-stlye
    },
    resolve: {
      alias: {
        // allow imports from 'ol/module' instead of specifiying the source path
        ol: path.join(__dirname, '..', '..', 'src', 'ol'),
      },
    },
  };
  