From 7525c606cf4c230e808e099466e565f3d4462eee Mon Sep 17 00:00:00 2001 From: Marc Bouchenoire Date: Fri, 10 Jul 2026 10:01:54 +0200 Subject: [PATCH] Fix ESLint configs in editors (#3569) --- .../liveblocks-chat-sdk-adapter/eslint.config.mjs | 2 +- packages/liveblocks-client/eslint.config.mjs | 2 +- packages/liveblocks-core/eslint.config.mjs | 2 +- packages/liveblocks-emails/eslint.config.mjs | 2 +- .../liveblocks-node-lexical/eslint.config.mjs | 2 +- .../liveblocks-node-prosemirror/eslint.config.mjs | 2 +- packages/liveblocks-node/eslint.config.mjs | 2 +- .../liveblocks-react-blocknote/eslint.config.mjs | 2 +- packages/liveblocks-react-flow/eslint.config.mjs | 2 +- .../liveblocks-react-lexical/eslint.config.mjs | 2 +- .../liveblocks-react-tiptap/eslint.config.mjs | 2 +- packages/liveblocks-react-ui/eslint.config.mjs | 2 +- packages/liveblocks-react/eslint.config.mjs | 2 +- packages/liveblocks-redux/eslint.config.mjs | 2 +- packages/liveblocks-server/eslint.config.mjs | 2 +- packages/liveblocks-yjs/eslint.config.mjs | 2 +- packages/liveblocks-zustand/eslint.config.mjs | 2 +- shared/eslint-config/index.js | 15 ++++++++++----- tools/liveblocks-cli/eslint.config.mjs | 2 +- tools/liveblocks-codemod/eslint.config.mjs | 2 +- tools/liveblocks-devtools/eslint.config.mjs | 2 +- 21 files changed, 30 insertions(+), 25 deletions(-) diff --git a/packages/liveblocks-chat-sdk-adapter/eslint.config.mjs b/packages/liveblocks-chat-sdk-adapter/eslint.config.mjs index b76be4b3cae..93716f56b6e 100644 --- a/packages/liveblocks-chat-sdk-adapter/eslint.config.mjs +++ b/packages/liveblocks-chat-sdk-adapter/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-client/eslint.config.mjs b/packages/liveblocks-client/eslint.config.mjs index 0196f1d24fe..b39e4167c88 100644 --- a/packages/liveblocks-client/eslint.config.mjs +++ b/packages/liveblocks-client/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-core/eslint.config.mjs b/packages/liveblocks-core/eslint.config.mjs index 1e13ad6a9ca..4c13f5ea6e5 100644 --- a/packages/liveblocks-core/eslint.config.mjs +++ b/packages/liveblocks-core/eslint.config.mjs @@ -4,7 +4,7 @@ import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax" import consoleMustBeFancy from "./rules/console-must-be-fancy.cjs"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-emails/eslint.config.mjs b/packages/liveblocks-emails/eslint.config.mjs index 143ac76c20c..35c0a40c047 100644 --- a/packages/liveblocks-emails/eslint.config.mjs +++ b/packages/liveblocks-emails/eslint.config.mjs @@ -3,7 +3,7 @@ import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax" import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-node-lexical/eslint.config.mjs b/packages/liveblocks-node-lexical/eslint.config.mjs index b76be4b3cae..93716f56b6e 100644 --- a/packages/liveblocks-node-lexical/eslint.config.mjs +++ b/packages/liveblocks-node-lexical/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-node-prosemirror/eslint.config.mjs b/packages/liveblocks-node-prosemirror/eslint.config.mjs index b76be4b3cae..93716f56b6e 100644 --- a/packages/liveblocks-node-prosemirror/eslint.config.mjs +++ b/packages/liveblocks-node-prosemirror/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-node/eslint.config.mjs b/packages/liveblocks-node/eslint.config.mjs index b76be4b3cae..93716f56b6e 100644 --- a/packages/liveblocks-node/eslint.config.mjs +++ b/packages/liveblocks-node/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-react-blocknote/eslint.config.mjs b/packages/liveblocks-react-blocknote/eslint.config.mjs index 0e45a93e9d4..a26a09defeb 100644 --- a/packages/liveblocks-react-blocknote/eslint.config.mjs +++ b/packages/liveblocks-react-blocknote/eslint.config.mjs @@ -4,7 +4,7 @@ import react from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-react-flow/eslint.config.mjs b/packages/liveblocks-react-flow/eslint.config.mjs index 2d227d94c4c..65e31676aa4 100644 --- a/packages/liveblocks-react-flow/eslint.config.mjs +++ b/packages/liveblocks-react-flow/eslint.config.mjs @@ -3,7 +3,7 @@ import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax" import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-react-lexical/eslint.config.mjs b/packages/liveblocks-react-lexical/eslint.config.mjs index 0e45a93e9d4..a26a09defeb 100644 --- a/packages/liveblocks-react-lexical/eslint.config.mjs +++ b/packages/liveblocks-react-lexical/eslint.config.mjs @@ -4,7 +4,7 @@ import react from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-react-tiptap/eslint.config.mjs b/packages/liveblocks-react-tiptap/eslint.config.mjs index 0e45a93e9d4..a26a09defeb 100644 --- a/packages/liveblocks-react-tiptap/eslint.config.mjs +++ b/packages/liveblocks-react-tiptap/eslint.config.mjs @@ -4,7 +4,7 @@ import react from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-react-ui/eslint.config.mjs b/packages/liveblocks-react-ui/eslint.config.mjs index 0e45a93e9d4..a26a09defeb 100644 --- a/packages/liveblocks-react-ui/eslint.config.mjs +++ b/packages/liveblocks-react-ui/eslint.config.mjs @@ -4,7 +4,7 @@ import react from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-react/eslint.config.mjs b/packages/liveblocks-react/eslint.config.mjs index 76339332adc..6f0323ce47e 100644 --- a/packages/liveblocks-react/eslint.config.mjs +++ b/packages/liveblocks-react/eslint.config.mjs @@ -3,7 +3,7 @@ import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax" import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-redux/eslint.config.mjs b/packages/liveblocks-redux/eslint.config.mjs index c2250d496b7..623049e188a 100644 --- a/packages/liveblocks-redux/eslint.config.mjs +++ b/packages/liveblocks-redux/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-server/eslint.config.mjs b/packages/liveblocks-server/eslint.config.mjs index b7b9960e425..30a52727454 100644 --- a/packages/liveblocks-server/eslint.config.mjs +++ b/packages/liveblocks-server/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import licenseHeader from "eslint-plugin-license-header"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/packages/liveblocks-yjs/eslint.config.mjs b/packages/liveblocks-yjs/eslint.config.mjs index aa3b7795a6f..0fe27619ef2 100644 --- a/packages/liveblocks-yjs/eslint.config.mjs +++ b/packages/liveblocks-yjs/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/packages/liveblocks-zustand/eslint.config.mjs b/packages/liveblocks-zustand/eslint.config.mjs index 6cb7e7bd1ff..e52a0585284 100644 --- a/packages/liveblocks-zustand/eslint.config.mjs +++ b/packages/liveblocks-zustand/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import commonRestrictedSyntax from "@liveblocks/eslint-config/restricted-syntax"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { rules: { diff --git a/shared/eslint-config/index.js b/shared/eslint-config/index.js index ed11d67fb8a..f8f1d10c638 100644 --- a/shared/eslint-config/index.js +++ b/shared/eslint-config/index.js @@ -6,22 +6,27 @@ import tseslint from "typescript-eslint"; /** * Creates the base ESLint flat config used by all packages in the monorepo. * - * @param {string} tsconfigPath Path to the tsconfig.json (default: "./tsconfig.json") - * @returns {import("eslint").Linter.Config[]} + * @param {string} tsconfigRootDir Path to the directory ESLint should use to resolve + * `tsconfigPath`, pass `import.meta.dirname` from the package's + * `eslint.config.mjs`. + * @param {string} tsconfigPath Path to the package's TypeScript config, + * relative to `tsconfigRootDir`. Defaults to "./tsconfig.json". + * @returns {import("eslint").Linter.Config[]} The shared flat config entries. */ -export function makeConfig(tsconfigPath = "./tsconfig.json") { +export function makeConfig(tsconfigRootDir, tsconfigPath = "./tsconfig.json") { return [ js.configs.recommended, ...tseslint.configs.recommendedTypeChecked, { languageOptions: { + // Each project's individual/local tsconfig.json defines the behavior + // of the parser parserOptions: { - // Each project's individual/local tsconfig.json defines the behavior - // of the parser projectService: { defaultProject: tsconfigPath, }, + tsconfigRootDir, }, }, diff --git a/tools/liveblocks-cli/eslint.config.mjs b/tools/liveblocks-cli/eslint.config.mjs index 6d568e8ac62..a1cf1cc89e4 100644 --- a/tools/liveblocks-cli/eslint.config.mjs +++ b/tools/liveblocks-cli/eslint.config.mjs @@ -19,7 +19,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import licenseHeader from "eslint-plugin-license-header"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: { diff --git a/tools/liveblocks-codemod/eslint.config.mjs b/tools/liveblocks-codemod/eslint.config.mjs index dd88ca8d33c..8764a364f72 100644 --- a/tools/liveblocks-codemod/eslint.config.mjs +++ b/tools/liveblocks-codemod/eslint.config.mjs @@ -1,7 +1,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { ignores: ["**/__tests__/**", "**/__testfixtures__/**"], diff --git a/tools/liveblocks-devtools/eslint.config.mjs b/tools/liveblocks-devtools/eslint.config.mjs index 5552c525612..8ae7718c4a1 100644 --- a/tools/liveblocks-devtools/eslint.config.mjs +++ b/tools/liveblocks-devtools/eslint.config.mjs @@ -2,7 +2,7 @@ import { makeConfig } from "@liveblocks/eslint-config"; import reactHooks from "eslint-plugin-react-hooks"; export default [ - ...makeConfig(), + ...makeConfig(import.meta.dirname), { plugins: {