UNPKG

1.81 kBJavaScriptView Raw
1const merge = require('deepmerge');
2const defaults = require('./config');
3const utils = require('./utils');
4
5const loaderDefaults = defaults.loader;
6const isomorphicSpriteModule = require.resolve('../runtime/sprite.build');
7const isomorphicSymbolModule = require.resolve('svg-baker-runtime/symbol');
8
9const isTargetBrowser = target => target === 'web' || target === 'electron-renderer';
10
11/**
12 * @param {Object} params
13 * @param {Object} [params.config] Parsed loader config {@see SVGSpriteLoaderConfig}
14 * @param {LoaderContext} context Loader context {@see https://webpack.js.org/api/loaders/#the-loader-context}
15 * @return {Object}
16 */
17module.exports = function configurator({ config, context, target }) {
18 const module = context._module;
19 const compiler = context._compiler;
20 const compilerName = compiler.name;
21
22 const autoConfigured = {
23 spriteModule: isTargetBrowser(target) ? loaderDefaults.spriteModule : isomorphicSpriteModule,
24 symbolModule: isTargetBrowser(target) ? loaderDefaults.symbolModule : isomorphicSymbolModule,
25 extract: utils.isModuleShouldBeExtracted(module),
26 esModule: context.version && context.version >= 2
27 };
28
29 const finalConfig = merge.all([loaderDefaults, autoConfigured, config || {}]);
30
31 /**
32 * esModule should be `false` when compiles via extract-text-webpack-plugin or html-webpack-plugin.
33 * Because this compilers executes module as usual node module so export should be always in commonjs style.
34 * This could be dropped when Node.js will support ES modules natively :)
35 * @see https://git.io/vS7Sn
36 * @see https://git.io/v9w60
37 */
38 if (compilerName && (
39 compilerName.includes('extract-text-webpack-plugin') ||
40 compilerName.includes('html-webpack-plugin')
41 )) {
42 finalConfig.esModule = false;
43 }
44
45 return finalConfig;
46};