/* eslint-env node */ module.exports = { extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', 'plugin:import/recommended', 'plugin:import/typescript', 'plugin:require-extensions/recommended', ], parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint', 'prettier', 'require-extensions'], root: true, rules: { 'import/extensions': ['error', 'always'], 'prettier/prettier': [ 'error', { tabWidth: 2, useTabs: false, bracketSameLine: false, semi: false, arrowParens: 'avoid', jsxSingleQuote: true, printWidth: 100, singleQuote: true, quoteProps: 'as-needed', htmlWhitespaceSensitivity: 'css', proseWrap: 'preserve', bracketSpacing: true, embeddedLanguageFormatting: 'auto', endOfLine: 'lf', trailingComma: 'es5', }, ], '@typescript-eslint/ban-ts-comment': 0, '@typescript-eslint/no-explicit-any': 0, '@typescript-eslint/explicit-member-accessibility': [ 'error', { accessibility: 'explicit', overrides: { accessors: 'explicit', constructors: 'no-public', methods: 'explicit', properties: 'explicit', parameterProperties: 'explicit', }, }, ], 'lines-between-class-members': [ 'error', { enforce: [{ blankLine: 'always', prev: 'method', next: 'method' }], }, ], // turn on errors for missing imports 'import/no-unresolved': ['error', { ignore: ['\\.js$'] }], // 'import/no-named-as-default-member': 'off', 'import/order': [ 'error', { groups: [ 'builtin', // Built-in imports (come from NodeJS native) go first 'external', // <- External imports 'internal', // <- Absolute imports ['sibling', 'parent'], // <- Relative imports, the sibling and parent types they can be mingled together 'index', // <- index imports 'unknown', // <- unknown ], 'newlines-between': 'always', alphabetize: { /* sort in ascending order. Options: ["ignore", "asc", "desc"] */ order: 'asc', /* ignore case. Options: [true, false] */ caseInsensitive: true, }, }, ], }, }