import globals from 'globals' import jsdoc from 'eslint-plugin-jsdoc' import merge from '@sequencemedia/eslint-merge' import standard from '@sequencemedia/eslint-config-standard/configs/recommended/merge' import typescript from '@sequencemedia/eslint-config-typescript/configs/recommended/merge' export default [ { ignores: [ 'coverage' ] }, merge( jsdoc.configs['flat/recommended'], { languageOptions: { globals: { TransmissionTypes: 'readonly', PropertyKey: 'readonly' } }, rules: { 'jsdoc/require-param-description': 'off', 'jsdoc/require-returns-description': 'off', 'jsdoc/check-tag-names': ['error', { definedTags: ['link'] }], 'jsdoc/tag-lines': [ 'error', 'never', { tags: { description: { lines: 'always' }, link: { lines: 'always' } }, applyToEndTag: false, startLines: 1 } ], 'jsdoc/lines-before-block': ['error', { lines: 1 }] } } ), /** * Standard config */ standard({ files: [ '**/*.{mjs,cjs,mts,cts}' ], languageOptions: { globals: { ...globals.node } }, rules: { '@stylistic/object-curly-newline': [ 'error', { ImportDeclaration: 'always', ExportDeclaration: { multiline: true, minProperties: 2 } } ] } }), standard({ files: [ 'test/**/*.{mjs,cjs,mts,cts}' ], languageOptions: { globals: { ...globals.mocha } } }), /** * TypeScript config */ typescript({ files: [ '**/*.{mts,cts}' ], languageOptions: { globals: { ...globals.node, TransmissionTypes: 'readonly' } }, rules: { '@typescript-eslint/max-params': [ 'error', { max: 5 } ] } }), { files: [ 'src/**/*.d.{mts,cts}' ], rules: { 'no-redeclare': 'off' } } ]