Compare commits

...
60 Commits
Author SHA1 Message Date
theoludwig d149fdd6ab fix: relax unicorn/consistent-function-scoping
Rule not working well with typeof generic in TypeScript.
React.js component should have all the related functions in its scope.
2023-07-18 23:12:21 +02:00
theoludwig 6345bddd38 fix: relax @typescript-eslint/prefer-nullish-coalescing
Should ignore ternary tests.
2023-07-18 23:06:31 +02:00
theoludwig 4e99d69598 fix: relax no-duplicate-imports
Conflict with `@typescript-eslint/consistent-type-imports`
2023-07-18 22:31:59 +02:00
theoludwig adf01e1e8c feat: add unicorn/template-indent
BREAKING CHANGE: New rule introduced
2023-07-18 22:08:49 +02:00
theoludwig 8bfeaadf32 feat: add unicorn/prefer-modern-math-apis
BREAKING CHANGE: New rule introduced
2023-07-18 22:04:34 +02:00
theoludwig 807c201955 feat: add unicorn/prefer-number-properties
BREAKING CHANGE: New rule introduced
2023-07-18 22:02:15 +02:00
theoludwig 381f5cb9cf feat: add unicorn/require-array-join-separator
BREAKING CHANGE: New rule introduced
2023-07-18 22:00:19 +02:00
theoludwig c431a208e9 feat: add unicorn/number-literal-case
BREAKING CHANGE: New rule introduced
2023-07-18 21:58:04 +02:00
theoludwig f622982fdb feat: add unicorn/no-new-buffer
BREAKING CHANGE: New rule introduced
2023-07-18 21:54:53 +02:00
theoludwig d59b088bff feat: add unicorn/no-new-array
BREAKING CHANGE: New rule introduced
2023-07-18 21:53:56 +02:00
theoludwig 2fd4edbf5b feat: add unicorn/no-empty-file
BREAKING CHANGE: New rule introduced
2023-07-18 21:51:51 +02:00
theoludwig 8837b8737b feat: add unicorn/no-document-cookie
BREAKING CHANGE: New rule introduced
2023-07-18 21:50:47 +02:00
theoludwig cbbb8dfe28 feat: add unicorn/no-array-push-push
BREAKING CHANGE: New rule introduced
2023-07-18 21:48:53 +02:00
theoludwig 2fcede3f0a feat: add unicorn/no-array-method-this-argument
BREAKING CHANGE: New rule introduced
2023-07-18 21:48:07 +02:00
theoludwig 80c00f5fa8 feat: add unicorn/no-array-for-each
BREAKING CHANGE: New rule introduced
2023-07-18 21:46:32 +02:00
theoludwig 7f7ab46896 feat: add unicorn/no-array-callback-reference
BREAKING CHANGE: New rule introduced
2023-07-18 21:45:37 +02:00
theoludwig eab075e291 feat: add unicorn/explicit-length-check
BREAKING CHANGE: New rule introduced
2023-07-18 21:43:06 +02:00
theoludwig 244b74679a feat: add unicorn/consistent-function-scoping
BREAKING CHANGE: New rule introduced
2023-07-18 21:39:46 +02:00
theoludwig 07595ccb56 feat: add unicorn/consistent-destructuring
BREAKING CHANGE: New rule introduced
2023-07-18 21:37:00 +02:00
theoludwig d0e9004ce3 docs: improve recommended usage/setup 2023-07-18 20:25:19 +02:00
theoludwig 1e29cef968 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^48.0.0`
2023-07-18 20:17:06 +02:00
theoludwig f89c4415cf feat: add support for typescript-eslint v6.0.0 2023-07-14 23:19:09 +02:00
theoludwig 34ec74cff7 docs: simplify README 2023-07-02 16:02:28 +02:00
theoludwig f5a69d69f5 fix: update author - Théo LUDWIG 2023-07-02 15:57:44 +02:00
theoludwig e071e917f6 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint@^8.44.0`
2023-07-02 15:54:50 +02:00
theoludwig 528a31316d refactor: usage of node:test instead of tap 2023-07-02 15:46:14 +02:00
Divlo b1bd574d42 feat: add npm package provenance
Ref: https://github.blog/2023-04-19-introducing-npm-package-provenance/
2023-05-13 15:41:12 +02:00
Divlo ca9b1db4bd build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^47.0.0`
2023-05-13 15:22:49 +02:00
Divlo 3222d42e67 build(deps): update latest 2023-04-02 21:16:48 +02:00
Divlo 08602b1c53 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^46.0.0`
2023-04-02 20:53:26 +02:00
Divlo 1779517f5c feat: add @typescript-eslint/ban-types
BREAKING CHANGE: New rule introduced
2023-02-06 23:52:11 +01:00
Divlo 81b37b523c feat: add import/no-empty-named-blocks
BREAKING CHANGE: New rule introduced
2023-02-06 23:48:24 +01:00
Divlo a95ac7ec8b fix: relax @typescript-eslint/consistent-type-assertions 2023-02-06 23:43:23 +01:00
Divlo 32481c316f fix: relax no-unused-vars ignore variable starting with _ 2023-02-06 23:42:09 +01:00
Divlo c3ddbc73b7 feat: add no-empty-static-block
Ref: https://eslint.org/docs/latest/rules/no-empty-static-block

BREAKING CHANGE: New rule introduced
2023-02-06 23:37:55 +01:00
Divlo 1934d3525a feat: add no-new-native-nonconstructor
Ref: https://eslint.org/docs/latest/rules/no-new-native-nonconstructor

BREAKING CHANGE: New rule introduced
2023-02-06 23:36:21 +01:00
Divlo 4f625c3b88 build(deps): update latest
BREAKING CHANGE: peerDependencies:
`eslint@^8.33.0`, `eslint-plugin-import@^2.27.5`,
`eslint-plugin-promise@^6.1.1`, `eslint-plugin-unicorn@^45.0.2`
2023-02-06 23:33:28 +01:00
Divlo e24964a60a build(deps): update latest 2023-01-10 13:27:35 +01:00
Divlo fcc107bdec fix: relax @typescript-eslint/prefer-optional-chain 2022-11-21 09:09:06 +01:00
Divlo 666a3dee2d feat: add unicorn/no-typeof-undefined
BREAKING CHANGE: New rule introduced

BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^45.0.0`
2022-11-21 09:08:19 +01:00
Divlo 0ce46310ed build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^44.0.0`
2022-10-03 20:40:47 +02:00
Divlo e2b2c1c77f docs: fix typo 2022-09-20 23:08:10 +02:00
Divlo 846a25943d perf: reduce package size by publishing only needed files 2022-09-01 01:17:47 +02:00
Divlo e0f93343fe test: fix with new rules introduced 2022-08-31 14:00:08 +02:00
Divlo c3b46debe6 feat: add @typescript-eslint/consistent-type-imports
Ref: https://typescript-eslint.io/rules/consistent-type-imports

BREAKING CHANGE: New rule introduced
2022-08-31 13:56:16 +02:00
Divlo c0ec89ed0c feat: add prefer-arrow-callback
Ref: https://eslint.org/docs/latest/rules/prefer-arrow-callback

BREAKING CHANGE: New rule introduced
2022-08-31 13:49:03 +02:00
Divlo 099a3388a1 feat: add func-style: "expression"
Ref: https://eslint.org/docs/latest/rules/func-style

BREAKING CHANGE: New rule introduced
2022-08-31 13:44:54 +02:00
Divlo 1f20fe89e8 fix: relax @typescript-eslint/no-empty-interface 2022-08-31 13:32:05 +02:00
Divlo 3f1d1921ba feat: add arrow-body-style: "always"
Ref: https://eslint.org/docs/latest/rules/arrow-body-style

BREAKING CHANGE: New rule introduced
2022-08-31 13:27:37 +02:00
Divlo b743c94430 feat: add arrow-parens: "always"
Ref: https://eslint.org/docs/latest/rules/arrow-parens

BREAKING CHANGE: New rule introduced
2022-08-31 13:25:38 +02:00
Divlo f138acaf53 feat: add curly: "all"
Ref: https://eslint.org/docs/latest/rules/curly

BREAKING CHANGE: New rule introduced
2022-08-31 13:22:20 +02:00
Divlo 435d3e9e5f build(deps): update latest 2022-08-31 13:17:00 +02:00
Divlo 637a79a8e7 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^43.0.0`
2022-07-12 13:52:53 +02:00
Divlo 61679195ee build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-import@^2.26.0`, `eslint-plugin-unicorn@^42.0.0`
2022-04-06 19:14:13 +02:00
Divlo 387509a30f chore: replace tape with tap 2022-03-19 14:28:00 +01:00
Divlo 4271efe20b fix: relax require-await 2022-03-19 14:07:42 +01:00
Divlo 14145df9c7 fix: relax @typescript-eslint/no-misused-promises 2022-03-16 11:40:14 +01:00
Divlo 914e373058 fix: relax @typescript-eslint/await-thenable 2022-03-16 11:39:21 +01:00
Divlo 4240e21ce2 build(deps): update latest 2022-03-16 11:38:20 +01:00
Divlo 48061dd577 feat: support both JavaScript and TypeScript linting 2022-02-20 12:36:37 +01:00
21 changed files with 4988 additions and 9916 deletions
+96 -53
View File
@@ -1,19 +1,17 @@
{ {
"root": true, "root": true,
"plugins": ["@typescript-eslint", "import", "promise", "unicorn"], "plugins": ["import", "promise", "unicorn"],
"env": { "env": {
"browser": true, "browser": true,
"node": true, "node": true,
"es2022": true "es2024": true
}, },
"parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"ecmaVersion": 2022, "ecmaVersion": "latest",
"sourceType": "module", "sourceType": "module",
"ecmaFeatures": { "ecmaFeatures": {
"jsx": true "jsx": true
}, }
"project": "./tsconfig.json"
}, },
"rules": { "rules": {
"constructor-super": "error", "constructor-super": "error",
@@ -29,24 +27,23 @@
"no-control-regex": "error", "no-control-regex": "error",
"no-debugger": "error", "no-debugger": "error",
"no-dupe-args": "error", "no-dupe-args": "error",
"no-dupe-class-members": "off", "no-dupe-class-members": "error",
"@typescript-eslint/no-dupe-class-members": "error",
"no-dupe-else-if": "error", "no-dupe-else-if": "error",
"no-dupe-keys": "error", "no-dupe-keys": "error",
"no-duplicate-case": "error", "no-duplicate-case": "error",
"no-duplicate-imports": "off", "no-duplicate-imports": "error",
"@typescript-eslint/no-duplicate-imports": "error",
"no-empty-character-class": "error", "no-empty-character-class": "error",
"no-empty-pattern": "error", "no-empty-pattern": "error",
"no-empty-static-block": "error",
"no-ex-assign": "error", "no-ex-assign": "error",
"no-fallthrough": "error", "no-fallthrough": "error",
"no-func-assign": "error", "no-func-assign": "error",
"no-import-assign": "error", "no-import-assign": "error",
"no-invalid-regexp": "error", "no-invalid-regexp": "error",
"no-irregular-whitespace": "error", "no-irregular-whitespace": "error",
"no-loss-of-precision": "off", "no-loss-of-precision": "error",
"@typescript-eslint/no-loss-of-precision": "error",
"no-misleading-character-class": "error", "no-misleading-character-class": "error",
"no-new-native-nonconstructor": "error",
"no-new-symbol": "error", "no-new-symbol": "error",
"no-obj-calls": "error", "no-obj-calls": "error",
"no-promise-executor-return": "error", "no-promise-executor-return": "error",
@@ -64,17 +61,13 @@
"no-unsafe-negation": "error", "no-unsafe-negation": "error",
"no-unsafe-optional-chaining": "error", "no-unsafe-optional-chaining": "error",
"no-unused-private-class-members": "error", "no-unused-private-class-members": "error",
"no-unused-vars": "off", "no-unused-vars": ["error", { "varsIgnorePattern": "^_" }],
"@typescript-eslint/no-unused-vars": "error", "no-use-before-define": [
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": [
"error", "error",
{ {
"functions": false, "functions": false,
"classes": false, "classes": false,
"enums": false, "variables": false
"variables": false,
"typedefs": false
} }
], ],
"no-useless-backreference": "error", "no-useless-backreference": "error",
@@ -88,19 +81,16 @@
"valid-typeof": ["error", { "requireStringLiterals": true }], "valid-typeof": ["error", { "requireStringLiterals": true }],
"consistent-this": "error", "consistent-this": "error",
"default-param-last": "off", "default-param-last": "error",
"@typescript-eslint/default-param-last": "error",
"default-case-last": "error", "default-case-last": "error",
"dot-notation": "off", "dot-notation": ["error", { "allowKeywords": true }],
"@typescript-eslint/dot-notation": ["error", { "allowKeywords": true }],
"eqeqeq": ["error", "always", { "null": "ignore" }], "eqeqeq": ["error", "always", { "null": "ignore" }],
"grouped-accessor-pairs": "error", "grouped-accessor-pairs": "error",
"new-cap": [ "new-cap": [
"error", "error",
{ "newIsCap": true, "capIsNew": false, "properties": true } { "newIsCap": true, "capIsNew": false, "properties": true }
], ],
"no-array-constructor": "off", "no-array-constructor": "error",
"@typescript-eslint/no-array-constructor": "error",
"no-caller": "error", "no-caller": "error",
"no-confusing-arrow": "error", "no-confusing-arrow": "error",
"no-delete-var": "error", "no-delete-var": "error",
@@ -108,8 +98,7 @@
"no-eval": "error", "no-eval": "error",
"no-floating-decimal": "error", "no-floating-decimal": "error",
"no-global-assign": "error", "no-global-assign": "error",
"no-implied-eval": "off", "no-implied-eval": "error",
"@typescript-eslint/no-implied-eval": "error",
"no-mixed-operators": [ "no-mixed-operators": [
"error", "error",
{ {
@@ -127,15 +116,12 @@
"no-octal": "error", "no-octal": "error",
"no-octal-escape": "error", "no-octal-escape": "error",
"no-proto": "error", "no-proto": "error",
"no-redeclare": "off", "no-redeclare": ["error", { "builtinGlobals": false }],
"@typescript-eslint/no-redeclare": ["error", { "builtinGlobals": false }],
"no-regex-spaces": "error", "no-regex-spaces": "error",
"no-shadow-restricted-names": "error", "no-shadow-restricted-names": "error",
"no-throw-literal": "off", "no-throw-literal": "error",
"@typescript-eslint/no-throw-literal": "error",
"no-undef-init": "error", "no-undef-init": "error",
"no-unused-expressions": "off", "no-unused-expressions": [
"@typescript-eslint/no-unused-expressions": [
"error", "error",
{ {
"allowShortCircuit": true, "allowShortCircuit": true,
@@ -145,8 +131,7 @@
], ],
"no-useless-call": "error", "no-useless-call": "error",
"no-useless-computed-key": "error", "no-useless-computed-key": "error",
"no-useless-constructor": "off", "no-useless-constructor": "error",
"@typescript-eslint/no-useless-constructor": "error",
"no-useless-escape": "error", "no-useless-escape": "error",
"no-useless-rename": "error", "no-useless-rename": "error",
"no-useless-return": "error", "no-useless-return": "error",
@@ -161,9 +146,12 @@
"prefer-regex-literals": ["error", { "disallowRedundantWrapping": true }], "prefer-regex-literals": ["error", { "disallowRedundantWrapping": true }],
"quote-props": ["error", "as-needed"], "quote-props": ["error", "as-needed"],
"radix": "error", "radix": "error",
"require-await": "off",
"@typescript-eslint/require-await": "error",
"yoda": ["error", "never"], "yoda": ["error", "never"],
"curly": ["error", "all"],
"func-style": ["error", "expression"],
"prefer-arrow-callback": "error",
"arrow-parens": ["error", "always"],
"arrow-body-style": ["error", "always"],
"import/no-absolute-path": "error", "import/no-absolute-path": "error",
"import/no-webpack-loader-syntax": "error", "import/no-webpack-loader-syntax": "error",
@@ -180,46 +168,106 @@
} }
], ],
"import/no-named-default": "error", "import/no-named-default": "error",
"import/no-empty-named-blocks": "error",
"promise/param-names": "error", "promise/param-names": "error",
"promise/no-new-statics": "error", "promise/no-new-statics": "error",
"unicorn/better-regex": "error", "unicorn/better-regex": "error",
"unicorn/catch-error-name": "error", "unicorn/catch-error-name": "error",
"unicorn/consistent-destructuring": "error",
"unicorn/custom-error-definition": "error", "unicorn/custom-error-definition": "error",
"unicorn/error-message": "error", "unicorn/error-message": "error",
"unicorn/escape-case": "error", "unicorn/escape-case": "error",
"unicorn/explicit-length-check": "error",
"unicorn/new-for-builtins": "error", "unicorn/new-for-builtins": "error",
"unicorn/no-array-callback-reference": "error",
"unicorn/no-array-for-each": "error",
"unicorn/no-array-method-this-argument": "error",
"unicorn/no-array-push-push": "error",
"unicorn/no-document-cookie": "error",
"unicorn/no-empty-file": "error",
"unicorn/no-hex-escape": "error", "unicorn/no-hex-escape": "error",
"unicorn/no-instanceof-array": "error", "unicorn/no-instanceof-array": "error",
"unicorn/no-new-array": "error",
"unicorn/no-new-buffer": "error",
"unicorn/no-this-assignment": "error", "unicorn/no-this-assignment": "error",
"unicorn/no-zero-fractions": "error", "unicorn/no-zero-fractions": "error",
"unicorn/number-literal-case": "error",
"unicorn/prefer-node-protocol": "error", "unicorn/prefer-node-protocol": "error",
"unicorn/throw-new-error": "error" "unicorn/throw-new-error": "error",
"unicorn/no-typeof-undefined": "error",
"unicorn/require-array-join-separator": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-modern-math-apis": "error",
"unicorn/template-indent": "error"
}, },
"overrides": [ "overrides": [
{ {
"files": ["*.ts", "*.tsx"], "files": ["*.ts", "*.tsx"],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"rules": { "rules": {
"no-undef": "off", "no-undef": "off",
"no-dupe-class-members": "off",
"@typescript-eslint/no-dupe-class-members": "error",
"no-loss-of-precision": "off",
"@typescript-eslint/no-loss-of-precision": "error",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{ "varsIgnorePattern": "^_" }
],
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": [
"error",
{
"functions": false,
"classes": false,
"enums": false,
"variables": false,
"typedefs": false
}
],
"default-param-last": "off",
"@typescript-eslint/default-param-last": "error",
"dot-notation": "off",
"@typescript-eslint/dot-notation": ["error", { "allowKeywords": true }],
"no-array-constructor": "off",
"@typescript-eslint/no-array-constructor": "error",
"no-implied-eval": "off",
"@typescript-eslint/no-implied-eval": "error",
"no-redeclare": "off",
"@typescript-eslint/no-redeclare": [
"error",
{ "builtinGlobals": false }
],
"no-throw-literal": "off",
"@typescript-eslint/no-throw-literal": "error",
"no-unused-expressions": "off",
"@typescript-eslint/no-unused-expressions": [
"error",
{
"allowShortCircuit": true,
"allowTernary": true,
"allowTaggedTemplates": true
}
],
"no-useless-constructor": "off",
"@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/adjacent-overload-signatures": "error", "@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/await-thenable": "error",
"@typescript-eslint/array-type": [ "@typescript-eslint/array-type": [
"error", "error",
{ "default": "array-simple" } { "default": "array-simple" }
], ],
"@typescript-eslint/consistent-type-assertions": [ "@typescript-eslint/ban-types": "error",
"error",
{
"assertionStyle": "as",
"objectLiteralTypeAssertions": "never"
}
],
"@typescript-eslint/consistent-type-definitions": [ "@typescript-eslint/consistent-type-definitions": [
"error", "error",
"interface" "interface"
], ],
"no-duplicate-imports": "off",
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/explicit-function-return-type": [ "@typescript-eslint/explicit-function-return-type": [
"error", "error",
{ {
@@ -248,10 +296,6 @@
], ],
"@typescript-eslint/no-base-to-string": "error", "@typescript-eslint/no-base-to-string": "error",
"@typescript-eslint/no-dynamic-delete": "error", "@typescript-eslint/no-dynamic-delete": "error",
"@typescript-eslint/no-empty-interface": [
"error",
{ "allowSingleExtends": true }
],
"@typescript-eslint/no-extra-non-null-assertion": "error", "@typescript-eslint/no-extra-non-null-assertion": "error",
"@typescript-eslint/no-extraneous-class": [ "@typescript-eslint/no-extraneous-class": [
"error", "error",
@@ -261,7 +305,6 @@
"@typescript-eslint/no-for-in-array": "error", "@typescript-eslint/no-for-in-array": "error",
"@typescript-eslint/no-invalid-void-type": "error", "@typescript-eslint/no-invalid-void-type": "error",
"@typescript-eslint/no-misused-new": "error", "@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-misused-promises": "error",
"@typescript-eslint/no-non-null-asserted-optional-chain": "error", "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
"@typescript-eslint/no-non-null-assertion": "error", "@typescript-eslint/no-non-null-assertion": "error",
"@typescript-eslint/no-this-alias": [ "@typescript-eslint/no-this-alias": [
@@ -276,11 +319,11 @@
"@typescript-eslint/prefer-nullish-coalescing": [ "@typescript-eslint/prefer-nullish-coalescing": [
"error", "error",
{ {
"ignoreTernaryTests": true,
"ignoreConditionalTests": false, "ignoreConditionalTests": false,
"ignoreMixedLogicalExpressions": false "ignoreMixedLogicalExpressions": false
} }
], ],
"@typescript-eslint/prefer-optional-chain": "error",
"@typescript-eslint/prefer-readonly": "error", "@typescript-eslint/prefer-readonly": "error",
"@typescript-eslint/prefer-reduce-type-parameter": "error", "@typescript-eslint/prefer-reduce-type-parameter": "error",
"@typescript-eslint/prefer-ts-expect-error": "error", "@typescript-eslint/prefer-ts-expect-error": "error",
@@ -291,7 +334,7 @@
], ],
"@typescript-eslint/restrict-plus-operands": [ "@typescript-eslint/restrict-plus-operands": [
"error", "error",
{ "checkCompoundAssignments": true } { "skipCompoundAssignments": true }
], ],
"@typescript-eslint/restrict-template-expressions": [ "@typescript-eslint/restrict-template-expressions": [
"error", "error",
+1 -1
View File
@@ -1,6 +1,6 @@
<!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. --> <!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. -->
## What changes this PR introduce? # What changes this PR introduce?
## List any relevant issue numbers ## List any relevant issue numbers
+7 -7
View File
@@ -2,7 +2,7 @@ name: 'Lint'
on: on:
push: push:
branches: [master, develop] branches: [develop]
pull_request: pull_request:
branches: [master, develop] branches: [master, develop]
@@ -10,19 +10,19 @@ jobs:
lint: lint:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
steps: steps:
- uses: 'actions/checkout@v2.4.0' - uses: 'actions/checkout@v3.5.3'
- name: 'Use Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v2.5.1' uses: 'actions/setup-node@v3.6.0'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
cache: 'npm' cache: 'npm'
- name: 'Install' - name: 'Install dependencies'
run: 'npm install' run: 'npm clean-install'
- run: 'npm run lint:commit -- --to "${{ github.sha }}"' - run: 'npm run lint:commit -- --to "${{ github.sha }}"'
- run: 'npm run lint:editorconfig' - run: 'npm run lint:editorconfig'
- run: 'npm run lint:markdown' - run: 'npm run lint:markdown'
- run: 'npm run lint:javascript' - run: 'npm run lint:eslint'
- run: 'npm run lint:prettier' - run: 'npm run lint:prettier'
+13 -5
View File
@@ -7,20 +7,28 @@ on:
jobs: jobs:
release: release:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
permissions:
contents: 'write'
issues: 'write'
pull-requests: 'write'
id-token: 'write'
steps: steps:
- uses: 'actions/checkout@v2.4.0' - uses: 'actions/checkout@v3.5.3'
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false
- name: 'Use Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v2.5.1' uses: 'actions/setup-node@v3.6.0'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
cache: 'npm' cache: 'npm'
- name: 'Install' - name: 'Install dependencies'
run: 'npm install' run: 'npm clean-install'
- name: 'Verify the integrity of provenance attestations and registry signatures for installed dependencies'
run: 'npm audit signatures'
- name: 'Release' - name: 'Release'
run: 'npm run release' run: 'npm run release'
+6 -6
View File
@@ -2,7 +2,7 @@ name: 'Test'
on: on:
push: push:
branches: [master, develop] branches: [develop]
pull_request: pull_request:
branches: [master, develop] branches: [master, develop]
@@ -10,16 +10,16 @@ jobs:
test: test:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
steps: steps:
- uses: 'actions/checkout@v2.4.0' - uses: 'actions/checkout@v3.5.3'
- name: 'Use Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v2.5.1' uses: 'actions/setup-node@v3.6.0'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
cache: 'npm' cache: 'npm'
- name: 'Install' - name: 'Install dependencies'
run: 'npm install' run: 'npm clean-install'
- name: 'Test' - name: 'Test'
run: 'npm run test' run: 'npm run test'
+1
View File
@@ -4,6 +4,7 @@ node_modules
# testing # testing
coverage coverage
.nyc_output
# debug # debug
npm-debug.log* npm-debug.log*
+1 -1
View File
@@ -2,5 +2,5 @@
"*": ["editorconfig-checker"], "*": ["editorconfig-checker"],
"*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"], "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"],
"*.{json,jsonc,yml,yaml}": ["prettier --write"], "*.{json,jsonc,yml,yaml}": ["prettier --write"],
"*.{md,mdx}": ["prettier --write", "markdownlint --dot --fix"] "*.{md,mdx}": ["prettier --write", "markdownlint-cli2 --fix"]
} }
+11
View File
@@ -0,0 +1,11 @@
{
"config": {
"extends": "markdownlint/style/prettier",
"relative-links": true,
"default": true,
"MD033": false
},
"globs": ["**/*.{md,mdx}"],
"ignores": ["**/node_modules"],
"customRules": ["markdownlint-rule-relative-links"]
}
-6
View File
@@ -1,6 +0,0 @@
{
"default": true,
"MD013": false,
"MD033": false,
"MD041": false
}
+1
View File
@@ -1 +1,2 @@
save-exact=true save-exact=true
provenance=true
+1 -1
View File
@@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at
contact@divlo.fr. <contact@theoludwig.fr>.
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the All community leaders are obligated to respect the privacy and security of the
+10 -24
View File
@@ -2,6 +2,14 @@
Thanks a lot for your interest in contributing to **eslint-config-conventions**! 🎉 Thanks a lot for your interest in contributing to **eslint-config-conventions**! 🎉
## Code of Conduct
**eslint-config-conventions** adopted the [Contributor Covenant](https://www.contributor-covenant.org/) as its Code of Conduct, and we expect project participants to adhere to it. Please read [the full text](./CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated.
## Open Development
All work on **eslint-config-conventions** happens directly on this repository. Both core team members and external contributors send pull requests which go through the same review process.
## Types of contributions ## Types of contributions
- Reporting a bug. - Reporting a bug.
@@ -11,7 +19,7 @@ Thanks a lot for your interest in contributing to **eslint-config-conventions**!
## Pull Requests ## Pull Requests
- **Please first discuss** the change you wish to make via [issue](https://github.com/Divlo/eslint-config-conventions/issues) before making a change. It might avoid a waste of your time. - **Please first discuss** the change you wish to make via [issue](https://github.com/theoludwig/eslint-config-conventions/issues) before making a change. It might avoid a waste of your time.
- Ensure your code respect linting. - Ensure your code respect linting.
@@ -21,26 +29,4 @@ If you're adding new features to **eslint-config-conventions**, please include t
## Commits ## Commits
The commit message guidelines respect [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional) and [Semantic Versioning](https://semver.org/) for releases. The commit message guidelines adheres to [Conventional Commits](https://www.conventionalcommits.org/) and [Semantic Versioning](https://semver.org/) for releases.
### Types
Types define which kind of changes you made to the project.
| Types | Description |
| -------- | ------------------------------------------------------------------------------------------------------------ |
| feat | A new feature. |
| fix | A bug fix. |
| docs | Documentation only changes. |
| style | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). |
| refactor | A code change that neither fixes a bug nor adds a feature. |
| perf | A code change that improves performance. |
| test | Adding missing tests or correcting existing tests. |
| build | Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm). |
| ci | Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs). |
| chore | Other changes that don't modify src or test files. |
| revert | Reverts a previous commit. |
### Scopes
Scopes define what part of the code changed.
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) Divlo Copyright (c) Théo LUDWIG
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
+30 -23
View File
@@ -11,8 +11,8 @@
<a href="./LICENSE"><img src="https://img.shields.io/badge/licence-MIT-blue.svg" alt="Licence MIT"/></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/licence-MIT-blue.svg" alt="Licence MIT"/></a>
<a href="./CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a> <a href="./CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a>
<br /> <br />
<a href="https://github.com/Divlo/eslint-config-conventions/actions/workflows/lint.yml"><img src="https://github.com/Divlo/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" /></a> <a href="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml"><img src="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" /></a>
<a href="https://github.com/Divlo/eslint-config-conventions/actions/workflows/test.yml"><img src="https://github.com/Divlo/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" /></a> <a href="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml"><img src="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" /></a>
<br /> <br />
<a href="https://conventionalcommits.org"><img src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt="Conventional Commits" /></a> <a href="https://conventionalcommits.org"><img src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt="Conventional Commits" /></a>
<a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt="semantic-release" /></a> <a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt="semantic-release" /></a>
@@ -21,9 +21,9 @@
## 📜 About ## 📜 About
**eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality, it is highly inspired from [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) but it is **stricter** and with **no formatting rules**, **only code-quality rules**. **eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality, it is highly inspired from [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) but it is **stricter** and with **no formatting rules**, **only code-quality rules**. It supports both **JavaScript** and **TypeScript**.
This configuration is mostly **for catching bugs** and **code-quality** so it is recommanded to use it with [Prettier](https://prettier.io/) for a consistent code style, it works with any `.prettierrc.json` configuration. This configuration is mostly **for catching bugs** and **code-quality** so it is recommended to use it with [Prettier](https://prettier.io/) for a consistent code style, it works with any `.prettierrc.json` configuration.
More information about **formatting rules** vs **code-quality rules** can be found on [Prettier vs. Linters](https://prettier.io/docs/en/comparison.html). More information about **formatting rules** vs **code-quality rules** can be found on [Prettier vs. Linters](https://prettier.io/docs/en/comparison.html).
@@ -35,22 +35,15 @@ More information about **formatting rules** vs **code-quality rules** can be fou
### Installation ### Installation
`npm@<7` does not automatically install `peerDependencies`, so if that's what you're using, install them manually.
Here is an example, but use it only for reference, because your decisions regarding version ranges and range specifiers may vary.
```sh ```sh
npm install --save-dev \ npm install --save-dev \
eslint@^8.9.0 \ eslint@^8.44.0 \
eslint-plugin-import@^2.25.4 \ eslint-plugin-import@^2.27.5 \
eslint-plugin-promise@^6.0.0 \ eslint-plugin-promise@^6.1.1 \
eslint-plugin-unicorn@^41.0.0 \ eslint-plugin-unicorn@^48.0.0 \
typescript@^4.4.0 \
@typescript-eslint/eslint-plugin@^5.12.0 \
eslint-config-conventions@latest eslint-config-conventions@latest
``` ```
Yes, this is a large number of packages. This is due to [a known limitation in ESLint](https://github.com/eslint/eslint/issues/3458).
This list of dependencies are: This list of dependencies are:
- [ESLint](https://github.com/eslint/eslint) - [ESLint](https://github.com/eslint/eslint)
@@ -58,10 +51,23 @@ This list of dependencies are:
- [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) - [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)
- [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) - [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise)
- [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) - [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn)
- [TypeScript](https://github.com/Microsoft/TypeScript)
- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint); ESLint rules for TypeScript.
- This package: `eslint-config-conventions` - This package: `eslint-config-conventions`
If you want to use **TypeScript**, you also need to install:
```sh
npm install --save-dev \
typescript@^5.1.6 \
@typescript-eslint/eslint-plugin@^6.1.0 \
@typescript-eslint/parser@^6.1.0
```
Dependencies are:
- [TypeScript](https://github.com/Microsoft/TypeScript)
- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint): ESLint rules for TypeScript.
- [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint): ESLint parser for TypeScript.
### Configuration with [Prettier](https://prettier.io/) (recommended) ### Configuration with [Prettier](https://prettier.io/) (recommended)
You will need to install some dependencies in addition to those required: You will need to install some dependencies in addition to those required:
@@ -71,7 +77,7 @@ npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
# Create an empty config file to let editors and other tools know you are using Prettier # Create an empty config file to let editors and other tools know you are using Prettier
# You can personalize it with your own rules # You can personalize it with your own rules
echo {}> .prettierrc.json echo "{}" > .prettierrc.json
``` ```
#### `.eslintrc.json` #### `.eslintrc.json`
@@ -80,6 +86,7 @@ echo {}> .prettierrc.json
{ {
"extends": ["conventions", "prettier"], "extends": ["conventions", "prettier"],
"plugins": ["prettier"], "plugins": ["prettier"],
"parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"project": "./tsconfig.json" "project": "./tsconfig.json"
}, },
@@ -91,15 +98,15 @@ echo {}> .prettierrc.json
**Note:** Please read some important instructions regarding the `project` option [here](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#configuration). **Note:** Please read some important instructions regarding the `project` option [here](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#configuration).
You must have a valid `tsconfig.json` file to specify `"parserOptions.project"`. `"parserOptions.project"` is only required if you use **TypeScript**.
#### `package.json` #### `package.json`
```jsonc ```jsonc
{ {
"scripts": { "scripts": {
"lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --ignore-path .gitignore",
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"" "lint:prettier": "prettier . --check"
} }
} }
``` ```
@@ -107,9 +114,9 @@ You must have a valid `tsconfig.json` file to specify `"parserOptions.project"`.
### Usage ### Usage
```sh ```sh
npm run lint:typescript npm run lint:eslint
# or to apply automatic fixes to code # or to apply automatic fixes to code
npm run lint:typescript -- --fix npm run lint:eslint -- --fix
# Validate code formatting in all supported languages by Prettier # Validate code formatting in all supported languages by Prettier
npm run lint:prettier npm run lint:prettier
+6
View File
@@ -0,0 +1,6 @@
{
"extends": "./index.js",
"parserOptions": {
"project": "./tsconfig.json"
}
}
+4722 -9720
View File
File diff suppressed because it is too large Load Diff
+41 -34
View File
@@ -3,16 +3,16 @@
"version": "0.0.0-development", "version": "0.0.0-development",
"public": true, "public": true,
"description": "ESLint shareable config to enforce strict conventions and good code quality.", "description": "ESLint shareable config to enforce strict conventions and good code quality.",
"author": "Divlo <contact@divlo.fr>", "author": "Théo LUDWIG <contact@theoludwig.fr>",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/Divlo/eslint-config-conventions.git" "url": "https://github.com/theoludwig/eslint-config-conventions.git"
}, },
"bugs": { "bugs": {
"url": "https://github.com/Divlo/eslint-config-conventions/issues" "url": "https://github.com/theoludwig/eslint-config-conventions/issues"
}, },
"homepage": "https://github.com/Divlo/eslint-config-conventions#readme", "homepage": "https://github.com/theoludwig/eslint-config-conventions#readme",
"keywords": [ "keywords": [
"eslintconfig", "eslintconfig",
"eslint", "eslint",
@@ -23,50 +23,57 @@
"conventions" "conventions"
], ],
"main": "index.js", "main": "index.js",
"files": [
"index.js",
".eslintrc.json"
],
"publishConfig": {
"access": "public",
"provenance": true
},
"engines": { "engines": {
"node": ">=16.0.0", "node": ">=16.0.0",
"npm": ">=8.0.0" "npm": ">=9.0.0"
}, },
"scripts": { "scripts": {
"lint:commit": "commitlint", "lint:commit": "commitlint",
"lint:editorconfig": "editorconfig-checker", "lint:editorconfig": "editorconfig-checker",
"lint:markdown": "markdownlint \"**/*.md\" --dot --ignore-path \".gitignore\"", "lint:markdown": "markdownlint-cli2",
"lint:javascript": "eslint \"**/*.{js,jsx,ts,tsx}\"", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --config eslintrc.json",
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"", "lint:prettier": "prettier . --check",
"lint:staged": "lint-staged", "lint:staged": "lint-staged",
"test": "tape \"test/**/*.js\"", "test": "node --test test/",
"release": "semantic-release", "release": "semantic-release",
"postinstall": "husky install", "postinstall": "husky install",
"prepublishOnly": "pinst --disable", "prepublishOnly": "pinst --disable",
"postpublish": "pinst --enable" "postpublish": "pinst --enable"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^8.9.0", "eslint": "^8.44.0",
"eslint-plugin-import": "^2.25.4", "eslint-plugin-import": "^2.27.5",
"eslint-plugin-promise": "^6.0.0", "eslint-plugin-promise": "^6.1.1",
"eslint-plugin-unicorn": "^41.0.0", "eslint-plugin-unicorn": "^48.0.0"
"typescript": "^4.4.0",
"@typescript-eslint/eslint-plugin": "^5.12.0"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "16.2.1", "@commitlint/cli": "17.6.6",
"@commitlint/config-conventional": "16.2.1", "@commitlint/config-conventional": "17.6.6",
"editorconfig-checker": "4.0.2", "@tsconfig/strictest": "2.0.1",
"eslint": "8.9.0", "@types/eslint": "8.44.0",
"@types/eslint": "8.4.1", "@types/node": "20.4.2",
"eslint-plugin-import": "2.25.4", "@typescript-eslint/eslint-plugin": "6.1.0",
"eslint-plugin-promise": "6.0.0", "@typescript-eslint/parser": "6.1.0",
"eslint-plugin-unicorn": "41.0.0", "editorconfig-checker": "5.1.1",
"typescript": "4.5.5", "eslint": "8.45.0",
"@typescript-eslint/parser": "5.12.0", "eslint-plugin-import": "2.27.5",
"@typescript-eslint/eslint-plugin": "5.12.0", "eslint-plugin-promise": "6.1.1",
"tape": "5.5.2", "eslint-plugin-unicorn": "48.0.0",
"husky": "7.0.4", "husky": "8.0.3",
"lint-staged": "12.3.4", "lint-staged": "13.2.3",
"markdownlint-cli": "0.31.1", "markdownlint-cli2": "0.8.1",
"@types/tape": "4.13.2", "markdownlint-rule-relative-links": "2.1.0",
"pinst": "2.1.6", "pinst": "3.0.0",
"prettier": "2.5.1", "prettier": "3.0.0",
"semantic-release": "19.0.2" "semantic-release": "21.0.7",
"typescript": "5.1.6"
} }
} }
+15 -10
View File
@@ -1,15 +1,20 @@
const test = require('tape') const test = require('node:test')
const assert = require('node:assert/strict')
const config = require('../index.js') const config = require('../index.js')
test('test basic properties of config', function (t) { /**
t.ok(isObject(config.parserOptions)) * @param {unknown} object
t.ok(isObject(config.env)) * @returns {boolean}
t.ok(isObject(config.rules)) */
t.ok(isObject(config.overrides)) const isObject = (object) => {
t.end()
})
function isObject(object) {
return typeof object === 'object' && object !== null return typeof object === 'object' && object !== null
} }
test('test basic properties of config', async () => {
assert.ok(isObject(config))
assert.ok(isObject(config.parserOptions))
assert.ok(isObject(config.env))
assert.ok(isObject(config.rules))
assert.ok(isObject(config.overrides))
})
+1 -1
View File
@@ -1,3 +1,3 @@
const foo = await 1 const foo = await 1
const bar = function () {} const bar = () => {}
await bar(foo) await bar(foo)
+18 -16
View File
@@ -1,37 +1,39 @@
const { ESLint } = require('eslint') const test = require('node:test')
const test = require('tape') const assert = require('node:assert/strict')
test('ensure we validate correctly JavaScript files', async (t) => { const { ESLint } = require('eslint')
const eslint = new ESLint({ ignore: false })
const eslint = new ESLint({
ignore: false,
useEslintrc: false,
overrideConfigFile: 'eslintrc.json'
})
test('ensure we validate correctly JavaScript files', async () => {
const [noErrors] = await eslint.lintFiles( const [noErrors] = await eslint.lintFiles(
'test/fixtures/javascript-no-errors.js' 'test/fixtures/javascript-no-errors.js'
) )
const [withErrors] = await eslint.lintFiles( const [withErrors] = await eslint.lintFiles(
'test/fixtures/javascript-with-errors.js' 'test/fixtures/javascript-with-errors.js'
) )
t.equal(noErrors.errorCount, 0) assert.strictEqual(noErrors?.errorCount, 0)
t.equal(withErrors.errorCount, 3) assert.strictEqual(withErrors?.errorCount, 3)
t.end()
}) })
test('ensure we validate correctly TypeScript files', async (t) => { test('ensure we validate correctly TypeScript files', async () => {
const eslint = new ESLint({ ignore: false })
const [noErrors] = await eslint.lintFiles( const [noErrors] = await eslint.lintFiles(
'test/fixtures/typescript-no-errors.ts' 'test/fixtures/typescript-no-errors.ts'
) )
const [withErrors] = await eslint.lintFiles( const [withErrors] = await eslint.lintFiles(
'test/fixtures/javascript-with-errors.js' 'test/fixtures/javascript-with-errors.js'
) )
t.equal(noErrors.errorCount, 0) assert.strictEqual(noErrors?.errorCount, 0)
t.equal(withErrors.errorCount, 3) assert.strictEqual(withErrors?.errorCount, 3)
t.end()
}) })
test('ensure we allow top-level await', async (t) => { test('ensure we allow top-level await', async () => {
const eslint = new ESLint({ ignore: false })
const [lintResult] = await eslint.lintFiles( const [lintResult] = await eslint.lintFiles(
'test/fixtures/top-level-await.mjs' 'test/fixtures/top-level-await.mjs'
) )
t.equal(lintResult.errorCount, 0) assert.strictEqual(lintResult?.errorCount, 0)
t.end()
}) })
+3 -4
View File
@@ -1,12 +1,11 @@
{ {
"extends": "@tsconfig/strictest/tsconfig.json",
"compilerOptions": { "compilerOptions": {
"resolveJsonModule": true,
"target": "ESNext", "target": "ESNext",
"module": "commonjs", "module": "commonjs",
"lib": ["ESNext"], "lib": ["ESNext"],
"moduleResolution": "node", "moduleResolution": "node",
"rootDir": "./", "rootDir": "./"
"strict": true,
"skipLibCheck": true,
"esModuleInterop": true
} }
} }