UNPKG

@ima/cli

Version:

IMA.js CLI tool to build, develop and work with IMA.js applications.

89 lines (88 loc) 2.84 kB
"use strict"; 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) ?? [])); }