@jimmy.codes/eslint-config 6.22.0 → 6.24.0

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/README.md CHANGED
@@ -75,20 +75,38 @@ export default defineConfig({
75
75
  });
76
76
  ```
77
77
 
78
+ ### TypeScript Configuration
79
+
80
+ TypeScript also supports some configuration options. If options are provided then TypeScript support is enabled.
81
+
82
+ #### Configure Erasable Syntax Only
83
+
84
+ Enable rules scoped to TypeScript’s new erasable syntax only mode (TypeScript 5.8+):
85
+
86
+ ```ts
87
+ import { defineConfig } from "@jimmy.codes/eslint-config";
88
+
89
+ export default defineConfig({
90
+ typescript: {
91
+ erasableSyntaxOnly: true,
92
+ },
93
+ });
94
+ ```
95
+
78
96
  ### Vitest Configuration
79
97
 
80
98
  Vitest also supports some configuration options. If options are provided then Vitest support is enabled.
81
99
 
82
100
  #### Configure Vitest Globals
83
101
 
84
- Control how [Vitest globals configuration](https://vitest.dev/config/globals.html) (`describe`, `it`, `expect`, etc.) are handled:
102
+ Control how [Vitest globals configuration](https://vitest.dev/config/globals.html) are handled:
85
103
 
86
104
  ```ts
87
105
  import { defineConfig } from "@jimmy.codes/eslint-config";
88
106
 
89
107
  export default defineConfig({
90
108
  vitest: {
91
- globals: "explicit", // Require explicit imports from 'vitest'
109
+ globals: "explicit",
92
110
  },
93
111
  });
94
112
  ```
@@ -99,6 +117,20 @@ Options:
99
117
  - `'implicit'`: Use implicit global APIs (vitest config `globals: true`)
100
118
  - `'either'`: Allow both styles (default)
101
119
 
120
+ #### Configure Type Testing
121
+
122
+ Indicate whether [Vitest's type testing utilities](https://vitest.dev/guide/testing-types.html) are being used:
123
+
124
+ ```ts
125
+ import { defineConfig } from "@jimmy.codes/eslint-config";
126
+
127
+ export default defineConfig({
128
+ vitest: {
129
+ typecheck: true,
130
+ },
131
+ });
132
+ ```
133
+
102
134
  ### Override Specific Rules
103
135
 
104
136
  ```ts
@@ -1,4 +1,4 @@
1
- import { t as GLOB_ASTRO } from "./globs-C_yfK842.mjs";
1
+ import { t as GLOB_ASTRO } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
3
  import globals from "globals";
4
4
 
@@ -0,0 +1,14 @@
1
+ //#region src/utils/extract-options.ts
2
+ /**
3
+ * A simple utility to derive options for configurations when one option is a boolean.
4
+ *
5
+ * @param options - The options to derive.
6
+ *
7
+ * @returns The extracted options or `undefined` if the input was a boolean.
8
+ */
9
+ const extractOptions = (options) => {
10
+ if (typeof options !== "boolean") return options;
11
+ };
12
+
13
+ //#endregion
14
+ export { extractOptions as t };
@@ -1,10 +1,12 @@
1
1
  //#region src/globs.ts
2
2
  const GLOB_SRC_EXT = "?([cm])[jt]s?(x)";
3
+ const GLOB_TS_EXT = "?([cm])ts";
4
+ const GLOB_TSX_EXT = "?([cm])tsx";
3
5
  const GLOB_JS = "**/*.?([cm])js";
4
6
  const GLOB_JSX = "**/*.?([cm])jsx";
5
7
  const GLOB_CJS = "**/*.cjs";
6
- const GLOB_TS = "**/*.?([cm])ts";
7
- const GLOB_TSX = "**/*.?([cm])tsx";
8
+ const GLOB_TS = `**/*.${GLOB_TS_EXT}`;
9
+ const GLOB_TSX = `**/*.${GLOB_TSX_EXT}`;
8
10
  const GLOB_ASTRO = "**/*.astro";
9
11
  const GLOB_TESTS = [
10
12
  `**/__tests__/**/*.${GLOB_SRC_EXT}`,
@@ -13,6 +15,12 @@ const GLOB_TESTS = [
13
15
  `**/*.bench.${GLOB_SRC_EXT}`,
14
16
  `**/*.benchmark.${GLOB_SRC_EXT}`
15
17
  ];
18
+ const GLOB_TYPE_TESTS = [
19
+ `**/*.test-d.${GLOB_TS_EXT}`,
20
+ `**/*.test-d.${GLOB_TSX_EXT}`,
21
+ `**/*.spec-d.${GLOB_TS_EXT}`,
22
+ `**/*.spec-d.${GLOB_TSX_EXT}`
23
+ ];
16
24
  const GLOB_PLAYWRIGHT = [`**/e2e/**/*.spec.${GLOB_SRC_EXT}`, `**/e2e/**/*.test.${GLOB_SRC_EXT}`];
17
25
  const GLOB_E2E = [
18
26
  ...GLOB_PLAYWRIGHT,
@@ -69,4 +77,4 @@ const GLOB_IGNORES = [
69
77
  ];
70
78
 
71
79
  //#endregion
72
- export { GLOB_JS as a, GLOB_PLAYWRIGHT as c, GLOB_TSX as d, GLOB_IGNORES as i, GLOB_TESTS as l, GLOB_CJS as n, GLOB_JSX as o, GLOB_E2E as r, GLOB_NEXTJS as s, GLOB_ASTRO as t, GLOB_TS as u };
80
+ export { GLOB_JS as a, GLOB_PLAYWRIGHT as c, GLOB_TSX as d, GLOB_TYPE_TESTS as f, GLOB_IGNORES as i, GLOB_TESTS as l, GLOB_CJS as n, GLOB_JSX as o, GLOB_E2E as r, GLOB_NEXTJS as s, GLOB_ASTRO as t, GLOB_TS as u };
package/dist/globs.d.mts CHANGED
@@ -6,9 +6,10 @@ declare const GLOB_TS = "**/*.?([cm])ts";
6
6
  declare const GLOB_TSX = "**/*.?([cm])tsx";
7
7
  declare const GLOB_ASTRO = "**/*.astro";
8
8
  declare const GLOB_TESTS: readonly ["**/__tests__/**/*.?([cm])[jt]s?(x)", "**/*.spec.?([cm])[jt]s?(x)", "**/*.test.?([cm])[jt]s?(x)", "**/*.bench.?([cm])[jt]s?(x)", "**/*.benchmark.?([cm])[jt]s?(x)"];
9
+ declare const GLOB_TYPE_TESTS: readonly ["**/*.test-d.?([cm])ts", "**/*.test-d.?([cm])tsx", "**/*.spec-d.?([cm])ts", "**/*.spec-d.?([cm])tsx"];
9
10
  declare const GLOB_PLAYWRIGHT: readonly ["**/e2e/**/*.spec.?([cm])[jt]s?(x)", "**/e2e/**/*.test.?([cm])[jt]s?(x)"];
10
11
  declare const GLOB_E2E: readonly ["**/e2e/**/*.spec.?([cm])[jt]s?(x)", "**/e2e/**/*.test.?([cm])[jt]s?(x)", "**/cypress/**/*.spec.?([cm])[jt]s?(x)", "**/cypress/**/*.test.?([cm])[jt]s?(x)"];
11
12
  declare const GLOB_NEXTJS: readonly ["**/*.?([cm])js", "**/*.?([cm])jsx", "**/*.?([cm])ts", "**/*.?([cm])tsx"];
12
13
  declare const GLOB_IGNORES: readonly ["**/node_modules", "**/dist", "**/package-lock.json", "**/yarn.lock", "**/pnpm-lock.yaml", "**/bun.lockb", "**/output", "**/coverage", "**/temp", "**/.temp", "**/tmp", "**/.tmp", "**/.history", "**/.vitepress/cache", "**/.nuxt", "**/.next", "**/.vercel", "**/.changeset", "**/.idea", "**/.cache", "**/.output", "**/.vite-inspect", "**/.yarn", "**/storybook-static", "**/.eslint-config-inspector", "**/playwright-report", "**/.astro", "**/.vinxi", "**/app.config.timestamp_*.js", "**/.tanstack", "**/.nitro", "**/CHANGELOG*.md", "**/*.min.*", "**/LICENSE*", "**/__snapshots__", "**/auto-import?(s).d.ts", "**/components.d.ts", "**/vite.config.ts.*.mjs", "**/*.gen.*", "!.storybook"];
13
14
  //#endregion
14
- export { GLOB_ASTRO, GLOB_CJS, GLOB_E2E, GLOB_IGNORES, GLOB_JS, GLOB_JSX, GLOB_NEXTJS, GLOB_PLAYWRIGHT, GLOB_TESTS, GLOB_TS, GLOB_TSX };
15
+ export { GLOB_ASTRO, GLOB_CJS, GLOB_E2E, GLOB_IGNORES, GLOB_JS, GLOB_JSX, GLOB_NEXTJS, GLOB_PLAYWRIGHT, GLOB_TESTS, GLOB_TS, GLOB_TSX, GLOB_TYPE_TESTS };
package/dist/globs.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { a as GLOB_JS, c as GLOB_PLAYWRIGHT, d as GLOB_TSX, i as GLOB_IGNORES, l as GLOB_TESTS, n as GLOB_CJS, o as GLOB_JSX, r as GLOB_E2E, s as GLOB_NEXTJS, t as GLOB_ASTRO, u as GLOB_TS } from "./globs-C_yfK842.mjs";
1
+ import { a as GLOB_JS, c as GLOB_PLAYWRIGHT, d as GLOB_TSX, f as GLOB_TYPE_TESTS, i as GLOB_IGNORES, l as GLOB_TESTS, n as GLOB_CJS, o as GLOB_JSX, r as GLOB_E2E, s as GLOB_NEXTJS, t as GLOB_ASTRO, u as GLOB_TS } from "./globs-uKx5b8lV.mjs";
2
2
 
3
- export { GLOB_ASTRO, GLOB_CJS, GLOB_E2E, GLOB_IGNORES, GLOB_JS, GLOB_JSX, GLOB_NEXTJS, GLOB_PLAYWRIGHT, GLOB_TESTS, GLOB_TS, GLOB_TSX };
3
+ export { GLOB_ASTRO, GLOB_CJS, GLOB_E2E, GLOB_IGNORES, GLOB_JS, GLOB_JSX, GLOB_NEXTJS, GLOB_PLAYWRIGHT, GLOB_TESTS, GLOB_TS, GLOB_TSX, GLOB_TYPE_TESTS };
package/dist/index.d.mts CHANGED
@@ -1785,6 +1785,26 @@ interface RuleOptions {
1785
1785
  * @see https://eslint.org/docs/latest/rules/eqeqeq
1786
1786
  */
1787
1787
  'eqeqeq'?: Linter.RuleEntry<Eqeqeq>;
1788
+ /**
1789
+ * Avoid using TypeScript's enums.
1790
+ * @see https://github.com/JoshuaKGoldberg/eslint-plugin-erasable-syntax-only/blob/main/docs/rules/enums.md
1791
+ */
1792
+ 'erasable-syntax-only/enums'?: Linter.RuleEntry<[]>;
1793
+ /**
1794
+ * Avoid using TypeScript's import aliases.
1795
+ * @see https://github.com/JoshuaKGoldberg/eslint-plugin-erasable-syntax-only/blob/main/docs/rules/import-aliases.md
1796
+ */
1797
+ 'erasable-syntax-only/import-aliases'?: Linter.RuleEntry<[]>;
1798
+ /**
1799
+ * Avoid using TypeScript's namespaces.
1800
+ * @see https://github.com/JoshuaKGoldberg/eslint-plugin-erasable-syntax-only/blob/main/docs/rules/namespaces.md
1801
+ */
1802
+ 'erasable-syntax-only/namespaces'?: Linter.RuleEntry<[]>;
1803
+ /**
1804
+ * Avoid using TypeScript's class parameter properties.
1805
+ * @see https://github.com/JoshuaKGoldberg/eslint-plugin-erasable-syntax-only/blob/main/docs/rules/parameter-properties.md
1806
+ */
1807
+ 'erasable-syntax-only/parameter-properties'?: Linter.RuleEntry<[]>;
1788
1808
  /**
1789
1809
  * Enforce `for` loop update clause moving the counter in the right direction
1790
1810
  * @see https://eslint.org/docs/latest/rules/for-direction
@@ -15006,17 +15026,29 @@ interface LinterConfigOverrides {
15006
15026
  type TypedConfigItem = Prettify<Override<Base, LinterConfigOverrides>>;
15007
15027
  interface VitestOptions {
15008
15028
  /**
15009
- * How to handle Vitest global APIs (describe, it, expect, etc.).
15029
+ * How to handle [Vitest global APIs](https://vitest.dev/config/globals.html).
15010
15030
  *
15011
15031
  * - 'explicit': Require explicit imports from 'vitest'
15012
15032
  * - 'implicit': Use implicit global APIs (vitest config globals: true)
15013
15033
  * - 'either': Allow both styles (default)
15014
15034
  *
15015
- * @see https://vitest.dev/config/globals.html
15016
- *
15017
15035
  * @default 'either'
15018
15036
  */
15019
15037
  globals?: "either" | "explicit" | "implicit";
15038
+ /**
15039
+ * Indicate whether [Vitest's type testing utilities](https://vitest.dev/guide/testing-types.html) are being used.
15040
+ *
15041
+ * @default false
15042
+ */
15043
+ typecheck?: boolean;
15044
+ }
15045
+ interface TypeScriptOptions {
15046
+ /**
15047
+ * Enable rules for [erasable syntax only](https://devblogs.microsoft.com/typescript/announcing-typescript-5-8-beta/#the---erasablesyntaxonly-option).
15048
+ *
15049
+ * @default false
15050
+ */
15051
+ erasableSyntaxOnly?: boolean;
15020
15052
  }
15021
15053
  interface Options {
15022
15054
  /**
@@ -15099,7 +15131,7 @@ interface Options {
15099
15131
  *
15100
15132
  * @default false
15101
15133
  */
15102
- typescript?: boolean;
15134
+ typescript?: boolean | TypeScriptOptions;
15103
15135
  /**
15104
15136
  * Are Vitest rules enabled?
15105
15137
  *
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { i as GLOB_IGNORES, l as GLOB_TESTS, n as GLOB_CJS } from "./globs-C_yfK842.mjs";
1
+ import { i as GLOB_IGNORES, l as GLOB_TESTS, n as GLOB_CJS } from "./globs-uKx5b8lV.mjs";
2
2
  import { a as hasReact, c as hasTestingLibrary, d as hasVitest, i as hasPlaywright, l as hasTypescript, n as hasJest, o as hasReactQuery, r as hasNext, s as hasStorybook, t as hasAstro } from "./has-dependency-BreXO1rF.mjs";
3
3
  import gitignoreConfig from "eslint-config-flat-gitignore";
4
4
  import globals from "globals";
@@ -504,16 +504,16 @@ const defineConfig = async ({ astro = false, autoDetect = true, gitignore = fals
504
504
  stylisticConfig()
505
505
  ];
506
506
  const featureConfigs = await Promise.all([
507
- isTypescriptEnabled && unwrap(import("./typescript-w0LuBIDT.mjs")),
508
- isReactEnabled && unwrap(import("./react-sWdvHd_J.mjs")),
509
- isTanstackQueryEnabled && unwrap(import("./tanstack-query-D1gpzKY3.mjs")),
510
- isAstroEnabled && unwrap(import("./astro-D3Zl135N.mjs")),
511
- isJestEnabled && unwrap(import("./jest-DZtYWPoX.mjs")),
512
- isVitestEnabled && unwrap(import("./vitest-oIUtAksi.mjs"), vitest),
513
- isTestingLibraryEnabled && unwrap(import("./testing-library-BBWV3thw.mjs")),
514
- isPlaywrightEnabled && unwrap(import("./playwright-CrBcE3qD.mjs")),
507
+ isTypescriptEnabled && unwrap(import("./typescript-1X7EkO5M.mjs"), typescript),
508
+ isReactEnabled && unwrap(import("./react-DY8zODCu.mjs")),
509
+ isTanstackQueryEnabled && unwrap(import("./tanstack-query-DG6a41GH.mjs")),
510
+ isAstroEnabled && unwrap(import("./astro-DNtOkeq5.mjs")),
511
+ isJestEnabled && unwrap(import("./jest-DgTHyrfz.mjs")),
512
+ isVitestEnabled && unwrap(import("./vitest-YdRMuvTR.mjs"), vitest),
513
+ isTestingLibraryEnabled && unwrap(import("./testing-library-oE675dT3.mjs")),
514
+ isPlaywrightEnabled && unwrap(import("./playwright-CM4et1Wx.mjs")),
515
515
  isStorybookEnabled && unwrap(import("./storybook-CyxpG33Q.mjs")),
516
- isNextjsEnabled && unwrap(import("./nextjs-DEk_ANZ4.mjs"))
516
+ isNextjsEnabled && unwrap(import("./nextjs-VPeisXpq.mjs"))
517
517
  ]);
518
518
  return [
519
519
  ...gitignore ? [gitignoreConfig({ strict: false })] : [],
@@ -1,4 +1,4 @@
1
- import { l as GLOB_TESTS, r as GLOB_E2E } from "./globs-C_yfK842.mjs";
1
+ import { l as GLOB_TESTS, r as GLOB_E2E } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
3
 
4
4
  //#region src/rules/jest.ts
@@ -1,4 +1,4 @@
1
- import { s as GLOB_NEXTJS } from "./globs-C_yfK842.mjs";
1
+ import { s as GLOB_NEXTJS } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
3
  import { t as upwarn } from "./upwarn-BWFMaOyK.mjs";
4
4
 
@@ -1,4 +1,4 @@
1
- import { c as GLOB_PLAYWRIGHT } from "./globs-C_yfK842.mjs";
1
+ import { c as GLOB_PLAYWRIGHT } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
3
 
4
4
  //#region src/rules/playwright.ts
@@ -1,4 +1,4 @@
1
- import { d as GLOB_TSX, o as GLOB_JSX } from "./globs-C_yfK842.mjs";
1
+ import { d as GLOB_TSX, o as GLOB_JSX } from "./globs-uKx5b8lV.mjs";
2
2
  import { l as hasTypescript, r as hasNext, u as hasVite } from "./has-dependency-BreXO1rF.mjs";
3
3
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
4
4
  import { t as upwarn } from "./upwarn-BWFMaOyK.mjs";
@@ -1,4 +1,4 @@
1
- import { d as GLOB_TSX, o as GLOB_JSX } from "./globs-C_yfK842.mjs";
1
+ import { d as GLOB_TSX, o as GLOB_JSX } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
3
 
4
4
  //#region src/configs/tanstack-query.ts
@@ -1,4 +1,4 @@
1
- import { l as GLOB_TESTS, r as GLOB_E2E } from "./globs-C_yfK842.mjs";
1
+ import { l as GLOB_TESTS, r as GLOB_E2E } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
3
 
4
4
  //#region src/rules/testing-library.ts
@@ -1,4 +1,6 @@
1
- import { a as GLOB_JS, l as GLOB_TESTS, o as GLOB_JSX } from "./globs-C_yfK842.mjs";
1
+ import { a as GLOB_JS, l as GLOB_TESTS, o as GLOB_JSX } from "./globs-uKx5b8lV.mjs";
2
+ import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
+ import { t as extractOptions } from "./extract-options-mq3SNxbU.mjs";
2
4
 
3
5
  //#region src/rules/typescript.ts
4
6
  const disabledEslintRules = {
@@ -35,8 +37,9 @@ const typescriptRules = {
35
37
 
36
38
  //#endregion
37
39
  //#region src/configs/typescript.ts
38
- async function typescriptConfig() {
40
+ async function typescriptConfig(options) {
39
41
  const { configs } = await import("typescript-eslint");
42
+ const extractedOptions = extractOptions(options);
40
43
  return [
41
44
  ...configs.strictTypeChecked,
42
45
  ...configs.stylisticTypeChecked.filter((config) => {
@@ -66,7 +69,17 @@ async function typescriptConfig() {
66
69
  "@typescript-eslint/no-unsafe-argument": "off",
67
70
  "@typescript-eslint/no-unsafe-assignment": "off"
68
71
  }
69
- }
72
+ },
73
+ ...extractedOptions?.erasableSyntaxOnly ? [{
74
+ name: "jimmy.codes/typescript/erasable-syntax-only",
75
+ plugins: { "erasable-syntax-only": await interopDefault(import("eslint-plugin-erasable-syntax-only")) },
76
+ rules: {
77
+ "erasable-syntax-only/enums": "error",
78
+ "erasable-syntax-only/import-aliases": "error",
79
+ "erasable-syntax-only/namespaces": "error",
80
+ "erasable-syntax-only/parameter-properties": "error"
81
+ }
82
+ }] : []
70
83
  ];
71
84
  }
72
85
 
@@ -1,5 +1,6 @@
1
- import { l as GLOB_TESTS, r as GLOB_E2E } from "./globs-C_yfK842.mjs";
1
+ import { f as GLOB_TYPE_TESTS, l as GLOB_TESTS, r as GLOB_E2E } from "./globs-uKx5b8lV.mjs";
2
2
  import { t as interopDefault } from "./interop-default-Bn64p66u.mjs";
3
+ import { t as extractOptions } from "./extract-options-mq3SNxbU.mjs";
3
4
 
4
5
  //#region src/rules/vitest.ts
5
6
  const vitestRules = async (options) => {
@@ -61,30 +62,18 @@ const vitestRules = async (options) => {
61
62
  };
62
63
  };
63
64
 
64
- //#endregion
65
- //#region src/utils/extract-options.ts
66
- /**
67
- * A simple utility to derive options for configurations when one option is a boolean.
68
- *
69
- * @param options - The options to derive.
70
- *
71
- * @returns The extracted options or `undefined` if the input was a boolean.
72
- */
73
- const extractOptions = (options) => {
74
- if (typeof options !== "boolean") return options;
75
- };
76
-
77
65
  //#endregion
78
66
  //#region src/configs/vitest.ts
79
67
  async function vitestConfig(options) {
80
68
  const vitestPlugin = await interopDefault(import("@vitest/eslint-plugin"));
81
69
  const extractedOptions = extractOptions(options);
82
70
  return [{
83
- files: GLOB_TESTS,
71
+ files: [...GLOB_TESTS, ...extractedOptions?.typecheck ? GLOB_TYPE_TESTS : []],
84
72
  ignores: GLOB_E2E,
85
73
  ...vitestPlugin.configs.recommended,
86
74
  name: "jimmy.codes/vitest",
87
- rules: await vitestRules(extractedOptions)
75
+ rules: await vitestRules(extractedOptions),
76
+ settings: { vitest: { typecheck: extractedOptions?.typecheck ?? false } }
88
77
  }];
89
78
  }
90
79
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jimmy.codes/eslint-config",
3
- "version": "6.22.0",
3
+ "version": "6.24.0",
4
4
  "description": "A simple, modern ESLint config that covers most use cases.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -54,6 +54,7 @@
54
54
  "eslint-import-resolver-typescript": "^4.4.4",
55
55
  "eslint-plugin-arrow-return-style-x": "^1.2.6",
56
56
  "eslint-plugin-astro": "^1.5.0",
57
+ "eslint-plugin-erasable-syntax-only": "0.4.0",
57
58
  "eslint-plugin-import-x": "^4.16.1",
58
59
  "eslint-plugin-jest": "^29.2.1",
59
60
  "eslint-plugin-jest-dom": "^5.5.0",
@@ -63,13 +64,13 @@
63
64
  "eslint-plugin-perfectionist": "^4.15.1",
64
65
  "eslint-plugin-playwright": "^2.3.0",
65
66
  "eslint-plugin-react-compiler": "19.1.0-rc.2",
66
- "eslint-plugin-react-dom": "^2.3.7",
67
+ "eslint-plugin-react-dom": "^2.3.9",
67
68
  "eslint-plugin-react-hooks": "^7.0.1",
68
- "eslint-plugin-react-hooks-extra": "^2.3.7",
69
- "eslint-plugin-react-naming-convention": "^2.3.7",
69
+ "eslint-plugin-react-hooks-extra": "^2.3.9",
70
+ "eslint-plugin-react-naming-convention": "^2.3.9",
70
71
  "eslint-plugin-react-refresh": "0.4.24",
71
- "eslint-plugin-react-web-api": "^2.3.7",
72
- "eslint-plugin-react-x": "^2.3.7",
72
+ "eslint-plugin-react-web-api": "^2.3.9",
73
+ "eslint-plugin-react-x": "^2.3.9",
73
74
  "eslint-plugin-regexp": "^2.10.0",
74
75
  "eslint-plugin-storybook": "0.12.0",
75
76
  "eslint-plugin-testing-library": "^7.13.5",