From 1cfb59d3244f6da789f11a0a4ce9f946a40b2708 Mon Sep 17 00:00:00 2001 From: rEl1cx Date: Sat, 4 Jan 2025 09:35:09 +0800 Subject: [PATCH] refactor: replace 'fast-equals' and 'micro-memoize' with builtins --- examples/dual-react-dom-lib/package.json | 2 +- examples/next-app/package.json | 4 +- examples/vite-react-dom-app/package.json | 2 +- examples/vite-react-dom-js-app/package.json | 2 +- .../package.json | 2 +- package.json | 4 +- .../src/element/get-element-represent-name.ts | 4 +- .../src/rules/is-from-react.ts | 4 +- .../src/rules/no-unknown-property.ts | 4 +- .../src/rules/no-unsafe-target-blank.ts | 4 +- .../no-direct-set-state-in-use-effect.ts | 4 +- ...o-direct-set-state-in-use-layout-effect.ts | 4 +- .../src/rules/no-unnecessary-use-callback.ts | 4 +- .../src/rules/no-unnecessary-use-memo.ts | 4 +- .../prefer-use-state-lazy-initialization.ts | 4 +- .../src/rules/use-state.ts | 4 +- .../src/rules/no-context-provider.ts | 4 +- .../src/rules/no-forward-ref.ts | 4 +- .../rules/no-leaked-conditional-rendering.ts | 4 +- .../rules/prefer-react-namespace-import.ts | 4 +- packages/shared/docs/README.md | 1 + .../docs/functions/getSettingsFromContext.md | 21 +++ packages/shared/package.json | 2 - packages/shared/src/cache.ts | 3 + packages/shared/src/settings.ts | 49 ++--- pnpm-lock.yaml | 177 +++++++++--------- website/package.json | 2 +- workspace/eslint-plugin-deps/package.json | 2 +- 28 files changed, 164 insertions(+), 165 deletions(-) create mode 100644 packages/shared/docs/functions/getSettingsFromContext.md create mode 100644 packages/shared/src/cache.ts diff --git a/examples/dual-react-dom-lib/package.json b/examples/dual-react-dom-lib/package.json index ca5eb1517e..ad42f00156 100644 --- a/examples/dual-react-dom-lib/package.json +++ b/examples/dual-react-dom-lib/package.json @@ -33,7 +33,7 @@ "@eslint/js": "^9.17.0", "@tsconfig/node22": "^22.0.0", "@tsconfig/strictest": "^2.0.5", - "@types/node": "^22.10.4", + "@types/node": "^22.10.5", "@types/react": "^19.0.2", "eslint": "^9.17.0", "eslint-plugin-react-hooks": "^5.1.0", diff --git a/examples/next-app/package.json b/examples/next-app/package.json index 41bda23bac..e7c5fb6bf4 100644 --- a/examples/next-app/package.json +++ b/examples/next-app/package.json @@ -17,11 +17,11 @@ }, "devDependencies": { "@eslint-react/eslint-plugin": "^1.23.1", - "@eslint/config-inspector": "^0.6.0", + "@eslint/config-inspector": "^0.7.0", "@eslint/js": "^9.17.0", "@next/eslint-plugin-next": "^15.1.3", "@types/negotiator": "^0.6.3", - "@types/node": "^22.10.4", + "@types/node": "^22.10.5", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", "autoprefixer": "10.4.20", diff --git a/examples/vite-react-dom-app/package.json b/examples/vite-react-dom-app/package.json index 7e04f25147..f65f712a45 100644 --- a/examples/vite-react-dom-app/package.json +++ b/examples/vite-react-dom-app/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@eslint-react/eslint-plugin": "^1.23.1", - "@eslint/config-inspector": "^0.6.0", + "@eslint/config-inspector": "^0.7.0", "@eslint/js": "^9.17.0", "@tsconfig/node22": "^22.0.0", "@tsconfig/strictest": "^2.0.5", diff --git a/examples/vite-react-dom-js-app/package.json b/examples/vite-react-dom-js-app/package.json index f6a693e051..53237721dd 100644 --- a/examples/vite-react-dom-js-app/package.json +++ b/examples/vite-react-dom-js-app/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@eslint-react/eslint-plugin": "^1.23.1", - "@eslint/config-inspector": "^0.6.0", + "@eslint/config-inspector": "^0.7.0", "@eslint/js": "^9.17.0", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", diff --git a/examples/vite-react-dom-js-with-babel-app/package.json b/examples/vite-react-dom-js-with-babel-app/package.json index 26726c9151..1701b9e75a 100644 --- a/examples/vite-react-dom-js-with-babel-app/package.json +++ b/examples/vite-react-dom-js-with-babel-app/package.json @@ -20,7 +20,7 @@ "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.26.3", "@eslint-react/eslint-plugin": "^1.23.1", - "@eslint/config-inspector": "^0.6.0", + "@eslint/config-inspector": "^0.7.0", "@eslint/js": "^9.17.0", "@types/babel__core": "~7.20.5", "@types/babel__preset-env": "~7.9.7", diff --git a/package.json b/package.json index e44bfc90e3..4f7cccca9f 100644 --- a/package.json +++ b/package.json @@ -56,12 +56,12 @@ "@effect/platform-bun": "^0.52.0", "@effect/platform-node": "^0.68.0", "@effect/schema": "^0.75.5", - "@eslint/config-inspector": "^0.6.0", + "@eslint/config-inspector": "^0.7.0", "@eslint/js": "^9.17.0", "@swc/core": "^1.10.4", "@tsconfig/node22": "^22.0.0", "@tsconfig/strictest": "^2.0.5", - "@types/node": "^22.10.4", + "@types/node": "^22.10.5", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", "@typescript-eslint/parser": "^8.19.0", diff --git a/packages/core/src/element/get-element-represent-name.ts b/packages/core/src/element/get-element-represent-name.ts index 8302011162..e66823ecba 100644 --- a/packages/core/src/element/get-element-represent-name.ts +++ b/packages/core/src/element/get-element-represent-name.ts @@ -1,13 +1,13 @@ import { F, isString, O } from "@eslint-react/eff"; import * as JSX from "@eslint-react/jsx"; -import { decodeSettings, normalizeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleContext } from "@eslint-react/types"; import type { TSESTree } from "@typescript-eslint/types"; export function getElementRepresentName(node: TSESTree.JSXOpeningElement, context: RuleContext) { const rawElementName = JSX.getElementName(node); if (rawElementName === rawElementName.toLowerCase()) return rawElementName; - const { components, polymorphicPropName } = normalizeSettings(decodeSettings(context.settings)); + const { components, polymorphicPropName } = getSettingsFromContext(context); const asElementName = components.get(rawElementName); if (isString(asElementName)) return asElementName; return F.pipe( diff --git a/packages/plugins/eslint-plugin-react-debug/src/rules/is-from-react.ts b/packages/plugins/eslint-plugin-react-debug/src/rules/is-from-react.ts index e1bc0ec99b..133cda9070 100644 --- a/packages/plugins/eslint-plugin-react-debug/src/rules/is-from-react.ts +++ b/packages/plugins/eslint-plugin-react-debug/src/rules/is-from-react.ts @@ -1,6 +1,6 @@ import { isInitializedFromReact } from "@eslint-react/core"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import type { Scope } from "@typescript-eslint/scope-manager"; import type { TSESTree } from "@typescript-eslint/utils"; @@ -33,7 +33,7 @@ export default createRule<[], MessageID>({ }, name: RULE_NAME, create(context) { - const settings = decodeSettings(context.settings); + const settings = getSettingsFromContext(context); const finalSettings = { ...settings, strictImportCheck: true, diff --git a/packages/plugins/eslint-plugin-react-dom/src/rules/no-unknown-property.ts b/packages/plugins/eslint-plugin-react-dom/src/rules/no-unknown-property.ts index 5b8429a6a3..9d5491f293 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/rules/no-unknown-property.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/rules/no-unknown-property.ts @@ -4,7 +4,7 @@ // Ported from https://github.com/jsx-eslint/eslint-plugin-react/blob/master/lib/rules/no-unknown-property.js // TODO: Port to TypeScript -import { decodeSettings, normalizeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import { createRule } from "../utils"; import { compare, compareVersions } from "compare-versions"; import type { RuleFeature } from "@eslint-react/types"; @@ -1203,6 +1203,6 @@ function report(context, message, messageId, data) { } function testReactVersion(context, comparator, version) { - const { version: localVersion } = normalizeSettings(decodeSettings(context.settings)); + const { version: localVersion } = getSettingsFromContext(context); return compare(localVersion, version, comparator); } diff --git a/packages/plugins/eslint-plugin-react-dom/src/rules/no-unsafe-target-blank.ts b/packages/plugins/eslint-plugin-react-dom/src/rules/no-unsafe-target-blank.ts index b018db29c6..fb5db78136 100644 --- a/packages/plugins/eslint-plugin-react-dom/src/rules/no-unsafe-target-blank.ts +++ b/packages/plugins/eslint-plugin-react-dom/src/rules/no-unsafe-target-blank.ts @@ -1,7 +1,7 @@ import { getElementRepresentName } from "@eslint-react/core"; import { F, isString, O } from "@eslint-react/eff"; import * as JSX from "@eslint-react/jsx"; -import { decodeSettings, normalizeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import type { TSESTree } from "@typescript-eslint/utils"; import type { ReportDescriptor } from "@typescript-eslint/utils/ts-eslint"; @@ -44,7 +44,7 @@ export default createRule<[], MessageID>({ }, name: RULE_NAME, create(context) { - const settings = normalizeSettings(decodeSettings(context.settings)); + const settings = getSettingsFromContext(context); const additionalComponents = settings.additionalComponents.filter(c => c.as === "a"); function getReportDescriptor(node: TSESTree.JSXElement): O.Option> { const name = JSX.getElementName(node.openingElement); diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-effect.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-effect.ts index 8de4f86027..c425206ccb 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-effect.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-effect.ts @@ -1,7 +1,7 @@ import * as AST from "@eslint-react/ast"; import { isReactHookCallWithNameAlias } from "@eslint-react/core"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import * as VAR from "@eslint-react/var"; import { AST_NODE_TYPES } from "@typescript-eslint/types"; @@ -43,7 +43,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!/use\w*Effect/u.test(context.sourceCode.text)) return {}; - const settings = decodeSettings(context.settings); + const settings = getSettingsFromContext(context); const additionalHooks = settings.additionalHooks ?? {}; const isUseEffectLikeCall = isReactHookCallWithNameAlias("useEffect", context, additionalHooks.useEffect ?? []); diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-layout-effect.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-layout-effect.ts index 42f02125e4..88094dd5f1 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-layout-effect.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-direct-set-state-in-use-layout-effect.ts @@ -1,7 +1,7 @@ import * as AST from "@eslint-react/ast"; import { isReactHookCallWithNameAlias } from "@eslint-react/core"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import * as VAR from "@eslint-react/var"; import { AST_NODE_TYPES } from "@typescript-eslint/types"; @@ -44,7 +44,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!/use\w*Effect/u.test(context.sourceCode.text)) return {}; - const settings = decodeSettings(context.settings); + const settings = getSettingsFromContext(context); const additionalHooks = settings.additionalHooks ?? {}; const isUseLayoutEffectLikeCall = isReactHookCallWithNameAlias( diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-callback.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-callback.ts index 40c11caabb..645189e58c 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-callback.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-callback.ts @@ -1,7 +1,7 @@ import * as AST from "@eslint-react/ast"; import { isReactHookCall, isReactHookCallWithNameLoose, isUseCallbackCall } from "@eslint-react/core"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import * as VAR from "@eslint-react/var"; import { AST_NODE_TYPES } from "@typescript-eslint/types"; @@ -34,7 +34,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!context.sourceCode.text.includes("use")) return {}; - const alias = decodeSettings(context.settings).additionalHooks?.useCallback ?? []; + const alias = getSettingsFromContext(context).additionalHooks?.useCallback ?? []; return { CallExpression(node) { if (!isReactHookCall(node)) return; diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-memo.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-memo.ts index fb33377701..13b160d611 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-memo.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/no-unnecessary-use-memo.ts @@ -1,7 +1,7 @@ import * as AST from "@eslint-react/ast"; import { isReactHookCall, isReactHookCallWithNameLoose, isUseMemoCall } from "@eslint-react/core"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import * as VAR from "@eslint-react/var"; import { AST_NODE_TYPES } from "@typescript-eslint/types"; @@ -33,7 +33,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!context.sourceCode.text.includes("use")) return {}; - const alias = decodeSettings(context.settings).additionalHooks?.useMemo ?? []; + const alias = getSettingsFromContext(context).additionalHooks?.useMemo ?? []; return { CallExpression(node) { if (!isReactHookCall(node)) return; diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/prefer-use-state-lazy-initialization.ts b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/prefer-use-state-lazy-initialization.ts index 0139b420c5..82bbdab051 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/prefer-use-state-lazy-initialization.ts +++ b/packages/plugins/eslint-plugin-react-hooks-extra/src/rules/prefer-use-state-lazy-initialization.ts @@ -1,7 +1,7 @@ // Ported from https://github.com/jsx-eslint/eslint-plugin-react/pull/3579/commits/ebb739a0fe99a2ee77055870bfda9f67a2691374 import * as AST from "@eslint-react/ast"; import { isReactHookCall, isReactHookCallWithNameLoose, isUseStateCall } from "@eslint-react/core"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import type { CamelCase } from "string-ts"; @@ -35,7 +35,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!context.sourceCode.text.includes("use")) return {}; - const alias = decodeSettings(context.settings).additionalHooks?.useState ?? []; + const alias = getSettingsFromContext(context).additionalHooks?.useState ?? []; return { CallExpression(node) { if (!isReactHookCall(node)) return; diff --git a/packages/plugins/eslint-plugin-react-naming-convention/src/rules/use-state.ts b/packages/plugins/eslint-plugin-react-naming-convention/src/rules/use-state.ts index fee6fef006..4f329276a0 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/src/rules/use-state.ts +++ b/packages/plugins/eslint-plugin-react-naming-convention/src/rules/use-state.ts @@ -1,6 +1,6 @@ import { isReactHookCallWithNameLoose, isUseStateCall, useComponentCollector } from "@eslint-react/core"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import { AST_NODE_TYPES } from "@typescript-eslint/types"; import type { ReportDescriptor } from "@typescript-eslint/utils/ts-eslint"; @@ -39,7 +39,7 @@ export default createRule<[], MessageID>({ }, name: RULE_NAME, create(context) { - const alias = decodeSettings(context.settings).additionalHooks?.useState ?? []; + const alias = getSettingsFromContext(context).additionalHooks?.useState ?? []; const { ctx, listeners } = useComponentCollector(context); return { diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-context-provider.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-context-provider.ts index cff4f530c1..11846792b9 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-context-provider.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-context-provider.ts @@ -1,5 +1,5 @@ import * as JSX from "@eslint-react/jsx"; -import { decodeSettings, normalizeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import { compare } from "compare-versions"; import type { CamelCase } from "string-ts"; @@ -31,7 +31,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!context.sourceCode.text.includes(".Provider")) return {}; - const { version } = normalizeSettings(decodeSettings(context.settings)); + const { version } = getSettingsFromContext(context); if (compare(version, "19.0.0", "<")) return {}; return { JSXElement(node) { diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-forward-ref.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-forward-ref.ts index 56b31de524..94acfbbf2b 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-forward-ref.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-forward-ref.ts @@ -1,7 +1,7 @@ import * as AST from "@eslint-react/ast"; import { isForwardRefCall } from "@eslint-react/core"; import { O } from "@eslint-react/eff"; -import { decodeSettings, normalizeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleContext, RuleFeature } from "@eslint-react/types"; import type { TSESTree } from "@typescript-eslint/types"; import { AST_NODE_TYPES } from "@typescript-eslint/types"; @@ -37,7 +37,7 @@ export default createRule<[], MessageID>({ name: RULE_NAME, create(context) { if (!context.sourceCode.text.includes("forwardRef")) return {}; - const { version } = normalizeSettings(decodeSettings(context.settings)); + const { version } = getSettingsFromContext(context); if (compare(version, "19.0.0", "<")) return {}; return { CallExpression(node) { diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/no-leaked-conditional-rendering.ts b/packages/plugins/eslint-plugin-react-x/src/rules/no-leaked-conditional-rendering.ts index db72a669ac..9a08713a45 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/no-leaked-conditional-rendering.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/no-leaked-conditional-rendering.ts @@ -1,6 +1,6 @@ import * as AST from "@eslint-react/ast"; import { F, O } from "@eslint-react/eff"; -import { decodeSettings, normalizeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import * as VAR from "@eslint-react/var"; import type { Variable } from "@typescript-eslint/scope-manager"; @@ -218,7 +218,7 @@ export default createRule<[], MessageID>({ create(context) { if (!context.sourceCode.text.includes("&&") && !context.sourceCode.text.includes("?")) return {}; - const { version } = normalizeSettings(decodeSettings(context.settings)); + const { version } = getSettingsFromContext(context); // Allowed left node type variants const allowedVariants = [ diff --git a/packages/plugins/eslint-plugin-react-x/src/rules/prefer-react-namespace-import.ts b/packages/plugins/eslint-plugin-react-x/src/rules/prefer-react-namespace-import.ts index 1710fdfe52..e67c8bae90 100644 --- a/packages/plugins/eslint-plugin-react-x/src/rules/prefer-react-namespace-import.ts +++ b/packages/plugins/eslint-plugin-react-x/src/rules/prefer-react-namespace-import.ts @@ -1,4 +1,4 @@ -import { decodeSettings } from "@eslint-react/shared"; +import { getSettingsFromContext } from "@eslint-react/shared"; import type { RuleFeature } from "@eslint-react/types"; import type { TSESTree } from "@typescript-eslint/types"; import type { CamelCase } from "string-ts"; @@ -29,7 +29,7 @@ export default createRule<[], MessageID>({ }, name: RULE_NAME, create(context) { - const importSource = decodeSettings(context.settings).importSource ?? "react"; + const importSource = getSettingsFromContext(context).importSource ?? "react"; return { [`ImportDeclaration[source.value="${importSource}"] ImportDefaultSpecifier`]( node: TSESTree.ImportDefaultSpecifier, diff --git a/packages/shared/docs/README.md b/packages/shared/docs/README.md index 6caf0419f2..a5c9dc5027 100644 --- a/packages/shared/docs/README.md +++ b/packages/shared/docs/README.md @@ -32,3 +32,4 @@ - [defineSettings](functions/defineSettings.md) - [getReactVersion](functions/getReactVersion.md) +- [getSettingsFromContext](functions/getSettingsFromContext.md) diff --git a/packages/shared/docs/functions/getSettingsFromContext.md b/packages/shared/docs/functions/getSettingsFromContext.md new file mode 100644 index 0000000000..8360f4adb5 --- /dev/null +++ b/packages/shared/docs/functions/getSettingsFromContext.md @@ -0,0 +1,21 @@ +[**@eslint-react/shared**](../README.md) + +*** + +[@eslint-react/shared](../README.md) / getSettingsFromContext + +# Function: getSettingsFromContext() + +> **getSettingsFromContext**(`context`): `ESLintReactSettingsNormalized` + +## Parameters + +### context + +#### settings + +`unknown` + +## Returns + +`ESLintReactSettingsNormalized` diff --git a/packages/shared/package.json b/packages/shared/package.json index 1d3a85b0b3..abd11cffbe 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -42,8 +42,6 @@ "dependencies": { "@eslint-react/eff": "workspace:*", "@typescript-eslint/utils": "^8.19.0", - "fast-equals": "^5.0.1", - "micro-memoize": "^4.1.2", "picomatch": "^4.0.2", "ts-pattern": "^5.6.0", "valibot": "^1.0.0-beta.9" diff --git a/packages/shared/src/cache.ts b/packages/shared/src/cache.ts new file mode 100644 index 0000000000..0ff52888f8 --- /dev/null +++ b/packages/shared/src/cache.ts @@ -0,0 +1,3 @@ +import type { ESLintReactSettingsNormalized } from "./schemas"; + +export const normalizedSettingsCache = new Map(); diff --git a/packages/shared/src/settings.ts b/packages/shared/src/settings.ts index 21880efb6d..3d80ed4890 100644 --- a/packages/shared/src/settings.ts +++ b/packages/shared/src/settings.ts @@ -1,17 +1,14 @@ import { E, F } from "@eslint-react/eff"; -import { shallowEqual } from "fast-equals"; -import memoize from "micro-memoize"; import pm from "picomatch"; import { match, P } from "ts-pattern"; import type { PartialDeep } from "type-fest"; import { parse } from "valibot"; +import { normalizedSettingsCache } from "./cache"; import { getReactVersion } from "./get-react-version"; import type { ESLintReactSettings, ESLintReactSettingsNormalized } from "./schemas"; import { ESLintSettingsSchema } from "./schemas"; -// #region Constants - /** * The default ESLint settings for "react-x". */ @@ -24,10 +21,6 @@ export const DEFAULT_ESLINT_REACT_SETTINGS = { version: "detect", } as const satisfies ESLintReactSettings; -// #endregion - -// #region Decoding Functions - /** * Unsafely casts settings from a data object from `context.settings`. * @internal @@ -41,31 +34,21 @@ export function unsafeReadSettings(data: unknown): PartialDeep { - return { +export function normalizeSettings(data: unknown): ESLintReactSettingsNormalized { + const memoized = normalizedSettingsCache.get(data); + if (memoized) return memoized; + + const settings = { ...DEFAULT_ESLINT_REACT_SETTINGS, ...parse(ESLintSettingsSchema, data)["react-x"] ?? {}, }; -}, { isEqual: (a, b) => a === b }); - -// #endregion - -// #region Normalization Functions - -/** - * Normalizes the settings by converting all shorthand properties to their full form. - * @param settings The settings. - * @returns The normalized settings. - * @internal - */ -export const normalizeSettings = memoize((settings: ESLintReactSettings): ESLintReactSettingsNormalized => { const additionalComponents = settings.additionalComponents ?? []; - return { + const normalized = { ...settings, additionalComponents: additionalComponents.map((component) => ({ ...component, @@ -85,11 +68,13 @@ export const normalizeSettings = memoize((settings: ESLintReactSettings): ESLint .with(P.union(P.nullish, "", "detect"), () => E.getOrElse(getReactVersion(), F.constant("19.0.0"))) .otherwise(F.identity), }; -}, { isEqual: shallowEqual }); - -// #endregion + normalizedSettingsCache.set(data, normalized); + return normalized; +} -// #region Helper Functions +export function getSettingsFromContext(context: { settings: unknown }): ESLintReactSettingsNormalized { + return normalizeSettings(context.settings); +} /** * A helper function to define settings for "react-x" with type checking in JavaScript files. @@ -98,8 +83,6 @@ export const normalizeSettings = memoize((settings: ESLintReactSettings): ESLint */ export const defineSettings: (settings: ESLintReactSettings) => ESLintReactSettings = F.identity; -// #endregion - declare module "@typescript-eslint/utils/ts-eslint" { export interface SharedConfigurationSettings { // eslint-disable-next-line no-restricted-syntax diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be39c998e3..2289c41ac5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,8 +38,8 @@ importers: specifier: ^0.75.5 version: 0.75.5(effect@3.12.0) '@eslint/config-inspector': - specifier: ^0.6.0 - version: 0.6.0(eslint@9.17.0(jiti@2.4.2)) + specifier: ^0.7.0 + version: 0.7.0(eslint@9.17.0(jiti@2.4.2)) '@eslint/js': specifier: ^9.17.0 version: 9.17.0 @@ -53,8 +53,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 '@types/node': - specifier: ^22.10.4 - version: 22.10.4 + specifier: ^22.10.5 + version: 22.10.5 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -168,7 +168,7 @@ importers: version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) vitest: specifier: ^2.1.8 - version: 2.1.8(@types/node@22.10.4)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + version: 2.1.8(@types/node@22.10.5)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) examples/dual-react-dom-lib: devDependencies: @@ -185,8 +185,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 '@types/node': - specifier: ^22.10.4 - version: 22.10.4 + specifier: ^22.10.5 + version: 22.10.5 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -234,8 +234,8 @@ importers: specifier: ^1.23.1 version: 1.23.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@eslint/config-inspector': - specifier: ^0.6.0 - version: 0.6.0(eslint@9.17.0(jiti@2.4.2)) + specifier: ^0.7.0 + version: 0.7.0(eslint@9.17.0(jiti@2.4.2)) '@eslint/js': specifier: ^9.17.0 version: 9.17.0 @@ -246,8 +246,8 @@ importers: specifier: ^0.6.3 version: 0.6.3 '@types/node': - specifier: ^22.10.4 - version: 22.10.4 + specifier: ^22.10.5 + version: 22.10.5 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -295,8 +295,8 @@ importers: specifier: ^1.23.1 version: 1.23.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@eslint/config-inspector': - specifier: ^0.6.0 - version: 0.6.0(eslint@9.17.0(jiti@2.4.2)) + specifier: ^0.7.0 + version: 0.7.0(eslint@9.17.0(jiti@2.4.2)) '@eslint/js': specifier: ^9.17.0 version: 9.17.0 @@ -314,7 +314,7 @@ importers: version: 19.0.2(@types/react@19.0.2) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) eslint: specifier: ^9.17.0 version: 9.17.0(jiti@2.4.2) @@ -332,7 +332,7 @@ importers: version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) vite: specifier: ^6.0.7 - version: 6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) examples/vite-react-dom-js-app: dependencies: @@ -347,8 +347,8 @@ importers: specifier: ^1.23.1 version: 1.23.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@eslint/config-inspector': - specifier: ^0.6.0 - version: 0.6.0(eslint@9.17.0(jiti@2.4.2)) + specifier: ^0.7.0 + version: 0.7.0(eslint@9.17.0(jiti@2.4.2)) '@eslint/js': specifier: ^9.17.0 version: 9.17.0 @@ -360,7 +360,7 @@ importers: version: 19.0.2(@types/react@19.0.2) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) eslint: specifier: ^9.17.0 version: 9.17.0(jiti@2.4.2) @@ -375,7 +375,7 @@ importers: version: 15.14.0 vite: specifier: ^6.0.7 - version: 6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) examples/vite-react-dom-js-with-babel-app: dependencies: @@ -402,8 +402,8 @@ importers: specifier: ^1.23.1 version: 1.23.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@eslint/config-inspector': - specifier: ^0.6.0 - version: 0.6.0(eslint@9.17.0(jiti@2.4.2)) + specifier: ^0.7.0 + version: 0.7.0(eslint@9.17.0(jiti@2.4.2)) '@eslint/js': specifier: ^9.17.0 version: 9.17.0 @@ -421,7 +421,7 @@ importers: version: 19.0.2(@types/react@19.0.2) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) eslint: specifier: ^9.17.0 version: 9.17.0(jiti@2.4.2) @@ -436,7 +436,7 @@ importers: version: 15.14.0 vite: specifier: ^6.0.7 - version: 6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) packages/core: dependencies: @@ -913,12 +913,6 @@ importers: '@typescript-eslint/utils': specifier: ^8.19.0 version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - fast-equals: - specifier: ^5.0.1 - version: 5.0.1 - micro-memoize: - specifier: ^4.1.2 - version: 4.1.2 picomatch: specifier: ^4.0.2 version: 4.0.2 @@ -1127,8 +1121,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 '@types/node': - specifier: ^22.10.4 - version: 22.10.4 + specifier: ^22.10.5 + version: 22.10.5 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -1137,7 +1131,7 @@ importers: version: 19.0.2(@types/react@19.0.2) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) + version: 4.3.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1)) '@workspace/configs': specifier: workspace:* version: link:../workspace/configs @@ -1185,7 +1179,7 @@ importers: version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) vite: specifier: ^6.0.7 - version: 6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) workspace/configs: {} @@ -1207,8 +1201,8 @@ importers: specifier: ^50.6.1 version: 50.6.1(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-perfectionist: - specifier: ^4.5.0 - version: 4.5.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + specifier: ^4.6.0 + version: 4.6.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint-plugin-regexp: specifier: ^2.7.0 version: 2.7.0(eslint@9.17.0(jiti@2.4.2)) @@ -2706,8 +2700,8 @@ packages: resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-inspector@0.6.0': - resolution: {integrity: sha512-sN+ddom8AjUC5Zc/0uUVf11lpVudN+4cGVxA0ET6TsqE7Gezeug7NN6M8zonTpqsVSnaexGApwGUo0+6MsWfQQ==} + '@eslint/config-inspector@0.7.0': + resolution: {integrity: sha512-soPcV7c4/oB9ktEIojw7O6n46+WIz0vEYnDj+PV6jLRFOD4PEFr40yA58nrpZuNRIo1catuLCJ9ZvP9Zedb/fQ==} hasBin: true peerDependencies: eslint: ^8.50.0 || ^9.0.0 @@ -3099,25 +3093,25 @@ packages: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - '@nodelib/fs.scandir@3.0.0': - resolution: {integrity: sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==} - engines: {node: '>=16.14.0'} + '@nodelib/fs.scandir@4.0.1': + resolution: {integrity: sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw==} + engines: {node: '>=18.18.0'} '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - '@nodelib/fs.stat@3.0.0': - resolution: {integrity: sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==} - engines: {node: '>=16.14.0'} + '@nodelib/fs.stat@4.0.0': + resolution: {integrity: sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg==} + engines: {node: '>=18.18.0'} '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nodelib/fs.walk@2.0.0': - resolution: {integrity: sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==} - engines: {node: '>=16.14.0'} + '@nodelib/fs.walk@3.0.1': + resolution: {integrity: sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==} + engines: {node: '>=18.18.0'} '@nolyfill/is-core-module@1.0.39': resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} @@ -4088,8 +4082,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.10.4': - resolution: {integrity: sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4265,12 +4259,6 @@ packages: '@vitest/utils@2.1.8': resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} - '@voxpelli/config-array-find-files@1.2.1': - resolution: {integrity: sha512-mRqVGLcK+yU+fQyaHAL9Xbhw633spi+VGurX1+gwSiZS8SzX63WzOmGi3qXO7mn4cozJcExyzIC5WmbUFJWQOw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@eslint/config-array': '>=0.16.0' - '@vue/compiler-core@3.5.13': resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} @@ -4459,6 +4447,12 @@ packages: peerDependencies: esbuild: '>=0.18' + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -5205,8 +5199,8 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-perfectionist@4.5.0: - resolution: {integrity: sha512-Dh+6UO50GLRM5z8HMv7HkCy+XUGgDfG8jbTYrqL6A07VBIPzlnM3CMZkovWEWT3mOPzlFTYdyp1bYr+HZTKD6g==} + eslint-plugin-perfectionist@4.6.0: + resolution: {integrity: sha512-kOswTebUK0LlYExRwqz7YQtvyTUIRsKfp8XrwBBeHGh2e8MBOS6K+7VvG6HpmNckyKySi1I96uPeAlptMFGcRQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: eslint: '>=8.0.0' @@ -9854,20 +9848,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-inspector@0.6.0(eslint@9.17.0(jiti@2.4.2))': + '@eslint/config-inspector@0.7.0(eslint@9.17.0(jiti@2.4.2))': dependencies: - '@eslint/config-array': 0.19.1 - '@voxpelli/config-array-find-files': 1.2.1(@eslint/config-array@0.19.1) - bundle-require: 5.0.0(esbuild@0.24.2) + '@nodelib/fs.walk': 3.0.1 + bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 chokidar: 4.0.3 + debug: 4.4.0 esbuild: 0.24.2 eslint: 9.17.0(jiti@2.4.2) fast-glob: 3.3.2 find-up: 7.0.0 get-port-please: 3.1.2 h3: 1.13.0 - minimatch: 9.0.5 mlly: 1.7.3 mrmime: 2.0.0 open: 10.1.0 @@ -10260,23 +10253,23 @@ snapshots: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.scandir@3.0.0': + '@nodelib/fs.scandir@4.0.1': dependencies: - '@nodelib/fs.stat': 3.0.0 + '@nodelib/fs.stat': 4.0.0 run-parallel: 1.2.0 '@nodelib/fs.stat@2.0.5': {} - '@nodelib/fs.stat@3.0.0': {} + '@nodelib/fs.stat@4.0.0': {} '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nodelib/fs.walk@2.0.0': + '@nodelib/fs.walk@3.0.1': dependencies: - '@nodelib/fs.scandir': 3.0.0 + '@nodelib/fs.scandir': 4.0.1 fastq: 1.17.1 '@nolyfill/is-core-module@1.0.39': {} @@ -11032,7 +11025,7 @@ snapshots: '@types/concat-stream@2.0.3': dependencies: - '@types/node': 22.10.4 + '@types/node': 22.10.5 '@types/d3-array@3.2.1': {} @@ -11202,7 +11195,7 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.10.4': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 @@ -11388,14 +11381,14 @@ snapshots: '@ungap/structured-clone@1.2.1': {} - '@vitejs/plugin-react@4.3.4(vite@6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': + '@vitejs/plugin-react@4.3.4(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color @@ -11406,13 +11399,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0))': + '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 5.4.11(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + vite: 5.4.11(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) '@vitest/pretty-format@2.1.8': dependencies: @@ -11442,7 +11435,7 @@ snapshots: sirv: 3.0.0 tinyglobby: 0.2.10 tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@22.10.4)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + vitest: 2.1.8(@types/node@22.10.5)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) '@vitest/utils@2.1.8': dependencies: @@ -11450,11 +11443,6 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@voxpelli/config-array-find-files@1.2.1(@eslint/config-array@0.19.1)': - dependencies: - '@eslint/config-array': 0.19.1 - '@nodelib/fs.walk': 2.0.0 - '@vue/compiler-core@3.5.13': dependencies: '@babel/parser': 7.26.3 @@ -11648,6 +11636,11 @@ snapshots: esbuild: 0.24.2 load-tsconfig: 0.2.5 + bundle-require@5.1.0(esbuild@0.24.2): + dependencies: + esbuild: 0.24.2 + load-tsconfig: 0.2.5 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -12564,7 +12557,7 @@ snapshots: - bluebird - supports-color - eslint-plugin-perfectionist@4.5.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): + eslint-plugin-perfectionist@4.6.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: '@typescript-eslint/types': 8.19.0 '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) @@ -12749,7 +12742,7 @@ snapshots: '@typescript-eslint/utils': 7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) optionalDependencies: - vitest: 2.1.8(@types/node@22.10.4)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + vitest: 2.1.8(@types/node@22.10.5)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) transitivePeerDependencies: - supports-color - typescript @@ -15921,7 +15914,7 @@ snapshots: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 22.10.4 + '@types/node': 22.10.5 '@types/unist': 3.0.3 concat-stream: 2.0.0 debug: 4.4.0 @@ -16144,13 +16137,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.8(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0): + vite-node@2.1.8(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + vite: 5.4.11(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -16162,25 +16155,25 @@ snapshots: - supports-color - terser - vite@5.4.11(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0): + vite@5.4.11(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.28.1 optionalDependencies: - '@types/node': 22.10.4 + '@types/node': 22.10.5 fsevents: 2.3.3 lightningcss: 1.28.2 sass: 1.83.0 terser: 5.37.0 - vite@6.0.7(@types/node@22.10.4)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): + vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): dependencies: esbuild: 0.24.2 postcss: 8.4.49 rollup: 4.28.1 optionalDependencies: - '@types/node': 22.10.4 + '@types/node': 22.10.5 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.28.2 @@ -16189,10 +16182,10 @@ snapshots: tsx: 4.19.2 yaml: 2.6.1 - vitest@2.1.8(@types/node@22.10.4)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0): + vitest@2.1.8(@types/node@22.10.5)(@vitest/ui@2.1.8)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)) + '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -16208,11 +16201,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) - vite-node: 2.1.8(@types/node@22.10.4)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + vite: 5.4.11(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) + vite-node: 2.1.8(@types/node@22.10.5)(lightningcss@1.28.2)(sass@1.83.0)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.10.4 + '@types/node': 22.10.5 '@vitest/ui': 2.1.8(vitest@2.1.8) transitivePeerDependencies: - less diff --git a/website/package.json b/website/package.json index 4b009bf248..08767c7c4a 100644 --- a/website/package.json +++ b/website/package.json @@ -30,7 +30,7 @@ "@tailwindcss/postcss": "^4.0.0-beta.8", "@tsconfig/node22": "^22.0.0", "@tsconfig/strictest": "^2.0.5", - "@types/node": "^22.10.4", + "@types/node": "^22.10.5", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", "@vitejs/plugin-react": "^4.3.4", diff --git a/workspace/eslint-plugin-deps/package.json b/workspace/eslint-plugin-deps/package.json index 233dcc3678..eb5c43b381 100644 --- a/workspace/eslint-plugin-deps/package.json +++ b/workspace/eslint-plugin-deps/package.json @@ -9,7 +9,7 @@ "eslint-plugin-eslint-plugin": "^6.4.0", "eslint-plugin-import-x": "^4.6.1", "eslint-plugin-jsdoc": "^50.6.1", - "eslint-plugin-perfectionist": "^4.5.0", + "eslint-plugin-perfectionist": "^4.6.0", "eslint-plugin-regexp": "^2.7.0", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unicorn": "^56.0.1",