import js from "@eslint/js"; import globals from "globals"; /** * Config ESLint « flat » (ESLint 9). * * Trois environnements coexistent dans ce repo et n'ont pas les mêmes globales : * - apps/api : Node ESM * - apps/web/site : scripts classiques navigateur (Leaflet en global) * - apps/admin/site : scripts classiques navigateur */ export default [ { ignores: [ "**/node_modules/**", "apps/web/quizz-site/**", "reports/**", ".stryker-tmp/**", "coverage/**", ], }, js.configs.recommended, // ---- API : Node, ESM ---- { files: ["apps/api/src/**/*.js"], languageOptions: { ecmaVersion: 2023, sourceType: "module", globals: { ...globals.node }, }, rules: { "no-unused-vars": ["error", { argsIgnorePattern: "^_", caughtErrors: "none" }], "no-console": "off", eqeqeq: ["error", "smart"], "prefer-const": "error", "no-var": "error", "no-throw-literal": "error", "require-await": "warn", }, }, // ---- Tests (vitest + Playwright). Certains tournent sous jsdom ou dans un // navigateur → globales navigateur en plus de Node. Le harnais e2e est en // .mjs (modules ES chargés directement par node). ---- { files: ["apps/*/test/**/*.{js,mjs}"], languageOptions: { ecmaVersion: 2023, sourceType: "module", globals: { ...globals.node, ...globals.browser }, }, rules: { "no-unused-vars": ["error", { argsIgnorePattern: "^_", caughtErrors: "none" }], }, }, // ---- Frontends : scripts classiques navigateur ---- { files: ["apps/web/site/**/*.js", "apps/admin/site/**/*.js"], languageOptions: { ecmaVersion: 2023, sourceType: "script", globals: { ...globals.browser, // Chargés via