"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _resolve = _interopRequireDefault(require("./resolve")); exports.onCreateWebpackConfig = ({ actions, stage, rules, plugins, loaders }, _ref) => { let { cssLoaderOptions = {}, postCssPlugins, useResolveUrlLoader, sassRuleTest, sassRuleModulesTest } = _ref, sassOptions = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["cssLoaderOptions", "postCssPlugins", "useResolveUrlLoader", "sassRuleTest", "sassRuleModulesTest"]); const { setWebpackConfig } = actions; const PRODUCTION = stage !== `develop`; const isSSR = stage.includes(`html`); const sassLoader = { loader: (0, _resolve.default)(`sass-loader`), options: Object.assign({ sourceMap: useResolveUrlLoader ? true : !PRODUCTION }, sassOptions) }; const sassRule = { test: sassRuleTest || /\.s(a|c)ss$/, use: isSSR ? [loaders.null()] : [loaders.miniCssExtract(), loaders.css(Object.assign({}, cssLoaderOptions, { importLoaders: 2 })), loaders.postcss({ plugins: postCssPlugins }), sassLoader] }; const sassRuleModules = { test: sassRuleModulesTest || /\.module\.s(a|c)ss$/, use: [!isSSR && loaders.miniCssExtract({ hmr: false }), loaders.css(Object.assign({}, cssLoaderOptions, { modules: true, importLoaders: 2 })), loaders.postcss({ plugins: postCssPlugins }), sassLoader].filter(Boolean) }; if (useResolveUrlLoader && !isSSR) { sassRule.use.splice(-1, 0, { loader: `resolve-url-loader`, options: useResolveUrlLoader.options ? useResolveUrlLoader.options : {} }); sassRuleModules.use.splice(-1, 0, { loader: `resolve-url-loader`, options: useResolveUrlLoader.options ? useResolveUrlLoader.options : {} }); } let configRules = []; switch (stage) { case `develop`: case `build-javascript`: case `build-html`: case `develop-html`: configRules = configRules.concat([{ oneOf: [sassRuleModules, sassRule] }]); break; } setWebpackConfig({ module: { rules: configRules } }); };