@ima/cli
Version:
IMA.js CLI tool to build, develop and work with IMA.js applications.
89 lines (88 loc) • 2.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findLoader = findLoader;
exports.findRules = findRules;
/**
* Recursively finds a reference to a given loader.
*/
function findLoader(rule, loader) {
if (Array.isArray(rule)) {
// Flatten all loader results from recursive calls
const results = [];
for (const r of rule) {
const loaderResults = findLoader(r, loader);
if (loaderResults) {
results.push(...loaderResults);
}
}
return results.length > 0 ? results : null;
}
// Return the loader configuration object, not the whole rule
if (rule.loader?.includes(loader)) {
return [rule.loader];
}
// Flatten all loader results from oneOf
if (rule.oneOf) {
const results = [];
for (const r of rule.oneOf) {
if (Array.isArray(r)) {
for (const subRule of r) {
const loaderResults = findLoader(subRule, loader);
if (loaderResults) {
results.push(...loaderResults);
}
}
}
else if (typeof r === 'object' && r) {
const loaderResults = findLoader(r, loader);
if (loaderResults) {
results.push(...loaderResults);
}
}
}
return results.length > 0 ? results : null;
}
if (Array.isArray(rule.use)) {
const result = rule.use.filter(r => {
if ((typeof r === 'string' && r.includes(loader)) ||
(typeof r === 'object' && r?.loader?.includes(loader))) {
return true;
}
return false;
});
return result.length > 0 ? result : null;
}
return null;
}
/**
* Helper for finding rules with given loader in webpack config.
*/
function findRules(config, testString, loader) {
const foundRules = [];
const rules = config.module?.rules;
if (!rules) {
return [];
}
(function recurseFindRules(rule) {
if (Array.isArray(rule)) {
for (const r of rule) {
recurseFindRules(r);
}
return;
}
if (rule.test &&
((typeof rule.test === 'function' && rule.test(testString)) ||
(rule.test instanceof RegExp && rule.test.test(testString)) ||
(typeof rule.test === 'string' && rule.test === testString))) {
foundRules.push(rule);
}
if (rule.oneOf) {
return recurseFindRules(rule.oneOf);
}
})(rules);
if (!loader) {
return foundRules;
}
// Remove duplicates
return Array.from(new Set(findLoader(foundRules, loader) ?? []));
}