From be6282434b05b12f338d31558d1793b07e3d765d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltr=C3=A1n?= Date: Tue, 16 Apr 2024 12:25:17 +0200 Subject: [PATCH 1/6] feat: export meta info --- lib/index.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/index.ts b/lib/index.ts index c270f91d..4c3fc4bd 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,7 +1,15 @@ +import packageMetadata from '../package.json'; + import configs from './configs'; import rules from './rules'; -export = { +const plugin = { + meta: { + name: packageMetadata.name, + version: packageMetadata.version, + }, configs, rules, }; + +export default plugin; From 4aa369055a6039ad36115f80081fa39003944ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltr=C3=A1n?= Date: Thu, 18 Apr 2024 18:02:10 +0200 Subject: [PATCH 2/6] chore: export config with plugins var --- lib/configs/angular.ts | 1 - lib/configs/dom.ts | 1 - lib/configs/marko.ts | 1 - lib/configs/react.ts | 1 - lib/configs/vue.ts | 1 - lib/index.ts | 9 +++++++++ tools/generate-configs/index.ts | 3 ++- 7 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/configs/angular.ts b/lib/configs/angular.ts index 270e4d48..6243b224 100644 --- a/lib/configs/angular.ts +++ b/lib/configs/angular.ts @@ -3,7 +3,6 @@ // YOU CAN REGENERATE IT USING npm run generate:configs export = { - plugins: ['testing-library'], rules: { 'testing-library/await-async-events': [ 'error', diff --git a/lib/configs/dom.ts b/lib/configs/dom.ts index ed568225..6d556a3d 100644 --- a/lib/configs/dom.ts +++ b/lib/configs/dom.ts @@ -3,7 +3,6 @@ // YOU CAN REGENERATE IT USING npm run generate:configs export = { - plugins: ['testing-library'], rules: { 'testing-library/await-async-events': [ 'error', diff --git a/lib/configs/marko.ts b/lib/configs/marko.ts index 066c3498..75de63ca 100644 --- a/lib/configs/marko.ts +++ b/lib/configs/marko.ts @@ -3,7 +3,6 @@ // YOU CAN REGENERATE IT USING npm run generate:configs export = { - plugins: ['testing-library'], rules: { 'testing-library/await-async-events': [ 'error', diff --git a/lib/configs/react.ts b/lib/configs/react.ts index 275a0c3a..5d17f309 100644 --- a/lib/configs/react.ts +++ b/lib/configs/react.ts @@ -3,7 +3,6 @@ // YOU CAN REGENERATE IT USING npm run generate:configs export = { - plugins: ['testing-library'], rules: { 'testing-library/await-async-events': [ 'error', diff --git a/lib/configs/vue.ts b/lib/configs/vue.ts index fdf8bfb7..ed34e7a3 100644 --- a/lib/configs/vue.ts +++ b/lib/configs/vue.ts @@ -3,7 +3,6 @@ // YOU CAN REGENERATE IT USING npm run generate:configs export = { - plugins: ['testing-library'], rules: { 'testing-library/await-async-events': [ 'error', diff --git a/lib/index.ts b/lib/index.ts index 4c3fc4bd..2972d01b 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -12,4 +12,13 @@ const plugin = { rules, }; +// TODO: type this with TSESLint.Linter.RuleEntry when upgraded to ESLint v9 +const pluginConfigs: Record = {}; +for (const [key, config] of Object.entries(configs)) { + pluginConfigs[key] = { + ...config, + plugins: { 'testing-library': plugin }, + }; +} + export default plugin; diff --git a/tools/generate-configs/index.ts b/tools/generate-configs/index.ts index 87c773c2..930cb4ec 100644 --- a/tools/generate-configs/index.ts +++ b/tools/generate-configs/index.ts @@ -33,7 +33,8 @@ const getRecommendedRulesForTestingFramework = ( SUPPORTED_TESTING_FRAMEWORKS.forEach((framework) => { const specificFrameworkConfig: LinterConfig = { - plugins: ['testing-library'], + // "plugins" property must be assigned after defining the plugin variable in the "lib/index.ts" + // https://eslint.org/docs/latest/extend/plugin-migration-flat-config#migrating-configs-for-flat-config rules: getRecommendedRulesForTestingFramework(framework), }; From 5307539c1680d56c8bdc38d9b3d49356bb92bdea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltr=C3=A1n?= Date: Sun, 21 Apr 2024 16:47:04 +0200 Subject: [PATCH 3/6] test: set roots to tests folder --- jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.config.js b/jest.config.js index f546d6ef..61990593 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,5 @@ module.exports = { - testMatch: ['**/tests/**/*.test.ts'], + roots: ['/tests/'], transform: { '^.+\\.ts$': '@swc/jest', }, From 4e1b524793eb71ca332d8e21d4a5bfdcccd1f26a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltr=C3=A1n?= Date: Sun, 21 Apr 2024 16:52:41 +0200 Subject: [PATCH 4/6] chore: assign plugins to configs properly --- lib/index.ts | 15 +++++++++------ tests/index.test.ts | 6 ++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/index.ts b/lib/index.ts index 2972d01b..4c8adeb3 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -2,7 +2,9 @@ import packageMetadata from '../package.json'; import configs from './configs'; import rules from './rules'; +import { type SupportedTestingFramework } from './utils'; +// TODO: type properly when upgraded to ESLint v9 const plugin = { meta: { name: packageMetadata.name, @@ -13,12 +15,13 @@ const plugin = { }; // TODO: type this with TSESLint.Linter.RuleEntry when upgraded to ESLint v9 -const pluginConfigs: Record = {}; -for (const [key, config] of Object.entries(configs)) { - pluginConfigs[key] = { - ...config, - plugins: { 'testing-library': plugin }, +Object.keys(plugin.configs).forEach((configKey) => { + plugin.configs[configKey as SupportedTestingFramework].plugins = { + // TODO: remove ignored error when properly typed with ESLint v9 + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + 'testing-library': plugin, }; -} +}); export default plugin; diff --git a/tests/index.test.ts b/tests/index.test.ts index 6788a479..2ee632cf 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -43,6 +43,12 @@ it('should have the correct amount of rules', () => { } }); +it('should refer to the plugin itself on each config', () => { + Object.entries(plugin.configs).forEach(([_, config]) => { + expect(config.plugins).toEqual({ 'testing-library': plugin }); + }); +}); + it('should export configs that refer to actual rules', () => { const allConfigs = plugin.configs; From 8a74a94d1b2d646b4f251dd4535816ac060265f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltr=C3=A1n?= Date: Sun, 28 Apr 2024 18:14:05 +0200 Subject: [PATCH 5/6] fix: main entrypoint --- lib/index.ts | 9 ++++++--- package.json | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/index.ts b/lib/index.ts index 4c8adeb3..61f1c0c5 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,4 +1,7 @@ -import packageMetadata from '../package.json'; +import { + name as packageName, + version as packageVersion, +} from '../package.json'; import configs from './configs'; import rules from './rules'; @@ -7,8 +10,8 @@ import { type SupportedTestingFramework } from './utils'; // TODO: type properly when upgraded to ESLint v9 const plugin = { meta: { - name: packageMetadata.name, - version: packageMetadata.version, + name: packageName, + version: packageVersion, }, configs, rules, diff --git a/package.json b/package.json index 9b0abbc9..93adb393 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "README.md", "LICENSE" ], - "main": "./dist/index.js", + "main": "./dist/lib/index.js", "scripts": { "prebuild": "del-cli dist", "build": "tsc", From 567bd9ed2d32c19b1151df0f5caaa4bca45c042a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltr=C3=A1n?= Date: Sun, 28 Apr 2024 18:32:02 +0200 Subject: [PATCH 6/6] fix: use CJS export --- lib/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.ts b/lib/index.ts index 61f1c0c5..7c0c2d87 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -27,4 +27,4 @@ Object.keys(plugin.configs).forEach((configKey) => { }; }); -export default plugin; +export = plugin;