module.exports = { env: { es6: true, browser: true, node: true, }, extends: [ 'standard', 'plugin:import/errors', 'plugin:import/warnings', ], plugins: [ 'unicorn', ], settings: { 'import/resolver': { node: { extensions: ['.js', '.mjs'] }, }, }, rules: { // import 'import/order': 'error', 'import/first': 'error', 'import/no-mutable-exports': 'error', 'import/no-unresolved': 'off', // Common 'semi': [2, 'never'], 'curly': [2, 'multi-or-nest', 'consistent'], 'quotes': ['error', 'single'], 'no-unused-vars': 'warn', 'no-param-reassign': 'off', 'array-bracket-spacing': ['error', 'never'], 'brace-style': ['error', 'stroustrup', { 'allowSingleLine': true }], 'block-spacing': ['error', 'always'], 'camelcase': 'off', 'comma-spacing': ['error', { before: false, after: true }], 'comma-style': ['error', 'last'], 'comma-dangle': ['error', 'always-multiline'], 'no-constant-condition': 'warn', 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-cond-assign': ['error', 'always'], 'func-call-spacing': ['off', 'never'], 'key-spacing': ['error', { beforeColon: false, afterColon: true }], 'indent': ['error', 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }], 'no-restricted-syntax': [ 'error', 'DebuggerStatement', 'ForInStatement', 'LabeledStatement', 'WithStatement', ], 'no-spaced-func': 'error', 'object-curly-spacing': ['error', 'always'], 'no-return-await': 'off', 'space-before-function-paren': ['error', 'never'], // es6 'no-var': 'error', 'prefer-const': ['error', { destructuring: 'any', ignoreReadBeforeAssign: true, }], 'prefer-arrow-callback': ['error', { allowNamedFunctions: false, allowUnboundThis: true, }], 'object-shorthand': ['error', 'always', { ignoreConstructors: false, avoidQuotes: true, }], 'prefer-rest-params': 'error', 'prefer-spread': 'error', 'prefer-template': 'error', 'template-curly-spacing': 'error', 'arrow-parens': ['error', 'as-needed', { requireForBlockBody: true }], 'generator-star-spacing': 'off', // best-practice 'array-callback-return': 'error', 'block-scoped-var': 'error', 'consistent-return': 'off', 'complexity': ['off', 11], 'eqeqeq': ['error', 'allow-null'], 'no-alert': 'warn', 'no-case-declarations': 'error', 'no-multi-spaces': 'error', 'no-multi-str': 'error', 'no-with': 'error', 'no-void': 'error', 'no-useless-escape': 'error', 'vars-on-top': 'error', 'require-await': 'off', 'no-return-assign': 'off', 'operator-linebreak': [2, 'before'], // unicorns // Pass error message when throwing errors 'unicorn/error-message': 'error', // Uppercase regex escapes 'unicorn/escape-case': 'error', // Array.isArray instead of instanceof 'unicorn/no-array-instanceof': 'error', // Prevent deprecated `new Buffer()` 'unicorn/no-new-buffer': 'error', // Keep regex literals safe! 'unicorn/no-unsafe-regex': 'off', // Lowercase number formatting for octal, hex, binary (0x12 instead of 0X12) 'unicorn/number-literal-case': 'error', // ** instead of Math.pow() 'unicorn/prefer-exponentiation-operator': 'error', // includes over indexOf when checking for existence 'unicorn/prefer-includes': 'error', // String methods startsWith/endsWith instead of more complicated stuff 'unicorn/prefer-starts-ends-with': 'error', // textContent instead of innerText 'unicorn/prefer-text-content': 'error', // Enforce throwing type error when throwing error while checking typeof 'unicorn/prefer-type-error': 'error', // Use new when throwing error 'unicorn/throw-new-error': 'error', }, }