diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..5e7efd6 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/stylistic" + ], + "env": { + "jest": true, + "node": true + }, + "rules": { + "strict": ["error", "global"] + }, + "ignorePatterns": ["test/**/test.js"] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6378555 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "always" + }, + "eslint.lintTask.enable": true, + "eslint.validate": ["javascript", "typescript"] +} diff --git a/examples/dummy/fooBar.ts b/examples/dummy/fooBar.ts new file mode 100644 index 0000000..3edaf4f --- /dev/null +++ b/examples/dummy/fooBar.ts @@ -0,0 +1 @@ +const foo = 'baz'; diff --git a/jest.config.js b/jest.config.js index dc413d8..b4e24e5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -19,7 +19,7 @@ export default { testPathIgnorePatterns: ['/node_modules/', '/lib/'], moduleDirectories: ['node_modules'], collectCoverage: true, - collectCoverageFrom: ['lib/**/*.ts'], + collectCoverageFrom: ['src/**/*.ts'], coverageDirectory: 'reports/coverage', reporters: [ 'default', diff --git a/package-lock.json b/package-lock.json index 72fa55b..aae898a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "eslint": "^8.57.0", "eslint-plugin-eslint-plugin": "^6.1.0", "eslint-plugin-node": "^11.1.0", + "globals": "^15.2.0", "jest": "^29.7.0", "jest-chain": "^1.1.6", "jest-extended": "^4.0.1", @@ -703,6 +704,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", @@ -3443,11 +3457,10 @@ } }, "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz", + "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==", "dev": true, - "peer": true, "engines": { "node": ">=18" }, diff --git a/package.json b/package.json index 6f09944..e12f02a 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ ], "devDependencies": { "@eslint/js": "^9.2.0", + "@graphql-eslint/eslint-plugin": "^3.20.1", "@jest/globals": "^29.7.0", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", @@ -81,8 +82,7 @@ "prettier": "^3.0.2", "ts-jest": "^29.1.2", "typescript": "^5.4.5", - "typescript-eslint": "^7.8.0", - "@graphql-eslint/eslint-plugin": "^3.20.1" + "typescript-eslint": "^7.8.0" }, "peerDependencies": { "eslint": ">=7" diff --git a/src/index.ts b/src/index.ts index d5831f8..42ef28e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,10 +7,12 @@ import base from './configs/base.js'; import recommended from './configs/recommended.js'; -import enforceFooBar from './rules/enforce-foo-bar.js'; +import enforceFooBar from './rules/dummy/enforce-foo-bar.js'; +import { rule as noMoreThan2Fields } from './rules/graphql/no-more-than-2-fields.js'; export default { rules: { - 'enforce-foo-bar': enforceFooBar + 'enforce-foo-bar': enforceFooBar, + 'no-more-than-2-fields': noMoreThan2Fields }, config: { base, diff --git a/src/rules/enforce-foo-bar.ts b/src/rules/dummy/enforce-foo-bar.ts similarity index 100% rename from src/rules/enforce-foo-bar.ts rename to src/rules/dummy/enforce-foo-bar.ts diff --git a/src/rules/no-more-than-2-fields.ts b/src/rules/graphql/no-more-than-2-fields.ts similarity index 97% rename from src/rules/no-more-than-2-fields.ts rename to src/rules/graphql/no-more-than-2-fields.ts index cdf0c2a..435fcc0 100644 --- a/src/rules/no-more-than-2-fields.ts +++ b/src/rules/graphql/no-more-than-2-fields.ts @@ -1,7 +1,7 @@ import { Kind, NameNode } from 'graphql'; import { GraphQLESLintRule, GraphQLESLintRuleContext } from '@graphql-eslint/eslint-plugin/'; -const RULE_ID: string = 'no-more-than-2-fields'; +const RULE_ID = 'no-more-than-2-fields'; export const rule: GraphQLESLintRule = { meta: { diff --git a/test/rules/enforce-foo-bar.ts b/test/rules/dummy/enforce-foo-bar.ts similarity index 86% rename from test/rules/enforce-foo-bar.ts rename to test/rules/dummy/enforce-foo-bar.ts index bbeb41f..dc03adb 100644 --- a/test/rules/enforce-foo-bar.ts +++ b/test/rules/dummy/enforce-foo-bar.ts @@ -1,6 +1,6 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; -import ruleEnforceFoorBar from '../../src/rules/enforce-foo-bar'; +import ruleEnforceFoorBar from '../../../src/rules/dummy/enforce-foo-bar'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser' diff --git a/test/rules/no-more-than-2-fields.ts b/test/rules/graphql/no-more-than-2-fields.ts similarity index 96% rename from test/rules/no-more-than-2-fields.ts rename to test/rules/graphql/no-more-than-2-fields.ts index 44d2029..8c78c6e 100644 --- a/test/rules/no-more-than-2-fields.ts +++ b/test/rules/graphql/no-more-than-2-fields.ts @@ -1,5 +1,5 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; -import { rule } from '../../src/rules/no-more-than-2-fields'; +import { rule } from '../../../src/rules/graphql/no-more-than-2-fields'; const ruleTester = new RuleTester({ parser: '@graphql-eslint/eslint-plugin',