| // To make use of this eslint config file run: | 
 | // | 
 | //   npm ci | 
 | // | 
 | // Then install eslint support in your IDE of choice. | 
 | module.exports = { | 
 |   root: true, | 
 |   env: { | 
 |     browser: true, | 
 |     es6: true, | 
 |   }, | 
 |   extends: ['airbnb-base'], | 
 |   globals: { | 
 |     Atomics: 'readonly', | 
 |     SharedArrayBuffer: 'readonly', | 
 |   }, | 
 |   parserOptions: { | 
 |     ecmaVersion: 2018, | 
 |     sourceType: 'module', | 
 |   }, | 
 |   ignorePatterns: ['dist/', 'build/', '_bazel*'], | 
 |   rules: { | 
 |     camelcase: ['off'], | 
 |     'class-methods-use-this': ['off'], | 
 |     'func-names': ['off'], | 
 |     'import/prefer-default-export': ['off'], | 
 |     'max-classes-per-file': ['off'], | 
 |     'max-len': ['off'], | 
 |     'no-alert': ['off'], | 
 |     'no-bitwise': ['warn'], | 
 |     'no-continue': ['off'], | 
 |     'no-lone-blocks': ['off'], | 
 |     'no-param-reassign': ['off'], | 
 |     'no-plusplus': ['off'], | 
 |     'no-restricted-syntax': ['warn'], | 
 |     'no-return-assign': ['off'], | 
 |     'no-shadow': ['warn'], | 
 |     'no-underscore-dangle': ['off'], | 
 |     'no-use-before-define': ['error', { functions: false, variables: false }], | 
 |     'object-shorthand': ['off'], | 
 |     'prefer-destructuring': ['off'], | 
 |     'prefer-object-spread': ['off'], | 
 |     'space-before-function-paren': [ | 
 |       'error', | 
 |       { anonymous: 'never', named: 'never', asyncArrow: 'always' }, | 
 |     ], | 
 |   }, | 
 |   overrides: [ | 
 |     { | 
 |       files: ['*.ts', '*.tsx'], | 
 |       parser: '@typescript-eslint/parser', | 
 |  | 
 |       // Start with the recommended rules, but turn some of them off in the | 
 |       // 'rules' section below. | 
 |       extends: ['plugin:@typescript-eslint/recommended'], | 
 |       settings: { | 
 |         'import/resolver': { | 
 |           node: { | 
 |             extensions: ['.js', '.jsx', '.ts', '.tsx'], | 
 |           }, | 
 |         }, | 
 |       }, | 
 |       plugins: ['@typescript-eslint'], | 
 |       rules: { | 
 |         // Allow ! non-null assertions. | 
 |         '@typescript-eslint/no-non-null-assertion': 'off', | 
 |  | 
 |         // Require a consistent member declaration order | 
 |         '@typescript-eslint/member-ordering': 'off', | 
 |  | 
 |         // Don't require the .ts extension for imports. | 
 |         'import/extensions': 'off', | 
 |  | 
 |         // Sometimes we need to import an interface, but also we need the | 
 |         // side-effects to run, e.g. to register an element, which requires two | 
 |         // import statements. | 
 |         // | 
 |         // https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-imports-being-elided-in-my-emit | 
 |         // https://github.com/microsoft/TypeScript/issues/9191 | 
 |         'import/no-duplicates': 'off', | 
 |  | 
 |         // a: string = 'foo' might be redundant, but it's not harmful. | 
 |         '@typescript-eslint/no-inferrable-types': 'off', | 
 |  | 
 |         '@typescript-eslint/type-annotation-spacing': [ | 
 |           'error', | 
 |           { | 
 |             before: false, | 
 |             after: true, | 
 |           }, | 
 |         ], | 
 |  | 
 |         // note you must disable the base rule as it can report incorrect errors | 
 |         'lines-between-class-members': 'off', | 
 |         '@typescript-eslint/lines-between-class-members': [ | 
 |           'error', | 
 |           'always', | 
 |           { exceptAfterOverload: true }, | 
 |         ], | 
 |  | 
 |         // note you must disable the base rule as it can report incorrect errors | 
 |         'space-before-function-paren': 'off', | 
 |         '@typescript-eslint/space-before-function-paren': [ | 
 |           'error', | 
 |           { | 
 |             anonymous: 'never', | 
 |             named: 'never', | 
 |             asyncArrow: 'always', | 
 |           }, | 
 |         ], | 
 |  | 
 |         // We already disallow implicit-any, explicit is fine. | 
 |         '@typescript-eslint/no-explicit-any': 'off', | 
 |       }, | 
 |     }, | 
 |     { | 
 |       files: ['*_test.ts'], | 
 |       rules: { | 
 |         // Prevents Chai.js assertions such as expect(foo).to.be.true from causing "Expected an | 
 |         // assignment or function call and instead saw an expression." linting errors. | 
 |         'no-unused-expressions': 'off', | 
 |       }, | 
 |     }, | 
 |   ], | 
 | }; |