From d04bfec0e732e1e9d8f105ecff6750ec9aa22df5 Mon Sep 17 00:00:00 2001 From: Joe Becher <71270647+drazisil-codecov@users.noreply.github.com> Date: Wed, 14 Apr 2021 16:25:15 -0400 Subject: [PATCH] chore: replace eslint with standard and lint (#49) * chore: replace eslint with standard and lint --- alpine_errors.txt | 3 - npm-shrinkwrap.json | 1279 +++++++++++++++++++++---- package.json | 33 +- src/ci_providers/index.js | 8 +- src/ci_providers/provider_circleci.js | 68 +- src/ci_providers/provider_local.js | 100 +- src/ci_providers/provider_template.js | 60 +- src/helpers/files.js | 207 ++-- src/helpers/validate.js | 24 +- src/helpers/web.js | 78 +- src/index.js | 130 +-- test/helpers/files.test.js | 127 ++- test/helpers/validate.test.js | 54 +- test/helpers/web.test.js | 140 ++- test/index.test.js | 20 +- test/providers/index.test.js | 147 ++- test/test_helpers.js | 1 - 17 files changed, 1654 insertions(+), 825 deletions(-) delete mode 100644 alpine_errors.txt diff --git a/alpine_errors.txt b/alpine_errors.txt deleted file mode 100644 index acf4ecf5e..000000000 --- a/alpine_errors.txt +++ /dev/null @@ -1,3 +0,0 @@ -Error loading shared library libstdc++.so.6: No such file or directory (needed by codecov) - -Error loading shared library libgcc_s.so.1: No such file or directory (needed by codecov) \ No newline at end of file diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 939a7d0b3..2691e4886 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -432,6 +432,44 @@ "minimist": "^1.2.0" } }, + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", @@ -872,6 +910,12 @@ "@types/istanbul-lib-report": "*" } }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/node": { "version": "13.13.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", @@ -934,9 +978,9 @@ } }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "acorn-walk": { @@ -957,6 +1001,12 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", @@ -1017,6 +1067,19 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1029,6 +1092,29 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1296,6 +1382,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1338,12 +1434,6 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1373,21 +1463,6 @@ } } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -1451,6 +1526,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -1587,6 +1668,15 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1704,6 +1794,15 @@ "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1713,6 +1812,41 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1733,21 +1867,23 @@ } }, "eslint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.0.0.tgz", - "integrity": "sha512-qY1cwdOxMONHJfGqw52UOpZDeqXy8xmD0u8CT6jIstil72jkhURC704W8CFyTPDPllz4z4lu0Ql1+07PG/XdIg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^7.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", "esquery": "^1.2.0", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -1757,12 +1893,11 @@ "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.14", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -1777,9 +1912,9 @@ }, "dependencies": { "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -1787,9 +1922,9 @@ } }, "cross-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", - "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -1834,10 +1969,13 @@ "dev": true }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "shebang-command": { "version": "2.0.0", @@ -1862,70 +2000,404 @@ "requires": { "prelude-ls": "^1.2.1" } + } + } + }, + "eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "isexe": "^2.0.0" + "ms": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" } } } }, - "eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { - "get-stdin": "^6.0.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" } }, - "eslint-plugin-prettier": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", - "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { - "prettier-linter-helpers": "^1.0.0" + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, "espree": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz", - "integrity": "sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -1935,29 +2407,37 @@ "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -2096,17 +2576,6 @@ } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -2184,12 +2653,6 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, "fast-glob": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", @@ -2239,15 +2702,6 @@ "bser": "2.1.1" } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", @@ -2362,6 +2816,12 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -2379,10 +2839,21 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, "get-stream": { @@ -2487,16 +2958,37 @@ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -2603,9 +3095,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -2642,25 +3134,15 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, "into-stream": { @@ -2705,12 +3187,33 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -2720,6 +3223,15 @@ "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2740,6 +3252,12 @@ } } }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -2798,12 +3316,24 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -2825,6 +3355,16 @@ "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", "dev": true }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", @@ -2837,6 +3377,21 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3823,6 +4378,16 @@ "verror": "1.10.0" } }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -3862,6 +4427,35 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -3882,6 +4476,24 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -4033,12 +4645,6 @@ "readable-stream": "^2.0.5" } }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -4172,6 +4778,12 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -4203,6 +4815,18 @@ } } }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -4212,6 +4836,42 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -4221,6 +4881,18 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4370,6 +5042,12 @@ "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -4417,6 +5095,93 @@ } } }, + "pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + } + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -4457,21 +5222,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, "pretty-format": { "version": "26.0.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.0.1.tgz", @@ -4506,6 +5256,17 @@ "sisteransi": "^1.0.4" } }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, "propagate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", @@ -4618,6 +5379,16 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -4747,16 +5518,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4784,27 +5545,12 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, "run-parallel": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", "dev": true }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -5030,6 +5776,17 @@ "dev": true, "optional": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -5318,6 +6075,34 @@ "tweetnacl": "~0.14.0" } }, + "standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "requires": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" + } + }, + "standard-engine": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", + "dev": true, + "requires": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -5374,6 +6159,41 @@ "strip-ansi": "^6.0.0" } }, + "string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5419,9 +6239,9 @@ "dev": true }, "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "superagent": { @@ -5625,21 +6445,6 @@ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -5712,11 +6517,34 @@ "punycode": "^2.1.1" } }, - "tslib": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.2.tgz", - "integrity": "sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg==", - "dev": true + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } }, "tunnel-agent": { "version": "0.6.0", @@ -5769,6 +6597,18 @@ "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5871,9 +6711,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { @@ -5997,6 +6837,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -6050,6 +6903,12 @@ "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", "dev": true }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -6067,6 +6926,12 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs": { "version": "15.3.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", diff --git a/package.json b/package.json index dfd36c3d9..c3fcc5126 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "private": true, "bin": "bin/codecov", "scripts": { - "lint": "eslint src", + "lint": "standard --fix", "test": "jest", "build-linux": "pkg . --targets linux --output out/codecov-linux", "build-macos": "pkg . --targets macos --output out/codecov-macos", @@ -31,14 +31,11 @@ "superagent": "5.2.2" }, "devDependencies": { - "eslint": "7.0.0", - "eslint-config-prettier": "6.11.0", - "eslint-plugin-prettier": "3.1.3", "expect": "26.0.1", "jest": "^26.0.1", "nock": "^12.0.3", "pkg": "^4.4.8", - "prettier": "2.0.5", + "standard": "16.0.3", "testdouble": "3.13.1", "testdouble-jest": "2.0.0" }, @@ -55,27 +52,6 @@ "src/index.js" ] }, - "eslintConfig": { - "env": { - "commonjs": true, - "es6": true, - "node": true, - "jest": true - }, - "extends": [ - "plugin:prettier/recommended" - ], - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly", - "td:": "readonly", - "expect": "readonly" - }, - "parserOptions": { - "ecmaVersion": 2018 - }, - "rules": {} - }, "jest": { "collectCoverage": true, "collectCoverageFrom": [ @@ -92,5 +68,10 @@ "setupFilesAfterEnv": [ "/test/test_helpers.js" ] + }, + "standard": { + "globals": [ + "expect", "it", "describe", "beforeEach", "afterEach" + ] } } diff --git a/src/ci_providers/index.js b/src/ci_providers/index.js index bfe390839..c8dc514dd 100644 --- a/src/ci_providers/index.js +++ b/src/ci_providers/index.js @@ -1,7 +1,7 @@ -const provider_circleci = require("./provider_circleci"); -const provider_local = require("./provider_local"); +const providerCircleci = require('./provider_circleci') +const providerLocal = require('./provider_local') // Please make sure provider_local is last -const providers = [provider_circleci, provider_local]; +const providers = [providerCircleci, providerLocal] -module.exports = providers; +module.exports = providers diff --git a/src/ci_providers/provider_circleci.js b/src/ci_providers/provider_circleci.js index 1020ced63..1aa4b4137 100644 --- a/src/ci_providers/provider_circleci.js +++ b/src/ci_providers/provider_circleci.js @@ -1,63 +1,63 @@ -function detect(envs) { - return envs.CI && envs.CIRCLECI; +function detect (envs) { + return envs.CI && envs.CIRCLECI } // eslint-disable-next-line no-unused-vars -function _getBuildURL(inputs) { - return ""; +function _getBuildURL (inputs) { + return '' } // This is the value that gets passed to the Codecov uploader -function _getService() { - return "circleci"; +function _getService () { + return 'circleci' } // This is the name that gets printed -function getServiceName() { - return "CircleCI"; +function getServiceName () { + return 'CircleCI' } -function _getBranch(inputs) { - const { args, envs } = inputs; - return args.branch || envs.CIRCLE_BRANCH; +function _getBranch (inputs) { + const { args, envs } = inputs + return args.branch || envs.CIRCLE_BRANCH } -function _getSHA(inputs) { - const { args, envs } = inputs; +function _getSHA (inputs) { + const { args, envs } = inputs try { - const sha = envs.CIRCLE_SHA1; - return args.sha || sha; + const sha = envs.CIRCLE_SHA1 + return args.sha || sha } catch (error) { - throw new Error(`There was an error getting the commit SHA: ${error}`); + throw new Error(`There was an error getting the commit SHA: ${error}`) } } -function _getSlug(inputs) { - const { args, envs } = inputs; - let slug; - if (envs.CIRCLE_PROJECT_REPONAME !== "") { - slug = `${envs.CIRCLE_PROJECT_USERNAME}/${envs.CIRCLE_PROJECT_REPONAME}`; +function _getSlug (inputs) { + const { args, envs } = inputs + let slug + if (envs.CIRCLE_PROJECT_REPONAME !== '') { + slug = `${envs.CIRCLE_PROJECT_USERNAME}/${envs.CIRCLE_PROJECT_REPONAME}` } else { - slug = `${envs.CIRCLE_REPOSITORY_URL}.git`; + slug = `${envs.CIRCLE_REPOSITORY_URL}.git` } - return args.slug || slug; + return args.slug || slug } -function _getBuild(inputs) { - const { args, envs } = inputs; - return args.build || envs.CIRCLE_BUILD_NUM || ""; +function _getBuild (inputs) { + const { args, envs } = inputs + return args.build || envs.CIRCLE_BUILD_NUM || '' } -function _getPR(inputs) { - const { args, envs } = inputs; - return args.pr || envs.CIRCLE_PR_NUMBER || ""; +function _getPR (inputs) { + const { args, envs } = inputs + return args.pr || envs.CIRCLE_PR_NUMBER || '' } -function _getJob(envs) { - return envs.CIRCLE_NODE_INDEX || ""; +function _getJob (envs) { + return envs.CIRCLE_NODE_INDEX || '' } -function getServiceParams(inputs) { +function getServiceParams (inputs) { return { branch: _getBranch(inputs), build: _getBuild(inputs), @@ -67,7 +67,7 @@ function getServiceParams(inputs) { pr: _getPR(inputs), service: _getService(), slug: _getSlug(inputs) - }; + } } module.exports = { @@ -84,4 +84,4 @@ module.exports = { detect, getServiceName, getServiceParams -}; +} diff --git a/src/ci_providers/provider_local.js b/src/ci_providers/provider_local.js index 0bc3fc626..a97de296b 100644 --- a/src/ci_providers/provider_local.js +++ b/src/ci_providers/provider_local.js @@ -1,102 +1,102 @@ -const child_process = require("child_process"); +const childprocess = require('child_process') -function detect(envs) { - return !envs.CI; +function detect (envs) { + return !envs.CI } -function _getBuild(inputs) { - const { args } = inputs; - return args.build || ""; +function _getBuild (inputs) { + const { args } = inputs + return args.build || '' } // eslint-disable-next-line no-unused-vars -function _getBuildURL(inputs) { - return ""; +function _getBuildURL (inputs) { + return '' } -function _getBranch(inputs) { - const { args } = inputs; +function _getBranch (inputs) { + const { args } = inputs try { - const branchName = child_process - .spawnSync("git", ["rev-parse", "--abbrev-ref", "HEAD"]) + const branchName = childprocess + .spawnSync('git', ['rev-parse', '--abbrev-ref', 'HEAD']) .stdout.toString() - .trimRight(); - return args.branch || branchName; + .trimRight() + return args.branch || branchName } catch (error) { throw new Error( `There was an error getting the branch name from git: ${error}` - ); + ) } } // eslint-disable-next-line no-unused-vars -function _getJob(envs) { - return ""; +function _getJob (envs) { + return '' } // eslint-disable-next-line no-unused-vars -function _getPR(inputs) { - return ""; +function _getPR (inputs) { + return '' } // This is the value that gets passed to the Codecov uploader -function _getService() { - return ""; +function _getService () { + return '' } // This is the name that gets printed -function getServiceName() { - return "Local"; +function getServiceName () { + return 'Local' } -function _getSHA(inputs) { - const { args } = inputs; +function _getSHA (inputs) { + const { args } = inputs try { - const sha = child_process - .spawnSync("git", ["rev-parse", "HEAD"]) + const sha = childprocess + .spawnSync('git', ['rev-parse', 'HEAD']) .stdout.toString() - .trimRight(); - return args.sha || sha; + .trimRight() + return args.sha || sha } catch (error) { throw new Error( `There was an error getting the commit SHA from git: ${error}` - ); + ) } } -function _parseSlug(slug) { +function _parseSlug (slug) { // origin https://github.com/torvalds/linux.git (fetch) // git@github.com: codecov / uploader.git - if (slug.match("http")) { + if (slug.match('http')) { // Type is http(s) - const phaseOne = slug.split("//")[1].replace(".git", ""); - const phaseTwo = phaseOne.split("/"); - let cleanSlug = `${phaseTwo[1]}/${phaseTwo[2]}`; - return cleanSlug; - } else if (slug.match("@")) { + const phaseOne = slug.split('//')[1].replace('.git', '') + const phaseTwo = phaseOne.split('/') + const cleanSlug = `${phaseTwo[1]}/${phaseTwo[2]}` + return cleanSlug + } else if (slug.match('@')) { // Type is git - let cleanSlug = slug.split(":")[1].replace(".git", ""); - return cleanSlug; + const cleanSlug = slug.split(':')[1].replace('.git', '') + return cleanSlug } - throw new Error(`Unable to parse slug URL: ${slug}`); + throw new Error(`Unable to parse slug URL: ${slug}`) } -function _getSlug(inputs) { - const { args } = inputs; +function _getSlug (inputs) { + const { args } = inputs try { - const slug = child_process - .spawnSync("git", ["config", "--get", "remote.origin.url"]) + const slug = childprocess + .spawnSync('git', ['config', '--get', 'remote.origin.url']) .stdout.toString() - .trimRight(); - return args.slug || _parseSlug(slug); + .trimRight() + return args.slug || _parseSlug(slug) } catch (error) { - throw new Error(`There was an error getting the slug from git: ${error}`); + throw new Error(`There was an error getting the slug from git: ${error}`) } } -function getServiceParams(inputs) { +function getServiceParams (inputs) { return { branch: _getBranch(inputs), build: _getBuild(inputs), @@ -106,7 +106,7 @@ function getServiceParams(inputs) { pr: _getPR(inputs), service: _getService(), slug: _getSlug(inputs) - }; + } } module.exports = { @@ -123,4 +123,4 @@ module.exports = { detect, getServiceName, getServiceParams -}; +} diff --git a/src/ci_providers/provider_template.js b/src/ci_providers/provider_template.js index 557ecf16b..775ca2ede 100644 --- a/src/ci_providers/provider_template.js +++ b/src/ci_providers/provider_template.js @@ -5,8 +5,8 @@ * @returns boolean */ // eslint-disable-next-line no-unused-vars -function detect(envs) { - return false; +function detect (envs) { + return false } /** @@ -15,9 +15,9 @@ function detect(envs) { * @param {args: {}, envs: {}} inputs an object of arguments and enviromental variable key/value pairs * @returns String */ -function _getBuild(inputs) { - const { args } = inputs; - return args.build || ""; +function _getBuild (inputs) { + const { args } = inputs + return args.build || '' } /** @@ -27,8 +27,8 @@ function _getBuild(inputs) { * @returns String */ // eslint-disable-next-line no-unused-vars -function _getBuildURL(inputs) { - return ""; +function _getBuildURL (inputs) { + return '' } /** @@ -37,14 +37,14 @@ function _getBuildURL(inputs) { * @param {args: {}, envs: {}} inputs an object of arguments and enviromental variable key/value pairs * @returns String */ -function _getBranch(inputs) { - const { args } = inputs; +function _getBranch (inputs) { + const { args } = inputs try { - return args.branch || ""; + return args.branch || '' } catch (error) { throw new Error( `There was an error getting the branch name from git: ${error}` - ); + ) } } @@ -55,8 +55,8 @@ function _getBranch(inputs) { * @returns String */ // eslint-disable-next-line no-unused-vars -function _getJob(envs) { - return ""; +function _getJob (envs) { + return '' } /** @@ -66,8 +66,8 @@ function _getJob(envs) { * @returns String */ // eslint-disable-next-line no-unused-vars -function _getPR(inputs) { - return ""; +function _getPR (inputs) { + return '' } /** @@ -75,8 +75,8 @@ function _getPR(inputs) { * * @returns String */ -function _getService() { - return ""; +function _getService () { + return '' } /** @@ -84,8 +84,8 @@ function _getService() { * * @returns */ -function getServiceName() { - return ""; +function getServiceName () { + return '' } /** * Determine the commit SHA that is being uploaded, based on args or envs @@ -93,14 +93,14 @@ function getServiceName() { * @param {args: {}, envs: {}} inputs an object of arguments and enviromental variable key/value pairs * @returns String */ -function _getSHA(inputs) { - const { args } = inputs; +function _getSHA (inputs) { + const { args } = inputs try { - return args.sha || ""; + return args.sha || '' } catch (error) { throw new Error( `There was an error getting the commit SHA from git: ${error}` - ); + ) } } /** @@ -109,12 +109,12 @@ function _getSHA(inputs) { * @param {args: {}, envs: {}} inputs an object of arguments and enviromental variable key/value pairs * @returns String */ -function _getSlug(inputs) { - const { args } = inputs; +function _getSlug (inputs) { + const { args } = inputs try { - return args.slug || ""; + return args.slug || '' } catch (error) { - throw new Error(`There was an error getting the slug from git: ${error}`); + throw new Error(`There was an error getting the slug from git: ${error}`) } } /** @@ -123,7 +123,7 @@ function _getSlug(inputs) { * @param {args: {}, envs: {}} inputs an object of arguments and enviromental variable key/value pairs * @returns { branch: String, build: String, buildURL: String, commit: String, job: String, pr: String, service: String, slug: String} */ -function getServiceParams(inputs) { +function getServiceParams (inputs) { return { branch: _getBranch(inputs), build: _getBuild(inputs), @@ -133,7 +133,7 @@ function getServiceParams(inputs) { pr: _getPR(inputs), service: _getService(), slug: _getSlug(inputs) - }; + } } module.exports = { @@ -150,4 +150,4 @@ module.exports = { detect, getServiceName, getServiceParams -}; +} diff --git a/src/helpers/files.js b/src/helpers/files.js index 57b36d34b..4a016808f 100644 --- a/src/helpers/files.js +++ b/src/helpers/files.js @@ -1,181 +1,180 @@ -const child_process = require("child_process"); -const fs = require("fs"); -const path = require("path"); -const glob = require("glob"); +const childProcess = require('child_process') +const fs = require('fs') +const path = require('path') +const glob = require('glob') -async function getFileListing(projectRoot) { - return getAllFiles(projectRoot, projectRoot).join(""); +async function getFileListing (projectRoot) { + return getAllFiles(projectRoot, projectRoot).join('') } -function manualBlacklist() { +function manualBlacklist () { // TODO: honor the .gitignore file instead of a hard-coded list return [ - "node_modules", - ".git", - ".nyc_output", - ".circleci", - ".nvmrc", - ".gitignore" - ]; + 'node_modules', + '.git', + '.nyc_output', + '.circleci', + '.nvmrc', + '.gitignore' + ] } -function globBlacklist() { +function globBlacklist () { // TODO: honor the .gitignore file instead of a hard-coded list return [ - "node_modules/**/*", - ".git", - ".nyc_output", - ".circleci", - ".nvmrc", - ".gitignore" - ]; + 'node_modules/**/*', + '.git', + '.nyc_output', + '.circleci', + '.nvmrc', + '.gitignore' + ] } -function coverageFilePatterns() { +function coverageFilePatterns () { return [ - "*coverage*.*", - "nosetests.xml", - "jacoco*.xml", - "clover.xml", - "report.xml", - "*.codecov.*", - "codecov.*", - "cobertura.xml", - "excoveralls.json", - "luacov.report.out", - "coverage-final.json", - "naxsi.info", - "lcov.info", - "lcov.dat", - "*.lcov", - "*.clover", - "cover.out", - "gcov.info", - "*.gcov", - "*.lst" - ]; -} - -function getCoverageFiles(projectRoot, coverageFilePatterns) { - let files = []; + '*coverage*.*', + 'nosetests.xml', + 'jacoco*.xml', + 'clover.xml', + 'report.xml', + '*.codecov.*', + 'codecov.*', + 'cobertura.xml', + 'excoveralls.json', + 'luacov.report.out', + 'coverage-final.json', + 'naxsi.info', + 'lcov.info', + 'lcov.dat', + '*.lcov', + '*.clover', + 'cover.out', + 'gcov.info', + '*.gcov', + '*.lst' + ] +} + +function getCoverageFiles (projectRoot, coverageFilePatterns) { + let files = [] for (let index = 0; index < coverageFilePatterns.length; index++) { - const pattern = coverageFilePatterns[index]; + const pattern = coverageFilePatterns[index] const newFiles = glob.sync(`**/${pattern}`, { cwd: projectRoot, ignore: globBlacklist() - }); + }) - files = files.concat(newFiles); + files = files.concat(newFiles) } - return files; + return files } -function isBlacklisted(projectRoot, file, manualBlacklist) { - const blacklist = manualBlacklist; - return blacklist.includes(file); +function isBlacklisted (projectRoot, file, manualBlacklist) { + const blacklist = manualBlacklist + return blacklist.includes(file) } -function fetchGitRoot() { +function fetchGitRoot () { try { return ( - child_process - .spawnSync("git", ["rev-parse", "--show-toplevel"]) + childProcess + .spawnSync('git', ['rev-parse', '--show-toplevel']) .stdout.toString() .trimRight() || - child_process - .spawnSync("hg", ["root"]) + childProcess + .spawnSync('hg', ['root']) .stdout.toString() .trimRight() || process.cwd() - ); + ) } catch (error) { - throw new Error("Error fetching git root. Please try using the -R flag."); + throw new Error('Error fetching git root. Please try using the -R flag.') } } -function parseGitIgnore(projectRoot) { - const gitIgnorePath = path.join(projectRoot, ".gitignore"); - let lines; +function parseGitIgnore (projectRoot) { + const gitIgnorePath = path.join(projectRoot, '.gitignore') + let lines try { - lines = readAllLines(gitIgnorePath) || []; + lines = readAllLines(gitIgnorePath) || [] } catch (error) { - throw new Error(`Unable to open ${gitIgnorePath}: ${error}`); + throw new Error(`Unable to open ${gitIgnorePath}: ${error}`) } const filteredLines = lines.filter(line => { - if (line === "" || line.startsWith("#")) { - return false; + if (line === '' || line.startsWith('#')) { + return false } - return true; - }); - return filteredLines; + return true + }) + return filteredLines } -function getAllFiles(projectRoot, dirPath, arrayOfFiles) { - const files = fs.readdirSync(dirPath); - arrayOfFiles = arrayOfFiles || []; +function getAllFiles (projectRoot, dirPath, arrayOfFiles) { + const files = fs.readdirSync(dirPath) + arrayOfFiles = arrayOfFiles || [] - files.forEach(function(file) { + files.forEach(function (file) { if ( fs.statSync(path.join(dirPath, file)).isDirectory() && !isBlacklisted(projectRoot, file, manualBlacklist()) ) { arrayOfFiles = getAllFiles( projectRoot, - path.join(dirPath, file), + path.join(dirPath, file), arrayOfFiles - ); + ) } else { if (!isBlacklisted(projectRoot, file, manualBlacklist())) { arrayOfFiles.push( - `${path.join(dirPath.replace(projectRoot, "."), file)}\n` - ); + `${path.join(dirPath.replace(projectRoot, '.'), file)}\n` + ) } } - }); + }) - return arrayOfFiles; + return arrayOfFiles } -function readAllLines(filePath) { - const fileContents = fs.readFileSync(filePath); +function readAllLines (filePath) { + const fileContents = fs.readFileSync(filePath) - const lines = fileContents.toString().split("\n") || []; - return lines; + const lines = fileContents.toString().split('\n') || [] + return lines } -function readCoverageFile(projectRoot, filePath) { +function readCoverageFile (projectRoot, filePath) { try { - return fs.readFileSync(getFilePath(projectRoot, filePath)); + return fs.readFileSync(getFilePath(projectRoot, filePath)) } catch (error) { - throw new Error(`There was an error reading the coverage file: ${error}`); + throw new Error(`There was an error reading the coverage file: ${error}`) } } -function endNetworkMarker() { - return "<<<<<< network\n"; +function endNetworkMarker () { + return '<<<<<< network\n' } -function endFileMarker() { - return "<<<<<< EOF\n"; +function endFileMarker () { + return '<<<<<< EOF\n' } -function fileHeader(filePath) { - return `# path=${filePath}\n`; +function fileHeader (filePath) { + return `# path=${filePath}\n` } -function getFilePath(projectRoot, filePath) { - if (filePath.startsWith("./") - || filePath.startsWith("/") - || filePath.startsWith(".\\") - || filePath.startsWith(".\\")) { +function getFilePath (projectRoot, filePath) { + if (filePath.startsWith('./') || + filePath.startsWith('/') || + filePath.startsWith('.\\') || + filePath.startsWith('.\\')) { return filePath } - if (projectRoot === ".") { - return path.join(".", filePath) + if (projectRoot === '.') { + return path.join('.', filePath) } return path.join(projectRoot, filePath) - } module.exports = { @@ -189,4 +188,4 @@ module.exports = { getCoverageFiles, coverageFilePatterns, getFilePath -}; +} diff --git a/src/helpers/validate.js b/src/helpers/validate.js index 47f1ac900..c19cd752c 100644 --- a/src/helpers/validate.js +++ b/src/helpers/validate.js @@ -1,21 +1,21 @@ -var validator = require("validator"); +const validator = require('validator') -function validateToken(token) { - return validator.isAlphanumeric(token); +function validateToken (token) { + return validator.isAlphanumeric(token) } -function validateURL(url) { - return validator.isURL(url, { require_protocol: true }); +function validateURL (url) { + return validator.isURL(url, { require_protocol: true }) } -function validateFlags(flags) { - const mask = /^[\w,]+$/; - return mask.test(flags); +function validateFlags (flags) { + const mask = /^[\w,]+$/ + return mask.test(flags) } -function validateFileNamePath(path) { - const mask = /^[\w/.,-]+$/; - return mask.test(path); +function validateFileNamePath (path) { + const mask = /^[\w/.,-]+$/ + return mask.test(path) } module.exports = { @@ -23,4 +23,4 @@ module.exports = { validateURL, validateFlags, validateFileNamePath -}; +} diff --git a/src/helpers/web.js b/src/helpers/web.js index 219ef1d97..766eee327 100644 --- a/src/helpers/web.js +++ b/src/helpers/web.js @@ -1,41 +1,41 @@ -const superagent = require("superagent"); -const validateHelpers = require("./validate"); +const superagent = require('superagent') +const validateHelpers = require('./validate') -function populateBuildParams(inputs, serviceParams) { - const { args, envs } = inputs; - serviceParams.name = envs.CODECOV_NAME || ""; - serviceParams.tag = args.tag || ""; +function populateBuildParams (inputs, serviceParams) { + const { args, envs } = inputs + serviceParams.name = envs.CODECOV_NAME || '' + serviceParams.tag = args.tag || '' serviceParams.flags = validateHelpers.validateFlags(args.flags) ? args.flags - : ""; - return serviceParams; + : '' + return serviceParams } -async function uploadToCodecovPUT(uploadURL, uploadFile) { - console.log("Uploading..."); +async function uploadToCodecovPUT (uploadURL, uploadFile) { + console.log('Uploading...') - const parts = uploadURL.split("\n"); - const putURL = parts[1]; - const codecovResultURL = parts[0]; + const parts = uploadURL.split('\n') + const putURL = parts[1] + const codecovResultURL = parts[0] try { const result = await superagent .put(`${putURL}`) .retry() .send(uploadFile) // sends a JSON post body - .set("Content-Type", "application/x-gzip") - .set("Content-Encoding", "gzip"); + .set('Content-Type', 'application/x-gzip') + .set('Content-Encoding', 'gzip') if (result.status === 200) { - return { status: "success", resultURL: codecovResultURL }; + return { status: 'success', resultURL: codecovResultURL } } - throw new Error(`Error uploading: ${result.status}, ${result.body}`); + throw new Error(`Error uploading: ${result.status}, ${result.body}`) } catch (error) { - throw new Error(`Error uploading: ${error}`); + throw new Error(`Error uploading: ${error}`) } } -async function uploadToCodecov(uploadURL, token, query, uploadFile, version) { +async function uploadToCodecov (uploadURL, token, query, uploadFile, version) { try { const result = await superagent .post( @@ -43,41 +43,41 @@ async function uploadToCodecov(uploadURL, token, query, uploadFile, version) { ) .retry() .send(uploadFile) // sends a JSON post body - .set("X-Reduced-Redundancy", "false") - .set("X-Content-Type", "application/x-gzip"); + .set('X-Reduced-Redundancy', 'false') + .set('X-Content-Type', 'application/x-gzip') - return result.res.text; + return result.res.text } catch (error) { - throw new Error(`Error uploading to Codecov: ${error}`); + throw new Error(`Error uploading to Codecov: ${error}`) } } -function generateQuery(queryParams) { - const query = "".concat( - "branch=", +function generateQuery (queryParams) { + const query = ''.concat( + 'branch=', queryParams.branch, - "&commit=", + '&commit=', queryParams.commit, - "&build=", + '&build=', queryParams.build, - "&build_url=", + '&build_url=', queryParams.buildURL, - "&name=", + '&name=', queryParams.name, - "&tag=", + '&tag=', queryParams.tag, - "&slug=", + '&slug=', queryParams.slug, - "&service=", + '&service=', queryParams.service, - "&flags=", + '&flags=', queryParams.flags, - "&pr=", + '&pr=', queryParams.pr, - "&job=", + '&job=', queryParams.job - ); - return query; + ) + return query } module.exports = { @@ -85,4 +85,4 @@ module.exports = { uploadToCodecov, uploadToCodecovPUT, generateQuery -}; +} diff --git a/src/index.js b/src/index.js index b09e421f0..9bcb88a58 100644 --- a/src/index.js +++ b/src/index.js @@ -1,20 +1,20 @@ -const zlib = require("zlib"); -const { version } = require("../package.json"); -const fileHelpers = require("./helpers/files"); -const validateHelpers = require("./helpers/validate"); -const webHelpers = require("./helpers/web"); -const providers = require("./ci_providers"); - -function dryRun(uploadHost, token, query, uploadFile) { - console.log(`==> Dumping upload file (no upload)`); +const zlib = require('zlib') +const { version } = require('../package.json') +const fileHelpers = require('./helpers/files') +const validateHelpers = require('./helpers/validate') +const webHelpers = require('./helpers/web') +const providers = require('./ci_providers') + +function dryRun (uploadHost, token, query, uploadFile) { + console.log('==> Dumping upload file (no upload)') console.log( `${uploadHost}/upload/v4?package=uploader-${version}&token=${token}&${query}` - ); - console.log(uploadFile); - process.exit(); + ) + console.log(uploadFile) + process.exit() } -async function main(args) { +async function main (args) { try { /* Step 1: validate and sanitize inputs @@ -28,136 +28,136 @@ async function main(args) { // == Step 1: validate and sanitize inputs // TODO: clean and sanitize envs and args - const envs = process.env; + const envs = process.env // args - const inputs = { args, envs }; + const inputs = { args, envs } const uploadHost = validateHelpers.validateURL(args.url) ? args.url - : "https://codecov.io"; - let token = validateHelpers.validateToken(args.token) ? args.token : ""; - if (token === "") { - token = process.env.CODECOV_TOKEN || ""; + : 'https://codecov.io' + let token = validateHelpers.validateToken(args.token) ? args.token : '' + if (token === '') { + token = process.env.CODECOV_TOKEN || '' } - token = args.token || process.env.CODECOV_TOKEN || ""; - console.log(generateHeader(getVersion())); + token = args.token || process.env.CODECOV_TOKEN || '' + console.log(generateHeader(getVersion())) // == Step 2: detect if we are in a git repo - const projectRoot = args.rootDir || fileHelpers.fetchGitRoot(); - if (projectRoot === "") { + const projectRoot = args.rootDir || fileHelpers.fetchGitRoot() + if (projectRoot === '') { console.log( - "=> No git repo detected. Please use the -R flag if the below detected directory is not correct." - ); + '=> No git repo detected. Please use the -R flag if the below detected directory is not correct.' + ) } - console.log(`=> Project root located at: ${projectRoot}`); + console.log(`=> Project root located at: ${projectRoot}`) // == Step 3: get network - const fileListing = await fileHelpers.getFileListing(projectRoot); + const fileListing = await fileHelpers.getFileListing(projectRoot) // == Step 4: select coverage files (search or specify) // Look for files - let coverageFilePaths = []; + let coverageFilePaths = [] if (!args.file) { coverageFilePaths = fileHelpers.getCoverageFiles( projectRoot, // TODO: Determine why this is so slow (I suspect it's walking paths it should not) fileHelpers.coverageFilePatterns() - ); + ) if (coverageFilePaths.length > 0) { console.log( `=> Found ${coverageFilePaths.length} possible coverage files:` - ); - console.log(coverageFilePaths.join("\n")); + ) + console.log(coverageFilePaths.join('\n')) } else { console.error( - "No coverage files located, please try use `-f`, or change the project root with `-R`" - ); - process.exit(args.nonZero ? -1 : 0); + 'No coverage files located, please try use `-f`, or change the project root with `-R`' + ) + process.exit(args.nonZero ? -1 : 0) } } else { coverageFilePaths[0] = validateHelpers.validateFileNamePath(args.file) ? args.file - : ""; + : '' if (coverageFilePaths.length === 0) { - console.error("Not coverage file found, exiting."); - process.exit(args.nonZero ? -1 : 0); + console.error('Not coverage file found, exiting.') + process.exit(args.nonZero ? -1 : 0) } } // == Step 5: generate upload file // TODO: capture envs - let uploadFile = fileListing; + let uploadFile = fileListing - uploadFile = uploadFile.concat(fileHelpers.endNetworkMarker()); + uploadFile = uploadFile.concat(fileHelpers.endNetworkMarker()) // Get coverage report contents for (let index = 0; index < coverageFilePaths.length; index++) { - const coverageFile = coverageFilePaths[index]; + const coverageFile = coverageFilePaths[index] const fileContents = await fileHelpers.readCoverageFile( - ".", + '.', coverageFile - ); - uploadFile = uploadFile.concat(fileHelpers.fileHeader(coverageFile)); - uploadFile = uploadFile.concat(fileContents); - uploadFile = uploadFile.concat(fileHelpers.endFileMarker()); + ) + uploadFile = uploadFile.concat(fileHelpers.fileHeader(coverageFile)) + uploadFile = uploadFile.concat(fileContents) + uploadFile = uploadFile.concat(fileHelpers.endFileMarker()) } - const gzippedFile = zlib.gzipSync(uploadFile); + const gzippedFile = zlib.gzipSync(uploadFile) // == Step 6: determine CI provider // Determine CI provider - let serviceParams; + let serviceParams for (const provider of providers) { if (provider.detect(envs)) { console.log( `Detected ${provider.getServiceName()} as the CI provider.` - ); - serviceParams = provider.getServiceParams(inputs); - break; + ) + serviceParams = provider.getServiceParams(inputs) + break } } if (serviceParams === undefined) { - console.error("Unable to detect service, please specify manually."); - process.exit(args.nonZero ? -1 : 0); + console.error('Unable to detect service, please specify manually.') + process.exit(args.nonZero ? -1 : 0) } // == Step 7: either upload or dry-run const query = webHelpers.generateQuery( webHelpers.populateBuildParams(inputs, serviceParams) - ); + ) if (args.dryRun) { - dryRun(uploadHost, token, query, uploadFile); + dryRun(uploadHost, token, query, uploadFile) } else { console.log( `Pinging Codecov: ${uploadHost}/v4?package=uploader-${version}&token=*******&${query}` - ); + ) const uploadURL = await webHelpers.uploadToCodecov( uploadHost, token, query, gzippedFile, version - ); + ) const result = await webHelpers.uploadToCodecovPUT( uploadURL, gzippedFile - ); - console.log(result); + ) + console.log(result) } } catch (error) { // Output any exceptions and exit - console.error(error.message); - process.exit(args.nonZero ? -1 : 0); + console.error(error.message) + process.exit(args.nonZero ? -1 : 0) } } -function generateHeader(version) { +function generateHeader (version) { return ` _____ _ / ____| | | @@ -166,15 +166,15 @@ function generateHeader(version) { | |___| (_) | (_| | __/ (_| (_) \\ V / \\_____\\___/ \\__,_|\\___|\\___\\___/ \\_/ - Codecov report uploader ${version}`; + Codecov report uploader ${version}` } -function getVersion() { - return version; +function getVersion () { + return version } module.exports = { main, getVersion, generateHeader -}; +} diff --git a/test/helpers/files.test.js b/test/helpers/files.test.js index 33ff034b5..7e327d65a 100644 --- a/test/helpers/files.test.js +++ b/test/helpers/files.test.js @@ -1,88 +1,85 @@ -const {afterEach, describe, it} = require("@jest/globals"); +const { afterEach, describe, it } = require('@jest/globals') -const td = require("testdouble") -const fs = require("fs"); -const path = require("path"); -const child_process = require("child_process") -const fileHelpers = require("../../src/helpers/files"); +const td = require('testdouble') +const fs = require('fs') +const childProcess = require('child_process') +const fileHelpers = require('../../src/helpers/files') -describe("File Helpers", () => { - - afterEach(function() { +describe('File Helpers', () => { + afterEach(function () { td.reset() }) + it('can generate network end marker', () => { + expect(fileHelpers.endNetworkMarker()).toBe('<<<<<< network\n') + }) - it("can generate network end marker", () => { - expect(fileHelpers.endNetworkMarker()).toBe("<<<<<< network\n"); - }); - - it("can generate file end marker", () => { - expect(fileHelpers.endFileMarker()).toBe("<<<<<< EOF\n"); - }); + it('can generate file end marker', () => { + expect(fileHelpers.endFileMarker()).toBe('<<<<<< EOF\n') + }) - it("can fetch the git root", function() { + it('can fetch the git root', function () { const cwd = td.replace(process, 'cwd') - const spawnSync = td.replace(child_process, 'spawnSync') - td.when(cwd()).thenReturn({stdout: "fish"}) - td.when(spawnSync("git", ["rev-parse", "--show-toplevel"])).thenReturn({stdout: "gitRoot"}) - - expect(fileHelpers.fetchGitRoot()).toBe("gitRoot") + const spawnSync = td.replace(childProcess, 'spawnSync') + td.when(cwd()).thenReturn({ stdout: 'fish' }) + td.when(spawnSync('git', ['rev-parse', '--show-toplevel'])).thenReturn({ stdout: 'gitRoot' }) + + expect(fileHelpers.fetchGitRoot()).toBe('gitRoot') }) - it("can get a file listing", async () => { - expect(await fileHelpers.getFileListing(".")).toMatch( - "npm-shrinkwrap.json" - ); - }); + it('can get a file listing', async () => { + expect(await fileHelpers.getFileListing('.')).toMatch( + 'npm-shrinkwrap.json' + ) + }) - it("can parse the .gitignore file", function() { + it('can parse the .gitignore file', function () { const readFileSync = td.replace(fs, 'readFileSync') - td.when(readFileSync(".gitignore")).thenReturn("ignore this file\nandthisone\n# not me!\n\nand me") - expect(fileHelpers.parseGitIgnore('.')).toStrictEqual(["ignore this file", "andthisone", "and me"]) + td.when(readFileSync('.gitignore')).thenReturn('ignore this file\nandthisone\n# not me!\n\nand me') + expect(fileHelpers.parseGitIgnore('.')).toStrictEqual(['ignore this file', 'andthisone', 'and me']) }) - describe("Coverage report handling", () => { - it("can generate report file header", () => { - expect(fileHelpers.fileHeader("test-coverage-file.xml")).toBe( - "# path=test-coverage-file.xml\n" - ); - }); - it("can read a coverage report file", async () => { + describe('Coverage report handling', () => { + it('can generate report file header', () => { + expect(fileHelpers.fileHeader('test-coverage-file.xml')).toBe( + '# path=test-coverage-file.xml\n' + ) + }) + it('can read a coverage report file', async () => { const readFileSync = td.replace(fs, 'readFileSync') - td.when(readFileSync("test-coverage-file.xml")).thenReturn("I am test coverage data") + td.when(readFileSync('test-coverage-file.xml')).thenReturn('I am test coverage data') const reportContents = fileHelpers.readCoverageFile( - ".", - "test-coverage-file.xml" - ); - expect(reportContents).toBe("I am test coverage data"); - }); - it("can return a list of coverage files", () => { + '.', + 'test-coverage-file.xml' + ) + expect(reportContents).toBe('I am test coverage data') + }) + it('can return a list of coverage files', () => { expect( - fileHelpers.getCoverageFiles(".", ["index.test.js"]) - ).toStrictEqual(["test/index.test.js", "test/providers/index.test.js"]); - }); - describe("coverage file patterns", function() { - it("contains `jacoco*.xml`", function() { - expect(fileHelpers.coverageFilePatterns()).toContain("jacoco*.xml"); - }); - }); - describe("getFilePath()", () => { - it("should return path when file path has no starting slash", () => { - expect(fileHelpers.getFilePath("/usr/", "coverage.xml")).toEqual("/usr/coverage.xml") + fileHelpers.getCoverageFiles('.', ['index.test.js']) + ).toStrictEqual(['test/index.test.js', 'test/providers/index.test.js']) + }) + describe('coverage file patterns', function () { + it('contains `jacoco*.xml`', function () { + expect(fileHelpers.coverageFilePatterns()).toContain('jacoco*.xml') }) - it("should return path when file path has no starting slash", () => { - expect(fileHelpers.getFilePath("/usr", "coverage.xml")).toEqual("/usr/coverage.xml") + }) + describe('getFilePath()', () => { + it('should return path when file path has no starting slash', () => { + expect(fileHelpers.getFilePath('/usr/', 'coverage.xml')).toEqual('/usr/coverage.xml') + }) + it('should return path when file path has no starting slash', () => { + expect(fileHelpers.getFilePath('/usr', 'coverage.xml')).toEqual('/usr/coverage.xml') }) - it("should return path when file path starts with a ./", () => { - expect(fileHelpers.getFilePath("/usr/", "./coverage.xml")).toEqual("./coverage.xml") + it('should return path when file path starts with a ./', () => { + expect(fileHelpers.getFilePath('/usr/', './coverage.xml')).toEqual('./coverage.xml') }) - it("should return path when project root is . and filepath does not start with ./ or /", () => { - expect(fileHelpers.getFilePath(".", "coverage.xml")).toEqual("coverage.xml") + it('should return path when project root is . and filepath does not start with ./ or /', () => { + expect(fileHelpers.getFilePath('.', 'coverage.xml')).toEqual('coverage.xml') }) - it("should return path when project root is . and filepath starts /", () => { - expect(fileHelpers.getFilePath(".", "/usr/coverage.xml")).toEqual("/usr/coverage.xml") + it('should return path when project root is . and filepath starts /', () => { + expect(fileHelpers.getFilePath('.', '/usr/coverage.xml')).toEqual('/usr/coverage.xml') }) }) - }); -}); + }) +}) diff --git a/test/helpers/validate.test.js b/test/helpers/validate.test.js index 35c50c1ef..ef3e4ae40 100644 --- a/test/helpers/validate.test.js +++ b/test/helpers/validate.test.js @@ -1,30 +1,30 @@ -const validate = require("../../src/helpers/validate"); +const validate = require('../../src/helpers/validate') -describe("Input Validators", function() { - describe("Tokens", function() { - it("Returns true with a valid token", function() { - expect(validate.validateToken("1bc123")).toBe(true); - }); - it("Returns false with an invalid token", function() { - expect(validate.validateToken("1bc1 23")).toBe(false); - }); - }); +describe('Input Validators', function () { + describe('Tokens', function () { + it('Returns true with a valid token', function () { + expect(validate.validateToken('1bc123')).toBe(true) + }) + it('Returns false with an invalid token', function () { + expect(validate.validateToken('1bc1 23')).toBe(false) + }) + }) - describe("Flags", function() { - it("Should fail with a dash", function() { - expect(validate.validateFlags("moo-foor")).toBe(false); - }); - }); + describe('Flags', function () { + it('Should fail with a dash', function () { + expect(validate.validateFlags('moo-foor')).toBe(false) + }) + }) - describe("URLs", function() { - it("Returns true with a valid URL", function() { - expect(validate.validateURL("https://codecov.io")).toBe(true); - }); - it("Returns false with an invalid URL", function() { - expect(validate.validateURL("not.a.URL.com")).toBe(false); - }); - it("Returns false with an empty URL", function() { - expect(validate.validateURL("")).toBe(false); - }); - }); -}); + describe('URLs', function () { + it('Returns true with a valid URL', function () { + expect(validate.validateURL('https://codecov.io')).toBe(true) + }) + it('Returns false with an invalid URL', function () { + expect(validate.validateURL('not.a.URL.com')).toBe(false) + }) + it('Returns false with an empty URL', function () { + expect(validate.validateURL('')).toBe(false) + }) + }) +}) diff --git a/test/helpers/web.test.js b/test/helpers/web.test.js index 118046160..800febe5d 100644 --- a/test/helpers/web.test.js +++ b/test/helpers/web.test.js @@ -1,40 +1,37 @@ -const nock = require("nock"); +const nock = require('nock') -const webHelper = require("../../src/helpers/web"); +const webHelper = require('../../src/helpers/web') -describe("Web Helpers", function() { - let inputs; - let uploadURL; - let token; - let uploadFile; - let version; - let query; - beforeEach(function() { - inputs = { args: {}, envs: {} }; - token = "123-abc-890-xyz"; - uploadFile = "some content"; - query = "hello"; - version = "0.0.1"; +describe('Web Helpers', function () { + let uploadURL + let token + let uploadFile + let version + let query + beforeEach(function () { + token = '123-abc-890-xyz' + uploadFile = 'some content' + query = 'hello' + version = '0.0.1' - // deepcode ignore WrongNumberOfArgs/test: believe this is a false positive - nock("https://codecov.io") - .put("/") + // deepcode ignore WrongNumberOfArgs/test: believe this is a false positive + nock('https://codecov.io') + .put('/') .query(true) - .reply(200, "testPUT"); - -}); + .reply(200, 'testPUT') + }) -afterEach(function() { - uploadURL = "" -}) + afterEach(function () { + uploadURL = '' + }) - it("Can POST to the uploader endpoint (HTTP)", async function() { - uploadURL = "http://codecov.io"; + it('Can POST to the uploader endpoint (HTTP)', async function () { + uploadURL = 'http://codecov.io' // deepcode ignore WrongNumberOfArgs/test: believe this is a false positive - nock("http://codecov.io") - .post("/upload/v4") - .query(true) - .reply(200, "testPOSTHTTP"); + nock('http://codecov.io') + .post('/upload/v4') + .query(true) + .reply(200, 'testPOSTHTTP') const response = await webHelper.uploadToCodecov( uploadURL, @@ -42,22 +39,21 @@ afterEach(function() { query, uploadFile, version - ); + ) try { - expect(response).toBe("testPOSTHTTP"); + expect(response).toBe('testPOSTHTTP') } catch (error) { console.trace(error) } - - }); + }) - it("Can POST to the uploader endpoint (HTTPS)", async function() { - uploadURL = "https://codecov.io"; + it('Can POST to the uploader endpoint (HTTPS)', async function () { + uploadURL = 'https://codecov.io' // deepcode ignore WrongNumberOfArgs/test: believe this is a false positive - nock("https://codecov.io") - .post("/upload/v4") - .query(true) - .reply(200, "testPOSTHTTPS"); + nock('https://codecov.io') + .post('/upload/v4') + .query(true) + .reply(200, 'testPOSTHTTPS') const response = await webHelper.uploadToCodecov( uploadURL, @@ -65,42 +61,42 @@ afterEach(function() { query, uploadFile, version - ); - expect(response).toBe("testPOSTHTTPS"); - }); + ) + expect(response).toBe('testPOSTHTTPS') + }) - it("Can PUT to the storage endpoint", async function() { - uploadURL = "https://results.codecov.io\nhttps://codecov.io"; + it('Can PUT to the storage endpoint', async function () { + uploadURL = 'https://results.codecov.io\nhttps://codecov.io' const response = await webHelper.uploadToCodecovPUT( uploadURL, - uploadFile, - ); - expect(response.resultURL).toBe("https://results.codecov.io"); - }); + uploadFile + ) + expect(response.resultURL).toBe('https://results.codecov.io') + }) - it("Can generate query URL", function() { - const queryParams = {}; - queryParams.branch = "testBranch"; - queryParams.commit = "commitSHA"; - queryParams.buildURL = "https://ci-providor.local/job/xyz"; - queryParams.job = "6"; - queryParams.flags = "unit,uploader"; - queryParams.slug = "testOrg/testRepo"; - queryParams.build = "4"; - queryParams.service = "testingCI"; - queryParams.name = "testName"; - queryParams.tag = "tagV1"; - queryParams.pr = "2"; + it('Can generate query URL', function () { + const queryParams = {} + queryParams.branch = 'testBranch' + queryParams.commit = 'commitSHA' + queryParams.buildURL = 'https://ci-providor.local/job/xyz' + queryParams.job = '6' + queryParams.flags = 'unit,uploader' + queryParams.slug = 'testOrg/testRepo' + queryParams.build = '4' + queryParams.service = 'testingCI' + queryParams.name = 'testName' + queryParams.tag = 'tagV1' + queryParams.pr = '2' expect(webHelper.generateQuery(queryParams)).toBe( - "branch=testBranch&commit=commitSHA&build=4&build_url=https://ci-providor.local/job/xyz&name=testName&tag=tagV1&slug=testOrg/testRepo&service=testingCI&flags=unit,uploader&pr=2&job=6" - ); - }); + 'branch=testBranch&commit=commitSHA&build=4&build_url=https://ci-providor.local/job/xyz&name=testName&tag=tagV1&slug=testOrg/testRepo&service=testingCI&flags=unit,uploader&pr=2&job=6' + ) + }) - it("can populateBuildParams() from args", function() { + it('can populateBuildParams() from args', function () { const result = webHelper.populateBuildParams( - { args: { flags: "testFlag", tag: "testTag" }, envs: {} }, - { name: "", tag: ", flags: []" } - ); - expect(result.flags).toBe("testFlag"); - }); -}); + { args: { flags: 'testFlag', tag: 'testTag' }, envs: {} }, + { name: '', tag: ', flags: []' } + ) + expect(result.flags).toBe('testFlag') + }) +}) diff --git a/test/index.test.js b/test/index.test.js index 32f28f5db..2767c325f 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -1,13 +1,13 @@ -const app = require("../src"); +const app = require('../src') -const { version } = require("../package.json"); +const { version } = require('../package.json') -describe("Uploader Core", function() { - it("Can return version", function() { - expect(app.getVersion()).toBe(version); - }); +describe('Uploader Core', function () { + it('Can return version', function () { + expect(app.getVersion()).toBe(version) + }) - it("Can display header", function() { + it('Can display header', function () { expect(app.generateHeader(app.getVersion())).toBe(` _____ _ / ____| | | @@ -16,6 +16,6 @@ describe("Uploader Core", function() { | |___| (_) | (_| | __/ (_| (_) \\ V / \\_____\\___/ \\__,_|\\___|\\___\\___/ \\_/ - Codecov report uploader 0.1.0`); - }); -}); + Codecov report uploader 0.1.0`) + }) +}) diff --git a/test/providers/index.test.js b/test/providers/index.test.js index eb6de2703..4bb71c502 100644 --- a/test/providers/index.test.js +++ b/test/providers/index.test.js @@ -1,111 +1,106 @@ const td = require('testdouble') -const child_process = require("child_process"); +const childProcess = require('child_process') -const providers = require("../../src/ci_providers"); +const providers = require('../../src/ci_providers') -describe("CI Providers", () => { - - afterEach(function() { +describe('CI Providers', () => { + afterEach(function () { td.reset() }) - - it("is an array of CI providers", () => expect(providers).toBeInstanceOf(Array)); + it('is an array of CI providers', () => expect(providers).toBeInstanceOf(Array)) providers.forEach(provider => { - const inputs = { args: {}, envs: { - CIRCLE_PROJECT_USERNAME: "testOrg", - CIRCLE_PROJECT_REPONAME: "testRepo", - CIRCLE_SHA1: "testingSHA" + CIRCLE_PROJECT_USERNAME: 'testOrg', + CIRCLE_PROJECT_REPONAME: 'testRepo', + CIRCLE_SHA1: 'testingSHA' } - }; - describe(`${provider.getServiceName() || ""}`, () => { - it("has a detect() method", () => { - expect(provider.detect).toBeInstanceOf(Function); - }); - it("has a getService() method", () => { - expect(provider.private._getService).toBeInstanceOf(Function); - }); - it("has a getServiceName() method", () => { - expect(provider.getServiceName).toBeInstanceOf(Function); - }); - it("has a getServiceParams() method", () => { - expect(provider.getServiceParams).toBeInstanceOf(Function); - }); - describe("getServiceParams()", () => { - const serviceParams = provider.getServiceParams(inputs); + } + describe(`${provider.getServiceName() || ''}`, () => { + it('has a detect() method', () => { + expect(provider.detect).toBeInstanceOf(Function) + }) + it('has a getService() method', () => { + expect(provider.private._getService).toBeInstanceOf(Function) + }) + it('has a getServiceName() method', () => { + expect(provider.getServiceName).toBeInstanceOf(Function) + }) + it('has a getServiceParams() method', () => { + expect(provider.getServiceParams).toBeInstanceOf(Function) + }) + describe('getServiceParams()', () => { + const serviceParams = provider.getServiceParams(inputs) it("has it's branch property set", () => { expect(serviceParams.branch).toBe( provider.private._getBranch(inputs) - ); - }); + ) + }) it("has it's build property set", () => { expect(serviceParams.build).toBe( provider.private._getBuild(inputs) - ); - }); + ) + }) it("has it's buildURL property set", () => { expect(serviceParams.buildURL).toBe( provider.private._getBuildURL(inputs) - ); - }); + ) + }) it("has it's commit property set", () => { expect(serviceParams.commit).toBe( provider.private._getSHA(inputs) - ); - }); + ) + }) it("has it's job property set", () => { expect(serviceParams.job).toBe( provider.private._getJob(inputs.envs) - ); - }); + ) + }) it("has it's pr property set", () => { - expect(serviceParams.pr).toBe(provider.private._getPR(inputs)); - }); + expect(serviceParams.pr).toBe(provider.private._getPR(inputs)) + }) it("has it's service property set", () => { expect(serviceParams.service).toBe( provider.private._getService(inputs) - ); - }); + ) + }) it("has it's slug property set", () => { expect(serviceParams.slug).toBe( provider.private._getSlug(inputs) - ); - }); - }); - it("has a getSlug() method", () => { - expect(provider.private._getSlug).toBeInstanceOf(Function); - }); - describe("getSlug()", () => { - it("can get the slug from a git url", () => { - - const spawnSync = td.replace(child_process, 'spawnSync') - td.when(spawnSync("git", [ - "config", - "--get", - "remote.origin.url"])).thenReturn({ - stdout: "git@github.com:testOrg/testRepo.git" - }) + ) + }) + }) + it('has a getSlug() method', () => { + expect(provider.private._getSlug).toBeInstanceOf(Function) + }) + describe('getSlug()', () => { + it('can get the slug from a git url', () => { + const spawnSync = td.replace(childProcess, 'spawnSync') + td.when(spawnSync('git', [ + 'config', + '--get', + 'remote.origin.url'])).thenReturn({ + stdout: 'git@github.com:testOrg/testRepo.git' + }) expect(provider.private._getSlug(inputs)).toBe( - "testOrg/testRepo" - ); - }); - it("can get the slug from an http(s) url", () => { - - const spawnSync = td.replace(child_process, 'spawnSync') - td.when(spawnSync("git", [ - "config", - "--get", - "remote.origin.url"])).thenReturn({ - stdout: "http://github.com/testOrg/testRepo.git" - }) + 'testOrg/testRepo' + ) + }) + it('can get the slug from an http(s) url', () => { + const spawnSync = td.replace(childProcess, 'spawnSync') + td.when(spawnSync('git', [ + 'config', + '--get', + 'remote.origin.url'])).thenReturn({ + stdout: 'http://github.com/testOrg/testRepo.git' + }) expect(provider.private._getSlug(inputs)).toEqual( - "testOrg/testRepo" - ); - }); - }); - }); - }); -}); + 'testOrg/testRepo' + ) + }) + }) + }) + }) +}) diff --git a/test/test_helpers.js b/test/test_helpers.js index 12caa95e5..4b630e2bf 100644 --- a/test/test_helpers.js +++ b/test/test_helpers.js @@ -4,4 +4,3 @@ const expect = require('expect') // eslint-disable-next-line no-undef require('testdouble-jest')(td, jest) -