// @ts-check import eslint from '@eslint/js'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; import globals from 'globals'; import tseslint from 'typescript-eslint'; export default tseslint.config( { ignores: ['eslint.config.mjs', 'dist/', 'generated/'], }, eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, eslintPluginPrettierRecommended, { languageOptions: { globals: { ...globals.node, ...globals.jest, }, sourceType: 'commonjs', parserOptions: { projectService: true, tsconfigRootDir: import.meta.dirname, }, }, }, { rules: { 'no-magic-numbers': 'off', '@typescript-eslint/no-magic-numbers': [ 'error', { ignore: [ -60, -24, -10, -2, -1, 0, 1, 2, 10, 24, 60, '-60n', '-24n', '-10n', '-2n', '-1n', '0n', '1n', '2n', '10n', '24n', '60n', ], ignoreArrayIndexes: true, ignoreDefaultValues: true, ignoreEnums: true, ignoreNumericLiteralTypes: true, ignoreReadonlyClassProperties: true, ignoreTypeIndexes: true, enforceConst: true, }, ], '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-non-null-assertion': 'error', 'no-restricted-syntax': [ 'error', { selector: 'PropertyDefinition[definite=true], VariableDeclarator[definite=true]', message: 'Definite assignment assertions are forbidden. Initialize owned values; use declare only for externally populated DTO fields.', }, ], '@typescript-eslint/no-floating-promises': 'warn', '@typescript-eslint/no-unsafe-argument': 'warn', 'prettier/prettier': ['error', { endOfLine: 'auto' }], }, }, { files: ['**/*.spec.ts', 'test/**/*.ts'], rules: { '@typescript-eslint/no-magic-numbers': 'off' }, }, );