Current File : //proc/self/root/kunden/kunden/kunden/lib/node_modules/npm-name-cli/node_modules/squatter/index.js |
'use strict';
const pOne = require('p-one');
const pEvery = require('p-every');
const fetchMeta = require('package-json');
const getPackage = require('./lib/get-package');
const recentPublish = require('./lib/recent-publish');
const significantDownloads = require('./lib/significant-downloads');
const unpublished = require('./lib/unpublished');
const hasReadme = require('./lib/has-readme');
const hasBinaryOrDependent = require('./lib/has-binary-or-dependent');
const hasProdVersion = require('./lib/has-prod-version');
const hasDependency = require('./lib/has-dependency');
const hasEngine = require('./lib/has-engine');
const hasFile = require('./lib/has-file');
const hasTest = require('./lib/has-test');
const hasKeyword = require('./lib/has-keyword');
const hasExtraMaintainer = require('./lib/has-extra-maintainer');
const exemptions = [
recentPublish,
significantDownloads
];
const usefulness = [
hasReadme,
hasBinaryOrDependent,
hasProdVersion
];
const quality = [
hasDependency,
hasEngine,
hasFile,
hasTest,
hasKeyword,
hasExtraMaintainer
];
const squatter = async (name, version = 'latest') => {
const meta = await fetchMeta(name, {
allVersions : true,
fullMetadata : true
});
if (unpublished(meta)) {
return false;
}
const pkg = getPackage(meta, version);
const isExempt = await pOne(exemptions, (test) => {
return test(pkg, meta);
});
if (isExempt) {
return false;
}
const isUseful = await pEvery(usefulness, (test) => {
return test(pkg, meta);
});
if (isUseful) {
return false;
}
const minQualityPercent = 80;
const passingQuality = (minQualityPercent / 100) * quality.length;
const qualityScore = quality.reduce((score, test) => {
return score + Number(test(pkg, meta));
}, 0);
return qualityScore < passingQuality;
};
module.exports = squatter;