This commit is contained in:
Nathan Bierema 2025-10-14 10:16:27 -04:00
parent 2a944c6e23
commit 05527916ad
8 changed files with 270 additions and 279 deletions

View File

@ -1,4 +1,5 @@
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js'; import eslint from '@eslint/js';
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
export default [eslint.configs.recommended, eslintConfigPrettier]; export default defineConfig([eslint.configs.recommended, eslintConfigPrettier]);

View File

@ -1,11 +1,11 @@
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js'; import eslint from '@eslint/js';
import react from 'eslint-plugin-react'; import react from 'eslint-plugin-react';
import { fixupPluginRules } from '@eslint/compat'; import reactHooks from 'eslint-plugin-react-hooks';
import eslintPluginReactHooks from 'eslint-plugin-react-hooks';
import jest from 'eslint-plugin-jest'; import jest from 'eslint-plugin-jest';
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
export default [ export default defineConfig([
{ {
files: ['test/**/*.js', 'test/**/*.jsx'], files: ['test/**/*.js', 'test/**/*.jsx'],
...eslint.configs.recommended, ...eslint.configs.recommended,
@ -25,8 +25,9 @@ export default [
{ {
files: ['test/**/*.js', 'test/**/*.jsx'], files: ['test/**/*.js', 'test/**/*.jsx'],
plugins: { plugins: {
'react-hooks': fixupPluginRules(eslintPluginReactHooks), 'react-hooks': reactHooks,
}, },
extends: ['react-hooks/recommended'],
}, },
{ {
files: ['test/**/*.js', 'test/**/*.jsx'], files: ['test/**/*.js', 'test/**/*.jsx'],
@ -40,4 +41,4 @@ export default [
files: ['test/**/*.js', 'test/**/*.jsx'], files: ['test/**/*.js', 'test/**/*.jsx'],
...eslintConfigPrettier, ...eslintConfigPrettier,
}, },
]; ]);

View File

@ -1,55 +1,57 @@
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js'; import eslint from '@eslint/js';
import tseslint from 'typescript-eslint'; import tseslint from 'typescript-eslint';
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
export default (tsconfigRootDir, files = ['**/*.ts'], project = true) => [ export default (tsconfigRootDir, files = ['**/*.ts'], project = true) =>
{ defineConfig([
files, {
...eslint.configs.recommended, files,
}, ...eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked.map((config) => ({ },
files, ...tseslint.configs.recommendedTypeChecked.map((config) => ({
...config, files,
})), ...config,
...tseslint.configs.stylisticTypeChecked.map((config) => ({ })),
files, ...tseslint.configs.stylisticTypeChecked.map((config) => ({
...config, files,
})), ...config,
{ })),
files, {
languageOptions: { files,
parserOptions: { languageOptions: {
project, parserOptions: {
tsconfigRootDir, project,
tsconfigRootDir,
},
}, },
}, },
}, {
{ files,
files, ...eslintConfigPrettier,
...eslintConfigPrettier,
},
{
files,
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
}, },
}, {
]; files,
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
},
},
]);

View File

@ -1,64 +1,66 @@
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js'; import eslint from '@eslint/js';
import tseslint from 'typescript-eslint'; import tseslint from 'typescript-eslint';
import jest from 'eslint-plugin-jest'; import jest from 'eslint-plugin-jest';
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
export default (tsconfigRootDir) => [ export default (tsconfigRootDir) =>
{ defineConfig([
files: ['test/**/*.ts'], {
...eslint.configs.recommended, files: ['test/**/*.ts'],
}, ...eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked.map((config) => ({ },
files: ['test/**/*.ts'], ...tseslint.configs.recommendedTypeChecked.map((config) => ({
...config, files: ['test/**/*.ts'],
})), ...config,
...tseslint.configs.stylisticTypeChecked.map((config) => ({ })),
files: ['test/**/*.ts'], ...tseslint.configs.stylisticTypeChecked.map((config) => ({
...config, files: ['test/**/*.ts'],
})), ...config,
{ })),
files: ['test/**/*.ts'], {
languageOptions: { files: ['test/**/*.ts'],
parserOptions: { languageOptions: {
project: ['./tsconfig.test.json'], parserOptions: {
tsconfigRootDir, project: ['./tsconfig.test.json'],
tsconfigRootDir,
},
}, },
}, },
}, {
{ files: ['test/**/*.ts'],
files: ['test/**/*.ts'], ...jest.configs['flat/recommended'],
...jest.configs['flat/recommended'],
},
{
files: ['test/**/*.ts'],
...jest.configs['jest/style'],
},
{
files: ['test/**/*.ts'],
...eslintConfigPrettier,
},
{
files: ['test/**/*.ts'],
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
}, },
}, {
]; files: ['test/**/*.ts'],
...jest.configs['jest/style'],
},
{
files: ['test/**/*.ts'],
...eslintConfigPrettier,
},
{
files: ['test/**/*.ts'],
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
},
},
]);

View File

@ -1,89 +1,91 @@
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js'; import eslint from '@eslint/js';
import tseslint from 'typescript-eslint'; import tseslint from 'typescript-eslint';
import react from 'eslint-plugin-react'; import react from 'eslint-plugin-react';
import { fixupPluginRules } from '@eslint/compat'; import reactHooks from 'eslint-plugin-react-hooks';
import eslintPluginReactHooks from 'eslint-plugin-react-hooks';
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
export default ( export default (
tsconfigRootDir, tsconfigRootDir,
files = ['**/*.ts', '**/*.tsx'], files = ['**/*.ts', '**/*.tsx'],
project = true, project = true,
) => [ ) =>
{ defineConfig([
files, {
...eslint.configs.recommended, files,
}, ...eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked.map((config) => ({
files,
...config,
})),
...tseslint.configs.stylisticTypeChecked.map((config) => ({
files,
...config,
})),
{
files,
languageOptions: {
parserOptions: {
project,
tsconfigRootDir,
},
}, },
}, ...tseslint.configs.recommendedTypeChecked.map((config) => ({
{ files,
files, ...config,
...react.configs.flat.recommended, })),
}, ...tseslint.configs.stylisticTypeChecked.map((config) => ({
{ files,
files, ...config,
settings: { })),
react: { {
version: 'detect', files,
}, languageOptions: {
}, parserOptions: {
}, project,
{ tsconfigRootDir,
files,
plugins: {
'react-hooks': fixupPluginRules(eslintPluginReactHooks),
},
},
{
files,
...eslintConfigPrettier,
},
{
files,
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/no-misused-promises': [
'error',
{
checksVoidReturn: {
attributes: false,
},
}, },
], },
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
'react/prop-types': 'off',
}, },
}, {
]; files,
...react.configs.flat.recommended,
},
{
files,
settings: {
react: {
version: 'detect',
},
},
},
{
files,
plugins: {
'react-hooks': reactHooks,
},
extends: ['react-hooks/recommended-latest'],
},
{
files,
...eslintConfigPrettier,
},
{
files,
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/no-misused-promises': [
'error',
{
checksVoidReturn: {
attributes: false,
},
},
],
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
'react/prop-types': 'off',
},
},
]);

View File

@ -1,85 +1,87 @@
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js'; import eslint from '@eslint/js';
import tseslint from 'typescript-eslint'; import tseslint from 'typescript-eslint';
import react from 'eslint-plugin-react'; import react from 'eslint-plugin-react';
import { fixupPluginRules } from '@eslint/compat'; import reactHooks from 'eslint-plugin-react-hooks';
import eslintPluginReactHooks from 'eslint-plugin-react-hooks';
import jest from 'eslint-plugin-jest'; import jest from 'eslint-plugin-jest';
import eslintConfigPrettier from 'eslint-config-prettier'; import eslintConfigPrettier from 'eslint-config-prettier';
export default (tsconfigRootDir) => [ export default (tsconfigRootDir) =>
{ defineConfig([
files: ['test/**/*.ts', 'test/**/*.tsx'], {
...eslint.configs.recommended, files: ['test/**/*.ts', 'test/**/*.tsx'],
}, ...eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked.map((config) => ({ },
files: ['test/**/*.ts', 'test/**/*.tsx'], ...tseslint.configs.recommendedTypeChecked.map((config) => ({
...config, files: ['test/**/*.ts', 'test/**/*.tsx'],
})), ...config,
...tseslint.configs.stylisticTypeChecked.map((config) => ({ })),
files: ['test/**/*.ts', 'test/**/*.tsx'], ...tseslint.configs.stylisticTypeChecked.map((config) => ({
...config, files: ['test/**/*.ts', 'test/**/*.tsx'],
})), ...config,
{ })),
files: ['test/**/*.ts', 'test/**/*.tsx'], {
languageOptions: { files: ['test/**/*.ts', 'test/**/*.tsx'],
parserOptions: { languageOptions: {
project: ['./tsconfig.test.json'], parserOptions: {
tsconfigRootDir, project: ['./tsconfig.test.json'],
tsconfigRootDir,
},
}, },
}, },
}, {
{ files: ['test/**/*.ts', 'test/**/*.tsx'],
files: ['test/**/*.ts', 'test/**/*.tsx'], ...react.configs.flat.recommended,
...react.configs.flat.recommended, },
}, {
{ files: ['test/**/*.ts', 'test/**/*.tsx'],
files: ['test/**/*.ts', 'test/**/*.tsx'], settings: {
settings: { react: {
react: { version: 'detect',
version: 'detect', },
}, },
}, },
}, {
{ files: ['test/**/*.ts', 'test/**/*.tsx'],
files: ['test/**/*.ts', 'test/**/*.tsx'], plugins: {
plugins: { 'react-hooks': reactHooks,
'react-hooks': fixupPluginRules(eslintPluginReactHooks), },
extends: ['react-hooks/recommended-latest'],
}, },
}, {
{ files: ['test/**/*.ts', 'test/**/*.tsx'],
files: ['test/**/*.ts', 'test/**/*.tsx'], ...jest.configs['flat/recommended'],
...jest.configs['flat/recommended'],
},
{
files: ['test/**/*.ts', 'test/**/*.tsx'],
...jest.configs['jest/style'],
},
{
files: ['test/**/*.ts', 'test/**/*.tsx'],
...eslintConfigPrettier,
},
{
files: ['test/**/*.ts', 'test/**/*.tsx'],
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
}, },
}, {
]; files: ['test/**/*.ts', 'test/**/*.tsx'],
...jest.configs['jest/style'],
},
{
files: ['test/**/*.ts', 'test/**/*.tsx'],
...eslintConfigPrettier,
},
{
files: ['test/**/*.ts', 'test/**/*.tsx'],
rules: {
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-for-of': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/no-duplicate-type-constituents': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/prefer-function-type': 'off',
},
},
]);

View File

@ -3,7 +3,6 @@
"devDependencies": { "devDependencies": {
"@babel/core": "^7.28.4", "@babel/core": "^7.28.4",
"@changesets/cli": "^2.29.7", "@changesets/cli": "^2.29.7",
"@eslint/compat": "^1.4.0",
"@eslint/js": "^9.37.0", "@eslint/js": "^9.37.0",
"eslint": "^9.37.0", "eslint": "^9.37.0",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",

View File

@ -25,9 +25,6 @@ importers:
'@changesets/cli': '@changesets/cli':
specifier: ^2.29.7 specifier: ^2.29.7
version: 2.29.7(@types/node@22.18.10) version: 2.29.7(@types/node@22.18.10)
'@eslint/compat':
specifier: ^1.4.0
version: 1.4.0(eslint@9.37.0)
'@eslint/js': '@eslint/js':
specifier: ^9.37.0 specifier: ^9.37.0
version: 9.37.0 version: 9.37.0
@ -3862,15 +3859,6 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/compat@1.4.0':
resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.40 || 9
peerDependenciesMeta:
eslint:
optional: true
'@eslint/config-array@0.21.0': '@eslint/config-array@0.21.0':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -11846,12 +11834,6 @@ snapshots:
'@eslint-community/regexpp@4.12.1': {} '@eslint-community/regexpp@4.12.1': {}
'@eslint/compat@1.4.0(eslint@9.37.0)':
dependencies:
'@eslint/core': 0.16.0
optionalDependencies:
eslint: 9.37.0
'@eslint/config-array@0.21.0': '@eslint/config-array@0.21.0':
dependencies: dependencies:
'@eslint/object-schema': 2.1.6 '@eslint/object-schema': 2.1.6