breaking: remove --semver option, add --patch and --minor instead - fixes #14

This commit is contained in:
silverwind 2018-12-21 23:17:39 +01:00
parent 8f8ad1d59f
commit f9bbf1e9ef
Signed by: silverwind
GPG Key ID: 2E62B41C93869443
2 changed files with 42 additions and 31 deletions

@ -25,7 +25,8 @@ usage: updates [options]
-i, --include <pkg,...> Include only given packages -i, --include <pkg,...> Include only given packages
-e, --exclude <pkg,...> Exclude given packages -e, --exclude <pkg,...> Exclude given packages
-t, --types <type,...> Check only given dependency types -t, --types <type,...> Check only given dependency types
-s, --semver patch|minor Consider only up to given semver level -P, --patch [<pkg,...>] Consider only up to semver-patch
-m, --minor [<pkg,...>] Consider only up to semver-minor
-E, --error-on-outdated Exit with error code 2 on outdated packages -E, --error-on-outdated Exit with error code 2 on outdated packages
-r, --registry <url> Use given registry URL -r, --registry <url> Use given registry URL
-f, --file <path> Use given package.json file or module directory -f, --file <path> Use given package.json file or module directory
@ -48,18 +49,18 @@ usage: updates [options]
### Check for updates ### Check for updates
```console ```console
$ updates $ updates
NAME OLD NEW NAME OLD NEW INFO
chalk 1.3.0 2.3.0 string-width 2.1.1 3.0.0 https://github.com/sindresorhus/string-width
got ^7.0.1 ^8.0.1 eslint 5.9.0 5.10.0 https://github.com/eslint/eslint
minimist ^1.0.0 ^1.2.0 eslint-config-silverwind 2.0.11 2.0.12 https://github.com/silverwind/eslint-config-silverwind
``` ```
### Update package.json ### Update package.json
```console ```console
$ updates -u $ updates -u
NAME OLD NEW NAME OLD NEW INFO
chalk 1.3.0 2.3.0 string-width 2.1.1 3.0.0 https://github.com/sindresorhus/string-width
got ^7.0.1 ^8.0.1 eslint 5.9.0 5.10.0 https://github.com/eslint/eslint
minimist ^1.0.0 ^1.2.0 eslint-config-silverwind 2.0.11 2.0.12 https://github.com/silverwind/eslint-config-silverwind
╭────────────────────────╮ ╭────────────────────────╮
│ package.json updated │ │ package.json updated │
╰────────────────────────╯ ╰────────────────────────╯
@ -72,17 +73,20 @@ The JSON output is an object with possible properties `results`, `message` and `
$ updates -j | jq $ updates -j | jq
{ {
"results": { "results": {
"chalk": { "string-width": {
"old": "1.3.0", "old": "2.1.1",
"new": "2.3.0" "new": "3.0.0",
"info": "https://github.com/sindresorhus/string-width"
}, },
"got": { "eslint": {
"old": "^7.0.1", "old": "5.9.0",
"new": "^8.0.1" "new": "5.10.0",
"info": "https://github.com/eslint/eslint"
}, },
"minimist": { "eslint-config-silverwind": {
"old": "^1.0.0", "old": "2.0.11",
"new": "^1.2.0" "new": "2.0.12",
"info": "https://github.com/silverwind/eslint-config-silverwind"
} }
} }
} }

@ -16,10 +16,11 @@ const args = require("minimist")(process.argv.slice(2), {
string: [ string: [
"f", "file", "f", "file",
"g", "greatest", "g", "greatest",
"m", "minor",
"P", "patch",
"p", "prerelease", "p", "prerelease",
"r", "registry", "r", "registry",
"t", "types", "t", "types",
"s", "semver",
], ],
default: { default: {
"registry": "https://registry.npmjs.org/", "registry": "https://registry.npmjs.org/",
@ -33,7 +34,9 @@ const args = require("minimist")(process.argv.slice(2), {
h: "help", h: "help",
i: "include", i: "include",
j: "json", j: "json",
m: "minor",
n: "no-color", n: "no-color",
P: "patch",
p: "prerelease", p: "prerelease",
r: "registry", r: "registry",
s: "semver", s: "semver",
@ -53,7 +56,8 @@ if (args.help) {
-i, --include <pkg,...> Include only given packages -i, --include <pkg,...> Include only given packages
-e, --exclude <pkg,...> Exclude given packages -e, --exclude <pkg,...> Exclude given packages
-t, --types <type,...> Check only given dependency types -t, --types <type,...> Check only given dependency types
-s, --semver patch|minor Consider only up to given semver level -P, --patch [<pkg,...>] Consider only up to semver-patch
-m, --minor [<pkg,...>] Consider only up to semver-minor
-E, --error-on-outdated Exit with error code 2 on outdated packages -E, --error-on-outdated Exit with error code 2 on outdated packages
-r, --registry <url> Use given registry URL -r, --registry <url> Use given registry URL
-f, --file <path> Use given package.json file or module directory -f, --file <path> Use given package.json file or module directory
@ -85,6 +89,8 @@ if (args["no-color"]) process.env.FORCE_COLOR = "0";
const greatest = parseMixedArg(args.greatest); const greatest = parseMixedArg(args.greatest);
const prerelease = parseMixedArg(args.prerelease); const prerelease = parseMixedArg(args.prerelease);
const patch = parseMixedArg(args.patch);
const minor = parseMixedArg(args.minor);
const registry = args.registry.endsWith("/") ? args.registry : args.registry + "/"; const registry = args.registry.endsWith("/") ? args.registry : args.registry + "/";
@ -111,15 +117,6 @@ if (args.types) {
]; ];
} }
let semvers;
if (args.semver === "patch") {
semvers = ["patch"];
} else if (args.semver === "minor") {
semvers = ["patch", "minor"];
} else {
semvers = ["patch", "minor", "major"];
}
const fs = require("fs"); const fs = require("fs");
let pkg, pkgStr; let pkg, pkgStr;
const deps = {}; const deps = {};
@ -193,8 +190,18 @@ Promise.all(Object.keys(deps).map(name => get(name))).then(dati => {
for (const data of dati) { for (const data of dati) {
const useGreatest = typeof greatest === "boolean" ? greatest : greatest.includes(data.name); const useGreatest = typeof greatest === "boolean" ? greatest : greatest.includes(data.name);
const usePre = typeof prerelease === "boolean" ? prerelease : prerelease.includes(data.name); const usePre = typeof prerelease === "boolean" ? prerelease : prerelease.includes(data.name);
let semvers;
if (patch === true || Array.isArray(patch) && patch.includes(data.name)) {
semvers = ["patch"];
} else if (minor === true || Array.isArray(minor) && minor.includes(data.name)) {
semvers = ["patch", "minor"];
} else {
semvers = ["patch", "minor", "major"];
}
const oldRange = deps[data.name].old; const oldRange = deps[data.name].old;
const newVersion = findNewVersion(data, {usePre, useGreatest, range: oldRange}); const newVersion = findNewVersion(data, {usePre, useGreatest, semvers, range: oldRange});
const newRange = updateRange(oldRange, newVersion); const newRange = updateRange(oldRange, newVersion);
if (!newVersion || oldRange === newRange) { if (!newVersion || oldRange === newRange) {
@ -335,7 +342,7 @@ function findNewVersion(data, opts) {
} }
if ((diff === null) || if ((diff === null) ||
(semvers.includes(diff) && semver.gte(parsed.version, newVersion[0])) || (opts.semvers.includes(diff) && semver.gte(parsed.version, newVersion[0])) ||
(opts.usePre && diff === "prerelease")) { (opts.usePre && diff === "prerelease")) {
if (opts.useGreatest && semver.gt(parsed.version, newVersion[0])) { if (opts.useGreatest && semver.gt(parsed.version, newVersion[0])) {
newVersion[0] = parsed.version; newVersion[0] = parsed.version;