// Repo-wide ESLint flat config. Packages inherit these rules; add // package-specific overrides here (scoped by `files`) rather than with // per-package config files, so rules stay consistent across the monorepo. import js from '@eslint/js'; import tseslint from 'typescript-eslint'; import prettier from 'eslint-config-prettier'; export default tseslint.config( { ignores: [ '**/dist/**', // Vendored third-party apps bundled into plugins (drawio) — never linted. 'packages/plugins/*/vendor/**', '**/node_modules/**', '**/coverage/**', '**/.pnpm-store/**', '**/*.gen.ts', // Runtime data volumes (installed plugin bundles, uploads) — not source. 'apps/api/data/**', ], }, js.configs.recommended, ...tseslint.configs.recommended, prettier, { // Plain-Node maintenance/build scripts (no TypeScript, no bundler). files: [ 'scripts/**/*.mjs', 'deploy/**/*.mjs', 'packages/plugins/*/build.mjs', 'apps/api/scripts/**/*.mjs', ], languageOptions: { globals: { console: 'readonly', process: 'readonly', URL: 'readonly', fetch: 'readonly', Buffer: 'readonly', setTimeout: 'readonly', }, }, }, { // Classic browser scripts served verbatim from public/ (theme-init.js, // issue #180): no bundler, no modules, browser globals only. files: ['apps/web/public/*.js'], languageOptions: { globals: { window: 'readonly', document: 'readonly', }, }, }, { rules: { // Unused values are usually bugs; underscore-prefix marks intentional ones. '@typescript-eslint/no-unused-vars': [ 'error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, ], // `any` defeats the shared Zod/type contracts between client and server. '@typescript-eslint/no-explicit-any': 'error', }, }, );