putout
Version:
the pluggable code transformer
51 lines (38 loc) • 1.21 kB
JavaScript
;
const {dirname} = require('path');
const escalade = require('escalade/sync');
const merge = require('../merge');
const parseMatch = require('./parse-match');
module.exports = (name, configName, overrides) => {
if (name === '<input>')
return ['', {}];
const customRequire = overrides?.require || require;
const dir = dirname(name);
const [mainDir, optionsList] = getOptionsList({
dir,
configName,
customRequire,
});
let mergedOptions = merge(...optionsList);
for (const currentOptions of optionsList.reverse())
mergedOptions = merge(
mergedOptions,
currentOptions,
parseMatch(
name,
currentOptions.match,
),
);
return [mainDir, mergedOptions];
};
function getOptionsList({dir, configName, customRequire}) {
let mainDir;
const optionsList = [];
escalade(dir, (dir, names) => {
if (!names.includes(configName))
return;
mainDir = mainDir || dir;
optionsList.push(customRequire(`${dir}/${configName}`));
});
return [mainDir, optionsList];
}