From e95b1f2754258cf219ecfdfdf712b6de5657dd8a Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 27 Jan 2024 21:07:02 -0800 Subject: [PATCH 1/4] [eslint config] [base] add new disabled rules --- packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js index 944fe71a05..09c247451a 100644 --- a/packages/eslint-config-airbnb-base/rules/best-practices.js +++ b/packages/eslint-config-airbnb-base/rules/best-practices.js @@ -217,6 +217,11 @@ module.exports = { // https://eslint.org/docs/rules/no-nonoctal-decimal-escape 'no-nonoctal-decimal-escape': 'error', + // Disallow calls to the Object constructor without an argument + // https://eslint.org/docs/latest/rules/no-object-constructor + // TODO: enable, semver-major + 'no-object-constructor': 'off', + // disallow use of (old style) octal literals // https://eslint.org/docs/rules/no-octal 'no-octal': 'error', From 55899b57a6de826d8d762693d6d4f999d652ae2d Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 27 Jan 2024 21:08:54 -0800 Subject: [PATCH 2/4] [eslint config] [*] [deps] update deps --- .../eslint-config-airbnb-base/package.json | 10 +++++----- packages/eslint-config-airbnb/package.json | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json index 39c0fdf944..683284f43e 100644 --- a/packages/eslint-config-airbnb-base/package.json +++ b/packages/eslint-config-airbnb-base/package.json @@ -68,26 +68,26 @@ }, "homepage": "https://github.com/airbnb/javascript", "devDependencies": { - "@babel/runtime": "^7.22.6", + "@babel/runtime": "^7.23.9", "babel-preset-airbnb": "^4.5.0", "babel-tape-runner": "^3.0.0", "eclint": "^2.8.1", "eslint": "^7.32.0 || ^8.2.0", "eslint-find-rules": "^4.1.0", - "eslint-plugin-import": "^2.28.0", + "eslint-plugin-import": "^2.29.1", "in-publish": "^2.0.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.6" + "tape": "^5.7.4" }, "peerDependencies": { "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.28.0" + "eslint-plugin-import": "^2.29.1" }, "engines": { "node": "^10.12.0 || >=12.0.0" }, "dependencies": { "confusing-browser-globals": "^1.0.11", - "object.entries": "^1.1.6" + "object.entries": "^1.1.7" } } diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json index 1ac7a902a2..c99ef24811 100644 --- a/packages/eslint-config-airbnb/package.json +++ b/packages/eslint-config-airbnb/package.json @@ -67,29 +67,29 @@ "homepage": "https://github.com/airbnb/javascript", "dependencies": { "eslint-config-airbnb-base": "^15.0.0", - "object.entries": "^1.1.6" + "object.entries": "^1.1.7" }, "devDependencies": { - "@babel/runtime": "^7.22.6", + "@babel/runtime": "^7.23.9", "babel-preset-airbnb": "^4.5.0", "babel-tape-runner": "^3.0.0", "eclint": "^2.8.1", "eslint": "^7.32.0 || ^8.2.0", "eslint-find-rules": "^4.1.0", - "eslint-plugin-import": "^2.28.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "in-publish": "^2.0.1", "react": ">= 0.13.0", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.6" + "tape": "^5.7.4" }, "peerDependencies": { "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.28.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0" }, "engines": { From 0681a43e0a0181e8cafd0d3004f967a238411ba2 Mon Sep 17 00:00:00 2001 From: 43081j <43081j@users.noreply.github.com> Date: Thu, 4 Jan 2024 19:14:38 +0000 Subject: [PATCH 3/4] [eslint config] [*] [refactor] remove `object.entries` dependency This removes the `object.entries` package and uses the widely available built-in native `Object.entries`. --- packages/eslint-config-airbnb-base/package.json | 3 +-- packages/eslint-config-airbnb-base/whitespace-async.js | 3 +-- packages/eslint-config-airbnb-base/whitespace.js | 3 +-- packages/eslint-config-airbnb/package.json | 3 +-- packages/eslint-config-airbnb/whitespace-async.js | 3 +-- packages/eslint-config-airbnb/whitespace.js | 3 +-- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json index 683284f43e..92daf3c33b 100644 --- a/packages/eslint-config-airbnb-base/package.json +++ b/packages/eslint-config-airbnb-base/package.json @@ -87,7 +87,6 @@ "node": "^10.12.0 || >=12.0.0" }, "dependencies": { - "confusing-browser-globals": "^1.0.11", - "object.entries": "^1.1.7" + "confusing-browser-globals": "^1.0.11" } } diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js index d6742fb7c4..f7994fca04 100755 --- a/packages/eslint-config-airbnb-base/whitespace-async.js +++ b/packages/eslint-config-airbnb-base/whitespace-async.js @@ -1,6 +1,5 @@ #!/usr/bin/env node -const entries = require('object.entries'); const { ESLint } = require('eslint'); const baseConfig = require('.'); @@ -26,7 +25,7 @@ async function onlyErrorOnRules(rulesToError, config) { }); const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules; - entries(baseRules).forEach((rule) => { + Object.entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js index f4b93bb492..fcc5099af9 100644 --- a/packages/eslint-config-airbnb-base/whitespace.js +++ b/packages/eslint-config-airbnb-base/whitespace.js @@ -4,7 +4,6 @@ const { CLIEngine } = require('eslint'); if (CLIEngine) { /* eslint no-inner-declarations: 0 */ - const entries = require('object.entries'); const whitespaceRules = require('./whitespaceRules'); const baseConfig = require('.'); @@ -26,7 +25,7 @@ if (CLIEngine) { const cli = new CLIEngine({ baseConfig: config, useEslintrc: false }); const baseRules = cli.getConfigForFile(require.resolve('./')).rules; - entries(baseRules).forEach((rule) => { + Object.entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json index c99ef24811..69a4670f8e 100644 --- a/packages/eslint-config-airbnb/package.json +++ b/packages/eslint-config-airbnb/package.json @@ -66,8 +66,7 @@ }, "homepage": "https://github.com/airbnb/javascript", "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.entries": "^1.1.7" + "eslint-config-airbnb-base": "^15.0.0" }, "devDependencies": { "@babel/runtime": "^7.23.9", diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js index d6742fb7c4..f7994fca04 100755 --- a/packages/eslint-config-airbnb/whitespace-async.js +++ b/packages/eslint-config-airbnb/whitespace-async.js @@ -1,6 +1,5 @@ #!/usr/bin/env node -const entries = require('object.entries'); const { ESLint } = require('eslint'); const baseConfig = require('.'); @@ -26,7 +25,7 @@ async function onlyErrorOnRules(rulesToError, config) { }); const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules; - entries(baseRules).forEach((rule) => { + Object.entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js index f4b93bb492..fcc5099af9 100644 --- a/packages/eslint-config-airbnb/whitespace.js +++ b/packages/eslint-config-airbnb/whitespace.js @@ -4,7 +4,6 @@ const { CLIEngine } = require('eslint'); if (CLIEngine) { /* eslint no-inner-declarations: 0 */ - const entries = require('object.entries'); const whitespaceRules = require('./whitespaceRules'); const baseConfig = require('.'); @@ -26,7 +25,7 @@ if (CLIEngine) { const cli = new CLIEngine({ baseConfig: config, useEslintrc: false }); const baseRules = cli.getConfigForFile(require.resolve('./')).rules; - entries(baseRules).forEach((rule) => { + Object.entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); From 51a37d0fa5f334fdfae9fea39711402fb6eb3b34 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 27 Jan 2024 21:02:05 -0800 Subject: [PATCH 4/4] [eslint config] [*] [robustness] cache static builtins --- packages/eslint-config-airbnb-base/whitespace-async.js | 8 +++++--- packages/eslint-config-airbnb-base/whitespace.js | 8 +++++--- packages/eslint-config-airbnb/whitespace-async.js | 8 +++++--- packages/eslint-config-airbnb/whitespace.js | 8 +++++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js index f7994fca04..06f4f89075 100755 --- a/packages/eslint-config-airbnb-base/whitespace-async.js +++ b/packages/eslint-config-airbnb-base/whitespace-async.js @@ -1,5 +1,7 @@ #!/usr/bin/env node +const { isArray } = Array; +const { entries } = Object; const { ESLint } = require('eslint'); const baseConfig = require('.'); @@ -8,7 +10,7 @@ const whitespaceRules = require('./whitespaceRules'); const severities = ['off', 'warn', 'error']; function getSeverity(ruleConfig) { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { return getSeverity(ruleConfig[0]); } if (typeof ruleConfig === 'number') { @@ -25,13 +27,13 @@ async function onlyErrorOnRules(rulesToError, config) { }); const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules; - Object.entries(baseRules).forEach((rule) => { + entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1)); } else if (typeof ruleConfig === 'number') { errorsOnly.rules[ruleName] = 1; diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js index fcc5099af9..e896072154 100644 --- a/packages/eslint-config-airbnb-base/whitespace.js +++ b/packages/eslint-config-airbnb-base/whitespace.js @@ -1,5 +1,7 @@ /* eslint global-require: 0 */ +const { isArray } = Array; +const { entries } = Object; const { CLIEngine } = require('eslint'); if (CLIEngine) { @@ -11,7 +13,7 @@ if (CLIEngine) { const severities = ['off', 'warn', 'error']; function getSeverity(ruleConfig) { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { return getSeverity(ruleConfig[0]); } if (typeof ruleConfig === 'number') { @@ -25,13 +27,13 @@ if (CLIEngine) { const cli = new CLIEngine({ baseConfig: config, useEslintrc: false }); const baseRules = cli.getConfigForFile(require.resolve('./')).rules; - Object.entries(baseRules).forEach((rule) => { + entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1)); } else if (typeof ruleConfig === 'number') { errorsOnly.rules[ruleName] = 1; diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js index f7994fca04..06f4f89075 100755 --- a/packages/eslint-config-airbnb/whitespace-async.js +++ b/packages/eslint-config-airbnb/whitespace-async.js @@ -1,5 +1,7 @@ #!/usr/bin/env node +const { isArray } = Array; +const { entries } = Object; const { ESLint } = require('eslint'); const baseConfig = require('.'); @@ -8,7 +10,7 @@ const whitespaceRules = require('./whitespaceRules'); const severities = ['off', 'warn', 'error']; function getSeverity(ruleConfig) { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { return getSeverity(ruleConfig[0]); } if (typeof ruleConfig === 'number') { @@ -25,13 +27,13 @@ async function onlyErrorOnRules(rulesToError, config) { }); const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules; - Object.entries(baseRules).forEach((rule) => { + entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1)); } else if (typeof ruleConfig === 'number') { errorsOnly.rules[ruleName] = 1; diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js index fcc5099af9..e896072154 100644 --- a/packages/eslint-config-airbnb/whitespace.js +++ b/packages/eslint-config-airbnb/whitespace.js @@ -1,5 +1,7 @@ /* eslint global-require: 0 */ +const { isArray } = Array; +const { entries } = Object; const { CLIEngine } = require('eslint'); if (CLIEngine) { @@ -11,7 +13,7 @@ if (CLIEngine) { const severities = ['off', 'warn', 'error']; function getSeverity(ruleConfig) { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { return getSeverity(ruleConfig[0]); } if (typeof ruleConfig === 'number') { @@ -25,13 +27,13 @@ if (CLIEngine) { const cli = new CLIEngine({ baseConfig: config, useEslintrc: false }); const baseRules = cli.getConfigForFile(require.resolve('./')).rules; - Object.entries(baseRules).forEach((rule) => { + entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') { - if (Array.isArray(ruleConfig)) { + if (isArray(ruleConfig)) { errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1)); } else if (typeof ruleConfig === 'number') { errorsOnly.rules[ruleName] = 1;