35 lines
897 B
JavaScript
35 lines
897 B
JavaScript
|
const normalizeRule = require('./normalize-rule');
|
||
|
const isWebpack1 = require('./is-webpack-1');
|
||
|
|
||
|
/**
|
||
|
* webpack 1 compat loader options finder. Returns normalized options.
|
||
|
* @param {string} loaderPath
|
||
|
* @param {Object|Rule} rule
|
||
|
* @return {Object|null}
|
||
|
*/
|
||
|
function getLoaderOptions(loaderPath, rule) {
|
||
|
let multiRuleProp;
|
||
|
|
||
|
if (isWebpack1) {
|
||
|
multiRuleProp = 'loaders';
|
||
|
} else if (rule.oneOf) {
|
||
|
multiRuleProp = 'oneOf';
|
||
|
} else {
|
||
|
multiRuleProp = 'use';
|
||
|
}
|
||
|
|
||
|
const multiRule = typeof rule === 'object' && Array.isArray(rule[multiRuleProp]) ? rule[multiRuleProp] : null;
|
||
|
let options;
|
||
|
|
||
|
if (multiRule) {
|
||
|
const rules = [].concat(...multiRule.map(r => (r.use || r)));
|
||
|
options = rules.map(normalizeRule).find(r => loaderPath.includes(r.loader)).options;
|
||
|
} else {
|
||
|
options = normalizeRule(rule).options;
|
||
|
}
|
||
|
|
||
|
return options;
|
||
|
}
|
||
|
|
||
|
module.exports = getLoaderOptions;
|