diff --git a/eslint.config.ts b/eslint.config.ts index 44143c1c4..90f47bf52 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -9,7 +9,6 @@ import eslintPluginJsdoc from "eslint-plugin-jsdoc"; import eslintPluginLocal from "@workspace/eslint-plugin-local"; import eslintPluginPerfectionist from "eslint-plugin-perfectionist"; import eslintPluginRegexp from "eslint-plugin-regexp"; -import eslintPluginSafeTypeScript from "@susisu/eslint-plugin-safe-typescript"; import eslintPluginSimpleImportSort from "eslint-plugin-simple-import-sort"; import eslintPluginUnicorn from "eslint-plugin-unicorn"; import eslintPluginVitest from "eslint-plugin-vitest"; @@ -68,9 +67,6 @@ const enableTypeCheckedRules = { ...tseslint.configs.strictTypeCheckedOnly .map((x) => x.rules) .reduce((a, b) => ({ ...a, ...b }), {}), - ...eslintPluginSafeTypeScript.configs.recommended.rules, - "@susisu/safe-typescript/no-unsafe-object-property-check": "off", - "@susisu/safe-typescript/no-unsafe-object-property-overwrite": "off", "@typescript-eslint/consistent-type-exports": "error", "@typescript-eslint/strict-boolean-expressions": ["error", { allowAny: false, @@ -133,7 +129,6 @@ export default tseslint.config( }, plugins: { ["@stylistic"]: eslintStylistic, - ["@susisu/safe-typescript"]: eslintPluginSafeTypeScript, ["local"]: eslintPluginLocal, ["simple-import-sort"]: eslintPluginSimpleImportSort, ["unicorn"]: eslintPluginUnicorn, diff --git a/package.json b/package.json index 9b61fa46d..159c6e6e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/monorepo", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "private": true, "description": "Monorepo for eslint-plugin-react-[x, dom, web-api, hooks-extra, naming-convention].", "keywords": [ @@ -56,7 +56,6 @@ "@eslint/markdown": "^6.2.1", "@napi-rs/canvas": "^0.1.65", "@stylistic/eslint-plugin": "^2.13.0", - "@susisu/eslint-plugin-safe-typescript": "^0.9.2", "@swc/core": "^1.10.9", "@tsconfig/node22": "^22.0.0", "@tsconfig/strictest": "^2.0.5", diff --git a/packages/core/package.json b/packages/core/package.json index 38dcd5aee..1b2d7f15f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/core", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's ESLint utility module for static analysis of React core APIs and Patterns.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/plugins/eslint-plugin-react-debug/package.json b/packages/plugins/eslint-plugin-react-debug/package.json index 37e9ae778..6b1d7acf1 100644 --- a/packages/plugins/eslint-plugin-react-debug/package.json +++ b/packages/plugins/eslint-plugin-react-debug/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-debug", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's ESLint plugin for debugging related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-dom/package.json b/packages/plugins/eslint-plugin-react-dom/package.json index 79c4cfa30..2a42b98b7 100644 --- a/packages/plugins/eslint-plugin-react-dom/package.json +++ b/packages/plugins/eslint-plugin-react-dom/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-dom", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's ESLint plugin for React DOM related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-hooks-extra/package.json b/packages/plugins/eslint-plugin-react-hooks-extra/package.json index 8c056edd5..6280e236c 100644 --- a/packages/plugins/eslint-plugin-react-hooks-extra/package.json +++ b/packages/plugins/eslint-plugin-react-hooks-extra/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-hooks-extra", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's ESLint plugin for React Hooks related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-naming-convention/package.json b/packages/plugins/eslint-plugin-react-naming-convention/package.json index 72515a267..5eeef482d 100644 --- a/packages/plugins/eslint-plugin-react-naming-convention/package.json +++ b/packages/plugins/eslint-plugin-react-naming-convention/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-naming-convention", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's ESLint plugin for naming convention related rules.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-web-api/package.json b/packages/plugins/eslint-plugin-react-web-api/package.json index a229ca116..f40d9e80b 100644 --- a/packages/plugins/eslint-plugin-react-web-api/package.json +++ b/packages/plugins/eslint-plugin-react-web-api/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-web-api", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's ESLint plugin for interacting with Web APIs", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin-react-x/package.json b/packages/plugins/eslint-plugin-react-x/package.json index 279ed2038..e75cfbe35 100644 --- a/packages/plugins/eslint-plugin-react-x/package.json +++ b/packages/plugins/eslint-plugin-react-x/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-x", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "A set of composable ESLint rules for libraries and frameworks that use React as a UI runtime.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin/package.json b/packages/plugins/eslint-plugin/package.json index 529a16bb4..98cdf8123 100644 --- a/packages/plugins/eslint-plugin/package.json +++ b/packages/plugins/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/eslint-plugin", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "A set of composable ESLint rules for libraries and frameworks that use React as a UI runtime.", "keywords": [ "react", diff --git a/packages/plugins/eslint-plugin/src/configs/disable-debug.ts b/packages/plugins/eslint-plugin/src/configs/disable-debug.ts index 2897c5d16..aa7954194 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-debug.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-debug.ts @@ -1,6 +1,7 @@ -import { entries, fromEntries } from "../utils"; +import type { RulePreset } from "@eslint-react/shared"; + import { rules as debugRules } from "./debug"; export const name = "@eslint-react/disable-debug"; -export const rules = fromEntries(entries(debugRules).map(([key]) => [key, "off"] as const)); +export const rules: RulePreset = Object.fromEntries(Object.entries(debugRules).map(([rule]) => [rule, "off"])); diff --git a/packages/plugins/eslint-plugin/src/configs/disable-dom.ts b/packages/plugins/eslint-plugin/src/configs/disable-dom.ts index ed975b36e..e09d0bfff 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-dom.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-dom.ts @@ -1,6 +1,7 @@ -import { entries, fromEntries } from "../utils"; +import type { RulePreset } from "@eslint-react/shared"; + import { rules as domRules } from "./dom"; export const name = "@eslint-react/disable-dom"; -export const rules = fromEntries(entries(domRules).map(([key]) => [key, "off"] as const)); +export const rules: RulePreset = Object.fromEntries(Object.entries(domRules).map(([key]) => [key, "off"] as const)); diff --git a/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts b/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts index 6ac88bfd4..ecd4f0813 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-type-checked.ts @@ -2,7 +2,7 @@ import type { RulePreset } from "@eslint-react/shared"; export const name = "@eslint-react/disable-type-checked"; -export const rules = { +export const rules: RulePreset = { "@eslint-react/no-leaked-conditional-rendering": "off", "@eslint-react/prefer-read-only-props": "off", -} as const satisfies RulePreset; +}; diff --git a/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts b/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts index 827015d45..2828ee7e9 100644 --- a/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts +++ b/packages/plugins/eslint-plugin/src/configs/disable-web-api.ts @@ -1,6 +1,7 @@ -import { entries, fromEntries } from "../utils"; +import type { RulePreset } from "@eslint-react/shared"; + import { rules as webApiRules } from "./web-api"; export const name = "@eslint-react/disable-web-api"; -export const rules = fromEntries(entries(webApiRules).map(([key]) => [key, "off"] as const)); +export const rules: RulePreset = Object.fromEntries(Object.entries(webApiRules).map(([key]) => [key, "off"] as const)); diff --git a/packages/plugins/eslint-plugin/src/configs/off.ts b/packages/plugins/eslint-plugin/src/configs/off.ts index c4d162bb6..a126d1790 100644 --- a/packages/plugins/eslint-plugin/src/configs/off.ts +++ b/packages/plugins/eslint-plugin/src/configs/off.ts @@ -1,10 +1,11 @@ -import { entries, fromEntries } from "../utils"; +import type { RulePreset } from "@eslint-react/shared"; + import { rules as allRules } from "./all"; import { rules as disableTypeCheckedRules } from "./disable-type-checked"; export const name = "@eslint-react/off"; -export const rules = { - ...fromEntries(entries(allRules).map(([key]) => [key, "off"] as const)), +export const rules: RulePreset = { + ...Object.fromEntries(Object.entries(allRules).map(([key]) => [key, "off"] as const)), ...disableTypeCheckedRules, }; diff --git a/packages/plugins/eslint-plugin/src/utils/entries.ts b/packages/plugins/eslint-plugin/src/utils/entries.ts deleted file mode 100644 index cec5173e9..000000000 --- a/packages/plugins/eslint-plugin/src/utils/entries.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { Pretty } from "@eslint-react/eff"; - -// Ported from: https://github.com/remeda/remeda/blob/9d742036f6c9cdc216e2c771805051855e7e7ac4/src/entries.ts -type EntriesEntryForKey = Key extends number | string ? [key: `${Key}`, value: Required[Key]] - : never; -type EntriesEntry = Pretty<{ [P in keyof T]-?: EntriesEntryForKey }[keyof T]>; -export function entries(data: T): Array>; -export function entries(): (data: T) => Array>; -export function entries(...args: ReadonlyArray): unknown { - return Object.entries(args); -} - -// Ported from: https://github.com/remeda/remeda/blob/9d742036f6c9cdc216e2c771805051855e7e7ac4/src/fromEntries.ts -type IterableContainer = readonly [] | ReadonlyArray; -type FromEntriesEntry = readonly [ - key: Key, - value: Value, -]; -type FromEntries = Entries extends readonly [ - infer First, - ...infer Tail, -] ? FromEntriesTuple - : Entries extends readonly [...infer Head, infer Last] ? FromEntriesTuple - : Entries extends IterableContainer ? FromEntriesArray - : "ERROR: Entries array-like could not be inferred"; -type FromEntriesTuple = E extends FromEntriesEntry ? FromEntries & Record - : "ERROR: Array-like contains a non-entry element"; -type FromEntriesArray> = string extends AllKeys - ? Record - : number extends AllKeys ? Record - : symbol extends AllKeys ? Record - : FromEntriesArrayWithLiteralKeys; -type FromEntriesArrayWithLiteralKeys> = { - [P in AllKeys]?: ValueForKey; -}; -type AllKeys> = Extract< - Entries[number], - FromEntriesEntry ->[0]; -type ValueForKey< - Entries extends IterableContainer, - K extends PropertyKey, -> = (Extract> extends never ? Entries[number] - : Extract>)[1]; -export function fromEntries>( - entries: Entries, -): Pretty>; -export function fromEntries(): >( - entries: Entries, -) => Pretty>; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function fromEntries(...args: ReadonlyArray): unknown { - return Object.fromEntries(args); -} diff --git a/packages/plugins/eslint-plugin/src/utils/index.ts b/packages/plugins/eslint-plugin/src/utils/index.ts index 035985ce6..e99679f57 100644 --- a/packages/plugins/eslint-plugin/src/utils/index.ts +++ b/packages/plugins/eslint-plugin/src/utils/index.ts @@ -1,4 +1,3 @@ -export * from "./entries"; export * from "./pad-keys-left"; export * from "./transform-keys"; export * from "./type-of"; diff --git a/packages/plugins/eslint-plugin/src/utils/pad-keys-left.ts b/packages/plugins/eslint-plugin/src/utils/pad-keys-left.ts index a6b552c3b..ac2874fdf 100644 --- a/packages/plugins/eslint-plugin/src/utils/pad-keys-left.ts +++ b/packages/plugins/eslint-plugin/src/utils/pad-keys-left.ts @@ -7,6 +7,5 @@ export function padKeysLeft( obj: A, left: B, ): PadKeysLeft { - // eslint-disable-next-line @susisu/safe-typescript/no-type-assertion return transformKeys(obj, (key) => `${left}${key}`) as never; } diff --git a/packages/plugins/eslint-plugin/src/utils/transform-keys.ts b/packages/plugins/eslint-plugin/src/utils/transform-keys.ts index 55bc95b9e..a0b1860e2 100644 --- a/packages/plugins/eslint-plugin/src/utils/transform-keys.ts +++ b/packages/plugins/eslint-plugin/src/utils/transform-keys.ts @@ -1,4 +1,3 @@ -/* eslint-disable @susisu/safe-typescript/no-type-assertion */ // Copied from https://github.com/gustavoguichard/string-ts/blob/9dd444f03fdfa225f1643e6f1f8c18f9480224bb/src/utils/object-keys/transform-keys.ts#L12 import { typeOf } from "./type-of"; diff --git a/packages/plugins/eslint-plugin/src/utils/type-of.ts b/packages/plugins/eslint-plugin/src/utils/type-of.ts index 521b54fb6..db6cc68e2 100644 --- a/packages/plugins/eslint-plugin/src/utils/type-of.ts +++ b/packages/plugins/eslint-plugin/src/utils/type-of.ts @@ -1,4 +1,3 @@ -/* eslint-disable @susisu/safe-typescript/no-type-assertion */ /** * This is an enhanced version of the typeof operator to check the type of more complex values. * In this case we just mind about arrays and objects. We can add more on demand. diff --git a/packages/shared/package.json b/packages/shared/package.json index ff0a38bbd..6c00e571e 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/shared", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's Shared constants and functions.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/shared/src/settings.ts b/packages/shared/src/settings.ts index 549a83ea9..bc373f534 100644 --- a/packages/shared/src/settings.ts +++ b/packages/shared/src/settings.ts @@ -49,7 +49,6 @@ export interface ESLintReactSettingsNormalized { */ export function unsafeDecodeSettings(data: unknown): PartialDeep { // @ts-expect-error - skip type checking for unsafe cast - // eslint-disable-next-line @susisu/safe-typescript/no-type-assertion return (data?.["react-x"] ?? {}) as PartialDeep; } diff --git a/packages/utilities/ast/package.json b/packages/utilities/ast/package.json index 7989088f7..474fa6fac 100644 --- a/packages/utilities/ast/package.json +++ b/packages/utilities/ast/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/ast", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's TSESTree AST utility module.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/eff/package.json b/packages/utilities/eff/package.json index 682b7c717..fa4269cec 100644 --- a/packages/utilities/eff/package.json +++ b/packages/utilities/eff/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/eff", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "JavaScript and TypeScript utilities (previously some re-exports of the effect library).", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/jsx/package.json b/packages/utilities/jsx/package.json index 2ae682058..b9246e3f1 100644 --- a/packages/utilities/jsx/package.json +++ b/packages/utilities/jsx/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/jsx", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's TSESTree AST utility module for static analysis of JSX.", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/packages/utilities/var/package.json b/packages/utilities/var/package.json index e8cd3b81f..9c4ce25c6 100644 --- a/packages/utilities/var/package.json +++ b/packages/utilities/var/package.json @@ -1,6 +1,6 @@ { "name": "@eslint-react/var", - "version": "1.24.1-next.0", + "version": "1.24.1-beta.0", "description": "ESLint React's TSESTree AST utility module for static analysis of variables", "homepage": "https://github.com/Rel1cx/eslint-react", "bugs": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08e31cda9..b4badeefb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,9 +42,6 @@ importers: '@stylistic/eslint-plugin': specifier: ^2.13.0 version: 2.13.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3) - '@susisu/eslint-plugin-safe-typescript': - specifier: ^0.9.2 - version: 0.9.2(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.18.0(jiti@2.4.2))(typescript-eslint@8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3))(typescript@5.7.3) '@swc/core': specifier: ^1.10.9 version: 1.10.9(@swc/helpers@0.5.15) @@ -312,8 +309,8 @@ importers: version: 19.0.0(react@19.0.0) devDependencies: '@eslint-react/eslint-plugin': - specifier: ^1.24.0 - version: 1.24.0(eslint@9.18.0(jiti@2.4.2))(ts-api-utils@2.0.0(typescript@5.7.3))(typescript@5.7.3) + specifier: workspace:* + version: link:../../packages/plugins/eslint-plugin '@eslint/config-inspector': specifier: ^1.0.0 version: 1.0.0(eslint@9.18.0(jiti@2.4.2)) @@ -3591,18 +3588,6 @@ packages: peerDependencies: eslint: '>=8.40.0' - '@susisu/eslint-plugin-safe-typescript@0.9.2': - resolution: {integrity: sha512-AKCf8wNO7mrfgTRGnZCpvchzZ7CqfMEXy2lJouRVbatQPSt53LBCgNmK0GxuRihbhCqqDKsUAYFG6n8akVEZ/Q==} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 - typescript: ^5.7.3 - typescript-eslint: ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - typescript-eslint: - optional: true - '@swc/core-darwin-arm64@1.10.9': resolution: {integrity: sha512-XTHLtijFervv2B+i1ngM993umhSj9K1IeMomvU/Db84Asjur2XmD4KXt9QPnGDRFgv2kLSjZ+DDL25Qk0f4r+w==} engines: {node: '>=10'} @@ -3903,9 +3888,6 @@ packages: '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -10683,18 +10665,6 @@ snapshots: - supports-color - typescript - '@susisu/eslint-plugin-safe-typescript@0.9.2(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.18.0(jiti@2.4.2))(typescript-eslint@8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3))(typescript@5.7.3)': - dependencies: - '@types/eslint': 9.6.1 - '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3) - typescript: 5.7.3 - optionalDependencies: - '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3) - typescript-eslint: 8.21.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3) - transitivePeerDependencies: - - eslint - - supports-color - '@swc/core-darwin-arm64@1.10.9': optional: true @@ -10997,11 +10967,6 @@ snapshots: '@types/doctrine@0.0.9': {} - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6