From 065ce30c322e371c5aaea9558491aac739168161 Mon Sep 17 00:00:00 2001 From: "Shahar \"Dawn\" Or" Date: Sat, 6 Apr 2024 19:51:54 +0700 Subject: [PATCH] refactor: no extend from eslint-config-standard --- package-lock.json | 129 +++++-- package.json | 7 +- readme.md | 2 +- renovate.json | 10 - src/eslint-config-standard.ts | 6 - src/index.ts | 624 ++++++++++++++++++++++------------ src/test/_util.ts | 4 - src/test/compatibility.ts | 5 +- src/test/dependencies.ts | 5 +- src/test/resolved-config.ts | 76 ++--- src/test/rules-to-consider.ts | 26 +- src/test/standard.ts | 47 --- 12 files changed, 543 insertions(+), 398 deletions(-) delete mode 100644 src/eslint-config-standard.ts delete mode 100644 src/test/standard.ts diff --git a/package-lock.json b/package-lock.json index 723e0742..54ac06e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,7 @@ "version": "44.0.0", "license": "MIT", "dependencies": { - "@typescript-eslint/parser": "^7.0.1", - "eslint-config-standard": "17.1.0" + "@typescript-eslint/parser": "^7.0.1" }, "devDependencies": { "@arkweid/lefthook": "0.7.7", @@ -2223,7 +2222,8 @@ "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", @@ -3012,6 +3012,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -3039,6 +3040,7 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3065,6 +3067,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3083,6 +3086,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3100,6 +3104,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3117,6 +3122,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -3305,6 +3311,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3374,6 +3381,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, "engines": { "node": ">=6" }, @@ -3385,6 +3393,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, "dependencies": { "semver": "^7.0.0" } @@ -3393,6 +3402,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4548,6 +4558,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -4916,6 +4927,7 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.1", @@ -4968,6 +4980,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -4981,6 +4994,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, "dependencies": { "has": "^1.0.3" } @@ -4989,6 +5003,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5079,6 +5094,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, "engines": { "node": ">=12" }, @@ -5086,38 +5102,11 @@ "eslint": ">=6.0.0" } }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5128,6 +5117,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -5136,6 +5126,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, "dependencies": { "debug": "^3.2.7" }, @@ -5152,6 +5143,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -5160,6 +5152,7 @@ "version": "7.5.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", "@eslint-community/regexpp": "^4.6.0", @@ -5179,6 +5172,7 @@ "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -5209,6 +5203,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -5217,6 +5212,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5228,6 +5224,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -5236,6 +5233,7 @@ "version": "16.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "builtins": "^5.0.1", @@ -5263,6 +5261,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5593,6 +5592,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -5654,6 +5654,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5674,6 +5675,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -5691,6 +5693,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5790,6 +5793,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -5923,6 +5927,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -5938,6 +5943,7 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6127,6 +6133,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -6160,6 +6167,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6212,6 +6220,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -6223,6 +6232,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6239,6 +6249,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -6250,6 +6261,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6261,6 +6273,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6272,6 +6285,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -6292,6 +6306,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -6483,6 +6498,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -6521,6 +6537,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -6540,6 +6557,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -6551,6 +6569,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6566,6 +6585,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, "dependencies": { "builtin-modules": "^3.3.0" }, @@ -6580,6 +6600,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6591,6 +6612,7 @@ "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, "dependencies": { "hasown": "^2.0.0" }, @@ -6602,6 +6624,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6647,6 +6670,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6666,6 +6690,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6721,6 +6746,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6736,6 +6762,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -6759,6 +6786,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6773,6 +6801,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -6799,6 +6828,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, "dependencies": { "which-typed-array": "^1.1.11" }, @@ -6825,6 +6855,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -6835,7 +6866,8 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", @@ -6935,6 +6967,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -7551,6 +7584,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7636,7 +7670,8 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/mz": { "version": "2.7.0", @@ -10762,6 +10797,7 @@ "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10770,6 +10806,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -10778,6 +10815,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10795,6 +10833,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10811,6 +10850,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10822,6 +10862,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11089,7 +11130,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", @@ -11478,6 +11520,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11524,6 +11567,7 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -11561,6 +11605,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -11620,6 +11665,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -11643,6 +11689,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -12020,6 +12067,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12619,6 +12667,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -12635,6 +12684,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -12648,6 +12698,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -12683,6 +12734,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "engines": { "node": ">=4" } @@ -12812,6 +12864,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -13025,6 +13078,7 @@ "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -13065,6 +13119,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -13078,6 +13133,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -13095,6 +13151,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -13113,6 +13170,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -13157,6 +13215,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -13312,6 +13371,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -13327,6 +13387,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", diff --git a/package.json b/package.json index 8e7c1243..dbd73ce8 100644 --- a/package.json +++ b/package.json @@ -50,8 +50,7 @@ "TypeScript" ], "dependencies": { - "@typescript-eslint/parser": "^7.0.1", - "eslint-config-standard": "17.1.0" + "@typescript-eslint/parser": "^7.0.1" }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "^7.0.1", @@ -98,8 +97,6 @@ }, "files": [ "lib/index.js", - "lib/index.d.ts", - "lib/eslint-config-standard.js", - "lib/eslint-config-standard.d.ts" + "lib/index.d.ts" ] } diff --git a/readme.md b/readme.md index 144fa3b4..71e68f37 100644 --- a/readme.md +++ b/readme.md @@ -9,7 +9,7 @@ This package specifies the following `peerDependencies`: - TypeScript, which you may already have installed - [ESLint](https://github.com/eslint/eslint) -- 3 Peer dependencies of [eslint-config-standard](https://github.com/standard/eslint-config-standard) +- 3 ESLint plugins - [@typescript-eslint/eslint-plugin](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin); ESLint rules for TypeScript. Yes, this is a large number of `peerDependencies`. diff --git a/renovate.json b/renovate.json index 8d3fa4cc..bfaaa964 100644 --- a/renovate.json +++ b/renovate.json @@ -25,16 +25,6 @@ "matchDepTypes": ["peerDependencies"], "enabled": false }, - { - "matchPackageNames": ["eslint-config-standard"], - "rangeStrategy": "pin", - "minor": { - "semanticCommitType": "feat" - }, - "patch": { - "semanticCommitType": "fix" - } - }, { "matchPackagePrefixes": ["@typescript-eslint_bottom/"], "enabled": false diff --git a/src/eslint-config-standard.ts b/src/eslint-config-standard.ts deleted file mode 100644 index 42d5ac6d..00000000 --- a/src/eslint-config-standard.ts +++ /dev/null @@ -1,6 +0,0 @@ -import config from 'eslint-config-standard/.eslintrc.json' -import { type Linter } from 'eslint' - -const casted = config as unknown as Linter.Config - -export default casted diff --git a/src/index.ts b/src/index.ts index 7d507a5f..a7681c72 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,235 +1,417 @@ -import configStandard from './eslint-config-standard' -import { type Linter } from 'eslint' +import { Linter } from 'eslint' -const equivalents = [ - 'block-spacing', - 'comma-spacing', - 'dot-notation', - 'brace-style', - 'func-call-spacing', - 'indent', - 'key-spacing', - 'keyword-spacing', - 'lines-between-class-members', - 'no-array-constructor', - 'no-dupe-class-members', - 'no-extra-parens', - 'no-implied-eval', - 'no-loss-of-precision', - 'no-redeclare', - 'no-throw-literal', - 'no-unused-vars', - 'no-unused-expressions', - 'no-useless-constructor', - 'object-curly-spacing', - 'prefer-promise-reject-errors', - 'quotes', - 'semi', - 'space-before-blocks', - 'space-before-function-paren', - 'space-infix-ops' -] as const +const rules = { + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/ban-ts-comment': ['error', { + 'ts-expect-error': 'allow-with-description', + 'ts-ignore': true, + 'ts-nocheck': true, + 'ts-check': false, + minimumDescriptionLength: 3 + }], + '@typescript-eslint/ban-tslint-comment': 'error', + '@typescript-eslint/ban-types': ['error', { + extendDefaults: false, + types: { + String: { + message: 'Use string instead', + fixWith: 'string' + }, + Boolean: { + message: 'Use boolean instead', + fixWith: 'boolean' + }, + Number: { + message: 'Use number instead', + fixWith: 'number' + }, + Symbol: { + message: 'Use symbol instead', + fixWith: 'symbol' + }, + BigInt: { + message: 'Use bigint instead', + fixWith: 'bigint' + }, + Function: { + message: [ + 'The `Function` type accepts any function-like value.', + 'It provides no type safety when calling the function, which can be a common source of bugs.', + 'It also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.', + 'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.' + ].join('\n') + }, + // object typing + Object: { + message: [ + 'The `Object` type actually means "any non-nullish value", so it is marginally better than `unknown`.', + '- If you want a type meaning "any object", you probably want `Record` instead.', + '- If you want a type meaning "any value", you probably want `unknown` instead.' + ].join('\n') + }, + '{}': { + message: [ + '`{}` actually means "any non-nullish value".', + '- If you want a type meaning "any object", you probably want `Record` instead.', + '- If you want a type meaning "any value", you probably want `unknown` instead.' + ].join('\n') + } + } + }], + '@typescript-eslint/block-spacing': ['error', 'always'], + '@typescript-eslint/brace-style': ['error', '1tbs', { allowSingleLine: true }], + '@typescript-eslint/class-literal-property-style': ['error', 'fields'], + '@typescript-eslint/comma-dangle': ['error', { + arrays: 'never', + objects: 'never', + imports: 'never', + exports: 'never', + functions: 'never', + enums: 'ignore', + generics: 'ignore', + tuples: 'ignore' + }], + '@typescript-eslint/comma-spacing': ['error', { before: false, after: true }], + '@typescript-eslint/consistent-generic-constructors': ['error', 'constructor'], + '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'], + '@typescript-eslint/consistent-type-assertions': [ + 'error', + { + assertionStyle: 'as', + objectLiteralTypeAssertions: 'never' + } + ], + '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], + '@typescript-eslint/consistent-type-exports': ['error', { + fixMixedExportsWithInlineTypeSpecifier: true + }], + '@typescript-eslint/consistent-type-imports': ['error', { + prefer: 'type-imports', + disallowTypeAnnotations: true, + fixStyle: 'inline-type-imports' + }], + '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], + '@typescript-eslint/explicit-function-return-type': ['error', { + allowExpressions: true, + allowHigherOrderFunctions: true, + allowTypedFunctionExpressions: true, + allowDirectConstAssertionInArrowFunctions: true + }], + '@typescript-eslint/func-call-spacing': ['error', 'never'], + '@typescript-eslint/indent': ['error', 2, { + SwitchCase: 1, + VariableDeclarator: 1, + outerIIFEBody: 1, + MemberExpression: 1, + FunctionDeclaration: { parameters: 1, body: 1 }, + FunctionExpression: { parameters: 1, body: 1 }, + CallExpression: { arguments: 1 }, + ArrayExpression: 1, + ObjectExpression: 1, + ImportDeclaration: 1, + flatTernaryExpressions: false, + ignoreComments: false, + ignoredNodes: [ + 'TemplateLiteral *', + 'JSXElement', + 'JSXElement > *', + 'JSXAttribute', + 'JSXIdentifier', + 'JSXNamespacedName', + 'JSXMemberExpression', + 'JSXSpreadAttribute', + 'JSXExpressionContainer', + 'JSXOpeningElement', + 'JSXClosingElement', + 'JSXFragment', + 'JSXOpeningFragment', + 'JSXClosingFragment', + 'JSXText', + 'JSXEmptyExpression', + 'JSXSpreadChild' + ], + offsetTernaryExpressions: true + }], + '@typescript-eslint/key-spacing': ['error', { beforeColon: false, afterColon: true }], + '@typescript-eslint/keyword-spacing': ['error', { before: true, after: true }], + '@typescript-eslint/lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }], + '@typescript-eslint/member-delimiter-style': [ + 'error', + { + multiline: { delimiter: 'none' }, + singleline: { delimiter: 'comma', requireLast: false } + } + ], + '@typescript-eslint/method-signature-style': 'error', + '@typescript-eslint/naming-convention': ['error', { + selector: 'variableLike', + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + format: ['camelCase', 'PascalCase', 'UPPER_CASE'] + }], + '@typescript-eslint/no-array-constructor': 'error', + '@typescript-eslint/no-base-to-string': 'error', + '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: false, ignoreVoidOperator: false }], + '@typescript-eslint/no-dupe-class-members': 'error', + '@typescript-eslint/no-dynamic-delete': 'error', + '@typescript-eslint/no-empty-interface': ['error', { allowSingleExtends: true }], + '@typescript-eslint/no-extra-non-null-assertion': 'error', + '@typescript-eslint/no-extra-parens': ['error', 'functions'], + '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true }], + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-for-in-array': 'error', + '@typescript-eslint/no-implied-eval': 'error', + '@typescript-eslint/no-invalid-void-type': 'error', + '@typescript-eslint/no-loss-of-precision': 'error', + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-misused-promises': 'error', + '@typescript-eslint/no-namespace': 'error', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }], + '@typescript-eslint/no-this-alias': ['error', { allowDestructuring: true }], + '@typescript-eslint/no-throw-literal': 'error', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', + '@typescript-eslint/no-unnecessary-type-assertion': 'error', + '@typescript-eslint/no-unnecessary-type-constraint': 'error', + '@typescript-eslint/no-unsafe-argument': 'error', + '@typescript-eslint/no-unused-expressions': ['error', { + allowShortCircuit: true, + allowTernary: true, + allowTaggedTemplates: true + }], + '@typescript-eslint/no-unused-vars': ['error', { + args: 'none', + caughtErrors: 'none', + ignoreRestSiblings: true, + vars: 'all' + }], + '@typescript-eslint/no-use-before-define': ['error', { + functions: false, + classes: false, + enums: false, + variables: false, + typedefs: false + }], + '@typescript-eslint/no-useless-constructor': ['error'], + '@typescript-eslint/no-var-requires': 'error', + '@typescript-eslint/non-nullable-type-assertion-style': 'error', + '@typescript-eslint/object-curly-spacing': ['error', 'always'], + '@typescript-eslint/prefer-function-type': 'error', + '@typescript-eslint/prefer-includes': 'error', + '@typescript-eslint/prefer-nullish-coalescing': ['error', { ignoreConditionalTests: false, ignoreMixedLogicalExpressions: false }], + '@typescript-eslint/prefer-optional-chain': 'error', + '@typescript-eslint/prefer-promise-reject-errors': 'error', + '@typescript-eslint/prefer-readonly': 'error', + '@typescript-eslint/prefer-reduce-type-parameter': 'error', + '@typescript-eslint/prefer-return-this-type': 'error', + '@typescript-eslint/prefer-ts-expect-error': 'error', + '@typescript-eslint/promise-function-async': 'error', + '@typescript-eslint/quotes': ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }], + '@typescript-eslint/require-array-sort-compare': ['error', { ignoreStringArrays: true }], + '@typescript-eslint/restrict-plus-operands': ['error', { skipCompoundAssignments: false }], + '@typescript-eslint/restrict-template-expressions': ['error', { allowNumber: true }], + '@typescript-eslint/return-await': ['error', 'always'], + '@typescript-eslint/semi': ['error', 'never'], + '@typescript-eslint/space-before-blocks': ['error', 'always'], + '@typescript-eslint/space-before-function-paren': ['error', 'always'], + '@typescript-eslint/space-infix-ops': 'error', + '@typescript-eslint/strict-boolean-expressions': ['error', { + allowString: false, + allowNumber: false, + allowNullableObject: false, + allowNullableBoolean: false, + allowNullableString: false, + allowNullableNumber: false, + allowAny: false + }], + '@typescript-eslint/triple-slash-reference': ['error', { lib: 'never', path: 'never', types: 'never' }], + '@typescript-eslint/type-annotation-spacing': 'error', + '@typescript-eslint/unbound-method': ['error', { ignoreStatic: false }], + + 'accessor-pairs': ['error', { setWithoutGet: true, enforceForClassMembers: true }], + 'array-bracket-spacing': ['error', 'never'], + 'array-callback-return': ['error', { + allowImplicit: false, + checkForEach: false + }], + 'arrow-spacing': ['error', { before: true, after: true }], + 'comma-style': ['error', 'last'], + 'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }], + 'constructor-super': 'error', + curly: ['error', 'multi-line'], + 'default-case-last': 'error', + 'dot-location': ['error', 'property'], + 'eol-last': 'error', + eqeqeq: ['error', 'always', { null: 'ignore' }], + 'generator-star-spacing': ['error', { before: true, after: true }], + 'multiline-ternary': ['error', 'always-multiline'], + 'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }], + 'new-parens': 'error', + 'no-async-promise-executor': 'error', + 'no-caller': 'error', + 'no-case-declarations': 'error', + 'no-class-assign': 'error', + 'no-compare-neg-zero': 'error', + 'no-cond-assign': 'error', + 'no-const-assign': 'error', + 'no-constant-condition': ['error', { checkLoops: false }], + 'no-control-regex': 'error', + 'no-debugger': 'error', + 'no-delete-var': 'error', + 'no-dupe-args': 'error', + 'no-dupe-keys': 'error', + 'no-duplicate-case': 'error', + 'no-useless-backreference': 'error', + 'no-empty': ['error', { allowEmptyCatch: true }], + 'no-empty-character-class': 'error', + 'no-empty-pattern': 'error', + 'no-eval': 'error', + 'no-ex-assign': 'error', + 'no-extend-native': 'error', + 'no-extra-bind': 'error', + 'no-extra-boolean-cast': 'error', + 'no-fallthrough': 'error', + 'no-floating-decimal': 'error', + 'no-func-assign': 'error', + 'no-global-assign': 'error', + 'no-import-assign': 'error', + 'no-invalid-regexp': 'error', + 'no-irregular-whitespace': 'error', + 'no-iterator': 'error', + 'no-labels': ['error', { allowLoop: false, allowSwitch: false }], + 'no-lone-blocks': 'error', + 'no-misleading-character-class': 'error', + 'no-prototype-builtins': 'error', + 'no-useless-catch': 'error', + 'no-mixed-operators': ['error', { + groups: [ + ['==', '!=', '===', '!==', '>', '>=', '<', '<='], + ['&&', '||'], + ['in', 'instanceof'] + ], + allowSamePrecedence: true + }], + 'no-mixed-spaces-and-tabs': 'error', + 'no-multi-spaces': 'error', + 'no-multi-str': 'error', + 'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }], + 'no-new': 'error', + 'no-new-func': 'error', + 'no-new-object': 'error', + 'no-new-symbol': 'error', + 'no-new-wrappers': 'error', + 'no-obj-calls': 'error', + 'no-octal': 'error', + 'no-octal-escape': 'error', + 'no-proto': 'error', + 'no-regex-spaces': 'error', + 'no-return-assign': ['error', 'except-parens'], + 'no-self-assign': ['error', { props: true }], + 'no-self-compare': 'error', + 'no-sequences': 'error', + 'no-shadow-restricted-names': 'error', + 'no-sparse-arrays': 'error', + 'no-tabs': 'error', + 'no-template-curly-in-string': 'error', + 'no-this-before-super': 'error', + 'no-trailing-spaces': 'error', + 'no-undef-init': 'error', + 'no-unexpected-multiline': 'error', + 'no-unmodified-loop-condition': 'error', + 'no-unneeded-ternary': ['error', { defaultAssignment: false }], + 'no-unreachable': 'error', + 'no-unreachable-loop': 'error', + 'no-unsafe-finally': 'error', + 'no-unsafe-negation': 'error', + 'no-useless-call': 'error', + 'no-useless-computed-key': 'error', + 'no-useless-escape': 'error', + 'no-useless-rename': 'error', + 'no-useless-return': 'error', + 'no-var': 'warn', + 'no-void': ['error', { allowAsStatement: true }], + 'no-whitespace-before-property': 'error', + 'no-with': 'error', + 'object-curly-newline': ['error', { multiline: true, consistent: true }], + 'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }], + 'object-shorthand': ['warn', 'properties'], + 'one-var': ['error', { initialized: 'never' }], + 'operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before', '|>': 'before' } }], + 'padded-blocks': ['error', { blocks: 'never', switches: 'never', classes: 'never' }], + 'prefer-const': ['error', { destructuring: 'all' }], + 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], + 'quote-props': ['error', 'as-needed'], + 'rest-spread-spacing': ['error', 'never'], + 'semi-spacing': ['error', { before: false, after: true }], + 'space-in-parens': ['error', 'never'], + 'space-unary-ops': ['error', { words: true, nonwords: false }], + 'spaced-comment': ['error', 'always', { + line: { markers: ['*package', '!', '/', ',', '='] }, + block: { balanced: true, markers: ['*package', '!', ',', ':', '::', 'flow-include'], exceptions: ['*'] } + }], + 'symbol-description': 'error', + 'template-curly-spacing': ['error', 'never'], + 'template-tag-spacing': ['error', 'never'], + 'unicode-bom': ['error', 'never'], + 'use-isnan': ['error', { + enforceForSwitchCase: true, + enforceForIndexOf: true + }], + 'valid-typeof': ['error', { requireStringLiterals: true }], + 'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }], + 'yield-star-spacing': ['error', 'both'], + yoda: ['error', 'never'], + + 'import/export': 'error', + 'import/first': 'error', + 'import/no-absolute-path': ['error', { esmodule: true, commonjs: true, amd: false }], + 'import/no-duplicates': 'error', + 'import/no-named-default': 'error', + 'import/no-webpack-loader-syntax': 'error', -const ruleFromStandard = (name: string): Linter.RuleEntry => { - if (configStandard.rules === undefined) throw new Error() - const rule = configStandard.rules[name] - if (rule === undefined) throw new Error() - if (typeof rule !== 'object') return rule - return JSON.parse(JSON.stringify(rule)) -} + 'n/handle-callback-err': ['error', '^(err|error)$'], + 'n/no-callback-literal': 'error', + 'n/no-deprecated-api': 'error', + 'n/no-exports-assign': 'error', + 'n/no-new-require': 'error', + 'n/no-path-concat': 'error', + 'n/process-exit-as-throw': 'error', -function fromEntries (iterable: Array<[string, T]>): Record { - return [...iterable].reduce>((obj, [key, val]) => { - obj[key] = val - return obj - }, {}) -} + 'promise/param-names': 'error' +} satisfies Linter.RulesRecord + +const eslintRuleNames = [...(new Linter()).getRules().keys()] +const namesOfEslintRulesForWhichWeAreUsingTsEquivalents = eslintRuleNames + .filter(name => Object.hasOwn(rules, `@typescript-eslint/${name}`)) const config = { - extends: 'eslint-config-standard', - plugins: ['@typescript-eslint'], + env: { + es2021: true, + node: true + }, + globals: { + document: 'readonly', + navigator: 'readonly', + window: 'readonly' + }, + plugins: [ + '@typescript-eslint', + 'import', + 'n', + 'promise' + ], parser: '@typescript-eslint/parser', parserOptions: { project: true }, rules: { - 'comma-dangle': 'off', - - // TypeScript has this functionality by default: - 'no-undef': 'off', - - // Rules replaced by @typescript-eslint versions: - ...fromEntries(equivalents.map((name) => [name, 'off'])), - camelcase: 'off', - 'no-use-before-define': 'off', - - // @typescript-eslint versions of Standard.js rules: - ...fromEntries(equivalents.map((name) => [`@typescript-eslint/${name}`, ruleFromStandard(name)])), - '@typescript-eslint/no-use-before-define': ['error', { - functions: false, - classes: false, - enums: false, - variables: false, - typedefs: false // Only the TypeScript rule has this option. - }], - - // Rules exclusive to Standard TypeScript: - '@typescript-eslint/adjacent-overload-signatures': 'error', - '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], - '@typescript-eslint/await-thenable': 'error', - '@typescript-eslint/ban-ts-comment': ['error', { - 'ts-expect-error': 'allow-with-description', - 'ts-ignore': true, - 'ts-nocheck': true, - 'ts-check': false, - minimumDescriptionLength: 3 - }], - '@typescript-eslint/ban-tslint-comment': 'error', - '@typescript-eslint/ban-types': ['error', { - extendDefaults: false, - types: { - String: { - message: 'Use string instead', - fixWith: 'string' - }, - Boolean: { - message: 'Use boolean instead', - fixWith: 'boolean' - }, - Number: { - message: 'Use number instead', - fixWith: 'number' - }, - Symbol: { - message: 'Use symbol instead', - fixWith: 'symbol' - }, - BigInt: { - message: 'Use bigint instead', - fixWith: 'bigint' - }, - Function: { - message: [ - 'The `Function` type accepts any function-like value.', - 'It provides no type safety when calling the function, which can be a common source of bugs.', - 'It also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.', - 'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.' - ].join('\n') - }, - // object typing - Object: { - message: [ - 'The `Object` type actually means "any non-nullish value", so it is marginally better than `unknown`.', - '- If you want a type meaning "any object", you probably want `Record` instead.', - '- If you want a type meaning "any value", you probably want `unknown` instead.' - ].join('\n') - }, - '{}': { - message: [ - '`{}` actually means "any non-nullish value".', - '- If you want a type meaning "any object", you probably want `Record` instead.', - '- If you want a type meaning "any value", you probably want `unknown` instead.' - ].join('\n') - } - } - }], - '@typescript-eslint/class-literal-property-style': ['error', 'fields'], - '@typescript-eslint/comma-dangle': ['error', { - arrays: 'never', - objects: 'never', - imports: 'never', - exports: 'never', - functions: 'never', - enums: 'ignore', - generics: 'ignore', - tuples: 'ignore' - }], - '@typescript-eslint/consistent-generic-constructors': ['error', 'constructor'], - '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'], - '@typescript-eslint/consistent-type-assertions': [ - 'error', - { - assertionStyle: 'as', - objectLiteralTypeAssertions: 'never' - } - ], - '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], - '@typescript-eslint/consistent-type-exports': ['error', { - fixMixedExportsWithInlineTypeSpecifier: true - }], - '@typescript-eslint/consistent-type-imports': ['error', { - prefer: 'type-imports', - disallowTypeAnnotations: true, - fixStyle: 'inline-type-imports' - }], - '@typescript-eslint/explicit-function-return-type': ['error', { - allowExpressions: true, - allowHigherOrderFunctions: true, - allowTypedFunctionExpressions: true, - allowDirectConstAssertionInArrowFunctions: true - }], - '@typescript-eslint/member-delimiter-style': [ - 'error', - { - multiline: { delimiter: 'none' }, - singleline: { delimiter: 'comma', requireLast: false } - } - ], - '@typescript-eslint/method-signature-style': 'error', - '@typescript-eslint/naming-convention': ['error', { - selector: 'variableLike', - leadingUnderscore: 'allow', - trailingUnderscore: 'allow', - format: ['camelCase', 'PascalCase', 'UPPER_CASE'] - }], - '@typescript-eslint/no-base-to-string': 'error', - '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: false, ignoreVoidOperator: false }], - '@typescript-eslint/no-dynamic-delete': 'error', - '@typescript-eslint/no-empty-interface': ['error', { allowSingleExtends: true }], - '@typescript-eslint/no-extra-non-null-assertion': 'error', - '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true }], - '@typescript-eslint/no-floating-promises': 'error', - '@typescript-eslint/no-for-in-array': 'error', - '@typescript-eslint/no-invalid-void-type': 'error', - '@typescript-eslint/no-misused-new': 'error', - '@typescript-eslint/no-misused-promises': 'error', - '@typescript-eslint/no-namespace': 'error', - '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', - '@typescript-eslint/no-non-null-assertion': 'error', - '@typescript-eslint/no-this-alias': ['error', { allowDestructuring: true }], - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'error', - '@typescript-eslint/no-unnecessary-type-constraint': 'error', - '@typescript-eslint/no-unsafe-argument': 'error', - '@typescript-eslint/no-var-requires': 'error', - '@typescript-eslint/non-nullable-type-assertion-style': 'error', - '@typescript-eslint/prefer-function-type': 'error', - '@typescript-eslint/prefer-includes': 'error', - '@typescript-eslint/prefer-nullish-coalescing': ['error', { ignoreConditionalTests: false, ignoreMixedLogicalExpressions: false }], - '@typescript-eslint/prefer-optional-chain': 'error', - '@typescript-eslint/prefer-readonly': 'error', - '@typescript-eslint/prefer-reduce-type-parameter': 'error', - '@typescript-eslint/prefer-return-this-type': 'error', - '@typescript-eslint/prefer-ts-expect-error': 'error', - '@typescript-eslint/promise-function-async': 'error', - '@typescript-eslint/require-array-sort-compare': ['error', { ignoreStringArrays: true }], - '@typescript-eslint/restrict-plus-operands': ['error', { skipCompoundAssignments: false }], - '@typescript-eslint/restrict-template-expressions': ['error', { allowNumber: true }], - '@typescript-eslint/return-await': ['error', 'always'], - '@typescript-eslint/strict-boolean-expressions': ['error', { - allowString: false, - allowNumber: false, - allowNullableObject: false, - allowNullableBoolean: false, - allowNullableString: false, - allowNullableNumber: false, - allowAny: false - }], - '@typescript-eslint/triple-slash-reference': ['error', { lib: 'never', path: 'never', types: 'never' }], - '@typescript-eslint/type-annotation-spacing': 'error', - '@typescript-eslint/unbound-method': ['error', { ignoreStatic: false }], - 'no-void': ['error', { allowAsStatement: true }] + ...Object.fromEntries(namesOfEslintRulesForWhichWeAreUsingTsEquivalents.map(name => [name, 'off'])), + ...rules } + } satisfies Linter.Config export = config diff --git a/src/test/_util.ts b/src/test/_util.ts index c6904271..3b8bfd52 100644 --- a/src/test/_util.ts +++ b/src/test/_util.ts @@ -3,7 +3,6 @@ import { rules as typescriptEslintRules } from '@typescript-eslint/eslint-plugin import { Linter } from 'eslint' import semver from 'semver' import { type PackageJson } from 'type-fest' -import configStandard from '../eslint-config-standard' interface PkgDetails { pkgPath: string @@ -52,6 +51,3 @@ export const equivalents = [...(new Linter()).getRules().keys()] .filter(name => Object.prototype.hasOwnProperty.call(typescriptEslintRules, name)) export const typescriptEslintBottom = '@typescript-eslint_bottom' - -if (configStandard.rules === undefined) throw new Error() -export const standardRules = configStandard.rules diff --git a/src/test/compatibility.ts b/src/test/compatibility.ts index 8a8dff4b..146518ce 100644 --- a/src/test/compatibility.ts +++ b/src/test/compatibility.ts @@ -28,7 +28,10 @@ test('our configuration is compatible with the plugin and parser at bottom of pe const config = { ...structuredClone(exported), - plugins: [typescriptEslintBottomPlugin], + plugins: [ + ...exported.plugins.filter(p => p !== '@typescript-eslint'), + typescriptEslintBottomPlugin + ], parser: typescriptEslintBottomParser, rules: Object.fromEntries( Object.entries(ourRules).map(([name, config]) => [ diff --git a/src/test/dependencies.ts b/src/test/dependencies.ts index b5a5b0a5..5301f0d0 100644 --- a/src/test/dependencies.ts +++ b/src/test/dependencies.ts @@ -5,10 +5,7 @@ import { extractVersionSpec, getPkgDetails, isPinnedRange, isSingleCaretRange, t test('range types', async (t) => { const { ourDeps, ourPeerDeps, ourDevDeps } = await getPkgDetails() - t.deepEqual(Object.keys(ourDeps).sort(), ['@typescript-eslint/parser', 'eslint-config-standard']) - const eslintConfigStandard = ourDeps['eslint-config-standard'] - if (eslintConfigStandard === undefined) throw new Error() - t.true(isPinnedRange(eslintConfigStandard), 'eslint-config-standard is pinned') + t.deepEqual(Object.keys(ourDeps).sort(), ['@typescript-eslint/parser']) const parser = ourDeps['@typescript-eslint/parser'] if (parser === undefined) throw new Error() t.true(isSingleCaretRange(parser), '@typescript-eslint/parser is a single `^` range.') diff --git a/src/test/resolved-config.ts b/src/test/resolved-config.ts index d593119d..99c6ea66 100644 --- a/src/test/resolved-config.ts +++ b/src/test/resolved-config.ts @@ -34,51 +34,25 @@ test('resolved config', async (t): Promise => { checkForEach: false }], 'arrow-spacing': ['error', { before: true, after: true }], - 'block-spacing': ['off', 'always'], - 'brace-style': ['off', '1tbs', { allowSingleLine: true }], - camelcase: ['off', { - allow: ['^UNSAFE_'], - properties: 'never', - ignoreGlobals: true - }], - 'comma-dangle': ['off', { - arrays: 'never', - objects: 'never', - imports: 'never', - exports: 'never', - functions: 'never' - }], - 'comma-spacing': ['off', { before: false, after: true }], + 'block-spacing': ['off'], + 'brace-style': ['off'], + 'comma-dangle': ['off'], + 'comma-spacing': ['off'], 'comma-style': ['error', 'last'], 'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }], 'constructor-super': ['error'], curly: ['error', 'multi-line'], 'default-case-last': ['error'], 'dot-location': ['error', 'property'], - 'dot-notation': ['off', { allowKeywords: true }], + 'dot-notation': ['off'], 'eol-last': ['error'], eqeqeq: ['error', 'always', { null: 'ignore' }], - 'func-call-spacing': ['off', 'never'], + 'func-call-spacing': ['off'], 'generator-star-spacing': ['error', { before: true, after: true }], - indent: ['off', 2, { - SwitchCase: 1, - VariableDeclarator: 1, - outerIIFEBody: 1, - MemberExpression: 1, - FunctionDeclaration: { parameters: 1, body: 1 }, - FunctionExpression: { parameters: 1, body: 1 }, - CallExpression: { arguments: 1 }, - ArrayExpression: 1, - ObjectExpression: 1, - ImportDeclaration: 1, - flatTernaryExpressions: false, - ignoreComments: false, - ignoredNodes: ['TemplateLiteral *', 'JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXFragment', 'JSXOpeningFragment', 'JSXClosingFragment', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'], - offsetTernaryExpressions: true - }], - 'key-spacing': ['off', { beforeColon: false, afterColon: true }], - 'keyword-spacing': ['off', { before: true, after: true }], - 'lines-between-class-members': ['off', 'always', { exceptAfterSingleLine: true }], + indent: ['off'], + 'key-spacing': ['off'], + 'keyword-spacing': ['off'], + 'lines-between-class-members': ['off'], 'multiline-ternary': ['error', 'always-multiline'], 'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }], 'new-parens': ['error'], @@ -107,7 +81,7 @@ test('resolved config', async (t): Promise => { 'no-extend-native': ['error'], 'no-extra-bind': ['error'], 'no-extra-boolean-cast': ['error'], - 'no-extra-parens': ['off', 'functions'], + 'no-extra-parens': ['off'], 'no-fallthrough': ['error'], 'no-floating-decimal': ['error'], 'no-func-assign': ['error'], @@ -144,7 +118,7 @@ test('resolved config', async (t): Promise => { 'no-octal': ['error'], 'no-octal-escape': ['error'], 'no-proto': ['error'], - 'no-redeclare': ['off', { builtinGlobals: false }], + 'no-redeclare': ['off'], 'no-regex-spaces': ['error'], 'no-return-assign': ['error', 'except-parens'], 'no-self-assign': ['error', { props: true }], @@ -157,7 +131,6 @@ test('resolved config', async (t): Promise => { 'no-this-before-super': ['error'], 'no-throw-literal': ['off'], 'no-trailing-spaces': ['error'], - 'no-undef': ['off'], 'no-undef-init': ['error'], 'no-unexpected-multiline': ['error'], 'no-unmodified-loop-condition': ['error'], @@ -166,18 +139,9 @@ test('resolved config', async (t): Promise => { 'no-unreachable-loop': ['error'], 'no-unsafe-finally': ['error'], 'no-unsafe-negation': ['error'], - 'no-unused-expressions': ['off', { - allowShortCircuit: true, - allowTernary: true, - allowTaggedTemplates: true - }], - 'no-unused-vars': ['off', { - args: 'none', - caughtErrors: 'none', - ignoreRestSiblings: true, - vars: 'all' - }], - 'no-use-before-define': ['off', { functions: false, classes: false, variables: false }], + 'no-unused-expressions': ['off'], + 'no-unused-vars': ['off'], + 'no-use-before-define': ['off'], 'no-useless-call': ['error'], 'no-useless-computed-key': ['error'], 'no-useless-constructor': ['off'], @@ -188,7 +152,7 @@ test('resolved config', async (t): Promise => { 'no-whitespace-before-property': ['error'], 'no-with': ['error'], 'object-curly-newline': ['error', { multiline: true, consistent: true }], - 'object-curly-spacing': ['off', 'always'], + 'object-curly-spacing': ['off'], 'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }], 'one-var': ['error', { initialized: 'never' }], 'operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before', '|>': 'before' } }], @@ -197,12 +161,12 @@ test('resolved config', async (t): Promise => { 'prefer-promise-reject-errors': ['off'], 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], 'quote-props': ['error', 'as-needed'], - quotes: ['off', 'single', { avoidEscape: true, allowTemplateLiterals: false }], + quotes: ['off'], 'rest-spread-spacing': ['error', 'never'], - semi: ['off', 'never'], + semi: ['off'], 'semi-spacing': ['error', { before: false, after: true }], - 'space-before-blocks': ['off', 'always'], - 'space-before-function-paren': ['off', 'always'], + 'space-before-blocks': ['off'], + 'space-before-function-paren': ['off'], 'space-in-parens': ['error', 'never'], 'space-infix-ops': ['off'], 'space-unary-ops': ['error', { words: true, nonwords: false }], diff --git a/src/test/rules-to-consider.ts b/src/test/rules-to-consider.ts index cd574914..6d38b8df 100644 --- a/src/test/rules-to-consider.ts +++ b/src/test/rules-to-consider.ts @@ -1,30 +1,42 @@ import test from 'ava' import { rules as typescriptEslintRules } from '@typescript-eslint/eslint-plugin' -import { equivalents, ourRules } from './_util' -import configStandard from '../eslint-config-standard' +import { ourRules } from './_util' // Some of these rules may have been considered but the reason for their exclusion // is not captured here. // This serves as a todo list and should ideally eventually end up empty // and then fail upon plugin upgrades where new rules are released. const notYetConsideredRules: string[] = [ + 'class-methods-use-this', + 'consistent-return', + 'default-param-last', 'explicit-member-accessibility', 'explicit-module-boundary-types', + 'init-declarations', + 'lines-around-comment', + 'max-params', 'member-ordering', 'no-array-delete', 'no-confusing-non-null-assertion', 'no-duplicate-enum-values', 'no-duplicate-type-constituents', + 'no-empty-function', 'no-explicit-any', + 'no-extra-semi', 'no-implicit-any-catch', 'no-import-type-side-effects', 'no-inferrable-types', + 'no-invalid-this', + 'no-loop-func', + 'no-magic-numbers', 'no-meaningless-void-operator', 'no-mixed-enums', 'no-non-null-asserted-nullish-coalescing', 'no-parameter-properties', 'no-redundant-type-constituents', 'no-require-imports', + 'no-restricted-imports', + 'no-shadow', 'no-type-alias', 'no-unnecessary-condition', 'no-unnecessary-qualifier', @@ -39,8 +51,10 @@ const notYetConsideredRules: string[] = [ 'no-useless-empty-export', 'no-useless-template-literals', 'only-throw-error', + 'padding-line-between-statements', 'parameter-properties', 'prefer-as-const', + 'prefer-destructuring', 'prefer-enum-initializers', 'prefer-find', 'prefer-for-of', @@ -49,6 +63,7 @@ const notYetConsideredRules: string[] = [ 'prefer-readonly-parameter-types', 'prefer-regexp-exec', 'prefer-string-starts-ends-with', + 'require-await', 'sort-type-constituents', 'sort-type-union-intersection-members', 'switch-exhaustiveness-check', @@ -57,9 +72,6 @@ const notYetConsideredRules: string[] = [ 'use-unknown-in-catch-callback-variable' ] -const equivalentsNotUsedUpstream = equivalents - .filter(name => !Object.prototype.hasOwnProperty.call(configStandard.rules, name)) - test('all plugin rules are considered', (t) => { const intentionallyExcludedRules: string[] = [ ] @@ -69,15 +81,11 @@ test('all plugin rules are considered', (t) => { } intentionallyExcludedRules.forEach(assertNotInOurRules) notYetConsideredRules.forEach(assertNotInOurRules) - notYetConsideredRules.forEach((rule) => { - t.false(equivalentsNotUsedUpstream.includes(rule), `the equivalent rule ${rule} should not be considered because it is not used upstream`) - }) const inexplicablyExcludedRules = Object.keys(typescriptEslintRules) .filter((rule) => { const typescriptRule = `@typescript-eslint/${rule}` return !Object.keys(ourRules).includes(typescriptRule) && !intentionallyExcludedRules.includes(rule) && - !equivalentsNotUsedUpstream.includes(rule) && !notYetConsideredRules.includes(rule) }) t.deepEqual(inexplicablyExcludedRules, [], 'rules inexplicably excluded') diff --git a/src/test/standard.ts b/src/test/standard.ts deleted file mode 100644 index 8f3fd4b6..00000000 --- a/src/test/standard.ts +++ /dev/null @@ -1,47 +0,0 @@ -import test from 'ava' -import standardPkg from 'eslint-config-standard/package.json' -import { equivalents, getPkgDetails, ourRules, standardRules } from './_util' - -if (standardRules === undefined) throw new Error('`eslint-config-standard` does not seem to be exporting rules') - -test('Own peerDependencies include those of eslint-config-standard', async (t) => { - const { ourPeerDeps } = await getPkgDetails() - Object - .entries(standardPkg.peerDependencies) - .forEach(([_name, standardDep]) => { - // https://github.com/microsoft/TypeScript/pull/12253 - const name = _name as keyof typeof standardPkg.peerDependencies - const ourDep = ourPeerDeps[name] - t.is(ourDep, standardDep, name) - }) -}) - -test('Exported rule values do not reference eslint-config-standard ones', (t) => { - for (const ruleName in standardRules) { - if (typeof standardRules[ruleName] !== 'object') continue // Non-objects use copy-by-value - - t.false(ourRules[`@typescript-eslint/${ruleName}`] === standardRules[ruleName]) - } -}) - -test('all direct equivalents are used', (t) => { - const unusedDirectEquivalents = equivalents - .filter((rule) => Object.prototype.hasOwnProperty.call(standardRules, rule) && !Object.prototype.hasOwnProperty.call(ourRules, `@typescript-eslint/${rule}`)) - t.deepEqual(unusedDirectEquivalents, []) -}) - -test('configs of equivalents are supersets of upstream', async (t) => { - const { diff: justDiff } = await import('just-diff') - equivalents.forEach((ruleName) => { - const standardRuleConfig = standardRules[ruleName] - const ourRuleConfig = ourRules[`@typescript-eslint/${ruleName}`] - const diff = justDiff({ _: standardRuleConfig }, { _: ourRuleConfig }) - diff.forEach((diff) => { - if (diff.op !== 'add') { - t.log(ruleName, { standardRuleConfig, ourRuleConfig, diff }) - t.fail() - } - t.pass() - }) - }) -})