/* eslint-disable import/no-extraneous-dependencies */ /* eslint-disable import/no-unresolved */ /* eslint-disable no-restricted-syntax */ // eslint-disable-next-line import/no-extraneous-dependencies const BasicEffectRulePlugin = require('webpack/lib/rules/BasicEffectRulePlugin'); const BasicMatcherRulePlugin = require('webpack/lib/rules/BasicMatcherRulePlugin'); const RuleSetCompiler = require('webpack/lib/rules/RuleSetCompiler'); const UseEffectRulePlugin = require('webpack/lib/rules/UseEffectRulePlugin'); const ruleSetCompiler = new RuleSetCompiler([ new BasicMatcherRulePlugin('test', 'resource'), new BasicMatcherRulePlugin('include', 'resource'), new BasicMatcherRulePlugin('exclude', 'resource', true), new BasicMatcherRulePlugin('resource'), new BasicMatcherRulePlugin('conditions'), new BasicMatcherRulePlugin('resourceQuery'), new BasicMatcherRulePlugin('realResource'), new BasicMatcherRulePlugin('issuer'), new BasicMatcherRulePlugin('compiler'), new BasicEffectRulePlugin('type'), new BasicEffectRulePlugin('sideEffects'), new BasicEffectRulePlugin('parser'), new BasicEffectRulePlugin('resolve'), new UseEffectRulePlugin() ]); // const RuleSet = require('webpack/lib/RuleSet'); const flattenAndExtractUse = rules => rules.reduce((pre, rule) => { // if ('rules' in rule || 'oneOf' in rule) { // return pre.concat(flattenAndExtractUse(rule.rules || rule.oneOf)); // } return pre.concat(rule || []); }, []); module.exports = (compiler) => { const rawRules = compiler.options.module.rules; const rulesUse = []; for (const rawRule of rawRules) { const clonedRawRule = Object.assign({}, rawRule); delete clonedRawRule.include; const ruleSet = ruleSetCompiler.compile([{ rules: [clonedRawRule] }]); rulesUse.push(ruleSet.exec({ resource: '.svg' })); } // const { // rules // } = ruleSet; const rule = flattenAndExtractUse(rulesUse) .find((item) => { return /svg-sprite-loader/.test(item.value.loader); }) || {}; return rule.value ? rule.value.options : {}; };