diff --git a/.eslintrc.js b/.eslintrc.js index 6cbc5d7..b685faf 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,10 @@ module.exports = { - extends: ['./configs/essentials', './configs/node'].map(require.resolve), + extends: ['./configs/essentials', './configs/node', 'prettier'], + + overrides: [ + { + files: ['*.test.js'], + extends: ['./rules/jest'], + }, + ], }; diff --git a/package-lock.json b/package-lock.json index e18a5e4..5ef5377 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,11 +27,15 @@ }, "devDependencies": { "eslint": "^7.32.0 || ^8.2.0", + "eslint-config-prettier": "^9.1.0", "jest": "^29.5.0", "prettier": "^2.8.7", "release-it": "^15.10.1", "typescript": ">= 4.2.4 || ^5.0.0" }, + "engines": { + "node": ">= 18.0.0" + }, "peerDependencies": { "eslint": "^7.32.0 || ^8.2.0", "typescript": ">= 4.2.4 || ^5.0.0" @@ -4749,6 +4753,18 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", diff --git a/package.json b/package.json index 623ffcc..d373e41 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ }, "devDependencies": { "eslint": "^7.32.0 || ^8.2.0", + "eslint-config-prettier": "^9.1.0", "jest": "^29.5.0", "prettier": "^2.8.7", "release-it": "^15.10.1", diff --git a/rules/index.js b/rules/index.js deleted file mode 100644 index 9b4b6da..0000000 --- a/rules/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: ['../configs/base'].map(require.resolve), - rules: {}, -}; diff --git a/rules/prettier.js b/rules/prettier.js deleted file mode 100644 index a5f6a3c..0000000 --- a/rules/prettier.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: ['../configs/prettier'].map(require.resolve), - rules: {}, -}; diff --git a/tests/requires.test.js b/tests/requires.test.js index cf9b902..4e18836 100644 --- a/tests/requires.test.js +++ b/tests/requires.test.js @@ -1,26 +1,46 @@ -const fs = require('fs'); -const path = require('path'); - -const readdirRecursively = (dir) => { - const dirents = fs.readdirSync(dir, { withFileTypes: true }); - let files = []; - let dirs = []; - dirents.forEach((dirent) => { - if (dirent.isDirectory()) dirs.push(`${dir}/${dirent.name}`); - if (dirent.isFile()) files.push(`${dir}/${dirent.name}`); - }); - dirs.forEach((dir) => { - files = readdirRecursively(dir, files); - }); - return files; -}; +/* eslint-disable import/no-dynamic-require */ +/* eslint-disable n/global-require */ +const { readdirSync } = require('fs'); +const { resolve, join } = require('path'); test('parsable all configs', () => { - const files = readdirRecursively(path.resolve(`${__dirname}/../configs`)); - files.forEach((file) => expect(() => require(file)).not.toThrow()); + const dir = resolve(join(__dirname, '../configs')); + + const files = readdirSync(dir, { + withFileTypes: true, + }) + .map((dirnet) => extractFilePath(dirnet, dir)) + .flat(); + + files.forEach((file) => { + expect(() => require(file)).not.toThrow(); + }); }); test('parsable all rules', () => { - const files = readdirRecursively(path.resolve(`${__dirname}/../rules`)); - files.forEach((file) => expect(() => require(file)).not.toThrow()); + const dir = resolve(join(__dirname, '../rules')); + + const files = readdirSync(dir, { + withFileTypes: true, + }) + .map((dirnet) => extractFilePath(dirnet, dir)) + .flat(); + + files.forEach((file) => { + expect(() => require(file)).not.toThrow(); + }); }); + +function extractFilePath(dirent, dir) { + if (dirent.isFile()) { + return `${dir}/${dirent.name}`; + } + + if (dirent.isDirectory()) { + return readdirSync(`${dir}/${dirent.name}`, { + withFileTypes: true, + }) + .map((child) => extractFilePath(child, `${dir}/${dirent.name}`)) + .flat(); + } +}