UNPKG

@tdb/web

Version:

Common condiguration for serving a web-site and testing web-based UI components.

98 lines (70 loc) 3.23 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports._createConfig = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _webpackMerge = require('webpack-merge'); var _webpack = require('webpack'); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _paths = require('./paths'); var _reject = require('lodash/reject'); var _reject2 = _interopRequireDefault(_reject); var _get = require('lodash/get'); var _get2 = _interopRequireDefault(_get); var _omit = require('lodash/omit'); var _omit2 = _interopRequireDefault(_omit); var _mapParentConfig = require('./mapParentConfig'); var _mapParentConfig2 = _interopRequireDefault(_mapParentConfig); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var webpackMerge = (0, _webpackMerge.strategy)({ entry: 'append', output: 'append', plugins: 'append' }); // omit properties that can break things var prepare = function prepare(config) { // We don't want are own plugin in the DLL config var plugins = (0, _reject2.default)(config.plugins, function (plugin) { return (0, _get2.default)(plugin, 'constructor.name') === 'AutoDLLPlugin'; }); // context is omitted becouse we already assigned the parent context as the defaults in createSettings // plugins are ommited by default too. // It's not ideal, but it's better to let the user make a conscious choice about it. var props = ['context', 'plugins', 'entry', 'output']; return _extends({}, (0, _omit2.default)(config, props), { plugins }); }; var _createConfig = exports._createConfig = function _createConfig(cacheDir) { return function (settings, rawParentConfig) { var hash = settings.hash, _settings$filename = settings.filename, filename = _settings$filename === undefined ? [] : _settings$filename; var outputPath = _path2.default.join(cacheDir, hash); var parentConfig = (0, _mapParentConfig2.default)(settings, prepare(rawParentConfig)); var ownConfig = { context: settings.context, entry: settings.entry, plugins: [].concat(_toConsumableArray(settings.plugins || []), [new _webpack.DllPlugin({ path: _path2.default.join(outputPath, '[name].manifest.json'), name: '[name]_[chunkhash]' })]), output: { filename: filename, library: '[name]_[chunkhash]' } }; var advanceConfig = settings.config; var cacheConfig = { // The user is not allowed to change output.path // otherwise bad things will happen. // (this is the path for the cache) output: { path: outputPath } }; return webpackMerge(parentConfig, ownConfig, advanceConfig, cacheConfig); }; }; exports.default = _createConfig(_paths.cacheDir);