You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
925 B
33 lines
925 B
/* eslint-disable import/no-extraneous-dependencies */
|
|
const ruleMatcher = require('webpack/lib/ModuleFilenameHelpers').matchObject;
|
|
const isWebpack1 = require('./is-webpack-1');
|
|
const RuleSet = !isWebpack1 ? require('webpack/lib/RuleSet') : null;
|
|
|
|
/**
|
|
* @param {string} request
|
|
* @param {Rule[]} rules Webpack loaders config
|
|
* @return {Rule[]}
|
|
*/
|
|
function getMatchedRules(request, rules, issuer) {
|
|
const matchedRules = rules.filter((rule) => {
|
|
return typeof rule.test === 'function'
|
|
? rule.test(request)
|
|
: ruleMatcher(rule, request);
|
|
});
|
|
|
|
if (issuer) {
|
|
return matchedRules.filter((rule) => {
|
|
// If rule doesn't have an issuer or RuleSet is not available
|
|
if (!rule.issuer || !RuleSet) {
|
|
return true;
|
|
}
|
|
|
|
const matcher = RuleSet.normalizeCondition(rule.issuer);
|
|
return matcher(issuer);
|
|
});
|
|
}
|
|
|
|
return matchedRules;
|
|
}
|
|
|
|
module.exports = getMatchedRules;
|
|
|