@nfq/eslint-config 4.0.0-beta.12 → 4.0.0-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -9,6 +9,7 @@ import { commonPluginRules } from './rules/common/plugins/index.js';
9
9
  import { commonEslintRules } from './rules/common/eslint/index.js';
10
10
  import { typescriptRuleResets } from './rules/typescript/overrides/index.js';
11
11
  import { tsRules } from './rules/typescript/plugins/index.js';
12
+ import { storybookResets } from './rules/storybook/overrides/resets.js';
12
13
  import { cypressResets } from './rules/cypress/overrides/resets.js';
13
14
  import { cypressPluginRules } from './rules/cypress/plugins/index.js';
14
15
 
@@ -66,6 +67,35 @@ const NFQEslintConfig = [settings, {
66
67
  ...tsRules,
67
68
  ...typescriptRuleResets
68
69
  }
70
+ }, {
71
+ files: ['**/*.stories.{ts,cts,mts,tsx}'],
72
+ languageOptions: {
73
+ ecmaVersion: 'latest',
74
+ globals,
75
+ parser: tsParser,
76
+ parserOptions: {
77
+ ecmaFeatures: {
78
+ jsx: true
79
+ },
80
+ ecmaVersion: 'latest',
81
+ project: '**/tsconfig*.json'
82
+ }
83
+ },
84
+ linterOptions: {
85
+ reportUnusedDisableDirectives: 'error',
86
+ reportUnusedInlineConfigs: 'error'
87
+ },
88
+ name: 'NFQ ESLint TS Story Config',
89
+ plugins: tsPlugins,
90
+ rules: {
91
+ ...commonEslintRules,
92
+ ...commonPluginRules,
93
+ ...nodeRules,
94
+ ...reactPluginRules,
95
+ ...tsRules,
96
+ ...typescriptRuleResets,
97
+ ...storybookResets
98
+ }
69
99
  }, {
70
100
  files: ['**/*.cy.{ts,cts,mts,tsx}'],
71
101
  languageOptions: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import * as tsParser from '@typescript-eslint/parser';\n\nimport {\n commonEslintRules,\n commonPluginRules,\n cypressPluginRules,\n cypressResets,\n nodeRules,\n reactPluginRules,\n tsRules,\n typescriptRuleResets\n} from './rules';\nimport {globals} from './settings/globals';\nimport {plugins} from './settings/plugins';\nimport {settings} from './settings/settings';\nimport {tsPlugins} from './settings/tsPlugins';\n\nexport const NFQEslintConfig = [\n settings,\n {\n files: ['**/*.{js,cjs,mjs,jsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint JS Config',\n plugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules\n }\n },\n {\n files: ['**/*.{ts,cts,mts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint TS Config',\n plugins: tsPlugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules,\n ...tsRules,\n ...typescriptRuleResets\n }\n },\n {\n files: ['**/*.cy.{ts,cts,mts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint Cypress Config',\n plugins: tsPlugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules,\n ...tsRules,\n ...typescriptRuleResets,\n ...cypressPluginRules,\n ...cypressResets\n }\n }\n];\n\nexport {globals, plugins, settings, tsPlugins};"],"names":["NFQEslintConfig","settings","files","languageOptions","ecmaVersion","globals","parser","tsParser","parserOptions","ecmaFeatures","jsx","project","linterOptions","reportUnusedDisableDirectives","reportUnusedInlineConfigs","name","plugins","rules","commonEslintRules","commonPluginRules","nodeRules","reactPluginRules","tsPlugins","tsRules","typescriptRuleResets","cypressPluginRules","cypressResets"],"mappings":";;;;;;;;;;;;;;AAiBO,MAAMA,eAAe,GAAG,CAC3BC,QAAQ,EACR;EACIC,KAAK,EAAE,CAAC,uBAAuB,CAAC;AAChCC,EAAAA,eAAe,EAAE;AACbC,IAAAA,WAAW,EAAE,QAAQ;IACrBC,OAAO;AACPC,IAAAA,MAAM,EAAEC,QAAQ;AAChBC,IAAAA,aAAa,EAAE;AACXC,MAAAA,YAAY,EAAE;AAACC,QAAAA,GAAG,EAAE;OAAK;AACzBN,MAAAA,WAAW,EAAE,QAAQ;AACrBO,MAAAA,OAAO,EAAE;AACb;GACH;AACDC,EAAAA,aAAa,EAAE;AACXC,IAAAA,6BAA6B,EAAE,OAAO;AACtCC,IAAAA,yBAAyB,EAAE;GAC9B;AACDC,EAAAA,IAAI,EAAE,sBAAsB;EAC5BC,OAAO;AACPC,EAAAA,KAAK,EAAE;AACH,IAAA,GAAGC,iBAAiB;AACpB,IAAA,GAAGC,iBAAiB;AACpB,IAAA,GAAGC,SAAS;IACZ,GAAGC;AACP;AACJ,CAAC,EACD;EACInB,KAAK,EAAE,CAAC,uBAAuB,CAAC;AAChCC,EAAAA,eAAe,EAAE;AACbC,IAAAA,WAAW,EAAE,QAAQ;IACrBC,OAAO;AACPC,IAAAA,MAAM,EAAEC,QAAQ;AAChBC,IAAAA,aAAa,EAAE;AACXC,MAAAA,YAAY,EAAE;AAACC,QAAAA,GAAG,EAAE;OAAK;AACzBN,MAAAA,WAAW,EAAE,QAAQ;AACrBO,MAAAA,OAAO,EAAE;AACb;GACH;AACDC,EAAAA,aAAa,EAAE;AACXC,IAAAA,6BAA6B,EAAE,OAAO;AACtCC,IAAAA,yBAAyB,EAAE;GAC9B;AACDC,EAAAA,IAAI,EAAE,sBAAsB;AAC5BC,EAAAA,OAAO,EAAEM,SAAS;AAClBL,EAAAA,KAAK,EAAE;AACH,IAAA,GAAGC,iBAAiB;AACpB,IAAA,GAAGC,iBAAiB;AACpB,IAAA,GAAGC,SAAS;AACZ,IAAA,GAAGC,gBAAgB;AACnB,IAAA,GAAGE,OAAO;IACV,GAAGC;AACP;AACJ,CAAC,EACD;EACItB,KAAK,EAAE,CAAC,0BAA0B,CAAC;AACnCC,EAAAA,eAAe,EAAE;AACbC,IAAAA,WAAW,EAAE,QAAQ;IACrBC,OAAO;AACPC,IAAAA,MAAM,EAAEC,QAAQ;AAChBC,IAAAA,aAAa,EAAE;AACXC,MAAAA,YAAY,EAAE;AAACC,QAAAA,GAAG,EAAE;OAAK;AACzBN,MAAAA,WAAW,EAAE,QAAQ;AACrBO,MAAAA,OAAO,EAAE;AACb;GACH;AACDC,EAAAA,aAAa,EAAE;AACXC,IAAAA,6BAA6B,EAAE,OAAO;AACtCC,IAAAA,yBAAyB,EAAE;GAC9B;AACDC,EAAAA,IAAI,EAAE,2BAA2B;AACjCC,EAAAA,OAAO,EAAEM,SAAS;AAClBL,EAAAA,KAAK,EAAE;AACH,IAAA,GAAGC,iBAAiB;AACpB,IAAA,GAAGC,iBAAiB;AACpB,IAAA,GAAGC,SAAS;AACZ,IAAA,GAAGC,gBAAgB;AACnB,IAAA,GAAGE,OAAO;AACV,IAAA,GAAGC,oBAAoB;AACvB,IAAA,GAAGC,kBAAkB;IACrB,GAAGC;AACP;AACJ,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import * as tsParser from '@typescript-eslint/parser';\n\nimport {\n commonEslintRules,\n commonPluginRules,\n cypressPluginRules,\n cypressResets,\n nodeRules,\n reactPluginRules,\n storybookResets,\n tsRules,\n typescriptRuleResets\n} from './rules';\nimport {globals} from './settings/globals';\nimport {plugins} from './settings/plugins';\nimport {settings} from './settings/settings';\nimport {tsPlugins} from './settings/tsPlugins';\n\nexport const NFQEslintConfig = [\n settings,\n {\n files: ['**/*.{js,cjs,mjs,jsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint JS Config',\n plugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules\n }\n },\n {\n files: ['**/*.{ts,cts,mts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint TS Config',\n plugins: tsPlugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules,\n ...tsRules,\n ...typescriptRuleResets\n }\n },\n {\n files: ['**/*.stories.{ts,cts,mts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint TS Story Config',\n plugins: tsPlugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules,\n ...tsRules,\n ...typescriptRuleResets,\n ...storybookResets\n }\n },\n {\n files: ['**/*.cy.{ts,cts,mts,tsx}'],\n languageOptions: {\n ecmaVersion: 'latest',\n globals,\n parser: tsParser,\n parserOptions: {\n ecmaFeatures: {jsx: true},\n ecmaVersion: 'latest',\n project: '**/tsconfig*.json'\n }\n },\n linterOptions: {\n reportUnusedDisableDirectives: 'error',\n reportUnusedInlineConfigs: 'error'\n },\n name: 'NFQ ESLint Cypress Config',\n plugins: tsPlugins,\n rules: {\n ...commonEslintRules,\n ...commonPluginRules,\n ...nodeRules,\n ...reactPluginRules,\n ...tsRules,\n ...typescriptRuleResets,\n ...cypressPluginRules,\n ...cypressResets\n }\n }\n];\n\nexport {globals, plugins, settings, tsPlugins};"],"names":["NFQEslintConfig","settings","files","languageOptions","ecmaVersion","globals","parser","tsParser","parserOptions","ecmaFeatures","jsx","project","linterOptions","reportUnusedDisableDirectives","reportUnusedInlineConfigs","name","plugins","rules","commonEslintRules","commonPluginRules","nodeRules","reactPluginRules","tsPlugins","tsRules","typescriptRuleResets","storybookResets","cypressPluginRules","cypressResets"],"mappings":"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"}
@@ -64,6 +64,7 @@ const importRules = {
64
64
  'import/no-unassigned-import': 0,
65
65
  'import/no-unresolved': [2, {
66
66
  caseSensitive: true,
67
+ caseSensitiveStrict: false,
67
68
  commonjs: true,
68
69
  ignore: ['@app/features']
69
70
  }],
@@ -1 +1 @@
1
- {"version":3,"file":"import.js","sources":["../../../../../src/rules/common/plugins/import.ts"],"sourcesContent":["/* eslint-disable no-inline-comments */\nexport const importRules = {\n 'import/default': 2,\n 'import/dynamic-import-chunkname': [\n 2,\n {\n importFunctions: [],\n webpackChunknameFormat: '[0-9a-zA-Z-_/.]+'\n }\n ],\n 'import/export': 2,\n 'import/exports-last': 0,\n 'import/extensions': [\n 2,\n 'never',\n {\n eot: 'always',\n otf: 'always',\n ttf: 'always',\n woff: 'always',\n woff2: 'always'\n }\n ],\n 'import/first': 2,\n 'import/group-exports': 0,\n 'import/max-dependencies': [\n 1,\n {\n ignoreTypeImports: true,\n max: 20\n }\n ],\n 'import/named': 2,\n 'import/namespace': [2, {allowComputed: true}],\n 'import/newline-after-import': 2,\n 'import/no-absolute-path': 2,\n 'import/no-amd': 2,\n 'import/no-anonymous-default-export': [\n 0,\n {\n allowAnonymousClass: false,\n allowAnonymousFunction: false,\n allowArray: false,\n allowArrowFunction: false,\n allowLiteral: false,\n allowObject: false\n }\n ],\n 'import/no-commonjs': 0,\n 'import/no-cycle': [\n 0,\n {maxDepth: Infinity}\n ],\n 'import/no-default-export': 0,\n 'import/no-deprecated': 1,\n 'import/no-duplicates': ['error', {considerQueryString: true}],\n 'import/no-dynamic-require': 0,\n 'import/no-extraneous-dependencies': [\n 0,\n {\n devDependencies: [\n 'test/**', // tape, common npm pattern\n 'tests/**', // also common npm pattern\n 'spec/**', // mocha, rspec-like pattern\n '**/__tests__/**', // jest pattern\n '**/__mocks__/**', // jest pattern\n 'test.{js,jsx}', // repos with a single test file\n 'test-*.{js,jsx}', // repos with multiple top-level test files\n '**/*{.,_}{test,spec}.{js,jsx}', // tests where the extension or filename suffix denotes that it is a test\n '**/jest.config.js', // jest config\n '**/jest.setup.js', // jest setup\n '**/vue.config.js', // vue-cli config\n '**/webpack.config.js', // webpack config\n '**/webpack.config.*.js', // webpack config\n '**/rollup.config.js', // rollup config\n '**/rollup.config.*.js', // rollup config\n '**/gulpfile.js', // gulp config\n '**/gulpfile.*.js', // gulp config\n '**/Gruntfile{,.js}', // grunt config\n '**/protractor.conf.js', // protractor config\n '**/protractor.conf.*.js', // protractor config\n '**/karma.conf.js' // karma config\n ],\n optionalDependencies: false\n }\n ],\n 'import/no-internal-modules': [0, {allow: []}],\n 'import/no-mutable-exports': 2,\n 'import/no-named-as-default': 2,\n 'import/no-named-as-default-member': 2,\n 'import/no-named-default': 2,\n 'import/no-named-export': 0,\n 'import/no-namespace': 0,\n 'import/no-nodejs-modules': 0,\n 'import/no-relative-parent-imports': 0,\n 'import/no-restricted-paths': 0,\n 'import/no-self-import': 2,\n 'import/no-unassigned-import': 0,\n 'import/no-unresolved': [\n 2,\n {\n caseSensitive: true,\n commonjs: true,\n ignore: ['@app/features']\n }\n ],\n 'import/no-unused-modules': [\n 0,\n {\n ignoreExports: [],\n missingExports: true,\n unusedExports: true\n }\n ],\n 'import/no-useless-path-segments': [2, {commonjs: true}],\n 'import/no-webpack-loader-syntax': 2,\n 'import/order': [\n 2,\n {\n alphabetize: {\n caseInsensitive: true,\n order: 'asc'\n },\n groups: ['builtin', 'external', 'parent', 'internal', 'sibling', 'type'],\n 'newlines-between': 'always',\n pathGroups: [\n {\n group: 'external',\n pattern: 'react',\n position: 'before'\n },\n {\n group: 'external',\n pattern: 'react-dom',\n position: 'before'\n },\n {\n group: 'parent',\n pattern: '**/classes/**'\n },\n {\n group: 'parent',\n pattern: 'Classes/**'\n },\n {\n group: 'parent',\n pattern: '**/screens/**'\n },\n {\n group: 'parent',\n pattern: 'Screens/**'\n },\n {\n group: 'parent',\n pattern: '**/containers/**'\n },\n {\n group: 'parent',\n pattern: 'Containers/**'\n },\n {\n group: 'parent',\n pattern: '**/components/**'\n },\n {\n group: 'parent',\n pattern: 'Components/**'\n },\n {\n group: 'parent',\n pattern: '**/stores/**'\n },\n {\n group: 'parent',\n pattern: 'Stores/**'\n },\n {\n group: 'sibling',\n pattern: '**/utils/**'\n },\n {\n group: 'sibling',\n pattern: 'Utils/**'\n },\n {\n group: 'sibling',\n pattern: '**/configs/**'\n },\n {\n group: 'sibling',\n pattern: 'Configs'\n },\n {\n group: 'sibling',\n pattern: '**/fonts/**'\n },\n {\n group: 'sibling',\n pattern: 'Fonts/**'\n },\n {\n group: 'sibling',\n pattern: '**/images/**'\n },\n {\n group: 'sibling',\n pattern: 'Images/**'\n }\n ],\n pathGroupsExcludedImportTypes: ['react', 'react-dom']\n }\n ],\n 'import/prefer-default-export': 0,\n 'import/unambiguous': 0\n};"],"names":["importRules","importFunctions","webpackChunknameFormat","eot","otf","ttf","woff","woff2","ignoreTypeImports","max","allowComputed","allowAnonymousClass","allowAnonymousFunction","allowArray","allowArrowFunction","allowLiteral","allowObject","maxDepth","Infinity","considerQueryString","devDependencies","optionalDependencies","allow","caseSensitive","commonjs","ignore","ignoreExports","missingExports","unusedExports","alphabetize","caseInsensitive","order","groups","pathGroups","group","pattern","position","pathGroupsExcludedImportTypes"],"mappings":"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"}
1
+ {"version":3,"file":"import.js","sources":["../../../../../src/rules/common/plugins/import.ts"],"sourcesContent":["/* eslint-disable no-inline-comments */\nexport const importRules = {\n 'import/default': 2,\n 'import/dynamic-import-chunkname': [\n 2,\n {\n importFunctions: [],\n webpackChunknameFormat: '[0-9a-zA-Z-_/.]+'\n }\n ],\n 'import/export': 2,\n 'import/exports-last': 0,\n 'import/extensions': [\n 2,\n 'never',\n {\n eot: 'always',\n otf: 'always',\n ttf: 'always',\n woff: 'always',\n woff2: 'always'\n }\n ],\n 'import/first': 2,\n 'import/group-exports': 0,\n 'import/max-dependencies': [\n 1,\n {\n ignoreTypeImports: true,\n max: 20\n }\n ],\n 'import/named': 2,\n 'import/namespace': [2, {allowComputed: true}],\n 'import/newline-after-import': 2,\n 'import/no-absolute-path': 2,\n 'import/no-amd': 2,\n 'import/no-anonymous-default-export': [\n 0,\n {\n allowAnonymousClass: false,\n allowAnonymousFunction: false,\n allowArray: false,\n allowArrowFunction: false,\n allowLiteral: false,\n allowObject: false\n }\n ],\n 'import/no-commonjs': 0,\n 'import/no-cycle': [\n 0,\n {maxDepth: Infinity}\n ],\n 'import/no-default-export': 0,\n 'import/no-deprecated': 1,\n 'import/no-duplicates': ['error', {considerQueryString: true}],\n 'import/no-dynamic-require': 0,\n 'import/no-extraneous-dependencies': [\n 0,\n {\n devDependencies: [\n 'test/**', // tape, common npm pattern\n 'tests/**', // also common npm pattern\n 'spec/**', // mocha, rspec-like pattern\n '**/__tests__/**', // jest pattern\n '**/__mocks__/**', // jest pattern\n 'test.{js,jsx}', // repos with a single test file\n 'test-*.{js,jsx}', // repos with multiple top-level test files\n '**/*{.,_}{test,spec}.{js,jsx}', // tests where the extension or filename suffix denotes that it is a test\n '**/jest.config.js', // jest config\n '**/jest.setup.js', // jest setup\n '**/vue.config.js', // vue-cli config\n '**/webpack.config.js', // webpack config\n '**/webpack.config.*.js', // webpack config\n '**/rollup.config.js', // rollup config\n '**/rollup.config.*.js', // rollup config\n '**/gulpfile.js', // gulp config\n '**/gulpfile.*.js', // gulp config\n '**/Gruntfile{,.js}', // grunt config\n '**/protractor.conf.js', // protractor config\n '**/protractor.conf.*.js', // protractor config\n '**/karma.conf.js' // karma config\n ],\n optionalDependencies: false\n }\n ],\n 'import/no-internal-modules': [0, {allow: []}],\n 'import/no-mutable-exports': 2,\n 'import/no-named-as-default': 2,\n 'import/no-named-as-default-member': 2,\n 'import/no-named-default': 2,\n 'import/no-named-export': 0,\n 'import/no-namespace': 0,\n 'import/no-nodejs-modules': 0,\n 'import/no-relative-parent-imports': 0,\n 'import/no-restricted-paths': 0,\n 'import/no-self-import': 2,\n 'import/no-unassigned-import': 0,\n 'import/no-unresolved': [\n 2,\n {\n caseSensitive: true,\n caseSensitiveStrict: false,\n commonjs: true,\n ignore: ['@app/features'],\n }\n ],\n 'import/no-unused-modules': [\n 0,\n {\n ignoreExports: [],\n missingExports: true,\n unusedExports: true\n }\n ],\n 'import/no-useless-path-segments': [2, {commonjs: true}],\n 'import/no-webpack-loader-syntax': 2,\n 'import/order': [\n 2,\n {\n alphabetize: {\n caseInsensitive: true,\n order: 'asc'\n },\n groups: ['builtin', 'external', 'parent', 'internal', 'sibling', 'type'],\n 'newlines-between': 'always',\n pathGroups: [\n {\n group: 'external',\n pattern: 'react',\n position: 'before'\n },\n {\n group: 'external',\n pattern: 'react-dom',\n position: 'before'\n },\n {\n group: 'parent',\n pattern: '**/classes/**'\n },\n {\n group: 'parent',\n pattern: 'Classes/**'\n },\n {\n group: 'parent',\n pattern: '**/screens/**'\n },\n {\n group: 'parent',\n pattern: 'Screens/**'\n },\n {\n group: 'parent',\n pattern: '**/containers/**'\n },\n {\n group: 'parent',\n pattern: 'Containers/**'\n },\n {\n group: 'parent',\n pattern: '**/components/**'\n },\n {\n group: 'parent',\n pattern: 'Components/**'\n },\n {\n group: 'parent',\n pattern: '**/stores/**'\n },\n {\n group: 'parent',\n pattern: 'Stores/**'\n },\n {\n group: 'sibling',\n pattern: '**/utils/**'\n },\n {\n group: 'sibling',\n pattern: 'Utils/**'\n },\n {\n group: 'sibling',\n pattern: '**/configs/**'\n },\n {\n group: 'sibling',\n pattern: 'Configs'\n },\n {\n group: 'sibling',\n pattern: '**/fonts/**'\n },\n {\n group: 'sibling',\n pattern: 'Fonts/**'\n },\n {\n group: 'sibling',\n pattern: '**/images/**'\n },\n {\n group: 'sibling',\n pattern: 'Images/**'\n }\n ],\n pathGroupsExcludedImportTypes: ['react', 'react-dom']\n }\n ],\n 'import/prefer-default-export': 0,\n 'import/unambiguous': 0\n};"],"names":["importRules","importFunctions","webpackChunknameFormat","eot","otf","ttf","woff","woff2","ignoreTypeImports","max","allowComputed","allowAnonymousClass","allowAnonymousFunction","allowArray","allowArrowFunction","allowLiteral","allowObject","maxDepth","Infinity","considerQueryString","devDependencies","optionalDependencies","allow","caseSensitive","caseSensitiveStrict","commonjs","ignore","ignoreExports","missingExports","unusedExports","alphabetize","caseInsensitive","order","groups","pathGroups","group","pattern","position","pathGroupsExcludedImportTypes"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  const nfq = {
2
+ '@nfq/hexagonal-dependency-direction': 'error',
2
3
  '@nfq/no-empty-lines-in-objects': 'error',
3
4
  '@nfq/no-magic-numbers': ['error', {
4
5
  detectObjects: false,
@@ -1 +1 @@
1
- {"version":3,"file":"nfq.js","sources":["../../../../../src/rules/common/plugins/nfq.ts"],"sourcesContent":["export const nfq = {\n '@nfq/no-empty-lines-in-objects': 'error',\n '@nfq/no-magic-numbers': [\n 'error',\n {\n detectObjects: false,\n enforceConst: true,\n ignore: [0, 1, -1],\n ignoreArrayIndexes: true,\n ignoreArrays: true,\n ignoreClassFieldInitialValues: true,\n ignoreConstDeclarations: false,\n ignoreDefaultValues: true,\n ignoreFunctions: [\n 'darken',\n 'lighten',\n 'setTimeout',\n 'setInterval',\n 'spacing',\n 'translucify',\n 'wait',\n 'toFixed'\n ]\n }\n ],\n '@nfq/no-unbound-method': ['error', {decoratorNames: ['autobind']}],\n '@nfq/object-property-newline': 'error',\n '@nfq/sort-keys': [\n 'error',\n 'asc',\n {\n caseSensitive: false,\n ignorePropTypes: true,\n methodsExtra: true,\n natural: true\n }\n ]\n};"],"names":["nfq","detectObjects","enforceConst","ignore","ignoreArrayIndexes","ignoreArrays","ignoreClassFieldInitialValues","ignoreConstDeclarations","ignoreDefaultValues","ignoreFunctions","decoratorNames","caseSensitive","ignorePropTypes","methodsExtra","natural"],"mappings":"AAAO,MAAMA,GAAG,GAAG;AACf,EAAA,gCAAgC,EAAE,OAAO;EACzC,uBAAuB,EAAE,CACrB,OAAO,EACP;AACIC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,YAAY,EAAE,IAAI;IAClBC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAClBC,IAAAA,kBAAkB,EAAE,IAAI;AACxBC,IAAAA,YAAY,EAAE,IAAI;AAClBC,IAAAA,6BAA6B,EAAE,IAAI;AACnCC,IAAAA,uBAAuB,EAAE,KAAK;AAC9BC,IAAAA,mBAAmB,EAAE,IAAI;AACzBC,IAAAA,eAAe,EAAE,CACb,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACT,aAAa,EACb,MAAM,EACN,SAAS;AAEjB,GAAC,CACJ;EACD,wBAAwB,EAAE,CAAC,OAAO,EAAE;IAACC,cAAc,EAAE,CAAC,UAAU;AAAC,GAAC,CAAC;AACnE,EAAA,8BAA8B,EAAE,OAAO;AACvC,EAAA,gBAAgB,EAAE,CACd,OAAO,EACP,KAAK,EACL;AACIC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,eAAe,EAAE,IAAI;AACrBC,IAAAA,YAAY,EAAE,IAAI;AAClBC,IAAAA,OAAO,EAAE;GACZ;AAET;;;;"}
1
+ {"version":3,"file":"nfq.js","sources":["../../../../../src/rules/common/plugins/nfq.ts"],"sourcesContent":["export const nfq = {\n '@nfq/hexagonal-dependency-direction': 'error',\n '@nfq/no-empty-lines-in-objects': 'error',\n '@nfq/no-magic-numbers': [\n 'error',\n {\n detectObjects: false,\n enforceConst: true,\n ignore: [0, 1, -1],\n ignoreArrayIndexes: true,\n ignoreArrays: true,\n ignoreClassFieldInitialValues: true,\n ignoreConstDeclarations: false,\n ignoreDefaultValues: true,\n ignoreFunctions: [\n 'darken',\n 'lighten',\n 'setTimeout',\n 'setInterval',\n 'spacing',\n 'translucify',\n 'wait',\n 'toFixed'\n ]\n }\n ],\n '@nfq/no-unbound-method': ['error', {decoratorNames: ['autobind']}],\n '@nfq/object-property-newline': 'error',\n '@nfq/sort-keys': [\n 'error',\n 'asc',\n {\n caseSensitive: false,\n ignorePropTypes: true,\n methodsExtra: true,\n natural: true\n }\n ]\n};"],"names":["nfq","detectObjects","enforceConst","ignore","ignoreArrayIndexes","ignoreArrays","ignoreClassFieldInitialValues","ignoreConstDeclarations","ignoreDefaultValues","ignoreFunctions","decoratorNames","caseSensitive","ignorePropTypes","methodsExtra","natural"],"mappings":"AAAO,MAAMA,GAAG,GAAG;AACf,EAAA,qCAAqC,EAAE,OAAO;AAC9C,EAAA,gCAAgC,EAAE,OAAO;EACzC,uBAAuB,EAAE,CACrB,OAAO,EACP;AACIC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,YAAY,EAAE,IAAI;IAClBC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAClBC,IAAAA,kBAAkB,EAAE,IAAI;AACxBC,IAAAA,YAAY,EAAE,IAAI;AAClBC,IAAAA,6BAA6B,EAAE,IAAI;AACnCC,IAAAA,uBAAuB,EAAE,KAAK;AAC9BC,IAAAA,mBAAmB,EAAE,IAAI;AACzBC,IAAAA,eAAe,EAAE,CACb,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACT,aAAa,EACb,MAAM,EACN,SAAS;AAEjB,GAAC,CACJ;EACD,wBAAwB,EAAE,CAAC,OAAO,EAAE;IAACC,cAAc,EAAE,CAAC,UAAU;AAAC,GAAC,CAAC;AACnE,EAAA,8BAA8B,EAAE,OAAO;AACvC,EAAA,gBAAgB,EAAE,CACd,OAAO,EACP,KAAK,EACL;AACIC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,eAAe,EAAE,IAAI;AACrBC,IAAAA,YAAY,EAAE,IAAI;AAClBC,IAAAA,OAAO,EAAE;GACZ;AAET;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"no-unbound-method.js","sources":["../../../../src/rules/custom/no-unbound-method.ts"],"sourcesContent":["import {AST_NODE_TYPES, ESLintUtils} from '@typescript-eslint/utils';\nimport ts from 'typescript';\n\nimport {\n DEFAULT_DECORATORS,\n getDecoratorName,\n isCallbackUsage,\n isThisBindCall,\n methodUsesThis,\n normalizeDecoratorNames,\n unwrapExpression\n} from './utils/no-unbound-method-utils';\n\nimport type {TSESLint, TSESTree} from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n name => `https://github.com/nfqde/eslint-config-nfq/blob/master/docs/rules/${name}.md`\n);\n\ntype RuleOptions = [\n {decoratorNames?: string[]}?\n];\n\ntype MessageIds = 'constructorBind' | 'unboundMethod';\n\ntype MethodInfo = {\n autoBind: boolean;\n hasDecorator: boolean;\n isStatic: boolean;\n usesThis: boolean;\n};\n\nexport const noUnboundMethod = createRule<RuleOptions, MessageIds>({\n defaultOptions: [{decoratorNames: DEFAULT_DECORATORS}],\n meta: {\n docs: {description: 'Warn when unbound class methods that use this are passed as callbacks.'},\n messages: {\n constructorBind: 'Do not bind in the constructor; prefer {{decoratorName}}.',\n unboundMethod: 'Method {{methodName}} uses this and is passed unbound. Add {{decoratorName}} or bind it.'\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n decoratorNames: {\n items: {type: 'string'},\n type: 'array',\n uniqueItems: true\n }\n },\n type: 'object'\n }\n ],\n type: 'problem'\n },\n name: 'no-unbound-method',\n /**\n * Creates the rule listeners and initializes caches for symbol analysis.\n * It wires the parser services to the TypeScript type checker and configures decorator handling.\n * It returns ESLint listeners that report unbound method usage in callbacks and constructor binding.\n *\n * @param context Rule context used to access parser services and report issues.\n * @returns The rule listener map for this rule.\n *\n * @example\n * ```tsx\n * const listeners = rule.create(context);\n * ```\n */\n create(context) {\n const services = ESLintUtils.getParserServices(context);\n const checker = services.program.getTypeChecker();\n const decoratorNames = normalizeDecoratorNames(context.options[0]?.decoratorNames);\n const decoratorLabel = `@${Array.from(decoratorNames)[0] ?? 'autobind'}`;\n const methodCache = new Map<ts.Symbol, MethodInfo>();\n const reportCache = new Map<ts.Symbol, boolean>();\n const aliasCache = new Map<ts.Symbol, ts.Symbol>();\n const memberSymbolCache = new Map<TSESTree.MemberExpression, ts.Symbol | null>();\n const classAutoBindCache = new WeakMap<ts.ClassLikeDeclaration, boolean>();\n\n const isAutoBindOption = (node: ts.Expression): boolean => {\n if (!ts.isObjectLiteralExpression(node)) {\n return false;\n }\n\n return node.properties.some(property => {\n if (!ts.isPropertyAssignment(property)) {\n return false;\n }\n\n const name = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n\n if (name !== 'autoBind') {\n return false;\n }\n\n return property.initializer.kind === ts.SyntaxKind.TrueKeyword;\n });\n };\n\n const isMakeAutoObservableCallee = (node: ts.Expression): boolean => {\n if (ts.isIdentifier(node)) {\n return node.text === 'makeAutoObservable';\n }\n\n return ts.isPropertyAccessExpression(node) && node.name.text === 'makeAutoObservable';\n };\n\n const hasAutoBindInConstructor = (classDecl: ts.ClassLikeDeclaration): boolean => {\n const cached = classAutoBindCache.get(classDecl);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const ctor = classDecl.members.find(member => ts.isConstructorDeclaration(member));\n\n if (!ctor?.body) {\n classAutoBindCache.set(classDecl, false);\n\n return false;\n }\n\n for (const statement of ctor.body.statements) {\n if (!ts.isExpressionStatement(statement)) {\n continue;\n }\n\n const expr = statement.expression;\n\n if (!ts.isCallExpression(expr)) {\n continue;\n }\n\n if (!isMakeAutoObservableCallee(expr.expression)) {\n continue;\n }\n\n if (expr.arguments.length < 2) {\n continue;\n }\n\n if (expr.arguments[0].kind !== ts.SyntaxKind.ThisKeyword) {\n continue;\n }\n\n const hasAutoBind = expr.arguments.slice(1).some(arg => isAutoBindOption(arg));\n\n if (hasAutoBind) {\n classAutoBindCache.set(classDecl, true);\n\n return true;\n }\n }\n\n classAutoBindCache.set(classDecl, false);\n\n return false;\n };\n\n /**\n * Resolves an alias symbol to its original symbol and caches the result for reuse.\n * This function avoids repeated TypeScript checker work by memoizing alias resolutions.\n * It ensures downstream analysis consistently uses the same canonical symbol instance.\n *\n * @param symbol The symbol that may be an alias and needs resolution.\n * @returns The resolved canonical symbol for further analysis.\n *\n * @example\n * ```tsx\n * const resolved = resolveSymbol(methodSymbol);\n * ```\n */\n const resolveSymbol = (symbol: ts.Symbol): ts.Symbol => {\n const cached = aliasCache.get(symbol);\n\n if (cached) {\n return cached;\n }\n\n // eslint-disable-next-line no-bitwise\n const resolved = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;\n\n aliasCache.set(symbol, resolved);\n\n return resolved;\n };\n\n /**\n * Computes metadata about a method-like symbol and caches the result for later use.\n * This function filters out non-method symbols and constructor declarations before gathering details.\n * It also determines decorator presence, static status, and whether the method uses `this`.\n *\n * @param symbol The symbol to inspect for method information.\n * @returns The resolved method info or null when the symbol is not a supported method.\n *\n * @example\n * ```tsx\n * const info = getMethodInfo(methodSymbol);\n * ```\n */\n const getMethodInfo = (symbol: ts.Symbol): MethodInfo | null => {\n const aliased = resolveSymbol(symbol);\n const cached = methodCache.get(aliased);\n\n if (cached) {\n return cached;\n }\n\n if (!(\n // eslint-disable-next-line no-bitwise\n aliased.flags\n & (\n // eslint-disable-next-line no-bitwise\n ts.SymbolFlags.Method\n | ts.SymbolFlags.Property\n | ts.SymbolFlags.Function\n | ts.SymbolFlags.GetAccessor\n | ts.SymbolFlags.SetAccessor\n )\n )) {\n return null;\n }\n\n const declarations = aliased.getDeclarations() ?? [];\n const methodDecl = declarations\n .find(decl => ts.isMethodDeclaration(decl));\n\n if (!methodDecl?.parent || !ts.isClassLike(methodDecl.parent)) {\n return null;\n }\n\n if (ts.isIdentifier(methodDecl.name) && methodDecl.name.text === 'constructor') {\n return null;\n }\n\n const flags = ts.getCombinedModifierFlags(methodDecl);\n // eslint-disable-next-line no-bitwise\n const isStatic = Boolean(flags & ts.ModifierFlags.Static);\n const decorators = ts.canHaveDecorators(methodDecl) ? ts.getDecorators(methodDecl) : undefined;\n const hasDecorator = Boolean(decorators?.some(decorator => {\n const name = getDecoratorName(decorator);\n\n return Boolean(name && decoratorNames.has(name));\n }));\n\n const info: MethodInfo = {\n autoBind: hasAutoBindInConstructor(methodDecl.parent),\n hasDecorator,\n isStatic,\n usesThis: methodUsesThis(methodDecl)\n };\n\n methodCache.set(aliased, info);\n\n return info;\n };\n\n /**\n * Determines whether a symbol should be reported as an unbound method.\n * It resolves aliases and consults cached results to avoid repeated analysis.\n * It evaluates method metadata to ensure only non-static methods that use `this` and lack decorators are flagged.\n *\n * @param symbol The symbol to evaluate for reporting eligibility.\n * @returns True when the symbol represents an unbound method that should be reported.\n *\n * @example\n * ```tsx\n * const shouldReport = shouldReportSymbol(methodSymbol);\n * ```\n */\n const shouldReportSymbol = (symbol: ts.Symbol): boolean => {\n const aliased = resolveSymbol(symbol);\n const cached = reportCache.get(aliased);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const info = getMethodInfo(aliased);\n\n if (!info) {\n reportCache.set(aliased, false);\n\n return false;\n }\n\n const shouldReport = !info.autoBind && !info.isStatic && info.usesThis && !info.hasDecorator;\n\n reportCache.set(aliased, shouldReport);\n\n return shouldReport;\n };\n\n /**\n * Resolves the TypeScript symbol associated with a member expression node.\n * It caches the resolved symbol to minimize repeated checker lookups.\n * It supports both property access and string-literal element access expressions.\n *\n * @param node The member expression node to resolve into a symbol.\n * @returns The resolved symbol, or null when no symbol can be determined.\n *\n * @example\n * ```tsx\n * const symbol = getSymbolForMember(memberExpression);\n * ```\n */\n const getSymbolForMember = (node: TSESTree.MemberExpression): ts.Symbol | null => {\n const cached = memberSymbolCache.get(node);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const tsNode = services.esTreeNodeToTSNodeMap.get(node);\n\n if (ts.isPropertyAccessExpression(tsNode)) {\n const symbol = checker.getSymbolAtLocation(tsNode.name) ?? null;\n\n memberSymbolCache.set(node, symbol);\n\n return symbol;\n }\n\n if (ts.isElementAccessExpression(tsNode)) {\n const arg = tsNode.argumentExpression;\n\n if (ts.isStringLiteralLike(arg)) {\n const symbol = checker.getSymbolAtLocation(arg) ?? null;\n\n memberSymbolCache.set(node, symbol);\n\n return symbol;\n }\n }\n\n memberSymbolCache.set(node, null);\n\n return null;\n };\n\n /**\n * Reports a constructor binding assignment for a method name.\n * It formats the report data with the decorator label and method name.\n * It delegates to the ESLint context to surface the diagnostic at the provided node.\n *\n * @param methodName The name of the method that was bound in the constructor.\n * @param node The AST node that represents the binding expression.\n *\n * @example\n * ```tsx\n * reportConstructorBinding('handleClick', expressionNode);\n * ```\n */\n const reportConstructorBinding = (methodName: string, node: TSESTree.Node) => {\n context.report({\n data: {\n decoratorName: decoratorLabel,\n methodName\n },\n messageId: 'constructorBind',\n node\n });\n };\n\n const listeners: TSESLint.RuleListener = {\n /**\n * Processes a member expression node to determine whether it represents an unbound method usage that\n * should be reported. It performs multiple early returns based on node shape, parent usage, callback context,\n * binding checks, and symbol eligibility. It ultimately reports a linting issue when all conditions\n * indicate a problematic unbound method reference.\n *\n * @param node The member expression node to analyze for unbound method usage.\n *\n * @example\n * ```tsx\n * MemberExpression(node);\n * ```\n */\n MemberExpression(node: TSESTree.MemberExpression) {\n if (node.property.type !== AST_NODE_TYPES.Identifier) {\n return;\n }\n\n const {parent} = node;\n\n if (\n (parent.type === AST_NODE_TYPES.CallExpression || parent.type === AST_NODE_TYPES.NewExpression)\n && parent.callee === node\n ) {\n return;\n }\n\n if (!isCallbackUsage(node)) {\n return;\n }\n\n if (isThisBindCall(node)) {\n return;\n }\n\n const symbol = getSymbolForMember(node);\n\n if (!symbol) {\n return;\n }\n\n if (!shouldReportSymbol(symbol)) {\n return;\n }\n\n context.report({\n data: {\n decoratorName: decoratorLabel,\n methodName: node.property.name\n },\n messageId: 'unboundMethod',\n node\n });\n },\n /**\n * Inspects constructor method definitions to detect assignments where a class method\n * is bound to `this` via `.bind(this)`, and reports such bindings for further handling.\n *\n * @param node The method definition node to analyze.\n */\n MethodDefinition(node: TSESTree.MethodDefinition) {\n if (node.kind !== 'constructor' || !node.value.body) {\n return;\n }\n\n const constructorBody = node.value.body;\n\n for (const statement of constructorBody.body) {\n if (statement.type !== AST_NODE_TYPES.ExpressionStatement) {\n continue;\n }\n\n const {expression} = statement;\n\n if (expression.type !== AST_NODE_TYPES.AssignmentExpression || expression.operator !== '=') {\n continue;\n }\n\n const {left, right} = expression;\n\n if (\n left.type !== AST_NODE_TYPES.MemberExpression\n || left.property.type !== AST_NODE_TYPES.Identifier\n ) {\n continue;\n }\n\n if (left.object.type !== AST_NODE_TYPES.ThisExpression) {\n continue;\n }\n\n if (right.type !== AST_NODE_TYPES.CallExpression) {\n continue;\n }\n\n const {callee} = right;\n\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n continue;\n }\n\n if (\n callee.object.type !== AST_NODE_TYPES.MemberExpression\n || callee.object.object.type !== AST_NODE_TYPES.ThisExpression\n || callee.object.property.type !== AST_NODE_TYPES.Identifier\n || callee.object.property.name !== left.property.name\n ) {\n continue;\n }\n\n if (\n callee.property.type !== AST_NODE_TYPES.Identifier\n || callee.property.name !== 'bind'\n ) {\n continue;\n }\n\n if (right.arguments.length === 0) {\n continue;\n }\n\n const firstArg = unwrapExpression(right.arguments[0] as TSESTree.Expression);\n\n if (firstArg.type !== AST_NODE_TYPES.ThisExpression) {\n continue;\n }\n\n reportConstructorBinding(left.property.name, expression);\n }\n }\n };\n\n return listeners;\n }\n});"],"names":["createRule","ESLintUtils","RuleCreator","name","noUnboundMethod","defaultOptions","decoratorNames","DEFAULT_DECORATORS","meta","docs","description","messages","constructorBind","unboundMethod","schema","additionalProperties","properties","items","type","uniqueItems","create","context","services","getParserServices","checker","program","getTypeChecker","normalizeDecoratorNames","options","decoratorLabel","Array","from","methodCache","Map","reportCache","aliasCache","memberSymbolCache","classAutoBindCache","WeakMap","isAutoBindOption","node","ts","isObjectLiteralExpression","some","property","isPropertyAssignment","isIdentifier","text","isStringLiteral","initializer","kind","SyntaxKind","TrueKeyword","isMakeAutoObservableCallee","isPropertyAccessExpression","hasAutoBindInConstructor","classDecl","cached","get","undefined","ctor","members","find","member","isConstructorDeclaration","body","set","statement","statements","isExpressionStatement","expr","expression","isCallExpression","arguments","length","ThisKeyword","hasAutoBind","slice","arg","resolveSymbol","symbol","resolved","flags","SymbolFlags","Alias","getAliasedSymbol","getMethodInfo","aliased","Method","Property","Function","GetAccessor","SetAccessor","declarations","getDeclarations","methodDecl","decl","isMethodDeclaration","parent","isClassLike","getCombinedModifierFlags","isStatic","Boolean","ModifierFlags","Static","decorators","canHaveDecorators","getDecorators","hasDecorator","decorator","getDecoratorName","has","info","autoBind","usesThis","methodUsesThis","shouldReportSymbol","shouldReport","getSymbolForMember","tsNode","esTreeNodeToTSNodeMap","getSymbolAtLocation","isElementAccessExpression","argumentExpression","isStringLiteralLike","reportConstructorBinding","methodName","report","data","decoratorName","messageId","listeners","MemberExpression","AST_NODE_TYPES","Identifier","CallExpression","NewExpression","callee","isCallbackUsage","isThisBindCall","MethodDefinition","value","constructorBody","ExpressionStatement","AssignmentExpression","operator","left","right","object","ThisExpression","firstArg","unwrapExpression"],"mappings":";;;;AAeA,MAAMA,YAAU,GAAGC,WAAW,CAACC,WAAW,CACtCC,IAAI,IAAI,CAAA,kEAAA,EAAqEA,IAAI,CAAA,GAAA,CACrF,CAAC;AAeM,MAAMC,eAAe,GAAGJ,YAAU,CAA0B;AAC/DK,EAAAA,cAAc,EAAE,CAAC;AAACC,IAAAA,cAAc,EAAEC;AAAkB,GAAC,CAAC;AACtDC,EAAAA,IAAI,EAAE;AACFC,IAAAA,IAAI,EAAE;AAACC,MAAAA,WAAW,EAAE;KAAyE;AAC7FC,IAAAA,QAAQ,EAAE;AACNC,MAAAA,eAAe,EAAE,2DAA2D;AAC5EC,MAAAA,aAAa,EAAE;KAClB;AACDC,IAAAA,MAAM,EAAE,CACJ;AACIC,MAAAA,oBAAoB,EAAE,KAAK;AAC3BC,MAAAA,UAAU,EAAE;AACRV,QAAAA,cAAc,EAAE;AACZW,UAAAA,KAAK,EAAE;AAACC,YAAAA,IAAI,EAAE;WAAS;AACvBA,UAAAA,IAAI,EAAE,OAAO;AACbC,UAAAA,WAAW,EAAE;AACjB;OACH;AACDD,MAAAA,IAAI,EAAE;AACV,KAAC,CACJ;AACDA,IAAAA,IAAI,EAAE;GACT;AACDf,EAAAA,IAAI,EAAE,mBAAmB;EAczBiB,MAAMA,CAACC,OAAO,EAAE;AACZ,IAAA,MAAMC,QAAQ,GAAGrB,WAAW,CAACsB,iBAAiB,CAACF,OAAO,CAAC;IACvD,MAAMG,OAAO,GAAGF,QAAQ,CAACG,OAAO,CAACC,cAAc,EAAE;AACjD,IAAA,MAAMpB,cAAc,GAAGqB,uBAAuB,CAACN,OAAO,CAACO,OAAO,CAAC,CAAC,CAAC,EAAEtB,cAAc,CAAC;AAClF,IAAA,MAAMuB,cAAc,GAAG,CAAA,CAAA,EAAIC,KAAK,CAACC,IAAI,CAACzB,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAA,CAAE;AACxE,IAAA,MAAM0B,WAAW,GAAG,IAAIC,GAAG,EAAyB;AACpD,IAAA,MAAMC,WAAW,GAAG,IAAID,GAAG,EAAsB;AACjD,IAAA,MAAME,UAAU,GAAG,IAAIF,GAAG,EAAwB;AAClD,IAAA,MAAMG,iBAAiB,GAAG,IAAIH,GAAG,EAA+C;AAChF,IAAA,MAAMI,kBAAkB,GAAG,IAAIC,OAAO,EAAoC;IAE1E,MAAMC,gBAAgB,GAAIC,IAAmB,IAAc;AACvD,MAAA,IAAI,CAACC,EAAE,CAACC,yBAAyB,CAACF,IAAI,CAAC,EAAE;AACrC,QAAA,OAAO,KAAK;AAChB,MAAA;AAEA,MAAA,OAAOA,IAAI,CAACxB,UAAU,CAAC2B,IAAI,CAACC,QAAQ,IAAI;AACpC,QAAA,IAAI,CAACH,EAAE,CAACI,oBAAoB,CAACD,QAAQ,CAAC,EAAE;AACpC,UAAA,OAAO,KAAK;AAChB,QAAA;AAEA,QAAA,MAAMzC,IAAI,GAAGsC,EAAE,CAACK,YAAY,CAACF,QAAQ,CAACzC,IAAI,CAAC,GACrCyC,QAAQ,CAACzC,IAAI,CAAC4C,IAAI,GAClBN,EAAE,CAACO,eAAe,CAACJ,QAAQ,CAACzC,IAAI,CAAC,GAC7ByC,QAAQ,CAACzC,IAAI,CAAC4C,IAAI,GAClB,IAAI;QAEd,IAAI5C,IAAI,KAAK,UAAU,EAAE;AACrB,UAAA,OAAO,KAAK;AAChB,QAAA;QAEA,OAAOyC,QAAQ,CAACK,WAAW,CAACC,IAAI,KAAKT,EAAE,CAACU,UAAU,CAACC,WAAW;AAClE,MAAA,CAAC,CAAC;IACN,CAAC;IAED,MAAMC,0BAA0B,GAAIb,IAAmB,IAAc;AACjE,MAAA,IAAIC,EAAE,CAACK,YAAY,CAACN,IAAI,CAAC,EAAE;AACvB,QAAA,OAAOA,IAAI,CAACO,IAAI,KAAK,oBAAoB;AAC7C,MAAA;AAEA,MAAA,OAAON,EAAE,CAACa,0BAA0B,CAACd,IAAI,CAAC,IAAIA,IAAI,CAACrC,IAAI,CAAC4C,IAAI,KAAK,oBAAoB;IACzF,CAAC;IAED,MAAMQ,wBAAwB,GAAIC,SAAkC,IAAc;AAC9E,MAAA,MAAMC,MAAM,GAAGpB,kBAAkB,CAACqB,GAAG,CAACF,SAAS,CAAC;MAEhD,IAAIC,MAAM,KAAKE,SAAS,EAAE;AACtB,QAAA,OAAOF,MAAM;AACjB,MAAA;AAEA,MAAA,MAAMG,IAAI,GAAGJ,SAAS,CAACK,OAAO,CAACC,IAAI,CAACC,MAAM,IAAItB,EAAE,CAACuB,wBAAwB,CAACD,MAAM,CAAC,CAAC;AAElF,MAAA,IAAI,CAACH,IAAI,EAAEK,IAAI,EAAE;AACb5B,QAAAA,kBAAkB,CAAC6B,GAAG,CAACV,SAAS,EAAE,KAAK,CAAC;AAExC,QAAA,OAAO,KAAK;AAChB,MAAA;MAEA,KAAK,MAAMW,SAAS,IAAIP,IAAI,CAACK,IAAI,CAACG,UAAU,EAAE;AAC1C,QAAA,IAAI,CAAC3B,EAAE,CAAC4B,qBAAqB,CAACF,SAAS,CAAC,EAAE;AACtC,UAAA;AACJ,QAAA;AAEA,QAAA,MAAMG,IAAI,GAAGH,SAAS,CAACI,UAAU;AAEjC,QAAA,IAAI,CAAC9B,EAAE,CAAC+B,gBAAgB,CAACF,IAAI,CAAC,EAAE;AAC5B,UAAA;AACJ,QAAA;AAEA,QAAA,IAAI,CAACjB,0BAA0B,CAACiB,IAAI,CAACC,UAAU,CAAC,EAAE;AAC9C,UAAA;AACJ,QAAA;AAEA,QAAA,IAAID,IAAI,CAACG,SAAS,CAACC,MAAM,GAAG,CAAC,EAAE;AAC3B,UAAA;AACJ,QAAA;AAEA,QAAA,IAAIJ,IAAI,CAACG,SAAS,CAAC,CAAC,CAAC,CAACvB,IAAI,KAAKT,EAAE,CAACU,UAAU,CAACwB,WAAW,EAAE;AACtD,UAAA;AACJ,QAAA;AAEA,QAAA,MAAMC,WAAW,GAAGN,IAAI,CAACG,SAAS,CAACI,KAAK,CAAC,CAAC,CAAC,CAAClC,IAAI,CAACmC,GAAG,IAAIvC,gBAAgB,CAACuC,GAAG,CAAC,CAAC;AAE9E,QAAA,IAAIF,WAAW,EAAE;AACbvC,UAAAA,kBAAkB,CAAC6B,GAAG,CAACV,SAAS,EAAE,IAAI,CAAC;AAEvC,UAAA,OAAO,IAAI;AACf,QAAA;AACJ,MAAA;AAEAnB,MAAAA,kBAAkB,CAAC6B,GAAG,CAACV,SAAS,EAAE,KAAK,CAAC;AAExC,MAAA,OAAO,KAAK;IAChB,CAAC;IAeD,MAAMuB,aAAa,GAAIC,MAAiB,IAAgB;AACpD,MAAA,MAAMvB,MAAM,GAAGtB,UAAU,CAACuB,GAAG,CAACsB,MAAM,CAAC;AAErC,MAAA,IAAIvB,MAAM,EAAE;AACR,QAAA,OAAOA,MAAM;AACjB,MAAA;AAGA,MAAA,MAAMwB,QAAQ,GAAGD,MAAM,CAACE,KAAK,GAAGzC,EAAE,CAAC0C,WAAW,CAACC,KAAK,GAAG5D,OAAO,CAAC6D,gBAAgB,CAACL,MAAM,CAAC,GAAGA,MAAM;AAEhG7C,MAAAA,UAAU,CAAC+B,GAAG,CAACc,MAAM,EAAEC,QAAQ,CAAC;AAEhC,MAAA,OAAOA,QAAQ;IACnB,CAAC;IAeD,MAAMK,aAAa,GAAIN,MAAiB,IAAwB;AAC5D,MAAA,MAAMO,OAAO,GAAGR,aAAa,CAACC,MAAM,CAAC;AACrC,MAAA,MAAMvB,MAAM,GAAGzB,WAAW,CAAC0B,GAAG,CAAC6B,OAAO,CAAC;AAEvC,MAAA,IAAI9B,MAAM,EAAE;AACR,QAAA,OAAOA,MAAM;AACjB,MAAA;AAEA,MAAA,IAAI,EAEA8B,OAAO,CAACL,KAAK,IAGTzC,EAAE,CAAC0C,WAAW,CAACK,MAAM,GACnB/C,EAAE,CAAC0C,WAAW,CAACM,QAAQ,GACvBhD,EAAE,CAAC0C,WAAW,CAACO,QAAQ,GACvBjD,EAAE,CAAC0C,WAAW,CAACQ,WAAW,GAC1BlD,EAAE,CAAC0C,WAAW,CAACS,WAAW,CAC/B,CACJ,EAAE;AACC,QAAA,OAAO,IAAI;AACf,MAAA;MAEA,MAAMC,YAAY,GAAGN,OAAO,CAACO,eAAe,EAAE,IAAI,EAAE;AACpD,MAAA,MAAMC,UAAU,GAAGF,YAAY,CAC1B/B,IAAI,CAACkC,IAAI,IAAIvD,EAAE,CAACwD,mBAAmB,CAACD,IAAI,CAAC,CAAC;AAE/C,MAAA,IAAI,CAACD,UAAU,EAAEG,MAAM,IAAI,CAACzD,EAAE,CAAC0D,WAAW,CAACJ,UAAU,CAACG,MAAM,CAAC,EAAE;AAC3D,QAAA,OAAO,IAAI;AACf,MAAA;AAEA,MAAA,IAAIzD,EAAE,CAACK,YAAY,CAACiD,UAAU,CAAC5F,IAAI,CAAC,IAAI4F,UAAU,CAAC5F,IAAI,CAAC4C,IAAI,KAAK,aAAa,EAAE;AAC5E,QAAA,OAAO,IAAI;AACf,MAAA;AAEA,MAAA,MAAMmC,KAAK,GAAGzC,EAAE,CAAC2D,wBAAwB,CAACL,UAAU,CAAC;MAErD,MAAMM,QAAQ,GAAGC,OAAO,CAACpB,KAAK,GAAGzC,EAAE,CAAC8D,aAAa,CAACC,MAAM,CAAC;AACzD,MAAA,MAAMC,UAAU,GAAGhE,EAAE,CAACiE,iBAAiB,CAACX,UAAU,CAAC,GAAGtD,EAAE,CAACkE,aAAa,CAACZ,UAAU,CAAC,GAAGpC,SAAS;MAC9F,MAAMiD,YAAY,GAAGN,OAAO,CAACG,UAAU,EAAE9D,IAAI,CAACkE,SAAS,IAAI;AACvD,QAAA,MAAM1G,IAAI,GAAG2G,gBAAgB,CAACD,SAAS,CAAC;QAExC,OAAOP,OAAO,CAACnG,IAAI,IAAIG,cAAc,CAACyG,GAAG,CAAC5G,IAAI,CAAC,CAAC;AACpD,MAAA,CAAC,CAAC,CAAC;AAEH,MAAA,MAAM6G,IAAgB,GAAG;AACrBC,QAAAA,QAAQ,EAAE1D,wBAAwB,CAACwC,UAAU,CAACG,MAAM,CAAC;QACrDU,YAAY;QACZP,QAAQ;QACRa,QAAQ,EAAEC,cAAc,CAACpB,UAAU;OACtC;AAED/D,MAAAA,WAAW,CAACkC,GAAG,CAACqB,OAAO,EAAEyB,IAAI,CAAC;AAE9B,MAAA,OAAOA,IAAI;IACf,CAAC;IAeD,MAAMI,kBAAkB,GAAIpC,MAAiB,IAAc;AACvD,MAAA,MAAMO,OAAO,GAAGR,aAAa,CAACC,MAAM,CAAC;AACrC,MAAA,MAAMvB,MAAM,GAAGvB,WAAW,CAACwB,GAAG,CAAC6B,OAAO,CAAC;MAEvC,IAAI9B,MAAM,KAAKE,SAAS,EAAE;AACtB,QAAA,OAAOF,MAAM;AACjB,MAAA;AAEA,MAAA,MAAMuD,IAAI,GAAG1B,aAAa,CAACC,OAAO,CAAC;MAEnC,IAAI,CAACyB,IAAI,EAAE;AACP9E,QAAAA,WAAW,CAACgC,GAAG,CAACqB,OAAO,EAAE,KAAK,CAAC;AAE/B,QAAA,OAAO,KAAK;AAChB,MAAA;AAEA,MAAA,MAAM8B,YAAY,GAAG,CAACL,IAAI,CAACC,QAAQ,IAAI,CAACD,IAAI,CAACX,QAAQ,IAAIW,IAAI,CAACE,QAAQ,IAAI,CAACF,IAAI,CAACJ,YAAY;AAE5F1E,MAAAA,WAAW,CAACgC,GAAG,CAACqB,OAAO,EAAE8B,YAAY,CAAC;AAEtC,MAAA,OAAOA,YAAY;IACvB,CAAC;IAeD,MAAMC,kBAAkB,GAAI9E,IAA+B,IAAuB;AAC9E,MAAA,MAAMiB,MAAM,GAAGrB,iBAAiB,CAACsB,GAAG,CAAClB,IAAI,CAAC;MAE1C,IAAIiB,MAAM,KAAKE,SAAS,EAAE;AACtB,QAAA,OAAOF,MAAM;AACjB,MAAA;MAEA,MAAM8D,MAAM,GAAGjG,QAAQ,CAACkG,qBAAqB,CAAC9D,GAAG,CAAClB,IAAI,CAAC;AAEvD,MAAA,IAAIC,EAAE,CAACa,0BAA0B,CAACiE,MAAM,CAAC,EAAE;QACvC,MAAMvC,MAAM,GAAGxD,OAAO,CAACiG,mBAAmB,CAACF,MAAM,CAACpH,IAAI,CAAC,IAAI,IAAI;AAE/DiC,QAAAA,iBAAiB,CAAC8B,GAAG,CAAC1B,IAAI,EAAEwC,MAAM,CAAC;AAEnC,QAAA,OAAOA,MAAM;AACjB,MAAA;AAEA,MAAA,IAAIvC,EAAE,CAACiF,yBAAyB,CAACH,MAAM,CAAC,EAAE;AACtC,QAAA,MAAMzC,GAAG,GAAGyC,MAAM,CAACI,kBAAkB;AAErC,QAAA,IAAIlF,EAAE,CAACmF,mBAAmB,CAAC9C,GAAG,CAAC,EAAE;UAC7B,MAAME,MAAM,GAAGxD,OAAO,CAACiG,mBAAmB,CAAC3C,GAAG,CAAC,IAAI,IAAI;AAEvD1C,UAAAA,iBAAiB,CAAC8B,GAAG,CAAC1B,IAAI,EAAEwC,MAAM,CAAC;AAEnC,UAAA,OAAOA,MAAM;AACjB,QAAA;AACJ,MAAA;AAEA5C,MAAAA,iBAAiB,CAAC8B,GAAG,CAAC1B,IAAI,EAAE,IAAI,CAAC;AAEjC,MAAA,OAAO,IAAI;IACf,CAAC;AAeD,IAAA,MAAMqF,wBAAwB,GAAGA,CAACC,UAAkB,EAAEtF,IAAmB,KAAK;MAC1EnB,OAAO,CAAC0G,MAAM,CAAC;AACXC,QAAAA,IAAI,EAAE;AACFC,UAAAA,aAAa,EAAEpG,cAAc;AAC7BiG,UAAAA;SACH;AACDI,QAAAA,SAAS,EAAE,iBAAiB;AAC5B1F,QAAAA;AACJ,OAAC,CAAC;IACN,CAAC;AAED,IAAA,MAAM2F,SAAgC,GAAG;MAcrCC,gBAAgBA,CAAC5F,IAA+B,EAAE;QAC9C,IAAIA,IAAI,CAACI,QAAQ,CAAC1B,IAAI,KAAKmH,cAAc,CAACC,UAAU,EAAE;AAClD,UAAA;AACJ,QAAA;QAEA,MAAM;AAACpC,UAAAA;AAAM,SAAC,GAAG1D,IAAI;QAErB,IACI,CAAC0D,MAAM,CAAChF,IAAI,KAAKmH,cAAc,CAACE,cAAc,IAAIrC,MAAM,CAAChF,IAAI,KAAKmH,cAAc,CAACG,aAAa,KAC3FtC,MAAM,CAACuC,MAAM,KAAKjG,IAAI,EAC3B;AACE,UAAA;AACJ,QAAA;AAEA,QAAA,IAAI,CAACkG,eAAe,CAAClG,IAAI,CAAC,EAAE;AACxB,UAAA;AACJ,QAAA;AAEA,QAAA,IAAImG,cAAc,CAACnG,IAAI,CAAC,EAAE;AACtB,UAAA;AACJ,QAAA;AAEA,QAAA,MAAMwC,MAAM,GAAGsC,kBAAkB,CAAC9E,IAAI,CAAC;QAEvC,IAAI,CAACwC,MAAM,EAAE;AACT,UAAA;AACJ,QAAA;AAEA,QAAA,IAAI,CAACoC,kBAAkB,CAACpC,MAAM,CAAC,EAAE;AAC7B,UAAA;AACJ,QAAA;QAEA3D,OAAO,CAAC0G,MAAM,CAAC;AACXC,UAAAA,IAAI,EAAE;AACFC,YAAAA,aAAa,EAAEpG,cAAc;AAC7BiG,YAAAA,UAAU,EAAEtF,IAAI,CAACI,QAAQ,CAACzC;WAC7B;AACD+H,UAAAA,SAAS,EAAE,eAAe;AAC1B1F,UAAAA;AACJ,SAAC,CAAC;MACN,CAAC;MAODoG,gBAAgBA,CAACpG,IAA+B,EAAE;AAC9C,QAAA,IAAIA,IAAI,CAACU,IAAI,KAAK,aAAa,IAAI,CAACV,IAAI,CAACqG,KAAK,CAAC5E,IAAI,EAAE;AACjD,UAAA;AACJ,QAAA;AAEA,QAAA,MAAM6E,eAAe,GAAGtG,IAAI,CAACqG,KAAK,CAAC5E,IAAI;AAEvC,QAAA,KAAK,MAAME,SAAS,IAAI2E,eAAe,CAAC7E,IAAI,EAAE;AAC1C,UAAA,IAAIE,SAAS,CAACjD,IAAI,KAAKmH,cAAc,CAACU,mBAAmB,EAAE;AACvD,YAAA;AACJ,UAAA;UAEA,MAAM;AAACxE,YAAAA;AAAU,WAAC,GAAGJ,SAAS;AAE9B,UAAA,IAAII,UAAU,CAACrD,IAAI,KAAKmH,cAAc,CAACW,oBAAoB,IAAIzE,UAAU,CAAC0E,QAAQ,KAAK,GAAG,EAAE;AACxF,YAAA;AACJ,UAAA;UAEA,MAAM;YAACC,IAAI;AAAEC,YAAAA;AAAK,WAAC,GAAG5E,UAAU;AAEhC,UAAA,IACI2E,IAAI,CAAChI,IAAI,KAAKmH,cAAc,CAACD,gBAAgB,IAC1Cc,IAAI,CAACtG,QAAQ,CAAC1B,IAAI,KAAKmH,cAAc,CAACC,UAAU,EACrD;AACE,YAAA;AACJ,UAAA;UAEA,IAAIY,IAAI,CAACE,MAAM,CAAClI,IAAI,KAAKmH,cAAc,CAACgB,cAAc,EAAE;AACpD,YAAA;AACJ,UAAA;AAEA,UAAA,IAAIF,KAAK,CAACjI,IAAI,KAAKmH,cAAc,CAACE,cAAc,EAAE;AAC9C,YAAA;AACJ,UAAA;UAEA,MAAM;AAACE,YAAAA;AAAM,WAAC,GAAGU,KAAK;AAEtB,UAAA,IAAIV,MAAM,CAACvH,IAAI,KAAKmH,cAAc,CAACD,gBAAgB,EAAE;AACjD,YAAA;AACJ,UAAA;UAEA,IACIK,MAAM,CAACW,MAAM,CAAClI,IAAI,KAAKmH,cAAc,CAACD,gBAAgB,IACnDK,MAAM,CAACW,MAAM,CAACA,MAAM,CAAClI,IAAI,KAAKmH,cAAc,CAACgB,cAAc,IAC3DZ,MAAM,CAACW,MAAM,CAACxG,QAAQ,CAAC1B,IAAI,KAAKmH,cAAc,CAACC,UAAU,IACzDG,MAAM,CAACW,MAAM,CAACxG,QAAQ,CAACzC,IAAI,KAAK+I,IAAI,CAACtG,QAAQ,CAACzC,IAAI,EACvD;AACE,YAAA;AACJ,UAAA;AAEA,UAAA,IACIsI,MAAM,CAAC7F,QAAQ,CAAC1B,IAAI,KAAKmH,cAAc,CAACC,UAAU,IAC/CG,MAAM,CAAC7F,QAAQ,CAACzC,IAAI,KAAK,MAAM,EACpC;AACE,YAAA;AACJ,UAAA;AAEA,UAAA,IAAIgJ,KAAK,CAAC1E,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA;AACJ,UAAA;UAEA,MAAM4E,QAAQ,GAAGC,gBAAgB,CAACJ,KAAK,CAAC1E,SAAS,CAAC,CAAC,CAAwB,CAAC;AAE5E,UAAA,IAAI6E,QAAQ,CAACpI,IAAI,KAAKmH,cAAc,CAACgB,cAAc,EAAE;AACjD,YAAA;AACJ,UAAA;UAEAxB,wBAAwB,CAACqB,IAAI,CAACtG,QAAQ,CAACzC,IAAI,EAAEoE,UAAU,CAAC;AAC5D,QAAA;AACJ,MAAA;KACH;AAED,IAAA,OAAO4D,SAAS;AACpB,EAAA;AACJ,CAAC;;;;"}
1
+ {"version":3,"file":"no-unbound-method.js","sources":["../../../../src/rules/custom/no-unbound-method.ts"],"sourcesContent":["import {AST_NODE_TYPES, ESLintUtils} from '@typescript-eslint/utils';\nimport ts from 'typescript';\n\nimport {\n DEFAULT_DECORATORS,\n getDecoratorName,\n isCallbackUsage,\n isThisBindCall,\n methodUsesThis,\n normalizeDecoratorNames,\n unwrapExpression\n} from './utils/no-unbound-method-utils';\n\nimport type {TSESLint, TSESTree} from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n name => `https://github.com/nfqde/eslint-config-nfq/blob/master/docs/rules/${name}.md`\n);\n\ntype RuleOptions = [\n {decoratorNames?: string[]}?\n];\n\ntype MessageIds = 'constructorBind' | 'unboundMethod';\n\ntype MethodInfo = {\n autoBind: boolean;\n hasDecorator: boolean;\n isStatic: boolean;\n usesThis: boolean;\n};\n\nexport const noUnboundMethod = createRule<RuleOptions, MessageIds>({\n defaultOptions: [{decoratorNames: DEFAULT_DECORATORS}],\n meta: {\n docs: {description: 'Warn when unbound class methods that use this are passed as callbacks.'},\n messages: {\n constructorBind: 'Do not bind in the constructor; prefer {{decoratorName}}.',\n unboundMethod: 'Method {{methodName}} uses this and is passed unbound. Add {{decoratorName}} or bind it.'\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n decoratorNames: {\n items: {type: 'string'},\n type: 'array',\n uniqueItems: true\n }\n },\n type: 'object'\n }\n ],\n type: 'problem'\n },\n name: 'no-unbound-method',\n /**\n * Creates the rule listeners and initializes caches for symbol analysis.\n * It wires the parser services to the TypeScript type checker and configures decorator handling.\n * It returns ESLint listeners that report unbound method usage in callbacks and constructor binding.\n *\n * @param context Rule context used to access parser services and report issues.\n * @returns The rule listener map for this rule.\n *\n * @example\n * ```tsx\n * const listeners = rule.create(context);\n * ```\n */\n // eslint-disable-next-line max-lines-per-function\n create(context) {\n const services = ESLintUtils.getParserServices(context);\n const checker = services.program.getTypeChecker();\n const decoratorNames = normalizeDecoratorNames(context.options[0]?.decoratorNames);\n const decoratorLabel = `@${Array.from(decoratorNames)[0] ?? 'autobind'}`;\n const methodCache = new Map<ts.Symbol, MethodInfo>();\n const reportCache = new Map<ts.Symbol, boolean>();\n const aliasCache = new Map<ts.Symbol, ts.Symbol>();\n const memberSymbolCache = new Map<TSESTree.MemberExpression, ts.Symbol | null>();\n const classAutoBindCache = new WeakMap<ts.ClassLikeDeclaration, boolean>();\n\n const isAutoBindOption = (node: ts.Expression): boolean => {\n if (!ts.isObjectLiteralExpression(node)) {\n return false;\n }\n\n return node.properties.some(property => {\n if (!ts.isPropertyAssignment(property)) {\n return false;\n }\n\n // eslint-disable-next-line no-nested-ternary\n const name = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n\n if (name !== 'autoBind') {\n return false;\n }\n\n return property.initializer.kind === ts.SyntaxKind.TrueKeyword;\n });\n };\n\n const isMakeAutoObservableCallee = (node: ts.Expression): boolean => {\n if (ts.isIdentifier(node)) {\n return node.text === 'makeAutoObservable';\n }\n\n return ts.isPropertyAccessExpression(node) && node.name.text === 'makeAutoObservable';\n };\n\n const hasAutoBindInConstructor = (classDecl: ts.ClassLikeDeclaration): boolean => {\n const cached = classAutoBindCache.get(classDecl);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const ctor = classDecl.members.find(member => ts.isConstructorDeclaration(member));\n\n if (!ctor?.body) {\n classAutoBindCache.set(classDecl, false);\n\n return false;\n }\n\n for (const statement of ctor.body.statements) {\n if (!ts.isExpressionStatement(statement)) {\n continue;\n }\n\n const expr = statement.expression;\n\n if (!ts.isCallExpression(expr)) {\n continue;\n }\n\n if (!isMakeAutoObservableCallee(expr.expression)) {\n continue;\n }\n\n if (expr.arguments.length < 2) {\n continue;\n }\n\n if (expr.arguments[0].kind !== ts.SyntaxKind.ThisKeyword) {\n continue;\n }\n\n const hasAutoBind = expr.arguments.slice(1).some(arg => isAutoBindOption(arg));\n\n if (hasAutoBind) {\n classAutoBindCache.set(classDecl, true);\n\n return true;\n }\n }\n\n classAutoBindCache.set(classDecl, false);\n\n return false;\n };\n\n /**\n * Resolves an alias symbol to its original symbol and caches the result for reuse.\n * This function avoids repeated TypeScript checker work by memoizing alias resolutions.\n * It ensures downstream analysis consistently uses the same canonical symbol instance.\n *\n * @param symbol The symbol that may be an alias and needs resolution.\n * @returns The resolved canonical symbol for further analysis.\n *\n * @example\n * ```tsx\n * const resolved = resolveSymbol(methodSymbol);\n * ```\n */\n const resolveSymbol = (symbol: ts.Symbol): ts.Symbol => {\n const cached = aliasCache.get(symbol);\n\n if (cached) {\n return cached;\n }\n\n // eslint-disable-next-line no-bitwise\n const resolved = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;\n\n aliasCache.set(symbol, resolved);\n\n return resolved;\n };\n\n /**\n * Computes metadata about a method-like symbol and caches the result for later use.\n * This function filters out non-method symbols and constructor declarations before gathering details.\n * It also determines decorator presence, static status, and whether the method uses `this`.\n *\n * @param symbol The symbol to inspect for method information.\n * @returns The resolved method info or null when the symbol is not a supported method.\n *\n * @example\n * ```tsx\n * const info = getMethodInfo(methodSymbol);\n * ```\n */\n const getMethodInfo = (symbol: ts.Symbol): MethodInfo | null => {\n const aliased = resolveSymbol(symbol);\n const cached = methodCache.get(aliased);\n\n if (cached) {\n return cached;\n }\n\n if (!(\n // eslint-disable-next-line no-bitwise\n aliased.flags\n & (\n // eslint-disable-next-line no-bitwise\n ts.SymbolFlags.Method\n | ts.SymbolFlags.Property\n | ts.SymbolFlags.Function\n | ts.SymbolFlags.GetAccessor\n | ts.SymbolFlags.SetAccessor\n )\n )) {\n return null;\n }\n\n const declarations = aliased.getDeclarations() ?? [];\n const methodDecl = declarations\n .find(decl => ts.isMethodDeclaration(decl));\n\n if (!methodDecl?.parent || !ts.isClassLike(methodDecl.parent)) {\n return null;\n }\n\n if (ts.isIdentifier(methodDecl.name) && methodDecl.name.text === 'constructor') {\n return null;\n }\n\n const flags = ts.getCombinedModifierFlags(methodDecl);\n // eslint-disable-next-line no-bitwise\n const isStatic = Boolean(flags & ts.ModifierFlags.Static);\n const decorators = ts.canHaveDecorators(methodDecl) ? ts.getDecorators(methodDecl) : undefined;\n const hasDecorator = Boolean(decorators?.some(decorator => {\n const name = getDecoratorName(decorator);\n\n return Boolean(name && decoratorNames.has(name));\n }));\n\n const info: MethodInfo = {\n autoBind: hasAutoBindInConstructor(methodDecl.parent),\n hasDecorator,\n isStatic,\n usesThis: methodUsesThis(methodDecl)\n };\n\n methodCache.set(aliased, info);\n\n return info;\n };\n\n /**\n * Determines whether a symbol should be reported as an unbound method.\n * It resolves aliases and consults cached results to avoid repeated analysis.\n * It evaluates method metadata to ensure only non-static methods that use `this` and lack decorators are flagged.\n *\n * @param symbol The symbol to evaluate for reporting eligibility.\n * @returns True when the symbol represents an unbound method that should be reported.\n *\n * @example\n * ```tsx\n * const shouldReport = shouldReportSymbol(methodSymbol);\n * ```\n */\n const shouldReportSymbol = (symbol: ts.Symbol): boolean => {\n const aliased = resolveSymbol(symbol);\n const cached = reportCache.get(aliased);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const info = getMethodInfo(aliased);\n\n if (!info) {\n reportCache.set(aliased, false);\n\n return false;\n }\n\n const shouldReport = !info.autoBind && !info.isStatic && info.usesThis && !info.hasDecorator;\n\n reportCache.set(aliased, shouldReport);\n\n return shouldReport;\n };\n\n /**\n * Resolves the TypeScript symbol associated with a member expression node.\n * It caches the resolved symbol to minimize repeated checker lookups.\n * It supports both property access and string-literal element access expressions.\n *\n * @param node The member expression node to resolve into a symbol.\n * @returns The resolved symbol, or null when no symbol can be determined.\n *\n * @example\n * ```tsx\n * const symbol = getSymbolForMember(memberExpression);\n * ```\n */\n const getSymbolForMember = (node: TSESTree.MemberExpression): ts.Symbol | null => {\n const cached = memberSymbolCache.get(node);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const tsNode = services.esTreeNodeToTSNodeMap.get(node);\n\n if (ts.isPropertyAccessExpression(tsNode)) {\n const symbol = checker.getSymbolAtLocation(tsNode.name) ?? null;\n\n memberSymbolCache.set(node, symbol);\n\n return symbol;\n }\n\n if (ts.isElementAccessExpression(tsNode)) {\n const arg = tsNode.argumentExpression;\n\n if (ts.isStringLiteralLike(arg)) {\n const symbol = checker.getSymbolAtLocation(arg) ?? null;\n\n memberSymbolCache.set(node, symbol);\n\n return symbol;\n }\n }\n\n memberSymbolCache.set(node, null);\n\n return null;\n };\n\n /**\n * Reports a constructor binding assignment for a method name.\n * It formats the report data with the decorator label and method name.\n * It delegates to the ESLint context to surface the diagnostic at the provided node.\n *\n * @param methodName The name of the method that was bound in the constructor.\n * @param node The AST node that represents the binding expression.\n *\n * @example\n * ```tsx\n * reportConstructorBinding('handleClick', expressionNode);\n * ```\n */\n const reportConstructorBinding = (methodName: string, node: TSESTree.Node) => {\n context.report({\n data: {\n decoratorName: decoratorLabel,\n methodName\n },\n messageId: 'constructorBind',\n node\n });\n };\n\n const listeners: TSESLint.RuleListener = {\n /**\n * Processes a member expression node to determine whether it represents an unbound method usage that\n * should be reported. It performs multiple early returns based on node shape, parent usage, callback context,\n * binding checks, and symbol eligibility. It ultimately reports a linting issue when all conditions\n * indicate a problematic unbound method reference.\n *\n * @param node The member expression node to analyze for unbound method usage.\n *\n * @example\n * ```tsx\n * MemberExpression(node);\n * ```\n */\n MemberExpression(node: TSESTree.MemberExpression) {\n if (node.property.type !== AST_NODE_TYPES.Identifier) {\n return;\n }\n\n const {parent} = node;\n\n if (\n (parent.type === AST_NODE_TYPES.CallExpression || parent.type === AST_NODE_TYPES.NewExpression)\n && parent.callee === node\n ) {\n return;\n }\n\n if (!isCallbackUsage(node)) {\n return;\n }\n\n if (isThisBindCall(node)) {\n return;\n }\n\n const symbol = getSymbolForMember(node);\n\n if (!symbol) {\n return;\n }\n\n if (!shouldReportSymbol(symbol)) {\n return;\n }\n\n context.report({\n data: {\n decoratorName: decoratorLabel,\n methodName: node.property.name\n },\n messageId: 'unboundMethod',\n node\n });\n },\n /**\n * Inspects constructor method definitions to detect assignments where a class method\n * is bound to `this` via `.bind(this)`, and reports such bindings for further handling.\n *\n * @param node The method definition node to analyze.\n */\n MethodDefinition(node: TSESTree.MethodDefinition) {\n if (node.kind !== 'constructor' || !node.value.body) {\n return;\n }\n\n const constructorBody = node.value.body;\n\n for (const statement of constructorBody.body) {\n if (statement.type !== AST_NODE_TYPES.ExpressionStatement) {\n continue;\n }\n\n const {expression} = statement;\n\n if (expression.type !== AST_NODE_TYPES.AssignmentExpression || expression.operator !== '=') {\n continue;\n }\n\n const {left, right} = expression;\n\n if (\n left.type !== AST_NODE_TYPES.MemberExpression\n || left.property.type !== AST_NODE_TYPES.Identifier\n ) {\n continue;\n }\n\n if (left.object.type !== AST_NODE_TYPES.ThisExpression) {\n continue;\n }\n\n if (right.type !== AST_NODE_TYPES.CallExpression) {\n continue;\n }\n\n const {callee} = right;\n\n if (callee.type !== AST_NODE_TYPES.MemberExpression) {\n continue;\n }\n\n if (\n callee.object.type !== AST_NODE_TYPES.MemberExpression\n || callee.object.object.type !== AST_NODE_TYPES.ThisExpression\n || callee.object.property.type !== AST_NODE_TYPES.Identifier\n || callee.object.property.name !== left.property.name\n ) {\n continue;\n }\n\n if (\n callee.property.type !== AST_NODE_TYPES.Identifier\n || callee.property.name !== 'bind'\n ) {\n continue;\n }\n\n if (right.arguments.length === 0) {\n continue;\n }\n\n const firstArg = unwrapExpression(right.arguments[0] as TSESTree.Expression);\n\n if (firstArg.type !== AST_NODE_TYPES.ThisExpression) {\n continue;\n }\n\n reportConstructorBinding(left.property.name, expression);\n }\n }\n };\n\n return listeners;\n }\n});"],"names":["createRule","ESLintUtils","RuleCreator","name","noUnboundMethod","defaultOptions","decoratorNames","DEFAULT_DECORATORS","meta","docs","description","messages","constructorBind","unboundMethod","schema","additionalProperties","properties","items","type","uniqueItems","create","context","services","getParserServices","checker","program","getTypeChecker","normalizeDecoratorNames","options","decoratorLabel","Array","from","methodCache","Map","reportCache","aliasCache","memberSymbolCache","classAutoBindCache","WeakMap","isAutoBindOption","node","ts","isObjectLiteralExpression","some","property","isPropertyAssignment","isIdentifier","text","isStringLiteral","initializer","kind","SyntaxKind","TrueKeyword","isMakeAutoObservableCallee","isPropertyAccessExpression","hasAutoBindInConstructor","classDecl","cached","get","undefined","ctor","members","find","member","isConstructorDeclaration","body","set","statement","statements","isExpressionStatement","expr","expression","isCallExpression","arguments","length","ThisKeyword","hasAutoBind","slice","arg","resolveSymbol","symbol","resolved","flags","SymbolFlags","Alias","getAliasedSymbol","getMethodInfo","aliased","Method","Property","Function","GetAccessor","SetAccessor","declarations","getDeclarations","methodDecl","decl","isMethodDeclaration","parent","isClassLike","getCombinedModifierFlags","isStatic","Boolean","ModifierFlags","Static","decorators","canHaveDecorators","getDecorators","hasDecorator","decorator","getDecoratorName","has","info","autoBind","usesThis","methodUsesThis","shouldReportSymbol","shouldReport","getSymbolForMember","tsNode","esTreeNodeToTSNodeMap","getSymbolAtLocation","isElementAccessExpression","argumentExpression","isStringLiteralLike","reportConstructorBinding","methodName","report","data","decoratorName","messageId","listeners","MemberExpression","AST_NODE_TYPES","Identifier","CallExpression","NewExpression","callee","isCallbackUsage","isThisBindCall","MethodDefinition","value","constructorBody","ExpressionStatement","AssignmentExpression","operator","left","right","object","ThisExpression","firstArg","unwrapExpression"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  const nfqPluginRules$1 = {
2
2
  '@nfq/cypress-mount-hook': 'error',
3
- '@nfq/require-getcy': 'error'
3
+ '@nfq/require-getcy': 'warn'
4
4
  };
5
5
 
6
6
  export { nfqPluginRules$1 as nfqPluginRules };
@@ -1 +1 @@
1
- {"version":3,"file":"nfq.js","sources":["../../../../../src/rules/cypress/plugins/nfq.ts"],"sourcesContent":["export const nfqPluginRules = {\n '@nfq/cypress-mount-hook': 'error',\n '@nfq/require-getcy': 'error'\n};"],"names":["nfqPluginRules"],"mappings":"AAAO,MAAMA,gBAAc,GAAG;AAC1B,EAAA,yBAAyB,EAAE,OAAO;AAClC,EAAA,oBAAoB,EAAE;AAC1B;;;;"}
1
+ {"version":3,"file":"nfq.js","sources":["../../../../../src/rules/cypress/plugins/nfq.ts"],"sourcesContent":["export const nfqPluginRules = {\n '@nfq/cypress-mount-hook': 'error',\n '@nfq/require-getcy': 'warn'\n};"],"names":["nfqPluginRules"],"mappings":"AAAO,MAAMA,gBAAc,GAAG;AAC1B,EAAA,yBAAyB,EAAE,OAAO;AAClC,EAAA,oBAAoB,EAAE;AAC1B;;;;"}
@@ -0,0 +1,14 @@
1
+ const storybookResets = {
2
+ '@nfq/component-file-structure': 'off',
3
+ '@stylistic/newline-per-chained-call': 'off',
4
+ '@typescript-eslint/no-unused-expression': 'off',
5
+ '@typescript-eslint/no-unused-expressions': 'off',
6
+ 'max-lines': 'off',
7
+ 'promise/always-return': 'off',
8
+ 'promise/catch-or-return': 'off',
9
+ 'promise/prefer-await-to-callbacks': 'off',
10
+ 'promise/prefer-await-to-then': 'off'
11
+ };
12
+
13
+ export { storybookResets };
14
+ //# sourceMappingURL=resets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resets.js","sources":["../../../../../src/rules/storybook/overrides/resets.ts"],"sourcesContent":["export const storybookResets = {\n '@nfq/component-file-structure': 'off',\n '@stylistic/newline-per-chained-call': 'off',\n '@typescript-eslint/no-unused-expression': 'off',\n '@typescript-eslint/no-unused-expressions': 'off',\n 'max-lines': 'off',\n 'promise/always-return': 'off',\n 'promise/catch-or-return': 'off',\n 'promise/prefer-await-to-callbacks': 'off',\n 'promise/prefer-await-to-then': 'off'\n};"],"names":["storybookResets"],"mappings":"AAAO,MAAMA,eAAe,GAAG;AAC3B,EAAA,+BAA+B,EAAE,KAAK;AACtC,EAAA,qCAAqC,EAAE,KAAK;AAC5C,EAAA,yCAAyC,EAAE,KAAK;AAChD,EAAA,0CAA0C,EAAE,KAAK;AACjD,EAAA,WAAW,EAAE,KAAK;AAClB,EAAA,uBAAuB,EAAE,KAAK;AAC9B,EAAA,yBAAyB,EAAE,KAAK;AAChC,EAAA,mCAAmC,EAAE,KAAK;AAC1C,EAAA,8BAA8B,EAAE;AACpC;;;;"}
package/dist/index.js CHANGED
@@ -514,6 +514,7 @@ const importRules = {
514
514
  'import/no-unassigned-import': 0,
515
515
  'import/no-unresolved': [2, {
516
516
  caseSensitive: true,
517
+ caseSensitiveStrict: false,
517
518
  commonjs: true,
518
519
  ignore: ['@app/features']
519
520
  }],
@@ -690,6 +691,7 @@ const jsdoc = {
690
691
  };
691
692
 
692
693
  const nfq = {
694
+ '@nfq/hexagonal-dependency-direction': 'error',
693
695
  '@nfq/no-empty-lines-in-objects': 'error',
694
696
  '@nfq/no-magic-numbers': ['error', {
695
697
  detectObjects: false,
@@ -1034,7 +1036,7 @@ const cypress = {
1034
1036
 
1035
1037
  const nfqPluginRules$1 = {
1036
1038
  '@nfq/cypress-mount-hook': 'error',
1037
- '@nfq/require-getcy': 'error'
1039
+ '@nfq/require-getcy': 'warn'
1038
1040
  };
1039
1041
 
1040
1042
  const cypressPluginRules = {
@@ -1653,6 +1655,18 @@ const tsRules = {
1653
1655
  ...nfqRules
1654
1656
  };
1655
1657
 
1658
+ const storybookResets = {
1659
+ '@nfq/component-file-structure': 'off',
1660
+ '@stylistic/newline-per-chained-call': 'off',
1661
+ '@typescript-eslint/no-unused-expression': 'off',
1662
+ '@typescript-eslint/no-unused-expressions': 'off',
1663
+ 'max-lines': 'off',
1664
+ 'promise/always-return': 'off',
1665
+ 'promise/catch-or-return': 'off',
1666
+ 'promise/prefer-await-to-callbacks': 'off',
1667
+ 'promise/prefer-await-to-then': 'off'
1668
+ };
1669
+
1656
1670
  const globals = {
1657
1671
  after: false,
1658
1672
  afterEach: false,
@@ -5018,6 +5032,35 @@ const NFQEslintConfig = [settings, {
5018
5032
  ...tsRules,
5019
5033
  ...typescriptRuleResets
5020
5034
  }
5035
+ }, {
5036
+ files: ['**/*.stories.{ts,cts,mts,tsx}'],
5037
+ languageOptions: {
5038
+ ecmaVersion: 'latest',
5039
+ globals,
5040
+ parser: tsParser__namespace,
5041
+ parserOptions: {
5042
+ ecmaFeatures: {
5043
+ jsx: true
5044
+ },
5045
+ ecmaVersion: 'latest',
5046
+ project: '**/tsconfig*.json'
5047
+ }
5048
+ },
5049
+ linterOptions: {
5050
+ reportUnusedDisableDirectives: 'error',
5051
+ reportUnusedInlineConfigs: 'error'
5052
+ },
5053
+ name: 'NFQ ESLint TS Story Config',
5054
+ plugins: tsPlugins,
5055
+ rules: {
5056
+ ...commonEslintRules,
5057
+ ...commonPluginRules,
5058
+ ...nodeRules,
5059
+ ...reactPluginRules,
5060
+ ...tsRules,
5061
+ ...typescriptRuleResets,
5062
+ ...storybookResets
5063
+ }
5021
5064
  }, {
5022
5065
  files: ['**/*.cy.{ts,cts,mts,tsx}'],
5023
5066
  languageOptions: {