/** * ───────────────────────────────────────────── * SPB Drive — Personal Cloud Drive * ───────────────────────────────────────────── * Author : Simon-Pierre Boucher * Contact : contact@spboucher.ai * File : eslint.config.mjs * Purpose : ESLint flat config — node + browser sources * License : MIT © Simon-Pierre Boucher * ───────────────────────────────────────────── */ import js from '@eslint/js'; const browserGlobals = { window: 'readonly', document: 'readonly', location: 'readonly', localStorage: 'readonly', fetch: 'readonly', navigator: 'readonly', console: 'readonly', setTimeout: 'readonly', clearTimeout: 'readonly', setInterval: 'readonly', URL: 'readonly', URLSearchParams: 'readonly', Blob: 'readonly', FontFace: 'readonly', IntersectionObserver: 'readonly', TextDecoder: 'readonly', atob: 'readonly', escape: 'readonly', globalThis: 'readonly', }; const nodeGlobals = { process: 'readonly', console: 'readonly', Buffer: 'readonly', setTimeout: 'readonly', setInterval: 'readonly', clearTimeout: 'readonly', URL: 'readonly', URLSearchParams: 'readonly', fetch: 'readonly', TextDecoder: 'readonly', globalThis: 'readonly', Int16Array: 'readonly', }; export default [ js.configs.recommended, { files: ['src/**/*.mjs', 'cli/**/*.mjs', 'scripts/**/*.mjs', 'test/**/*.mjs'], languageOptions: { ecmaVersion: 2024, sourceType: 'module', globals: nodeGlobals }, rules: { 'no-unused-vars': ['error', { argsIgnorePattern: '^_|^req$|^reply$', varsIgnorePattern: '^_' }], 'no-empty': ['error', { allowEmptyCatch: true }], }, }, { files: ['src/web/assets/js/**/*.js'], languageOptions: { ecmaVersion: 2024, sourceType: 'module', globals: browserGlobals }, rules: { 'no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], 'no-empty': ['error', { allowEmptyCatch: true }], 'no-unused-expressions': 'off', }, }, ];