@now/build-utils
Version:
61 lines (60 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectFramework = void 0;
async function matches(fs, framework) {
const { detectors } = framework;
if (!detectors) {
return false;
}
const { every, some } = detectors;
if (every !== undefined && !Array.isArray(every)) {
return false;
}
if (some !== undefined && !Array.isArray(some)) {
return false;
}
const check = async ({ path, matchContent }) => {
if (!path) {
return false;
}
if ((await fs.hasPath(path)) === false) {
return false;
}
if (matchContent) {
if ((await fs.isFile(path)) === false) {
return false;
}
const regex = new RegExp(matchContent, 'gm');
const content = await fs.readFile(path);
if (!regex.test(content.toString())) {
return false;
}
}
return true;
};
const result = [];
if (every) {
const everyResult = await Promise.all(every.map(item => check(item)));
result.push(...everyResult);
}
if (some) {
let someResult = false;
for (const item of some) {
if (await check(item)) {
someResult = true;
break;
}
}
result.push(someResult);
}
return result.every(res => res === true);
}
async function detectFramework({ fs, frameworkList, }) {
for (const framework of frameworkList) {
if (await matches(fs, framework)) {
return framework.slug;
}
}
return null;
}
exports.detectFramework = detectFramework;