diff --git a/.changeset/gentle-dancers-greet.md b/.changeset/gentle-dancers-greet.md new file mode 100644 index 0000000000..bf160a7099 --- /dev/null +++ b/.changeset/gentle-dancers-greet.md @@ -0,0 +1,7 @@ +--- +'@backstage/cli': patch +--- + +Added a new ESLint configuration setup for packages, which utilizes package roles to generate the correct configuration. The new configuration is available at `@backstage/cli/config/eslint-factory`. + +Introduced a new `backstage-cli migrate package-lint-configs` command, which migrates old lint configurations to use `@backstage/cli/config/eslint-factory`. diff --git a/packages/app-defaults/.eslintrc.js b/packages/app-defaults/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/app-defaults/.eslintrc.js +++ b/packages/app-defaults/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/app/.eslintrc.js b/packages/app/.eslintrc.js index 930c98ee1b..e2a53a6ad2 100644 --- a/packages/app/.eslintrc.js +++ b/packages/app/.eslintrc.js @@ -1,11 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], - overrides: [ - { - files: ['**/*.ts?(x)'], - rules: { - 'react/prop-types': 1, - }, - }, - ], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-common/.eslintrc.js b/packages/backend-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/backend-common/.eslintrc.js +++ b/packages/backend-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-tasks/.eslintrc.js b/packages/backend-tasks/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/backend-tasks/.eslintrc.js +++ b/packages/backend-tasks/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-test-utils/.eslintrc.js b/packages/backend-test-utils/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/backend-test-utils/.eslintrc.js +++ b/packages/backend-test-utils/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend/.eslintrc.js b/packages/backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/backend/.eslintrc.js +++ b/packages/backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/catalog-client/.eslintrc.js b/packages/catalog-client/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/catalog-client/.eslintrc.js +++ b/packages/catalog-client/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/catalog-model/.eslintrc.js b/packages/catalog-model/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/catalog-model/.eslintrc.js +++ b/packages/catalog-model/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/cli-common/.eslintrc.js b/packages/cli-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/cli-common/.eslintrc.js +++ b/packages/cli-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/cli/.eslintrc.js b/packages/cli/.eslintrc.js index 69bec6cd2a..e9ea2f5bfb 100644 --- a/packages/cli/.eslintrc.js +++ b/packages/cli/.eslintrc.js @@ -1,7 +1,6 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { ignorePatterns: ['templates/**'], rules: { 'no-console': 0, }, -}; +}); diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js new file mode 100644 index 0000000000..67f30ac359 --- /dev/null +++ b/packages/cli/config/eslint-factory.js @@ -0,0 +1,286 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const { join: joinPath } = require('path'); + +/** + * Creates a ESLint configuration that extends the base Backstage configuration. + * In addition to the standard ESLint configuration options, the `extraConfig` + * parameter also accepts the following keys: + * + * - `tsRules`: Additional ESLint rules to apply to TypeScript + * - `testRules`: Additional ESLint rules to apply to tests + * - `restrictedImports`: Additional paths to add to no-restricted-imports + * - `restrictedSrcImports`: Additional paths to add to no-restricted-imports in src files + * - `restrictedTestImports`: Additional paths to add to no-restricted-imports in test files + * - `restrictedSyntax`: Additional patterns to add to no-restricted-syntax + * - `restrictedSrcSyntax`: Additional patterns to add to no-restricted-syntax in src files + * - `restrictedTestSyntax`: Additional patterns to add to no-restricted-syntax in test files + */ +function createConfig(dir, extraConfig = {}) { + const { + extends: extraExtends, + plugins, + env, + parserOptions, + ignorePatterns, + + rules, + tsRules, + testRules, + + restrictedImports, + restrictedSrcImports, + restrictedTestImports, + restrictedSyntax, + restrictedSrcSyntax, + restrictedTestSyntax, + + ...otherConfig + } = extraConfig; + + return { + ...otherConfig, + extends: [ + '@spotify/eslint-config-base', + '@spotify/eslint-config-typescript', + 'prettier', + 'plugin:jest/recommended', + 'plugin:monorepo/recommended', + ...(extraExtends ?? []), + ], + parser: '@typescript-eslint/parser', + plugins: ['import', ...(plugins ?? [])], + env: { + jest: true, + ...env, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + lib: require('./tsconfig.json').compilerOptions.lib, + ...parserOptions, + }, + ignorePatterns: [ + '.eslintrc.js', + '**/dist/**', + '**/dist-types/**', + ...(ignorePatterns ?? []), + ], + rules: { + 'no-shadow': 'off', + 'no-redeclare': 'off', + '@typescript-eslint/no-shadow': 'error', + '@typescript-eslint/no-redeclare': 'error', + 'no-undef': 'off', + 'import/newline-after-import': 'error', + 'import/no-extraneous-dependencies': [ + 'error', + { + devDependencies: dir + ? [ + `!${joinPath(dir, 'src/**')}`, + joinPath(dir, 'src/**/*.test.*'), + joinPath(dir, 'src/**/*.stories.*'), + joinPath(dir, 'src/setupTests.*'), + ] + : [ + // Legacy config for packages that don't provide a dir + '**/*.test.*', + '**/*.stories.*', + '**/src/setupTests.*', + '**/dev/**', + ], + optionalDependencies: true, + peerDependencies: true, + bundledDependencies: true, + }, + ], + 'no-unused-expressions': 'off', + '@typescript-eslint/no-unused-expressions': 'error', + '@typescript-eslint/consistent-type-assertions': 'error', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + vars: 'all', + args: 'after-used', + ignoreRestSiblings: true, + argsIgnorePattern: '^_', + }, + ], + + 'no-restricted-imports': [ + 2, + { + paths: [ + ...(restrictedImports ?? []), + ...(restrictedSrcImports ?? []), + ], + // Avoid cross-package imports + patterns: ['**/../../**/*/src/**', '**/../../**/*/src'], + }, + ], + + 'no-restricted-syntax': [ + 'error', + ...(restrictedSyntax ?? []), + ...(restrictedSrcSyntax ?? []), + ], + + ...rules, + }, + overrides: [ + { + files: ['**/*.ts?(x)'], + rules: { + '@typescript-eslint/no-unused-vars': 'off', + 'no-undef': 'off', + ...tsRules, + }, + }, + { + files: ['**/*.test.*', '**/*.stories.*', 'src/setupTests.*', '!src/**'], + rules: { + ...testRules, + 'no-restricted-syntax': [ + 'error', + ...(restrictedSyntax ?? []), + ...(restrictedTestSyntax ?? []), + ], + 'no-restricted-imports': [ + 2, + { + paths: [ + ...(restrictedImports ?? []), + ...(restrictedTestImports ?? []), + ], + // Avoid cross-package imports + patterns: ['**/../../**/*/src/**', '**/../../**/*/src'], + }, + ], + }, + }, + ], + }; +} + +/** + * Creates a ESLint configuration for the given package role. + * The `extraConfig` parameter accepts the same keys as for the `createConfig` function. + */ +function createConfigForRole(dir, role, extraConfig = {}) { + switch (role) { + case 'common-library': + return createConfig(dir, extraConfig); + + case 'web-library': + case 'frontend': + case 'frontend-plugin': + case 'frontend-plugin-module': + return createConfig(dir, { + ...extraConfig, + extends: [ + '@spotify/eslint-config-react', + ...(extraConfig.extends ?? []), + ], + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ...extraConfig.parserOptions, + }, + settings: { + react: { + version: 'detect', + }, + ...extraConfig.settings, + }, + restrictedImports: [ + { + // Importing the entire MUI icons packages kills build performance as the list of icons is huge. + name: '@material-ui/icons', + message: "Please import '@material-ui/icons/' instead.", + }, + { + name: '@material-ui/icons/', // because this is possible too ._. + message: "Please import '@material-ui/icons/' instead.", + }, + ...require('module').builtinModules, + ...(extraConfig.restrictedImports ?? []), + ], + tsRules: { + 'react/prop-types': 0, + ...extraConfig.tsRules, + }, + }); + + case 'cli': + case 'node-library': + case 'backend': + case 'backend-plugin': + case 'backend-plugin-module': + return createConfig(dir, { + ...extraConfig, + globals: { + __non_webpack_require__: 'readonly', + ...extraConfig.globals, + }, + rules: { + 'no-console': 0, // Permitted in console programs + 'new-cap': ['error', { capIsNew: false }], // Because Express constructs things e.g. like 'const r = express.Router()' + ...extraConfig.rules, + }, + restrictedSyntax: [ + { + message: + 'Default import from winston is not allowed, import `* as winston` instead.', + selector: + 'ImportDeclaration[source.value="winston"] ImportDefaultSpecifier', + }, + ...(extraConfig.restrictedSyntax ?? []), + ], + restrictedSrcSyntax: [ + { + message: + "`__dirname` doesn't refer to the same dir in production builds, try `resolvePackagePath()` from `@backstage/backend-common` instead.", + selector: 'Identifier[name="__dirname"]', + }, + ...(extraConfig.restrictedSrcSyntax ?? []), + ], + }); + default: + throw new Error(`Unknown package role ${role}`); + } +} + +/** + * Creates a ESLint configuration for the package in the given directory. + * The `extraConfig` parameter accepts the same keys as for the `createConfig` function. + */ +function createPackageConfig(dir, extraConfig) { + const pkg = require(joinPath(dir, 'package.json')); + const role = pkg.backstage?.role; + if (!role) { + throw new Error(`Package ${pkg.name} does not have a backstage.role`); + } + + return createConfigForRole(dir, role, extraConfig); +} + +module.exports = createPackageConfig; // Alias +module.exports.createConfig = createConfig; +module.exports.createConfigForRole = createConfigForRole; +module.exports.createPackageConfig = createPackageConfig; diff --git a/packages/cli/config/eslint.backend.js b/packages/cli/config/eslint.backend.js index 519b388b96..1851312be5 100644 --- a/packages/cli/config/eslint.backend.js +++ b/packages/cli/config/eslint.backend.js @@ -14,90 +14,7 @@ * limitations under the License. */ -const globalRestrictedSyntax = [ - { - message: - 'Default import from winston is not allowed, import `* as winston` instead.', - selector: - 'ImportDeclaration[source.value="winston"] ImportDefaultSpecifier', - }, -]; - -module.exports = { - extends: [ - '@spotify/eslint-config-base', - '@spotify/eslint-config-typescript', - 'prettier', - 'plugin:jest/recommended', - 'plugin:monorepo/recommended', - ], - parser: '@typescript-eslint/parser', - plugins: ['import'], - env: { - jest: true, - }, - globals: { - __non_webpack_require__: 'readonly', - }, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - lib: require('./tsconfig.json').compilerOptions.lib, - }, - ignorePatterns: ['.eslintrc.js', '**/dist/**', '**/dist-types/**'], - rules: { - 'no-shadow': 'off', - 'no-redeclare': 'off', - '@typescript-eslint/no-shadow': 'error', - '@typescript-eslint/no-redeclare': 'error', - - 'no-console': 0, // Permitted in console programs - 'new-cap': ['error', { capIsNew: false }], // Because Express constructs things e.g. like 'const r = express.Router()' - 'import/newline-after-import': 'error', - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: ['**/*.test.*', 'src/setupTests.*', 'dev/**'], - optionalDependencies: true, - peerDependencies: true, - bundledDependencies: true, - }, - ], - 'no-unused-expressions': 'off', - '@typescript-eslint/no-unused-expressions': 'error', - '@typescript-eslint/no-unused-vars': [ - 'warn', - { vars: 'all', args: 'after-used', ignoreRestSiblings: true }, - ], - // Avoid cross-package imports - 'no-restricted-imports': [ - 2, - { patterns: ['**/../../**/*/src/**', '**/../../**/*/src'] }, - ], - // Avoid default import from winston as it breaks at runtime - 'no-restricted-syntax': [ - 'error', - { - message: - "`__dirname` doesn't refer to the same dir in production builds, try `resolvePackagePath()` from `@backstage/backend-common` instead.", - selector: 'Identifier[name="__dirname"]', - }, - ...globalRestrictedSyntax, - ], - }, - overrides: [ - { - files: ['**/*.ts?(x)'], - rules: { - '@typescript-eslint/no-unused-vars': 'off', - 'no-undef': 'off', - }, - }, - { - files: ['*.test.*', 'src/setupTests.*', 'dev/**'], - rules: { - 'no-restricted-syntax': ['error', ...globalRestrictedSyntax], - }, - }, - ], -}; +module.exports = require('./eslint-factory').createConfigForRole( + undefined, + 'node-library', +); diff --git a/packages/cli/config/eslint.js b/packages/cli/config/eslint.js index 5555dad451..9258454837 100644 --- a/packages/cli/config/eslint.js +++ b/packages/cli/config/eslint.js @@ -14,96 +14,7 @@ * limitations under the License. */ -module.exports = { - extends: [ - '@spotify/eslint-config-base', - '@spotify/eslint-config-react', - '@spotify/eslint-config-typescript', - 'prettier', - 'plugin:jest/recommended', - 'plugin:monorepo/recommended', - ], - parser: '@typescript-eslint/parser', - plugins: ['import'], - env: { - jest: true, - }, - parserOptions: { - ecmaVersion: 2018, - ecmaFeatures: { - jsx: true, - }, - sourceType: 'module', - lib: require('./tsconfig.json').compilerOptions.lib, - }, - settings: { - react: { - version: 'detect', - }, - }, - ignorePatterns: ['.eslintrc.js', '**/dist/**', '**/dist-types/**'], - rules: { - 'no-shadow': 'off', - 'no-redeclare': 'off', - '@typescript-eslint/no-shadow': 'error', - '@typescript-eslint/no-redeclare': 'error', - 'no-undef': 'off', - 'import/newline-after-import': 'error', - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: [ - '**/*.test.*', - '**/*.stories.*', - '**/src/setupTests.*', - '**/dev/**', - ], - optionalDependencies: true, - peerDependencies: true, - bundledDependencies: true, - }, - ], - 'no-unused-expressions': 'off', - '@typescript-eslint/no-unused-expressions': 'error', - '@typescript-eslint/consistent-type-assertions': 'error', - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - vars: 'all', - args: 'after-used', - ignoreRestSiblings: true, - argsIgnorePattern: '^_', - }, - ], - 'no-restricted-imports': [ - 2, - { - paths: [ - { - // Importing the entire MUI icons packages kills build performance as the list of icons is huge. - name: '@material-ui/icons', - message: "Please import '@material-ui/icons/' instead.", - }, - { - name: '@material-ui/icons/', // because this is possible too ._. - message: "Please import '@material-ui/icons/' instead.", - }, - ...require('module').builtinModules, - ], - // Avoid cross-package imports - patterns: ['**/../../**/*/src/**', '**/../../**/*/src'], - }, - ], - }, - overrides: [ - { - files: ['**/*.ts?(x)'], - rules: { - // Default to not enforcing prop-types in typescript - 'react/prop-types': 0, - '@typescript-eslint/no-unused-vars': 'off', - 'no-undef': 'off', - }, - }, - ], -}; +module.exports = require('./eslint-factory').createConfigForRole( + undefined, + 'web-library', +); diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 5cb02c82b4..a79f9fe81b 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -165,6 +165,15 @@ export function registerMigrateCommand(program: CommanderStatic) { .action( lazy(() => import('./migrate/packageScripts').then(m => m.command)), ); + + command + .command('package-lint-configs') + .description( + 'Migrates all packages to use @backstage/cli/config/eslint-factory', + ) + .action( + lazy(() => import('./migrate/packageLintConfigs').then(m => m.command)), + ); } export function registerCommands(program: CommanderStatic) { diff --git a/packages/cli/src/commands/migrate/packageLintConfigs.ts b/packages/cli/src/commands/migrate/packageLintConfigs.ts new file mode 100644 index 0000000000..c0007ef59d --- /dev/null +++ b/packages/cli/src/commands/migrate/packageLintConfigs.ts @@ -0,0 +1,89 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import fs from 'fs-extra'; +import { resolve as resolvePath } from 'path'; +import { PackageGraph } from '../../lib/monorepo'; +import { runPlain } from '../../lib/run'; + +const PREFIX = `module.exports = require('@backstage/cli/config/eslint-factory')`; + +export async function command() { + const packages = await PackageGraph.listTargetPackages(); + + const oldConfigs = [ + require.resolve('@backstage/cli/config/eslint.js'), + require.resolve('@backstage/cli/config/eslint.backend.js'), + ]; + + const configPaths = new Array(); + await Promise.all( + packages.map(async ({ dir, packageJson }) => { + const configPath = resolvePath(dir, '.eslintrc.js'); + if (!(await fs.pathExists(configPath))) { + console.log(`Skipping ${packageJson.name}, missing .eslintrc.js`); + return; + } + let existingConfig: Record; + try { + existingConfig = require(configPath); + } catch (error) { + console.log( + `Skipping ${packageJson.name}, failed to load .eslintrc.js, ${error}`, + ); + return; + } + + // Only transform configs that extend the old config files, and + // we remove that entry from the extends array. + const extendsArray = (existingConfig.extends as string[]) ?? []; + const extendIndex = extendsArray.findIndex(p => oldConfigs.includes(p)); + if (extendIndex === -1) { + console.log( + `Skipping ${packageJson.name}, .eslintrc.js does not extend the legacy config`, + ); + return; + } + extendsArray.splice(extendIndex, 1); + if (extendsArray.length === 0) { + delete existingConfig.extends; + } + + if (Object.keys(existingConfig).length > 0) { + await fs.writeFile( + configPath, + `${PREFIX}(__dirname, ${JSON.stringify(existingConfig, null, 2)});\n`, + ); + } else { + await fs.writeFile(configPath, `${PREFIX}(__dirname);\n`); + } + configPaths.push(configPath); + }), + ); + + // If prettier is present, then we run that too + let hasPrettier = false; + try { + require.resolve('prettier'); + hasPrettier = true; + } catch { + /* ignore */ + } + + if (hasPrettier) { + await runPlain('prettier', '--write', ...configPaths); + } +} diff --git a/packages/codemods/.eslintrc.js b/packages/codemods/.eslintrc.js index 7c8a092081..f9fb2e27c9 100644 --- a/packages/codemods/.eslintrc.js +++ b/packages/codemods/.eslintrc.js @@ -1,5 +1,4 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'no-console': 0, 'import/no-extraneous-dependencies': [ @@ -12,4 +11,4 @@ module.exports = { }, ], }, -}; +}); diff --git a/packages/config-loader/.eslintrc.js b/packages/config-loader/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/config-loader/.eslintrc.js +++ b/packages/config-loader/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/config/.eslintrc.js b/packages/config/.eslintrc.js index 54e1fff915..e358722664 100644 --- a/packages/config/.eslintrc.js +++ b/packages/config/.eslintrc.js @@ -1,6 +1,5 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'jest/expect-expect': 0, }, -}; +}); diff --git a/packages/core-app-api/.eslintrc.js b/packages/core-app-api/.eslintrc.js index d592a653c8..e358722664 100644 --- a/packages/core-app-api/.eslintrc.js +++ b/packages/core-app-api/.eslintrc.js @@ -1,8 +1,5 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { - // TODO: add prop types to JS and remove - 'react/prop-types': 0, 'jest/expect-expect': 0, }, -}; +}); diff --git a/packages/core-components/.eslintrc.js b/packages/core-components/.eslintrc.js index 65a93d3660..2ebb50e64f 100644 --- a/packages/core-components/.eslintrc.js +++ b/packages/core-components/.eslintrc.js @@ -1,25 +1,11 @@ -const base = require('@backstage/cli/config/eslint'); -const [, baseRestrictedImports] = base.rules['no-restricted-imports']; - -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { - // TODO: add prop types to JS and remove - 'react/prop-types': 0, 'jest/expect-expect': 0, - 'no-restricted-imports': [ - 2, - { - ...baseRestrictedImports, - paths: [ - { - // Importing the entire MUI icons packages kills build performance as the list of icons is huge. - name: '@material-ui/core', - message: "Please import '@material-ui/core/...' instead.", - }, - ...baseRestrictedImports.paths, - ], - }, - ], }, -}; + restrictedImports: [ + { + name: '@material-ui/core', + message: "Please import '@material-ui/core/...' instead.", + }, + ], +}); diff --git a/packages/core-plugin-api/.eslintrc.js b/packages/core-plugin-api/.eslintrc.js index d592a653c8..e2a53a6ad2 100644 --- a/packages/core-plugin-api/.eslintrc.js +++ b/packages/core-plugin-api/.eslintrc.js @@ -1,8 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], - rules: { - // TODO: add prop types to JS and remove - 'react/prop-types': 0, - 'jest/expect-expect': 0, - }, -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/create-app/.eslintrc.js b/packages/create-app/.eslintrc.js index 69bec6cd2a..e9ea2f5bfb 100644 --- a/packages/create-app/.eslintrc.js +++ b/packages/create-app/.eslintrc.js @@ -1,7 +1,6 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { ignorePatterns: ['templates/**'], rules: { 'no-console': 0, }, -}; +}); diff --git a/packages/dev-utils/.eslintrc.js b/packages/dev-utils/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/dev-utils/.eslintrc.js +++ b/packages/dev-utils/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/e2e-test/.eslintrc.js b/packages/e2e-test/.eslintrc.js index 7c8a092081..f9fb2e27c9 100644 --- a/packages/e2e-test/.eslintrc.js +++ b/packages/e2e-test/.eslintrc.js @@ -1,5 +1,4 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'no-console': 0, 'import/no-extraneous-dependencies': [ @@ -12,4 +11,4 @@ module.exports = { }, ], }, -}; +}); diff --git a/packages/errors/.eslintrc.js b/packages/errors/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/errors/.eslintrc.js +++ b/packages/errors/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/integration-react/.eslintrc.js b/packages/integration-react/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/integration-react/.eslintrc.js +++ b/packages/integration-react/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/integration/.eslintrc.js b/packages/integration/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/integration/.eslintrc.js +++ b/packages/integration/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/release-manifests/.eslintrc.js b/packages/release-manifests/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/release-manifests/.eslintrc.js +++ b/packages/release-manifests/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/search-common/.eslintrc.js b/packages/search-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/search-common/.eslintrc.js +++ b/packages/search-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/techdocs-cli-embedded-app/.eslintrc.js b/packages/techdocs-cli-embedded-app/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/techdocs-cli-embedded-app/.eslintrc.js +++ b/packages/techdocs-cli-embedded-app/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/techdocs-cli/.eslintrc.js b/packages/techdocs-cli/.eslintrc.js index 884f559c0f..e2a53a6ad2 100644 --- a/packages/techdocs-cli/.eslintrc.js +++ b/packages/techdocs-cli/.eslintrc.js @@ -1,11 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], - overrides: [ - { - files: ['**/*.ts?(x)'], - rules: { - 'no-restricted-imports': 0, - }, - }, - ], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/techdocs-cli/src/commands/serve/serve.ts b/packages/techdocs-cli/src/commands/serve/serve.ts index a6a671c2df..d5b8191cf9 100644 --- a/packages/techdocs-cli/src/commands/serve/serve.ts +++ b/packages/techdocs-cli/src/commands/serve/serve.ts @@ -37,6 +37,7 @@ function findPreviewBundlePath(): string { // This can be tested by running `yarn pack` and extracting the resulting tarball into a directory. // Within the extracted directory, run `npm install --only=prod`. // Once that's done you can test the CLI in any directory using `node /package `. + // eslint-disable-next-line no-restricted-syntax return findPaths(__dirname).resolveOwn('dist/embedded-app'); } } diff --git a/packages/techdocs-common/.eslintrc.js b/packages/techdocs-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/packages/techdocs-common/.eslintrc.js +++ b/packages/techdocs-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/test-utils/.eslintrc.js b/packages/test-utils/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/test-utils/.eslintrc.js +++ b/packages/test-utils/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/theme/.eslintrc.js b/packages/theme/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/theme/.eslintrc.js +++ b/packages/theme/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/types/.eslintrc.js b/packages/types/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/types/.eslintrc.js +++ b/packages/types/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/version-bridge/.eslintrc.js b/packages/version-bridge/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/packages/version-bridge/.eslintrc.js +++ b/packages/version-bridge/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/airbrake-backend/.eslintrc.js b/plugins/airbrake-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/airbrake-backend/.eslintrc.js +++ b/plugins/airbrake-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/airbrake/.eslintrc.js b/plugins/airbrake/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/airbrake/.eslintrc.js +++ b/plugins/airbrake/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/allure/.eslintrc.js b/plugins/allure/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/allure/.eslintrc.js +++ b/plugins/allure/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/analytics-module-ga/.eslintrc.js b/plugins/analytics-module-ga/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/analytics-module-ga/.eslintrc.js +++ b/plugins/analytics-module-ga/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/apache-airflow/.eslintrc.js b/plugins/apache-airflow/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/apache-airflow/.eslintrc.js +++ b/plugins/apache-airflow/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/api-docs/.eslintrc.js b/plugins/api-docs/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/api-docs/.eslintrc.js +++ b/plugins/api-docs/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/app-backend/.eslintrc.js b/plugins/app-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/app-backend/.eslintrc.js +++ b/plugins/app-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-backend/.eslintrc.js b/plugins/auth-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/auth-backend/.eslintrc.js +++ b/plugins/auth-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-node/.eslintrc.js b/plugins/auth-node/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/auth-node/.eslintrc.js +++ b/plugins/auth-node/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/azure-devops-backend/.eslintrc.js b/plugins/azure-devops-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/azure-devops-backend/.eslintrc.js +++ b/plugins/azure-devops-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/azure-devops-common/.eslintrc.js b/plugins/azure-devops-common/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/azure-devops-common/.eslintrc.js +++ b/plugins/azure-devops-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/azure-devops/.eslintrc.js b/plugins/azure-devops/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/azure-devops/.eslintrc.js +++ b/plugins/azure-devops/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/badges-backend/.eslintrc.js b/plugins/badges-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/badges-backend/.eslintrc.js +++ b/plugins/badges-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/badges/.eslintrc.js b/plugins/badges/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/badges/.eslintrc.js +++ b/plugins/badges/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/bazaar-backend/.eslintrc.js b/plugins/bazaar-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/bazaar-backend/.eslintrc.js +++ b/plugins/bazaar-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/bazaar/.eslintrc.js b/plugins/bazaar/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/bazaar/.eslintrc.js +++ b/plugins/bazaar/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/bitrise/.eslintrc.js b/plugins/bitrise/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/bitrise/.eslintrc.js +++ b/plugins/bitrise/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend-module-aws/.eslintrc.js b/plugins/catalog-backend-module-aws/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/catalog-backend-module-aws/.eslintrc.js +++ b/plugins/catalog-backend-module-aws/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend-module-ldap/.eslintrc.js b/plugins/catalog-backend-module-ldap/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/catalog-backend-module-ldap/.eslintrc.js +++ b/plugins/catalog-backend-module-ldap/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend-module-msgraph/.eslintrc.js b/plugins/catalog-backend-module-msgraph/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/catalog-backend-module-msgraph/.eslintrc.js +++ b/plugins/catalog-backend-module-msgraph/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend/.eslintrc.js b/plugins/catalog-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/catalog-backend/.eslintrc.js +++ b/plugins/catalog-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-common/.eslintrc.js b/plugins/catalog-common/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/catalog-common/.eslintrc.js +++ b/plugins/catalog-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-graph/.eslintrc.js b/plugins/catalog-graph/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/catalog-graph/.eslintrc.js +++ b/plugins/catalog-graph/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-graphql/.eslintrc.js b/plugins/catalog-graphql/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/catalog-graphql/.eslintrc.js +++ b/plugins/catalog-graphql/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-import/.eslintrc.js b/plugins/catalog-import/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/catalog-import/.eslintrc.js +++ b/plugins/catalog-import/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-react/.eslintrc.js b/plugins/catalog-react/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/catalog-react/.eslintrc.js +++ b/plugins/catalog-react/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog/.eslintrc.js b/plugins/catalog/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/catalog/.eslintrc.js +++ b/plugins/catalog/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/cicd-statistics/.eslintrc.js b/plugins/cicd-statistics/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/cicd-statistics/.eslintrc.js +++ b/plugins/cicd-statistics/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/circleci/.eslintrc.js b/plugins/circleci/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/circleci/.eslintrc.js +++ b/plugins/circleci/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/cloudbuild/.eslintrc.js b/plugins/cloudbuild/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/cloudbuild/.eslintrc.js +++ b/plugins/cloudbuild/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/code-climate/.eslintrc.js b/plugins/code-climate/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/code-climate/.eslintrc.js +++ b/plugins/code-climate/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/code-coverage-backend/.eslintrc.js b/plugins/code-coverage-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/code-coverage-backend/.eslintrc.js +++ b/plugins/code-coverage-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/code-coverage/.eslintrc.js b/plugins/code-coverage/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/code-coverage/.eslintrc.js +++ b/plugins/code-coverage/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/config-schema/.eslintrc.js b/plugins/config-schema/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/config-schema/.eslintrc.js +++ b/plugins/config-schema/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/cost-insights/.eslintrc.js b/plugins/cost-insights/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/cost-insights/.eslintrc.js +++ b/plugins/cost-insights/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/explore-react/.eslintrc.js b/plugins/explore-react/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/explore-react/.eslintrc.js +++ b/plugins/explore-react/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/explore/.eslintrc.js b/plugins/explore/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/explore/.eslintrc.js +++ b/plugins/explore/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/firehydrant/.eslintrc.js b/plugins/firehydrant/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/firehydrant/.eslintrc.js +++ b/plugins/firehydrant/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/fossa/.eslintrc.js b/plugins/fossa/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/fossa/.eslintrc.js +++ b/plugins/fossa/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/gcp-projects/.eslintrc.js b/plugins/gcp-projects/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/gcp-projects/.eslintrc.js +++ b/plugins/gcp-projects/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/git-release-manager/.eslintrc.js b/plugins/git-release-manager/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/git-release-manager/.eslintrc.js +++ b/plugins/git-release-manager/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/github-actions/.eslintrc.js b/plugins/github-actions/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/github-actions/.eslintrc.js +++ b/plugins/github-actions/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/github-deployments/.eslintrc.js b/plugins/github-deployments/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/github-deployments/.eslintrc.js +++ b/plugins/github-deployments/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/gitops-profiles/.eslintrc.js b/plugins/gitops-profiles/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/gitops-profiles/.eslintrc.js +++ b/plugins/gitops-profiles/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/gocd/.eslintrc.js b/plugins/gocd/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/gocd/.eslintrc.js +++ b/plugins/gocd/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/graphiql/.eslintrc.js b/plugins/graphiql/.eslintrc.js index 6a513fbafe..e358722664 100644 --- a/plugins/graphiql/.eslintrc.js +++ b/plugins/graphiql/.eslintrc.js @@ -1,7 +1,5 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { - // Prefer to use rendered.getBy*, which will throw an error 'jest/expect-expect': 0, }, -}; +}); diff --git a/plugins/graphql-backend/.eslintrc.js b/plugins/graphql-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/graphql-backend/.eslintrc.js +++ b/plugins/graphql-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/home/.eslintrc.js b/plugins/home/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/home/.eslintrc.js +++ b/plugins/home/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/ilert/.eslintrc.js b/plugins/ilert/.eslintrc.js index 4d51616e98..b4ec729b09 100644 --- a/plugins/ilert/.eslintrc.js +++ b/plugins/ilert/.eslintrc.js @@ -1,6 +1,5 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { quotes: ['error', 'single'], }, -}; +}); diff --git a/plugins/jenkins-backend/.eslintrc.js b/plugins/jenkins-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/jenkins-backend/.eslintrc.js +++ b/plugins/jenkins-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/jenkins-common/.eslintrc.js b/plugins/jenkins-common/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/jenkins-common/.eslintrc.js +++ b/plugins/jenkins-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/jenkins/.eslintrc.js b/plugins/jenkins/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/jenkins/.eslintrc.js +++ b/plugins/jenkins/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/kafka-backend/.eslintrc.js b/plugins/kafka-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/kafka-backend/.eslintrc.js +++ b/plugins/kafka-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/kafka/.eslintrc.js b/plugins/kafka/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/kafka/.eslintrc.js +++ b/plugins/kafka/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/kubernetes-backend/.eslintrc.js b/plugins/kubernetes-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/kubernetes-backend/.eslintrc.js +++ b/plugins/kubernetes-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/kubernetes-common/.eslintrc.js b/plugins/kubernetes-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/kubernetes-common/.eslintrc.js +++ b/plugins/kubernetes-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/kubernetes/.eslintrc.js b/plugins/kubernetes/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/kubernetes/.eslintrc.js +++ b/plugins/kubernetes/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/lighthouse/.eslintrc.js b/plugins/lighthouse/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/lighthouse/.eslintrc.js +++ b/plugins/lighthouse/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/newrelic-dashboard/.eslintrc.js b/plugins/newrelic-dashboard/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/newrelic-dashboard/.eslintrc.js +++ b/plugins/newrelic-dashboard/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/newrelic/.eslintrc.js b/plugins/newrelic/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/newrelic/.eslintrc.js +++ b/plugins/newrelic/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/org/.eslintrc.js b/plugins/org/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/org/.eslintrc.js +++ b/plugins/org/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/pagerduty/.eslintrc.js b/plugins/pagerduty/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/pagerduty/.eslintrc.js +++ b/plugins/pagerduty/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/permission-backend/.eslintrc.js b/plugins/permission-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/permission-backend/.eslintrc.js +++ b/plugins/permission-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/permission-common/.eslintrc.js b/plugins/permission-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/permission-common/.eslintrc.js +++ b/plugins/permission-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/permission-node/.eslintrc.js b/plugins/permission-node/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/permission-node/.eslintrc.js +++ b/plugins/permission-node/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/permission-react/.eslintrc.js b/plugins/permission-react/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/permission-react/.eslintrc.js +++ b/plugins/permission-react/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/proxy-backend/.eslintrc.js b/plugins/proxy-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/proxy-backend/.eslintrc.js +++ b/plugins/proxy-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/rollbar-backend/.eslintrc.js b/plugins/rollbar-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/rollbar-backend/.eslintrc.js +++ b/plugins/rollbar-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/rollbar/.eslintrc.js b/plugins/rollbar/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/rollbar/.eslintrc.js +++ b/plugins/rollbar/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js b/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js +++ b/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend-module-rails/.eslintrc.js b/plugins/scaffolder-backend-module-rails/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/scaffolder-backend-module-rails/.eslintrc.js +++ b/plugins/scaffolder-backend-module-rails/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend-module-yeoman/.eslintrc.js b/plugins/scaffolder-backend-module-yeoman/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/scaffolder-backend-module-yeoman/.eslintrc.js +++ b/plugins/scaffolder-backend-module-yeoman/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend/.eslintrc.js b/plugins/scaffolder-backend/.eslintrc.js index 2632b5e089..953af54f90 100644 --- a/plugins/scaffolder-backend/.eslintrc.js +++ b/plugins/scaffolder-backend/.eslintrc.js @@ -1,41 +1,18 @@ -const parent = require('@backstage/cli/config/eslint.backend'); - -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { ignorePatterns: ['sample-templates/'], - rules: { - 'no-console': 0, // Permitted in console programs - 'new-cap': ['error', { capIsNew: false }], // Because Express constructs things e.g. like 'const r = express.Router()' - // Usage of path.resolve is extra sensitive in the scaffolder, so forbid it in non-test code - 'no-restricted-imports': [ - 'error', - { - ...parent.rules['no-restricted-imports'][1], - paths: [ - { - name: 'path', - importNames: ['resolve'], - message: - 'Do not use path.resolve, use `resolveSafeChildPath` from `@backstage/backend-common` instead as it prevents security issues', - }, - ], - }, - ], - 'no-restricted-syntax': parent.rules['no-restricted-syntax'].concat([ - { - message: - 'Do not use path.resolve, use `resolveSafeChildPath` from `@backstage/backend-common` instead as it prevents security issues', - selector: - 'MemberExpression[object.name="path"][property.name="resolve"]', - }, - ]), - }, - overrides: [ + restrictedSrcImports: [ { - files: ['*.test.*', 'src/setupTests.*', 'dev/**'], - rules: { - 'no-restricted-imports': parent.rules['no-restricted-imports'], - }, + name: 'path', + importNames: ['resolve'], + message: + 'Do not use path.resolve, use `resolveSafeChildPath` from `@backstage/backend-common` instead as it prevents security issues', }, ], -}; + restrictedSrcSyntax: [ + { + message: + 'Do not use path.resolve, use `resolveSafeChildPath` from `@backstage/backend-common` instead as it prevents security issues', + selector: 'MemberExpression[object.name="path"][property.name="resolve"]', + }, + ], +}); diff --git a/plugins/scaffolder-common/.eslintrc.js b/plugins/scaffolder-common/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/scaffolder-common/.eslintrc.js +++ b/plugins/scaffolder-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder/.eslintrc.js b/plugins/scaffolder/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/scaffolder/.eslintrc.js +++ b/plugins/scaffolder/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend-module-elasticsearch/.eslintrc.js b/plugins/search-backend-module-elasticsearch/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/search-backend-module-elasticsearch/.eslintrc.js +++ b/plugins/search-backend-module-elasticsearch/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend-module-pg/.eslintrc.js b/plugins/search-backend-module-pg/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/search-backend-module-pg/.eslintrc.js +++ b/plugins/search-backend-module-pg/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend-node/.eslintrc.js b/plugins/search-backend-node/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/search-backend-node/.eslintrc.js +++ b/plugins/search-backend-node/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend/.eslintrc.js b/plugins/search-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/search-backend/.eslintrc.js +++ b/plugins/search-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-common/.eslintrc.js b/plugins/search-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/search-common/.eslintrc.js +++ b/plugins/search-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search/.eslintrc.js b/plugins/search/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/search/.eslintrc.js +++ b/plugins/search/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/sentry/.eslintrc.js b/plugins/sentry/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/sentry/.eslintrc.js +++ b/plugins/sentry/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/shortcuts/.eslintrc.js b/plugins/shortcuts/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/shortcuts/.eslintrc.js +++ b/plugins/shortcuts/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/sonarqube/.eslintrc.js b/plugins/sonarqube/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/sonarqube/.eslintrc.js +++ b/plugins/sonarqube/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/splunk-on-call/.eslintrc.js b/plugins/splunk-on-call/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/splunk-on-call/.eslintrc.js +++ b/plugins/splunk-on-call/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/tech-insights-backend-module-jsonfc/.eslintrc.js b/plugins/tech-insights-backend-module-jsonfc/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/tech-insights-backend-module-jsonfc/.eslintrc.js +++ b/plugins/tech-insights-backend-module-jsonfc/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/tech-insights-backend/.eslintrc.js b/plugins/tech-insights-backend/.eslintrc.js index a126c438a4..f98046cfe0 100644 --- a/plugins/tech-insights-backend/.eslintrc.js +++ b/plugins/tech-insights-backend/.eslintrc.js @@ -1,5 +1,4 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { rules: { 'jest/expect-expect': [ 'error', @@ -8,4 +7,4 @@ module.exports = { }, ], }, -}; +}); diff --git a/plugins/tech-insights-common/.eslintrc.js b/plugins/tech-insights-common/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/tech-insights-common/.eslintrc.js +++ b/plugins/tech-insights-common/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/tech-insights-node/.eslintrc.js b/plugins/tech-insights-node/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/tech-insights-node/.eslintrc.js +++ b/plugins/tech-insights-node/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/tech-insights/.eslintrc.js b/plugins/tech-insights/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/tech-insights/.eslintrc.js +++ b/plugins/tech-insights/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/tech-radar/.eslintrc.js b/plugins/tech-radar/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/tech-radar/.eslintrc.js +++ b/plugins/tech-radar/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/techdocs-backend/.eslintrc.js b/plugins/techdocs-backend/.eslintrc.js index 595853b48b..d1e1c522da 100644 --- a/plugins/techdocs-backend/.eslintrc.js +++ b/plugins/techdocs-backend/.eslintrc.js @@ -1,4 +1,3 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { ignorePatterns: ['static/**'], -}; +}); diff --git a/plugins/techdocs-node/.eslintrc.js b/plugins/techdocs-node/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/techdocs-node/.eslintrc.js +++ b/plugins/techdocs-node/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/techdocs/.eslintrc.js b/plugins/techdocs/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/techdocs/.eslintrc.js +++ b/plugins/techdocs/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/todo-backend/.eslintrc.js b/plugins/todo-backend/.eslintrc.js index 16a033dbc6..e2a53a6ad2 100644 --- a/plugins/todo-backend/.eslintrc.js +++ b/plugins/todo-backend/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/todo/.eslintrc.js b/plugins/todo/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/todo/.eslintrc.js +++ b/plugins/todo/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/user-settings/.eslintrc.js b/plugins/user-settings/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/user-settings/.eslintrc.js +++ b/plugins/user-settings/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/xcmetrics/.eslintrc.js b/plugins/xcmetrics/.eslintrc.js index 13573efa9c..e2a53a6ad2 100644 --- a/plugins/xcmetrics/.eslintrc.js +++ b/plugins/xcmetrics/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], -}; +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);