module.exports = {
  plugins: ['@typescript-eslint'],
  parser: '@typescript-eslint/parser',
  settings: {
    'import/resolver': {
      typescript: {
        directory: process.cwd(),
        extensions: ['.js', '.ts', '.json'],
      },
    },
    'import/extensions': ['.js', '.ts'],
  },
  rules: {
    'spaced-comment': [
      'error',
      'always',
      {
        line: {
          exceptions: ['-', '+'],
          markers: ['=', '!', '/'], // space here to support sprockets directives
        },
        block: {
          exceptions: ['-', '+'],
          markers: ['=', '!'], // space here to support sprockets directives
          balanced: true,
        },
      },
    ],
    strict: 'off', // conflicts with typescript
    // https://github.com/benmosher/eslint-plugin-import
    'import/extensions': [
      'error',
      'always',
      {
        js: 'never',
        ts: 'never',
      },
    ],
    'import/no-named-as-default-member': 'off', // conflicts with typescript
    'import/no-named-as-default': 'off', // conflicts with typescript
    // https://github.com/nzakas/eslint-plugin-typescript
    '@typescript-eslint/adjacent-overload-signatures': 'error',
    '@typescript-eslint/array-type': 'error',
    '@typescript-eslint/ban-types': 'error',
    camelcase: 'off',
    '@typescript-eslint/camelcase': 'error',
    '@typescript-eslint/class-name-casing': 'error',
    '@typescript-eslint/explicit-function-return-type': 'warn',
    '@typescript-eslint/explicit-member-accessibility': 'error',
    '@typescript-eslint/generic-type-naming': [
      'error',
      '^([TUKV]|T[A-Z][a-zA-Z]+)$',
    ],
    '@typescript-eslint/indent': 'off',
    '@typescript-eslint/interface-name-prefix': 'error',
    '@typescript-eslint/member-delimiter-style': 'off',
    '@typescript-eslint/member-naming': 'off',
    '@typescript-eslint/member-ordering': 'error',
    '@typescript-eslint/no-angle-bracket-type-assertion': 'error',
    'no-array-constructor': 'off',
    '@typescript-eslint/no-array-constructor': 'error',
    '@typescript-eslint/no-empty-interface': 'error',
    '@typescript-eslint/no-explicit-any': 'off',
    '@typescript-eslint/no-extraneous-class': 'error',
    '@typescript-eslint/no-for-in-array': 'error',
    '@typescript-eslint/no-inferrable-types': 'error',
    '@typescript-eslint/no-misused-new': 'error',
    '@typescript-eslint/no-namespace': 'error',
    '@typescript-eslint/no-non-null-assertion': 'error',
    '@typescript-eslint/no-object-literal-type-assertion': 'error',
    '@typescript-eslint/no-parameter-properties': 'error',
    '@typescript-eslint/no-require-imports': 'off',
    '@typescript-eslint/no-this-alias': 'error',
    '@typescript-eslint/no-triple-slash-reference': 'error',
    '@typescript-eslint/no-type-alias': [
      'error',
      {
        allowAliases: 'always',
        allowCallbacks: 'always',
        allowLiterals: 'in-unions-and-intersections',
        allowMappedTypes: 'always',
      },
    ],
    'no-unused-vars': 'off',
    '@typescript-eslint/no-unnecessary-type-assertion': 'error',
    '@typescript-eslint/no-unused-vars': 'warn',
    '@typescript-eslint/no-use-before-define': 'error',
    '@typescript-eslint/no-useless-constructor': 'error',
    '@typescript-eslint/no-var-requires': 'error',
    '@typescript-eslint/prefer-interface': 'error',
    '@typescript-eslint/prefer-namespace-keyword': 'error',
    '@typescript-eslint/promise-function-async': 'off',
    '@typescript-eslint/type-annotation-spacing': 'off',
    '@typescript-eslint/restrict-plus-operands': 'error',
  },
};

@@ -293,24 +293,47 @@
 %0A  rules: %7B%0A
+    'no-undef': 'off',%0A
     'spaced-
@@ -932,24 +932,116 @@
   %7D,%0A    %5D,%0A
+    'import/named': 'off', // https://github.com/benmosher/eslint-plugin-import/issues/1282%0A
     'import/
@@ -1561,28 +1561,27 @@
 urn-type': '
-warn
+off
 ',%0A    '@typ
@@ -1720,20 +1720,24 @@
 V%5D%7CT
+(
 %5BA-Z
+0-9
 %5D%5Ba-zA-Z
 %5D+)$
@@ -1736,10 +1736,19 @@
 zA-Z
-%5D+
+0-9%5D*)%7B0,1%7D
 )$',
@@ -1994,29 +1994,27 @@
 ordering': '
-error
+off
 ',%0A    '@typ
@@ -2200,37 +2200,35 @@
 ty-interface': '
-error
+off
 ',%0A    '@typescr
@@ -2357,31 +2357,51 @@
 in-array': '
-error',
+off', // requires type info
 %0A    '@types
@@ -2929,37 +2929,35 @@
 lias': %5B%0A      '
-error
+off
 ',%0A      %7B%0A     
@@ -3127,37 +3127,8 @@
  %5D,%0A
-    'no-unused-vars': 'off',%0A
     
@@ -3184,64 +3184,175 @@
 ': '
-error',%0A    '@typescript-eslint/no-unused-vars': 'warn',
+off', // requires type info%0A    'no-unused-vars': 'off',%0A    '@typescript-eslint/no-unused-vars': 'off', // in favor of tsc's %60noUnusedLocals%60 and %60noUnusedParameters%60
 %0A   
@@ -3396,32 +3396,69 @@
 fine': 'error',%0A
+    'no-useless-constructor': 'off',%0A
     '@typescript
@@ -3538,29 +3538,27 @@
 requires': '
-error
+off
 ',%0A    '@typ
@@ -3823,23 +3823,43 @@
 ands': '
-error',
+off', // requires type info
 %0A  %7D,%0A%7D;

disable problematic rules