diff --git a/rules/angular-template.js b/configs/angular-template.js similarity index 100% rename from rules/angular-template.js rename to configs/angular-template.js diff --git a/configs/angular/index.js b/configs/angular/index.js new file mode 100644 index 0000000..455a85e --- /dev/null +++ b/configs/angular/index.js @@ -0,0 +1,10 @@ +import moderate from './moderate.js'; +import recommended from './recommended.js'; + +/** @type { import('../../index.js').HugConfig } */ +export default { + configs: { + moderate, + recommended + } +}; diff --git a/rules/angular/moderate.js b/configs/angular/moderate.js similarity index 100% rename from rules/angular/moderate.js rename to configs/angular/moderate.js diff --git a/rules/angular/recommended.js b/configs/angular/recommended.js similarity index 97% rename from rules/angular/recommended.js rename to configs/angular/recommended.js index b17d7fe..c8bf309 100644 --- a/rules/angular/recommended.js +++ b/configs/angular/recommended.js @@ -1,4 +1,5 @@ -module.exports = { +/** @type { import('eslint').Linter.FlatConfig } */ +export default { "plugins": [ "@angular-eslint" ], diff --git a/rules/cypress.js b/configs/cypress.js similarity index 100% rename from rules/cypress.js rename to configs/cypress.js diff --git a/rules/es6.js b/configs/es6.js similarity index 96% rename from rules/es6.js rename to configs/es6.js index 81151c7..7b1c1fd 100644 --- a/rules/es6.js +++ b/configs/es6.js @@ -1,22 +1,15 @@ -module.exports = { - "env": { - "es6": true - }, - "parserOptions": { - "ecmaVersion": 9, - "sourceType": "module", - "ecmaFeatures": { - "generators": false, - "objectLiteralDuplicateProperties": false - } +import unusedImports from 'eslint-plugin-unused-imports'; +import js from '@eslint/js'; + +/** @type { import('eslint').Linter.FlatConfig } */ +const config = { + plugins: { + "unused-imports": unusedImports }, - "plugins": [ - "unused-imports" - ], - "extends": [ - "eslint:recommended" - ], - "rules": { + rules: { + // Apply default recommended rules from Eslint + ...js.configs.recommended.rules, + // Enforce or disallow the use of braces around arrow function body // https://eslint.org/docs/rules/arrow-body-style "arrow-body-style": "error", @@ -454,3 +447,11 @@ module.exports = { "use-isnan": "error" } }; + +/** @type { import('../index.js').HugConfig } */ +export default { + configs: { + moderate: config, + recommended: config + } +}; diff --git a/rules/extras.js b/configs/extras.js similarity index 100% rename from rules/extras.js rename to configs/extras.js diff --git a/rules/json.js b/configs/json.js similarity index 100% rename from rules/json.js rename to configs/json.js diff --git a/rules/rxjs/moderate.js b/configs/rxjs/moderate.js similarity index 100% rename from rules/rxjs/moderate.js rename to configs/rxjs/moderate.js diff --git a/rules/rxjs/recommended.js b/configs/rxjs/recommended.js similarity index 100% rename from rules/rxjs/recommended.js rename to configs/rxjs/recommended.js diff --git a/configs/typescript/index.js b/configs/typescript/index.js new file mode 100644 index 0000000..455a85e --- /dev/null +++ b/configs/typescript/index.js @@ -0,0 +1,10 @@ +import moderate from './moderate.js'; +import recommended from './recommended.js'; + +/** @type { import('../../index.js').HugConfig } */ +export default { + configs: { + moderate, + recommended + } +}; diff --git a/rules/typescript/moderate.js b/configs/typescript/moderate.js similarity index 91% rename from rules/typescript/moderate.js rename to configs/typescript/moderate.js index ed8a908..05e2307 100644 --- a/rules/typescript/moderate.js +++ b/configs/typescript/moderate.js @@ -1,8 +1,11 @@ const { namingConventions } = require('./utils'); -module.exports = { - "extends": "./recommended", - "rules": { +import recommended from './recommended.js'; + +/** @type { import('eslint').Linter.FlatConfig } */ +export default { + ...recommended, + rules: { // Require explicit accessibility modifiers on class properties and methods // https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md "@typescript-eslint/explicit-member-accessibility": [ diff --git a/rules/typescript/recommended.js b/configs/typescript/recommended.js similarity index 98% rename from rules/typescript/recommended.js rename to configs/typescript/recommended.js index 060335f..a92b74e 100644 --- a/rules/typescript/recommended.js +++ b/configs/typescript/recommended.js @@ -1,16 +1,21 @@ const { namingConventions } = require('./utils'); -module.exports = { - "plugins": [ +import typescriptEslint from '@typescript-eslint'; + +/** @type { import('eslint').Linter.FlatConfig } */ +export default { + /*"plugins": [ "@typescript-eslint" ], "extends": [ "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking" - ], - "rules": { + ],*/ + plugins: { + typescriptEslint + }, + rules: { "max-len": "off", - "no-shadow": "off", "no-empty": "error", // Enforce consistent brace style for blocks diff --git a/rules/typescript/utils.js b/configs/typescript/utils.js similarity index 100% rename from rules/typescript/utils.js rename to configs/typescript/utils.js diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..ad1d1ae --- /dev/null +++ b/index.d.ts @@ -0,0 +1,14 @@ +import type { Linter } from 'eslint'; + +export interface HugConfig { + readonly configs: { + readonly recommended: T; + readonly moderate: T; + }; +} + +declare const hug: HugConfig & { + readonly es6: HugConfig; + readonly ts: HugConfig; +}; +export = hug; diff --git a/_base.js b/index.js similarity index 54% rename from _base.js rename to index.js index df75274..209e655 100644 --- a/_base.js +++ b/index.js @@ -5,23 +5,70 @@ * SPDX-License-Identifier: GPL-3.0-only * Copyright (C) 2022 HUG */ -'use strict'; +import { findUpSync } from 'find-up'; +import { fileURLToPath } from 'node:url'; +import { createRequire } from 'node:module'; +import path from 'node:path'; -// This is a workaround for vscode not finding tsconfig.eslint.json when a workspace is opened -// instead of the root folder of the project -const filename = 'tsconfig.eslint.json'; -const tsconfigEslintJson = require('find-up').sync(filename, { cwd: __dirname }) || filename; +import typescriptParser from '@typescript-eslint/parser'; + +import ts from './configs/typescript/index.js'; +import es6 from './configs/es6.js'; +import angular from './configs/angular.js'; +import rxjs from './configs/rxjs.js'; +import extras from './configs/extras.js'; + + +const require = createRequire(import.meta.url); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('@rushstack/eslint-patch/modern-module-resolution'); +// require('@rushstack/eslint-patch/levelrn-module-resolution'); + +// const isPackageInstalled = (name) => { +// try { require(name); return true; } catch { return false; } +// }; + +// const needCypress = isPackageInstalled('cypress'); +const needCypress = false; + -const isPackageInstalled = (name) => { - try { require(name); return true; } catch { return false; } +// This is a workaround for vscode not finding the `tsconfig.eslint.json` at the root of a project +// when the project is opened through a vscode's workspace +const filename = 'tsconfig.eslint.json'; +const tsconfigEslintJson = findUpSync(filename, { cwd: __dirname }) || filename; + +/** @type { (level: 'moderate' | 'recommended') => import('eslint').Linter.FlatConfig[] } */ +const config = (level) => { + return [{ + files: ['**/*.ts'], + ignores: ['e2e/**/*.ts'], + languageOptions: { + // @ts-ignore + parser: typescriptParser, + parserOptions: { + project: [tsconfigEslintJson] + } + }, + ...es6.configs[level], + ...ts.configs[level], + ...angular.configs[level] + ...rxjs.configs[level], + ...extras.configs[level] + }]; }; -const needCypress = isPackageInstalled('cypress'); +/** @type { import('./index.js') } */ +export default { + configs: { + moderate: config('moderate'), + recommended: config('recommended'), + }, + es6, + ts +}; -module.exports = (mode = 'recommended') => { +const base2 = (level = 'recommended') => { return { "env": { "browser": true, @@ -33,27 +80,6 @@ module.exports = (mode = 'recommended') => { "package-lock.json" ], "overrides": [ - { - "files": [ - "**/*.ts" - ], - "excludedFiles": [ - "e2e/**/*.ts" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": [ - tsconfigEslintJson - ] - }, - "extends": [ - require.resolve("./rules/es6"), - require.resolve(`./rules/typescript/${mode}`), - require.resolve(`./rules/angular/${mode}`), - require.resolve(`./rules/rxjs/${mode}`), - require.resolve("./rules/extras") - ] - }, { "files": [ "e2e/**/*.ts" @@ -66,7 +92,7 @@ module.exports = (mode = 'recommended') => { }, "extends": [ require.resolve("./rules/es6"), - require.resolve(`./rules/typescript/${mode}`), + require.resolve(`./rules/typescript/${level}`), require.resolve("./rules/extras"), (needCypress) ? require.resolve("./rules/cypress") : undefined ].filter(Boolean) diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..8a1a3e4 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "checkJs": true, + "target": "ES2019", + "module": "ESNext", + "moduleResolution": "node" + }, + "exclude": [ + "node_modules", + "**/node_modules/*" + ] +} diff --git a/moderate.js b/moderate.js deleted file mode 100644 index e20decf..0000000 --- a/moderate.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @license - * @hug/eslint-config - * Released under GNU General Public License v3.0 only - * SPDX-License-Identifier: GPL-3.0-only - * Copyright (C) 2022 HUG - */ -'use strict'; - -module.exports = require('./_base')('moderate'); diff --git a/package-lock.json b/package-lock.json index 8780c8f..62e5927 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@angular-eslint/eslint-plugin": "16.0.3", "@angular-eslint/eslint-plugin-template": "16.0.3", "@angular-eslint/template-parser": "16.0.3", + "@eslint/js": "^8.44.0", "@rushstack/eslint-patch": "1.3.2", "@typescript-eslint/eslint-plugin": "5.61.0", "@typescript-eslint/parser": "5.61.0", @@ -28,7 +29,7 @@ "eslint-plugin-rxjs-angular": "2.0.1", "eslint-plugin-simple-import-sort": "10.0.0", "eslint-plugin-unused-imports": "2.0.0", - "find-up": "5.0.0" + "find-up": "6.3.0" }, "devDependencies": { "@angular/core": "^16.1.3", @@ -606,6 +607,79 @@ "node": ">=v14" } }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@commitlint/types": { "version": "17.4.4", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", @@ -3080,11 +3154,79 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", @@ -3295,20 +3437,28 @@ } }, "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -4370,14 +4520,14 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4935,28 +5085,28 @@ } }, "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dependencies": { - "yocto-queue": "^0.1.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6195,11 +6345,11 @@ } }, "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" diff --git a/package.json b/package.json index ecba614..cbbbf47 100644 --- a/package.json +++ b/package.json @@ -12,19 +12,14 @@ "type": "git", "url": "https://github.com/dsi-hug/eslint-config.git" }, - "main": "./recommended.js", + "main": "./index.js", + "typings": "./index.d.ts", + "type": "module", "exports": { ".": { - "default": "./recommended.js", - "require": "./recommended.js" - }, - "./recommended": { - "default": "./recommended.js", - "require": "./recommended.js" - }, - "./moderate": { - "default": "./moderate.js", - "require": "./moderate.js" + "default": "./index.js", + "require": "./index.js", + "types": "./index.d.ts" }, "./package.json": "./package.json" }, @@ -55,7 +50,9 @@ "scripts": { "prepare": "husky install", "ncu": "npx npm-check-updates -i --format=group", - "test": "eslint --config ./tests/moderaterc.json ./tests && eslint --config ./tests/recommendedrc.json ./tests" + "test:recommended": "ESLINT_USE_FLAT_CONFIG=true eslint -c ./tests/eslint.config-recommended.js ./rules/**/*.js", + "test:moderate": "ESLINT_USE_FLAT_CONFIG=true eslint -c ./tests/eslint.config-moderate.js ./rules/**/*.js", + "test": "npm run test:moderate && npm run test:recommended" }, "peerDependencies": { "@angular/core": ">= 10", @@ -68,6 +65,7 @@ "@angular-eslint/eslint-plugin": "16.0.3", "@angular-eslint/eslint-plugin-template": "16.0.3", "@angular-eslint/template-parser": "16.0.3", + "@eslint/js": "^8.44.0", "@rushstack/eslint-patch": "1.3.2", "@typescript-eslint/eslint-plugin": "5.61.0", "@typescript-eslint/parser": "5.61.0", @@ -83,7 +81,7 @@ "eslint-plugin-rxjs-angular": "2.0.1", "eslint-plugin-simple-import-sort": "10.0.0", "eslint-plugin-unused-imports": "2.0.0", - "find-up": "5.0.0" + "find-up": "6.3.0" }, "devDependencies": { "@angular/core": "^16.1.3", diff --git a/recommended.js b/recommended.js deleted file mode 100644 index 415e8c2..0000000 --- a/recommended.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @license - * @hug/eslint-config - * Released under GNU General Public License v3.0 only - * SPDX-License-Identifier: GPL-3.0-only - * Copyright (C) 2022 HUG - */ -'use strict'; - -module.exports = require('./_base')(); diff --git a/tests/eslint.config-moderate.js b/tests/eslint.config-moderate.js new file mode 100644 index 0000000..87343bf --- /dev/null +++ b/tests/eslint.config-moderate.js @@ -0,0 +1,3 @@ +import hug from '@hug/eslint-config'; + +export default hug.configs.moderate; diff --git a/tests/eslint.config-recommended.js b/tests/eslint.config-recommended.js new file mode 100644 index 0000000..a56b745 --- /dev/null +++ b/tests/eslint.config-recommended.js @@ -0,0 +1,3 @@ +import hug from '@hug/eslint-config'; + +export default hug.configs.recommended; diff --git a/tests/moderaterc.json b/tests/moderaterc.json deleted file mode 100644 index ac50b93..0000000 --- a/tests/moderaterc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": true, - "extends": [ - "@hug/eslint-config/moderate" - ] -} diff --git a/tests/recommendedrc.json b/tests/recommendedrc.json deleted file mode 100644 index 17b740d..0000000 --- a/tests/recommendedrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": true, - "extends": [ - "@hug/eslint-config/recommended" - ] -}