add include/exclude tests and rewrite parser

This commit is contained in:
silverwind 2020-03-09 22:24:57 +01:00
parent 020a8d5e7c
commit 8ff5198107
Signed by: silverwind
GPG Key ID: 2E62B41C93869443
2 changed files with 35 additions and 18 deletions

20
test.js

@ -329,3 +329,23 @@ test("patch", makeTest("-j -P", {
},
},
}));
test("include version deps", makeTest("-j -i noty", {
dependencies: {
"noty": {
old: "3.1.0",
new: "3.2.0-beta",
info: "https://github.com/needim/noty",
},
},
}));
test("exclude version deps", makeTest("-j -e gulp-sourcemaps,prismjs,svgstore,html-webpack-plugin,noty,jpeg-buffer-orientation,styled-components,@babel/preset-env", {
dependencies: {
"updates": {
old: "6941e05",
new: "537ccb7",
info: "https://github.com/silverwind/updates",
},
},
}));

@ -149,9 +149,6 @@ const maxSockets = typeof args.sockets === "number" ? args.sockets : MAX_SOCKETS
const githubApiUrl = args.githubapi ? normalizeUrl(args.githubapi) : "https://api.github.com";
let packageFile;
const deps = {};
const maybeUrlDeps = {};
if (args.file) {
let stat;
try {
@ -201,27 +198,27 @@ try {
}
let include, exclude;
if (args.include && args.include !== true) include = args.include.split(",");
if (args.exclude && args.exclude !== true) exclude = args.exclude.split(",");
if (args.include && args.include !== true) include = new Set(args.include.split(","));
if (args.exclude && args.exclude !== true) exclude = new Set(args.exclude.split(","));
for (const key of dependencyTypes) {
if (pkg[key]) {
const names = Object.keys(pkg[key])
.filter(name => !include ? true : include.includes(name))
.filter(name => !exclude ? true : !exclude.includes(name));
function canInclude(name) {
if (exclude && exclude.has(name)) return false;
if (include && !include.has(name)) return false;
return true;
}
for (const name of names) {
const old = pkg[key][name];
if (semver.validRange(old)) {
deps[`${key}${sep}${name}`] = {old};
} else {
maybeUrlDeps[`${key}${sep}${name}`] = {old};
}
const deps = {}, maybeUrlDeps = {};
for (const depType of dependencyTypes) {
for (const [name, value] of Object.entries(pkg[depType] || {})) {
if (semver.validRange(value) && canInclude(name)) {
deps[`${depType}${sep}${name}`] = {old: value};
} else if (canInclude(name)) {
maybeUrlDeps[`${depType}${sep}${name}`] = {old: value};
}
}
}
if (!Object.keys(deps).length) {
if (!Object.keys(deps).length && !Object.keys(maybeUrlDeps).length) {
if (include || exclude) {
finish(new Error("No packages match the given filters"));
} else {