diff --git a/demo/example.ts b/demo/example.ts new file mode 100644 index 0000000..9d7aac0 --- /dev/null +++ b/demo/example.ts @@ -0,0 +1,9 @@ +export function someFunc({ prop1 }) { + console.log({ prop1 }) +} + +export function someFunc2(prop1): void {} + +const unusedVar = 3 + +type UnusedType = number diff --git a/demo/test/linting-config.test.js b/demo/test/linting-config.test.js index 85480e4..3f5748d 100755 --- a/demo/test/linting-config.test.js +++ b/demo/test/linting-config.test.js @@ -25,3 +25,7 @@ test('Should apply our custom linting rules consistently', async (t) => { test('Should apply a consistent overall eslint configuration', async (t) => { return processFile(t, 'local-linting-final-config.json') // If this fails, go cry to mommy }) + +test('Should apply a consistent overall eslint configuration for TS', async (t) => { + return processFile(t, 'local-linting-final-config-ts.json') // If this fails, go cry to mommy +}) diff --git a/demo/test/snapshots/format-config.js b/demo/test/snapshots/format-config.js index 83f0f18..c14bcbc 100644 --- a/demo/test/snapshots/format-config.js +++ b/demo/test/snapshots/format-config.js @@ -5,25 +5,38 @@ /* eslint no-console: "off" -- node scripts use the console, so disable for the whole file */ const FS = require('fs') -const finalConfig = require('./local-linting-final-config.json') +const finalJsConfig = require('./local-linting-final-config.json') +const finalTsConfig = require('./local-linting-final-config-ts.json') -const formattedRules = Object.fromEntries( - Object.entries(finalConfig?.rules ?? {}).sort(([ruleNameA], [ruleNameB]) => { - if (ruleNameA > ruleNameB) return 1 - if (ruleNameB > ruleNameA) return -1 - return 0 - }) +const parseConfig = (config) => { + return { + ...config, + rules: Object.fromEntries( + Object.entries(config?.rules ?? {}).sort(([ruleNameA], [ruleNameB]) => { + if (ruleNameA > ruleNameB) return 1 + if (ruleNameB > ruleNameA) return -1 + return 0 + }) + ), + parser: config?.parser?.split('node_modules')[1], + } +} + +const finalJsConfigName = 'local-linting-final-config' +FS.writeFile( + `./demo/test/snapshots/${finalJsConfigName}.json`, + JSON.stringify(parseConfig(finalJsConfig), null, 2), + (err) => { + if (err) console.log(`There was an error writing to ${finalJsConfigName}.json file:`, err) + } ) +const finalTsConfigName = 'local-linting-final-config-ts' FS.writeFile( - './demo/test/snapshots/local-linting-final-config.json', - JSON.stringify( - { ...finalConfig, rules: formattedRules, parser: finalConfig.parser?.split('eslint-config-tree')[1] }, - null, - 2 - ), + `./demo/test/snapshots/${finalTsConfigName}.json`, + JSON.stringify(parseConfig(finalTsConfig), null, 2), (err) => { - if (err) console.log('There was an error writing to local-linting-final-config.json file:', err) + if (err) console.log(`There was an error writing to ${finalTsConfigName}.json file:`, err) } ) diff --git a/demo/test/snapshots/linting-config.test.js.md b/demo/test/snapshots/linting-config.test.js.md index 9cf7488..74e0017 100644 --- a/demo/test/snapshots/linting-config.test.js.md +++ b/demo/test/snapshots/linting-config.test.js.md @@ -18,7 +18,7 @@ Generated by [AVA](https://ava.li). "browser": true␊ },␊ "globals": {},␊ - "parser": "/node_modules/@babel/eslint-parser/lib/index.cjs",␊ + "parser": "/@babel/eslint-parser/lib/index.cjs",␊ "parserOptions": {␊ "ecmaVersion": 12,␊ "sourceType": "module",␊ @@ -3557,6 +3557,3627 @@ Generated by [AVA](https://ava.li). "ignorePatterns": []␊ }` +## Should apply a consistent overall eslint configuration for TS + +> Snapshot 1 + + `{␊ + "env": {␊ + "cypress/globals": true,␊ + "jest/globals": true,␊ + "es2021": true,␊ + "es6": true,␊ + "node": true,␊ + "browser": true␊ + },␊ + "globals": {},␊ + "parser": "/@typescript-eslint/parser/dist/index.js",␊ + "parserOptions": {␊ + "warnOnUnsupportedTypeScriptVersion": false,␊ + "sourceType": "module",␊ + "ecmaVersion": 12,␊ + "requireConfigFile": false,␊ + "ecmaFeatures": {␊ + "generators": false,␊ + "objectLiteralDuplicateProperties": false,␊ + "jsx": true␊ + },␊ + "babelOptions": {␊ + "presets": [␊ + "@babel/preset-react"␊ + ]␊ + }␊ + },␊ + "plugins": [␊ + "react",␊ + "jsx-a11y",␊ + "react-hooks",␊ + "import",␊ + "@babel",␊ + "jsdoc",␊ + "@fs/zion",␊ + "jest",␊ + "you-dont-need-lodash-underscore",␊ + "@typescript-eslint",␊ + "cypress",␊ + "prettier",␊ + "test-selectors",␊ + "sonarjs",␊ + "promise",␊ + "html",␊ + "deprecate",␊ + "bestpractices"␊ + ],␊ + "rules": {␊ + "@babel/no-unused-expressions": [␊ + "warn",␊ + {␊ + "allowShortCircuit": true,␊ + "allowTernary": false,␊ + "allowTaggedTemplates": false,␊ + "enforceForJSX": false␊ + }␊ + ],␊ + "@babel/object-curly-spacing": [␊ + "off"␊ + ],␊ + "@babel/semi": [␊ + "off"␊ + ],␊ + "@fs/zion/logical-over-directional": [␊ + "warn"␊ + ],␊ + "@fs/zion/prefer-zion-render": [␊ + "off"␊ + ],␊ + "@typescript-eslint/adjacent-overload-signatures": [␊ + "error"␊ + ],␊ + "@typescript-eslint/array-type": [␊ + "error"␊ + ],␊ + "@typescript-eslint/ban-ts-comment": [␊ + "error"␊ + ],␊ + "@typescript-eslint/ban-tslint-comment": [␊ + "error"␊ + ],␊ + "@typescript-eslint/ban-types": [␊ + "error"␊ + ],␊ + "@typescript-eslint/block-spacing": [␊ + "off"␊ + ],␊ + "@typescript-eslint/brace-style": [␊ + "off"␊ + ],␊ + "@typescript-eslint/class-literal-property-style": [␊ + "error"␊ + ],␊ + "@typescript-eslint/comma-dangle": [␊ + "off"␊ + ],␊ + "@typescript-eslint/comma-spacing": [␊ + "off"␊ + ],␊ + "@typescript-eslint/consistent-generic-constructors": [␊ + "error"␊ + ],␊ + "@typescript-eslint/consistent-indexed-object-style": [␊ + "error"␊ + ],␊ + "@typescript-eslint/consistent-type-assertions": [␊ + "error"␊ + ],␊ + "@typescript-eslint/consistent-type-definitions": [␊ + "off"␊ + ],␊ + "@typescript-eslint/consistent-type-imports": [␊ + "error",␊ + {␊ + "fixStyle": "inline-type-imports"␊ + }␊ + ],␊ + "@typescript-eslint/explicit-function-return-type": [␊ + "error",␊ + {␊ + "allowExpressions": true␊ + }␊ + ],␊ + "@typescript-eslint/explicit-module-boundary-types": [␊ + "warn"␊ + ],␊ + "@typescript-eslint/func-call-spacing": [␊ + "off"␊ + ],␊ + "@typescript-eslint/indent": [␊ + "off"␊ + ],␊ + "@typescript-eslint/key-spacing": [␊ + "off"␊ + ],␊ + "@typescript-eslint/keyword-spacing": [␊ + "off"␊ + ],␊ + "@typescript-eslint/lines-around-comment": [␊ + 0␊ + ],␊ + "@typescript-eslint/member-delimiter-style": [␊ + "off"␊ + ],␊ + "@typescript-eslint/no-array-constructor": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-confusing-non-null-assertion": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-duplicate-enum-values": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-empty-function": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-empty-interface": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-explicit-any": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-extra-non-null-assertion": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-extra-parens": [␊ + "off"␊ + ],␊ + "@typescript-eslint/no-extra-semi": [␊ + "off"␊ + ],␊ + "@typescript-eslint/no-inferrable-types": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-loss-of-precision": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-misused-new": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-namespace": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-non-null-asserted-optional-chain": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-shadow": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-this-alias": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-unnecessary-type-constraint": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-unsafe-declaration-merging": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-unused-vars": [␊ + "error"␊ + ],␊ + "@typescript-eslint/no-use-before-define": [␊ + "error",␊ + {␊ + "functions": false␊ + }␊ + ],␊ + "@typescript-eslint/no-var-requires": [␊ + "error"␊ + ],␊ + "@typescript-eslint/object-curly-spacing": [␊ + "off"␊ + ],␊ + "@typescript-eslint/prefer-as-const": [␊ + "error"␊ + ],␊ + "@typescript-eslint/prefer-for-of": [␊ + "error"␊ + ],␊ + "@typescript-eslint/prefer-function-type": [␊ + "error"␊ + ],␊ + "@typescript-eslint/prefer-namespace-keyword": [␊ + "error"␊ + ],␊ + "@typescript-eslint/quotes": [␊ + 0␊ + ],␊ + "@typescript-eslint/semi": [␊ + "off"␊ + ],␊ + "@typescript-eslint/space-before-blocks": [␊ + "off"␊ + ],␊ + "@typescript-eslint/space-before-function-paren": [␊ + "off"␊ + ],␊ + "@typescript-eslint/space-infix-ops": [␊ + "off"␊ + ],␊ + "@typescript-eslint/triple-slash-reference": [␊ + "error"␊ + ],␊ + "@typescript-eslint/type-annotation-spacing": [␊ + "off"␊ + ],␊ + "accessor-pairs": [␊ + "off"␊ + ],␊ + "array-bracket-newline": [␊ + "off",␊ + "consistent"␊ + ],␊ + "array-bracket-spacing": [␊ + "off",␊ + "never"␊ + ],␊ + "array-callback-return": [␊ + "error",␊ + {␊ + "allowImplicit": true,␊ + "checkForEach": false,␊ + "allowVoid": false␊ + }␊ + ],␊ + "array-element-newline": [␊ + "off",␊ + {␊ + "multiline": true,␊ + "minItems": 3␊ + }␊ + ],␊ + "arrow-body-style": [␊ + "off",␊ + "as-needed",␊ + {␊ + "requireReturnForObjectLiteral": false␊ + }␊ + ],␊ + "arrow-parens": [␊ + "off",␊ + "always"␊ + ],␊ + "arrow-spacing": [␊ + "off",␊ + {␊ + "before": true,␊ + "after": true␊ + }␊ + ],␊ + "babel/object-curly-spacing": [␊ + "off"␊ + ],␊ + "babel/quotes": [␊ + 0␊ + ],␊ + "babel/semi": [␊ + "off"␊ + ],␊ + "bestpractices/no-eslint-disable": [␊ + "warn"␊ + ],␊ + "block-scoped-var": [␊ + "error"␊ + ],␊ + "block-spacing": [␊ + "off",␊ + "always"␊ + ],␊ + "brace-style": [␊ + "off",␊ + "1tbs",␊ + {␊ + "allowSingleLine": true␊ + }␊ + ],␊ + "callback-return": [␊ + "off"␊ + ],␊ + "camelcase": [␊ + "off",␊ + {␊ + "properties": "never",␊ + "ignoreDestructuring": false,␊ + "ignoreImports": false,␊ + "ignoreGlobals": false␊ + }␊ + ],␊ + "capitalized-comments": [␊ + "off",␊ + "never",␊ + {␊ + "line": {␊ + "ignorePattern": ".*",␊ + "ignoreInlineComments": true,␊ + "ignoreConsecutiveComments": true␊ + },␊ + "block": {␊ + "ignorePattern": ".*",␊ + "ignoreInlineComments": true,␊ + "ignoreConsecutiveComments": true␊ + }␊ + }␊ + ],␊ + "class-methods-use-this": [␊ + "error",␊ + {␊ + "exceptMethods": [],␊ + "enforceForClassFields": true␊ + }␊ + ],␊ + "comma-dangle": [␊ + "off",␊ + {␊ + "arrays": "always-multiline",␊ + "objects": "always-multiline",␊ + "imports": "always-multiline",␊ + "exports": "always-multiline",␊ + "functions": "always-multiline"␊ + }␊ + ],␊ + "comma-spacing": [␊ + "off",␊ + {␊ + "before": false,␊ + "after": true␊ + }␊ + ],␊ + "comma-style": [␊ + "off",␊ + "last",␊ + {␊ + "exceptions": {␊ + "ArrayExpression": false,␊ + "ArrayPattern": false,␊ + "ArrowFunctionExpression": false,␊ + "CallExpression": false,␊ + "FunctionDeclaration": false,␊ + "FunctionExpression": false,␊ + "ImportDeclaration": false,␊ + "ObjectExpression": false,␊ + "ObjectPattern": false,␊ + "VariableDeclaration": false,␊ + "NewExpression": false␊ + }␊ + }␊ + ],␊ + "complexity": [␊ + "off",␊ + 20␊ + ],␊ + "computed-property-spacing": [␊ + "off",␊ + "never"␊ + ],␊ + "consistent-return": [␊ + "error"␊ + ],␊ + "consistent-this": [␊ + "off"␊ + ],␊ + "constructor-super": [␊ + "off"␊ + ],␊ + "curly": [␊ + 0,␊ + "multi-line"␊ + ],␊ + "cypress/no-assigning-return-values": [␊ + "error"␊ + ],␊ + "cypress/no-async-tests": [␊ + "error"␊ + ],␊ + "cypress/no-unnecessary-waiting": [␊ + "error"␊ + ],␊ + "cypress/unsafe-to-chain-command": [␊ + "error"␊ + ],␊ + "default-case": [␊ + "error",␊ + {␊ + "commentPattern": "^no default$"␊ + }␊ + ],␊ + "default-case-last": [␊ + "error"␊ + ],␊ + "default-param-last": [␊ + "error"␊ + ],␊ + "dot-location": [␊ + "off",␊ + "property"␊ + ],␊ + "dot-notation": [␊ + "error",␊ + {␊ + "allowKeywords": true,␊ + "allowPattern": ""␊ + }␊ + ],␊ + "eol-last": [␊ + "off",␊ + "always"␊ + ],␊ + "eqeqeq": [␊ + "error",␊ + "always",␊ + {␊ + "null": "ignore"␊ + }␊ + ],␊ + "flowtype/boolean-style": [␊ + "off"␊ + ],␊ + "flowtype/delimiter-dangle": [␊ + "off"␊ + ],␊ + "flowtype/generic-spacing": [␊ + "off"␊ + ],␊ + "flowtype/object-type-curly-spacing": [␊ + "off"␊ + ],␊ + "flowtype/object-type-delimiter": [␊ + "off"␊ + ],␊ + "flowtype/quotes": [␊ + "off"␊ + ],␊ + "flowtype/semi": [␊ + "off"␊ + ],␊ + "flowtype/space-after-type-colon": [␊ + "off"␊ + ],␊ + "flowtype/space-before-generic-bracket": [␊ + "off"␊ + ],␊ + "flowtype/space-before-type-colon": [␊ + "off"␊ + ],␊ + "flowtype/union-intersection-spacing": [␊ + "off"␊ + ],␊ + "for-direction": [␊ + "error"␊ + ],␊ + "func-call-spacing": [␊ + "off",␊ + "never"␊ + ],␊ + "func-name-matching": [␊ + "off",␊ + "always",␊ + {␊ + "includeCommonJSModuleExports": false,␊ + "considerPropertyDescriptor": true␊ + }␊ + ],␊ + "func-names": [␊ + "warn"␊ + ],␊ + "func-style": [␊ + "off",␊ + "expression"␊ + ],␊ + "function-call-argument-newline": [␊ + "off",␊ + "consistent"␊ + ],␊ + "function-paren-newline": [␊ + "off",␊ + "multiline-arguments"␊ + ],␊ + "generator-star": [␊ + "off"␊ + ],␊ + "generator-star-spacing": [␊ + "off",␊ + {␊ + "before": false,␊ + "after": true␊ + }␊ + ],␊ + "getter-return": [␊ + "off",␊ + {␊ + "allowImplicit": true␊ + }␊ + ],␊ + "global-require": [␊ + "error"␊ + ],␊ + "grouped-accessor-pairs": [␊ + "error"␊ + ],␊ + "guard-for-in": [␊ + "error"␊ + ],␊ + "handle-callback-err": [␊ + "off"␊ + ],␊ + "id-denylist": [␊ + "off"␊ + ],␊ + "id-length": [␊ + "off"␊ + ],␊ + "id-match": [␊ + "off"␊ + ],␊ + "implicit-arrow-linebreak": [␊ + "off",␊ + "beside"␊ + ],␊ + "import/default": [␊ + "off"␊ + ],␊ + "import/dynamic-import-chunkname": [␊ + "off",␊ + {␊ + "importFunctions": [],␊ + "webpackChunknameFormat": "[0-9a-zA-Z-_/.]+"␊ + }␊ + ],␊ + "import/export": [␊ + "error"␊ + ],␊ + "import/exports-last": [␊ + "off"␊ + ],␊ + "import/extensions": [␊ + "error",␊ + "ignorePackages",␊ + {␊ + "js": "never",␊ + "jsx": "never",␊ + "ts": "never",␊ + "tsx": "never"␊ + }␊ + ],␊ + "import/first": [␊ + "error"␊ + ],␊ + "import/group-exports": [␊ + "off"␊ + ],␊ + "import/imports-first": [␊ + "off"␊ + ],␊ + "import/max-dependencies": [␊ + "off",␊ + {␊ + "max": 10␊ + }␊ + ],␊ + "import/named": [␊ + "off"␊ + ],␊ + "import/namespace": [␊ + "off"␊ + ],␊ + "import/newline-after-import": [␊ + "error"␊ + ],␊ + "import/no-absolute-path": [␊ + "error"␊ + ],␊ + "import/no-amd": [␊ + "error"␊ + ],␊ + "import/no-anonymous-default-export": [␊ + "off",␊ + {␊ + "allowArray": false,␊ + "allowArrowFunction": false,␊ + "allowAnonymousClass": false,␊ + "allowAnonymousFunction": false,␊ + "allowLiteral": false,␊ + "allowObject": false␊ + }␊ + ],␊ + "import/no-commonjs": [␊ + "off"␊ + ],␊ + "import/no-cycle": [␊ + "error",␊ + {␊ + "maxDepth": "∞",␊ + "ignoreExternal": false,␊ + "allowUnsafeDynamicCyclicDependency": false,␊ + "disableScc": false␊ + }␊ + ],␊ + "import/no-default-export": [␊ + "off"␊ + ],␊ + "import/no-deprecated": [␊ + "off"␊ + ],␊ + "import/no-duplicates": [␊ + "error"␊ + ],␊ + "import/no-dynamic-require": [␊ + "error"␊ + ],␊ + "import/no-extraneous-dependencies": [␊ + "error",␊ + {␊ + "devDependencies": [␊ + "**/setupTests.[tj]s?(x)",␊ + "**/*.{cy,spec,stories,test}.[tj]s?(x)",␊ + ".storybook/**",␊ + "**/demo/**",␊ + "**/docs/**",␊ + "**/fixtures/**",␊ + "scripts/**",␊ + "cypress/**"␊ + ],␊ + "includeTypes": true␊ + }␊ + ],␊ + "import/no-import-module-exports": [␊ + "error",␊ + {␊ + "exceptions": []␊ + }␊ + ],␊ + "import/no-internal-modules": [␊ + "off",␊ + {␊ + "allow": []␊ + }␊ + ],␊ + "import/no-mutable-exports": [␊ + "error"␊ + ],␊ + "import/no-named-as-default": [␊ + "error"␊ + ],␊ + "import/no-named-as-default-member": [␊ + "error"␊ + ],␊ + "import/no-named-default": [␊ + "error"␊ + ],␊ + "import/no-named-export": [␊ + "off"␊ + ],␊ + "import/no-namespace": [␊ + "off"␊ + ],␊ + "import/no-nodejs-modules": [␊ + "off"␊ + ],␊ + "import/no-relative-packages": [␊ + "error"␊ + ],␊ + "import/no-relative-parent-imports": [␊ + "off"␊ + ],␊ + "import/no-restricted-paths": [␊ + "off"␊ + ],␊ + "import/no-self-import": [␊ + "error"␊ + ],␊ + "import/no-unassigned-import": [␊ + "off"␊ + ],␊ + "import/no-unresolved": [␊ + "error",␊ + {␊ + "commonjs": true,␊ + "caseSensitive": true,␊ + "caseSensitiveStrict": false␊ + }␊ + ],␊ + "import/no-unused-modules": [␊ + "off",␊ + {␊ + "ignoreExports": [],␊ + "missingExports": true,␊ + "unusedExports": true␊ + }␊ + ],␊ + "import/no-useless-path-segments": [␊ + "error",␊ + {␊ + "commonjs": true␊ + }␊ + ],␊ + "import/no-webpack-loader-syntax": [␊ + "error"␊ + ],␊ + "import/order": [␊ + "error",␊ + {␊ + "groups": [␊ + [␊ + "builtin",␊ + "external",␊ + "internal"␊ + ]␊ + ],␊ + "distinctGroup": true,␊ + "named": false,␊ + "warnOnUnassignedImports": false␊ + }␊ + ],␊ + "import/prefer-default-export": [␊ + "off"␊ + ],␊ + "import/unambiguous": [␊ + "off"␊ + ],␊ + "indent": [␊ + "off",␊ + 2,␊ + {␊ + "SwitchCase": 1,␊ + "VariableDeclarator": 1,␊ + "outerIIFEBody": 1,␊ + "FunctionDeclaration": {␊ + "parameters": 1,␊ + "body": 1␊ + },␊ + "FunctionExpression": {␊ + "parameters": 1,␊ + "body": 1␊ + },␊ + "CallExpression": {␊ + "arguments": 1␊ + },␊ + "ArrayExpression": 1,␊ + "ObjectExpression": 1,␊ + "ImportDeclaration": 1,␊ + "flatTernaryExpressions": false,␊ + "ignoredNodes": [␊ + "JSXElement",␊ + "JSXElement > *",␊ + "JSXAttribute",␊ + "JSXIdentifier",␊ + "JSXNamespacedName",␊ + "JSXMemberExpression",␊ + "JSXSpreadAttribute",␊ + "JSXExpressionContainer",␊ + "JSXOpeningElement",␊ + "JSXClosingElement",␊ + "JSXFragment",␊ + "JSXOpeningFragment",␊ + "JSXClosingFragment",␊ + "JSXText",␊ + "JSXEmptyExpression",␊ + "JSXSpreadChild"␊ + ],␊ + "ignoreComments": false,␊ + "offsetTernaryExpressions": false␊ + }␊ + ],␊ + "indent-legacy": [␊ + "off"␊ + ],␊ + "init-declarations": [␊ + "off"␊ + ],␊ + "jest/expect-expect": [␊ + "warn"␊ + ],␊ + "jest/no-alias-methods": [␊ + "error"␊ + ],␊ + "jest/no-commented-out-tests": [␊ + "warn"␊ + ],␊ + "jest/no-conditional-expect": [␊ + "error"␊ + ],␊ + "jest/no-deprecated-functions": [␊ + "error"␊ + ],␊ + "jest/no-disabled-tests": [␊ + "warn"␊ + ],␊ + "jest/no-done-callback": [␊ + "error"␊ + ],␊ + "jest/no-export": [␊ + "error"␊ + ],␊ + "jest/no-focused-tests": [␊ + "error"␊ + ],␊ + "jest/no-identical-title": [␊ + "error"␊ + ],␊ + "jest/no-interpolation-in-snapshots": [␊ + "error"␊ + ],␊ + "jest/no-jasmine-globals": [␊ + "error"␊ + ],␊ + "jest/no-mocks-import": [␊ + "error"␊ + ],␊ + "jest/no-standalone-expect": [␊ + "error"␊ + ],␊ + "jest/no-test-prefixes": [␊ + "error"␊ + ],␊ + "jest/valid-describe-callback": [␊ + "error"␊ + ],␊ + "jest/valid-expect": [␊ + "error"␊ + ],␊ + "jest/valid-expect-in-promise": [␊ + "error"␊ + ],␊ + "jest/valid-title": [␊ + "error"␊ + ],␊ + "jsx-a11y/accessible-emoji": [␊ + "off"␊ + ],␊ + "jsx-a11y/alt-text": [␊ + "error",␊ + {␊ + "elements": [␊ + "img",␊ + "object",␊ + "area",␊ + "input[type=\\"image\\"]"␊ + ],␊ + "img": [],␊ + "object": [],␊ + "area": [],␊ + "input[type=\\"image\\"]": []␊ + }␊ + ],␊ + "jsx-a11y/anchor-has-content": [␊ + "error",␊ + {␊ + "components": []␊ + }␊ + ],␊ + "jsx-a11y/anchor-is-valid": [␊ + "error",␊ + {␊ + "components": [␊ + "Link"␊ + ],␊ + "specialLink": [␊ + "to"␊ + ],␊ + "aspects": [␊ + "noHref",␊ + "invalidHref",␊ + "preferButton"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/aria-activedescendant-has-tabindex": [␊ + "error"␊ + ],␊ + "jsx-a11y/aria-props": [␊ + "error"␊ + ],␊ + "jsx-a11y/aria-proptypes": [␊ + "error"␊ + ],␊ + "jsx-a11y/aria-role": [␊ + "error",␊ + {␊ + "ignoreNonDOM": false␊ + }␊ + ],␊ + "jsx-a11y/aria-unsupported-elements": [␊ + "error"␊ + ],␊ + "jsx-a11y/autocomplete-valid": [␊ + "off",␊ + {␊ + "inputComponents": []␊ + }␊ + ],␊ + "jsx-a11y/click-events-have-key-events": [␊ + "error"␊ + ],␊ + "jsx-a11y/control-has-associated-label": [␊ + "error",␊ + {␊ + "labelAttributes": [␊ + "label"␊ + ],␊ + "controlComponents": [],␊ + "ignoreElements": [␊ + "audio",␊ + "canvas",␊ + "embed",␊ + "input",␊ + "textarea",␊ + "tr",␊ + "video"␊ + ],␊ + "ignoreRoles": [␊ + "grid",␊ + "listbox",␊ + "menu",␊ + "menubar",␊ + "radiogroup",␊ + "row",␊ + "tablist",␊ + "toolbar",␊ + "tree",␊ + "treegrid"␊ + ],␊ + "depth": 5␊ + }␊ + ],␊ + "jsx-a11y/heading-has-content": [␊ + "error",␊ + {␊ + "components": [␊ + ""␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/html-has-lang": [␊ + "error"␊ + ],␊ + "jsx-a11y/iframe-has-title": [␊ + "error"␊ + ],␊ + "jsx-a11y/img-redundant-alt": [␊ + "error"␊ + ],␊ + "jsx-a11y/interactive-supports-focus": [␊ + "error"␊ + ],␊ + "jsx-a11y/label-has-associated-control": [␊ + "error",␊ + {␊ + "assert": "either"␊ + }␊ + ],␊ + "jsx-a11y/label-has-for": [␊ + "off",␊ + {␊ + "components": [],␊ + "required": {␊ + "every": [␊ + "nesting",␊ + "id"␊ + ]␊ + },␊ + "allowChildren": false␊ + }␊ + ],␊ + "jsx-a11y/lang": [␊ + "error"␊ + ],␊ + "jsx-a11y/media-has-caption": [␊ + "error",␊ + {␊ + "audio": [],␊ + "video": [],␊ + "track": []␊ + }␊ + ],␊ + "jsx-a11y/mouse-events-have-key-events": [␊ + "error"␊ + ],␊ + "jsx-a11y/no-access-key": [␊ + "error"␊ + ],␊ + "jsx-a11y/no-autofocus": [␊ + "error",␊ + {␊ + "ignoreNonDOM": true␊ + }␊ + ],␊ + "jsx-a11y/no-distracting-elements": [␊ + "error",␊ + {␊ + "elements": [␊ + "marquee",␊ + "blink"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/no-interactive-element-to-noninteractive-role": [␊ + "error",␊ + {␊ + "tr": [␊ + "none",␊ + "presentation"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/no-noninteractive-element-interactions": [␊ + "error",␊ + {␊ + "handlers": [␊ + "onClick",␊ + "onMouseDown",␊ + "onMouseUp",␊ + "onKeyPress",␊ + "onKeyDown",␊ + "onKeyUp"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/no-noninteractive-element-to-interactive-role": [␊ + "error",␊ + {␊ + "ul": [␊ + "listbox",␊ + "menu",␊ + "menubar",␊ + "radiogroup",␊ + "tablist",␊ + "tree",␊ + "treegrid"␊ + ],␊ + "ol": [␊ + "listbox",␊ + "menu",␊ + "menubar",␊ + "radiogroup",␊ + "tablist",␊ + "tree",␊ + "treegrid"␊ + ],␊ + "li": [␊ + "menuitem",␊ + "option",␊ + "row",␊ + "tab",␊ + "treeitem"␊ + ],␊ + "table": [␊ + "grid"␊ + ],␊ + "td": [␊ + "gridcell"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/no-noninteractive-tabindex": [␊ + "error",␊ + {␊ + "tags": [],␊ + "roles": [␊ + "tabpanel"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/no-onchange": [␊ + "off"␊ + ],␊ + "jsx-a11y/no-redundant-roles": [␊ + "error"␊ + ],␊ + "jsx-a11y/no-static-element-interactions": [␊ + "error",␊ + {␊ + "handlers": [␊ + "onClick",␊ + "onMouseDown",␊ + "onMouseUp",␊ + "onKeyPress",␊ + "onKeyDown",␊ + "onKeyUp"␊ + ]␊ + }␊ + ],␊ + "jsx-a11y/role-has-required-aria-props": [␊ + "error"␊ + ],␊ + "jsx-a11y/role-supports-aria-props": [␊ + "error"␊ + ],␊ + "jsx-a11y/scope": [␊ + "error"␊ + ],␊ + "jsx-a11y/tabindex-no-positive": [␊ + "error"␊ + ],␊ + "jsx-quotes": [␊ + "off",␊ + "prefer-double"␊ + ],␊ + "key-spacing": [␊ + "off",␊ + {␊ + "beforeColon": false,␊ + "afterColon": true␊ + }␊ + ],␊ + "keyword-spacing": [␊ + "off",␊ + {␊ + "before": true,␊ + "after": true,␊ + "overrides": {␊ + "return": {␊ + "after": true␊ + },␊ + "throw": {␊ + "after": true␊ + },␊ + "case": {␊ + "after": true␊ + }␊ + }␊ + }␊ + ],␊ + "line-comment-position": [␊ + "off",␊ + {␊ + "position": "above",␊ + "ignorePattern": "",␊ + "applyDefaultPatterns": true␊ + }␊ + ],␊ + "linebreak-style": [␊ + "off",␊ + "unix"␊ + ],␊ + "lines-around-comment": [␊ + 0␊ + ],␊ + "lines-around-directive": [␊ + "error",␊ + {␊ + "before": "always",␊ + "after": "always"␊ + }␊ + ],␊ + "lines-between-class-members": [␊ + "error",␊ + "always",␊ + {␊ + "exceptAfterSingleLine": false␊ + }␊ + ],␊ + "max-classes-per-file": [␊ + "error",␊ + 1␊ + ],␊ + "max-depth": [␊ + "off",␊ + 4␊ + ],␊ + "max-len": [␊ + 0,␊ + 100,␊ + 2,␊ + {␊ + "ignoreUrls": true,␊ + "ignoreComments": false,␊ + "ignoreRegExpLiterals": true,␊ + "ignoreStrings": true,␊ + "ignoreTemplateLiterals": true␊ + }␊ + ],␊ + "max-lines": [␊ + "off",␊ + {␊ + "max": 300,␊ + "skipBlankLines": true,␊ + "skipComments": true␊ + }␊ + ],␊ + "max-lines-per-function": [␊ + "off",␊ + {␊ + "max": 50,␊ + "skipBlankLines": true,␊ + "skipComments": true,␊ + "IIFEs": true␊ + }␊ + ],␊ + "max-nested-callbacks": [␊ + "off"␊ + ],␊ + "max-params": [␊ + "off",␊ + 3␊ + ],␊ + "max-statements": [␊ + "off",␊ + 10␊ + ],␊ + "max-statements-per-line": [␊ + "off",␊ + {␊ + "max": 1␊ + }␊ + ],␊ + "multiline-comment-style": [␊ + "off",␊ + "starred-block"␊ + ],␊ + "multiline-ternary": [␊ + "off",␊ + "never"␊ + ],␊ + "new-cap": [␊ + "error",␊ + {␊ + "newIsCap": true,␊ + "newIsCapExceptions": [],␊ + "capIsNew": false,␊ + "capIsNewExceptions": [␊ + "Immutable.Map",␊ + "Immutable.Set",␊ + "Immutable.List"␊ + ],␊ + "properties": true␊ + }␊ + ],␊ + "new-parens": [␊ + "off"␊ + ],␊ + "newline-after-var": [␊ + "off"␊ + ],␊ + "newline-before-return": [␊ + "off"␊ + ],␊ + "newline-per-chained-call": [␊ + "off",␊ + {␊ + "ignoreChainWithDepth": 4␊ + }␊ + ],␊ + "no-alert": [␊ + "warn"␊ + ],␊ + "no-array-constructor": [␊ + "off"␊ + ],␊ + "no-arrow-condition": [␊ + "off"␊ + ],␊ + "no-async-promise-executor": [␊ + "error"␊ + ],␊ + "no-await-in-loop": [␊ + "error"␊ + ],␊ + "no-bitwise": [␊ + "error"␊ + ],␊ + "no-buffer-constructor": [␊ + "error"␊ + ],␊ + "no-caller": [␊ + "error"␊ + ],␊ + "no-case-declarations": [␊ + "error"␊ + ],␊ + "no-catch-shadow": [␊ + "off"␊ + ],␊ + "no-class-assign": [␊ + "error"␊ + ],␊ + "no-comma-dangle": [␊ + "off"␊ + ],␊ + "no-compare-neg-zero": [␊ + "error"␊ + ],␊ + "no-cond-assign": [␊ + "error",␊ + "always"␊ + ],␊ + "no-confusing-arrow": [␊ + 0,␊ + {␊ + "allowParens": true,␊ + "onlyOneSimpleParam": false␊ + }␊ + ],␊ + "no-console": [␊ + "warn",␊ + {␊ + "allow": [␊ + "warn",␊ + "error",␊ + "trace",␊ + "time"␊ + ]␊ + }␊ + ],␊ + "no-const-assign": [␊ + "off"␊ + ],␊ + "no-constant-condition": [␊ + "warn"␊ + ],␊ + "no-constructor-return": [␊ + "error"␊ + ],␊ + "no-continue": [␊ + "error"␊ + ],␊ + "no-control-regex": [␊ + "error"␊ + ],␊ + "no-debugger": [␊ + "error"␊ + ],␊ + "no-delete-var": [␊ + "error"␊ + ],␊ + "no-div-regex": [␊ + "off"␊ + ],␊ + "no-dupe-args": [␊ + "off"␊ + ],␊ + "no-dupe-class-members": [␊ + "off"␊ + ],␊ + "no-dupe-else-if": [␊ + "error"␊ + ],␊ + "no-dupe-keys": [␊ + "off"␊ + ],␊ + "no-duplicate-case": [␊ + "error"␊ + ],␊ + "no-duplicate-imports": [␊ + "off"␊ + ],␊ + "no-else-return": [␊ + "error",␊ + {␊ + "allowElseIf": false␊ + }␊ + ],␊ + "no-empty": [␊ + "error"␊ + ],␊ + "no-empty-character-class": [␊ + "error"␊ + ],␊ + "no-empty-function": [␊ + "off",␊ + {␊ + "allow": [␊ + "arrowFunctions",␊ + "functions",␊ + "methods"␊ + ]␊ + }␊ + ],␊ + "no-empty-pattern": [␊ + "error"␊ + ],␊ + "no-eq-null": [␊ + "off"␊ + ],␊ + "no-eval": [␊ + "error"␊ + ],␊ + "no-ex-assign": [␊ + "error"␊ + ],␊ + "no-extend-native": [␊ + "error"␊ + ],␊ + "no-extra-bind": [␊ + "error"␊ + ],␊ + "no-extra-boolean-cast": [␊ + "error"␊ + ],␊ + "no-extra-label": [␊ + "error"␊ + ],␊ + "no-extra-parens": [␊ + "off",␊ + "all",␊ + {␊ + "conditionalAssign": true,␊ + "nestedBinaryExpressions": false,␊ + "returnAssign": false,␊ + "ignoreJSX": "all",␊ + "enforceForArrowConditionals": false␊ + }␊ + ],␊ + "no-extra-semi": [␊ + "off"␊ + ],␊ + "no-fallthrough": [␊ + "error"␊ + ],␊ + "no-floating-decimal": [␊ + "off"␊ + ],␊ + "no-func-assign": [␊ + "off"␊ + ],␊ + "no-global-assign": [␊ + "error",␊ + {␊ + "exceptions": []␊ + }␊ + ],␊ + "no-implicit-coercion": [␊ + "off",␊ + {␊ + "boolean": false,␊ + "number": true,␊ + "string": true,␊ + "allow": []␊ + }␊ + ],␊ + "no-implicit-globals": [␊ + "off"␊ + ],␊ + "no-implied-eval": [␊ + "error"␊ + ],␊ + "no-import-assign": [␊ + "off"␊ + ],␊ + "no-inline-comments": [␊ + "off"␊ + ],␊ + "no-inner-declarations": [␊ + "error"␊ + ],␊ + "no-invalid-regexp": [␊ + "error"␊ + ],␊ + "no-invalid-this": [␊ + "off"␊ + ],␊ + "no-irregular-whitespace": [␊ + "error"␊ + ],␊ + "no-iterator": [␊ + "error"␊ + ],␊ + "no-label-var": [␊ + "error"␊ + ],␊ + "no-labels": [␊ + "error",␊ + {␊ + "allowLoop": false,␊ + "allowSwitch": false␊ + }␊ + ],␊ + "no-lone-blocks": [␊ + "error"␊ + ],␊ + "no-lonely-if": [␊ + "error"␊ + ],␊ + "no-loop-func": [␊ + "error"␊ + ],␊ + "no-loss-of-precision": [␊ + "off"␊ + ],␊ + "no-magic-numbers": [␊ + "off",␊ + {␊ + "ignore": [],␊ + "ignoreArrayIndexes": true,␊ + "enforceConst": true,␊ + "detectObjects": false␊ + }␊ + ],␊ + "no-misleading-character-class": [␊ + "error"␊ + ],␊ + "no-mixed-operators": [␊ + 0,␊ + {␊ + "groups": [␊ + [␊ + "%",␊ + "**"␊ + ],␊ + [␊ + "%",␊ + "+"␊ + ],␊ + [␊ + "%",␊ + "-"␊ + ],␊ + [␊ + "%",␊ + "*"␊ + ],␊ + [␊ + "%",␊ + "/"␊ + ],␊ + [␊ + "/",␊ + "*"␊ + ],␊ + [␊ + "&",␊ + "|",␊ + "<<",␊ + ">>",␊ + ">>>"␊ + ],␊ + [␊ + "==",␊ + "!=",␊ + "===",␊ + "!=="␊ + ],␊ + [␊ + "&&",␊ + "||"␊ + ]␊ + ],␊ + "allowSamePrecedence": false␊ + }␊ + ],␊ + "no-mixed-requires": [␊ + "off",␊ + false␊ + ],␊ + "no-mixed-spaces-and-tabs": [␊ + "off"␊ + ],␊ + "no-multi-assign": [␊ + "error"␊ + ],␊ + "no-multi-spaces": [␊ + "off",␊ + {␊ + "ignoreEOLComments": false␊ + }␊ + ],␊ + "no-multi-str": [␊ + "error"␊ + ],␊ + "no-multiple-empty-lines": [␊ + "off",␊ + {␊ + "max": 1,␊ + "maxBOF": 0,␊ + "maxEOF": 0␊ + }␊ + ],␊ + "no-native-reassign": [␊ + "off"␊ + ],␊ + "no-negated-condition": [␊ + "off"␊ + ],␊ + "no-negated-in-lhs": [␊ + "off"␊ + ],␊ + "no-nested-ternary": [␊ + "error"␊ + ],␊ + "no-new": [␊ + "error"␊ + ],␊ + "no-new-func": [␊ + "error"␊ + ],␊ + "no-new-object": [␊ + "error"␊ + ],␊ + "no-new-require": [␊ + "error"␊ + ],␊ + "no-new-symbol": [␊ + "off"␊ + ],␊ + "no-new-wrappers": [␊ + "error"␊ + ],␊ + "no-nonoctal-decimal-escape": [␊ + "error"␊ + ],␊ + "no-obj-calls": [␊ + "off"␊ + ],␊ + "no-octal": [␊ + "error"␊ + ],␊ + "no-octal-escape": [␊ + "error"␊ + ],␊ + "no-param-reassign": [␊ + "off",␊ + {␊ + "props": true,␊ + "ignorePropertyModificationsFor": [␊ + "acc",␊ + "accumulator",␊ + "e",␊ + "ctx",␊ + "context",␊ + "req",␊ + "request",␊ + "res",␊ + "response",␊ + "$scope",␊ + "staticContext"␊ + ]␊ + }␊ + ],␊ + "no-path-concat": [␊ + "error"␊ + ],␊ + "no-plusplus": [␊ + "off"␊ + ],␊ + "no-process-env": [␊ + "off"␊ + ],␊ + "no-process-exit": [␊ + "off"␊ + ],␊ + "no-promise-executor-return": [␊ + "error"␊ + ],␊ + "no-proto": [␊ + "error"␊ + ],␊ + "no-prototype-builtins": [␊ + "error"␊ + ],␊ + "no-redeclare": [␊ + "off"␊ + ],␊ + "no-regex-spaces": [␊ + "error"␊ + ],␊ + "no-reserved-keys": [␊ + "off"␊ + ],␊ + "no-restricted-exports": [␊ + "off",␊ + {␊ + "restrictedNamedExports": [␊ + "default",␊ + "then"␊ + ]␊ + }␊ + ],␊ + "no-restricted-globals": [␊ + "error",␊ + {␊ + "name": "isFinite",␊ + "message": "Use Number.isFinite instead https://github.com/airbnb/javascript#standard-library--isfinite"␊ + },␊ + {␊ + "name": "isNaN",␊ + "message": "Use Number.isNaN instead https://github.com/airbnb/javascript#standard-library--isnan"␊ + },␊ + "addEventListener",␊ + "blur",␊ + "close",␊ + "closed",␊ + "confirm",␊ + "defaultStatus",␊ + "defaultstatus",␊ + "event",␊ + "external",␊ + "find",␊ + "focus",␊ + "frameElement",␊ + "frames",␊ + "history",␊ + "innerHeight",␊ + "innerWidth",␊ + "length",␊ + "location",␊ + "locationbar",␊ + "menubar",␊ + "moveBy",␊ + "moveTo",␊ + "name",␊ + "onblur",␊ + "onerror",␊ + "onfocus",␊ + "onload",␊ + "onresize",␊ + "onunload",␊ + "open",␊ + "opener",␊ + "opera",␊ + "outerHeight",␊ + "outerWidth",␊ + "pageXOffset",␊ + "pageYOffset",␊ + "parent",␊ + "print",␊ + "removeEventListener",␊ + "resizeBy",␊ + "resizeTo",␊ + "screen",␊ + "screenLeft",␊ + "screenTop",␊ + "screenX",␊ + "screenY",␊ + "scroll",␊ + "scrollbars",␊ + "scrollBy",␊ + "scrollTo",␊ + "scrollX",␊ + "scrollY",␊ + "self",␊ + "status",␊ + "statusbar",␊ + "stop",␊ + "toolbar",␊ + "top"␊ + ],␊ + "no-restricted-imports": [␊ + "off",␊ + {␊ + "paths": [],␊ + "patterns": []␊ + }␊ + ],␊ + "no-restricted-modules": [␊ + "off"␊ + ],␊ + "no-restricted-properties": [␊ + "error",␊ + {␊ + "object": "arguments",␊ + "property": "callee",␊ + "message": "arguments.callee is deprecated"␊ + },␊ + {␊ + "object": "global",␊ + "property": "isFinite",␊ + "message": "Please use Number.isFinite instead"␊ + },␊ + {␊ + "object": "self",␊ + "property": "isFinite",␊ + "message": "Please use Number.isFinite instead"␊ + },␊ + {␊ + "object": "window",␊ + "property": "isFinite",␊ + "message": "Please use Number.isFinite instead"␊ + },␊ + {␊ + "object": "global",␊ + "property": "isNaN",␊ + "message": "Please use Number.isNaN instead"␊ + },␊ + {␊ + "object": "self",␊ + "property": "isNaN",␊ + "message": "Please use Number.isNaN instead"␊ + },␊ + {␊ + "object": "window",␊ + "property": "isNaN",␊ + "message": "Please use Number.isNaN instead"␊ + },␊ + {␊ + "property": "__defineGetter__",␊ + "message": "Please use Object.defineProperty instead."␊ + },␊ + {␊ + "property": "__defineSetter__",␊ + "message": "Please use Object.defineProperty instead."␊ + },␊ + {␊ + "object": "Math",␊ + "property": "pow",␊ + "message": "Use the exponentiation operator (**) instead."␊ + }␊ + ],␊ + "no-restricted-syntax": [␊ + "error",␊ + {␊ + "selector": "ForInStatement",␊ + "message": "for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array."␊ + },␊ + {␊ + "selector": "ForOfStatement",␊ + "message": "iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations."␊ + },␊ + {␊ + "selector": "LabeledStatement",␊ + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand."␊ + },␊ + {␊ + "selector": "WithStatement",␊ + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize."␊ + }␊ + ],␊ + "no-return-assign": [␊ + "error",␊ + "always"␊ + ],␊ + "no-return-await": [␊ + "error"␊ + ],␊ + "no-script-url": [␊ + "error"␊ + ],␊ + "no-self-assign": [␊ + "error",␊ + {␊ + "props": true␊ + }␊ + ],␊ + "no-self-compare": [␊ + "error"␊ + ],␊ + "no-sequences": [␊ + "error"␊ + ],␊ + "no-setter-return": [␊ + "off"␊ + ],␊ + "no-shadow": [␊ + "off"␊ + ],␊ + "no-shadow-restricted-names": [␊ + "error"␊ + ],␊ + "no-space-before-semi": [␊ + "off"␊ + ],␊ + "no-spaced-func": [␊ + "off"␊ + ],␊ + "no-sparse-arrays": [␊ + "error"␊ + ],␊ + "no-sync": [␊ + "off"␊ + ],␊ + "no-tabs": [␊ + 0␊ + ],␊ + "no-template-curly-in-string": [␊ + "error"␊ + ],␊ + "no-ternary": [␊ + "off"␊ + ],␊ + "no-this-before-super": [␊ + "off"␊ + ],␊ + "no-throw-literal": [␊ + "error"␊ + ],␊ + "no-trailing-spaces": [␊ + "off",␊ + {␊ + "skipBlankLines": false,␊ + "ignoreComments": false␊ + }␊ + ],␊ + "no-undef": [␊ + "off"␊ + ],␊ + "no-undef-init": [␊ + "error"␊ + ],␊ + "no-undefined": [␊ + "off"␊ + ],␊ + "no-underscore-dangle": [␊ + "error",␊ + {␊ + "allow": [],␊ + "allowAfterThis": false,␊ + "allowAfterSuper": false,␊ + "enforceInMethodNames": true,␊ + "allowAfterThisConstructor": false,␊ + "allowFunctionParams": true,␊ + "enforceInClassFields": false,␊ + "allowInArrayDestructuring": true,␊ + "allowInObjectDestructuring": true␊ + }␊ + ],␊ + "no-unexpected-multiline": [␊ + 0␊ + ],␊ + "no-unmodified-loop-condition": [␊ + "off"␊ + ],␊ + "no-unneeded-ternary": [␊ + "error",␊ + {␊ + "defaultAssignment": false␊ + }␊ + ],␊ + "no-unreachable": [␊ + "off"␊ + ],␊ + "no-unreachable-loop": [␊ + "error",␊ + {␊ + "ignore": []␊ + }␊ + ],␊ + "no-unsafe-finally": [␊ + "error"␊ + ],␊ + "no-unsafe-negation": [␊ + "off"␊ + ],␊ + "no-unsafe-optional-chaining": [␊ + "error",␊ + {␊ + "disallowArithmeticOperators": true␊ + }␊ + ],␊ + "no-unused-expressions": [␊ + "off",␊ + {␊ + "allowShortCircuit": false,␊ + "allowTernary": false,␊ + "allowTaggedTemplates": false,␊ + "enforceForJSX": false␊ + }␊ + ],␊ + "no-unused-labels": [␊ + "error"␊ + ],␊ + "no-unused-private-class-members": [␊ + "off"␊ + ],␊ + "no-unused-vars": [␊ + "off",␊ + {␊ + "vars": "all",␊ + "args": "after-used",␊ + "ignoreRestSiblings": true␊ + }␊ + ],␊ + "no-use-before-define": [␊ + "off",␊ + {␊ + "functions": false,␊ + "classes": true,␊ + "variables": true␊ + }␊ + ],␊ + "no-useless-backreference": [␊ + "error"␊ + ],␊ + "no-useless-call": [␊ + "off"␊ + ],␊ + "no-useless-catch": [␊ + "error"␊ + ],␊ + "no-useless-computed-key": [␊ + "error"␊ + ],␊ + "no-useless-concat": [␊ + "error"␊ + ],␊ + "no-useless-constructor": [␊ + "error"␊ + ],␊ + "no-useless-escape": [␊ + "error"␊ + ],␊ + "no-useless-rename": [␊ + "error",␊ + {␊ + "ignoreDestructuring": false,␊ + "ignoreImport": false,␊ + "ignoreExport": false␊ + }␊ + ],␊ + "no-useless-return": [␊ + "error"␊ + ],␊ + "no-var": [␊ + "error"␊ + ],␊ + "no-void": [␊ + "error"␊ + ],␊ + "no-warning-comments": [␊ + "warn",␊ + {␊ + "terms": [␊ + "FIXME",␊ + "TODO",␊ + "HACK"␊ + ],␊ + "location": "anywhere"␊ + }␊ + ],␊ + "no-whitespace-before-property": [␊ + "off"␊ + ],␊ + "no-with": [␊ + "error"␊ + ],␊ + "no-wrap-func": [␊ + "off"␊ + ],␊ + "nonblock-statement-body-position": [␊ + "off",␊ + "beside",␊ + {␊ + "overrides": {}␊ + }␊ + ],␊ + "object-curly-newline": [␊ + "off",␊ + {␊ + "ObjectExpression": {␊ + "minProperties": 4,␊ + "multiline": true,␊ + "consistent": true␊ + },␊ + "ObjectPattern": {␊ + "minProperties": 4,␊ + "multiline": true,␊ + "consistent": true␊ + },␊ + "ImportDeclaration": {␊ + "minProperties": 4,␊ + "multiline": true,␊ + "consistent": true␊ + },␊ + "ExportDeclaration": {␊ + "minProperties": 4,␊ + "multiline": true,␊ + "consistent": true␊ + }␊ + }␊ + ],␊ + "object-curly-spacing": [␊ + "off",␊ + "always"␊ + ],␊ + "object-property-newline": [␊ + "off",␊ + {␊ + "allowAllPropertiesOnSameLine": true,␊ + "allowMultiplePropertiesPerLine": false␊ + }␊ + ],␊ + "object-shorthand": [␊ + "error",␊ + "always",␊ + {␊ + "ignoreConstructors": false,␊ + "avoidQuotes": true␊ + }␊ + ],␊ + "one-var": [␊ + "error",␊ + "never"␊ + ],␊ + "one-var-declaration-per-line": [␊ + "off",␊ + "always"␊ + ],␊ + "operator-assignment": [␊ + "error",␊ + "always"␊ + ],␊ + "operator-linebreak": [␊ + "off",␊ + "before",␊ + {␊ + "overrides": {␊ + "=": "none"␊ + }␊ + }␊ + ],␊ + "padded-blocks": [␊ + "off",␊ + {␊ + "blocks": "never",␊ + "classes": "never",␊ + "switches": "never"␊ + },␊ + {␊ + "allowSingleLineBlocks": true␊ + }␊ + ],␊ + "padding-line-between-statements": [␊ + "off"␊ + ],␊ + "prefer-arrow-callback": [␊ + "off",␊ + {␊ + "allowNamedFunctions": false,␊ + "allowUnboundThis": true␊ + }␊ + ],␊ + "prefer-const": [␊ + "error",␊ + {␊ + "destructuring": "any",␊ + "ignoreReadBeforeAssign": true␊ + }␊ + ],␊ + "prefer-destructuring": [␊ + "off",␊ + {␊ + "VariableDeclarator": {␊ + "array": false,␊ + "object": true␊ + },␊ + "AssignmentExpression": {␊ + "array": true,␊ + "object": false␊ + }␊ + },␊ + {␊ + "enforceForRenamedProperties": false␊ + }␊ + ],␊ + "prefer-exponentiation-operator": [␊ + "error"␊ + ],␊ + "prefer-named-capture-group": [␊ + "off"␊ + ],␊ + "prefer-numeric-literals": [␊ + "error"␊ + ],␊ + "prefer-object-spread": [␊ + "error"␊ + ],␊ + "prefer-promise-reject-errors": [␊ + "error",␊ + {␊ + "allowEmptyReject": true␊ + }␊ + ],␊ + "prefer-reflect": [␊ + "off"␊ + ],␊ + "prefer-regex-literals": [␊ + "error",␊ + {␊ + "disallowRedundantWrapping": true␊ + }␊ + ],␊ + "prefer-rest-params": [␊ + "error"␊ + ],␊ + "prefer-spread": [␊ + "error"␊ + ],␊ + "prefer-template": [␊ + "error"␊ + ],␊ + "prettier/prettier": [␊ + "warn",␊ + {␊ + "printWidth": 120,␊ + "singleQuote": true,␊ + "semi": false,␊ + "trailingComma": "es5"␊ + }␊ + ],␊ + "promise/always-return": [␊ + "warn"␊ + ],␊ + "promise/catch-or-return": [␊ + "warn",␊ + {␊ + "allowFinally": true␊ + }␊ + ],␊ + "promise/no-callback-in-promise": [␊ + "warn"␊ + ],␊ + "promise/no-nesting": [␊ + "warn"␊ + ],␊ + "promise/no-new-statics": [␊ + "warn"␊ + ],␊ + "promise/no-promise-in-callback": [␊ + "warn"␊ + ],␊ + "promise/no-return-in-finally": [␊ + "warn"␊ + ],␊ + "promise/no-return-wrap": [␊ + "warn"␊ + ],␊ + "promise/param-names": [␊ + "warn"␊ + ],␊ + "promise/valid-params": [␊ + "warn"␊ + ],␊ + "quote-props": [␊ + "off",␊ + "as-needed",␊ + {␊ + "keywords": false,␊ + "unnecessary": true,␊ + "numbers": false␊ + }␊ + ],␊ + "quotes": [␊ + 0,␊ + "single",␊ + {␊ + "avoidEscape": true␊ + }␊ + ],␊ + "radix": [␊ + "error"␊ + ],␊ + "react-hooks/exhaustive-deps": [␊ + "warn"␊ + ],␊ + "react-hooks/rules-of-hooks": [␊ + "error"␊ + ],␊ + "react/boolean-prop-naming": [␊ + "off",␊ + {␊ + "propTypeNames": [␊ + "bool",␊ + "mutuallyExclusiveTrueProps"␊ + ],␊ + "rule": "^(is|has)[A-Z]([A-Za-z0-9]?)+",␊ + "message": ""␊ + }␊ + ],␊ + "react/button-has-type": [␊ + "error",␊ + {␊ + "button": true,␊ + "submit": true,␊ + "reset": false␊ + }␊ + ],␊ + "react/default-props-match-prop-types": [␊ + "error",␊ + {␊ + "allowRequiredDefaults": false␊ + }␊ + ],␊ + "react/destructuring-assignment": [␊ + "error",␊ + "always"␊ + ],␊ + "react/display-name": [␊ + "off",␊ + {␊ + "ignoreTranspilerName": false␊ + }␊ + ],␊ + "react/forbid-component-props": [␊ + "off",␊ + {␊ + "forbid": []␊ + }␊ + ],␊ + "react/forbid-dom-props": [␊ + "off",␊ + {␊ + "forbid": []␊ + }␊ + ],␊ + "react/forbid-elements": [␊ + "off",␊ + {␊ + "forbid": []␊ + }␊ + ],␊ + "react/forbid-foreign-prop-types": [␊ + "warn",␊ + {␊ + "allowInPropTypes": true␊ + }␊ + ],␊ + "react/forbid-prop-types": [␊ + "error",␊ + {␊ + "forbid": [␊ + "any",␊ + "array",␊ + "object"␊ + ],␊ + "checkContextTypes": true,␊ + "checkChildContextTypes": true␊ + }␊ + ],␊ + "react/function-component-definition": [␊ + "off",␊ + {␊ + "namedComponents": [␊ + "function-declaration",␊ + "function-expression"␊ + ],␊ + "unnamedComponents": "function-expression"␊ + }␊ + ],␊ + "react/jsx-boolean-value": [␊ + "error",␊ + "never",␊ + {␊ + "always": []␊ + }␊ + ],␊ + "react/jsx-child-element-spacing": [␊ + "off"␊ + ],␊ + "react/jsx-closing-bracket-location": [␊ + "off",␊ + "line-aligned"␊ + ],␊ + "react/jsx-closing-tag-location": [␊ + "off"␊ + ],␊ + "react/jsx-curly-brace-presence": [␊ + "error",␊ + {␊ + "props": "never",␊ + "children": "never"␊ + }␊ + ],␊ + "react/jsx-curly-newline": [␊ + "off",␊ + {␊ + "multiline": "consistent",␊ + "singleline": "consistent"␊ + }␊ + ],␊ + "react/jsx-curly-spacing": [␊ + "off",␊ + "never",␊ + {␊ + "allowMultiline": true␊ + }␊ + ],␊ + "react/jsx-equals-spacing": [␊ + "off",␊ + "never"␊ + ],␊ + "react/jsx-filename-extension": [␊ + "off",␊ + {␊ + "extensions": [␊ + ".jsx"␊ + ]␊ + }␊ + ],␊ + "react/jsx-first-prop-new-line": [␊ + "off",␊ + "multiline-multiprop"␊ + ],␊ + "react/jsx-fragments": [␊ + "error",␊ + "syntax"␊ + ],␊ + "react/jsx-handler-names": [␊ + "off",␊ + {␊ + "eventHandlerPrefix": "handle",␊ + "eventHandlerPropPrefix": "on"␊ + }␊ + ],␊ + "react/jsx-indent": [␊ + "off",␊ + 2␊ + ],␊ + "react/jsx-indent-props": [␊ + "off",␊ + 2␊ + ],␊ + "react/jsx-key": [␊ + "off"␊ + ],␊ + "react/jsx-max-depth": [␊ + "off"␊ + ],␊ + "react/jsx-max-props-per-line": [␊ + "off",␊ + {␊ + "maximum": 1,␊ + "when": "multiline"␊ + }␊ + ],␊ + "react/jsx-newline": [␊ + "off"␊ + ],␊ + "react/jsx-no-bind": [␊ + "error",␊ + {␊ + "ignoreRefs": true,␊ + "allowArrowFunctions": true,␊ + "allowFunctions": true,␊ + "allowBind": false,␊ + "ignoreDOMComponents": true␊ + }␊ + ],␊ + "react/jsx-no-comment-textnodes": [␊ + "error"␊ + ],␊ + "react/jsx-no-constructed-context-values": [␊ + "error"␊ + ],␊ + "react/jsx-no-duplicate-props": [␊ + "error",␊ + {␊ + "ignoreCase": true␊ + }␊ + ],␊ + "react/jsx-no-literals": [␊ + "off",␊ + {␊ + "noStrings": true␊ + }␊ + ],␊ + "react/jsx-no-script-url": [␊ + "error",␊ + [␊ + {␊ + "name": "Link",␊ + "props": [␊ + "to"␊ + ]␊ + }␊ + ]␊ + ],␊ + "react/jsx-no-target-blank": [␊ + "error",␊ + {␊ + "enforceDynamicLinks": "always",␊ + "links": true,␊ + "forms": false␊ + }␊ + ],␊ + "react/jsx-no-undef": [␊ + "error"␊ + ],␊ + "react/jsx-no-useless-fragment": [␊ + "error",␊ + {␊ + "allowExpressions": true␊ + }␊ + ],␊ + "react/jsx-one-expression-per-line": [␊ + "off",␊ + {␊ + "allow": "single-child"␊ + }␊ + ],␊ + "react/jsx-pascal-case": [␊ + "error",␊ + {␊ + "allowAllCaps": true,␊ + "ignore": []␊ + }␊ + ],␊ + "react/jsx-props-no-multi-spaces": [␊ + "off"␊ + ],␊ + "react/jsx-props-no-spreading": [␊ + "off",␊ + {␊ + "html": "enforce",␊ + "custom": "enforce",␊ + "explicitSpread": "ignore",␊ + "exceptions": []␊ + }␊ + ],␊ + "react/jsx-sort-default-props": [␊ + "off",␊ + {␊ + "ignoreCase": true␊ + }␊ + ],␊ + "react/jsx-sort-prop-types": [␊ + "off"␊ + ],␊ + "react/jsx-sort-props": [␊ + "off",␊ + {␊ + "ignoreCase": true,␊ + "callbacksLast": false,␊ + "shorthandFirst": false,␊ + "shorthandLast": false,␊ + "noSortAlphabetically": false,␊ + "reservedFirst": true␊ + }␊ + ],␊ + "react/jsx-space-before-closing": [␊ + "off",␊ + "always"␊ + ],␊ + "react/jsx-tag-spacing": [␊ + "off",␊ + {␊ + "closingSlash": "never",␊ + "beforeSelfClosing": "always",␊ + "afterOpening": "never",␊ + "beforeClosing": "never"␊ + }␊ + ],␊ + "react/jsx-uses-react": [␊ + "error"␊ + ],␊ + "react/jsx-uses-vars": [␊ + "error"␊ + ],␊ + "react/jsx-wrap-multilines": [␊ + "off",␊ + {␊ + "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/no-access-state-in-setstate": [␊ + "error"␊ + ],␊ + "react/no-adjacent-inline-elements": [␊ + "off"␊ + ],␊ + "react/no-array-index-key": [␊ + "error"␊ + ],␊ + "react/no-arrow-function-lifecycle": [␊ + "error"␊ + ],␊ + "react/no-children-prop": [␊ + "error"␊ + ],␊ + "react/no-danger": [␊ + "warn"␊ + ],␊ + "react/no-danger-with-children": [␊ + "error"␊ + ],␊ + "react/no-deprecated": [␊ + "error"␊ + ],␊ + "react/no-did-mount-set-state": [␊ + "off"␊ + ],␊ + "react/no-did-update-set-state": [␊ + "error"␊ + ],␊ + "react/no-direct-mutation-state": [␊ + "off"␊ + ],␊ + "react/no-find-dom-node": [␊ + "error"␊ + ],␊ + "react/no-invalid-html-attribute": [␊ + "error"␊ + ],␊ + "react/no-is-mounted": [␊ + "error"␊ + ],␊ + "react/no-multi-comp": [␊ + "off"␊ + ],␊ + "react/no-namespace": [␊ + "error"␊ + ],␊ + "react/no-redundant-should-component-update": [␊ + "error"␊ + ],␊ + "react/no-render-return-value": [␊ + "error"␊ + ],␊ + "react/no-set-state": [␊ + "off"␊ + ],␊ + "react/no-string-refs": [␊ + "error"␊ + ],␊ + "react/no-this-in-sfc": [␊ + "error"␊ + ],␊ + "react/no-typos": [␊ + "error"␊ + ],␊ + "react/no-unescaped-entities": [␊ + "error"␊ + ],␊ + "react/no-unknown-property": [␊ + "off"␊ + ],␊ + "react/no-unsafe": [␊ + "off"␊ + ],␊ + "react/no-unstable-nested-components": [␊ + "error"␊ + ],␊ + "react/no-unused-class-component-methods": [␊ + "error"␊ + ],␊ + "react/no-unused-prop-types": [␊ + "error",␊ + {␊ + "customValidators": [],␊ + "skipShapeProps": true␊ + }␊ + ],␊ + "react/no-unused-state": [␊ + "error"␊ + ],␊ + "react/no-will-update-set-state": [␊ + "error"␊ + ],␊ + "react/prefer-es6-class": [␊ + "error",␊ + "always"␊ + ],␊ + "react/prefer-exact-props": [␊ + "error"␊ + ],␊ + "react/prefer-read-only-props": [␊ + "off"␊ + ],␊ + "react/prefer-stateless-function": [␊ + "error",␊ + {␊ + "ignorePureComponents": true␊ + }␊ + ],␊ + "react/prop-types": [␊ + "off",␊ + {␊ + "ignore": [],␊ + "customValidators": [],␊ + "skipUndeclared": false␊ + }␊ + ],␊ + "react/react-in-jsx-scope": [␊ + "error"␊ + ],␊ + "react/require-default-props": [␊ + "off",␊ + {␊ + "forbidDefaultForRequired": true␊ + }␊ + ],␊ + "react/require-optimization": [␊ + "off",␊ + {␊ + "allowDecorators": []␊ + }␊ + ],␊ + "react/require-render-return": [␊ + "error"␊ + ],␊ + "react/self-closing-comp": [␊ + "error"␊ + ],␊ + "react/sort-comp": [␊ + "error",␊ + {␊ + "order": [␊ + "static-variables",␊ + "static-methods",␊ + "instance-variables",␊ + "lifecycle",␊ + "/^handle.+$/",␊ + "/^on.+$/",␊ + "getters",␊ + "setters",␊ + "/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/",␊ + "instance-methods",␊ + "everything-else",␊ + "rendering"␊ + ],␊ + "groups": {␊ + "lifecycle": [␊ + "displayName",␊ + "propTypes",␊ + "contextTypes",␊ + "childContextTypes",␊ + "mixins",␊ + "statics",␊ + "defaultProps",␊ + "constructor",␊ + "getDefaultProps",␊ + "getInitialState",␊ + "state",␊ + "getChildContext",␊ + "getDerivedStateFromProps",␊ + "componentWillMount",␊ + "UNSAFE_componentWillMount",␊ + "componentDidMount",␊ + "componentWillReceiveProps",␊ + "UNSAFE_componentWillReceiveProps",␊ + "shouldComponentUpdate",␊ + "componentWillUpdate",␊ + "UNSAFE_componentWillUpdate",␊ + "getSnapshotBeforeUpdate",␊ + "componentDidUpdate",␊ + "componentDidCatch",␊ + "componentWillUnmount"␊ + ],␊ + "rendering": [␊ + "/^render.+$/",␊ + "render"␊ + ]␊ + }␊ + }␊ + ],␊ + "react/sort-prop-types": [␊ + "off",␊ + {␊ + "ignoreCase": true,␊ + "callbacksLast": false,␊ + "requiredFirst": false,␊ + "sortShapeProp": true␊ + }␊ + ],␊ + "react/state-in-constructor": [␊ + "error",␊ + "always"␊ + ],␊ + "react/static-property-placement": [␊ + "error",␊ + "property assignment"␊ + ],␊ + "react/style-prop-object": [␊ + "error"␊ + ],␊ + "react/void-dom-elements-no-children": [␊ + "error"␊ + ],␊ + "require-atomic-updates": [␊ + "off"␊ + ],␊ + "require-await": [␊ + "off"␊ + ],␊ + "require-jsdoc": [␊ + "off"␊ + ],␊ + "require-unicode-regexp": [␊ + "off"␊ + ],␊ + "require-yield": [␊ + "error"␊ + ],␊ + "rest-spread-spacing": [␊ + "off",␊ + "never"␊ + ],␊ + "semi": [␊ + "off",␊ + "always"␊ + ],␊ + "semi-spacing": [␊ + "off",␊ + {␊ + "before": false,␊ + "after": true␊ + }␊ + ],␊ + "semi-style": [␊ + "off",␊ + "last"␊ + ],␊ + "sonarjs/cognitive-complexity": [␊ + "warn",␊ + 30␊ + ],␊ + "sonarjs/elseif-without-else": [␊ + "off"␊ + ],␊ + "sonarjs/max-switch-cases": [␊ + "warn",␊ + 15␊ + ],␊ + "sonarjs/no-all-duplicated-branches": [␊ + "warn"␊ + ],␊ + "sonarjs/no-collapsible-if": [␊ + "warn"␊ + ],␊ + "sonarjs/no-collection-size-mischeck": [␊ + "warn"␊ + ],␊ + "sonarjs/no-duplicate-string": [␊ + "warn",␊ + {␊ + "threshold": 4,␊ + "ignoreStrings": "application/json"␊ + }␊ + ],␊ + "sonarjs/no-duplicated-branches": [␊ + "warn"␊ + ],␊ + "sonarjs/no-element-overwrite": [␊ + "warn"␊ + ],␊ + "sonarjs/no-empty-collection": [␊ + "warn"␊ + ],␊ + "sonarjs/no-extra-arguments": [␊ + "warn"␊ + ],␊ + "sonarjs/no-gratuitous-expressions": [␊ + "warn"␊ + ],␊ + "sonarjs/no-identical-conditions": [␊ + "warn"␊ + ],␊ + "sonarjs/no-identical-expressions": [␊ + "warn"␊ + ],␊ + "sonarjs/no-identical-functions": [␊ + "warn",␊ + 4␊ + ],␊ + "sonarjs/no-ignored-return": [␊ + "warn"␊ + ],␊ + "sonarjs/no-inverted-boolean-check": [␊ + "warn"␊ + ],␊ + "sonarjs/no-nested-switch": [␊ + "warn"␊ + ],␊ + "sonarjs/no-nested-template-literals": [␊ + "off"␊ + ],␊ + "sonarjs/no-one-iteration-loop": [␊ + "warn"␊ + ],␊ + "sonarjs/no-redundant-boolean": [␊ + "warn"␊ + ],␊ + "sonarjs/no-redundant-jump": [␊ + "warn"␊ + ],␊ + "sonarjs/no-same-line-conditional": [␊ + "warn"␊ + ],␊ + "sonarjs/no-small-switch": [␊ + "warn"␊ + ],␊ + "sonarjs/no-unused-collection": [␊ + "warn"␊ + ],␊ + "sonarjs/no-use-of-empty-return-value": [␊ + "warn"␊ + ],␊ + "sonarjs/no-useless-catch": [␊ + "warn"␊ + ],␊ + "sonarjs/non-existent-operator": [␊ + "warn"␊ + ],␊ + "sonarjs/prefer-immediate-return": [␊ + "off"␊ + ],␊ + "sonarjs/prefer-object-literal": [␊ + "warn"␊ + ],␊ + "sonarjs/prefer-single-boolean-return": [␊ + "off"␊ + ],␊ + "sonarjs/prefer-while": [␊ + "warn"␊ + ],␊ + "sort-imports": [␊ + "off",␊ + {␊ + "ignoreCase": false,␊ + "ignoreDeclarationSort": false,␊ + "ignoreMemberSort": false,␊ + "memberSyntaxSortOrder": [␊ + "none",␊ + "all",␊ + "multiple",␊ + "single"␊ + ]␊ + }␊ + ],␊ + "sort-keys": [␊ + "off",␊ + "asc",␊ + {␊ + "caseSensitive": false,␊ + "natural": true␊ + }␊ + ],␊ + "sort-vars": [␊ + "off"␊ + ],␊ + "space-after-function-name": [␊ + "off"␊ + ],␊ + "space-after-keywords": [␊ + "off"␊ + ],␊ + "space-before-blocks": [␊ + "off"␊ + ],␊ + "space-before-function-paren": [␊ + "off",␊ + {␊ + "anonymous": "always",␊ + "named": "never",␊ + "asyncArrow": "always"␊ + }␊ + ],␊ + "space-before-function-parentheses": [␊ + "off"␊ + ],␊ + "space-before-keywords": [␊ + "off"␊ + ],␊ + "space-in-brackets": [␊ + "off"␊ + ],␊ + "space-in-parens": [␊ + "off",␊ + "never"␊ + ],␊ + "space-infix-ops": [␊ + "off"␊ + ],␊ + "space-return-throw-case": [␊ + "off"␊ + ],␊ + "space-unary-ops": [␊ + "off",␊ + {␊ + "words": true,␊ + "nonwords": false,␊ + "overrides": {}␊ + }␊ + ],␊ + "space-unary-word-ops": [␊ + "off"␊ + ],␊ + "spaced-comment": [␊ + "error",␊ + "always",␊ + {␊ + "line": {␊ + "exceptions": [␊ + "-",␊ + "+"␊ + ],␊ + "markers": [␊ + "=",␊ + "!",␊ + "/"␊ + ]␊ + },␊ + "block": {␊ + "exceptions": [␊ + "-",␊ + "+"␊ + ],␊ + "markers": [␊ + "=",␊ + "!",␊ + ":",␊ + "::"␊ + ],␊ + "balanced": true␊ + }␊ + }␊ + ],␊ + "standard/array-bracket-even-spacing": [␊ + "off"␊ + ],␊ + "standard/computed-property-even-spacing": [␊ + "off"␊ + ],␊ + "standard/object-curly-even-spacing": [␊ + "off"␊ + ],␊ + "strict": [␊ + "error",␊ + "never"␊ + ],␊ + "switch-colon-spacing": [␊ + "off",␊ + {␊ + "after": true,␊ + "before": false␊ + }␊ + ],␊ + "symbol-description": [␊ + "error"␊ + ],␊ + "template-curly-spacing": [␊ + "off"␊ + ],␊ + "template-tag-spacing": [␊ + "off",␊ + "never"␊ + ],␊ + "test-selectors/anchor": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/button": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/input": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/onChange": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/onClick": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/onKeyDown": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/onKeyUp": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "test-selectors/onSubmit": [␊ + "warn",␊ + "always",␊ + {␊ + "ignoreDisabled": false,␊ + "ignoreReadonly": false,␊ + "testAttribute": "data-testid"␊ + }␊ + ],␊ + "unicode-bom": [␊ + "error",␊ + "never"␊ + ],␊ + "unicorn/empty-brace-spaces": [␊ + "off"␊ + ],␊ + "unicorn/no-nested-ternary": [␊ + "off"␊ + ],␊ + "unicorn/number-literal-case": [␊ + "off"␊ + ],␊ + "unicorn/template-indent": [␊ + 0␊ + ],␊ + "use-isnan": [␊ + "error"␊ + ],␊ + "valid-jsdoc": [␊ + "off"␊ + ],␊ + "valid-typeof": [␊ + "error",␊ + {␊ + "requireStringLiterals": true␊ + }␊ + ],␊ + "vars-on-top": [␊ + "error"␊ + ],␊ + "vue/array-bracket-newline": [␊ + "off"␊ + ],␊ + "vue/array-bracket-spacing": [␊ + "off"␊ + ],␊ + "vue/array-element-newline": [␊ + "off"␊ + ],␊ + "vue/arrow-spacing": [␊ + "off"␊ + ],␊ + "vue/block-spacing": [␊ + "off"␊ + ],␊ + "vue/block-tag-newline": [␊ + "off"␊ + ],␊ + "vue/brace-style": [␊ + "off"␊ + ],␊ + "vue/comma-dangle": [␊ + "off"␊ + ],␊ + "vue/comma-spacing": [␊ + "off"␊ + ],␊ + "vue/comma-style": [␊ + "off"␊ + ],␊ + "vue/dot-location": [␊ + "off"␊ + ],␊ + "vue/func-call-spacing": [␊ + "off"␊ + ],␊ + "vue/html-closing-bracket-newline": [␊ + "off"␊ + ],␊ + "vue/html-closing-bracket-spacing": [␊ + "off"␊ + ],␊ + "vue/html-end-tags": [␊ + "off"␊ + ],␊ + "vue/html-indent": [␊ + "off"␊ + ],␊ + "vue/html-quotes": [␊ + "off"␊ + ],␊ + "vue/html-self-closing": [␊ + 0␊ + ],␊ + "vue/key-spacing": [␊ + "off"␊ + ],␊ + "vue/keyword-spacing": [␊ + "off"␊ + ],␊ + "vue/max-attributes-per-line": [␊ + "off"␊ + ],␊ + "vue/max-len": [␊ + 0␊ + ],␊ + "vue/multiline-html-element-content-newline": [␊ + "off"␊ + ],␊ + "vue/multiline-ternary": [␊ + "off"␊ + ],␊ + "vue/mustache-interpolation-spacing": [␊ + "off"␊ + ],␊ + "vue/no-extra-parens": [␊ + "off"␊ + ],␊ + "vue/no-multi-spaces": [␊ + "off"␊ + ],␊ + "vue/no-spaces-around-equal-signs-in-attribute": [␊ + "off"␊ + ],␊ + "vue/object-curly-newline": [␊ + "off"␊ + ],␊ + "vue/object-curly-spacing": [␊ + "off"␊ + ],␊ + "vue/object-property-newline": [␊ + "off"␊ + ],␊ + "vue/operator-linebreak": [␊ + "off"␊ + ],␊ + "vue/quote-props": [␊ + "off"␊ + ],␊ + "vue/script-indent": [␊ + "off"␊ + ],␊ + "vue/singleline-html-element-content-newline": [␊ + "off"␊ + ],␊ + "vue/space-in-parens": [␊ + "off"␊ + ],␊ + "vue/space-infix-ops": [␊ + "off"␊ + ],␊ + "vue/space-unary-ops": [␊ + "off"␊ + ],␊ + "vue/template-curly-spacing": [␊ + "off"␊ + ],␊ + "wrap-iife": [␊ + "off",␊ + "outside",␊ + {␊ + "functionPrototypeMethods": false␊ + }␊ + ],␊ + "wrap-regex": [␊ + "off"␊ + ],␊ + "yield-star-spacing": [␊ + "off",␊ + "after"␊ + ],␊ + "yoda": [␊ + "error"␊ + ],␊ + "you-dont-need-lodash-underscore/all": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/any": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/assign": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/bind": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/capitalize": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/cast-array": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/chunk": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/clone-deep": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/collect": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/concat": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/contains": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/debounce": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/defaults": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/detect": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/difference": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/drop": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/drop-right": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/each": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/ends-with": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/entries": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/every": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/extend": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/extend-own": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/fill": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/filter": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/find": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/find-index": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/first": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/flatten": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/foldl": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/foldr": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/for-each": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/fromPairs": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/get": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/groupBy": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/head": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/includes": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/index-of": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/inject": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/intersection": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/is-array": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-array-buffer": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/is-date": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-finite": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-function": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-integer": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-nan": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-nil": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-null": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-string": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/is-undefined": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/join": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/keys": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/last": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/last-index-of": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/map": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/maxBy": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/minBy": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/omit": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/pad-end": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/pad-start": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/pairs": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/pickBy": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/reduce": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/reduce-right": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/repeat": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/replace": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/reverse": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/select": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/size": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/slice": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/some": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/sortBy": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/split": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/starts-with": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/take-right": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/throttle": [␊ + "off"␊ + ],␊ + "you-dont-need-lodash-underscore/to-lower": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/to-pairs": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/to-upper": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/trim": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/union-by": [␊ + 1␊ + ],␊ + "you-dont-need-lodash-underscore/uniq": [␊ + 2␊ + ],␊ + "you-dont-need-lodash-underscore/values": [␊ + 2␊ + ]␊ + },␊ + "settings": {␊ + "jest": {␊ + "version": 29␊ + },␊ + "import/extensions": [␊ + ".ts",␊ + ".cts",␊ + ".mts",␊ + ".tsx",␊ + ".js",␊ + ".jsx",␊ + ".mjs",␊ + ".cjs"␊ + ],␊ + "import/external-module-folders": [␊ + "node_modules",␊ + "node_modules/@types"␊ + ],␊ + "import/parsers": {␊ + "@typescript-eslint/parser": [␊ + ".ts",␊ + ".cts",␊ + ".mts",␊ + ".tsx"␊ + ]␊ + },␊ + "import/resolver": {␊ + "node": {␊ + "extensions": [␊ + ".ts",␊ + ".cts",␊ + ".mts",␊ + ".tsx",␊ + ".js",␊ + ".jsx",␊ + ".mjs",␊ + ".cjs"␊ + ]␊ + }␊ + },␊ + "import/core-modules": [],␊ + "import/ignore": [␊ + "node_modules",␊ + "\\\\.(coffee|scss|css|less|hbs|svg|json)$"␊ + ],␊ + "react": {␊ + "pragma": "React",␊ + "version": "detect"␊ + },␊ + "propWrapperFunctions": [␊ + "forbidExtraProps",␊ + "exact",␊ + "Object.freeze"␊ + ]␊ + },␊ + "ignorePatterns": []␊ + }` + ## Should apply our custom linting rules consistently > Snapshot 1 @@ -3640,6 +7261,17 @@ Generated by [AVA](https://ava.li). 10:5 warning Test has no assertions jest/expect-expect␊ 10:13 error Test title is used multiple times in the same describe block jest/no-identical-title␊ ␊ - ✖ 72 problems (37 errors, 35 warnings)␊ + example.ts␊ + 1:8 warning Missing return type on function @typescript-eslint/explicit-module-boundary-types␊ + 1:8 error Missing return type on function @typescript-eslint/explicit-function-return-type␊ + 1:26 warning Object pattern argument should be typed @typescript-eslint/explicit-module-boundary-types␊ + 2:3 warning Unexpected console statement no-console␊ + 5:27 warning Argument 'prop1' should be typed @typescript-eslint/explicit-module-boundary-types␊ + 5:27 error 'prop1' is defined but never used @typescript-eslint/no-unused-vars␊ + 5:40 error Unexpected empty function 'someFunc2' @typescript-eslint/no-empty-function␊ + 7:7 error 'unusedVar' is assigned a value but never used @typescript-eslint/no-unused-vars␊ + 9:6 error 'UnusedType' is defined but never used @typescript-eslint/no-unused-vars␊ + ␊ + ✖ 81 problems (42 errors, 39 warnings)␊ 4 errors and 0 warnings potentially fixable with the `--fix` option.␊ ` diff --git a/demo/test/snapshots/linting-config.test.js.snap b/demo/test/snapshots/linting-config.test.js.snap index 35ea9a3..78fb5cb 100644 Binary files a/demo/test/snapshots/linting-config.test.js.snap and b/demo/test/snapshots/linting-config.test.js.snap differ diff --git a/es6.js b/es6.js index 160f635..24756ec 100644 --- a/es6.js +++ b/es6.js @@ -98,6 +98,12 @@ module.exports = { // ] }, overrides: [ + { + files: ['*.ts?(x)'], + rules: { + '@typescript-eslint/explicit-module-boundary-types': 'warn', + }, + }, { files: [ '*.stories.*', diff --git a/package.json b/package.json index e47c091..2bec612 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fs/eslint-config-tree", - "version": "6.2.0", + "version": "6.3.0", "description": "Shared Tree configuration that contains overrides and enhancements on top of the base frontier configuration.", "main": "index.js", "repository": { @@ -28,7 +28,7 @@ "!.*" ], "dependencies": { - "@babel/eslint-parser": "^7.26.10", + "@babel/eslint-parser": "^7.27.0", "@fs/eslint-config-frontier-react": "^11.2.2", "eslint": "^8.57.1", "eslint-plugin-bestpractices": "github:skye2k2/eslint-plugin-bestpractices", @@ -49,7 +49,7 @@ "lint:fix": "eslint demo --fix", "lint:quiet": "eslint demo --quiet", "lint:report": "eslint demo '**/*.html' --format html --output-file ./reports/linting/linting_report.html & eslint demo --format json --output-file ./reports/linting/linting_report.json", - "lint:snapshot": "eslint --print-config file.js > ./demo/test/snapshots/local-linting-final-config.json; eslint demo --no-color --output-file ./demo/test/snapshots/local-linting-output.txt; npm run test:format", + "lint:snapshot": "eslint --print-config file.js > ./demo/test/snapshots/local-linting-final-config.json; eslint --print-config file.ts > ./demo/test/snapshots/local-linting-final-config-ts.json; eslint demo --no-color --output-file ./demo/test/snapshots/local-linting-output.txt; npm run test:format", "publish": "npmPublish", "test": "npm run lint:snapshot; ava", "test:format": "node demo/test/snapshots/format-config.js",