diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 779befb..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule ".husky"] - path = .husky - url = https://github.com/archoleat/.husky.git diff --git a/.husky b/.husky deleted file mode 160000 index e405f5d..0000000 --- a/.husky +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e405f5d42804acb0ff02382c258344611cb64fac diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..6f7c682 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +pnpm --no-install commitlint --edit diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..cb2c84d --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm lint-staged diff --git a/.prettierignore b/.prettierignore index 4051bad..2f6f013 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ .gitattributes .gitignore .gitmodules +.husky .prettierignore *.md pnpm-lock.yaml diff --git a/eslint.config.js b/eslint.config.js index 0093949..988c399 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,19 +1,12 @@ -import { resolve } from 'node:path'; - +import { compatibility } from '@archoleat/eslint-flat-compatibility'; import { defineFlatConfig } from 'eslint-define-config'; -import { FlatCompat } from '@eslint/eslintrc'; import globals from 'globals'; import typescriptParser from '@typescript-eslint/parser'; import unicorn from 'eslint-plugin-unicorn'; -const compat = new FlatCompat({ - baseDirectory: resolve(), - resolvePluginsRelativeTo: resolve(), -}); - export default defineFlatConfig([ - ...compat.extends( + ...compatibility( 'airbnb-typescript/base', 'plugin:import/recommended', 'plugin:import/typescript', diff --git a/package.json b/package.json index 3956d92..93dd577 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "index.js" ], "scripts": { - "init": "pnpm i && husky && git submodule update", + "init": "pnpm i && husky", "test": "vitest", "test:coverage": "vitest run --coverage", "release": "semantic-release", @@ -52,6 +52,7 @@ }, "devDependencies": { "@archoleat/commitlint-define-config": "^1.0.2", + "@archoleat/eslint-flat-compatibility": "^1.0.0", "@archoleat/semantic-release-define-config": "^1.1.1", "@commitlint/cli": "^19.2.1", "@commitlint/config-conventional": "^19.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88e7e60..390d154 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ devDependencies: '@archoleat/commitlint-define-config': specifier: ^1.0.2 version: 1.0.2 + '@archoleat/eslint-flat-compatibility': + specifier: ^1.0.0 + version: 1.0.0 '@archoleat/semantic-release-define-config': specifier: ^1.1.1 version: 1.1.1 @@ -118,6 +121,17 @@ packages: '@commitlint/types': 19.0.3 dev: true + /@archoleat/eslint-flat-compatibility@1.0.0: + resolution: {integrity: sha512-tQEHm6UsQT5mcUhEGzfGSj/iokY9HNfzkcUBJLmTcjaHV3CQBr+TJhvQcTwz4MwcRy5HyVgSt2pVfZFyE7bOAg==} + engines: {node: '>=20.0.0', npm: '>=10.0.0', pnpm: '>=8.0.0'} + dependencies: + '@eslint/eslintrc': 3.0.2 + '@types/eslint': 8.56.7 + '@types/eslint__eslintrc': 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@archoleat/semantic-release-define-config@1.1.1: resolution: {integrity: sha512-GQ7KW0wTROg5Zcz9QxWm0fTKv9P704mr8cUBwVai/H1lOIfWqhrwjXbTkr/Ya19Jm2o1vgalvTBQmKkJjaC7dA==} engines: {node: '>=20.0.0', npm: '>=10.0.0', pnpm: '>=8.0.0'} @@ -585,6 +599,23 @@ packages: - supports-color dev: true + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1112,6 +1143,19 @@ packages: '@types/ms': 0.7.34 dev: true + /@types/eslint@8.56.7: + resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true + + /@types/eslint__eslintrc@2.1.1: + resolution: {integrity: sha512-LI51vVv3N7WI4+fM7Xkh1+ciLA1gtuQPgXdKdece+vD8f/G2hrFqtwb4YIQyIM6VXpRM4vSy1PW5y3yuHK+Y2w==} + dependencies: + '@types/eslint': 8.56.7 + dev: true + /@types/estree-jsx@1.0.5: resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: @@ -2662,6 +2706,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2709,6 +2758,15 @@ packages: - supports-color dev: true + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3162,6 +3220,11 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + /globals@15.0.0: resolution: {integrity: sha512-m/C/yR4mjO6pXDTm9/R/SpYTAIyaUB4EOzcaaMEl7mds7Mshct9GfejiJNQGjHHbdMPey13Kpu4TMbYi9ex1pw==} engines: {node: '>=18'}