diff --git a/base-configs/additional-rules.js b/base-configs/additional-rules.js index 0702467..9fccf84 100644 --- a/base-configs/additional-rules.js +++ b/base-configs/additional-rules.js @@ -12,8 +12,9 @@ import sortDestructureKeysPlugin from 'eslint-plugin-sort-destructure-keys'; // @ts-ignore import unicornPlugin from 'eslint-plugin-unicorn'; -/** @satisfies {import('@typescript-eslint/utils/ts-eslint').FlatConfig.Config} */ -const addititionalCoreRules = { +/** @satisfies {import('eslint').Linter.FlatConfig} */ +const additionalCoreRules = { + name: '@voxpelli/additional/core', rules: { // Added ESLint core rules 'func-style': ['warn', 'expression', { 'allowArrowFunctions': true }], @@ -26,11 +27,11 @@ const addititionalCoreRules = { }, }; -/** @satisfies {import('@typescript-eslint/utils/ts-eslint').FlatConfig.ConfigArray} */ +/** @satisfies {import('eslint').Linter.FlatConfig[]} */ const adaptedNodeRules = [ nPlugin.configs['flat/recommended'], { - name: 'Adapted Node Rules', + name: '@voxpelli/additional/node', rules: { // Overriding 'n/no-process-exit': 'off', @@ -44,11 +45,11 @@ const adaptedNodeRules = [ }, ]; -/** @satisfies {import('@typescript-eslint/utils/ts-eslint').FlatConfig.ConfigArray} */ +/** @satisfies {import('eslint').Linter.FlatConfig[]} */ const adaptedUnicornRules = [ unicornPlugin.configs['flat/recommended'], { - name: 'Additional Node Rules', + name: '@voxpelli/additional/unicorn', rules: { // Overriding 'unicorn/catch-error-name': ['error', { name: 'err', ignore: ['^cause$'] }], @@ -68,16 +69,16 @@ const adaptedUnicornRules = [ }, ]; -/** @satisfies {import('@typescript-eslint/utils/ts-eslint').FlatConfig.ConfigArray} */ +/** @satisfies {import('eslint').Linter.FlatConfig[]} */ export const additionalRules = [ - addititionalCoreRules, + additionalCoreRules, ...adaptedNodeRules, ...adaptedUnicornRules, securityPlugin.configs.recommended, // TODO: Add promise plugin once https://github.com/eslint-community/eslint-plugin-promise/issues/449 has been fixed // promisePlugin.? { - name: 'Additional Rules', + name: '@voxpelli/additional/misc', plugins: { 'es-x': esxPlugin, // TODO: Add back diff --git a/base-configs/esm.js b/base-configs/esm.js index e9b48d6..11a1bc5 100644 --- a/base-configs/esm.js +++ b/base-configs/esm.js @@ -1,6 +1,7 @@ /** @satisfies {import('eslint').Linter.FlatConfig[]} */ export const esmRules = [ { + name: '@voxpelli/esm', rules: { // Overrides of other rules 'func-style': ['warn', 'declaration', { 'allowArrowFunctions': true }], diff --git a/base-configs/jsdoc.js b/base-configs/jsdoc.js index d0a034b..4c81e2d 100644 --- a/base-configs/jsdoc.js +++ b/base-configs/jsdoc.js @@ -4,6 +4,7 @@ import jsdoc from 'eslint-plugin-jsdoc'; export const jsdocRules = [ jsdoc.configs['flat/recommended-typescript-flavor'], { + name: '@voxpelli/jsdoc', rules: { 'jsdoc/check-types': 'off', 'jsdoc/require-jsdoc': 'off', diff --git a/base-configs/mocha.js b/base-configs/mocha.js index 3cb4f13..74fb208 100644 --- a/base-configs/mocha.js +++ b/base-configs/mocha.js @@ -1,20 +1,28 @@ // @ts-ignore import mochaPlugin from 'eslint-plugin-mocha'; -import { config } from 'typescript-eslint'; -export const mochaRules = config({ - ignores: ['**/*', '!test/**/*'], - 'extends': [ - mochaPlugin.configs.flat.recommended, - { - files: ['**/*.ts'], - rules: { - '@typescript-eslint/no-unused-expressions': 'off', - }, +const ignores = ['**/*', '!test/**/*']; + +/** @satisfies {import('eslint').Linter.FlatConfig[]} */ +export const mochaRules = [ + { + ...mochaPlugin.configs.flat.recommended, + ignores, + }, + { + name: '@voxpelli/mocha', + ignores, + rules: { + 'mocha/no-mocha-arrows': 'off', + 'no-unused-expressions': 'off', + }, + }, + { + name: '@voxpelli/mocha/ts', + ignores, + files: ['**/*.ts'], + rules: { + '@typescript-eslint/no-unused-expressions': 'off', }, - ], - rules: { - 'mocha/no-mocha-arrows': 'off', - 'no-unused-expressions': 'off', }, -}); +]; diff --git a/base-configs/modified-rules.js b/base-configs/modified-rules.js index 6162e28..5d1d61a 100644 --- a/base-configs/modified-rules.js +++ b/base-configs/modified-rules.js @@ -1,6 +1,7 @@ -/** @satisfies {import('@typescript-eslint/utils/ts-eslint').FlatConfig.ConfigArray} */ +/** @satisfies {import('eslint').Linter.FlatConfig[]} */ export const modifiedNeostandardRules = [ { + name: '@voxpelli/eslint-config Modified Neostandard TS Rules', files: ['**/*.ts'], rules: { '@typescript-eslint/no-unused-vars': ['error', { @@ -12,6 +13,7 @@ export const modifiedNeostandardRules = [ }, }, { + name: '@voxpelli/eslint-config Modified Neostandard Rules', rules: { 'no-unused-vars': ['error', { 'vars': 'all', diff --git a/index.js b/index.js index 8e47120..77379d9 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ import neostandard, { resolveIgnoresFromGitignore } from 'neostandard'; -import { config } from 'typescript-eslint'; import { additionalRules } from './base-configs/additional-rules.js'; import { esmRules } from './base-configs/esm.js'; @@ -9,7 +8,7 @@ import { modifiedNeostandardRules } from './base-configs/modified-rules.js'; /** * @param {{ cjs?: boolean, noMocha?: boolean } & import('neostandard').NeostandardOptions} [options] - * @returns {import('@typescript-eslint/utils/ts-eslint').FlatConfig.ConfigArray} + * @returns {import('eslint').Linter.FlatConfig[]} */ export function voxpelli (options) { const { @@ -19,26 +18,26 @@ export function voxpelli (options) { ...neostandardOptions } = options || {}; - return config({ - ignores: [ - 'coverage/**/*', - ...resolveIgnoresFromGitignore(), - ...ignores || [], - ], - - 'extends': [ - ...neostandard({ - semi: true, - ts: true, - ...neostandardOptions, - }), - ...modifiedNeostandardRules, - ...additionalRules, - ...jsdocRules, - ...cjs ? [] : esmRules, - ...noMocha ? [] : mochaRules, - ], - }); + return [ + { + name: '@voxpelli/ignores', + ignores: [ + 'coverage/**/*', + ...resolveIgnoresFromGitignore(), + ...ignores || [], + ], + }, + ...neostandard({ + semi: true, + ts: true, + ...neostandardOptions, + }), + ...modifiedNeostandardRules, + ...additionalRules, + ...jsdocRules, + ...cjs ? [] : esmRules, + ...noMocha ? [] : mochaRules, + ]; } export default voxpelli(); diff --git a/package-lock.json b/package-lock.json index 23a739f..6789df9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,20 +9,18 @@ "version": "20.0.0-alpha5", "license": "MIT", "dependencies": { - "eslint-plugin-es-x": "^7.6.0", - "eslint-plugin-jsdoc": "^48.2.6", + "eslint-plugin-es-x": "^7.7.0", + "eslint-plugin-jsdoc": "^48.2.12", "eslint-plugin-mocha": "^10.4.3", "eslint-plugin-n": "^17.7.0", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-sort-destructure-keys": "^2.0.0", "eslint-plugin-unicorn": "^53.0.0", - "neostandard": "^0.7.0", - "typescript-eslint": "^8.0.0-alpha.28" + "neostandard": "^0.7.1" }, "devDependencies": { "@types/eslint": "^8.56.10", "@types/node": "^18.19.34", - "@typescript-eslint/utils": "^8.0.0-alpha.28", "@voxpelli/tsconfig": "^12.0.1", "compare-eslint-configs": "^2.1.0", "eslint": "^9.4.0", @@ -168,9 +166,10 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.0.tgz", - "integrity": "sha512-Q1CnsQrytI3TlCB1IVWXWeqUIPGVEKGaE7IbVdt13Nq/3i0JESAkQQERrfiQkmlpijl+++qyqPgaS31Bvc1jRQ==", + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", + "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", + "license": "MIT", "dependencies": { "@types/eslint": "^8.56.5", "@types/estree": "^1.0.5", @@ -803,9 +802,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.12.0.tgz", - "integrity": "sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -1567,6 +1567,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "license": "MIT", "engines": { "node": ">= 12.0.0" } @@ -2057,9 +2058,10 @@ "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -2148,9 +2150,10 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", - "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "license": "MIT", "dependencies": { "semver": "^7.5.4" }, @@ -2162,36 +2165,39 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz", - "integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.7.0.tgz", + "integrity": "sha512-aP3qj8BwiEDPttxQkZdI221DLKq9sI/qHolE2YSQL1/9+xk7dTV+tB1Fz8/IaCA+lnLA1bDEnvaS2LKs0k2Uig==", + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.5.0" + "eslint-compat-utils": "^0.5.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, "peerDependencies": { "eslint": ">=8" } }, "node_modules/eslint-plugin-jsdoc": { - "version": "48.2.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.6.tgz", - "integrity": "sha512-GNk9jtpYmoEVeD/U6yYYmd6T8vSOoPs7CL8ZeX85iD8P3qifDdLQGze6+cw9boobDthmYnnxvIoHrhuSffj09g==", + "version": "48.2.12", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.12.tgz", + "integrity": "sha512-sO9sKkJx5ovWoRk9hV0YiNzXQ4Z6j27CqE/po2E3wddZVuy9wvKPSTiIhpxMTrP/qURvKayJIDB2+o9kyCW1Fw==", + "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.43.0", + "@es-joy/jsdoccomment": "~0.43.1", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", - "semver": "^7.6.1", + "semver": "^7.6.2", "spdx-expression-parse": "^4.0.0" }, "engines": { @@ -2243,12 +2249,13 @@ } }, "node_modules/eslint-plugin-n": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.7.0.tgz", - "integrity": "sha512-4Jg4ZKVE4VjHig2caBqPHYNW5na84RVufUuipFLJbgM/G57O6FdpUKJbHakCDJb/yjQuyqVzYWRtU3HNYaZUwg==", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.8.1.tgz", + "integrity": "sha512-KdG0h0voZms8UhndNu8DeWx1eM4sY+A4iXtsNo6kOfJLYHNeTGPacGalJ9GcvrbmOL3r/7QOMwVZDSw+1SqsrA==", + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.0", "eslint-plugin-es-x": "^7.5.0", "get-tsconfig": "^4.7.0", "globals": "^15.0.0", @@ -2267,14 +2274,18 @@ } }, "node_modules/eslint-plugin-security": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.0.tgz", - "integrity": "sha512-2Ij7PkmXIF2cKwoVkEgemwoXbOnxg5UfdhdcpNxZwJxC/10dbsdhHISrTyJ/n8DUkt3yiN6P1ywEgcMGjIwHIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz", + "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==", + "license": "Apache-2.0", "dependencies": { "safe-regex": "^2.1.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-plugin-sort-destructure-keys": { @@ -2785,9 +2796,10 @@ } }, "node_modules/globals": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.3.0.tgz", - "integrity": "sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.4.0.tgz", + "integrity": "sha512-unnwvMZpv0eDUyjNyh9DH/yxUaRYrEjW/qK4QcdrHg3oO11igUQrCSgODHEqxlKg8v2CD2Sd7UkqqEBoz5U7TQ==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -2842,7 +2854,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", @@ -3247,6 +3260,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "license": "MIT", "engines": { "node": ">=12.0.0" } @@ -4336,20 +4350,20 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" }, "node_modules/neostandard": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.7.0.tgz", - "integrity": "sha512-YQ9jyV6qra2yQCmFLfkvwOaZDFjsKZrS15aXkwqA5otnC23cd2sMdtNQumXWb5KfOoWPcG5KLtYG9NZG+l9bjw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.7.1.tgz", + "integrity": "sha512-qZZvRUqPUQfQWLV6u4sUlpmuJSWYip6UCVyDJktvRZhFuyD0M9aspaQfkGphA5a1V1HR1237/L5RZEfA5u7qaw==", "license": "MIT", "dependencies": { "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@stylistic/eslint-plugin-js": "^2.1.0", - "@typescript-eslint/eslint-plugin": "^8.0.0-alpha.26", - "@typescript-eslint/utils": "^8.0.0-alpha.26", - "eslint-plugin-n": "^17.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0-alpha.28", + "@typescript-eslint/utils": "^8.0.0-alpha.28", + "eslint-plugin-n": "^17.8.1", "find-up": "^5.0.0", - "globals": "^15.3.0", + "globals": "^15.4.0", "peowly": "^1.3.0", - "typescript-eslint": "^8.0.0-alpha.26" + "typescript-eslint": "^8.0.0-alpha.28" }, "bin": { "neostandard": "cli.mjs" @@ -5670,6 +5684,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", "engines": { "node": ">=6" } diff --git a/package.json b/package.json index 27565ad..399ff53 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "devDependencies": { "@types/eslint": "^8.56.10", "@types/node": "^18.19.34", - "@typescript-eslint/utils": "^8.0.0-alpha.28", "@voxpelli/tsconfig": "^12.0.1", "compare-eslint-configs": "^2.1.0", "eslint": "^9.4.0", @@ -67,14 +66,13 @@ "eslint": "^9.4.0" }, "dependencies": { - "eslint-plugin-es-x": "^7.6.0", - "eslint-plugin-jsdoc": "^48.2.6", + "eslint-plugin-es-x": "^7.7.0", + "eslint-plugin-jsdoc": "^48.2.12", "eslint-plugin-mocha": "^10.4.3", "eslint-plugin-n": "^17.7.0", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-sort-destructure-keys": "^2.0.0", "eslint-plugin-unicorn": "^53.0.0", - "neostandard": "^0.7.0", - "typescript-eslint": "^8.0.0-alpha.28" + "neostandard": "^0.7.1" } }