UNPKG

@vis.gl/dev-tools

Version:

Dev tools for vis.gl frameworks

148 lines 5.83 kB
import deepMerge from 'deepmerge'; import { ocularRoot } from '../utils/utils.js'; import { inspect } from 'util'; import { resolve } from 'path'; const localRules = (path) => resolve(ocularRoot, 'src/configuration', path); const DEFAULT_OPTIONS = { react: false }; const DEFAULT_CONFIG = { extends: [ localRules('./eslint-config-uber-es2015/eslintrc.json'), 'prettier', 'plugin:import/recommended' ], plugins: ['import'], parserOptions: { ecmaVersion: 2020 }, env: { // Note: also sets ecmaVersion es2020: true }, globals: { globalThis: 'readonly', __VERSION__: 'readonly' }, rules: { 'guard-for-in': 'off', 'func-names': 'off', 'no-inline-comments': 'off', 'no-multi-str': 'off', // Rules disabled because they conflict with our preferred style // We use function hoisting to put exports at top of file 'no-use-before-define': 'off', camelcase: 'warn', // Let prettier handle this indent: 'off', 'accessor-pairs': ['error', { getWithoutSet: false, setWithoutGet: false }], 'import/no-extraneous-dependencies': ['error', { devDependencies: false, peerDependencies: true }] }, settings: { // Ensure eslint finds typescript files 'import/resolver': { node: { extensions: ['.js', '.jsx', '.mjs', '.ts', '.tsx', '.d.ts'] } } }, ignorePatterns: ['node_modules', '**/dist*/**/*.js'], overrides: [ { // babel-eslint can process TS files, but it doesn't understand types // typescript-eslint has some more advanced rules with type checking files: ['**/*.ts', '**/*.tsx', '**/*.d.ts'], parser: '@typescript-eslint/parser', parserOptions: { sourceType: 'module', project: './tsconfig.json' }, extends: ['plugin:@typescript-eslint/recommended-type-checked'], plugins: ['@typescript-eslint'], rules: { '@typescript-eslint/no-dupe-class-members': 'error', '@typescript-eslint/switch-exhaustiveness-check': 'error', // This rule is incompatible with TypeScript, replace with the TS counterpart 'no-shadow': 'off', '@typescript-eslint/no-shadow': 'error', // Rules disabled because they conflict with our preferred style // We use function hoisting to put exports at top of file '@typescript-eslint/no-use-before-define': 'off', // We encourage explicit typing, e.g `field: string = ''` '@typescript-eslint/no-inferrable-types': 'off', // Allow noOp as default value for callbacks '@typescript-eslint/no-empty-function': 'off', // Rules downgraded because they are deemed acceptable '@typescript-eslint/ban-ts-comment': [ 'error', { 'ts-expect-error': 'allow-with-description', 'ts-ignore': 'allow-with-description', 'ts-nocheck': 'allow-with-description', 'ts-check': false, minimumDescriptionLength: 3 } ], '@typescript-eslint/no-floating-promises': 'warn', '@typescript-eslint/restrict-template-expressions': 'warn', '@typescript-eslint/no-empty-interface': 'warn', '@typescript-eslint/require-await': 'warn', // Rules that restrict the use of `any` // Might be too strict for our code base, but should be gradually enabled '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/no-unsafe-argument': 'warn', '@typescript-eslint/no-unsafe-assignment': 'warn', '@typescript-eslint/no-unsafe-call': 'warn', '@typescript-eslint/no-unsafe-enum-comparison': 'warn', '@typescript-eslint/no-unsafe-member-access': 'warn', '@typescript-eslint/no-unsafe-return': 'warn', '@typescript-eslint/explicit-module-boundary-types': 'warn' } }, { // We can lint through code examples in Markdown as well, // but we don't need to enable all of the rules there files: ['**/*.md'], plugins: ['markdown'], // extends: 'plugin:markdown/recommended', rules: { 'no-undef': 'off', 'no-unused-vars': 'off', 'no-unused-expressions': 'off', 'no-console': 'off', 'padded-blocks': 'off' } } ] }; function getReactConfig(options) { return { extends: [ localRules('./eslint-config-uber-jsx/eslintrc.json'), 'prettier', 'plugin:import/recommended' ], plugins: ['import', 'react'], settings: { react: { version: options.react } } }; } export function getESLintConfig(options = {}) { options = { ...DEFAULT_OPTIONS, ...options }; let config = { ...DEFAULT_CONFIG }; if (options.react) { config = deepMerge(config, getReactConfig(options)); } if (options.overrides) { config = deepMerge(config, options.overrides); } if (options.debug) { // eslint-disable-next-line console.log(inspect(config, { colors: true, depth: null })); } return config; } //# sourceMappingURL=get-eslint-config.js.map