Repository URL to install this package:
|
Version:
1.2.10 ▾
|
/* eslint complexity: "OFF" */
/* eslint max-statements: "OFF" */
import { config } from '@skava/di'
import { plugins } from '../.plugins'
import {
Configuration,
BuildOptions,
ConfigFactoryOptions,
} from '../../typings'
import { PROPERTIES as buildPreferences } from '../../config/oneConfig'
import { fromBuildOptionsToParams } from './fromBuildOptionsToParams'
import { fromBuildOptionsToPaths } from './fromBuildOptionsToPaths'
/** mutates... */
function decorateConfig(buildOptions: ConfigFactoryOptions): void {
const options = buildOptions as BuildOptions
options.client = options.bundles.client
options.server = options.bundles.server
// log.quick(options)
// This is either our "server" or "client" bundle.
// Otherwise it must be an additional node bundle.
options.bundleConfig = options.isServer
? options.bundles.server
: options.isClient
? options.bundles.client
: undefined
fromBuildOptionsToPaths(options)
}
// 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: ConfigFactoryOptions
): Configuration {
const buildOptions = {
...buildPreferences,
...fromBuildOptionsToParams(someBuildOptions),
}
console.log('buildOptions: ', buildOptions)
decorateConfig(buildOptions)
const { target, isClient, isDev } = buildOptions
const webpackConfig: Configuration = {
watch: undefined,
mode: undefined,
// Define our entry chunks for our bundle.
entry: {},
// Bundle output configuration.
output: {},
target: isClient ? 'web' : 'node',
node: {},
devtool: false,
performance: {},
resolve: {},
externals: [],
plugins: [],
module: {
rules: [],
},
}
/**
* @todo add a `before` & `after` instead?
*/
if (config.has('buildSystemConfig') === true) {
const tap = config.get('buildSystemConfig')
tap(webpackConfig, buildOptions)
}
plugins.forEach((plugin, key) => {
plugin(webpackConfig, buildOptions)
})
if (config.has('buildSystemConfig') === true) {
const tap = config.get('buildSystemConfig')
tap(webpackConfig, buildOptions)
}
// Apply the configuration middleware.
return webpackConfig
}
export { webpackConfigFactory }