From 65955ef394a5f5d15ecfa3379ee88d17990554d0 Mon Sep 17 00:00:00 2001
From: silverwind
Date: Thu, 31 May 2018 19:33:22 +0200
Subject: [PATCH] don't return 255 code any more, misc tweaks
---
.eslintrc | 250 +--------------------------------------------------
README.md | 4 +-
package.json | 10 ++-
updates.js | 49 +++++-----
4 files changed, 34 insertions(+), 279 deletions(-)
diff --git a/.eslintrc b/.eslintrc
index c4bec68..3487193 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,250 +1,2 @@
-# https://github.com/eslint/eslint/tree/master/docs/rules
-
root: true
-
-parserOptions:
- ecmaVersion: 2017
-
-rules:
- accessor-pairs: [2]
- array-bracket-newline: [0]
- array-bracket-spacing: [2, never]
- array-callback-return: [0]
- array-element-newline: [0]
- arrow-body-style: [0]
- arrow-parens: [2, as-needed]
- arrow-spacing: [2, {before: true, after: true}]
- block-scoped-var: [2]
- brace-style: [2, 1tbs, {allowSingleLine: true}]
- camelcase: [2, {properties: never}]
- capitalized-comments: [0]
- class-methods-use-this: [2]
- comma-dangle: [0]
- comma-spacing: [2, {before: false, after: true}]
- comma-style: [2, last]
- complexity: [0]
- computed-property-spacing: [2, never]
- consistent-return: [0]
- constructor-super: [2]
- curly: [0]
- default-case: [0]
- dot-location: [2, property]
- dot-notation: [0]
- eol-last: [2]
- eqeqeq: [2]
- for-direction: [2]
- func-call-spacing: [2, never]
- func-name-matching: [2]
- func-names: [0]
- function-paren-newline: [0]
- generator-star-spacing: [2, before]
- global-require: [0]
- guard-for-in: [2]
- handle-callback-err: [2, ^(err|error)$]
- id-blacklist: [0]
- id-length: [0]
- id-match: [0]
- indent: [2, 2, {VariableDeclarator: 0}]
- jsx-quotes: [0]
- key-spacing: [0]
- keyword-spacing: [2]
- linebreak-style: [2, unix]
- lines-around-comment: [0]
- lines-around-directive: [0]
- lines-between-class-members: [2, never]
- max-len: [0]
- max-lines: [0]
- max-nested-callbacks: [0]
- max-params: [0]
- max-statements-per-line: [0]
- max-statements: [0]
- multiline-comment-style: [2, separate-lines]
- multiline-ternary: [0]
- new-cap: [0]
- new-parens: [2]
- newline-before-return: [0]
- newline-per-chained-call: [0]
- no-alert: [0]
- no-array-constructor: [0]
- no-await-in-loop: [0]
- no-bitwise: [0]
- no-buffer-constructor: [0] # enable for node 6
- no-caller: [2]
- no-case-declarations: [2]
- no-class-assign: [2]
- no-compare-neg-zero: [2]
- no-cond-assign: [2, except-parens]
- no-confusing-arrow: [0]
- no-const-assign: [2]
- no-constant-condition: [0]
- no-continue: [0]
- no-control-regex: [2]
- no-debugger: [2]
- no-delete-var: [2]
- no-div-regex: [0]
- no-dupe-args: [2]
- no-dupe-class-members: [2]
- no-dupe-keys: [2]
- no-duplicate-case: [2]
- no-duplicate-imports: [2]
- no-else-return: [0]
- no-empty-character-class: [2]
- no-empty-function: [0]
- no-empty-pattern: [2]
- no-empty: [2, {allowEmptyCatch: true}]
- no-eq-null: [2]
- no-eval: [2]
- no-ex-assign: [2]
- no-extend-native: [2]
- no-extra-bind: [2]
- no-extra-boolean-cast: [2]
- no-extra-label: [0]
- no-extra-parens: [0]
- no-extra-semi: [2]
- no-fallthrough: [2]
- no-floating-decimal: [0]
- no-func-assign: [2]
- no-global-assign: [2]
- no-implicit-coercion: [0]
- no-implicit-globals: [0]
- no-implied-eval: [2]
- no-inline-comments: [0]
- no-inner-declarations: [2]
- no-invalid-regexp: [2]
- no-invalid-this: [0]
- no-irregular-whitespace: [2]
- no-iterator: [2]
- no-label-var: [2]
- no-labels: [2]
- no-lone-blocks: [2]
- no-lonely-if: [0]
- no-loop-func: [0]
- no-magic-numbers: [0]
- no-mixed-operators: [0]
- no-mixed-requires: [2, true]
- no-mixed-spaces-and-tabs: [2]
- no-multi-spaces:
- - 2
- - ignoreEOLComments: true
- exceptions:
- VariableDeclarator: true
- ImportDeclaration: true
- Property: true
- no-multi-str: [2]
- no-multiple-empty-lines: [2, {max: 1, maxEOF: 0, maxBOF: 0}]
- no-native-reassign: [2]
- no-negated-condition: [0]
- no-negated-in-lhs: [2]
- no-nested-ternary: [0]
- no-new-func: [2]
- no-new-object: [2]
- no-new-require: [2]
- no-new-symbol: [2]
- no-new-wrappers: [2]
- no-new: [0]
- no-obj-calls: [2]
- no-octal-escape: [2]
- no-octal: [2]
- no-path-concat: [2]
- no-process-exit: [0]
- no-proto: [2]
- no-redeclare: [2]
- no-regex-spaces: [2]
- no-restricted-imports: [0]
- no-restricted-modules: [2, domain, freelist, smalloc, sys]
- no-restricted-syntax: [2, WithStatement]
- no-return-assign: [0]
- no-return-await: [0]
- no-script-url: [2]
- no-self-assign: [2, {props: true}]
- no-self-compare: [2]
- no-sequences: [2]
- no-shadow-restricted-names: [2]
- no-shadow: [0]
- no-spaced-func: [2]
- no-sparse-arrays: [2]
- no-tabs: [2]
- no-template-curly-in-string: [2]
- no-this-before-super: [2]
- no-throw-literal: [2]
- no-trailing-spaces: [2]
- no-undef-init: [2]
- no-undef: [2]
- no-undefined: [0]
- no-underscore-dangle: [0]
- no-unexpected-multiline: [2]
- no-unmodified-loop-condition: [2]
- no-unneeded-ternary: [2]
- no-unreachable: [2]
- no-unsafe-finally: [2]
- no-unsafe-negation: [2]
- no-unused-expressions: [2]
- no-unused-labels: [0]
- no-unused-vars: [2, {args: all, argsIgnorePattern: ^_, varsIgnorePattern: ^_}]
- no-use-before-define: [2, nofunc]
- no-useless-call: [2]
- no-useless-computed-key: [2]
- no-useless-concat: [2]
- no-useless-constructor: [2]
- no-useless-escape: [2]
- no-var: [2]
- no-warning-comments: [0]
- no-whitespace-before-property: [2]
- no-with: [2]
- nonblock-statement-body-position: [2]
- object-curly-newline: [0]
- object-curly-spacing: [2, never]
- object-shorthand: [0]
- one-var-declaration-per-line: [0]
- one-var: [0]
- operator-assignment: [2, always]
- operator-linebreak: [2, after]
- padded-blocks: [2, never]
- prefer-arrow-callback: [2]
- prefer-const: [2]
- prefer-destructuring: [0]
- prefer-numeric-literals: [2]
- prefer-promise-reject-errors: [2, {allowEmptyReject: false}]
- prefer-reflect: [0]
- prefer-rest-params: [2]
- prefer-spread: [2]
- prefer-template: [0]
- quote-props: [0]
- quotes: [2, double, {avoidEscape: true, allowTemplateLiterals: true}]
- radix: [2, as-needed]
- require-await: [0]
- require-jsdoc: [0]
- require-yield: [2]
- semi-spacing: [2, {before: false, after: true}]
- semi-style: [2, last]
- semi: [2, always]
- sort-imports: [0]
- sort-keys: [0]
- space-before-blocks: [2, always]
- space-before-function-paren: [2, {anonymous: never, named: never, asyncArrow: always}]
- space-in-parens: [2, never]
- space-infix-ops: [2]
- space-unary-ops: [2]
- spaced-comment: [2, always, {markers: ["!"]}]
- strict: [0]
- switch-colon-spacing: [2]
- symbol-description: [2]
- template-curly-spacing: [2, never]
- template-tag-spacing: [2, never]
- unicode-bom: [2, never]
- use-isnan: [2]
- valid-typeof: [2]
- wrap-iife: [2, inside]
- wrap-regex: [0]
- yield-star-spacing: [2, {before: true, after: false}]
- yoda: [2, never]
-
-env:
- amd: true
- browser: true
- commonjs: true
- es6: true
- greasemonkey: true
- jquery: true
- mocha: true
- node: true
+extends: eslint-config-silverwind
diff --git a/README.md b/README.md
index dc81d25..465f1e9 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
-`updates` is a CLI tool which checks for dependency updates of the current project and optionally updates `package.json`. It is typically able to complete in less than a second. It can output JSON for interop with other tools.
+`updates` is a CLI tool which checks for npm dependency updates of the current project and optionally updates `package.json`. It is typically able to complete in less than a second.
## Install
@@ -34,7 +34,7 @@ package.json updated!
```
### JSON Output
-The resulting JSON object always has the key `results` which lists available updates. Additionally, `message` and `error` properties can be present.
+`updates` can output JSON. The result is always an object with the key `results` and depending on operation, , `message` and `error` properties can also be present.
```console
$ updates -j
diff --git a/package.json b/package.json
index 3753af4..64cd548 100644
--- a/package.json
+++ b/package.json
@@ -14,11 +14,14 @@
"test": "make test"
},
"keywords": [
+ "dependencies",
"update",
+ "updates",
+ "check",
+ "checker",
"npm",
"yarn",
- "packages",
- "dependencies"
+ "packages"
],
"files": [
"updates.js"
@@ -33,6 +36,7 @@
"semver": "^5.5.0"
},
"devDependencies": {
- "eslint": "^4.19.1"
+ "eslint": "^4.19.1",
+ "eslint-config-silverwind": "^1.0.42"
}
}
diff --git a/updates.js b/updates.js
index b1ee3dc..8a89892 100755
--- a/updates.js
+++ b/updates.js
@@ -3,17 +3,21 @@
const args = require("minimist")(process.argv.slice(2), {
boolean: [
- "update", "u", "json", "j", "color", "no-color", "version", "v",
- "help", "h", "prerelease", "p"
+ "color", "no-color",
+ "help", "h",
+ "json", "j",
+ "prerelease", "p",
+ "update", "u",
+ "version", "v",
],
alias: {
- u: "update",
- p: "prerelease",
- i: "include",
e: "exclude",
+ h: "help",
+ i: "include",
j: "json",
+ p: "prerelease",
+ u: "update",
v: "version",
- h: "help"
},
});
@@ -21,20 +25,15 @@ if (args.help) {
process.stdout.write(`usage: updates [options]
Options:
- -u, --update Update package.json
- -p, --prerelease Consider prerelease versions
- -j, --json Output a JSON object
- -i, --include Only include given packages
- -e, --exclude Exclude given packages
- -c, --color Force-enable color output
- -n, --no-color Disable color output
- -v, --version Print the version
- -h, --help Print this help
-
- Exit Codes:
- 0 Success
- 1 Error
- 255 Dependencies are up to date
+ -u, --update Update package.json
+ -p, --prerelease Consider prerelease versions
+ -j, --json Output a JSON object
+ -i, --include Only include given packages
+ -e, --exclude Exclude given packages
+ -c, --color Force-enable color output
+ -n, --no-color Disable color output
+ -v, --version Print the version
+ -h, --help Print this help
Examples:
$ updates
@@ -79,13 +78,13 @@ const deps = {};
try {
pkgStr = fs.readFileSync(packageFile, "utf8");
} catch (err) {
- finish(new Error("Unable to open package.json"));
+ finish(new Error(`Unable to open package.json: ${err.message}`));
}
try {
pkg = JSON.parse(pkgStr);
} catch (err) {
- finish(new Error("Error parsing package.json:" + err.message));
+ finish(new Error(`Error parsing package.json: ${err.message}`));
}
let include, exclude;
@@ -127,7 +126,7 @@ Promise.all(Object.keys(deps).map(dep => rp(url + dep))).then(responses => {
// log results
if (!Object.keys(deps).length) {
- finish("All packages are up to date.", {exitCode: 255});
+ finish("All packages are up to date.");
}
// exit if -u is not given
@@ -137,7 +136,7 @@ Promise.all(Object.keys(deps).map(dep => rp(url + dep))).then(responses => {
fs.writeFile(packageFile, updatePkg(), "utf8", err => {
if (err) {
- finish(new Error("Error writing package.json:" + err.message));
+ finish(new Error(`Error writing package.json: ${err.message}`));
} else {
finish("package.json updated!");
}
@@ -201,7 +200,7 @@ function formatDeps() {
"new": highlightDiff(deps[dep].new, deps[dep].old, true),
};
}), {
- columnSplitter: " ",
+ columnSplitter: " ".repeat(4),
});
}