Files
multica/packages/eslint-config/base.js
Naiyuan Qing ec1589f7b6 fix(deps): add eslint phantom dep detection + fix existing violations (MUL-2654) (#3249)
* fix(deps): add eslint phantom dep detection + fix existing violations (MUL-2654)

Introduce eslint-plugin-import-x/no-extraneous-dependencies rule to
prevent phantom deps from causing production build splits when pnpm
creates peer-dep variants. Fix all existing phantom deps across the
monorepo, unify catalog references, and enable desktop smoke CI on PRs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* revert(ci): remove desktop smoke PR trigger per user feedback

The existing smoke workflow only verifies packaging completes — it does
not actually start the app or check rendering. This means it wouldn't
have caught the white-screen bug (which was a runtime issue, not a build
failure). Adding it to PRs would slow CI without providing meaningful
protection. The ESLint no-extraneous-dependencies rule is the actual
prevention mechanism.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* fix(deps): sync pnpm-lock.yaml for rehype-sanitize dep classification

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* fix(ui): move rehype-sanitize to deps + declare eslint-config (MUL-2654)

- Move rehype-sanitize from devDependencies to dependencies (used in
  production Markdown.tsx)
- Add @multica/eslint-config to devDependencies (imported by
  eslint.config.mjs but previously undeclared)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-05-26 09:42:29 +08:00

46 lines
1.2 KiB
JavaScript

import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
import importPlugin from "eslint-plugin-import-x";
/** @type {import("eslint").Linter.Config[]} */
export default [
eslint.configs.recommended,
...tseslint.configs.recommended,
{
plugins: {
"import-x": importPlugin,
},
rules: {
// Already enforced by TypeScript compiler (noUnusedLocals/noUnusedParameters)
"@typescript-eslint/no-unused-vars": "off",
// Allow explicit any where needed
"@typescript-eslint/no-explicit-any": "off",
// Prevent phantom dependencies — imports must be declared in package.json
"import-x/no-extraneous-dependencies": ["error", {
devDependencies: [
"**/*.test.{ts,tsx}",
"**/*.spec.{ts,tsx}",
"**/test/**",
"**/tests/**",
"**/vitest.config.*",
"**/vite.config.*",
"**/electron.vite.config.*",
"**/eslint.config.*",
"**/scripts/**",
"**/src/main/**",
"**/src/preload/**",
],
peerDependencies: true,
}],
},
},
{
ignores: [
"node_modules/",
"dist/",
".next/",
"out/",
],
},
];