@jsse/eslint-config 0.7.9 → 0.8.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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { n as __exportAll, r as __toESM, t as __commonJSMin } from "./rolldown-runtime-DJK8HYOj.js";
2
- import { n as SLOW_RULES, r as VERSION, t as DEBUG } from "./const-DcPxulJ0.js";
2
+ import { n as SLOW_RULES, r as VERSION, t as DEBUG } from "./const-DLdnBwQY.js";
3
3
  import { builtinModules, createRequire } from "node:module";
4
4
  import process$1 from "node:process";
5
5
  import fs, { realpathSync, statSync } from "node:fs";
@@ -6848,6 +6848,101 @@ const eslintComments = async () => [{
6848
6848
  }
6849
6849
  }];
6850
6850
  //#endregion
6851
+ //#region src/configs/react-hooks.ts
6852
+ const reactHooks = async () => {
6853
+ const pluginReactHooks = await interopDefault(import("eslint-plugin-react-hooks"));
6854
+ return [{
6855
+ files: [GLOB_SRC],
6856
+ name: "jsse/react-hooks/rules",
6857
+ plugins: { "react-hooks": pluginReactHooks },
6858
+ rules: {
6859
+ "react-hooks/exhaustive-deps": "error",
6860
+ "react-hooks/rules-of-hooks": "error",
6861
+ ...pluginReactHooks.configs.recommended.rules
6862
+ },
6863
+ settings: { react: { version: "detect" } }
6864
+ }];
6865
+ };
6866
+ //#endregion
6867
+ //#region src/configs/ts/typescript-language-options.ts
6868
+ function typescriptLanguageOptions(options) {
6869
+ const { componentExts = [], react, tsconfig } = options || {};
6870
+ const tsOptions = tsconfig ? {
6871
+ project: Array.isArray(tsconfig) ? tsconfig : [tsconfig],
6872
+ tsconfigRootDir: process$1.cwd()
6873
+ } : {};
6874
+ return {
6875
+ parser: parserTs,
6876
+ parserOptions: {
6877
+ ecmaFeatures: react ? {
6878
+ jsx: true,
6879
+ modules: true
6880
+ } : void 0,
6881
+ extraFileExtensions: componentExts.map((ext) => `.${ext}`),
6882
+ sourceType: "module",
6883
+ ...tsOptions,
6884
+ jsxPragma: react ? "React" : void 0
6885
+ }
6886
+ };
6887
+ }
6888
+ //#endregion
6889
+ //#region src/configs/eslint-react.ts
6890
+ async function importReactPlugins() {
6891
+ const [pluginReact, pluginReactRefresh] = await Promise.all([interopDefault(import("@eslint-react/eslint-plugin")), interopDefault(import("eslint-plugin-react-refresh"))]);
6892
+ return {
6893
+ pluginReact,
6894
+ pluginReactRefresh
6895
+ };
6896
+ }
6897
+ const eslintReact = async (options) => {
6898
+ const { componentExts, parserOptions = {}, react, reactRefresh, tsconfig } = options ?? {};
6899
+ const { pluginReact, pluginReactRefresh } = await importReactPlugins();
6900
+ const coreReactPlugins = pluginReact.configs.all.plugins;
6901
+ const reactHooksConfig = await reactHooks();
6902
+ const config = [
6903
+ {
6904
+ files: [GLOB_SRC],
6905
+ languageOptions: typescriptLanguageOptions({
6906
+ componentExts,
6907
+ parserOptions,
6908
+ react,
6909
+ tsconfig
6910
+ }),
6911
+ name: "jsse/react/setup",
6912
+ plugins: {
6913
+ "@eslint-react": coreReactPlugins["@eslint-react"],
6914
+ "react-refresh": pluginReactRefresh
6915
+ }
6916
+ },
6917
+ {
6918
+ files: [GLOB_SRC],
6919
+ name: "jsse/react/rules",
6920
+ rules: {
6921
+ ...pluginReact.configs.recommended.rules,
6922
+ "react/dom-no-string-style-prop": "off",
6923
+ "react/dom-no-unknown-property": "off"
6924
+ },
6925
+ settings: { react: { version: "detect" } }
6926
+ },
6927
+ ...reactHooksConfig,
6928
+ {
6929
+ files: [GLOB_JSX, GLOB_TSX],
6930
+ name: "jsse/react/disables",
6931
+ rules: { "unicorn/no-null": "off" }
6932
+ }
6933
+ ];
6934
+ if (reactRefresh) config.push({
6935
+ files: [GLOB_SRC],
6936
+ name: "jsse/react/refresh",
6937
+ rules: { "react-refresh/only-export-components": "error" }
6938
+ }, {
6939
+ files: ["**/*.stories.tsx"],
6940
+ name: "jsse/react-refresh/stories",
6941
+ rules: { "react-refresh/only-export-components": "off" }
6942
+ });
6943
+ return config;
6944
+ };
6945
+ //#endregion
6851
6946
  //#region src/configs/ignores.ts
6852
6947
  const ignores = async () => {
6853
6948
  return [{
@@ -11778,240 +11873,6 @@ const prettier = async () => {
11778
11873
  }];
11779
11874
  };
11780
11875
  //#endregion
11781
- //#region src/configs/ts/typescript-language-options.ts
11782
- function typescriptLanguageOptions(options) {
11783
- const { componentExts = [], react, tsconfig } = options || {};
11784
- const tsOptions = tsconfig ? {
11785
- project: Array.isArray(tsconfig) ? tsconfig : [tsconfig],
11786
- tsconfigRootDir: process$1.cwd()
11787
- } : {};
11788
- return {
11789
- parser: parserTs,
11790
- parserOptions: {
11791
- ecmaFeatures: react ? {
11792
- jsx: true,
11793
- modules: true
11794
- } : void 0,
11795
- extraFileExtensions: componentExts.map((ext) => `.${ext}`),
11796
- sourceType: "module",
11797
- ...tsOptions,
11798
- jsxPragma: react ? "React" : void 0
11799
- }
11800
- };
11801
- }
11802
- //#endregion
11803
- //#region src/configs/react.ts
11804
- function reactRules() {
11805
- return {
11806
- "react-hooks/exhaustive-deps": "error",
11807
- "react-hooks/rules-of-hooks": "error",
11808
- "react/boolean-prop-naming": ["error", {
11809
- rule: ["^(is|has)[A-Z]([A-Za-z0-9]?)+", "|^(debug|disabled|hidden|required|selected|highlight)$"].join(""),
11810
- validateNested: true
11811
- }],
11812
- "react/button-has-type": "error",
11813
- "react/function-component-definition": ["error", {
11814
- namedComponents: "function-declaration",
11815
- unnamedComponents: "arrow-function"
11816
- }],
11817
- "react/hook-use-state": "error",
11818
- "react/iframe-missing-sandbox": "error",
11819
- "react/jsx-boolean-value": "error",
11820
- "react/jsx-child-element-spacing": "error",
11821
- "react/jsx-closing-bracket-location": ["error", {
11822
- nonEmpty: "tag-aligned",
11823
- selfClosing: false
11824
- }],
11825
- "react/jsx-closing-tag-location": "error",
11826
- "react/jsx-curly-brace-presence": ["error", {
11827
- children: "never",
11828
- propElementValues: "always",
11829
- props: "never"
11830
- }],
11831
- "react/jsx-curly-newline": ["error", {
11832
- multiline: "consistent",
11833
- singleline: "forbid"
11834
- }],
11835
- "react/jsx-curly-spacing": ["error", "never"],
11836
- "react/jsx-equals-spacing": ["error", "never"],
11837
- "react/jsx-first-prop-new-line": "error",
11838
- "react/jsx-fragments": ["error", "syntax"],
11839
- "react/jsx-indent": ["error", 2],
11840
- "react/jsx-indent-props": ["error", 2],
11841
- "react/jsx-key": "warn",
11842
- "react/jsx-max-props-per-line": ["error", {
11843
- maximum: 3,
11844
- when: "multiline"
11845
- }],
11846
- "react/jsx-no-bind": ["error", { allowArrowFunctions: true }],
11847
- "react/jsx-no-comment-textnodes": "error",
11848
- "react/jsx-no-constructed-context-values": "error",
11849
- "react/jsx-no-duplicate-props": ["error", { ignoreCase: true }],
11850
- "react/jsx-no-script-url": "error",
11851
- "react/jsx-no-target-blank": ["error", {
11852
- allowReferrer: true,
11853
- forms: true,
11854
- warnOnSpreadAttributes: true
11855
- }],
11856
- "react/jsx-no-undef": "error",
11857
- "react/jsx-no-useless-fragment": "error",
11858
- "react/jsx-pascal-case": "error",
11859
- "react/jsx-props-no-multi-spaces": "error",
11860
- "react/jsx-sort-props": ["error", {
11861
- callbacksLast: true,
11862
- noSortAlphabetically: true,
11863
- reservedFirst: true,
11864
- shorthandFirst: true
11865
- }],
11866
- "react/jsx-tag-spacing": ["error", {
11867
- afterOpening: "never",
11868
- beforeClosing: "never",
11869
- beforeSelfClosing: "never",
11870
- closingSlash: "never"
11871
- }],
11872
- "react/jsx-uses-react": "error",
11873
- "react/jsx-uses-vars": "error",
11874
- "react/jsx-wrap-multilines": ["error", {
11875
- arrow: "parens-new-line",
11876
- assignment: "parens-new-line",
11877
- condition: "ignore",
11878
- declaration: "parens-new-line",
11879
- logical: "ignore",
11880
- prop: "ignore",
11881
- return: "parens-new-line"
11882
- }],
11883
- "react/no-array-index-key": "error",
11884
- "react/no-arrow-function-lifecycle": "error",
11885
- "react/no-children-prop": "error",
11886
- "react/no-danger": "error",
11887
- "react/no-danger-with-children": "error",
11888
- "react/no-deprecated": "error",
11889
- "react/no-did-update-set-state": "error",
11890
- "react/no-direct-mutation-state": "error",
11891
- "react/no-find-dom-node": "error",
11892
- "react/no-invalid-html-attribute": "error",
11893
- "react/no-is-mounted": "error",
11894
- "react/no-namespace": "error",
11895
- "react/no-redundant-should-component-update": "error",
11896
- "react/no-render-return-value": "error",
11897
- "react/no-string-refs": ["error", { noTemplateLiterals: true }],
11898
- "react/no-this-in-sfc": "error",
11899
- "react/no-typos": "error",
11900
- "react/no-unescaped-entities": "error",
11901
- "react/no-unsafe": "error",
11902
- "react/no-unstable-nested-components": "error",
11903
- "react/no-unused-state": "error",
11904
- "react/prefer-read-only-props": "error",
11905
- "react/react-in-jsx-scope": "off",
11906
- "react/require-default-props": ["error", {
11907
- forbidDefaultForRequired: true,
11908
- ignoreFunctionalComponents: true
11909
- }],
11910
- "react/self-closing-comp": "error",
11911
- "react/state-in-constructor": ["error", "never"],
11912
- "react/static-property-placement": "error",
11913
- "react/style-prop-object": ["error", { allow: ["FormattedNumber"] }],
11914
- "react/void-dom-elements-no-children": "error"
11915
- };
11916
- }
11917
- /**
11918
- * Stupid prop types causes test error
11919
- * @returns React recommended rules
11920
- */
11921
- function reactRecomendedRules() {
11922
- return {
11923
- "react/display-name": 0,
11924
- "react/jsx-key": 2,
11925
- "react/jsx-no-comment-textnodes": 2,
11926
- "react/jsx-no-duplicate-props": 2,
11927
- "react/jsx-no-target-blank": 2,
11928
- "react/jsx-no-undef": 2,
11929
- "react/jsx-uses-react": 2,
11930
- "react/jsx-uses-vars": 2,
11931
- "react/no-children-prop": 2,
11932
- "react/no-danger-with-children": 2,
11933
- "react/no-deprecated": 2,
11934
- "react/no-direct-mutation-state": 0,
11935
- "react/no-find-dom-node": 2,
11936
- "react/no-is-mounted": 2,
11937
- "react/no-render-return-value": 2,
11938
- "react/no-string-refs": 2,
11939
- "react/no-unescaped-entities": 2,
11940
- "react/no-unsafe": 0,
11941
- "react/prop-types": 1,
11942
- "react/react-in-jsx-scope": 2,
11943
- "react/require-render-return": 2
11944
- };
11945
- }
11946
- async function importReactPlugins() {
11947
- const [pluginReact, pluginReactHooks, pluginReactRefresh] = await Promise.all([
11948
- interopDefault(import("eslint-plugin-react")),
11949
- interopDefault(import("eslint-plugin-react-hooks")),
11950
- interopDefault(import("eslint-plugin-react-refresh"))
11951
- ]);
11952
- return {
11953
- pluginReact,
11954
- pluginReactHooks,
11955
- pluginReactRefresh
11956
- };
11957
- }
11958
- const react = async (options) => {
11959
- const { componentExts, parserOptions = {}, react, reactRefresh, tsconfig } = options ?? {};
11960
- const { pluginReact, pluginReactHooks, pluginReactRefresh } = await importReactPlugins();
11961
- const config = [
11962
- {
11963
- files: [GLOB_SRC],
11964
- languageOptions: typescriptLanguageOptions({
11965
- componentExts,
11966
- parserOptions,
11967
- react,
11968
- tsconfig
11969
- }),
11970
- name: "jsse/react/setup",
11971
- plugins: {
11972
- react: pluginReact,
11973
- "react-hooks": pluginReactHooks,
11974
- "react-refresh": pluginReactRefresh
11975
- }
11976
- },
11977
- {
11978
- files: [GLOB_SRC],
11979
- name: "jsse/react/rules",
11980
- rules: {
11981
- ...reactRecomendedRules(),
11982
- ...pluginReact.configs["jsx-runtime"].rules,
11983
- ...reactRules()
11984
- },
11985
- settings: { react: { version: "detect" } }
11986
- },
11987
- {
11988
- files: [GLOB_SRC],
11989
- name: "jsse/react-hooks/rules",
11990
- rules: {
11991
- "react-hooks/exhaustive-deps": "error",
11992
- "react-hooks/rules-of-hooks": "error",
11993
- ...pluginReactHooks.configs.recommended.rules
11994
- },
11995
- settings: { react: { version: "detect" } }
11996
- },
11997
- {
11998
- files: [GLOB_JSX, GLOB_TSX],
11999
- name: "jsse/react/disables",
12000
- rules: { "unicorn/no-null": "off" }
12001
- }
12002
- ];
12003
- if (reactRefresh) config.push({
12004
- files: [GLOB_SRC],
12005
- name: "jsse/react/refresh",
12006
- rules: { "react-refresh/only-export-components": "error" }
12007
- }, {
12008
- files: ["**/*.stories.tsx"],
12009
- name: "jsse/react-refresh/stories",
12010
- rules: { "react-refresh/only-export-components": "off" }
12011
- });
12012
- return config;
12013
- };
12014
- //#endregion
12015
11876
  //#region src/configs/sort-package-json.ts
12016
11877
  /**
12017
11878
  * Sort package.json
@@ -12716,7 +12577,7 @@ async function jsse(options = {}, ...userConfigs) {
12716
12577
  const ymlConfig = yml();
12717
12578
  configs.push(ymlConfig);
12718
12579
  }
12719
- if (enableReact) configs.push(react({ reactRefresh: normalizedOptions.reactRefresh !== false }));
12580
+ if (enableReact) configs.push(eslintReact({ reactRefresh: normalizedOptions.reactRefresh !== false }));
12720
12581
  if (enablePrettier) configs.push(prettier());
12721
12582
  if (stylisticOptions) configs.push(stylistic(stylisticOptions === true ? {} : stylisticOptions));
12722
12583
  if (enableTest) configs.push(vitest({
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/config-fns.ts","../src/configs.test.ts","../src/const.ts","../src/define-config.ts","../src/dev.ts","../src/fixable.test.ts","../src/fixable.ts","../src/globs.ts","../src/index.ts","../src/lager.ts","../src/plugins-all.test.ts","../src/plugins-all.ts","../src/plugins.ts","../src/presets.ts","../src/types.ts","../src/utils.ts","../src/_generated/fixable-rules-map.ts","../src/_generated/rule-options.d.ts","../src/_generated/version.ts","../src/_generated/dts/antfu.d.ts","../src/_generated/dts/builtins.d.ts","../src/_generated/dts/command.d.ts","../src/_generated/dts/de-morgan.d.ts","../src/_generated/dts/eslint-comments.d.ts","../src/_generated/dts/ignores.d.ts","../src/_generated/dts/imports.d.ts","../src/_generated/dts/javascript.d.ts","../src/_generated/dts/jsdoc.d.ts","../src/_generated/dts/jsonc.d.ts","../src/_generated/dts/markdown.d.ts","../src/_generated/dts/n.d.ts","../src/_generated/dts/no-only-tests.d.ts","../src/_generated/dts/perfectionist.d.ts","../src/_generated/dts/pnpm.d.ts","../src/_generated/dts/prettier.d.ts","../src/_generated/dts/react-hooks.d.ts","../src/_generated/dts/react.d.ts","../src/_generated/dts/sort-package-json.d.ts","../src/_generated/dts/sort-tsconfig.d.ts","../src/_generated/dts/stylistic.d.ts","../src/_generated/dts/toml.d.ts","../src/_generated/dts/typescript.d.ts","../src/_generated/dts/unicorn.d.ts","../src/_generated/dts/vitest.d.ts","../src/_generated/dts/yml.d.ts","../src/configs/_template.ts","../src/configs/antfu.ts","../src/configs/command.ts","../src/configs/de-morgan.ts","../src/configs/eslint-comments.ts","../src/configs/ignores.ts","../src/configs/imports.ts","../src/configs/javascript.ts","../src/configs/jsdoc.ts","../src/configs/jsonc.ts","../src/configs/markdown.ts","../src/configs/n.ts","../src/configs/no-only-tests.ts","../src/configs/perfectionist.ts","../src/configs/pnpm.ts","../src/configs/prettier.ts","../src/configs/react.ts","../src/configs/rules.test.ts","../src/configs/sort-package-json.ts","../src/configs/sort-tsconfig.ts","../src/configs/stylistic.ts","../src/configs/toml.ts","../src/configs/tsdoc.ts","../src/configs/unicorn.ts","../src/configs/vitest.ts","../src/configs/yml.ts","../src/configs/_legacy/tailwind.ts","../src/configs/ts/parser.ts","../src/configs/ts/requires-type-checking.ts","../src/configs/ts/typescript-language-options.ts","../src/configs/ts/typescript-rules.ts","../src/configs/ts/typescript.ts"],"version":"6.0.3"}
1
+ {"root":["../src/cli.ts","../src/config-fns.ts","../src/configs.test.ts","../src/const.ts","../src/define-config.ts","../src/dev.ts","../src/fixable.test.ts","../src/fixable.ts","../src/globs.ts","../src/index.ts","../src/lager.ts","../src/plugins-all.test.ts","../src/plugins-all.ts","../src/plugins.ts","../src/presets.ts","../src/types.ts","../src/utils.ts","../src/_generated/fixable-rules-map.ts","../src/_generated/rule-options.d.ts","../src/_generated/version.ts","../src/_generated/dts/antfu.d.ts","../src/_generated/dts/builtins.d.ts","../src/_generated/dts/command.d.ts","../src/_generated/dts/de-morgan.d.ts","../src/_generated/dts/eslint-comments.d.ts","../src/_generated/dts/eslint-react.d.ts","../src/_generated/dts/ignores.d.ts","../src/_generated/dts/imports.d.ts","../src/_generated/dts/javascript.d.ts","../src/_generated/dts/jsdoc.d.ts","../src/_generated/dts/jsonc.d.ts","../src/_generated/dts/markdown.d.ts","../src/_generated/dts/n.d.ts","../src/_generated/dts/no-only-tests.d.ts","../src/_generated/dts/perfectionist.d.ts","../src/_generated/dts/pnpm.d.ts","../src/_generated/dts/prettier.d.ts","../src/_generated/dts/react-hooks.d.ts","../src/_generated/dts/sort-package-json.d.ts","../src/_generated/dts/sort-tsconfig.d.ts","../src/_generated/dts/stylistic.d.ts","../src/_generated/dts/toml.d.ts","../src/_generated/dts/typescript.d.ts","../src/_generated/dts/unicorn.d.ts","../src/_generated/dts/vitest.d.ts","../src/_generated/dts/yml.d.ts","../src/configs/_template.ts","../src/configs/antfu.ts","../src/configs/command.ts","../src/configs/de-morgan.ts","../src/configs/eslint-comments.ts","../src/configs/eslint-react.ts","../src/configs/ignores.ts","../src/configs/imports.ts","../src/configs/javascript.ts","../src/configs/jsdoc.ts","../src/configs/jsonc.ts","../src/configs/markdown.ts","../src/configs/n.ts","../src/configs/no-only-tests.ts","../src/configs/perfectionist.ts","../src/configs/pnpm.ts","../src/configs/prettier.ts","../src/configs/react-hooks.ts","../src/configs/react.ts","../src/configs/rules.test.ts","../src/configs/sort-package-json.ts","../src/configs/sort-tsconfig.ts","../src/configs/stylistic.ts","../src/configs/toml.ts","../src/configs/tsdoc.ts","../src/configs/unicorn.ts","../src/configs/vitest.ts","../src/configs/yml.ts","../src/configs/_legacy/tailwind.ts","../src/configs/ts/parser.ts","../src/configs/ts/requires-type-checking.ts","../src/configs/ts/typescript-language-options.ts","../src/configs/ts/typescript-rules.ts","../src/configs/ts/typescript.ts"],"version":"6.0.3"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jsse/eslint-config",
3
3
  "type": "module",
4
- "version": "0.7.9",
4
+ "version": "0.8.0",
5
5
  "description": "@jsse/eslint-config ~ WYSIWYG",
6
6
  "author": "jessekrubin <jessekrubin@gmail.com> (https://github.com/jessekrubin/)",
7
7
  "license": "MIT",
@@ -36,8 +36,8 @@
36
36
  "dist"
37
37
  ],
38
38
  "peerDependencies": {
39
- "@eslint-react/eslint-plugin": "^4.2.3",
40
- "eslint": "^9.39.1",
39
+ "@eslint-react/eslint-plugin": "^5.6.0",
40
+ "eslint": "^10.5.0",
41
41
  "eslint-plugin-react": "^7.37.5",
42
42
  "eslint-plugin-react-hooks": "^7.1.1",
43
43
  "eslint-plugin-react-refresh": "^0.5.0"
@@ -62,12 +62,12 @@
62
62
  "dependencies": {
63
63
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
64
64
  "@eslint/compat": "^2.1.0",
65
- "@eslint/js": "^9.39.4",
65
+ "@eslint/js": "^10.0.1",
66
66
  "@eslint/markdown": "^8.0.2",
67
67
  "@stylistic/eslint-plugin": "5.10.0",
68
- "@typescript-eslint/eslint-plugin": "^8.61.0",
69
- "@typescript-eslint/parser": "^8.61.0",
70
- "@typescript-eslint/rule-tester": "^8.61.0",
68
+ "@typescript-eslint/eslint-plugin": "^8.61.1",
69
+ "@typescript-eslint/parser": "^8.61.1",
70
+ "@typescript-eslint/rule-tester": "^8.61.1",
71
71
  "@vitest/eslint-plugin": "^1.6.20",
72
72
  "debug": "^4.4.3",
73
73
  "eslint-config-flat-gitignore": "^2.3.0",
@@ -76,13 +76,12 @@
76
76
  "eslint-plugin-command": "^3.5.2",
77
77
  "eslint-plugin-de-morgan": "^2.1.2",
78
78
  "eslint-plugin-import-lite": "^0.6.0",
79
- "eslint-plugin-jsdoc": "^63.0.2",
79
+ "eslint-plugin-jsdoc": "^63.0.4",
80
80
  "eslint-plugin-jsonc": "^3.2.0",
81
81
  "eslint-plugin-n": "^18.1.0",
82
82
  "eslint-plugin-no-only-tests": "^3.4.0",
83
- "eslint-plugin-perfectionist": "^5.9.0",
83
+ "eslint-plugin-perfectionist": "^5.9.1",
84
84
  "eslint-plugin-pnpm": "^1.6.1",
85
- "eslint-plugin-react": "^7.37.5",
86
85
  "eslint-plugin-react-hooks": "^7.1.1",
87
86
  "eslint-plugin-react-refresh": "^0.5.3",
88
87
  "eslint-plugin-toml": "^1.4.0",
@@ -91,21 +90,23 @@
91
90
  "eslint-plugin-yml": "^3.4.0",
92
91
  "jsonc-eslint-parser": "^3.1.0",
93
92
  "toml-eslint-parser": "^1.0.3",
94
- "typescript-eslint": "^8.61.0",
93
+ "typescript-eslint": "^8.61.1",
95
94
  "yaml-eslint-parser": "^2.0.0"
96
95
  },
97
96
  "devDependencies": {
98
97
  "@changesets/cli": "^2.31.0",
99
98
  "@emnapi/core": "^1.11.1",
100
99
  "@emnapi/runtime": "^1.11.1",
100
+ "@eslint-react/eslint-plugin": "^5.9.0",
101
101
  "@jsse/prettier-config": "^1.0.2",
102
102
  "@jsse/tsconfig": "^0.5.1",
103
103
  "@types/debug": "^4.1.13",
104
104
  "@types/fs-extra": "^11.0.4",
105
105
  "@types/node": "^25.9.3",
106
106
  "cac": "^7.0.0",
107
- "eslint": "^9.39.4",
107
+ "eslint": "^10.5.0",
108
108
  "eslint-flat-config-utils": "^3.2.0",
109
+ "eslint-plugin-react": "^7.37.5",
109
110
  "eslint-typegen": "^2.3.1",
110
111
  "execa": "~9.6.1",
111
112
  "fast-equals": "^6.0.0",
@@ -114,7 +115,7 @@
114
115
  "globals": "^17.6.0",
115
116
  "local-pkg": "^1.2.1",
116
117
  "oxfmt": "^0.54.0",
117
- "oxlint": "^1.69.0",
118
+ "oxlint": "^1.70.0",
118
119
  "picocolors": "^1.1.1",
119
120
  "prettier": "^3.8.4",
120
121
  "react": "~19.2.7",
@@ -122,7 +123,7 @@
122
123
  "tsdown": "^0.22.2",
123
124
  "tsx": "^4.22.4",
124
125
  "typescript": "~6.0.3",
125
- "vitest": "^4.1.8"
126
+ "vitest": "^4.1.9"
126
127
  },
127
128
  "prettier": "@jsse/prettier-config",
128
129
  "scripts": {