var OFF = 0, WARN = 1, ERROR = 2; module.exports = { env: { browser: true, es2021: true, }, extends: ['eslint:recommended'], parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 'latest', sourceType: 'module', }, plugins: ['@typescript-eslint'], rules: { // Possible Errors (overrides from recommended set) 'no-extra-parens': ERROR, 'no-unexpected-multiline': ERROR, // All JSDoc comments must be valid 'valid-jsdoc': [ OFF, { requireReturn: false, requireReturnDescription: false, requireParamDescription: true, prefer: { return: 'returns', }, }, ], // Best Practices // Allowed a getter without setter, but all setters require getters 'accessor-pairs': [ OFF, { getWithoutSet: false, setWithoutGet: true, }, ], 'block-scoped-var': WARN, 'consistent-return': OFF, curly: ERROR, 'default-case': WARN, // the dot goes with the property when doing multiline 'dot-location': [WARN, 'property'], 'dot-notation': WARN, eqeqeq: [ERROR, 'smart'], 'guard-for-in': WARN, 'no-alert': ERROR, 'no-caller': ERROR, 'no-case-declarations': WARN, 'no-div-regex': WARN, 'no-else-return': WARN, 'no-empty-pattern': WARN, 'no-eq-null': ERROR, 'no-eval': ERROR, 'no-extend-native': ERROR, 'no-extra-bind': WARN, 'no-floating-decimal': WARN, 'no-implicit-coercion': [ WARN, { boolean: true, number: true, string: true, }, ], 'no-implied-eval': ERROR, 'no-invalid-this': ERROR, 'no-iterator': ERROR, 'no-labels': WARN, 'no-lone-blocks': WARN, 'no-loop-func': ERROR, 'no-magic-numbers': OFF, 'no-multi-spaces': ERROR, 'no-multi-str': WARN, 'no-native-reassign': ERROR, 'no-new-func': ERROR, 'no-new-wrappers': ERROR, 'no-new': ERROR, 'no-octal-escape': ERROR, 'no-param-reassign': ERROR, 'no-process-env': WARN, 'no-proto': ERROR, 'no-redeclare': ERROR, 'no-return-assign': ERROR, 'no-script-url': ERROR, 'no-self-compare': ERROR, 'no-throw-literal': ERROR, 'no-unused-expressions': ERROR, 'no-useless-call': ERROR, 'no-useless-concat': ERROR, 'no-void': WARN, // Produce warnings when something is commented as TODO or FIXME 'no-warning-comments': [ WARN, { terms: ['TODO', 'FIXME'], location: 'start', }, ], 'no-with': WARN, radix: WARN, 'vars-on-top': ERROR, // Enforces the style of wrapped functions 'wrap-iife': [ERROR, 'outside'], yoda: ERROR, // Strict Mode - for ES6, never use strict. strict: [ERROR, 'never'], // Variables 'init-declarations': [OFF, 'always'], 'no-catch-shadow': WARN, 'no-delete-var': ERROR, 'no-label-var': ERROR, 'no-shadow-restricted-names': ERROR, 'no-shadow': WARN, // We require all vars to be initialized (see init-declarations) // If we NEED a var to be initialized to undefined, it needs to be explicit 'no-undef-init': OFF, 'no-undef': ERROR, 'no-undefined': OFF, 'no-unused-vars': OFF, // Disallow hoisting - let & const don't allow hoisting anyhow 'no-use-before-define': ERROR, // Node.js and CommonJS 'callback-return': [WARN, ['callback', 'next']], 'global-require': ERROR, 'handle-callback-err': WARN, 'no-mixed-requires': WARN, 'no-new-require': ERROR, // Use path.concat instead 'no-path-concat': ERROR, 'no-process-exit': ERROR, 'no-restricted-modules': OFF, 'no-sync': WARN, // ECMAScript 6 support 'arrow-body-style': [ERROR, 'always'], 'arrow-parens': [ERROR, 'always'], 'arrow-spacing': [ERROR, { before: true, after: true }], 'constructor-super': ERROR, 'generator-star-spacing': [ERROR, 'before'], 'no-confusing-arrow': ERROR, 'no-class-assign': ERROR, 'no-const-assign': ERROR, 'no-dupe-class-members': ERROR, 'no-this-before-super': ERROR, 'no-var': WARN, 'object-shorthand': [WARN, 'never'], 'prefer-arrow-callback': WARN, 'prefer-spread': WARN, 'prefer-template': WARN, 'require-yield': ERROR, // Stylistic - everything here is a warning because of style. 'array-bracket-spacing': [WARN, 'always'], 'block-spacing': [WARN, 'always'], 'brace-style': [WARN, '1tbs', { allowSingleLine: false }], camelcase: WARN, 'comma-spacing': [WARN, { before: false, after: true }], 'comma-style': [WARN, 'last'], 'computed-property-spacing': [WARN, 'never'], 'consistent-this': [WARN, 'self'], 'eol-last': WARN, 'func-names': WARN, 'func-style': [WARN, 'declaration'], 'id-length': [WARN, { min: 2, max: 32 }], indent: [WARN, 'spaces'], 'jsx-quotes': [WARN, 'prefer-double'], 'linebreak-style': [WARN, 'unix'], 'lines-around-comment': [OFF, { beforeBlockComment: true }], 'max-depth': [WARN, 8], 'max-len': [WARN, 182], 'max-nested-callbacks': [WARN, 8], 'max-params': [WARN, 10], 'new-cap': OFF, 'new-parens': WARN, 'no-array-constructor': WARN, 'no-bitwise': OFF, 'no-continue': OFF, 'no-inline-comments': OFF, 'no-lonely-if': OFF, 'no-mixed-spaces-and-tabs': OFF, 'no-multiple-empty-lines': WARN, 'no-negated-condition': OFF, 'no-nested-ternary': WARN, 'no-new-object': WARN, 'no-plusplus': OFF, 'no-spaced-func': WARN, 'no-ternary': OFF, 'no-trailing-spaces': WARN, 'no-underscore-dangle': WARN, 'no-unneeded-ternary': WARN, 'object-curly-spacing': [WARN, 'always'], 'one-var': OFF, 'operator-assignment': [WARN, 'never'], 'operator-linebreak': [WARN, 'after'], 'padded-blocks': [WARN, 'never'], 'quote-props': [WARN, 'consistent-as-needed'], quotes: [WARN, 'single'], 'require-jsdoc': [ OFF, { require: { FunctionDeclaration: true, MethodDefinition: true, ClassDeclaration: false, }, }, ], 'semi-spacing': [WARN, { before: false, after: true }], semi: [ERROR, 'always'], 'sort-vars': OFF, 'keyword-spacing': [ WARN, { overrides: { if: { after: false }, for: { after: false }, while: { after: false }, static: { after: false }, as: { after: false }, }, }, ], 'space-before-blocks': [WARN, 'always'], 'space-before-function-paren': [WARN, 'never'], 'space-in-parens': [WARN, 'never'], 'space-infix-ops': [WARN, { int32Hint: true }], 'space-unary-ops': ERROR, 'spaced-comment': [WARN, 'always'], 'wrap-regex': WARN, }, };