diff --git a/.eslintrc b/.eslintrc index 0aa7475..a8c0097 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,3 +1,12 @@ { - "extends": "./eslint-config-base.js" + "extends": "./eslint-config-base.js", + "env": { + "commonjs": true + }, + "rules": { + "no-magic-numbers": "off", + "object-shorthand": "off", + "prefer-arrow-callback": "off", + "quote-props": ["error", "consistent"] + } } \ No newline at end of file diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index 616a775..4b74a8c 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -26,7 +26,7 @@ jobs: with: repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false - automatic_release_tag: "latest" + automatic_release_tag: "${{ github.ref_name }}" title: "${{ github.ref_name }}" files: | LICENSE diff --git a/eslint-config-base.js b/eslint-config-base.js index 08c17d9..0c0110b 100644 --- a/eslint-config-base.js +++ b/eslint-config-base.js @@ -1,533 +1,532 @@ module.exports = { extends: [ - "plugin:@typescript-eslint/eslint-recommended", - "plugin:import/typescript" + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:import/typescript' ], plugins: [ - "@typescript-eslint", + '@typescript-eslint', 'import', 'promise' ], env: { - es2020: true, + es2020: true }, settings: { - 'import/extensions': ['.js', '.jsx', '.ts', '.tsx'], + 'import/extensions': ['.js', '.jsx', '.ts', '.tsx'] }, overrides: [ { - files: ["*.test.js", "*.test.jsx", "*.test.ts", "*.test.tsx"], + files: ['*.test.js', '*.test.jsx', '*.test.ts', '*.test.tsx'], env: { - jest: true, + jest: true } }, { - files: ["*.ts", "*.tsx"], - parser: "@typescript-eslint/parser", + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser', rules: { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": ["error", "array-simple"], - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/ban-ts-comment": "error", - "@typescript-eslint/ban-types": "error", - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-assertions": ["error", { - "assertionStyle": "as", - "objectLiteralTypeAssertions": "allow-as-parameter" + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/ban-ts-comment': 'error', + '@typescript-eslint/ban-types': 'error', + '@typescript-eslint/consistent-indexed-object-style': 'error', + '@typescript-eslint/consistent-type-assertions': ['error', { + 'assertionStyle': 'as', + 'objectLiteralTypeAssertions': 'allow-as-parameter' }], - "@typescript-eslint/consistent-type-definitions": ["error", "interface"], - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/explicit-member-accessibility": ["error", { - "accessibility": "no-public" + '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/explicit-member-accessibility': ['error', { + 'accessibility': 'no-public' }], - "@typescript-eslint/member-delimiter-style": "error", - "@typescript-eslint/member-ordering": ["error", { - "default": [ - "public-static-field", - "protected-static-field", - "private-static-field", - "public-field", - "protected-field", - "private-field", + '@typescript-eslint/member-delimiter-style': 'error', + '@typescript-eslint/member-ordering': ['error', { + 'default': [ + 'public-static-field', + 'protected-static-field', + 'private-static-field', + 'public-field', + 'protected-field', + 'private-field', - "public-constructor", - "protected-constructor", - "private-constructor", + 'public-constructor', + 'protected-constructor', + 'private-constructor', - "public-static-method", - "protected-static-method", - "private-static-method", - "public-method", - "protected-method", - "private-method" + 'public-static-method', + 'protected-static-method', + 'private-static-method', + 'public-method', + 'protected-method', + 'private-method' ] }], - "@typescript-eslint/method-signature-style": "error", - "camelcase": "off", - "@typescript-eslint/naming-convention": ["error", + '@typescript-eslint/method-signature-style': 'error', + 'camelcase': 'off', + '@typescript-eslint/naming-convention': ['error', { - "selector": "default", - "format": ["camelCase"], - "leadingUnderscore": "forbid", - "trailingUnderscore": "forbid" + 'selector': 'default', + 'format': ['camelCase'], + 'leadingUnderscore': 'forbid', + 'trailingUnderscore': 'forbid' }, { - "selector": "variable", - "modifier": ["const", "global"], - "format": ["camelCase", "UPPER_CASE"] + 'selector': 'variable', + 'modifiers': ['const', 'global'], + 'format': ['camelCase', 'UPPER_CASE'] }, { - "selector": "function", - "modifier": ["global"], - "format": ["camelCase", "PascalCase"] + 'selector': 'function', + 'modifiers': ['global'], + 'format': ['camelCase', 'PascalCase'] }, { - "selector": "parameter", - "modifier": ["unused"], - "leadingUnderscore": "allow" + 'selector': 'parameter', + 'modifiers': ['unused'], + 'leadingUnderscore': 'allow', + 'format': null }, { - "selector": "enumMember", - "format": ["UPPER_CASE"] + 'selector': 'enumMember', + 'format': ['UPPER_CASE'] }, { - "selector": "typeLike", - "format": ["PascalCase"] - } - ], - "@typescript-eslint/no-base-to-string": "error", - "@typescript-eslint/no-confusing-non-null-assertion": "error", - "@typescript-eslint/no-confusing-void-expression": "error", - "@typescript-eslint/no-empty-interface": "error", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-extraneous-class": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-implicit-any-catch": "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-type-alias": ["error", { - "allowAliases": "in-unions-and-intersections", - "allowCallbacks": "always", - "allowConditionalTypes": "always", - "allowConstructors": "always", - "allowLiterals": "in-unions-and-intersections", - "allowMappedTypes": "always", - "allowTupleTypes": "always" + 'selector': 'typeLike', + 'format': ['PascalCase'] + }], + '@typescript-eslint/no-base-to-string': 'error', + '@typescript-eslint/no-confusing-non-null-assertion': 'error', + '@typescript-eslint/no-confusing-void-expression': 'error', + '@typescript-eslint/no-empty-interface': 'error', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-extra-non-null-assertion': 'error', + '@typescript-eslint/no-extraneous-class': 'error', + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-implicit-any-catch': 'error', + '@typescript-eslint/no-invalid-void-type': 'error', + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-misused-promises': 'error', + '@typescript-eslint/no-namespace': 'error', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-require-imports': 'error', + '@typescript-eslint/no-type-alias': ['error', { + 'allowAliases': 'in-unions-and-intersections', + 'allowCallbacks': 'always', + 'allowConditionalTypes': 'always', + 'allowConstructors': 'always', + 'allowLiterals': 'in-unions-and-intersections', + 'allowMappedTypes': 'always', + 'allowTupleTypes': 'always' }], - "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", - "@typescript-eslint/no-unnecessary-condition": ["error", { - "allowConstantLoopConditions": true + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', + '@typescript-eslint/no-unnecessary-condition': ['error', { + 'allowConstantLoopConditions': true }], - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unnecessary-type-assertion": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unsafe-assignment": "error", - "@typescript-eslint/no-unsafe-call": "error", - "@typescript-eslint/no-unsafe-member-access": "error", - "@typescript-eslint/no-unsafe-return": "error", - "@typescript-eslint/no-var-requires": "error", - "@typescript-eslint/prefer-enum-initializers": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-includes": "error", - "@typescript-eslint/prefer-literal-enum-member": "error", - "@typescript-eslint/prefer-nullish-coalescing": ["error"], - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/prefer-reduce-type-parameter": "error", - "@typescript-eslint/prefer-regexp-exec": "warn", - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/prefer-ts-expect-error": "error", - "@typescript-eslint/restrict-plus-operands": "error", - "@typescript-eslint/restrict-template-expressions": "error", - "@typescript-eslint/strict-boolean-expressions": "error", - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/type-annotation-spacing": "error", - - "brace-style": "off", - "comma-dangle": "off", - "comma-spacing": "off", - "dot-notation": "off", - "func-call-spacing": "off", - "indent": "off", - "init-declarations": "off", - "keyword-spacing": "off", - "lines-between-class-members": "off", - "no-array-constructor": "off", - "no-dupe-class-members": "off", - "no-duplicate-imports": "off", - "no-empty-function": "off", - "no-extra-parens": "off", - "no-extra-semi": "off", - "no-implied-eval": "off", - "no-invalid-this": "off", - "no-loop-func": "off", - "no-loss-of-precision": "off", - "no-magic-numbers": "off", - "no-redeclare": "off", - "no-shadow": "off", - "no-throw-literal": "off", - "no-unused-expressions": "off", - "no-unused-vars": "off", - "no-use-before-define": "off", - "no-useless-constructor": "off", - "quotes": "off", - "require-await": "off", - "no-return-await": "off", - "semi": "off", - "space-before-function-paren": "off", - - "@typescript-eslint/brace-style": "error", - "@typescript-eslint/comma-dangle": "error", - "@typescript-eslint/comma-spacing": "error", - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/func-call-spacing": "error", - "@typescript-eslint/indent": "error", - "@typescript-eslint/init-declarations": ["error", "always"], - "@typescript-eslint/keyword-spacing": "error", - "@typescript-eslint/lines-between-class-members": "error", - "@typescript-eslint/no-array-constructor": "error", - "@typescript-eslint/no-dupe-class-members": "error", - "@typescript-eslint/no-duplicate-imports": "error", - "@typescript-eslint/no-empty-function": ["error", { - "allow": [ - "private-constructors", - "protected-constructors", - "decoratedFunctions" + '@typescript-eslint/no-unnecessary-type-arguments': 'error', + '@typescript-eslint/no-unnecessary-type-assertion': 'error', + '@typescript-eslint/no-unnecessary-type-constraint': 'error', + '@typescript-eslint/no-unsafe-assignment': 'error', + '@typescript-eslint/no-unsafe-call': 'error', + '@typescript-eslint/no-unsafe-member-access': 'error', + '@typescript-eslint/no-unsafe-return': 'error', + '@typescript-eslint/no-var-requires': 'error', + '@typescript-eslint/prefer-enum-initializers': 'error', + '@typescript-eslint/prefer-for-of': 'error', + '@typescript-eslint/prefer-function-type': 'error', + '@typescript-eslint/prefer-includes': 'error', + '@typescript-eslint/prefer-literal-enum-member': 'error', + '@typescript-eslint/prefer-nullish-coalescing': ['error'], + '@typescript-eslint/prefer-optional-chain': 'error', + '@typescript-eslint/prefer-readonly': 'error', + '@typescript-eslint/prefer-reduce-type-parameter': 'error', + '@typescript-eslint/prefer-regexp-exec': 'warn', + '@typescript-eslint/prefer-string-starts-ends-with': 'error', + '@typescript-eslint/prefer-ts-expect-error': 'error', + '@typescript-eslint/restrict-plus-operands': 'error', + '@typescript-eslint/restrict-template-expressions': 'error', + '@typescript-eslint/strict-boolean-expressions': 'error', + '@typescript-eslint/switch-exhaustiveness-check': 'error', + '@typescript-eslint/type-annotation-spacing': 'error', + + 'brace-style': 'off', + 'comma-dangle': 'off', + 'comma-spacing': 'off', + 'dot-notation': 'off', + 'func-call-spacing': 'off', + 'indent': 'off', + 'init-declarations': 'off', + 'keyword-spacing': 'off', + 'lines-between-class-members': 'off', + 'no-array-constructor': 'off', + 'no-dupe-class-members': 'off', + 'no-duplicate-imports': 'off', + 'no-empty-function': 'off', + 'no-extra-parens': 'off', + 'no-extra-semi': 'off', + 'no-implied-eval': 'off', + 'no-invalid-this': 'off', + 'no-loop-func': 'off', + 'no-loss-of-precision': 'off', + 'no-magic-numbers': 'off', + 'no-redeclare': 'off', + 'no-shadow': 'off', + 'no-throw-literal': 'off', + 'no-unused-expressions': 'off', + 'no-unused-vars': 'off', + 'no-use-before-define': 'off', + 'no-useless-constructor': 'off', + 'quotes': 'off', + 'require-await': 'off', + 'no-return-await': 'off', + 'semi': 'off', + 'space-before-function-paren': 'off', + + '@typescript-eslint/brace-style': 'error', + '@typescript-eslint/comma-dangle': 'error', + '@typescript-eslint/comma-spacing': 'error', + '@typescript-eslint/dot-notation': 'error', + '@typescript-eslint/func-call-spacing': 'error', + '@typescript-eslint/indent': 'error', + '@typescript-eslint/init-declarations': ['error', 'always'], + '@typescript-eslint/keyword-spacing': 'error', + '@typescript-eslint/lines-between-class-members': 'error', + '@typescript-eslint/no-array-constructor': 'error', + '@typescript-eslint/no-dupe-class-members': 'error', + '@typescript-eslint/no-duplicate-imports': 'error', + '@typescript-eslint/no-empty-function': ['error', { + 'allow': [ + 'private-constructors', + 'protected-constructors', + 'decoratedFunctions' ] }], - "@typescript-eslint/no-extra-parens": ["error", "all", { - "enforceForArrowConditionals": false, - "enforceForSequenceExpressions": false, - "enforceForFunctionPrototypeMethods": false + '@typescript-eslint/no-extra-parens': ['error', 'all', { + 'enforceForArrowConditionals': false, + 'enforceForSequenceExpressions': false, + 'enforceForFunctionPrototypeMethods': false }], - "@typescript-eslint/no-extra-semi": "error", - "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-invalid-this": "error", - "@typescript-eslint/no-loop-func": "error", - "@typescript-eslint/no-loss-of-precision": "warn", - "@typescript-eslint/no-magic-numbers": ["warn", { - "ignoreEnums": true, - "ignoreNumericLiteralTypes": true, - "ignoreReadonlyClassProperties": true + '@typescript-eslint/no-extra-semi': 'error', + '@typescript-eslint/no-implied-eval': 'error', + '@typescript-eslint/no-invalid-this': 'error', + '@typescript-eslint/no-loop-func': 'error', + '@typescript-eslint/no-loss-of-precision': 'warn', + '@typescript-eslint/no-magic-numbers': ['warn', { + 'ignoreEnums': true, + 'ignoreNumericLiteralTypes': true, + 'ignoreReadonlyClassProperties': true }], - "@typescript-eslint/no-redeclare": "error", - "@typescript-eslint/no-shadow": "error", - "@typescript-eslint/no-throw-literal": "error", - "@typescript-eslint/no-unused-expressions": "error", - "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/no-use-before-define": ["error", { - "functions": false, - "classes": true, - "variables": true, - "enums": true, - "typedefs": false, - "ignoreTypeReferences": false + '@typescript-eslint/no-redeclare': 'error', + '@typescript-eslint/no-shadow': 'error', + '@typescript-eslint/no-throw-literal': 'error', + '@typescript-eslint/no-unused-expressions': 'error', + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/no-use-before-define': ['error', { + 'functions': false, + 'classes': true, + 'variables': true, + 'enums': true, + 'typedefs': false, + 'ignoreTypeReferences': false }], - "@typescript-eslint/no-useless-constructor": "error", - "@typescript-eslint/quotes": ["error", "single"], - "@typescript-eslint/require-await": "error", - "@typescript-eslint/return-await": "error", - "@typescript-eslint/semi": "error", - "@typescript-eslint/space-before-function-paren": ["error", { - "anonymous": "never", - "named": "never", - "asyncArrow": "always" + '@typescript-eslint/no-useless-constructor': 'error', + '@typescript-eslint/quotes': ['error', 'single'], + '@typescript-eslint/require-await': 'error', + '@typescript-eslint/return-await': 'error', + '@typescript-eslint/semi': 'error', + '@typescript-eslint/space-before-function-paren': ['error', { + 'anonymous': 'never', + 'named': 'never', + 'asyncArrow': 'always' }] } }, { - files: ["*.jsx", "*.tsx"], + files: ['*.jsx', '*.tsx'], parserOptions: { ecmaFeatures: { jsx: true } }, rules: { - "jsx-quotes": ["error", "prefer-single"] + 'jsx-quotes': ['error', 'prefer-single'] } } ], reportUnusedDisableDirectives: true, rules: { - "for-direction": "error", - "getter-return": "error", - "no-async-promise-executor": "error", - "no-await-in-loop": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": ["error", "always"], - "no-console": "error", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-dupe-args": "error", - "no-dupe-else-if": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-extra-parens": ["error", "all", { - "enforceForArrowConditionals": false, - "enforceForSequenceExpressions": false, - "enforceForFunctionPrototypeMethods": false - }], - "no-extra-semi": "error", - "no-func-assign": "error", - "no-import-assign": "error", - "no-inner-declarations": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-loss-of-precision": "warn", - "no-misleading-character-class": "error", - "no-obj-calls": "error", - "no-promise-executor-return": "error", - "no-regex-spaces": "error", - "no-setter-return": "error", - "no-sparse-arrays": "error", - "no-template-curly-in-string": "warn", - "no-unexpected-multiline": "error", - "no-unreachable": "error", - "no-unreachable-loop": "error", - "no-unsafe-finally": "error", - "no-unsafe-negation": "error", - "require-atomic-updates": "error", - "use-isnan": "error", - "valid-typeof": ["error", { - "requireStringLiterals": true + 'for-direction': 'error', + 'getter-return': 'error', + 'no-async-promise-executor': 'error', + 'no-await-in-loop': 'error', + 'no-compare-neg-zero': 'error', + 'no-cond-assign': ['error', 'always'], + 'no-console': 'error', + 'no-constant-condition': 'error', + 'no-control-regex': 'error', + 'no-debugger': 'error', + 'no-dupe-args': 'error', + 'no-dupe-else-if': 'error', + 'no-dupe-keys': 'error', + 'no-duplicate-case': 'error', + 'no-empty': 'error', + 'no-empty-character-class': 'error', + 'no-ex-assign': 'error', + 'no-extra-boolean-cast': 'error', + 'no-extra-parens': ['error', 'all', { + 'enforceForArrowConditionals': false, + 'enforceForSequenceExpressions': false, + 'enforceForFunctionPrototypeMethods': false }], - "array-callback-return": "error", - "consistent-return": "error", - "curly": "error", - "default-case": "error", - "default-case-last": "error", - "dot-location": ["error", "property"], - "dot-notation": "error", - "eqeqeq": "error", - "grouped-accessor-pairs": "error", - "guard-for-in": "error", - "no-alert": "error", - "no-caller": "error", - "no-case-declarations": "error", - "no-constructor-return": "error", - "no-div-regex": "error", - "no-else-return": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-eval": "error", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-fallthrough": "error", - "no-floating-decimal": "error", - "no-global-assign": "error", - "no-implicit-coercion": "error", - "no-implied-eval": "error", - "no-invalid-this": "error", - "no-iterator": "error", - "no-labels": "error", - "no-lone-blocks": "error", - "no-loop-func": "error", - "no-magic-numbers": "warn", - "no-multi-spaces": "error", - "no-multi-str": "error", - "no-new": "error", - "no-new-func": "error", - "no-new-wrappers": "error", - "no-nonoctal-decimal-escape": "error", - "no-octal": "error", - "no-octal-escape": "error", - "no-param-reassign": "error", - "no-redeclare": "error", - "no-return-assign": "error", - "no-return-await": "error", - "no-script-url": "error", - "no-self-assign": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-throw-literal": "error", - "no-unmodified-loop-condition": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-useless-call": "error", - "no-useless-catch": "error", - "no-useless-concat": "error", - "no-useless-escape": "error", - "no-useless-return": "error", - "no-void": "error", - "no-warning-comments": "error", - "no-with": "error", - "prefer-promise-reject-errors": ["error", { - "allowEmptyReject": true + 'no-extra-semi': 'error', + 'no-func-assign': 'error', + 'no-import-assign': 'error', + 'no-inner-declarations': 'error', + 'no-invalid-regexp': 'error', + 'no-irregular-whitespace': 'error', + 'no-loss-of-precision': 'warn', + 'no-misleading-character-class': 'error', + 'no-obj-calls': 'error', + 'no-promise-executor-return': 'error', + 'no-regex-spaces': 'error', + 'no-setter-return': 'error', + 'no-sparse-arrays': 'error', + 'no-template-curly-in-string': 'warn', + 'no-unexpected-multiline': 'error', + 'no-unreachable': 'error', + 'no-unreachable-loop': 'error', + 'no-unsafe-finally': 'error', + 'no-unsafe-negation': 'error', + 'require-atomic-updates': 'error', + 'use-isnan': 'error', + 'valid-typeof': ['error', { + 'requireStringLiterals': true }], - "prefer-regex-literals": ["error", { - "disallowRedundantWrapping": true + 'array-callback-return': 'error', + 'consistent-return': 'error', + 'curly': 'error', + 'default-case': 'error', + 'default-case-last': 'error', + 'dot-location': ['error', 'property'], + 'dot-notation': 'error', + 'eqeqeq': 'error', + 'grouped-accessor-pairs': 'error', + 'guard-for-in': 'error', + 'no-alert': 'error', + 'no-caller': 'error', + 'no-case-declarations': 'error', + 'no-constructor-return': 'error', + 'no-div-regex': 'error', + 'no-else-return': 'error', + 'no-empty-function': 'error', + 'no-empty-pattern': 'error', + 'no-eval': 'error', + 'no-extend-native': 'error', + 'no-extra-bind': 'error', + 'no-fallthrough': 'error', + 'no-floating-decimal': 'error', + 'no-global-assign': 'error', + 'no-implicit-coercion': 'error', + 'no-implied-eval': 'error', + 'no-invalid-this': 'error', + 'no-iterator': 'error', + 'no-labels': 'error', + 'no-lone-blocks': 'error', + 'no-loop-func': 'error', + 'no-magic-numbers': 'warn', + 'no-multi-spaces': 'error', + 'no-multi-str': 'error', + 'no-new': 'error', + 'no-new-func': 'error', + 'no-new-wrappers': 'error', + 'no-nonoctal-decimal-escape': 'error', + 'no-octal': 'error', + 'no-octal-escape': 'error', + 'no-param-reassign': 'error', + 'no-redeclare': 'error', + 'no-return-assign': 'error', + 'no-return-await': 'error', + 'no-script-url': 'error', + 'no-self-assign': 'error', + 'no-self-compare': 'error', + 'no-sequences': 'error', + 'no-throw-literal': 'error', + 'no-unmodified-loop-condition': 'error', + 'no-unused-expressions': 'error', + 'no-unused-labels': 'error', + 'no-useless-call': 'error', + 'no-useless-catch': 'error', + 'no-useless-concat': 'error', + 'no-useless-escape': 'error', + 'no-useless-return': 'error', + 'no-void': 'error', + 'no-warning-comments': 'error', + 'no-with': 'error', + 'prefer-promise-reject-errors': ['error', { + 'allowEmptyReject': true }], - "radix": "error", - "require-await": "error", - "yoda": ["error", "never", { - "exceptRange": true + 'prefer-regex-literals': ['error', { + 'disallowRedundantWrapping': true }], - "init-declarations": ["error", "always"], - "no-delete-var": "error", - "no-shadow": "error", - "no-shadow-restricted-names": "error", - "no-undef": "error", - "no-undef-init": "error", - "no-unused-vars": "error", - "no-use-before-define": ["error", { - "functions": false, - "classes": true, - "variables": true + 'radix': 'error', + 'require-await': 'error', + 'yoda': ['error', 'never', { + 'exceptRange': true }], - "array-bracket-newline": ["error", { - "multiline": true, - "minItems": 2 + 'init-declarations': ['error', 'always'], + 'no-delete-var': 'error', + 'no-shadow': 'error', + 'no-shadow-restricted-names': 'error', + 'no-undef': 'error', + 'no-undef-init': 'error', + 'no-unused-vars': 'error', + 'no-use-before-define': ['error', { + 'functions': false, + 'classes': true, + 'variables': true }], - "array-bracket-spacing": "error", - "array-element-newline": ["error", "consistent"], - "block-spacing": "error", - "brace-style": "error", - "camelcase": "error", - "comma-dangle": "error", - "comma-spacing": "error", - "comma-style": "error", - "computed-property-spacing": "error", - "eol-last": "error", - "func-call-spacing": "error", - "func-names": "error", - "func-style": ["error", "declaration", { - "allowArrowFunctions": true + 'array-bracket-newline': ['error', 'consistent'], + 'array-bracket-spacing': 'error', + 'array-element-newline': ['error', 'consistent'], + 'block-spacing': 'error', + 'brace-style': 'error', + 'camelcase': 'error', + 'comma-dangle': 'error', + 'comma-spacing': 'error', + 'comma-style': 'error', + 'computed-property-spacing': 'error', + 'eol-last': 'error', + 'func-call-spacing': 'error', + 'func-names': 'error', + 'func-style': ['error', 'declaration', { + 'allowArrowFunctions': true }], - "function-call-argument-newline": ["error", "consistent"], - "function-paren-newline": ["error", "consistent"], - "implicit-arrow-linebreak": "error", - "indent": ["error", 4], - "key-spacing": "error", - "keyword-spacing": "error", - "linebreak-style": ["error", "windows"], - "lines-between-class-members": "error", - "max-len": ["error", { - "code": 150, - "ignoreRegExpLiterals": true + 'function-call-argument-newline': ['error', 'consistent'], + 'function-paren-newline': ['error', 'consistent'], + 'implicit-arrow-linebreak': 'error', + 'indent': ['error', 4], + 'key-spacing': 'error', + 'keyword-spacing': 'error', + 'linebreak-style': ['error', 'windows'], + 'lines-between-class-members': 'error', + 'max-len': ['error', { + 'code': 150, + 'ignoreRegExpLiterals': true }], - "max-statements-per-line": "error", - "multiline-comment-style": "error", - "multiline-ternary": ["error", "never"], - "new-cap": "error", - "newline-per-chained-call": "error", - "no-array-constructor": "error", - "no-continue": "error", - "no-lonely-if": "error", - "no-mixed-operators": "error", - "no-multi-assign": "error", - "no-multiple-empty-lines": ["error", { - "max": 2 + 'max-statements-per-line': 'error', + 'multiline-comment-style': 'error', + 'multiline-ternary': ['error', 'never'], + 'new-cap': 'error', + 'newline-per-chained-call': 'error', + 'no-array-constructor': 'error', + 'no-continue': 'error', + 'no-lonely-if': 'error', + 'no-mixed-operators': 'error', + 'no-multi-assign': 'error', + 'no-multiple-empty-lines': ['error', { + 'max': 2 }], - "no-negated-condition": "error", - "no-nested-ternary": "warn", - "no-new-object": "error", - "no-trailing-spaces": "error", - "no-whitespace-before-property": "error", - "object-curly-newline": ["error", { - "ObjectExpression": { - "minProperties": 1 + 'no-negated-condition': 'error', + 'no-nested-ternary': 'warn', + 'no-new-object': 'error', + 'no-trailing-spaces': 'error', + 'no-whitespace-before-property': 'error', + 'object-curly-newline': ['error', { + 'ObjectExpression': { + 'minProperties': 2, + 'consistent': true }, - "ObjectPattern": { - "multiline": true + 'ObjectPattern': { + 'multiline': true }, - "ImportDeclaration": { - "multiline": true + 'ImportDeclaration': { + 'multiline': true }, - "ExportDeclaration": { - "multiline": true, - "minProperties": 3 + 'ExportDeclaration': { + 'multiline': true, + 'minProperties': 3, + 'consistent': true } }], - "object-curly-spacing": ["error", "always"], - "one-var": "error", - "operator-assignment": "error", - "padded-blocks": ["error", "never"], - "prefer-exponentiation-operator": "error", - "prefer-object-spread": "error", - "quote-props": ["error", "as-needed"], - "quotes": ["error", "single"], - "semi": "error", - "semi-spacing": "error", - "semi-style": "error", - "space-before-blocks": "error", - "space-before-function-paren": ["error", { - "anonymous": "never", - "named": "never", - "asyncArrow": "always" + 'object-curly-spacing': ['error', 'always'], + 'one-var': 'error', + 'operator-assignment': 'error', + 'padded-blocks': ['error', 'never'], + 'prefer-exponentiation-operator': 'error', + 'prefer-object-spread': 'error', + 'quote-props': ['error', 'consistent-as-needed'], + 'quotes': ['error', 'single'], + 'semi': 'error', + 'semi-spacing': 'error', + 'semi-style': 'error', + 'space-before-blocks': 'error', + 'space-before-function-paren': ['error', { + 'anonymous': 'never', + 'named': 'never', + 'asyncArrow': 'always' }], - "space-in-parens": "error", - "spaced-comment": "error", - "switch-colon-spacing": "error", - "template-tag-spacing": "error", - "arrow-body-style": "error", - "arrow-parens": ["error", "as-needed"], - "arrow-spacing": "error", - "constructor-super": "error", - "generator-star-spacing": ["error", "after"], - "no-class-assign": "error", - "no-confusing-arrow": "error", - "no-const-assign": "error", - "no-dupe-class-members": "error", - "no-duplicate-imports": "error", - "no-new-symbol": "error", - "no-this-before-super": "error", - "no-useless-computed-key": "error", - "no-useless-constructor": "error", - "no-useless-rename": "error", - "no-var": "error", - "object-shorthand": "error", - "prefer-arrow-callback": "error", - "prefer-const": "error", - "prefer-destructuring": "error", - "prefer-numeric-literals": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "prefer-template": "error", - "require-yield": "error", - "rest-spread-spacing": "error", - "sort-imports": "error", - "symbol-description": "error", - "template-curly-spacing": "error", - "yield-star-spacing": ["error", "after"], - + 'space-in-parens': 'error', + 'spaced-comment': 'error', + 'switch-colon-spacing': 'error', + 'template-tag-spacing': 'error', + 'arrow-body-style': 'error', + 'arrow-parens': ['error', 'as-needed'], + 'arrow-spacing': 'error', + 'constructor-super': 'error', + 'generator-star-spacing': ['error', 'after'], + 'no-class-assign': 'error', + 'no-confusing-arrow': 'error', + 'no-const-assign': 'error', + 'no-dupe-class-members': 'error', + 'no-duplicate-imports': 'error', + 'no-new-symbol': 'error', + 'no-this-before-super': 'error', + 'no-useless-computed-key': 'error', + 'no-useless-constructor': 'error', + 'no-useless-rename': 'error', + 'no-var': 'error', + 'object-shorthand': 'error', + 'prefer-arrow-callback': 'error', + 'prefer-const': 'error', + 'prefer-destructuring': 'error', + 'prefer-numeric-literals': 'error', + 'prefer-rest-params': 'error', + 'prefer-spread': 'error', + 'prefer-template': 'error', + 'require-yield': 'error', + 'rest-spread-spacing': 'error', + 'sort-imports': 'error', + 'symbol-description': 'error', + 'template-curly-spacing': 'error', + 'yield-star-spacing': ['error', 'after'], + 'import/default': 'error', 'import/export': 'error', - "import/first": "error", + 'import/first': 'error', 'import/namespace': 'error', - "import/newline-after-import": "error", - "import/no-cycle": "error", - "import/no-deprecated": "warn", - "import/no-duplicates": "error", - "import/no-mutable-exports": "error", + 'import/newline-after-import': 'error', + 'import/no-cycle': 'error', + 'import/no-deprecated': 'warn', + 'import/no-duplicates': 'error', + 'import/no-mutable-exports': 'error', 'import/no-named-as-default': 'warn', 'import/no-named-as-default-member': 'warn', - "import/no-self-import": "error", - "import/order": ["error", { - "groups": [ - ["builtin", "external"], - "parent", - "sibling", - "index" + 'import/no-self-import': 'error', + 'import/order': ['error', { + 'groups': [ + ['builtin', 'external'], + 'parent', + 'sibling', + 'index' ], - "newlines-between": "never", - "alphabetize": { - "order": "asc" + 'newlines-between': 'never', + 'alphabetize': { + 'order': 'asc' } }], - - "promise/prefer-await-to-then": "error", - "promise/prefer-await-to-callbacks": "error" + + 'promise/prefer-await-to-then': 'error', + 'promise/prefer-await-to-callbacks': 'error' } }; diff --git a/eslint-config-lodash.js b/eslint-config-lodash.js index fb93543..484ccd2 100644 --- a/eslint-config-lodash.js +++ b/eslint-config-lodash.js @@ -1,18 +1,18 @@ module.exports = { plugins: [ - "lodash" + 'lodash' ], rules: { - "lodash/import-scope": ["error", "method"], - "lodash/prefer-compact": "error", - "lodash/prefer-find": "error", - "lodash/prefer-flat-map": "error", - "lodash/prefer-immutable-method": "error", - "lodash/prefer-is-nil": "error", - "lodash/prefer-map": "error", - "lodash/prefer-matches": "error", - "lodash/prefer-noop": "error", - "lodash/prefer-reject": "error", - "lodash/prefer-times": "error" + 'lodash/import-scope': ['error', 'method'], + 'lodash/prefer-compact': 'error', + 'lodash/prefer-find': 'error', + 'lodash/prefer-flat-map': 'error', + 'lodash/prefer-immutable-method': 'error', + 'lodash/prefer-is-nil': 'error', + 'lodash/prefer-map': 'error', + 'lodash/prefer-matches': 'error', + 'lodash/prefer-noop': 'error', + 'lodash/prefer-reject': 'error', + 'lodash/prefer-times': 'error' } }; diff --git a/eslint-config-react-a11y.js b/eslint-config-react-a11y.js index fee801b..718efb3 100644 --- a/eslint-config-react-a11y.js +++ b/eslint-config-react-a11y.js @@ -1,15 +1,15 @@ module.exports = { extends: [ - "./eslint-config-react.js" + './eslint-config-react.js' ], plugins: [ - "jsx-a11y" + 'jsx-a11y' ], overrides: [ { - files: ["*.jsx", "*.tsx"], + files: ['*.jsx', '*.tsx'], extends: [ - "plugin:jsx-a11y/recommended" + 'plugin:jsx-a11y/recommended' ] } ] diff --git a/eslint-config-react.js b/eslint-config-react.js index b1a062b..7f6e489 100644 --- a/eslint-config-react.js +++ b/eslint-config-react.js @@ -1,7 +1,11 @@ const linkComponents = [ - {"name": "Link", "linkAttribute": "to"}, - {"name": "NavLink", "linkAttribute": "to"} -] + { + 'name': 'Link', 'linkAttribute': 'to' + }, + { + 'name': 'NavLink', 'linkAttribute': 'to' + } +]; module.exports = { extends: [ @@ -9,112 +13,115 @@ module.exports = { './eslint-config-base.js' ], plugins: [ - "react", - "react-hooks" + 'react', + 'react-hooks' ], env: { browser: true }, settings: { + react: { + version: 'detect' + }, linkComponents: linkComponents }, rules: { - "react/button-has-type": "error", - "react/display-name": "error", - "react/no-access-state-in-setstate": "error", - "react/no-array-index-key": "error", - "react/no-children-prop": "error", - "react/no-danger": "error", - "react/no-danger-with-children": "error", - "react/no-deprecated": "error", - "react/no-did-mount-set-state": "error", - "react/no-did-update-set-state": "error", - "react/no-direct-mutation-state": "error", - "react/no-is-mounted": "error", - "react/no-redundant-should-component-update": "error", - "react/no-render-return-value": "error", - "react/no-string-refs": "error", - "react/no-this-in-sfc": "error", - "react/no-typos": "error", - "react/no-unescaped-entities": "error", - "react/no-unsafe": "error", - "react/no-unused-prop-types": "error", - "react/no-unused-state": "error", - "react/no-will-update-set-state": "error", - "react/prefer-stateless-function": "error", - "react/prefer-stateless-function": ["error", { - "ignorePureComponents": true + 'react/button-has-type': 'error', + 'react/display-name': 'error', + 'react/no-access-state-in-setstate': 'error', + 'react/no-array-index-key': 'error', + 'react/no-children-prop': 'error', + 'react/no-danger': 'error', + 'react/no-danger-with-children': 'error', + 'react/no-deprecated': 'error', + 'react/no-did-mount-set-state': 'error', + 'react/no-did-update-set-state': 'error', + 'react/no-direct-mutation-state': 'error', + 'react/no-is-mounted': 'error', + 'react/no-redundant-should-component-update': 'error', + 'react/no-render-return-value': 'error', + 'react/no-string-refs': 'error', + 'react/no-this-in-sfc': 'error', + 'react/no-typos': 'error', + 'react/no-unescaped-entities': 'error', + 'react/no-unsafe': 'error', + 'react/no-unused-prop-types': 'error', + 'react/no-unused-state': 'error', + 'react/no-will-update-set-state': 'error', + 'react/prefer-stateless-function': ['error', { + 'ignorePureComponents': true }], - "react/react-in-jsx-scope": "error", - "react/require-render-return": "error", - "react/self-closing-comp": ["error", { - "component": true, - "html": true + 'react/react-in-jsx-scope': 'error', + 'react/require-render-return': 'error', + 'react/self-closing-comp': ['error', { + 'component': true, + 'html': true }], - "react/state-in-constructor": "error", - "react/void-dom-elements-no-children": "error" + 'react/state-in-constructor': 'error', + 'react/void-dom-elements-no-children': 'error' }, overrides: [ { - files: ["*.jsx", "*.tsx"], + files: ['*.jsx', '*.tsx'], rules: { - "react/jsx-boolean-value": "error", - "react/jsx-child-element-spacing": "error", - "react/jsx-closing-bracket-location": ["error", "tag-aligned"], - "react/jsx-closing-tag-location": "error", - "react/jsx-curly-brace-presence": "error", - "react/jsx-curly-newline":[ "error", { - "multiline": "require", - "singleline": "forbid" + 'react/jsx-boolean-value': 'error', + 'react/jsx-child-element-spacing': 'error', + 'react/jsx-closing-bracket-location': ['error', 'tag-aligned'], + 'react/jsx-closing-tag-location': 'error', + 'react/jsx-curly-brace-presence': 'error', + 'react/jsx-curly-newline': ['error', { + 'multiline': 'require', + 'singleline': 'forbid' }], - "react/jsx-curly-spacing": ["error", { - "when": "never", - "allowMultiline": false, - "attributes": { "when": "never" }, - "children": { "when": "never" } + 'react/jsx-curly-spacing': ['error', { + 'when': 'never', + 'allowMultiline': false, + 'attributes': { 'when': 'never' }, + 'children': { 'when': 'never' } }], - "react/jsx-equals-spacing": "error", - "react/jsx-first-prop-new-line": "error", - "react/jsx-fragments": ["error", "element"], - "react/jsx-handler-names": ["error", { - "checkInlineFunction": true + 'react/jsx-equals-spacing': 'error', + 'react/jsx-first-prop-new-line': 'error', + 'react/jsx-fragments': ['error', 'element'], + 'react/jsx-handler-names': ['error', { + 'checkInlineFunction': true }], - "react/jsx-indent": ["error", 4, { - "checkAttributes": true, - "indentLogicalExpressions": true + 'react/jsx-indent': ['error', 4, { + 'checkAttributes': true, + 'indentLogicalExpressions': true }], - "react/jsx-indent-props": "error", - "react/jsx-key": ["error", { - "checkFragmentShorthand": true, - "checkKeyMustBeforeSpread": true + 'react/jsx-indent-props': 'error', + 'react/jsx-key': ['error', { + 'checkFragmentShorthand': true, + 'checkKeyMustBeforeSpread': true }], - "react/jsx-max-props-per-line": "error", - "react/jsx-no-bind": "error", - "react/jsx-no-comment-textnodes": "error", - "react/jsx-no-constructed-context-values": "error", - "react/jsx-no-duplicate-props": "error", - "react/jsx-no-script-url": ["error", linkComponents.map(function(comp) { - return { name: comp.name, props: [comp.linkAttribute] } + 'react/jsx-max-props-per-line': 'error', + 'react/jsx-no-bind': 'error', + 'react/jsx-no-comment-textnodes': 'error', + 'react/jsx-no-constructed-context-values': 'error', + 'react/jsx-no-duplicate-props': 'error', + 'react/jsx-no-script-url': ['error', linkComponents.map(function map(comp) { + return { + name: comp.name, props: [comp.linkAttribute] + }; })], - "react/jsx-no-target-blank": "error", - "react/jsx-no-useless-fragment": "error", - "react/jsx-one-expression-per-line": ["error", { - "allow": "literal" + 'react/jsx-no-target-blank': 'error', + 'react/jsx-no-useless-fragment': 'error', + 'react/jsx-one-expression-per-line': ['error', { + 'allow': 'literal' }], - "react/jsx-pascal-case": "error", - "react/jsx-space-before-closing": "error", - "react/jsx-tag-spacing": "error", - "react/jsx-wrap-multilines": ["error", { - "declaration": "parens-new-line", - "assignment": "parens-new-line", - "return": "parens-new-line", - "arrow": "parens-new-line", - "condition": "parens-new-line", - "logical": "parens-new-line", - "prop": "parens-new-line" + 'react/jsx-pascal-case': 'error', + 'react/jsx-space-before-closing': 'error', + 'react/jsx-tag-spacing': 'error', + 'react/jsx-wrap-multilines': ['error', { + 'declaration': 'parens-new-line', + 'assignment': 'parens-new-line', + 'return': 'parens-new-line', + 'arrow': 'parens-new-line', + 'condition': 'parens-new-line', + 'logical': 'parens-new-line', + 'prop': 'parens-new-line' }] } } ] - -} \ No newline at end of file +};