Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/bs / src / bundle / webpackConfigFactory.ts
Size: Mime:
/* eslint complexity: "OFF" */
/* eslint max-statements: "OFF" */
import options from '../.plugins/params'
import * as plugins from '../.plugins'
import { resolveToRoot } from '../resolveToRoot'
import buildPreferences from '../oneConfig'
import getURLs from './bundlePaths'

function decorateConfig(buildOptions) {
  buildOptions.client = buildOptions.bundles.client
  buildOptions.server = buildOptions.bundles.server

  // log.quick(buildOptions)
  // This is either our "server" or "client" bundle.
  // Otherwise it must be an additional node bundle.
  buildOptions.bundleConfig = buildOptions.isServer
    ? buildOptions.bundles.server
    : buildOptions.isClient
      ? buildOptions.bundles.client
      : {}

  getURLs(buildOptions)
}

// https://github.com/tessin/tessin-mini/blob/master/webpack/ManifestPlugin.js#L1
// https://github.com/tessin/tessin-mini/blob/master/webpack/webpack.config.js
function webpackConfigFactory(someBuildOptions) {
  const buildOptions = {
    // ...buildOptions,
    // getConfigFor,
    resolveToRoot,
    // buildPreferences,
    // log,
    ...buildPreferences,
    ...options(someBuildOptions),
  }
  decorateConfig(buildOptions)

  const { target, isClient, isDev } = buildOptions

  const webpackConfig = {
    // Define our entry chunks for our bundle.
    entry: {},

    // Bundle output configuration.
    output: {},

    mode: isDev ? 'development' : 'production',

    target: isClient ? 'web' : 'node',

    node: {},

    devtool: 'none',

    performance: {},

    resolve: {},

    externals: [],

    plugins: [],
    module: {
      rules: [],
    },
  }

  // require('fliplog').quick(merged)

  Object.keys(plugins).forEach(name => {
    const plugin = plugins[name]
    if (typeof plugin !== 'function') {
      console.warn(name)
      return
    }
    plugin(webpackConfig, buildOptions)
  })

  const webpackDevServerOptions = {
    watch: false,
  }
  if (isClient && isDev) {
    delete webpackDevServerOptions.watch
    webpackDevServerOptions.watchOptions = {
      aggregateTimeout: 500,
      poll: 1000,
    }
  }

  // Apply the configuration middleware.
  return webpackConfig
}

export { webpackConfigFactory }