diff --git a/.oxlintrc.json b/.oxlintrc.json index df6550d..84db2cf 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -22,135 +22,135 @@ "files": ["**/*.astro"], "jsPlugins": ["eslint-plugin-astro"], "rules": { - "astro/jsx-a11y/alt-text": "error", - "astro/jsx-a11y/anchor-ambiguous-text": "error", - "astro/jsx-a11y/anchor-has-content": "error", - "astro/jsx-a11y/anchor-is-valid": "error", - "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", - "astro/jsx-a11y/aria-props": "error", - "astro/jsx-a11y/aria-proptypes": "error", - "astro/jsx-a11y/aria-role": "error", - "astro/missing-client-only-directive-value": "error", - "astro/no-conflict-set-directives": "error", - "astro/no-deprecated-astro-canonicalurl": "error", - "astro/no-deprecated-astro-fetchcontent": "error", - "astro/no-deprecated-astro-resolve": "error", - "astro/no-deprecated-getentrybyslug": "error", - "astro/no-exports-from-components": "error", - "astro/no-set-html-directive": "error", - "astro/no-set-text-directive": "error", - "astro/no-unused-css-selector": "error", - "astro/no-unused-define-vars-in-style": "error", - "astro/prefer-class-list-directive": "error", - "astro/prefer-object-class-list": "error", + "astro/jsx-a11y/alt-text": "deny", + "astro/jsx-a11y/anchor-ambiguous-text": "deny", + "astro/jsx-a11y/anchor-has-content": "deny", + "astro/jsx-a11y/anchor-is-valid": "deny", + "astro/jsx-a11y/aria-activedescendant-has-tabindex": "deny", + "astro/jsx-a11y/aria-props": "deny", + "astro/jsx-a11y/aria-proptypes": "deny", + "astro/jsx-a11y/aria-role": "deny", + "astro/missing-client-only-directive-value": "deny", + "astro/no-conflict-set-directives": "deny", + "astro/no-deprecated-astro-canonicalurl": "deny", + "astro/no-deprecated-astro-fetchcontent": "deny", + "astro/no-deprecated-astro-resolve": "deny", + "astro/no-deprecated-getentrybyslug": "deny", + "astro/no-exports-from-components": "deny", + "astro/no-set-html-directive": "deny", + "astro/no-set-text-directive": "deny", + "astro/no-unused-css-selector": "deny", + "astro/no-unused-define-vars-in-style": "deny", + "astro/prefer-class-list-directive": "deny", + "astro/prefer-object-class-list": "deny", "astro/prefer-split-class-list": [ - "error", + "deny", { "splitLiteral": false } ], "astro/sort-attributes": [ - "error", + "deny", { "ignoreCase": false, "order": "asc", "type": "alphabetical" } ], - "astro/valid-compile": "error" + "astro/valid-compile": "deny" } } ], "plugins": ["typescript", "unicorn", "jsdoc"], "rules": { - "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/adjacent-overload-signatures": "deny", "@typescript-eslint/array-type": [ - "error", + "deny", { "default": "generic", "readonly": "generic" } ], - "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/await-thenable": "deny", "@typescript-eslint/ban-ts-comment": [ - "error", + "deny", { "minimumDescriptionLength": 10 } ], - "@typescript-eslint/ban-tslint-comment": "error", - "@typescript-eslint/class-literal-property-style": "error", - "@typescript-eslint/consistent-generic-constructors": "error", - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/no-array-delete": "error", - "@typescript-eslint/no-base-to-string": "error", - "@typescript-eslint/no-confusing-non-null-assertion": "error", - "@typescript-eslint/no-confusing-void-expression": "error", - "@typescript-eslint/no-deprecated": "error", - "@typescript-eslint/no-duplicate-enum-values": "error", - "@typescript-eslint/no-duplicate-type-constituents": "error", - "@typescript-eslint/no-dynamic-delete": "error", - "@typescript-eslint/no-empty-object-type": "error", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-extraneous-class": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-inferrable-types": "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-meaningless-void-operator": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-misused-spread": "error", - "@typescript-eslint/no-mixed-enums": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-redundant-type-constituents": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-condition": "error", - "@typescript-eslint/no-unnecessary-template-expression": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unnecessary-type-assertion": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unnecessary-type-conversion": "error", - "@typescript-eslint/no-unsafe-argument": "error", - "@typescript-eslint/no-unsafe-assignment": "error", - "@typescript-eslint/no-unsafe-call": "error", - "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unsafe-enum-comparison": "error", - "@typescript-eslint/no-unsafe-function-type": "error", - "@typescript-eslint/no-unsafe-member-access": "error", - "@typescript-eslint/no-unsafe-return": "error", - "@typescript-eslint/no-unsafe-unary-minus": "error", - "@typescript-eslint/no-useless-default-assignment": "error", - "@typescript-eslint/no-wrapper-object-types": "error", - "@typescript-eslint/non-nullable-type-assertion-style": "error", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/prefer-find": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-includes": "error", - "@typescript-eslint/prefer-literal-enum-member": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/prefer-promise-reject-errors": "error", - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/prefer-reduce-type-parameter": "error", - "@typescript-eslint/prefer-regexp-exec": "error", - "@typescript-eslint/prefer-return-this-type": "error", - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/related-getter-setter-pairs": "error", - "@typescript-eslint/require-await": "error", + "@typescript-eslint/ban-tslint-comment": "deny", + "@typescript-eslint/class-literal-property-style": "deny", + "@typescript-eslint/consistent-generic-constructors": "deny", + "@typescript-eslint/consistent-indexed-object-style": "deny", + "@typescript-eslint/consistent-type-assertions": "deny", + "@typescript-eslint/consistent-type-definitions": ["deny", "type"], + "@typescript-eslint/dot-notation": "deny", + "@typescript-eslint/no-array-delete": "deny", + "@typescript-eslint/no-base-to-string": "deny", + "@typescript-eslint/no-confusing-non-null-assertion": "deny", + "@typescript-eslint/no-confusing-void-expression": "deny", + "@typescript-eslint/no-deprecated": "deny", + "@typescript-eslint/no-duplicate-enum-values": "deny", + "@typescript-eslint/no-duplicate-type-constituents": "deny", + "@typescript-eslint/no-dynamic-delete": "deny", + "@typescript-eslint/no-empty-object-type": "deny", + "@typescript-eslint/no-explicit-any": "deny", + "@typescript-eslint/no-extra-non-null-assertion": "deny", + "@typescript-eslint/no-extraneous-class": "deny", + "@typescript-eslint/no-floating-promises": "deny", + "@typescript-eslint/no-for-in-array": "deny", + "@typescript-eslint/no-implied-eval": "deny", + "@typescript-eslint/no-inferrable-types": "deny", + "@typescript-eslint/no-invalid-void-type": "deny", + "@typescript-eslint/no-meaningless-void-operator": "deny", + "@typescript-eslint/no-misused-new": "deny", + "@typescript-eslint/no-misused-promises": "deny", + "@typescript-eslint/no-misused-spread": "deny", + "@typescript-eslint/no-mixed-enums": "deny", + "@typescript-eslint/no-namespace": "deny", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "deny", + "@typescript-eslint/no-non-null-asserted-optional-chain": "deny", + "@typescript-eslint/no-non-null-assertion": "deny", + "@typescript-eslint/no-redundant-type-constituents": "deny", + "@typescript-eslint/no-require-imports": "deny", + "@typescript-eslint/no-this-alias": "deny", + "@typescript-eslint/no-unnecessary-condition": "deny", + "@typescript-eslint/no-unnecessary-template-expression": "deny", + "@typescript-eslint/no-unnecessary-type-arguments": "deny", + "@typescript-eslint/no-unnecessary-type-assertion": "deny", + "@typescript-eslint/no-unnecessary-type-constraint": "deny", + "@typescript-eslint/no-unnecessary-type-conversion": "deny", + "@typescript-eslint/no-unsafe-argument": "deny", + "@typescript-eslint/no-unsafe-assignment": "deny", + "@typescript-eslint/no-unsafe-call": "deny", + "@typescript-eslint/no-unsafe-declaration-merging": "deny", + "@typescript-eslint/no-unsafe-enum-comparison": "deny", + "@typescript-eslint/no-unsafe-function-type": "deny", + "@typescript-eslint/no-unsafe-member-access": "deny", + "@typescript-eslint/no-unsafe-return": "deny", + "@typescript-eslint/no-unsafe-unary-minus": "deny", + "@typescript-eslint/no-useless-default-assignment": "deny", + "@typescript-eslint/no-wrapper-object-types": "deny", + "@typescript-eslint/non-nullable-type-assertion-style": "deny", + "@typescript-eslint/prefer-as-const": "deny", + "@typescript-eslint/prefer-find": "deny", + "@typescript-eslint/prefer-for-of": "deny", + "@typescript-eslint/prefer-function-type": "deny", + "@typescript-eslint/prefer-includes": "deny", + "@typescript-eslint/prefer-literal-enum-member": "deny", + "@typescript-eslint/prefer-namespace-keyword": "deny", + "@typescript-eslint/prefer-nullish-coalescing": "deny", + "@typescript-eslint/prefer-optional-chain": "deny", + "@typescript-eslint/prefer-promise-reject-errors": "deny", + "@typescript-eslint/prefer-readonly": "deny", + "@typescript-eslint/prefer-reduce-type-parameter": "deny", + "@typescript-eslint/prefer-regexp-exec": "deny", + "@typescript-eslint/prefer-return-this-type": "deny", + "@typescript-eslint/prefer-string-starts-ends-with": "deny", + "@typescript-eslint/related-getter-setter-pairs": "deny", + "@typescript-eslint/require-await": "deny", "@typescript-eslint/restrict-plus-operands": [ - "error", + "deny", { "allowAny": false, "allowBoolean": false, @@ -160,7 +160,7 @@ } ], "@typescript-eslint/restrict-template-expressions": [ - "error", + "deny", { "allowAny": false, "allowBoolean": false, @@ -170,26 +170,26 @@ "allowRegExp": false } ], - "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unbound-method": "error", - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "@typescript-eslint/return-await": ["deny", "error-handling-correctness-only"], + "@typescript-eslint/switch-exhaustiveness-check": "deny", + "@typescript-eslint/triple-slash-reference": "deny", + "@typescript-eslint/unbound-method": "deny", + "@typescript-eslint/unified-signatures": "deny", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "deny", "array-callback-return": [ - "error", + "deny", { "allowVoid": true, "checkForEach": true } ], - "for-direction": "error", - "functional/immutable-data": "error", - "functional/no-let": "error", - "functional/no-throw-statements": "error", - "functional/no-try-statements": "error", - "functional/prefer-property-signatures": "error", - "functional/readonly-type": ["error", "generic"], + "for-direction": "deny", + "functional/immutable-data": "deny", + "functional/no-let": "deny", + "functional/no-throw-statements": "deny", + "functional/no-try-statements": "deny", + "functional/prefer-property-signatures": "deny", + "functional/readonly-type": ["deny", "generic"], "jsdoc/check-access": "warn", "jsdoc/check-property-names": "warn", "jsdoc/check-tag-names": [ @@ -211,541 +211,541 @@ "jsdoc/require-returns-description": "warn", "jsdoc/require-yields": "warn", "max-params": [ - "error", + "deny", { "max": 3 } ], - "no-array-constructor": "error", - "no-async-promise-executor": "error", - "no-case-declarations": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-constant-binary-expression": "error", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-else-if": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-empty-static-block": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-fallthrough": "error", - "no-global-assign": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-loss-of-precision": "error", - "no-misleading-character-class": "error", - "no-nonoctal-decimal-escape": "error", - "no-param-reassign": "error", - "no-prototype-builtins": "error", - "no-regex-spaces": "error", - "no-self-assign": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-unassigned-vars": "error", - "no-unexpected-multiline": "error", + "no-array-constructor": "deny", + "no-async-promise-executor": "deny", + "no-case-declarations": "deny", + "no-compare-neg-zero": "deny", + "no-cond-assign": "deny", + "no-constant-binary-expression": "deny", + "no-constant-condition": "deny", + "no-control-regex": "deny", + "no-debugger": "deny", + "no-delete-var": "deny", + "no-dupe-else-if": "deny", + "no-duplicate-case": "deny", + "no-empty": "deny", + "no-empty-character-class": "deny", + "no-empty-function": "deny", + "no-empty-pattern": "deny", + "no-empty-static-block": "deny", + "no-ex-assign": "deny", + "no-extra-boolean-cast": "deny", + "no-fallthrough": "deny", + "no-global-assign": "deny", + "no-invalid-regexp": "deny", + "no-irregular-whitespace": "deny", + "no-loss-of-precision": "deny", + "no-misleading-character-class": "deny", + "no-nonoctal-decimal-escape": "deny", + "no-param-reassign": "deny", + "no-prototype-builtins": "deny", + "no-regex-spaces": "deny", + "no-self-assign": "deny", + "no-shadow-restricted-names": "deny", + "no-sparse-arrays": "deny", + "no-unassigned-vars": "deny", + "no-unexpected-multiline": "deny", "no-unneeded-ternary": [ - "error", + "deny", { "defaultAssignment": false } ], - "no-unsafe-finally": "error", - "no-unsafe-optional-chaining": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-private-class-members": "error", - "no-unused-vars": "error", - "no-useless-backreference": "error", - "no-useless-catch": "error", - "no-useless-constructor": "error", - "no-useless-escape": "error", - "no-var": "error", + "no-unsafe-finally": "deny", + "no-unsafe-optional-chaining": "deny", + "no-unused-expressions": "deny", + "no-unused-labels": "deny", + "no-unused-private-class-members": "deny", + "no-unused-vars": "deny", + "no-useless-backreference": "deny", + "no-useless-catch": "deny", + "no-useless-constructor": "deny", + "no-useless-escape": "deny", + "no-var": "deny", "perfectionist/sort-array-includes": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-classes": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-decorators": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-enums": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-export-attributes": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-exports": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-heritage-clauses": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-import-attributes": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-interfaces": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-intersection-types": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-jsx-props": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-maps": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-modules": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-named-exports": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-named-imports": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-object-types": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-objects": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-sets": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-switch-case": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-union-types": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], "perfectionist/sort-variable-declarations": [ - "error", + "deny", { "order": "asc", "type": "natural" } ], - "prefer-const": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "preserve-caught-error": "error", - "require-yield": "error", - "sonarjs/anchor-precedence": "error", - "sonarjs/argument-type": "error", - "sonarjs/arguments-order": "error", - "sonarjs/arguments-usage": "error", - "sonarjs/array-callback-without-return": "error", - "sonarjs/assertions-in-tests": "error", - "sonarjs/aws-apigateway-public-api": "error", - "sonarjs/aws-ec2-rds-dms-public": "error", - "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", - "sonarjs/aws-efs-unencrypted": "error", - "sonarjs/aws-iam-all-privileges": "error", - "sonarjs/aws-iam-privilege-escalation": "error", - "sonarjs/aws-iam-public-access": "error", - "sonarjs/aws-opensearchservice-domain": "error", - "sonarjs/aws-rds-unencrypted-databases": "error", - "sonarjs/aws-restricted-ip-admin-access": "error", - "sonarjs/aws-s3-bucket-granted-access": "error", - "sonarjs/aws-s3-bucket-insecure-http": "error", - "sonarjs/aws-s3-bucket-public-access": "error", - "sonarjs/aws-s3-bucket-versioning": "error", - "sonarjs/aws-sagemaker-unencrypted-notebook": "error", - "sonarjs/aws-sns-unencrypted-topics": "error", - "sonarjs/aws-sqs-unencrypted-queue": "error", - "sonarjs/bitwise-operators": "error", - "sonarjs/block-scoped-var": "error", - "sonarjs/call-argument-line": "error", - "sonarjs/chai-determinate-assertion": "error", - "sonarjs/class-name": "error", - "sonarjs/code-eval": "error", - "sonarjs/cognitive-complexity": "error", - "sonarjs/comma-or-logical-or-case": "error", - "sonarjs/concise-regex": "error", - "sonarjs/confidential-information-logging": "error", - "sonarjs/constructor-for-side-effects": "error", - "sonarjs/content-length": "error", - "sonarjs/content-security-policy": "error", - "sonarjs/cookie-no-httponly": "error", - "sonarjs/cors": "error", - "sonarjs/csrf": "error", - "sonarjs/deprecation": "error", - "sonarjs/different-types-comparison": "error", - "sonarjs/disabled-auto-escaping": "error", - "sonarjs/disabled-resource-integrity": "error", - "sonarjs/disabled-timeout": "error", - "sonarjs/duplicates-in-character-class": "error", - "sonarjs/dynamically-constructed-templates": "error", - "sonarjs/empty-string-repetition": "error", - "sonarjs/encryption-secure-mode": "error", - "sonarjs/existing-groups": "error", - "sonarjs/file-permissions": "error", - "sonarjs/file-uploads": "error", - "sonarjs/fixme-tag": "error", - "sonarjs/for-loop-increment-sign": "error", - "sonarjs/frame-ancestors": "error", - "sonarjs/function-inside-loop": "error", - "sonarjs/function-return-type": "error", - "sonarjs/future-reserved-words": "error", - "sonarjs/generator-without-yield": "error", - "sonarjs/hardcoded-secret-signatures": "error", - "sonarjs/hashing": "error", - "sonarjs/hidden-files": "error", - "sonarjs/in-operator-type-error": "error", - "sonarjs/inconsistent-function-call": "error", - "sonarjs/index-of-compare-to-positive-number": "error", - "sonarjs/insecure-cookie": "error", - "sonarjs/insecure-jwt-token": "error", - "sonarjs/inverted-assertion-arguments": "error", - "sonarjs/jsx-no-leaked-render": "error", - "sonarjs/label-position": "error", - "sonarjs/link-with-target-blank": "error", - "sonarjs/max-switch-cases": "error", - "sonarjs/misplaced-loop-counter": "error", - "sonarjs/new-operator-misuse": "error", - "sonarjs/no-all-duplicated-branches": "error", - "sonarjs/no-alphabetical-sort": "error", - "sonarjs/no-angular-bypass-sanitization": "error", - "sonarjs/no-array-delete": "error", - "sonarjs/no-associative-arrays": "error", - "sonarjs/no-async-constructor": "error", - "sonarjs/no-case-label-in-switch": "error", - "sonarjs/no-clear-text-protocols": "error", - "sonarjs/no-code-after-done": "error", - "sonarjs/no-collapsible-if": "error", - "sonarjs/no-collection-size-mischeck": "error", - "sonarjs/no-commented-code": "error", - "sonarjs/no-control-regex": "error", - "sonarjs/no-dead-store": "error", - "sonarjs/no-delete-var": "error", - "sonarjs/no-duplicate-in-composite": "error", - "sonarjs/no-duplicate-string": "error", - "sonarjs/no-duplicated-branches": "error", - "sonarjs/no-element-overwrite": "error", - "sonarjs/no-empty-after-reluctant": "error", - "sonarjs/no-empty-alternatives": "error", - "sonarjs/no-empty-character-class": "error", - "sonarjs/no-empty-collection": "error", - "sonarjs/no-empty-group": "error", - "sonarjs/no-empty-test-file": "error", - "sonarjs/no-equals-in-for-termination": "error", - "sonarjs/no-exclusive-tests": "error", - "sonarjs/no-extra-arguments": "error", - "sonarjs/no-fallthrough": "error", - "sonarjs/no-global-this": "error", - "sonarjs/no-globals-shadowing": "error", - "sonarjs/no-gratuitous-expressions": "error", - "sonarjs/no-hardcoded-ip": "error", - "sonarjs/no-hardcoded-passwords": "error", - "sonarjs/no-hardcoded-secrets": "error", - "sonarjs/no-hook-setter-in-body": "error", - "sonarjs/no-identical-conditions": "error", - "sonarjs/no-identical-expressions": "error", - "sonarjs/no-identical-functions": "error", - "sonarjs/no-ignored-exceptions": "error", - "sonarjs/no-ignored-return": "error", - "sonarjs/no-implicit-global": "error", - "sonarjs/no-in-misuse": "error", - "sonarjs/no-incomplete-assertions": "error", - "sonarjs/no-inconsistent-returns": "error", - "sonarjs/no-internal-api-use": "error", - "sonarjs/no-intrusive-permissions": "error", - "sonarjs/no-invalid-regexp": "error", - "sonarjs/no-invariant-returns": "error", - "sonarjs/no-inverted-boolean-check": "error", - "sonarjs/no-ip-forward": "error", - "sonarjs/no-labels": "error", - "sonarjs/no-literal-call": "error", - "sonarjs/no-mime-sniff": "error", - "sonarjs/no-misleading-array-reverse": "error", - "sonarjs/no-misleading-character-class": "error", - "sonarjs/no-mixed-content": "error", - "sonarjs/no-nested-assignment": "error", - "sonarjs/no-nested-conditional": "error", - "sonarjs/no-nested-functions": "error", - "sonarjs/no-nested-switch": "error", - "sonarjs/no-nested-template-literals": "error", - "sonarjs/no-os-command-from-path": "error", - "sonarjs/no-parameter-reassignment": "error", - "sonarjs/no-primitive-wrappers": "error", - "sonarjs/no-redundant-assignments": "error", - "sonarjs/no-redundant-boolean": "error", - "sonarjs/no-redundant-jump": "error", - "sonarjs/no-redundant-optional": "error", - "sonarjs/no-referrer-policy": "error", - "sonarjs/no-regex-spaces": "error", - "sonarjs/no-same-argument-assert": "error", - "sonarjs/no-same-line-conditional": "error", - "sonarjs/no-selector-parameter": "error", - "sonarjs/no-session-cookies-on-static-assets": "error", - "sonarjs/no-skipped-tests": "error", - "sonarjs/no-small-switch": "error", - "sonarjs/no-table-as-layout": "error", - "sonarjs/no-try-promise": "error", - "sonarjs/no-undefined-argument": "error", - "sonarjs/no-unenclosed-multiline-block": "error", - "sonarjs/no-uniq-key": "error", - "sonarjs/no-unsafe-unzip": "error", - "sonarjs/no-unthrown-error": "error", - "sonarjs/no-unused-collection": "error", - "sonarjs/no-unused-vars": "error", - "sonarjs/no-use-of-empty-return-value": "error", - "sonarjs/no-useless-catch": "error", - "sonarjs/no-useless-increment": "error", - "sonarjs/no-useless-intersection": "error", - "sonarjs/no-useless-react-setstate": "error", - "sonarjs/no-weak-cipher": "error", - "sonarjs/no-weak-keys": "error", - "sonarjs/non-existent-operator": "error", - "sonarjs/null-dereference": "error", - "sonarjs/object-alt-content": "error", - "sonarjs/os-command": "error", - "sonarjs/post-message": "error", - "sonarjs/prefer-default-last": "error", - "sonarjs/prefer-immediate-return": "error", - "sonarjs/prefer-promise-shorthand": "error", - "sonarjs/prefer-read-only-props": "error", - "sonarjs/prefer-regexp-exec": "error", - "sonarjs/prefer-single-boolean-return": "error", - "sonarjs/prefer-type-guard": "error", - "sonarjs/prefer-while": "error", - "sonarjs/production-debug": "error", - "sonarjs/pseudo-random": "error", - "sonarjs/public-static-readonly": "error", - "sonarjs/publicly-writable-directories": "error", - "sonarjs/reduce-initial-value": "error", - "sonarjs/redundant-type-aliases": "error", - "sonarjs/regex-complexity": "error", - "sonarjs/review-blockchain-mnemonic": "error", - "sonarjs/session-regeneration": "error", - "sonarjs/single-char-in-character-classes": "error", - "sonarjs/single-character-alternation": "error", - "sonarjs/slow-regex": "error", - "sonarjs/sql-queries": "error", - "sonarjs/stable-tests": "error", - "sonarjs/stateful-regex": "error", - "sonarjs/strict-transport-security": "error", - "sonarjs/table-header": "error", - "sonarjs/table-header-reference": "error", - "sonarjs/test-check-exception": "error", - "sonarjs/todo-tag": "error", - "sonarjs/unused-import": "error", - "sonarjs/unused-named-groups": "error", - "sonarjs/unverified-certificate": "error", - "sonarjs/unverified-hostname": "error", - "sonarjs/updated-const-var": "error", - "sonarjs/updated-loop-counter": "error", - "sonarjs/use-type-alias": "error", - "sonarjs/void-use": "error", - "sonarjs/weak-ssl": "error", - "sonarjs/x-powered-by": "error", - "sonarjs/xml-parser-xxe": "error", - "unicorn/catch-error-name": "error", - "unicorn/consistent-date-clone": "error", - "unicorn/consistent-empty-array-spread": "error", - "unicorn/consistent-existence-index-check": "error", - "unicorn/custom-error-definition": "error", - "unicorn/error-message": "error", - "unicorn/escape-case": "error", + "prefer-const": "deny", + "prefer-rest-params": "deny", + "prefer-spread": "deny", + "preserve-caught-error": "deny", + "require-yield": "deny", + "sonarjs/anchor-precedence": "deny", + "sonarjs/argument-type": "deny", + "sonarjs/arguments-order": "deny", + "sonarjs/arguments-usage": "deny", + "sonarjs/array-callback-without-return": "deny", + "sonarjs/assertions-in-tests": "deny", + "sonarjs/aws-apigateway-public-api": "deny", + "sonarjs/aws-ec2-rds-dms-public": "deny", + "sonarjs/aws-ec2-unencrypted-ebs-volume": "deny", + "sonarjs/aws-efs-unencrypted": "deny", + "sonarjs/aws-iam-all-privileges": "deny", + "sonarjs/aws-iam-privilege-escalation": "deny", + "sonarjs/aws-iam-public-access": "deny", + "sonarjs/aws-opensearchservice-domain": "deny", + "sonarjs/aws-rds-unencrypted-databases": "deny", + "sonarjs/aws-restricted-ip-admin-access": "deny", + "sonarjs/aws-s3-bucket-granted-access": "deny", + "sonarjs/aws-s3-bucket-insecure-http": "deny", + "sonarjs/aws-s3-bucket-public-access": "deny", + "sonarjs/aws-s3-bucket-versioning": "deny", + "sonarjs/aws-sagemaker-unencrypted-notebook": "deny", + "sonarjs/aws-sns-unencrypted-topics": "deny", + "sonarjs/aws-sqs-unencrypted-queue": "deny", + "sonarjs/bitwise-operators": "deny", + "sonarjs/block-scoped-var": "deny", + "sonarjs/call-argument-line": "deny", + "sonarjs/chai-determinate-assertion": "deny", + "sonarjs/class-name": "deny", + "sonarjs/code-eval": "deny", + "sonarjs/cognitive-complexity": "deny", + "sonarjs/comma-or-logical-or-case": "deny", + "sonarjs/concise-regex": "deny", + "sonarjs/confidential-information-logging": "deny", + "sonarjs/constructor-for-side-effects": "deny", + "sonarjs/content-length": "deny", + "sonarjs/content-security-policy": "deny", + "sonarjs/cookie-no-httponly": "deny", + "sonarjs/cors": "deny", + "sonarjs/csrf": "deny", + "sonarjs/deprecation": "deny", + "sonarjs/different-types-comparison": "deny", + "sonarjs/disabled-auto-escaping": "deny", + "sonarjs/disabled-resource-integrity": "deny", + "sonarjs/disabled-timeout": "deny", + "sonarjs/duplicates-in-character-class": "deny", + "sonarjs/dynamically-constructed-templates": "deny", + "sonarjs/empty-string-repetition": "deny", + "sonarjs/encryption-secure-mode": "deny", + "sonarjs/existing-groups": "deny", + "sonarjs/file-permissions": "deny", + "sonarjs/file-uploads": "deny", + "sonarjs/fixme-tag": "deny", + "sonarjs/for-loop-increment-sign": "deny", + "sonarjs/frame-ancestors": "deny", + "sonarjs/function-inside-loop": "deny", + "sonarjs/function-return-type": "deny", + "sonarjs/future-reserved-words": "deny", + "sonarjs/generator-without-yield": "deny", + "sonarjs/hardcoded-secret-signatures": "deny", + "sonarjs/hashing": "deny", + "sonarjs/hidden-files": "deny", + "sonarjs/in-operator-type-error": "deny", + "sonarjs/inconsistent-function-call": "deny", + "sonarjs/index-of-compare-to-positive-number": "deny", + "sonarjs/insecure-cookie": "deny", + "sonarjs/insecure-jwt-token": "deny", + "sonarjs/inverted-assertion-arguments": "deny", + "sonarjs/jsx-no-leaked-render": "deny", + "sonarjs/label-position": "deny", + "sonarjs/link-with-target-blank": "deny", + "sonarjs/max-switch-cases": "deny", + "sonarjs/misplaced-loop-counter": "deny", + "sonarjs/new-operator-misuse": "deny", + "sonarjs/no-all-duplicated-branches": "deny", + "sonarjs/no-alphabetical-sort": "deny", + "sonarjs/no-angular-bypass-sanitization": "deny", + "sonarjs/no-array-delete": "deny", + "sonarjs/no-associative-arrays": "deny", + "sonarjs/no-async-constructor": "deny", + "sonarjs/no-case-label-in-switch": "deny", + "sonarjs/no-clear-text-protocols": "deny", + "sonarjs/no-code-after-done": "deny", + "sonarjs/no-collapsible-if": "deny", + "sonarjs/no-collection-size-mischeck": "deny", + "sonarjs/no-commented-code": "deny", + "sonarjs/no-control-regex": "deny", + "sonarjs/no-dead-store": "deny", + "sonarjs/no-delete-var": "deny", + "sonarjs/no-duplicate-in-composite": "deny", + "sonarjs/no-duplicate-string": "deny", + "sonarjs/no-duplicated-branches": "deny", + "sonarjs/no-element-overwrite": "deny", + "sonarjs/no-empty-after-reluctant": "deny", + "sonarjs/no-empty-alternatives": "deny", + "sonarjs/no-empty-character-class": "deny", + "sonarjs/no-empty-collection": "deny", + "sonarjs/no-empty-group": "deny", + "sonarjs/no-empty-test-file": "deny", + "sonarjs/no-equals-in-for-termination": "deny", + "sonarjs/no-exclusive-tests": "deny", + "sonarjs/no-extra-arguments": "deny", + "sonarjs/no-fallthrough": "deny", + "sonarjs/no-global-this": "deny", + "sonarjs/no-globals-shadowing": "deny", + "sonarjs/no-gratuitous-expressions": "deny", + "sonarjs/no-hardcoded-ip": "deny", + "sonarjs/no-hardcoded-passwords": "deny", + "sonarjs/no-hardcoded-secrets": "deny", + "sonarjs/no-hook-setter-in-body": "deny", + "sonarjs/no-identical-conditions": "deny", + "sonarjs/no-identical-expressions": "deny", + "sonarjs/no-identical-functions": "deny", + "sonarjs/no-ignored-exceptions": "deny", + "sonarjs/no-ignored-return": "deny", + "sonarjs/no-implicit-global": "deny", + "sonarjs/no-in-misuse": "deny", + "sonarjs/no-incomplete-assertions": "deny", + "sonarjs/no-inconsistent-returns": "deny", + "sonarjs/no-internal-api-use": "deny", + "sonarjs/no-intrusive-permissions": "deny", + "sonarjs/no-invalid-regexp": "deny", + "sonarjs/no-invariant-returns": "deny", + "sonarjs/no-inverted-boolean-check": "deny", + "sonarjs/no-ip-forward": "deny", + "sonarjs/no-labels": "deny", + "sonarjs/no-literal-call": "deny", + "sonarjs/no-mime-sniff": "deny", + "sonarjs/no-misleading-array-reverse": "deny", + "sonarjs/no-misleading-character-class": "deny", + "sonarjs/no-mixed-content": "deny", + "sonarjs/no-nested-assignment": "deny", + "sonarjs/no-nested-conditional": "deny", + "sonarjs/no-nested-functions": "deny", + "sonarjs/no-nested-switch": "deny", + "sonarjs/no-nested-template-literals": "deny", + "sonarjs/no-os-command-from-path": "deny", + "sonarjs/no-parameter-reassignment": "deny", + "sonarjs/no-primitive-wrappers": "deny", + "sonarjs/no-redundant-assignments": "deny", + "sonarjs/no-redundant-boolean": "deny", + "sonarjs/no-redundant-jump": "deny", + "sonarjs/no-redundant-optional": "deny", + "sonarjs/no-referrer-policy": "deny", + "sonarjs/no-regex-spaces": "deny", + "sonarjs/no-same-argument-assert": "deny", + "sonarjs/no-same-line-conditional": "deny", + "sonarjs/no-selector-parameter": "deny", + "sonarjs/no-session-cookies-on-static-assets": "deny", + "sonarjs/no-skipped-tests": "deny", + "sonarjs/no-small-switch": "deny", + "sonarjs/no-table-as-layout": "deny", + "sonarjs/no-try-promise": "deny", + "sonarjs/no-undefined-argument": "deny", + "sonarjs/no-unenclosed-multiline-block": "deny", + "sonarjs/no-uniq-key": "deny", + "sonarjs/no-unsafe-unzip": "deny", + "sonarjs/no-unthrown-error": "deny", + "sonarjs/no-unused-collection": "deny", + "sonarjs/no-unused-vars": "deny", + "sonarjs/no-use-of-empty-return-value": "deny", + "sonarjs/no-useless-catch": "deny", + "sonarjs/no-useless-increment": "deny", + "sonarjs/no-useless-intersection": "deny", + "sonarjs/no-useless-react-setstate": "deny", + "sonarjs/no-weak-cipher": "deny", + "sonarjs/no-weak-keys": "deny", + "sonarjs/non-existent-operator": "deny", + "sonarjs/null-dereference": "deny", + "sonarjs/object-alt-content": "deny", + "sonarjs/os-command": "deny", + "sonarjs/post-message": "deny", + "sonarjs/prefer-default-last": "deny", + "sonarjs/prefer-immediate-return": "deny", + "sonarjs/prefer-promise-shorthand": "deny", + "sonarjs/prefer-read-only-props": "deny", + "sonarjs/prefer-regexp-exec": "deny", + "sonarjs/prefer-single-boolean-return": "deny", + "sonarjs/prefer-type-guard": "deny", + "sonarjs/prefer-while": "deny", + "sonarjs/production-debug": "deny", + "sonarjs/pseudo-random": "deny", + "sonarjs/public-static-readonly": "deny", + "sonarjs/publicly-writable-directories": "deny", + "sonarjs/reduce-initial-value": "deny", + "sonarjs/redundant-type-aliases": "deny", + "sonarjs/regex-complexity": "deny", + "sonarjs/review-blockchain-mnemonic": "deny", + "sonarjs/session-regeneration": "deny", + "sonarjs/single-char-in-character-classes": "deny", + "sonarjs/single-character-alternation": "deny", + "sonarjs/slow-regex": "deny", + "sonarjs/sql-queries": "deny", + "sonarjs/stable-tests": "deny", + "sonarjs/stateful-regex": "deny", + "sonarjs/strict-transport-security": "deny", + "sonarjs/table-header": "deny", + "sonarjs/table-header-reference": "deny", + "sonarjs/test-check-exception": "deny", + "sonarjs/todo-tag": "deny", + "sonarjs/unused-import": "deny", + "sonarjs/unused-named-groups": "deny", + "sonarjs/unverified-certificate": "deny", + "sonarjs/unverified-hostname": "deny", + "sonarjs/updated-const-var": "deny", + "sonarjs/updated-loop-counter": "deny", + "sonarjs/use-type-alias": "deny", + "sonarjs/void-use": "deny", + "sonarjs/weak-ssl": "deny", + "sonarjs/x-powered-by": "deny", + "sonarjs/xml-parser-xxe": "deny", + "unicorn/catch-error-name": "deny", + "unicorn/consistent-date-clone": "deny", + "unicorn/consistent-empty-array-spread": "deny", + "unicorn/consistent-existence-index-check": "deny", + "unicorn/custom-error-definition": "deny", + "unicorn/error-message": "deny", + "unicorn/escape-case": "deny", "unicorn/explicit-length-check": [ - "error", + "deny", { "non-zero": "not-equal" } ], - "unicorn/new-for-builtins": "error", - "unicorn/no-abusive-eslint-disable": "error", - "unicorn/no-accessor-recursion": "error", - "unicorn/no-anonymous-default-export": "error", - "unicorn/no-array-method-this-argument": "error", - "unicorn/no-array-reverse": "error", - "unicorn/no-array-sort": "error", - "unicorn/no-await-in-promise-methods": "error", - "unicorn/no-console-spaces": "error", - "unicorn/no-document-cookie": "error", - "unicorn/no-empty-file": "error", - "unicorn/no-hex-escape": "error", - "unicorn/no-instanceof-builtins": "error", - "unicorn/no-invalid-fetch-options": "error", - "unicorn/no-invalid-remove-event-listener": "error", - "unicorn/no-lonely-if": "error", - "unicorn/no-magic-array-flat-depth": "error", - "unicorn/no-negated-condition": "error", - "unicorn/no-negation-in-equality-check": "error", - "unicorn/no-nested-ternary": "error", - "unicorn/no-new-array": "error", - "unicorn/no-new-buffer": "error", - "unicorn/no-null": "error", - "unicorn/no-object-as-default-parameter": "error", - "unicorn/no-process-exit": "error", - "unicorn/no-single-promise-in-promise-methods": "error", - "unicorn/no-static-only-class": "error", - "unicorn/no-thenable": "error", - "unicorn/no-this-assignment": "error", - "unicorn/no-typeof-undefined": "error", - "unicorn/no-unnecessary-array-flat-depth": "error", - "unicorn/no-unnecessary-array-splice-count": "error", - "unicorn/no-unnecessary-await": "error", - "unicorn/no-unnecessary-slice-end": "error", - "unicorn/no-unreadable-array-destructuring": "error", - "unicorn/no-unreadable-iife": "error", - "unicorn/no-useless-collection-argument": "error", - "unicorn/no-useless-error-capture-stack-trace": "error", - "unicorn/no-useless-fallback-in-spread": "error", - "unicorn/no-useless-length-check": "error", - "unicorn/no-useless-promise-resolve-reject": "error", - "unicorn/no-useless-spread": "error", - "unicorn/no-useless-switch-case": "error", - "unicorn/no-useless-undefined": "error", - "unicorn/no-zero-fractions": "error", - "unicorn/number-literal-case": "error", - "unicorn/numeric-separators-style": "error", - "unicorn/prefer-add-event-listener": "error", - "unicorn/prefer-array-find": "error", - "unicorn/prefer-array-flat": "error", - "unicorn/prefer-array-flat-map": "error", - "unicorn/prefer-array-index-of": "error", - "unicorn/prefer-array-some": "error", - "unicorn/prefer-at": "error", - "unicorn/prefer-bigint-literals": "error", - "unicorn/prefer-blob-reading-methods": "error", - "unicorn/prefer-class-fields": "error", - "unicorn/prefer-classlist-toggle": "error", - "unicorn/prefer-code-point": "error", - "unicorn/prefer-date-now": "error", - "unicorn/prefer-default-parameters": "error", - "unicorn/prefer-dom-node-append": "error", - "unicorn/prefer-dom-node-remove": "error", - "unicorn/prefer-dom-node-text-content": "error", - "unicorn/prefer-event-target": "error", - "unicorn/prefer-global-this": "error", - "unicorn/prefer-includes": "error", - "unicorn/prefer-keyboard-event-key": "error", - "unicorn/prefer-logical-operator-over-ternary": "error", - "unicorn/prefer-math-min-max": "error", - "unicorn/prefer-math-trunc": "error", - "unicorn/prefer-modern-dom-apis": "error", - "unicorn/prefer-modern-math-apis": "error", - "unicorn/prefer-module": "error", - "unicorn/prefer-native-coercion-functions": "error", - "unicorn/prefer-negative-index": "error", - "unicorn/prefer-node-protocol": "error", - "unicorn/prefer-number-properties": "error", - "unicorn/prefer-object-from-entries": "error", - "unicorn/prefer-optional-catch-binding": "error", - "unicorn/prefer-prototype-methods": "error", - "unicorn/prefer-reflect-apply": "error", - "unicorn/prefer-regexp-test": "error", - "unicorn/prefer-response-static-json": "error", - "unicorn/prefer-set-has": "error", - "unicorn/prefer-set-size": "error", - "unicorn/prefer-string-raw": "error", - "unicorn/prefer-string-replace-all": "error", - "unicorn/prefer-string-slice": "error", - "unicorn/prefer-string-starts-ends-with": "error", - "unicorn/prefer-string-trim-start-end": "error", - "unicorn/prefer-structured-clone": "error", - "unicorn/prefer-ternary": "error", - "unicorn/prefer-top-level-await": "error", - "unicorn/prefer-type-error": "error", - "unicorn/relative-url-style": "error", - "unicorn/require-array-join-separator": "error", - "unicorn/require-module-attributes": "error", - "unicorn/require-module-specifiers": "error", - "unicorn/require-number-to-fixed-digits-argument": "error", - "unicorn/text-encoding-identifier-case": "error", - "unicorn/throw-new-error": "error", - "use-isnan": "error", - "valid-typeof": "error", - "yoda": ["error", "never"] + "unicorn/new-for-builtins": "deny", + "unicorn/no-abusive-eslint-disable": "deny", + "unicorn/no-accessor-recursion": "deny", + "unicorn/no-anonymous-default-export": "deny", + "unicorn/no-array-method-this-argument": "deny", + "unicorn/no-array-reverse": "deny", + "unicorn/no-array-sort": "deny", + "unicorn/no-await-in-promise-methods": "deny", + "unicorn/no-console-spaces": "deny", + "unicorn/no-document-cookie": "deny", + "unicorn/no-empty-file": "deny", + "unicorn/no-hex-escape": "deny", + "unicorn/no-instanceof-builtins": "deny", + "unicorn/no-invalid-fetch-options": "deny", + "unicorn/no-invalid-remove-event-listener": "deny", + "unicorn/no-lonely-if": "deny", + "unicorn/no-magic-array-flat-depth": "deny", + "unicorn/no-negated-condition": "deny", + "unicorn/no-negation-in-equality-check": "deny", + "unicorn/no-nested-ternary": "deny", + "unicorn/no-new-array": "deny", + "unicorn/no-new-buffer": "deny", + "unicorn/no-null": "deny", + "unicorn/no-object-as-default-parameter": "deny", + "unicorn/no-process-exit": "deny", + "unicorn/no-single-promise-in-promise-methods": "deny", + "unicorn/no-static-only-class": "deny", + "unicorn/no-thenable": "deny", + "unicorn/no-this-assignment": "deny", + "unicorn/no-typeof-undefined": "deny", + "unicorn/no-unnecessary-array-flat-depth": "deny", + "unicorn/no-unnecessary-array-splice-count": "deny", + "unicorn/no-unnecessary-await": "deny", + "unicorn/no-unnecessary-slice-end": "deny", + "unicorn/no-unreadable-array-destructuring": "deny", + "unicorn/no-unreadable-iife": "deny", + "unicorn/no-useless-collection-argument": "deny", + "unicorn/no-useless-error-capture-stack-trace": "deny", + "unicorn/no-useless-fallback-in-spread": "deny", + "unicorn/no-useless-length-check": "deny", + "unicorn/no-useless-promise-resolve-reject": "deny", + "unicorn/no-useless-spread": "deny", + "unicorn/no-useless-switch-case": "deny", + "unicorn/no-useless-undefined": "deny", + "unicorn/no-zero-fractions": "deny", + "unicorn/number-literal-case": "deny", + "unicorn/numeric-separators-style": "deny", + "unicorn/prefer-add-event-listener": "deny", + "unicorn/prefer-array-find": "deny", + "unicorn/prefer-array-flat": "deny", + "unicorn/prefer-array-flat-map": "deny", + "unicorn/prefer-array-index-of": "deny", + "unicorn/prefer-array-some": "deny", + "unicorn/prefer-at": "deny", + "unicorn/prefer-bigint-literals": "deny", + "unicorn/prefer-blob-reading-methods": "deny", + "unicorn/prefer-class-fields": "deny", + "unicorn/prefer-classlist-toggle": "deny", + "unicorn/prefer-code-point": "deny", + "unicorn/prefer-date-now": "deny", + "unicorn/prefer-default-parameters": "deny", + "unicorn/prefer-dom-node-append": "deny", + "unicorn/prefer-dom-node-remove": "deny", + "unicorn/prefer-dom-node-text-content": "deny", + "unicorn/prefer-event-target": "deny", + "unicorn/prefer-global-this": "deny", + "unicorn/prefer-includes": "deny", + "unicorn/prefer-keyboard-event-key": "deny", + "unicorn/prefer-logical-operator-over-ternary": "deny", + "unicorn/prefer-math-min-max": "deny", + "unicorn/prefer-math-trunc": "deny", + "unicorn/prefer-modern-dom-apis": "deny", + "unicorn/prefer-modern-math-apis": "deny", + "unicorn/prefer-module": "deny", + "unicorn/prefer-native-coercion-functions": "deny", + "unicorn/prefer-negative-index": "deny", + "unicorn/prefer-node-protocol": "deny", + "unicorn/prefer-number-properties": "deny", + "unicorn/prefer-object-from-entries": "deny", + "unicorn/prefer-optional-catch-binding": "deny", + "unicorn/prefer-prototype-methods": "deny", + "unicorn/prefer-reflect-apply": "deny", + "unicorn/prefer-regexp-test": "deny", + "unicorn/prefer-response-static-json": "deny", + "unicorn/prefer-set-has": "deny", + "unicorn/prefer-set-size": "deny", + "unicorn/prefer-string-raw": "deny", + "unicorn/prefer-string-replace-all": "deny", + "unicorn/prefer-string-slice": "deny", + "unicorn/prefer-string-starts-ends-with": "deny", + "unicorn/prefer-string-trim-start-end": "deny", + "unicorn/prefer-structured-clone": "deny", + "unicorn/prefer-ternary": "deny", + "unicorn/prefer-top-level-await": "deny", + "unicorn/prefer-type-error": "deny", + "unicorn/relative-url-style": "deny", + "unicorn/require-array-join-separator": "deny", + "unicorn/require-module-attributes": "deny", + "unicorn/require-module-specifiers": "deny", + "unicorn/require-number-to-fixed-digits-argument": "deny", + "unicorn/text-encoding-identifier-case": "deny", + "unicorn/throw-new-error": "deny", + "use-isnan": "deny", + "valid-typeof": "deny", + "yoda": ["deny", "never"] } } diff --git a/bun.lock b/bun.lock index a10b341..8caf990 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,11 @@ "": { "name": "@gcch/configuration-oxlint", "dependencies": { + "eslint-plugin-astro": "^1.6.0", + "eslint-plugin-functional": "^9.0.4", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-perfectionist": "^5.8.0", + "eslint-plugin-sonarjs": "^4.0.2", "globals": "^17.4.0", "oxlint": "^1.58.0", "oxlint-tsgolint": "^0.19.0", @@ -14,25 +19,18 @@ "@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint#c0620280e6", "@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#91d4573bff", "@types/bun": "^1.3.11", - "@types/node": "^25.5.0", - "eslint-plugin-functional": "^9.0.4", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-perfectionist": "^5.7.0", - "eslint-plugin-sonarjs": "^4.0.2", - "knip": "^6.1.1", + "@types/node": "^25.5.2", + "knip": "^6.3.0", "prettier": "^3.8.1", "publint": "^0.3.18", "tsdown": "^0.21.7", "typescript": "^6.0.2", }, - "optionalDependencies": { - "eslint-plugin-astro": "^1.6.0", - }, "peerDependencies": { "eslint-plugin-astro": "^1.6.0", "eslint-plugin-functional": "^9.0.4", "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-perfectionist": "^5.7.0", + "eslint-plugin-perfectionist": "^5.8.0", "eslint-plugin-sonarjs": "^4.0.2", "oxlint": "^1.58.0", "oxlint-tsgolint": "^0.19.0", @@ -314,7 +312,7 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@types/node": ["@types/node@25.5.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], @@ -498,7 +496,7 @@ "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="], - "eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.7.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.57.1", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-WRHj7OZS/INutQ/gKN5C1ZGnMhkQ3oKZQAA2I7rl5yM8keBtSd9oj/qlJaHuwh5873FhMPqYlttcadF0YsTN7g=="], + "eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.8.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw=="], "eslint-plugin-sonarjs": ["eslint-plugin-sonarjs@4.0.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "builtin-modules": "^3.3.0", "bytes": "^3.1.2", "functional-red-black-tree": "^1.0.1", "globals": "^17.4.0", "jsx-ast-utils-x": "^0.1.0", "lodash.merge": "^4.6.2", "minimatch": "^10.2.4", "scslre": "^0.3.0", "semver": "^7.7.4", "ts-api-utils": "^2.4.0", "typescript": ">=5" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, "sha512-BTcT1zr1iTbmJtVlcesISwnXzh+9uhf9LEOr+RRNf4kR8xA0HQTPft4oiyOCzCOGKkpSJxjR8ZYF6H7VPyplyw=="], @@ -678,7 +676,7 @@ "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "knip": ["knip@6.1.1", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "get-tsconfig": "4.13.7", "jiti": "^2.6.0", "minimist": "^1.2.8", "oxc-parser": "^0.121.0", "oxc-resolver": "^11.19.1", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.6.1", "strip-json-comments": "5.0.3", "unbash": "^2.2.0", "yaml": "^2.8.2", "zod": "^4.1.11" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-BC/kbdxwCgv+p/3YkGbtlLxbOXhQDuR+CeKKFEpJyKb3BFwG1gZa+CMWSqAnPi+kUexz74m327d3zWxyn2fMew=="], + "knip": ["knip@6.3.0", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "get-tsconfig": "4.13.7", "jiti": "^2.6.0", "minimist": "^1.2.8", "oxc-parser": "^0.121.0", "oxc-resolver": "^11.19.1", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.6.1", "strip-json-comments": "5.0.3", "unbash": "^2.2.0", "yaml": "^2.8.2", "zod": "^4.1.11" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-g6dVPoTw6iNm3cubC5IWxVkVsd0r5hXhTBTbAGIEQN53GdA2ZM/slMTPJ7n5l8pBebNQPHpxjmKxuR4xVQ2/hQ=="], "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], @@ -1006,12 +1004,16 @@ "@eslint/config-array/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@gcch/configuration-eslint/eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.7.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.57.1", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-WRHj7OZS/INutQ/gKN5C1ZGnMhkQ3oKZQAA2I7rl5yM8keBtSd9oj/qlJaHuwh5873FhMPqYlttcadF0YsTN7g=="], + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "bun-types/@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "clean-regexp/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], "eslint/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], @@ -1030,6 +1032,8 @@ "eslint-plugin-jsdoc/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA=="], + "eslint-plugin-sonarjs/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -1050,6 +1054,12 @@ "eslint-plugin-jsdoc/espree/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0" } }, "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.0", "", {}, "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.0", "@typescript-eslint/tsconfig-utils": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA=="], + "eslint-plugin-sonarjs/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], "eslint/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], @@ -1058,8 +1068,26 @@ "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.0", "@typescript-eslint/types": "^8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "eslint-plugin-sonarjs/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "eslint/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + + "eslint-plugin-perfectionist/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], } } diff --git a/cfg/eslint.config.ts b/cfg/eslint.config.ts index 8f223cc..f918764 100644 --- a/cfg/eslint.config.ts +++ b/cfg/eslint.config.ts @@ -1,4 +1,6 @@ import { configAstro } from "@gcch/configuration-eslint"; import { defineConfig } from "eslint/config"; -export default defineConfig([...configAstro]); +const config = defineConfig([...configAstro]); + +export default config; diff --git a/cfg/oxlint.config.ts b/cfg/oxlint.config.ts index 693b2c2..5ad209c 100644 --- a/cfg/oxlint.config.ts +++ b/cfg/oxlint.config.ts @@ -1,3 +1,3 @@ -import config from "../index"; +import config from "../index.ts"; export default config; diff --git a/cfg/tsdown.config.ts b/cfg/tsdown.config.ts index bd3eb15..f3b8735 100644 --- a/cfg/tsdown.config.ts +++ b/cfg/tsdown.config.ts @@ -1,13 +1,16 @@ import type { UserConfig } from "tsdown"; + import { defineConfig } from "tsdown"; const config: UserConfig = defineConfig({ + checks: { circularDependency: true }, clean: true, dts: { oxc: true, parallel: true }, entry: ["../index.ts"], minify: false, outDir: "../dist", platform: "node", + publint: true, sourcemap: false, target: "esnext", treeshake: true, diff --git a/dist/index.mjs b/dist/index.mjs index dd76cc7..8881e57 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -6,79 +6,68 @@ const astroConfig = { files: ["**/*.astro"], jsPlugins: ["eslint-plugin-astro"], rules: { - "astro/jsx-a11y/alt-text": "error", - "astro/jsx-a11y/anchor-ambiguous-text": "error", - "astro/jsx-a11y/anchor-has-content": "error", - "astro/jsx-a11y/anchor-is-valid": "error", - "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", - "astro/jsx-a11y/aria-props": "error", - "astro/jsx-a11y/aria-proptypes": "error", - "astro/jsx-a11y/aria-role": "error", - "astro/jsx-a11y/aria-unsupported-elements": "error", - "astro/jsx-a11y/autocomplete-valid": "error", - "astro/jsx-a11y/click-events-have-key-events": "error", - "astro/jsx-a11y/control-has-associated-label": "error", - "astro/jsx-a11y/heading-has-content": "error", - "astro/jsx-a11y/html-has-lang": "error", - "astro/jsx-a11y/iframe-has-title": "error", - "astro/jsx-a11y/img-redundant-alt": "error", - "astro/jsx-a11y/interactive-supports-focus": "error", - "astro/jsx-a11y/label-has-associated-control": "error", - "astro/jsx-a11y/lang": "error", - "astro/jsx-a11y/media-has-caption": "error", - "astro/jsx-a11y/mouse-events-have-key-events": "error", - "astro/jsx-a11y/no-access-key": "error", - "astro/jsx-a11y/no-aria-hidden-on-focusable": "error", - "astro/jsx-a11y/no-autofocus": "error", - "astro/jsx-a11y/no-distracting-elements": "error", - "astro/jsx-a11y/no-interactive-element-to-noninteractive-role": "error", - "astro/jsx-a11y/no-noninteractive-element-interactions": "error", - "astro/jsx-a11y/no-noninteractive-element-to-interactive-role": "error", - "astro/jsx-a11y/no-noninteractive-tabindex": "error", - "astro/jsx-a11y/no-redundant-roles": "error", - "astro/jsx-a11y/no-static-element-interactions": "error", - "astro/jsx-a11y/prefer-tag-over-role": "error", - "astro/jsx-a11y/role-has-required-aria-props": "error", - "astro/jsx-a11y/role-supports-aria-props": "error", - "astro/jsx-a11y/scope": "error", - "astro/jsx-a11y/tabindex-no-positive": "error", - "astro/missing-client-only-directive-value": "error", - "astro/no-conflict-set-directives": "error", - "astro/no-deprecated-astro-canonicalurl": "error", - "astro/no-deprecated-astro-fetchcontent": "error", - "astro/no-deprecated-astro-resolve": "error", - "astro/no-deprecated-getentrybyslug": "error", - "astro/no-exports-from-components": "error", - "astro/no-set-html-directive": "error", - "astro/no-set-text-directive": "error", - "astro/no-unused-css-selector": "error", - "astro/no-unused-define-vars-in-style": "error", - "astro/prefer-class-list-directive": "error", - "astro/prefer-object-class-list": "error", - "astro/prefer-split-class-list": ["error", { splitLiteral: false }], + "astro/jsx-a11y/alt-text": "deny", + "astro/jsx-a11y/anchor-ambiguous-text": "deny", + "astro/jsx-a11y/anchor-has-content": "deny", + "astro/jsx-a11y/anchor-is-valid": "deny", + "astro/jsx-a11y/aria-activedescendant-has-tabindex": "deny", + "astro/jsx-a11y/aria-props": "deny", + "astro/jsx-a11y/aria-proptypes": "deny", + "astro/jsx-a11y/aria-role": "deny", + "astro/jsx-a11y/aria-unsupported-elements": "deny", + "astro/jsx-a11y/autocomplete-valid": "deny", + "astro/jsx-a11y/click-events-have-key-events": "deny", + "astro/jsx-a11y/control-has-associated-label": "deny", + "astro/jsx-a11y/heading-has-content": "deny", + "astro/jsx-a11y/html-has-lang": "deny", + "astro/jsx-a11y/iframe-has-title": "deny", + "astro/jsx-a11y/img-redundant-alt": "deny", + "astro/jsx-a11y/interactive-supports-focus": "deny", + "astro/jsx-a11y/label-has-associated-control": "deny", + "astro/jsx-a11y/lang": "deny", + "astro/jsx-a11y/media-has-caption": "deny", + "astro/jsx-a11y/mouse-events-have-key-events": "deny", + "astro/jsx-a11y/no-access-key": "deny", + "astro/jsx-a11y/no-aria-hidden-on-focusable": "deny", + "astro/jsx-a11y/no-autofocus": "deny", + "astro/jsx-a11y/no-distracting-elements": "deny", + "astro/jsx-a11y/no-interactive-element-to-noninteractive-role": "deny", + "astro/jsx-a11y/no-noninteractive-element-interactions": "deny", + "astro/jsx-a11y/no-noninteractive-element-to-interactive-role": "deny", + "astro/jsx-a11y/no-noninteractive-tabindex": "deny", + "astro/jsx-a11y/no-redundant-roles": "deny", + "astro/jsx-a11y/no-static-element-interactions": "deny", + "astro/jsx-a11y/prefer-tag-over-role": "deny", + "astro/jsx-a11y/role-has-required-aria-props": "deny", + "astro/jsx-a11y/role-supports-aria-props": "deny", + "astro/jsx-a11y/scope": "deny", + "astro/jsx-a11y/tabindex-no-positive": "deny", + "astro/missing-client-only-directive-value": "deny", + "astro/no-conflict-set-directives": "deny", + "astro/no-deprecated-astro-canonicalurl": "deny", + "astro/no-deprecated-astro-fetchcontent": "deny", + "astro/no-deprecated-astro-resolve": "deny", + "astro/no-deprecated-getentrybyslug": "deny", + "astro/no-exports-from-components": "deny", + "astro/no-set-html-directive": "deny", + "astro/no-set-text-directive": "deny", + "astro/no-unused-css-selector": "deny", + "astro/no-unused-define-vars-in-style": "deny", + "astro/prefer-class-list-directive": "deny", + "astro/prefer-object-class-list": "deny", + "astro/prefer-split-class-list": ["deny", { splitLiteral: false }], "astro/sort-attributes": [ - "error", + "deny", { ignoreCase: false, order: "asc", type: "alphabetical", }, ], - "astro/valid-compile": "error", + "astro/valid-compile": "deny", }, }; -//#endregion -//#region ../rules/functional.ts -const functionalRules = { - "functional/immutable-data": "error", - "functional/no-let": "error", - "functional/no-throw-statements": "error", - "functional/no-try-statements": "error", - "functional/prefer-property-signatures": "error", - "functional/readonly-type": ["error", "generic"], -}; - //#endregion //#region ../rules/eslint.ts const esLintRules = { @@ -106,7 +95,17 @@ const esLintRules = { "eslint/getter-return": "deny", "eslint/grouped-accessor-pairs": ["deny", "setBeforeGet", { enforceForTSTypes: true }], "eslint/guard-for-in": "deny", - "eslint/id-length": "deny", + "eslint/id-length": [ + "deny", + { + checkGeneric: true, + exceptionPatterns: [], + exceptions: ["_"], + max: 1e8, + min: 2, + properties: "always", + }, + ], "eslint/init-declarations": ["deny", "always"], "eslint/new-cap": [ "deny", @@ -273,6 +272,7 @@ const esLintRules = { "deny", { args: "all", + argsIgnorePattern: "^_", caughtErrors: "all", fix: { ignoreClassWithStaticInitBlock: false, @@ -375,386 +375,299 @@ const esLintRules = { ], }; +//#endregion +//#region ../rules/functional.ts +const functionalRules = { + "functional/immutable-data": "deny", + "functional/no-let": "deny", + "functional/no-throw-statements": "deny", + "functional/no-try-statements": "deny", + "functional/prefer-property-signatures": "deny", + "functional/readonly-type": ["deny", "generic"], +}; + +//#endregion +//#region ../rules/import.ts +const importRules = { + "import/consistent-type-specifier-style": ["deny", "prefer-top-level"], + "import/default": "deny", + "import/export": "deny", + "import/exports-last": "deny", + "import/extensions": [ + "deny", + "always", + { + checkTypeImports: true, + ignorePackages: true, + }, + ], + "import/first": ["deny", "absolute-first"], + "import/group-exports": "deny", + "import/max-dependencies": "allow", + "import/named": "deny", + "import/namespace": ["deny", { allowComputed: false }], + "import/no-absolute-path": [ + "deny", + { + amd: false, + commonjs: true, + esmodule: true, + }, + ], + "import/no-amd": "deny", + "import/no-anonymous-default-export": [ + "deny", + { + allowAnonymousClass: false, + allowAnonymousFunction: false, + allowArray: false, + allowArrowFunction: false, + allowCallExpression: false, + allowLiteral: false, + allowNew: false, + allowObject: false, + }, + ], + "import/no-commonjs": [ + "deny", + { + allowConditionalRequire: false, + allowPrimitiveModules: false, + allowRequire: false, + }, + ], + "import/no-cycle": [ + "deny", + { + allowUnsafeDynamicCyclicDependency: false, + ignoreExternal: false, + ignoreTypes: true, + maxDepth: 4294967295, + }, + ], + "import/no-default-export": "allow", + "import/no-duplicates": [ + "deny", + { + considerQueryString: true, + preferInline: false, + }, + ], + "import/no-dynamic-require": ["deny", { esmodule: true }], + "import/no-empty-named-blocks": "deny", + "import/no-mutable-exports": "deny", + "import/no-named-as-default": "deny", + "import/no-named-as-default-member": "deny", + "import/no-named-default": "deny", + "import/no-named-export": "deny", + "import/no-namespace": "deny", + "import/no-nodejs-modules": "allow", + "import/no-relative-parent-imports": "allow", + "import/no-self-import": "deny", + "import/no-unassigned-import": "deny", + "import/no-webpack-loader-syntax": "deny", + "import/prefer-default-export": ["deny", { target: "single" }], + "import/unambiguous": "deny", +}; + //#endregion //#region ../rules/jsdoc.ts const jsDocRules = { "jsdoc/check-access": "warn", "jsdoc/check-property-names": "warn", - "jsdoc/check-tag-names": ["warn", { definedTags: ["link"] }], + "jsdoc/check-tag-names": [ + "warn", + { + definedTags: ["link"], + typed: true, + }, + ], "jsdoc/empty-tags": "warn", "jsdoc/implements-on-classes": "warn", - "jsdoc/no-defaults": "warn", - "jsdoc/require-param": "warn", + "jsdoc/no-defaults": ["warn", { noOptionalParamNames: true }], + "jsdoc/require-param": [ + "warn", + { + checkConstructors: true, + checkDestructured: true, + checkDestructuredRoots: true, + checkGetters: true, + checkRestProperty: true, + checkSetters: true, + }, + ], "jsdoc/require-param-description": "warn", "jsdoc/require-param-name": "warn", + "jsdoc/require-param-type": "allow", "jsdoc/require-property": "warn", "jsdoc/require-property-description": "warn", "jsdoc/require-property-name": "warn", - "jsdoc/require-returns": "warn", + "jsdoc/require-property-type": "allow", + "jsdoc/require-returns": [ + "warn", + { + checkConstructors: true, + checkGetters: true, + forceRequireReturn: true, + forceReturnsWithAsync: true, + }, + ], "jsdoc/require-returns-description": "warn", - "jsdoc/require-yields": "warn", -}; - -//#endregion -//#region ../rules/sonarjs.ts -const sonarJsRules = { - "sonarjs/anchor-precedence": "error", - "sonarjs/argument-type": "error", - "sonarjs/arguments-order": "error", - "sonarjs/arguments-usage": "error", - "sonarjs/array-callback-without-return": "error", - "sonarjs/assertions-in-tests": "error", - "sonarjs/aws-apigateway-public-api": "error", - "sonarjs/aws-ec2-rds-dms-public": "error", - "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", - "sonarjs/aws-efs-unencrypted": "error", - "sonarjs/aws-iam-all-privileges": "error", - "sonarjs/aws-iam-privilege-escalation": "error", - "sonarjs/aws-iam-public-access": "error", - "sonarjs/aws-opensearchservice-domain": "error", - "sonarjs/aws-rds-unencrypted-databases": "error", - "sonarjs/aws-restricted-ip-admin-access": "error", - "sonarjs/aws-s3-bucket-granted-access": "error", - "sonarjs/aws-s3-bucket-insecure-http": "error", - "sonarjs/aws-s3-bucket-public-access": "error", - "sonarjs/aws-s3-bucket-versioning": "error", - "sonarjs/aws-sagemaker-unencrypted-notebook": "error", - "sonarjs/aws-sns-unencrypted-topics": "error", - "sonarjs/aws-sqs-unencrypted-queue": "error", - "sonarjs/bitwise-operators": "error", - "sonarjs/block-scoped-var": "error", - "sonarjs/call-argument-line": "error", - "sonarjs/chai-determinate-assertion": "error", - "sonarjs/class-name": "error", - "sonarjs/code-eval": "error", - "sonarjs/cognitive-complexity": "error", - "sonarjs/comma-or-logical-or-case": "error", - "sonarjs/concise-regex": "error", - "sonarjs/confidential-information-logging": "error", - "sonarjs/constructor-for-side-effects": "error", - "sonarjs/content-length": "error", - "sonarjs/content-security-policy": "error", - "sonarjs/cookie-no-httponly": "error", - "sonarjs/cors": "error", - "sonarjs/csrf": "error", - "sonarjs/deprecation": "error", - "sonarjs/different-types-comparison": "error", - "sonarjs/disabled-auto-escaping": "error", - "sonarjs/disabled-resource-integrity": "error", - "sonarjs/disabled-timeout": "error", - "sonarjs/duplicates-in-character-class": "error", - "sonarjs/dynamically-constructed-templates": "error", - "sonarjs/empty-string-repetition": "error", - "sonarjs/encryption-secure-mode": "error", - "sonarjs/existing-groups": "error", - "sonarjs/file-permissions": "error", - "sonarjs/file-uploads": "error", - "sonarjs/fixme-tag": "error", - "sonarjs/for-loop-increment-sign": "error", - "sonarjs/frame-ancestors": "error", - "sonarjs/function-inside-loop": "error", - "sonarjs/function-return-type": "error", - "sonarjs/future-reserved-words": "error", - "sonarjs/generator-without-yield": "error", - "sonarjs/hardcoded-secret-signatures": "error", - "sonarjs/hashing": "error", - "sonarjs/hidden-files": "error", - "sonarjs/in-operator-type-error": "error", - "sonarjs/inconsistent-function-call": "error", - "sonarjs/index-of-compare-to-positive-number": "error", - "sonarjs/insecure-cookie": "error", - "sonarjs/insecure-jwt-token": "error", - "sonarjs/inverted-assertion-arguments": "error", - "sonarjs/jsx-no-leaked-render": "error", - "sonarjs/label-position": "error", - "sonarjs/link-with-target-blank": "error", - "sonarjs/max-switch-cases": "error", - "sonarjs/misplaced-loop-counter": "error", - "sonarjs/new-operator-misuse": "error", - "sonarjs/no-all-duplicated-branches": "error", - "sonarjs/no-alphabetical-sort": "error", - "sonarjs/no-angular-bypass-sanitization": "error", - "sonarjs/no-array-delete": "error", - "sonarjs/no-associative-arrays": "error", - "sonarjs/no-async-constructor": "error", - "sonarjs/no-case-label-in-switch": "error", - "sonarjs/no-clear-text-protocols": "error", - "sonarjs/no-code-after-done": "error", - "sonarjs/no-collapsible-if": "error", - "sonarjs/no-collection-size-mischeck": "error", - "sonarjs/no-commented-code": "error", - "sonarjs/no-control-regex": "error", - "sonarjs/no-dead-store": "error", - "sonarjs/no-delete-var": "error", - "sonarjs/no-duplicate-in-composite": "error", - "sonarjs/no-duplicate-string": "error", - "sonarjs/no-duplicated-branches": "error", - "sonarjs/no-element-overwrite": "error", - "sonarjs/no-empty-after-reluctant": "error", - "sonarjs/no-empty-alternatives": "error", - "sonarjs/no-empty-character-class": "error", - "sonarjs/no-empty-collection": "error", - "sonarjs/no-empty-group": "error", - "sonarjs/no-empty-test-file": "error", - "sonarjs/no-equals-in-for-termination": "error", - "sonarjs/no-exclusive-tests": "error", - "sonarjs/no-extra-arguments": "error", - "sonarjs/no-fallthrough": "error", - "sonarjs/no-global-this": "error", - "sonarjs/no-globals-shadowing": "error", - "sonarjs/no-gratuitous-expressions": "error", - "sonarjs/no-hardcoded-ip": "error", - "sonarjs/no-hardcoded-passwords": "error", - "sonarjs/no-hardcoded-secrets": "error", - "sonarjs/no-hook-setter-in-body": "error", - "sonarjs/no-identical-conditions": "error", - "sonarjs/no-identical-expressions": "error", - "sonarjs/no-identical-functions": "error", - "sonarjs/no-ignored-exceptions": "error", - "sonarjs/no-ignored-return": "error", - "sonarjs/no-implicit-global": "error", - "sonarjs/no-in-misuse": "error", - "sonarjs/no-incomplete-assertions": "error", - "sonarjs/no-inconsistent-returns": "error", - "sonarjs/no-internal-api-use": "error", - "sonarjs/no-intrusive-permissions": "error", - "sonarjs/no-invalid-regexp": "error", - "sonarjs/no-invariant-returns": "error", - "sonarjs/no-inverted-boolean-check": "error", - "sonarjs/no-ip-forward": "error", - "sonarjs/no-labels": "error", - "sonarjs/no-literal-call": "error", - "sonarjs/no-mime-sniff": "error", - "sonarjs/no-misleading-array-reverse": "error", - "sonarjs/no-misleading-character-class": "error", - "sonarjs/no-mixed-content": "error", - "sonarjs/no-nested-assignment": "error", - "sonarjs/no-nested-conditional": "error", - "sonarjs/no-nested-functions": "error", - "sonarjs/no-nested-switch": "error", - "sonarjs/no-nested-template-literals": "error", - "sonarjs/no-os-command-from-path": "error", - "sonarjs/no-parameter-reassignment": "error", - "sonarjs/no-primitive-wrappers": "error", - "sonarjs/no-redundant-assignments": "error", - "sonarjs/no-redundant-boolean": "error", - "sonarjs/no-redundant-jump": "error", - "sonarjs/no-redundant-optional": "error", - "sonarjs/no-referrer-policy": "error", - "sonarjs/no-regex-spaces": "error", - "sonarjs/no-same-argument-assert": "error", - "sonarjs/no-same-line-conditional": "error", - "sonarjs/no-selector-parameter": "error", - "sonarjs/no-session-cookies-on-static-assets": "error", - "sonarjs/no-skipped-tests": "error", - "sonarjs/no-small-switch": "error", - "sonarjs/no-table-as-layout": "error", - "sonarjs/no-try-promise": "error", - "sonarjs/no-undefined-argument": "error", - "sonarjs/no-unenclosed-multiline-block": "error", - "sonarjs/no-uniq-key": "error", - "sonarjs/no-unsafe-unzip": "error", - "sonarjs/no-unthrown-error": "error", - "sonarjs/no-unused-collection": "error", - "sonarjs/no-unused-vars": "error", - "sonarjs/no-use-of-empty-return-value": "error", - "sonarjs/no-useless-catch": "error", - "sonarjs/no-useless-increment": "error", - "sonarjs/no-useless-intersection": "error", - "sonarjs/no-useless-react-setstate": "error", - "sonarjs/no-weak-cipher": "error", - "sonarjs/no-weak-keys": "error", - "sonarjs/non-existent-operator": "error", - "sonarjs/null-dereference": "error", - "sonarjs/object-alt-content": "error", - "sonarjs/os-command": "error", - "sonarjs/post-message": "error", - "sonarjs/prefer-default-last": "error", - "sonarjs/prefer-immediate-return": "error", - "sonarjs/prefer-promise-shorthand": "error", - "sonarjs/prefer-read-only-props": "error", - "sonarjs/prefer-regexp-exec": "error", - "sonarjs/prefer-single-boolean-return": "error", - "sonarjs/prefer-type-guard": "error", - "sonarjs/prefer-while": "error", - "sonarjs/production-debug": "error", - "sonarjs/pseudo-random": "error", - "sonarjs/public-static-readonly": "error", - "sonarjs/publicly-writable-directories": "error", - "sonarjs/reduce-initial-value": "error", - "sonarjs/redundant-type-aliases": "error", - "sonarjs/regex-complexity": "error", - "sonarjs/review-blockchain-mnemonic": "error", - "sonarjs/session-regeneration": "error", - "sonarjs/single-char-in-character-classes": "error", - "sonarjs/single-character-alternation": "error", - "sonarjs/slow-regex": "error", - "sonarjs/sql-queries": "error", - "sonarjs/stable-tests": "error", - "sonarjs/stateful-regex": "error", - "sonarjs/strict-transport-security": "error", - "sonarjs/table-header": "error", - "sonarjs/table-header-reference": "error", - "sonarjs/test-check-exception": "error", - "sonarjs/todo-tag": "error", - "sonarjs/unused-import": "error", - "sonarjs/unused-named-groups": "error", - "sonarjs/unverified-certificate": "error", - "sonarjs/unverified-hostname": "error", - "sonarjs/updated-const-var": "error", - "sonarjs/updated-loop-counter": "error", - "sonarjs/use-type-alias": "error", - "sonarjs/void-use": "error", - "sonarjs/weak-ssl": "error", - "sonarjs/x-powered-by": "error", - "sonarjs/xml-parser-xxe": "error", + "jsdoc/require-returns-type": "warn", + "jsdoc/require-yields": [ + "warn", + { + forceRequireYields: false, + withGeneratorTag: false, + }, + ], }; //#endregion //#region ../rules/perfectionist.ts const perfectionistRules = { "perfectionist/sort-array-includes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-classes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-decorators": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-enums": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-export-attributes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-exports": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-heritage-clauses": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-import-attributes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-interfaces": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-intersection-types": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-jsx-props": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-maps": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-modules": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-named-exports": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-named-imports": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-object-types": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-objects": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-sets": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-switch-case": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-union-types": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-variable-declarations": [ - "error", + "deny", { order: "asc", type: "natural", @@ -762,92 +675,432 @@ const perfectionistRules = { ], }; +//#endregion +//#region ../rules/sonarjs.ts +const sonarJsRules = { + "sonarjs/anchor-precedence": "deny", + "sonarjs/argument-type": "deny", + "sonarjs/arguments-order": "deny", + "sonarjs/arguments-usage": "deny", + "sonarjs/array-callback-without-return": "deny", + "sonarjs/assertions-in-tests": "deny", + "sonarjs/aws-apigateway-public-api": "deny", + "sonarjs/aws-ec2-rds-dms-public": "deny", + "sonarjs/aws-ec2-unencrypted-ebs-volume": "deny", + "sonarjs/aws-efs-unencrypted": "deny", + "sonarjs/aws-iam-all-privileges": "deny", + "sonarjs/aws-iam-privilege-escalation": "deny", + "sonarjs/aws-iam-public-access": "deny", + "sonarjs/aws-opensearchservice-domain": "deny", + "sonarjs/aws-rds-unencrypted-databases": "deny", + "sonarjs/aws-restricted-ip-admin-access": "deny", + "sonarjs/aws-s3-bucket-granted-access": "deny", + "sonarjs/aws-s3-bucket-insecure-http": "deny", + "sonarjs/aws-s3-bucket-public-access": "deny", + "sonarjs/aws-s3-bucket-versioning": "deny", + "sonarjs/aws-sagemaker-unencrypted-notebook": "deny", + "sonarjs/aws-sns-unencrypted-topics": "deny", + "sonarjs/aws-sqs-unencrypted-queue": "deny", + "sonarjs/bitwise-operators": "deny", + "sonarjs/block-scoped-var": "deny", + "sonarjs/call-argument-line": "deny", + "sonarjs/chai-determinate-assertion": "deny", + "sonarjs/class-name": "deny", + "sonarjs/code-eval": "deny", + "sonarjs/cognitive-complexity": "deny", + "sonarjs/comma-or-logical-or-case": "deny", + "sonarjs/concise-regex": "deny", + "sonarjs/confidential-information-logging": "deny", + "sonarjs/constructor-for-side-effects": "deny", + "sonarjs/content-length": "deny", + "sonarjs/content-security-policy": "deny", + "sonarjs/cookie-no-httponly": "deny", + "sonarjs/cors": "deny", + "sonarjs/csrf": "deny", + "sonarjs/deprecation": "deny", + "sonarjs/different-types-comparison": "deny", + "sonarjs/disabled-auto-escaping": "deny", + "sonarjs/disabled-resource-integrity": "deny", + "sonarjs/disabled-timeout": "deny", + "sonarjs/duplicates-in-character-class": "deny", + "sonarjs/dynamically-constructed-templates": "deny", + "sonarjs/empty-string-repetition": "deny", + "sonarjs/encryption-secure-mode": "deny", + "sonarjs/existing-groups": "deny", + "sonarjs/file-permissions": "deny", + "sonarjs/file-uploads": "deny", + "sonarjs/fixme-tag": "deny", + "sonarjs/for-loop-increment-sign": "deny", + "sonarjs/frame-ancestors": "deny", + "sonarjs/function-inside-loop": "deny", + "sonarjs/function-return-type": "deny", + "sonarjs/future-reserved-words": "deny", + "sonarjs/generator-without-yield": "deny", + "sonarjs/hardcoded-secret-signatures": "deny", + "sonarjs/hashing": "deny", + "sonarjs/hidden-files": "deny", + "sonarjs/in-operator-type-error": "deny", + "sonarjs/inconsistent-function-call": "deny", + "sonarjs/index-of-compare-to-positive-number": "deny", + "sonarjs/insecure-cookie": "deny", + "sonarjs/insecure-jwt-token": "deny", + "sonarjs/inverted-assertion-arguments": "deny", + "sonarjs/jsx-no-leaked-render": "deny", + "sonarjs/label-position": "deny", + "sonarjs/link-with-target-blank": "deny", + "sonarjs/max-switch-cases": "deny", + "sonarjs/misplaced-loop-counter": "deny", + "sonarjs/new-operator-misuse": "deny", + "sonarjs/no-all-duplicated-branches": "deny", + "sonarjs/no-alphabetical-sort": "deny", + "sonarjs/no-angular-bypass-sanitization": "deny", + "sonarjs/no-array-delete": "deny", + "sonarjs/no-associative-arrays": "deny", + "sonarjs/no-async-constructor": "deny", + "sonarjs/no-case-label-in-switch": "deny", + "sonarjs/no-clear-text-protocols": "deny", + "sonarjs/no-code-after-done": "deny", + "sonarjs/no-collapsible-if": "deny", + "sonarjs/no-collection-size-mischeck": "deny", + "sonarjs/no-commented-code": "deny", + "sonarjs/no-control-regex": "deny", + "sonarjs/no-dead-store": "deny", + "sonarjs/no-delete-var": "deny", + "sonarjs/no-duplicate-in-composite": "deny", + "sonarjs/no-duplicate-string": "deny", + "sonarjs/no-duplicated-branches": "deny", + "sonarjs/no-element-overwrite": "deny", + "sonarjs/no-empty-after-reluctant": "deny", + "sonarjs/no-empty-alternatives": "deny", + "sonarjs/no-empty-character-class": "deny", + "sonarjs/no-empty-collection": "deny", + "sonarjs/no-empty-group": "deny", + "sonarjs/no-empty-test-file": "deny", + "sonarjs/no-equals-in-for-termination": "deny", + "sonarjs/no-exclusive-tests": "deny", + "sonarjs/no-extra-arguments": "deny", + "sonarjs/no-fallthrough": "deny", + "sonarjs/no-global-this": "deny", + "sonarjs/no-globals-shadowing": "deny", + "sonarjs/no-gratuitous-expressions": "deny", + "sonarjs/no-hardcoded-ip": "deny", + "sonarjs/no-hardcoded-passwords": "deny", + "sonarjs/no-hardcoded-secrets": "deny", + "sonarjs/no-hook-setter-in-body": "deny", + "sonarjs/no-identical-conditions": "deny", + "sonarjs/no-identical-expressions": "deny", + "sonarjs/no-identical-functions": "deny", + "sonarjs/no-ignored-exceptions": "deny", + "sonarjs/no-ignored-return": "deny", + "sonarjs/no-implicit-global": "deny", + "sonarjs/no-in-misuse": "deny", + "sonarjs/no-incomplete-assertions": "deny", + "sonarjs/no-inconsistent-returns": "deny", + "sonarjs/no-internal-api-use": "deny", + "sonarjs/no-intrusive-permissions": "deny", + "sonarjs/no-invalid-regexp": "deny", + "sonarjs/no-invariant-returns": "deny", + "sonarjs/no-inverted-boolean-check": "deny", + "sonarjs/no-ip-forward": "deny", + "sonarjs/no-labels": "deny", + "sonarjs/no-literal-call": "deny", + "sonarjs/no-mime-sniff": "deny", + "sonarjs/no-misleading-array-reverse": "deny", + "sonarjs/no-misleading-character-class": "deny", + "sonarjs/no-mixed-content": "deny", + "sonarjs/no-nested-assignment": "deny", + "sonarjs/no-nested-conditional": "deny", + "sonarjs/no-nested-functions": "deny", + "sonarjs/no-nested-switch": "deny", + "sonarjs/no-nested-template-literals": "deny", + "sonarjs/no-os-command-from-path": "deny", + "sonarjs/no-parameter-reassignment": "deny", + "sonarjs/no-primitive-wrappers": "deny", + "sonarjs/no-redundant-assignments": "deny", + "sonarjs/no-redundant-boolean": "deny", + "sonarjs/no-redundant-jump": "deny", + "sonarjs/no-redundant-optional": "deny", + "sonarjs/no-referrer-policy": "deny", + "sonarjs/no-regex-spaces": "deny", + "sonarjs/no-same-argument-assert": "deny", + "sonarjs/no-same-line-conditional": "deny", + "sonarjs/no-selector-parameter": "deny", + "sonarjs/no-session-cookies-on-static-assets": "deny", + "sonarjs/no-skipped-tests": "deny", + "sonarjs/no-small-switch": "deny", + "sonarjs/no-table-as-layout": "deny", + "sonarjs/no-try-promise": "deny", + "sonarjs/no-undefined-argument": "deny", + "sonarjs/no-unenclosed-multiline-block": "deny", + "sonarjs/no-uniq-key": "deny", + "sonarjs/no-unsafe-unzip": "deny", + "sonarjs/no-unthrown-error": "deny", + "sonarjs/no-unused-collection": "deny", + "sonarjs/no-unused-vars": "deny", + "sonarjs/no-use-of-empty-return-value": "deny", + "sonarjs/no-useless-catch": "deny", + "sonarjs/no-useless-increment": "deny", + "sonarjs/no-useless-intersection": "deny", + "sonarjs/no-useless-react-setstate": "deny", + "sonarjs/no-weak-cipher": "deny", + "sonarjs/no-weak-keys": "deny", + "sonarjs/non-existent-operator": "deny", + "sonarjs/null-dereference": "deny", + "sonarjs/object-alt-content": "deny", + "sonarjs/os-command": "deny", + "sonarjs/post-message": "deny", + "sonarjs/prefer-default-last": "deny", + "sonarjs/prefer-immediate-return": "deny", + "sonarjs/prefer-promise-shorthand": "deny", + "sonarjs/prefer-read-only-props": "deny", + "sonarjs/prefer-regexp-exec": "deny", + "sonarjs/prefer-single-boolean-return": "deny", + "sonarjs/prefer-type-guard": "deny", + "sonarjs/prefer-while": "deny", + "sonarjs/production-debug": "deny", + "sonarjs/pseudo-random": "deny", + "sonarjs/public-static-readonly": "deny", + "sonarjs/publicly-writable-directories": "deny", + "sonarjs/reduce-initial-value": "deny", + "sonarjs/redundant-type-aliases": "deny", + "sonarjs/regex-complexity": "deny", + "sonarjs/review-blockchain-mnemonic": "deny", + "sonarjs/session-regeneration": "deny", + "sonarjs/single-char-in-character-classes": "deny", + "sonarjs/single-character-alternation": "deny", + "sonarjs/slow-regex": "deny", + "sonarjs/sql-queries": "deny", + "sonarjs/stable-tests": "deny", + "sonarjs/stateful-regex": "deny", + "sonarjs/strict-transport-security": "deny", + "sonarjs/table-header": "deny", + "sonarjs/table-header-reference": "deny", + "sonarjs/test-check-exception": "deny", + "sonarjs/todo-tag": "deny", + "sonarjs/unused-import": "deny", + "sonarjs/unused-named-groups": "deny", + "sonarjs/unverified-certificate": "deny", + "sonarjs/unverified-hostname": "deny", + "sonarjs/updated-const-var": "deny", + "sonarjs/updated-loop-counter": "deny", + "sonarjs/use-type-alias": "deny", + "sonarjs/void-use": "deny", + "sonarjs/weak-ssl": "deny", + "sonarjs/x-powered-by": "deny", + "sonarjs/xml-parser-xxe": "deny", +}; + //#endregion //#region ../rules/typescript.ts +/** Longueur minimale de la description accompagnat une directive (p. ex. `@ts-expect-error`). */ +const MIN_DIRECTIVE_DESCRIPTION_LENGTH = 10; const typeScriptRules = { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": [ - "error", + "typescript/adjacent-overload-signatures": "deny", + "typescript/array-type": [ + "deny", { default: "generic", readonly: "generic", }, ], - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/ban-ts-comment": ["error", { minimumDescriptionLength: 10 }], - "@typescript-eslint/ban-tslint-comment": "error", - "@typescript-eslint/class-literal-property-style": "error", - "@typescript-eslint/consistent-generic-constructors": "error", - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/no-array-delete": "error", - "@typescript-eslint/no-base-to-string": "error", - "@typescript-eslint/no-confusing-non-null-assertion": "error", - "@typescript-eslint/no-confusing-void-expression": "error", - "@typescript-eslint/no-deprecated": "error", - "@typescript-eslint/no-duplicate-enum-values": "error", - "@typescript-eslint/no-duplicate-type-constituents": "error", - "@typescript-eslint/no-dynamic-delete": "error", - "@typescript-eslint/no-empty-object-type": "error", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-extraneous-class": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-inferrable-types": "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-meaningless-void-operator": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-misused-spread": "error", - "@typescript-eslint/no-mixed-enums": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-redundant-type-constituents": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-condition": "error", - "@typescript-eslint/no-unnecessary-template-expression": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unnecessary-type-assertion": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unnecessary-type-conversion": "error", - "@typescript-eslint/no-unsafe-argument": "error", - "@typescript-eslint/no-unsafe-assignment": "error", - "@typescript-eslint/no-unsafe-call": "error", - "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unsafe-enum-comparison": "error", - "@typescript-eslint/no-unsafe-function-type": "error", - "@typescript-eslint/no-unsafe-member-access": "error", - "@typescript-eslint/no-unsafe-return": "error", - "@typescript-eslint/no-unsafe-unary-minus": "error", - "@typescript-eslint/no-useless-default-assignment": "error", - "@typescript-eslint/no-wrapper-object-types": "error", - "@typescript-eslint/non-nullable-type-assertion-style": "error", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/prefer-find": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-includes": "error", - "@typescript-eslint/prefer-literal-enum-member": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/prefer-promise-reject-errors": "error", - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/prefer-reduce-type-parameter": "error", - "@typescript-eslint/prefer-regexp-exec": "error", - "@typescript-eslint/prefer-return-this-type": "error", - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/related-getter-setter-pairs": "error", - "@typescript-eslint/require-await": "error", - "@typescript-eslint/restrict-plus-operands": [ - "error", + "typescript/await-thenable": "deny", + "typescript/ban-ts-comment": [ + "deny", + { + minimumDescriptionLength: MIN_DIRECTIVE_DESCRIPTION_LENGTH, + "ts-check": false, + "ts-expect-error": "allow-with-description", + "ts-ignore": true, + "ts-nocheck": true, + }, + ], + "typescript/ban-tslint-comment": "deny", + "typescript/class-literal-property-style": ["deny", "fields"], + "typescript/consistent-generic-constructors": ["deny", { option: "constructor" }], + "typescript/consistent-indexed-object-style": ["deny", "record"], + "typescript/consistent-return": ["deny", { treatUndefinedAsUnspecified: false }], + "typescript/consistent-type-assertions": ["deny", { assertionStyle: "never" }], + "typescript/consistent-type-definitions": ["deny", "type"], + "typescript/consistent-type-exports": ["deny", { fixMixedExportsWithInlineTypeSpecifier: false }], + "typescript/consistent-type-imports": [ + "deny", + { + disallowTypeAnnotations: true, + fixStyle: "separate-type-imports", + prefer: "type-imports", + }, + ], + "typescript/dot-notation": [ + "deny", + { + allowIndexSignaturePropertyAccess: false, + allowKeywords: false, + allowPattern: "", + allowPrivateClassPropertyAccess: false, + allowProtectedClassPropertyAccess: false, + }, + ], + "typescript/explicit-function-return-type": [ + "deny", + { + allowConciseArrowFunctionExpressionsStartingWithVoid: false, + allowDirectConstAssertionInArrowFunctions: true, + allowedNames: [], + allowExpressions: false, + allowFunctionsWithoutTypeParameters: false, + allowHigherOrderFunctions: true, + allowIIFEs: false, + allowTypedFunctionExpressions: true, + }, + ], + "typescript/explicit-module-boundary-types": [ + "deny", + { + allowArgumentsExplicitlyTypedAsAny: false, + allowDirectConstAssertionInArrowFunctions: true, + allowedNames: [], + allowHigherOrderFunctions: true, + allowOverloadFunctions: false, + allowTypedFunctionExpressions: true, + }, + ], + "typescript/no-array-delete": "deny", + "typescript/no-base-to-string": [ + "deny", + { + checkUnknown: true, + ignoredTypeNames: ["deny", "RegExp", "URL", "URLSearchParams"], + }, + ], + "typescript/no-confusing-non-null-assertion": "deny", + "typescript/no-confusing-void-expression": [ + "deny", + { + ignoreArrowShorthand: false, + ignoreVoidOperator: false, + ignoreVoidReturningFunctions: false, + }, + ], + "typescript/no-deprecated": "deny", + "typescript/no-duplicate-enum-values": "deny", + "typescript/no-duplicate-type-constituents": [ + "deny", + { + ignoreIntersections: false, + ignoreUnions: false, + }, + ], + "typescript/no-dynamic-delete": "deny", + "typescript/no-empty-object-type": "deny", + "typescript/no-explicit-any": "deny", + "typescript/no-extra-non-null-assertion": "deny", + "typescript/no-extraneous-class": "deny", + "typescript/no-floating-promises": [ + "deny", + { + allowForKnownSafeCalls: [], + allowForKnownSafePromises: [], + checkThenables: true, + ignoreIIFE: false, + ignoreVoid: false, + }, + ], + "typescript/no-for-in-array": "deny", + "typescript/no-implied-eval": "deny", + "typescript/no-inferrable-types": "deny", + "typescript/no-invalid-void-type": "deny", + "typescript/no-meaningless-void-operator": ["deny", { checkNever: true }], + "typescript/no-misused-new": "deny", + "typescript/no-misused-promises": [ + "deny", + { + checksConditionals: true, + checksSpreads: true, + checksVoidReturn: true, + }, + ], + "typescript/no-misused-spread": ["deny", { allow: [] }], + "typescript/no-mixed-enums": "deny", + "typescript/no-namespace": "deny", + "typescript/no-non-null-asserted-nullish-coalescing": "deny", + "typescript/no-non-null-asserted-optional-chain": "deny", + "typescript/no-non-null-assertion": "deny", + "typescript/no-redundant-type-constituents": "deny", + "typescript/no-require-imports": "deny", + "typescript/no-this-alias": [ + "deny", + { + allowDestructuring: false, + allowedNames: [], + }, + ], + "typescript/no-unnecessary-condition": [ + "deny", + { + allowConstantLoopConditions: "never", + checkTypePredicates: true, + }, + ], + "typescript/no-unnecessary-parameter-property-assignment": "deny", + "typescript/no-unnecessary-qualifier": "deny", + "typescript/no-unnecessary-template-expression": "deny", + "typescript/no-unnecessary-type-arguments": "deny", + "typescript/no-unnecessary-type-assertion": "deny", + "typescript/no-unnecessary-type-constraint": "deny", + "typescript/no-unnecessary-type-conversion": "deny", + "typescript/no-unnecessary-type-parameters": "deny", + "typescript/no-unsafe-argument": "deny", + "typescript/no-unsafe-assignment": "deny", + "typescript/no-unsafe-call": "deny", + "typescript/no-unsafe-declaration-merging": "deny", + "typescript/no-unsafe-enum-comparison": "deny", + "typescript/no-unsafe-function-type": "deny", + "typescript/no-unsafe-member-access": "deny", + "typescript/no-unsafe-return": "deny", + "typescript/no-unsafe-unary-minus": "deny", + "typescript/no-useless-default-assignment": "deny", + "typescript/no-useless-empty-export": "deny", + "typescript/no-wrapper-object-types": "deny", + "typescript/non-nullable-type-assertion-style": "deny", + "typescript/prefer-as-const": "deny", + "typescript/prefer-find": "deny", + "typescript/prefer-for-of": "deny", + "typescript/prefer-function-type": "deny", + "typescript/prefer-includes": "deny", + "typescript/prefer-literal-enum-member": "deny", + "typescript/prefer-nullish-coalescing": "deny", + "typescript/prefer-optional-chain": [ + "deny", + { + checkAny: true, + checkBigInt: true, + checkBoolean: true, + checkNumber: true, + checkString: true, + checkUnknown: true, + requireNullish: false, + }, + ], + "typescript/prefer-promise-reject-errors": "deny", + "typescript/prefer-readonly": "deny", + "typescript/prefer-readonly-parameter-types": [ + "deny", + { + allow: [], + checkParameterProperties: true, + ignoreInferredTypes: true, + treatMethodsAsReadonly: true, + }, + ], + "typescript/prefer-reduce-type-parameter": "deny", + "typescript/prefer-regexp-exec": "deny", + "typescript/prefer-return-this-type": "deny", + "typescript/prefer-string-starts-ends-with": "deny", + "typescript/related-getter-setter-pairs": "deny", + "typescript/require-array-sort-compare": ["deny", { ignoreStringArrays: true }], + "typescript/require-await": "deny", + "typescript/restrict-plus-operands": [ + "deny", { allowAny: false, allowBoolean: false, @@ -856,9 +1109,15 @@ const typeScriptRules = { allowRegExp: false, }, ], - "@typescript-eslint/restrict-template-expressions": [ - "error", + "typescript/restrict-template-expressions": [ + "deny", { + allow: [ + { + from: "lib", + name: ["Error", "URL", "URLSearchParams"], + }, + ], allowAny: false, allowBoolean: false, allowNever: false, @@ -867,127 +1126,224 @@ const typeScriptRules = { allowRegExp: false, }, ], - "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unbound-method": "error", - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "typescript/return-await": ["deny", "error-handling-correctness-only"], + "typescript/strict-void-return": ["deny", { allowReturnAny: false }], + "typescript/switch-exhaustiveness-check": "deny", + "typescript/triple-slash-reference": [ + "deny", + { + lib: "never", + path: "never", + types: "prefer-import", + }, + ], + "typescript/unbound-method": ["deny", { ignoreStatic: false }], + "typescript/unified-signatures": "deny", + "typescript/use-unknown-in-catch-callback-variable": "deny", }; //#endregion //#region ../rules/unicorn.ts const unicornRules = { - "unicorn/catch-error-name": "error", - "unicorn/consistent-date-clone": "error", - "unicorn/consistent-empty-array-spread": "error", - "unicorn/consistent-existence-index-check": "error", - "unicorn/custom-error-definition": "error", - "unicorn/error-message": "error", - "unicorn/escape-case": "error", - "unicorn/explicit-length-check": ["error", { "non-zero": "not-equal" }], - "unicorn/new-for-builtins": "error", - "unicorn/no-abusive-eslint-disable": "error", - "unicorn/no-accessor-recursion": "error", - "unicorn/no-anonymous-default-export": "error", - "unicorn/no-array-method-this-argument": "error", - "unicorn/no-array-reverse": "error", - "unicorn/no-array-sort": "error", - "unicorn/no-await-in-promise-methods": "error", - "unicorn/no-console-spaces": "error", - "unicorn/no-document-cookie": "error", - "unicorn/no-empty-file": "error", - "unicorn/no-hex-escape": "error", - "unicorn/no-instanceof-builtins": "error", - "unicorn/no-invalid-fetch-options": "error", - "unicorn/no-invalid-remove-event-listener": "error", - "unicorn/no-lonely-if": "error", - "unicorn/no-magic-array-flat-depth": "error", - "unicorn/no-negated-condition": "error", - "unicorn/no-negation-in-equality-check": "error", - "unicorn/no-nested-ternary": "error", - "unicorn/no-new-array": "error", - "unicorn/no-new-buffer": "error", - "unicorn/no-null": "error", - "unicorn/no-object-as-default-parameter": "error", - "unicorn/no-process-exit": "error", - "unicorn/no-single-promise-in-promise-methods": "error", - "unicorn/no-static-only-class": "error", - "unicorn/no-thenable": "error", - "unicorn/no-this-assignment": "error", - "unicorn/no-typeof-undefined": "error", - "unicorn/no-unnecessary-array-flat-depth": "error", - "unicorn/no-unnecessary-array-splice-count": "error", - "unicorn/no-unnecessary-await": "error", - "unicorn/no-unnecessary-slice-end": "error", - "unicorn/no-unreadable-array-destructuring": "error", - "unicorn/no-unreadable-iife": "error", - "unicorn/no-useless-collection-argument": "error", - "unicorn/no-useless-error-capture-stack-trace": "error", - "unicorn/no-useless-fallback-in-spread": "error", - "unicorn/no-useless-length-check": "error", - "unicorn/no-useless-promise-resolve-reject": "error", - "unicorn/no-useless-spread": "error", - "unicorn/no-useless-switch-case": "error", - "unicorn/no-useless-undefined": "error", - "unicorn/no-zero-fractions": "error", - "unicorn/number-literal-case": "error", - "unicorn/numeric-separators-style": "error", - "unicorn/prefer-add-event-listener": "error", - "unicorn/prefer-array-find": "error", - "unicorn/prefer-array-flat": "error", - "unicorn/prefer-array-flat-map": "error", - "unicorn/prefer-array-index-of": "error", - "unicorn/prefer-array-some": "error", - "unicorn/prefer-at": "error", - "unicorn/prefer-bigint-literals": "error", - "unicorn/prefer-blob-reading-methods": "error", - "unicorn/prefer-class-fields": "error", - "unicorn/prefer-classlist-toggle": "error", - "unicorn/prefer-code-point": "error", - "unicorn/prefer-date-now": "error", - "unicorn/prefer-default-parameters": "error", - "unicorn/prefer-dom-node-append": "error", - "unicorn/prefer-dom-node-remove": "error", - "unicorn/prefer-dom-node-text-content": "error", - "unicorn/prefer-event-target": "error", - "unicorn/prefer-global-this": "error", - "unicorn/prefer-includes": "error", - "unicorn/prefer-keyboard-event-key": "error", - "unicorn/prefer-logical-operator-over-ternary": "error", - "unicorn/prefer-math-min-max": "error", - "unicorn/prefer-math-trunc": "error", - "unicorn/prefer-modern-dom-apis": "error", - "unicorn/prefer-modern-math-apis": "error", - "unicorn/prefer-module": "error", - "unicorn/prefer-native-coercion-functions": "error", - "unicorn/prefer-negative-index": "error", - "unicorn/prefer-node-protocol": "error", - "unicorn/prefer-number-properties": "error", - "unicorn/prefer-object-from-entries": "error", - "unicorn/prefer-optional-catch-binding": "error", - "unicorn/prefer-prototype-methods": "error", - "unicorn/prefer-reflect-apply": "error", - "unicorn/prefer-regexp-test": "error", - "unicorn/prefer-response-static-json": "error", - "unicorn/prefer-set-has": "error", - "unicorn/prefer-set-size": "error", - "unicorn/prefer-string-raw": "error", - "unicorn/prefer-string-replace-all": "error", - "unicorn/prefer-string-slice": "error", - "unicorn/prefer-string-starts-ends-with": "error", - "unicorn/prefer-string-trim-start-end": "error", - "unicorn/prefer-structured-clone": "error", + "unicorn/catch-error-name": "deny", + "unicorn/consistent-date-clone": "deny", + "unicorn/consistent-empty-array-spread": "deny", + "unicorn/consistent-existence-index-check": "deny", + "unicorn/custom-error-definition": "deny", + "unicorn/error-message": "deny", + "unicorn/escape-case": "deny", + "unicorn/explicit-length-check": ["deny", { "non-zero": "not-equal" }], + "unicorn/new-for-builtins": "deny", + "unicorn/no-abusive-eslint-disable": "deny", + "unicorn/no-accessor-recursion": "deny", + "unicorn/no-anonymous-default-export": "deny", + "unicorn/no-array-method-this-argument": "deny", + "unicorn/no-array-reverse": "deny", + "unicorn/no-array-sort": "deny", + "unicorn/no-await-in-promise-methods": "deny", + "unicorn/no-console-spaces": "deny", + "unicorn/no-document-cookie": "deny", + "unicorn/no-empty-file": "deny", + "unicorn/no-hex-escape": "deny", + "unicorn/no-instanceof-builtins": "deny", + "unicorn/no-invalid-fetch-options": "deny", + "unicorn/no-invalid-remove-event-listener": "deny", + "unicorn/no-lonely-if": "deny", + "unicorn/no-magic-array-flat-depth": "deny", + "unicorn/no-negated-condition": "deny", + "unicorn/no-negation-in-equality-check": "deny", + "unicorn/no-nested-ternary": "deny", + "unicorn/no-new-array": "deny", + "unicorn/no-new-buffer": "deny", + "unicorn/no-null": "deny", + "unicorn/no-object-as-default-parameter": "deny", + "unicorn/no-process-exit": "deny", + "unicorn/no-single-promise-in-promise-methods": "deny", + "unicorn/no-static-only-class": "deny", + "unicorn/no-thenable": "deny", + "unicorn/no-this-assignment": "deny", + "unicorn/no-typeof-undefined": "deny", + "unicorn/no-unnecessary-array-flat-depth": "deny", + "unicorn/no-unnecessary-array-splice-count": "deny", + "unicorn/no-unnecessary-await": "deny", + "unicorn/no-unnecessary-slice-end": "deny", + "unicorn/no-unreadable-array-destructuring": "deny", + "unicorn/no-unreadable-iife": "deny", + "unicorn/no-useless-collection-argument": "deny", + "unicorn/no-useless-error-capture-stack-trace": "deny", + "unicorn/no-useless-fallback-in-spread": "deny", + "unicorn/no-useless-length-check": "deny", + "unicorn/no-useless-promise-resolve-reject": "deny", + "unicorn/no-useless-spread": "deny", + "unicorn/no-useless-switch-case": "deny", + "unicorn/no-useless-undefined": "deny", + "unicorn/no-zero-fractions": "deny", + "unicorn/number-literal-case": "deny", + "unicorn/numeric-separators-style": "deny", + "unicorn/prefer-add-event-listener": "deny", + "unicorn/prefer-array-find": "deny", + "unicorn/prefer-array-flat": "deny", + "unicorn/prefer-array-flat-map": "deny", + "unicorn/prefer-array-index-of": "deny", + "unicorn/prefer-array-some": "deny", + "unicorn/prefer-at": "deny", + "unicorn/prefer-bigint-literals": "deny", + "unicorn/prefer-blob-reading-methods": "deny", + "unicorn/prefer-class-fields": "deny", + "unicorn/prefer-classlist-toggle": "deny", + "unicorn/prefer-code-point": "deny", + "unicorn/prefer-date-now": "deny", + "unicorn/prefer-default-parameters": "deny", + "unicorn/prefer-dom-node-append": "deny", + "unicorn/prefer-dom-node-remove": "deny", + "unicorn/prefer-dom-node-text-content": "deny", + "unicorn/prefer-event-target": "deny", + "unicorn/prefer-global-this": "deny", + "unicorn/prefer-includes": "deny", + "unicorn/prefer-keyboard-event-key": "deny", + "unicorn/prefer-logical-operator-over-ternary": "deny", + "unicorn/prefer-math-min-max": "deny", + "unicorn/prefer-math-trunc": "deny", + "unicorn/prefer-modern-dom-apis": "deny", + "unicorn/prefer-modern-math-apis": "deny", + "unicorn/prefer-module": "deny", + "unicorn/prefer-native-coercion-functions": "deny", + "unicorn/prefer-negative-index": "deny", + "unicorn/prefer-node-protocol": "deny", + "unicorn/prefer-number-properties": "deny", + "unicorn/prefer-object-from-entries": "deny", + "unicorn/prefer-optional-catch-binding": "deny", + "unicorn/prefer-prototype-methods": "deny", + "unicorn/prefer-reflect-apply": "deny", + "unicorn/prefer-regexp-test": "deny", + "unicorn/prefer-response-static-json": "deny", + "unicorn/prefer-set-has": "deny", + "unicorn/prefer-set-size": "deny", + "unicorn/prefer-string-raw": "deny", + "unicorn/prefer-string-replace-all": "deny", + "unicorn/prefer-string-slice": "deny", + "unicorn/prefer-string-starts-ends-with": "deny", + "unicorn/prefer-string-trim-start-end": "deny", + "unicorn/prefer-structured-clone": "deny", "unicorn/prefer-ternary": "off", - "unicorn/prefer-top-level-await": "error", - "unicorn/prefer-type-error": "error", - "unicorn/relative-url-style": "error", - "unicorn/require-array-join-separator": "error", - "unicorn/require-module-attributes": "error", - "unicorn/require-module-specifiers": "error", - "unicorn/require-number-to-fixed-digits-argument": "error", - "unicorn/text-encoding-identifier-case": "error", - "unicorn/throw-new-error": "error", + "unicorn/prefer-top-level-await": "deny", + "unicorn/prefer-type-error": "deny", + "unicorn/relative-url-style": "deny", + "unicorn/require-array-join-separator": "deny", + "unicorn/require-module-attributes": "deny", + "unicorn/require-module-specifiers": "deny", + "unicorn/require-number-to-fixed-digits-argument": "deny", + "unicorn/text-encoding-identifier-case": "deny", + "unicorn/throw-new-error": "deny", +}; + +//#endregion +//#region ../rules/node.ts +const nodeRules = { + "node/global-require": "deny", + "node/handle-callback-err": "allow", + "node/no-exports-assign": "deny", + "node/no-new-require": "deny", + "node/no-path-concat": "deny", + "node/no-process-env": "deny", +}; + +//#endregion +//#region ../rules/oxc.ts +const oxcRules = { + "oxc/approx-constant": "deny", + "oxc/bad-array-method-on-arguments": "deny", + "oxc/bad-bitwise-operator": "deny", + "oxc/bad-char-at-comparison": "deny", + "oxc/bad-comparison-sequence": "deny", + "oxc/bad-min-max-func": "deny", + "oxc/bad-object-literal-comparison": "deny", + "oxc/bad-replace-all-arg": "deny", + "oxc/branches-sharing-code": "warn", + "oxc/const-comparisons": "deny", + "oxc/double-comparisons": "deny", + "oxc/erasing-op": "deny", + "oxc/misrefactored-assign-op": "deny", + "oxc/missing-throw": "deny", + "oxc/no-accumulating-spread": "deny", + "oxc/no-async-await": "allow", + "oxc/no-async-endpoint-handlers": "allow", + "oxc/no-barrel-file": ["deny", { threshold: 100 }], + "oxc/no-const-enum": "deny", + "oxc/no-map-spread": "allow", + "oxc/no-optional-chaining": "allow", + "oxc/no-rest-spread-properties": "allow", + "oxc/no-this-in-exported-function": "deny", + "oxc/number-arg-out-of-range": "deny", + "oxc/only-used-in-recursion": "deny", + "oxc/uninvoked-array-callback": "deny", +}; + +//#endregion +//#region ../rules/promise.ts +const promiseRules = { + "promise/always-return": [ + "deny", + { + ignoreAssignmentVariable: ["globalThis"], + ignoreLastCallback: false, + }, + ], + "promise/avoid-new": "deny", + "promise/catch-or-return": [ + "deny", + { + allowFinally: false, + allowThen: false, + terminationMethod: ["catch"], + }, + ], + "promise/no-callback-in-promise": [ + "deny", + { + callbacks: ["callback", "cb", "done", "next"], + exceptions: [], + timeoutsErr: false, + }, + ], + "promise/no-multiple-resolved": "deny", + "promise/no-nesting": "deny", + "promise/no-new-statics": "deny", + "promise/no-promise-in-callback": "deny", + "promise/no-return-in-finally": "deny", + "promise/no-return-wrap": ["deny", { allowReject: false }], + "promise/param-names": [ + "deny", + { + rejectPattern: "^_?reject$", + resolvePattern: "^_?resolve$", + }, + ], + "promise/prefer-await-to-callbacks": "allow", + "promise/prefer-await-to-then": ["deny", { strict: true }], + "promise/prefer-catch": "deny", + "promise/spec-only": ["deny", { allowedMethods: [] }], + "promise/valid-params": "deny", }; //#endregion @@ -1019,9 +1375,13 @@ const config = defineConfig({ rules: { ...esLintRules, ...functionalRules, + ...importRules, ...jsDocRules, - ...sonarJsRules, + ...nodeRules, + ...oxcRules, ...perfectionistRules, + ...promiseRules, + ...sonarJsRules, ...typeScriptRules, ...unicornRules, }, diff --git a/index.ts b/index.ts index cf0b2fe..ca6c80f 100644 --- a/index.ts +++ b/index.ts @@ -1,13 +1,18 @@ -import { defineConfig } from "oxlint"; import type { OxlintConfig } from "oxlint"; -import astroConfig from "./rules/astro"; -import functionalRules from "./rules/functional"; -import esLintRules from "./rules/eslint"; -import jsDocRules from "./rules/jsdoc"; -import sonarJsRules from "./rules/sonarjs"; -import perfectionistRules from "./rules/perfectionist"; -import typeScriptRules from "./rules/typescript"; -import unicornRules from "./rules/unicorn"; +import { defineConfig } from "oxlint"; + +import astroConfig from "./rules/astro.ts"; +import esLintRules from "./rules/eslint.ts"; +import functionalRules from "./rules/functional.ts"; +import importRules from "./rules/import.ts"; +import jsDocRules from "./rules/jsdoc.ts"; +import perfectionistRules from "./rules/perfectionist.ts"; +import sonarJsRules from "./rules/sonarjs.ts"; +import typeScriptRules from "./rules/typescript.ts"; +import unicornRules from "./rules/unicorn.ts"; +import nodeRules from "./rules/node.ts"; +import oxcRules from "./rules/oxc.ts"; +import promiseRules from "./rules/promise.ts"; const config: OxlintConfig = defineConfig({ categories: { @@ -36,9 +41,13 @@ const config: OxlintConfig = defineConfig({ rules: { ...esLintRules, ...functionalRules, + ...importRules, ...jsDocRules, - ...sonarJsRules, + ...nodeRules, + ...oxcRules, ...perfectionistRules, + ...promiseRules, + ...sonarJsRules, ...typeScriptRules, ...unicornRules, }, diff --git a/justfile b/justfile index 5fe63b9..b2cc575 100644 --- a/justfile +++ b/justfile @@ -48,3 +48,7 @@ clean: rm -rf bun.lock rm -rf node_modules/ rm -rfv dist/ + +# Teste les règles à la mise à jour des fichiers sources. +watch: + watchexec --watch "./rules/" just build lint-js diff --git a/package.json b/package.json index c109853..8f15a84 100644 --- a/package.json +++ b/package.json @@ -15,32 +15,29 @@ "eslint-plugin-astro": "^1.6.0", "eslint-plugin-functional": "^9.0.4", "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-perfectionist": "^5.7.0", + "eslint-plugin-perfectionist": "^5.8.0", "eslint-plugin-sonarjs": "^4.0.2", "oxlint": "^1.58.0", "oxlint-tsgolint": "^0.19.0", "typescript": "^6.0.2" }, "dependencies": { + "eslint-plugin-astro": "^1.6.0", + "eslint-plugin-functional": "^9.0.4", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-perfectionist": "^5.8.0", + "eslint-plugin-sonarjs": "^4.0.2", "globals": "^17.4.0", "oxlint": "^1.58.0", "oxlint-tsgolint": "^0.19.0" }, - "optionalDependencies": { - "eslint-plugin-astro": "^1.6.0" - }, "devDependencies": { "@arethetypeswrong/core": "^0.18.2", "@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint#c0620280e6", "@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#91d4573bff", "@types/bun": "^1.3.11", - "@types/node": "^25.5.0", - "eslint-plugin-astro": "^1.6.0", - "eslint-plugin-functional": "^9.0.4", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-perfectionist": "^5.7.0", - "eslint-plugin-sonarjs": "^4.0.2", - "knip": "^6.1.1", + "@types/node": "^25.5.2", + "knip": "^6.3.0", "prettier": "^3.8.1", "publint": "^0.3.18", "tsdown": "^0.21.7", diff --git a/rules/astro.ts b/rules/astro.ts index 60ea076..793dae7 100644 --- a/rules/astro.ts +++ b/rules/astro.ts @@ -7,70 +7,70 @@ const astroConfig: OxlintOverride = { files: ["**/*.astro"], jsPlugins: ["eslint-plugin-astro"], rules: { - "astro/jsx-a11y/alt-text": "error", - "astro/jsx-a11y/anchor-ambiguous-text": "error", - "astro/jsx-a11y/anchor-has-content": "error", - "astro/jsx-a11y/anchor-is-valid": "error", - "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", - "astro/jsx-a11y/aria-props": "error", - "astro/jsx-a11y/aria-proptypes": "error", - "astro/jsx-a11y/aria-role": "error", - "astro/jsx-a11y/aria-unsupported-elements": "error", - "astro/jsx-a11y/autocomplete-valid": "error", - "astro/jsx-a11y/click-events-have-key-events": "error", - "astro/jsx-a11y/control-has-associated-label": "error", - "astro/jsx-a11y/heading-has-content": "error", - "astro/jsx-a11y/html-has-lang": "error", - "astro/jsx-a11y/iframe-has-title": "error", - "astro/jsx-a11y/img-redundant-alt": "error", - "astro/jsx-a11y/interactive-supports-focus": "error", - "astro/jsx-a11y/label-has-associated-control": "error", - "astro/jsx-a11y/lang": "error", - "astro/jsx-a11y/media-has-caption": "error", - "astro/jsx-a11y/mouse-events-have-key-events": "error", - "astro/jsx-a11y/no-access-key": "error", - "astro/jsx-a11y/no-aria-hidden-on-focusable": "error", - "astro/jsx-a11y/no-autofocus": "error", - "astro/jsx-a11y/no-distracting-elements": "error", - "astro/jsx-a11y/no-interactive-element-to-noninteractive-role": "error", - "astro/jsx-a11y/no-noninteractive-element-interactions": "error", - "astro/jsx-a11y/no-noninteractive-element-to-interactive-role": "error", - "astro/jsx-a11y/no-noninteractive-tabindex": "error", - "astro/jsx-a11y/no-redundant-roles": "error", - "astro/jsx-a11y/no-static-element-interactions": "error", - "astro/jsx-a11y/prefer-tag-over-role": "error", - "astro/jsx-a11y/role-has-required-aria-props": "error", - "astro/jsx-a11y/role-supports-aria-props": "error", - "astro/jsx-a11y/scope": "error", - "astro/jsx-a11y/tabindex-no-positive": "error", - "astro/missing-client-only-directive-value": "error", - "astro/no-conflict-set-directives": "error", - "astro/no-deprecated-astro-canonicalurl": "error", - "astro/no-deprecated-astro-fetchcontent": "error", - "astro/no-deprecated-astro-resolve": "error", - "astro/no-deprecated-getentrybyslug": "error", - "astro/no-exports-from-components": "error", - "astro/no-set-html-directive": "error", - "astro/no-set-text-directive": "error", - "astro/no-unused-css-selector": "error", - "astro/no-unused-define-vars-in-style": "error", - "astro/prefer-class-list-directive": "error", - "astro/prefer-object-class-list": "error", + "astro/jsx-a11y/alt-text": "deny", + "astro/jsx-a11y/anchor-ambiguous-text": "deny", + "astro/jsx-a11y/anchor-has-content": "deny", + "astro/jsx-a11y/anchor-is-valid": "deny", + "astro/jsx-a11y/aria-activedescendant-has-tabindex": "deny", + "astro/jsx-a11y/aria-props": "deny", + "astro/jsx-a11y/aria-proptypes": "deny", + "astro/jsx-a11y/aria-role": "deny", + "astro/jsx-a11y/aria-unsupported-elements": "deny", + "astro/jsx-a11y/autocomplete-valid": "deny", + "astro/jsx-a11y/click-events-have-key-events": "deny", + "astro/jsx-a11y/control-has-associated-label": "deny", + "astro/jsx-a11y/heading-has-content": "deny", + "astro/jsx-a11y/html-has-lang": "deny", + "astro/jsx-a11y/iframe-has-title": "deny", + "astro/jsx-a11y/img-redundant-alt": "deny", + "astro/jsx-a11y/interactive-supports-focus": "deny", + "astro/jsx-a11y/label-has-associated-control": "deny", + "astro/jsx-a11y/lang": "deny", + "astro/jsx-a11y/media-has-caption": "deny", + "astro/jsx-a11y/mouse-events-have-key-events": "deny", + "astro/jsx-a11y/no-access-key": "deny", + "astro/jsx-a11y/no-aria-hidden-on-focusable": "deny", + "astro/jsx-a11y/no-autofocus": "deny", + "astro/jsx-a11y/no-distracting-elements": "deny", + "astro/jsx-a11y/no-interactive-element-to-noninteractive-role": "deny", + "astro/jsx-a11y/no-noninteractive-element-interactions": "deny", + "astro/jsx-a11y/no-noninteractive-element-to-interactive-role": "deny", + "astro/jsx-a11y/no-noninteractive-tabindex": "deny", + "astro/jsx-a11y/no-redundant-roles": "deny", + "astro/jsx-a11y/no-static-element-interactions": "deny", + "astro/jsx-a11y/prefer-tag-over-role": "deny", + "astro/jsx-a11y/role-has-required-aria-props": "deny", + "astro/jsx-a11y/role-supports-aria-props": "deny", + "astro/jsx-a11y/scope": "deny", + "astro/jsx-a11y/tabindex-no-positive": "deny", + "astro/missing-client-only-directive-value": "deny", + "astro/no-conflict-set-directives": "deny", + "astro/no-deprecated-astro-canonicalurl": "deny", + "astro/no-deprecated-astro-fetchcontent": "deny", + "astro/no-deprecated-astro-resolve": "deny", + "astro/no-deprecated-getentrybyslug": "deny", + "astro/no-exports-from-components": "deny", + "astro/no-set-html-directive": "deny", + "astro/no-set-text-directive": "deny", + "astro/no-unused-css-selector": "deny", + "astro/no-unused-define-vars-in-style": "deny", + "astro/prefer-class-list-directive": "deny", + "astro/prefer-object-class-list": "deny", "astro/prefer-split-class-list": [ - "error", + "deny", { splitLiteral: false, }, ], "astro/sort-attributes": [ - "error", + "deny", { ignoreCase: false, order: "asc", type: "alphabetical", }, ], - "astro/valid-compile": "error", + "astro/valid-compile": "deny", }, }; diff --git a/rules/eslint.ts b/rules/eslint.ts index 1dda2ad..c9f344a 100644 --- a/rules/eslint.ts +++ b/rules/eslint.ts @@ -52,7 +52,17 @@ const esLintRules: DummyRuleMap = { }, ], "eslint/guard-for-in": "deny", - "eslint/id-length": "deny", + "eslint/id-length": [ + "deny", + { + checkGeneric: true, + exceptionPatterns: [], + exceptions: ["_"], + max: 100_000_000, + min: 2, + properties: "always", + }, + ], "eslint/init-declarations": ["deny", "always"], "eslint/new-cap": [ "deny", @@ -266,6 +276,7 @@ const esLintRules: DummyRuleMap = { "deny", { args: "all", + argsIgnorePattern: "^_", caughtErrors: "all", fix: { ignoreClassWithStaticInitBlock: false, diff --git a/rules/functional.ts b/rules/functional.ts index 0535549..95d179c 100644 --- a/rules/functional.ts +++ b/rules/functional.ts @@ -1,12 +1,12 @@ import type { DummyRuleMap } from "oxlint"; const functionalRules: DummyRuleMap = { - "functional/immutable-data": "error", - "functional/no-let": "error", - "functional/no-throw-statements": "error", - "functional/no-try-statements": "error", - "functional/prefer-property-signatures": "error", - "functional/readonly-type": ["error", "generic"], + "functional/immutable-data": "deny", + "functional/no-let": "deny", + "functional/no-throw-statements": "deny", + "functional/no-try-statements": "deny", + "functional/prefer-property-signatures": "deny", + "functional/readonly-type": ["deny", "generic"], }; export default functionalRules; diff --git a/rules/import.ts b/rules/import.ts new file mode 100644 index 0000000..b35d6df --- /dev/null +++ b/rules/import.ts @@ -0,0 +1,101 @@ +import type { DummyRuleMap } from "oxlint"; + +const importRules: DummyRuleMap = { + "import/consistent-type-specifier-style": ["deny", "prefer-top-level"], + "import/default": "deny", + "import/export": "deny", + "import/exports-last": "deny", + "import/extensions": [ + "deny", + "always", + { + checkTypeImports: true, + ignorePackages: true, + }, + ], + "import/first": ["deny", "absolute-first"], + "import/group-exports": "deny", + "import/max-dependencies": "allow", + "import/named": "deny", + "import/namespace": [ + "deny", + { + allowComputed: false, + }, + ], + "import/no-absolute-path": [ + "deny", + { + amd: false, + commonjs: true, + esmodule: true, + }, + ], + "import/no-amd": "deny", + "import/no-anonymous-default-export": [ + "deny", + { + allowAnonymousClass: false, + allowAnonymousFunction: false, + allowArray: false, + allowArrowFunction: false, + allowCallExpression: false, + allowLiteral: false, + allowNew: false, + allowObject: false, + }, + ], + "import/no-commonjs": [ + "deny", + { + allowConditionalRequire: false, + allowPrimitiveModules: false, + allowRequire: false, + }, + ], + "import/no-cycle": [ + "deny", + { + allowUnsafeDynamicCyclicDependency: false, + ignoreExternal: false, + ignoreTypes: true, + maxDepth: 4_294_967_295, + }, + ], + // J'aime les exports par défaut. + "import/no-default-export": "allow", + "import/no-duplicates": [ + "deny", + { + considerQueryString: true, + preferInline: false, + }, + ], + "import/no-dynamic-require": [ + "deny", + { + esmodule: true, + }, + ], + "import/no-empty-named-blocks": "deny", + "import/no-mutable-exports": "deny", + "import/no-named-as-default": "deny", + "import/no-named-as-default-member": "deny", + "import/no-named-default": "deny", + "import/no-named-export": "deny", + "import/no-namespace": "deny", + "import/no-nodejs-modules": "allow", + "import/no-relative-parent-imports": "allow", + "import/no-self-import": "deny", + "import/no-unassigned-import": "deny", + "import/no-webpack-loader-syntax": "deny", + "import/prefer-default-export": [ + "deny", + { + target: "single", + }, + ], + "import/unambiguous": "deny", +}; + +export default importRules; diff --git a/rules/jsdoc.ts b/rules/jsdoc.ts index 937112c..d4b4071 100644 --- a/rules/jsdoc.ts +++ b/rules/jsdoc.ts @@ -7,20 +7,50 @@ const jsDocRules: DummyRuleMap = { "warn", { definedTags: ["link"], + typed: true, }, ], "jsdoc/empty-tags": "warn", "jsdoc/implements-on-classes": "warn", - "jsdoc/no-defaults": "warn", - "jsdoc/require-param": "warn", + "jsdoc/no-defaults": ["warn", { noOptionalParamNames: true }], + "jsdoc/require-param": [ + "warn", + { + checkConstructors: true, + checkDestructured: true, + checkDestructuredRoots: true, + checkGetters: true, + checkRestProperty: true, + checkSetters: true, + }, + ], "jsdoc/require-param-description": "warn", "jsdoc/require-param-name": "warn", + // Pris en charge par les annotations de type TypeScript. + "jsdoc/require-param-type": "allow", "jsdoc/require-property": "warn", "jsdoc/require-property-description": "warn", "jsdoc/require-property-name": "warn", - "jsdoc/require-returns": "warn", + // Pris en charge par les annotations de type TypeScript. + "jsdoc/require-property-type": "allow", + "jsdoc/require-returns": [ + "warn", + { + checkConstructors: true, + checkGetters: true, + forceRequireReturn: true, + forceReturnsWithAsync: true, + }, + ], "jsdoc/require-returns-description": "warn", - "jsdoc/require-yields": "warn", + "jsdoc/require-returns-type": "warn", + "jsdoc/require-yields": [ + "warn", + { + forceRequireYields: false, + withGeneratorTag: false, + }, + ], }; export default jsDocRules; diff --git a/rules/node.ts b/rules/node.ts new file mode 100644 index 0000000..c283db1 --- /dev/null +++ b/rules/node.ts @@ -0,0 +1,12 @@ +import type { DummyRuleMap } from "oxlint"; + +const nodeRules: DummyRuleMap = { + "node/global-require": "deny", + "node/handle-callback-err": "allow", + "node/no-exports-assign": "deny", + "node/no-new-require": "deny", + "node/no-path-concat": "deny", + "node/no-process-env": "deny", +}; + +export default nodeRules; diff --git a/rules/old-eslint.ts b/rules/old-eslint.ts index 672d087..543371e 100644 --- a/rules/old-eslint.ts +++ b/rules/old-eslint.ts @@ -2,86 +2,86 @@ import type { DummyRuleMap } from "oxlint"; const esLintRules: DummyRuleMap = { "array-callback-return": [ - "error", + "deny", { allowVoid: true, checkForEach: true, }, ], - "for-direction": "error", + "for-direction": "deny", "max-params": [ - "error", + "deny", { max: 3, }, ], - "no-array-constructor": "error", - "no-async-promise-executor": "error", - "no-case-declarations": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-constant-binary-expression": "error", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-else-if": "error", - "no-duplicate-case": "error", + "no-array-constructor": "deny", + "no-async-promise-executor": "deny", + "no-case-declarations": "deny", + "no-compare-neg-zero": "deny", + "no-cond-assign": "deny", + "no-constant-binary-expression": "deny", + "no-constant-condition": "deny", + "no-control-regex": "deny", + "no-debugger": "deny", + "no-delete-var": "deny", + "no-dupe-else-if": "deny", + "no-duplicate-case": "deny", "no-duplicate-imports": [ - "error", + "deny", { allowSeparateTypeImports: true, }, ], - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-empty-static-block": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-fallthrough": "error", - "no-global-assign": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-loss-of-precision": "error", - "no-misleading-character-class": "error", - "no-nonoctal-decimal-escape": "error", - "no-param-reassign": "error", - "no-prototype-builtins": "error", - "no-regex-spaces": "error", - "no-self-assign": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-unassigned-vars": "error", - "no-unexpected-multiline": "error", + "no-empty": "deny", + "no-empty-character-class": "deny", + "no-empty-function": "deny", + "no-empty-pattern": "deny", + "no-empty-static-block": "deny", + "no-ex-assign": "deny", + "no-extra-boolean-cast": "deny", + "no-fallthrough": "deny", + "no-global-assign": "deny", + "no-invalid-regexp": "deny", + "no-irregular-whitespace": "deny", + "no-loss-of-precision": "deny", + "no-misleading-character-class": "deny", + "no-nonoctal-decimal-escape": "deny", + "no-param-reassign": "deny", + "no-prototype-builtins": "deny", + "no-regex-spaces": "deny", + "no-self-assign": "deny", + "no-shadow-restricted-names": "deny", + "no-sparse-arrays": "deny", + "no-unassigned-vars": "deny", + "no-unexpected-multiline": "deny", "no-unneeded-ternary": [ - "error", + "deny", { defaultAssignment: false, }, ], - "no-unsafe-finally": "error", - "no-unsafe-optional-chaining": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-private-class-members": "error", - "no-unused-vars": "error", - "no-useless-backreference": "error", - "no-useless-catch": "error", - "no-useless-constructor": "error", - "no-useless-escape": "error", - "no-var": "error", - "prefer-const": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "preserve-caught-error": "error", - "require-yield": "error", + "no-unsafe-finally": "deny", + "no-unsafe-optional-chaining": "deny", + "no-unused-expressions": "deny", + "no-unused-labels": "deny", + "no-unused-private-class-members": "deny", + "no-unused-vars": "deny", + "no-useless-backreference": "deny", + "no-useless-catch": "deny", + "no-useless-constructor": "deny", + "no-useless-escape": "deny", + "no-var": "deny", + "prefer-const": "deny", + "prefer-rest-params": "deny", + "prefer-spread": "deny", + "preserve-caught-error": "deny", + "require-yield": "deny", // Rentre en conflit avec perfectionnist. "sort-imports": "off", - "use-isnan": "error", - "valid-typeof": "error", - yoda: ["error", "never"], + "use-isnan": "deny", + "valid-typeof": "deny", + yoda: ["deny", "never"], }; export default esLintRules; diff --git a/rules/oxc.ts b/rules/oxc.ts new file mode 100644 index 0000000..1a28ae9 --- /dev/null +++ b/rules/oxc.ts @@ -0,0 +1,35 @@ +import type { DummyRuleMap } from "oxlint"; + +const oxcRules: DummyRuleMap = { + "oxc/approx-constant": "deny", + "oxc/bad-array-method-on-arguments": "deny", + "oxc/bad-bitwise-operator": "deny", + "oxc/bad-char-at-comparison": "deny", + "oxc/bad-comparison-sequence": "deny", + "oxc/bad-min-max-func": "deny", + "oxc/bad-object-literal-comparison": "deny", + "oxc/bad-replace-all-arg": "deny", + "oxc/branches-sharing-code": "warn", + "oxc/const-comparisons": "deny", + "oxc/double-comparisons": "deny", + "oxc/erasing-op": "deny", + "oxc/misrefactored-assign-op": "deny", + "oxc/missing-throw": "deny", + "oxc/no-accumulating-spread": "deny", + // This rule should generally not be used in modern JavaScript/TypeScript codebases without good reason. + "oxc/no-async-await": "allow", + "oxc/no-async-endpoint-handlers": "allow", + "oxc/no-barrel-file": ["deny", { threshold: 100 }], + "oxc/no-const-enum": "deny", + "oxc/no-map-spread": "allow", + // In most codebases at this point, you should not use this rule. + "oxc/no-optional-chaining": "allow", + // In most codebases at this point, you should not use this rule. + "oxc/no-rest-spread-properties": "allow", + "oxc/no-this-in-exported-function": "deny", + "oxc/number-arg-out-of-range": "deny", + "oxc/only-used-in-recursion": "deny", + "oxc/uninvoked-array-callback": "deny", +}; + +export default oxcRules; diff --git a/rules/perfectionist.ts b/rules/perfectionist.ts index 4641225..57bd57d 100644 --- a/rules/perfectionist.ts +++ b/rules/perfectionist.ts @@ -2,147 +2,147 @@ import type { DummyRuleMap } from "oxlint"; const perfectionistRules: DummyRuleMap = { "perfectionist/sort-array-includes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-classes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-decorators": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-enums": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-export-attributes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-exports": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-heritage-clauses": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-import-attributes": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-interfaces": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-intersection-types": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-jsx-props": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-maps": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-modules": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-named-exports": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-named-imports": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-object-types": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-objects": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-sets": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-switch-case": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-union-types": [ - "error", + "deny", { order: "asc", type: "natural", }, ], "perfectionist/sort-variable-declarations": [ - "error", + "deny", { order: "asc", type: "natural", diff --git a/rules/promise.ts b/rules/promise.ts new file mode 100644 index 0000000..aff8825 --- /dev/null +++ b/rules/promise.ts @@ -0,0 +1,64 @@ +import type { DummyRuleMap } from "oxlint"; + +const promiseRules: DummyRuleMap = { + "promise/always-return": [ + "deny", + { + ignoreAssignmentVariable: ["globalThis"], + ignoreLastCallback: false, + }, + ], + "promise/avoid-new": "deny", + "promise/catch-or-return": [ + "deny", + { + allowFinally: false, + allowThen: false, + terminationMethod: ["catch"], + }, + ], + "promise/no-callback-in-promise": [ + "deny", + { + callbacks: ["callback", "cb", "done", "next"], + exceptions: [], + timeoutsErr: false, + }, + ], + "promise/no-multiple-resolved": "deny", + "promise/no-nesting": "deny", + "promise/no-new-statics": "deny", + "promise/no-promise-in-callback": "deny", + "promise/no-return-in-finally": "deny", + "promise/no-return-wrap": [ + "deny", + { + allowReject: false, + }, + ], + "promise/param-names": [ + "deny", + { + rejectPattern: "^_?reject$", + resolvePattern: "^_?resolve$", + }, + ], + // Émet de faux positifs avec Effect. + "promise/prefer-await-to-callbacks": "allow", + "promise/prefer-await-to-then": [ + "deny", + { + strict: true, + }, + ], + "promise/prefer-catch": "deny", + "promise/spec-only": [ + "deny", + { + allowedMethods: [], + }, + ], + "promise/valid-params": "deny", +}; + +export default promiseRules; diff --git a/rules/sonarjs.ts b/rules/sonarjs.ts index 4bcf764..e1c7867 100644 --- a/rules/sonarjs.ts +++ b/rules/sonarjs.ts @@ -1,216 +1,216 @@ import type { DummyRuleMap } from "oxlint"; const sonarJsRules: DummyRuleMap = { - "sonarjs/anchor-precedence": "error", - "sonarjs/argument-type": "error", - "sonarjs/arguments-order": "error", - "sonarjs/arguments-usage": "error", - "sonarjs/array-callback-without-return": "error", - "sonarjs/assertions-in-tests": "error", - "sonarjs/aws-apigateway-public-api": "error", - "sonarjs/aws-ec2-rds-dms-public": "error", - "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", - "sonarjs/aws-efs-unencrypted": "error", - "sonarjs/aws-iam-all-privileges": "error", - "sonarjs/aws-iam-privilege-escalation": "error", - "sonarjs/aws-iam-public-access": "error", - "sonarjs/aws-opensearchservice-domain": "error", - "sonarjs/aws-rds-unencrypted-databases": "error", - "sonarjs/aws-restricted-ip-admin-access": "error", - "sonarjs/aws-s3-bucket-granted-access": "error", - "sonarjs/aws-s3-bucket-insecure-http": "error", - "sonarjs/aws-s3-bucket-public-access": "error", - "sonarjs/aws-s3-bucket-versioning": "error", - "sonarjs/aws-sagemaker-unencrypted-notebook": "error", - "sonarjs/aws-sns-unencrypted-topics": "error", - "sonarjs/aws-sqs-unencrypted-queue": "error", - "sonarjs/bitwise-operators": "error", - "sonarjs/block-scoped-var": "error", - "sonarjs/call-argument-line": "error", - "sonarjs/chai-determinate-assertion": "error", - "sonarjs/class-name": "error", - "sonarjs/code-eval": "error", - "sonarjs/cognitive-complexity": "error", - "sonarjs/comma-or-logical-or-case": "error", - "sonarjs/concise-regex": "error", - "sonarjs/confidential-information-logging": "error", - "sonarjs/constructor-for-side-effects": "error", - "sonarjs/content-length": "error", - "sonarjs/content-security-policy": "error", - "sonarjs/cookie-no-httponly": "error", - "sonarjs/cors": "error", - "sonarjs/csrf": "error", - "sonarjs/deprecation": "error", - "sonarjs/different-types-comparison": "error", - "sonarjs/disabled-auto-escaping": "error", - "sonarjs/disabled-resource-integrity": "error", - "sonarjs/disabled-timeout": "error", - "sonarjs/duplicates-in-character-class": "error", - "sonarjs/dynamically-constructed-templates": "error", - "sonarjs/empty-string-repetition": "error", - "sonarjs/encryption-secure-mode": "error", - "sonarjs/existing-groups": "error", - "sonarjs/file-permissions": "error", - "sonarjs/file-uploads": "error", - "sonarjs/fixme-tag": "error", - "sonarjs/for-loop-increment-sign": "error", - "sonarjs/frame-ancestors": "error", - "sonarjs/function-inside-loop": "error", - "sonarjs/function-return-type": "error", - "sonarjs/future-reserved-words": "error", - "sonarjs/generator-without-yield": "error", - "sonarjs/hardcoded-secret-signatures": "error", - "sonarjs/hashing": "error", - "sonarjs/hidden-files": "error", - "sonarjs/in-operator-type-error": "error", - "sonarjs/inconsistent-function-call": "error", - "sonarjs/index-of-compare-to-positive-number": "error", - "sonarjs/insecure-cookie": "error", - "sonarjs/insecure-jwt-token": "error", - "sonarjs/inverted-assertion-arguments": "error", - "sonarjs/jsx-no-leaked-render": "error", - "sonarjs/label-position": "error", - "sonarjs/link-with-target-blank": "error", - "sonarjs/max-switch-cases": "error", - "sonarjs/misplaced-loop-counter": "error", - "sonarjs/new-operator-misuse": "error", - "sonarjs/no-all-duplicated-branches": "error", - "sonarjs/no-alphabetical-sort": "error", - "sonarjs/no-angular-bypass-sanitization": "error", - "sonarjs/no-array-delete": "error", - "sonarjs/no-associative-arrays": "error", - "sonarjs/no-async-constructor": "error", - "sonarjs/no-case-label-in-switch": "error", - "sonarjs/no-clear-text-protocols": "error", - "sonarjs/no-code-after-done": "error", - "sonarjs/no-collapsible-if": "error", - "sonarjs/no-collection-size-mischeck": "error", - "sonarjs/no-commented-code": "error", - "sonarjs/no-control-regex": "error", - "sonarjs/no-dead-store": "error", - "sonarjs/no-delete-var": "error", - "sonarjs/no-duplicate-in-composite": "error", - "sonarjs/no-duplicate-string": "error", - "sonarjs/no-duplicated-branches": "error", - "sonarjs/no-element-overwrite": "error", - "sonarjs/no-empty-after-reluctant": "error", - "sonarjs/no-empty-alternatives": "error", - "sonarjs/no-empty-character-class": "error", - "sonarjs/no-empty-collection": "error", - "sonarjs/no-empty-group": "error", - "sonarjs/no-empty-test-file": "error", - "sonarjs/no-equals-in-for-termination": "error", - "sonarjs/no-exclusive-tests": "error", - "sonarjs/no-extra-arguments": "error", - "sonarjs/no-fallthrough": "error", - "sonarjs/no-global-this": "error", - "sonarjs/no-globals-shadowing": "error", - "sonarjs/no-gratuitous-expressions": "error", - "sonarjs/no-hardcoded-ip": "error", - "sonarjs/no-hardcoded-passwords": "error", - "sonarjs/no-hardcoded-secrets": "error", - "sonarjs/no-hook-setter-in-body": "error", - "sonarjs/no-identical-conditions": "error", - "sonarjs/no-identical-expressions": "error", - "sonarjs/no-identical-functions": "error", - "sonarjs/no-ignored-exceptions": "error", - "sonarjs/no-ignored-return": "error", - "sonarjs/no-implicit-global": "error", - "sonarjs/no-in-misuse": "error", - "sonarjs/no-incomplete-assertions": "error", - "sonarjs/no-inconsistent-returns": "error", - "sonarjs/no-internal-api-use": "error", - "sonarjs/no-intrusive-permissions": "error", - "sonarjs/no-invalid-regexp": "error", - "sonarjs/no-invariant-returns": "error", - "sonarjs/no-inverted-boolean-check": "error", - "sonarjs/no-ip-forward": "error", - "sonarjs/no-labels": "error", - "sonarjs/no-literal-call": "error", - "sonarjs/no-mime-sniff": "error", - "sonarjs/no-misleading-array-reverse": "error", - "sonarjs/no-misleading-character-class": "error", - "sonarjs/no-mixed-content": "error", - "sonarjs/no-nested-assignment": "error", - "sonarjs/no-nested-conditional": "error", - "sonarjs/no-nested-functions": "error", - "sonarjs/no-nested-switch": "error", - "sonarjs/no-nested-template-literals": "error", - "sonarjs/no-os-command-from-path": "error", - "sonarjs/no-parameter-reassignment": "error", - "sonarjs/no-primitive-wrappers": "error", - "sonarjs/no-redundant-assignments": "error", - "sonarjs/no-redundant-boolean": "error", - "sonarjs/no-redundant-jump": "error", - "sonarjs/no-redundant-optional": "error", - "sonarjs/no-referrer-policy": "error", - "sonarjs/no-regex-spaces": "error", - "sonarjs/no-same-argument-assert": "error", - "sonarjs/no-same-line-conditional": "error", - "sonarjs/no-selector-parameter": "error", - "sonarjs/no-session-cookies-on-static-assets": "error", - "sonarjs/no-skipped-tests": "error", - "sonarjs/no-small-switch": "error", - "sonarjs/no-table-as-layout": "error", - "sonarjs/no-try-promise": "error", - "sonarjs/no-undefined-argument": "error", - "sonarjs/no-unenclosed-multiline-block": "error", - "sonarjs/no-uniq-key": "error", - "sonarjs/no-unsafe-unzip": "error", - "sonarjs/no-unthrown-error": "error", - "sonarjs/no-unused-collection": "error", - "sonarjs/no-unused-vars": "error", - "sonarjs/no-use-of-empty-return-value": "error", - "sonarjs/no-useless-catch": "error", - "sonarjs/no-useless-increment": "error", - "sonarjs/no-useless-intersection": "error", - "sonarjs/no-useless-react-setstate": "error", - "sonarjs/no-weak-cipher": "error", - "sonarjs/no-weak-keys": "error", - "sonarjs/non-existent-operator": "error", - "sonarjs/null-dereference": "error", - "sonarjs/object-alt-content": "error", - "sonarjs/os-command": "error", - "sonarjs/post-message": "error", - "sonarjs/prefer-default-last": "error", - "sonarjs/prefer-immediate-return": "error", - "sonarjs/prefer-promise-shorthand": "error", - "sonarjs/prefer-read-only-props": "error", - "sonarjs/prefer-regexp-exec": "error", - "sonarjs/prefer-single-boolean-return": "error", - "sonarjs/prefer-type-guard": "error", - "sonarjs/prefer-while": "error", - "sonarjs/production-debug": "error", - "sonarjs/pseudo-random": "error", - "sonarjs/public-static-readonly": "error", - "sonarjs/publicly-writable-directories": "error", - "sonarjs/reduce-initial-value": "error", - "sonarjs/redundant-type-aliases": "error", - "sonarjs/regex-complexity": "error", - "sonarjs/review-blockchain-mnemonic": "error", - "sonarjs/session-regeneration": "error", - "sonarjs/single-char-in-character-classes": "error", - "sonarjs/single-character-alternation": "error", - "sonarjs/slow-regex": "error", - "sonarjs/sql-queries": "error", - "sonarjs/stable-tests": "error", - "sonarjs/stateful-regex": "error", - "sonarjs/strict-transport-security": "error", - "sonarjs/table-header": "error", - "sonarjs/table-header-reference": "error", - "sonarjs/test-check-exception": "error", - "sonarjs/todo-tag": "error", - "sonarjs/unused-import": "error", - "sonarjs/unused-named-groups": "error", - "sonarjs/unverified-certificate": "error", - "sonarjs/unverified-hostname": "error", - "sonarjs/updated-const-var": "error", - "sonarjs/updated-loop-counter": "error", - "sonarjs/use-type-alias": "error", - "sonarjs/void-use": "error", - "sonarjs/weak-ssl": "error", - "sonarjs/x-powered-by": "error", - "sonarjs/xml-parser-xxe": "error", + "sonarjs/anchor-precedence": "deny", + "sonarjs/argument-type": "deny", + "sonarjs/arguments-order": "deny", + "sonarjs/arguments-usage": "deny", + "sonarjs/array-callback-without-return": "deny", + "sonarjs/assertions-in-tests": "deny", + "sonarjs/aws-apigateway-public-api": "deny", + "sonarjs/aws-ec2-rds-dms-public": "deny", + "sonarjs/aws-ec2-unencrypted-ebs-volume": "deny", + "sonarjs/aws-efs-unencrypted": "deny", + "sonarjs/aws-iam-all-privileges": "deny", + "sonarjs/aws-iam-privilege-escalation": "deny", + "sonarjs/aws-iam-public-access": "deny", + "sonarjs/aws-opensearchservice-domain": "deny", + "sonarjs/aws-rds-unencrypted-databases": "deny", + "sonarjs/aws-restricted-ip-admin-access": "deny", + "sonarjs/aws-s3-bucket-granted-access": "deny", + "sonarjs/aws-s3-bucket-insecure-http": "deny", + "sonarjs/aws-s3-bucket-public-access": "deny", + "sonarjs/aws-s3-bucket-versioning": "deny", + "sonarjs/aws-sagemaker-unencrypted-notebook": "deny", + "sonarjs/aws-sns-unencrypted-topics": "deny", + "sonarjs/aws-sqs-unencrypted-queue": "deny", + "sonarjs/bitwise-operators": "deny", + "sonarjs/block-scoped-var": "deny", + "sonarjs/call-argument-line": "deny", + "sonarjs/chai-determinate-assertion": "deny", + "sonarjs/class-name": "deny", + "sonarjs/code-eval": "deny", + "sonarjs/cognitive-complexity": "deny", + "sonarjs/comma-or-logical-or-case": "deny", + "sonarjs/concise-regex": "deny", + "sonarjs/confidential-information-logging": "deny", + "sonarjs/constructor-for-side-effects": "deny", + "sonarjs/content-length": "deny", + "sonarjs/content-security-policy": "deny", + "sonarjs/cookie-no-httponly": "deny", + "sonarjs/cors": "deny", + "sonarjs/csrf": "deny", + "sonarjs/deprecation": "deny", + "sonarjs/different-types-comparison": "deny", + "sonarjs/disabled-auto-escaping": "deny", + "sonarjs/disabled-resource-integrity": "deny", + "sonarjs/disabled-timeout": "deny", + "sonarjs/duplicates-in-character-class": "deny", + "sonarjs/dynamically-constructed-templates": "deny", + "sonarjs/empty-string-repetition": "deny", + "sonarjs/encryption-secure-mode": "deny", + "sonarjs/existing-groups": "deny", + "sonarjs/file-permissions": "deny", + "sonarjs/file-uploads": "deny", + "sonarjs/fixme-tag": "deny", + "sonarjs/for-loop-increment-sign": "deny", + "sonarjs/frame-ancestors": "deny", + "sonarjs/function-inside-loop": "deny", + "sonarjs/function-return-type": "deny", + "sonarjs/future-reserved-words": "deny", + "sonarjs/generator-without-yield": "deny", + "sonarjs/hardcoded-secret-signatures": "deny", + "sonarjs/hashing": "deny", + "sonarjs/hidden-files": "deny", + "sonarjs/in-operator-type-error": "deny", + "sonarjs/inconsistent-function-call": "deny", + "sonarjs/index-of-compare-to-positive-number": "deny", + "sonarjs/insecure-cookie": "deny", + "sonarjs/insecure-jwt-token": "deny", + "sonarjs/inverted-assertion-arguments": "deny", + "sonarjs/jsx-no-leaked-render": "deny", + "sonarjs/label-position": "deny", + "sonarjs/link-with-target-blank": "deny", + "sonarjs/max-switch-cases": "deny", + "sonarjs/misplaced-loop-counter": "deny", + "sonarjs/new-operator-misuse": "deny", + "sonarjs/no-all-duplicated-branches": "deny", + "sonarjs/no-alphabetical-sort": "deny", + "sonarjs/no-angular-bypass-sanitization": "deny", + "sonarjs/no-array-delete": "deny", + "sonarjs/no-associative-arrays": "deny", + "sonarjs/no-async-constructor": "deny", + "sonarjs/no-case-label-in-switch": "deny", + "sonarjs/no-clear-text-protocols": "deny", + "sonarjs/no-code-after-done": "deny", + "sonarjs/no-collapsible-if": "deny", + "sonarjs/no-collection-size-mischeck": "deny", + "sonarjs/no-commented-code": "deny", + "sonarjs/no-control-regex": "deny", + "sonarjs/no-dead-store": "deny", + "sonarjs/no-delete-var": "deny", + "sonarjs/no-duplicate-in-composite": "deny", + "sonarjs/no-duplicate-string": "deny", + "sonarjs/no-duplicated-branches": "deny", + "sonarjs/no-element-overwrite": "deny", + "sonarjs/no-empty-after-reluctant": "deny", + "sonarjs/no-empty-alternatives": "deny", + "sonarjs/no-empty-character-class": "deny", + "sonarjs/no-empty-collection": "deny", + "sonarjs/no-empty-group": "deny", + "sonarjs/no-empty-test-file": "deny", + "sonarjs/no-equals-in-for-termination": "deny", + "sonarjs/no-exclusive-tests": "deny", + "sonarjs/no-extra-arguments": "deny", + "sonarjs/no-fallthrough": "deny", + "sonarjs/no-global-this": "deny", + "sonarjs/no-globals-shadowing": "deny", + "sonarjs/no-gratuitous-expressions": "deny", + "sonarjs/no-hardcoded-ip": "deny", + "sonarjs/no-hardcoded-passwords": "deny", + "sonarjs/no-hardcoded-secrets": "deny", + "sonarjs/no-hook-setter-in-body": "deny", + "sonarjs/no-identical-conditions": "deny", + "sonarjs/no-identical-expressions": "deny", + "sonarjs/no-identical-functions": "deny", + "sonarjs/no-ignored-exceptions": "deny", + "sonarjs/no-ignored-return": "deny", + "sonarjs/no-implicit-global": "deny", + "sonarjs/no-in-misuse": "deny", + "sonarjs/no-incomplete-assertions": "deny", + "sonarjs/no-inconsistent-returns": "deny", + "sonarjs/no-internal-api-use": "deny", + "sonarjs/no-intrusive-permissions": "deny", + "sonarjs/no-invalid-regexp": "deny", + "sonarjs/no-invariant-returns": "deny", + "sonarjs/no-inverted-boolean-check": "deny", + "sonarjs/no-ip-forward": "deny", + "sonarjs/no-labels": "deny", + "sonarjs/no-literal-call": "deny", + "sonarjs/no-mime-sniff": "deny", + "sonarjs/no-misleading-array-reverse": "deny", + "sonarjs/no-misleading-character-class": "deny", + "sonarjs/no-mixed-content": "deny", + "sonarjs/no-nested-assignment": "deny", + "sonarjs/no-nested-conditional": "deny", + "sonarjs/no-nested-functions": "deny", + "sonarjs/no-nested-switch": "deny", + "sonarjs/no-nested-template-literals": "deny", + "sonarjs/no-os-command-from-path": "deny", + "sonarjs/no-parameter-reassignment": "deny", + "sonarjs/no-primitive-wrappers": "deny", + "sonarjs/no-redundant-assignments": "deny", + "sonarjs/no-redundant-boolean": "deny", + "sonarjs/no-redundant-jump": "deny", + "sonarjs/no-redundant-optional": "deny", + "sonarjs/no-referrer-policy": "deny", + "sonarjs/no-regex-spaces": "deny", + "sonarjs/no-same-argument-assert": "deny", + "sonarjs/no-same-line-conditional": "deny", + "sonarjs/no-selector-parameter": "deny", + "sonarjs/no-session-cookies-on-static-assets": "deny", + "sonarjs/no-skipped-tests": "deny", + "sonarjs/no-small-switch": "deny", + "sonarjs/no-table-as-layout": "deny", + "sonarjs/no-try-promise": "deny", + "sonarjs/no-undefined-argument": "deny", + "sonarjs/no-unenclosed-multiline-block": "deny", + "sonarjs/no-uniq-key": "deny", + "sonarjs/no-unsafe-unzip": "deny", + "sonarjs/no-unthrown-error": "deny", + "sonarjs/no-unused-collection": "deny", + "sonarjs/no-unused-vars": "deny", + "sonarjs/no-use-of-empty-return-value": "deny", + "sonarjs/no-useless-catch": "deny", + "sonarjs/no-useless-increment": "deny", + "sonarjs/no-useless-intersection": "deny", + "sonarjs/no-useless-react-setstate": "deny", + "sonarjs/no-weak-cipher": "deny", + "sonarjs/no-weak-keys": "deny", + "sonarjs/non-existent-operator": "deny", + "sonarjs/null-dereference": "deny", + "sonarjs/object-alt-content": "deny", + "sonarjs/os-command": "deny", + "sonarjs/post-message": "deny", + "sonarjs/prefer-default-last": "deny", + "sonarjs/prefer-immediate-return": "deny", + "sonarjs/prefer-promise-shorthand": "deny", + "sonarjs/prefer-read-only-props": "deny", + "sonarjs/prefer-regexp-exec": "deny", + "sonarjs/prefer-single-boolean-return": "deny", + "sonarjs/prefer-type-guard": "deny", + "sonarjs/prefer-while": "deny", + "sonarjs/production-debug": "deny", + "sonarjs/pseudo-random": "deny", + "sonarjs/public-static-readonly": "deny", + "sonarjs/publicly-writable-directories": "deny", + "sonarjs/reduce-initial-value": "deny", + "sonarjs/redundant-type-aliases": "deny", + "sonarjs/regex-complexity": "deny", + "sonarjs/review-blockchain-mnemonic": "deny", + "sonarjs/session-regeneration": "deny", + "sonarjs/single-char-in-character-classes": "deny", + "sonarjs/single-character-alternation": "deny", + "sonarjs/slow-regex": "deny", + "sonarjs/sql-queries": "deny", + "sonarjs/stable-tests": "deny", + "sonarjs/stateful-regex": "deny", + "sonarjs/strict-transport-security": "deny", + "sonarjs/table-header": "deny", + "sonarjs/table-header-reference": "deny", + "sonarjs/test-check-exception": "deny", + "sonarjs/todo-tag": "deny", + "sonarjs/unused-import": "deny", + "sonarjs/unused-named-groups": "deny", + "sonarjs/unverified-certificate": "deny", + "sonarjs/unverified-hostname": "deny", + "sonarjs/updated-const-var": "deny", + "sonarjs/updated-loop-counter": "deny", + "sonarjs/use-type-alias": "deny", + "sonarjs/void-use": "deny", + "sonarjs/weak-ssl": "deny", + "sonarjs/x-powered-by": "deny", + "sonarjs/xml-parser-xxe": "deny", }; export default sonarJsRules; diff --git a/rules/typescript.ts b/rules/typescript.ts index 2784635..448d04e 100644 --- a/rules/typescript.ts +++ b/rules/typescript.ts @@ -1,94 +1,250 @@ import type { DummyRuleMap } from "oxlint"; +/** Longueur minimale de la description accompagnat une directive (p. ex. `@ts-expect-error`). */ +const MIN_DIRECTIVE_DESCRIPTION_LENGTH = 10; + const typeScriptRules: DummyRuleMap = { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": [ - "error", + "typescript/adjacent-overload-signatures": "deny", + "typescript/array-type": [ + "deny", { default: "generic", readonly: "generic", }, ], - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/ban-ts-comment": [ - "error", + "typescript/await-thenable": "deny", + "typescript/ban-ts-comment": [ + "deny", { - minimumDescriptionLength: 10, + minimumDescriptionLength: MIN_DIRECTIVE_DESCRIPTION_LENGTH, + "ts-check": false, + "ts-expect-error": "allow-with-description", + "ts-ignore": true, + "ts-nocheck": true, }, ], - "@typescript-eslint/ban-tslint-comment": "error", - "@typescript-eslint/class-literal-property-style": "error", - "@typescript-eslint/consistent-generic-constructors": "error", - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/no-array-delete": "error", - "@typescript-eslint/no-base-to-string": "error", - "@typescript-eslint/no-confusing-non-null-assertion": "error", - "@typescript-eslint/no-confusing-void-expression": "error", - "@typescript-eslint/no-deprecated": "error", - "@typescript-eslint/no-duplicate-enum-values": "error", - "@typescript-eslint/no-duplicate-type-constituents": "error", - "@typescript-eslint/no-dynamic-delete": "error", - "@typescript-eslint/no-empty-object-type": "error", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-extraneous-class": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-inferrable-types": "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-meaningless-void-operator": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-misused-spread": "error", - "@typescript-eslint/no-mixed-enums": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-redundant-type-constituents": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-condition": "error", - "@typescript-eslint/no-unnecessary-template-expression": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unnecessary-type-assertion": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unnecessary-type-conversion": "error", - "@typescript-eslint/no-unsafe-argument": "error", - "@typescript-eslint/no-unsafe-assignment": "error", - "@typescript-eslint/no-unsafe-call": "error", - "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unsafe-enum-comparison": "error", - "@typescript-eslint/no-unsafe-function-type": "error", - "@typescript-eslint/no-unsafe-member-access": "error", - "@typescript-eslint/no-unsafe-return": "error", - "@typescript-eslint/no-unsafe-unary-minus": "error", - "@typescript-eslint/no-useless-default-assignment": "error", - "@typescript-eslint/no-wrapper-object-types": "error", - "@typescript-eslint/non-nullable-type-assertion-style": "error", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/prefer-find": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-includes": "error", - "@typescript-eslint/prefer-literal-enum-member": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/prefer-promise-reject-errors": "error", - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/prefer-reduce-type-parameter": "error", - "@typescript-eslint/prefer-regexp-exec": "error", - "@typescript-eslint/prefer-return-this-type": "error", - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/related-getter-setter-pairs": "error", - "@typescript-eslint/require-await": "error", - "@typescript-eslint/restrict-plus-operands": [ - "error", + "typescript/ban-tslint-comment": "deny", + "typescript/class-literal-property-style": ["deny", "fields"], + "typescript/consistent-generic-constructors": [ + "deny", + { + option: "constructor", + }, + ], + "typescript/consistent-indexed-object-style": ["deny", "record"], + "typescript/consistent-return": [ + "deny", + { + treatUndefinedAsUnspecified: false, + }, + ], + "typescript/consistent-type-assertions": [ + "deny", + { + assertionStyle: "never", + }, + ], + "typescript/consistent-type-definitions": ["deny", "type"], + "typescript/consistent-type-exports": [ + "deny", + { + fixMixedExportsWithInlineTypeSpecifier: false, + }, + ], + "typescript/consistent-type-imports": [ + "deny", + { + disallowTypeAnnotations: true, + fixStyle: "separate-type-imports", + prefer: "type-imports", + }, + ], + "typescript/dot-notation": [ + "deny", + { + allowIndexSignaturePropertyAccess: false, + allowKeywords: false, + allowPattern: "", + allowPrivateClassPropertyAccess: false, + allowProtectedClassPropertyAccess: false, + }, + ], + "typescript/explicit-function-return-type": [ + "deny", + { + allowConciseArrowFunctionExpressionsStartingWithVoid: false, + allowDirectConstAssertionInArrowFunctions: true, + allowedNames: [], + allowExpressions: false, + allowFunctionsWithoutTypeParameters: false, + allowHigherOrderFunctions: true, + allowIIFEs: false, + allowTypedFunctionExpressions: true, + }, + ], + "typescript/explicit-module-boundary-types": [ + "deny", + { + allowArgumentsExplicitlyTypedAsAny: false, + allowDirectConstAssertionInArrowFunctions: true, + allowedNames: [], + allowHigherOrderFunctions: true, + allowOverloadFunctions: false, + allowTypedFunctionExpressions: true, + }, + ], + "typescript/no-array-delete": "deny", + "typescript/no-base-to-string": [ + "deny", + { + checkUnknown: true, + ignoredTypeNames: ["deny", "RegExp", "URL", "URLSearchParams"], + }, + ], + "typescript/no-confusing-non-null-assertion": "deny", + "typescript/no-confusing-void-expression": [ + "deny", + { + ignoreArrowShorthand: false, + ignoreVoidOperator: false, + ignoreVoidReturningFunctions: false, + }, + ], + "typescript/no-deprecated": "deny", + "typescript/no-duplicate-enum-values": "deny", + "typescript/no-duplicate-type-constituents": [ + "deny", + { + ignoreIntersections: false, + ignoreUnions: false, + }, + ], + "typescript/no-dynamic-delete": "deny", + "typescript/no-empty-object-type": "deny", + "typescript/no-explicit-any": "deny", + "typescript/no-extra-non-null-assertion": "deny", + "typescript/no-extraneous-class": "deny", + "typescript/no-floating-promises": [ + "deny", + { + allowForKnownSafeCalls: [], + allowForKnownSafePromises: [], + checkThenables: true, + ignoreIIFE: false, + ignoreVoid: false, + }, + ], + "typescript/no-for-in-array": "deny", + "typescript/no-implied-eval": "deny", + "typescript/no-inferrable-types": "deny", + "typescript/no-invalid-void-type": "deny", + "typescript/no-meaningless-void-operator": [ + "deny", + { + checkNever: true, + }, + ], + "typescript/no-misused-new": "deny", + "typescript/no-misused-promises": [ + "deny", + { + checksConditionals: true, + checksSpreads: true, + checksVoidReturn: true, + }, + ], + "typescript/no-misused-spread": [ + "deny", + { + allow: [], + }, + ], + "typescript/no-mixed-enums": "deny", + "typescript/no-namespace": "deny", + "typescript/no-non-null-asserted-nullish-coalescing": "deny", + "typescript/no-non-null-asserted-optional-chain": "deny", + "typescript/no-non-null-assertion": "deny", + "typescript/no-redundant-type-constituents": "deny", + "typescript/no-require-imports": "deny", + "typescript/no-this-alias": [ + "deny", + { + allowDestructuring: false, + allowedNames: [], + }, + ], + "typescript/no-unnecessary-condition": [ + "deny", + { + allowConstantLoopConditions: "never", + checkTypePredicates: true, + }, + ], + "typescript/no-unnecessary-parameter-property-assignment": "deny", + "typescript/no-unnecessary-qualifier": "deny", + "typescript/no-unnecessary-template-expression": "deny", + "typescript/no-unnecessary-type-arguments": "deny", + "typescript/no-unnecessary-type-assertion": "deny", + "typescript/no-unnecessary-type-constraint": "deny", + "typescript/no-unnecessary-type-conversion": "deny", + "typescript/no-unnecessary-type-parameters": "deny", + "typescript/no-unsafe-argument": "deny", + "typescript/no-unsafe-assignment": "deny", + "typescript/no-unsafe-call": "deny", + "typescript/no-unsafe-declaration-merging": "deny", + "typescript/no-unsafe-enum-comparison": "deny", + "typescript/no-unsafe-function-type": "deny", + "typescript/no-unsafe-member-access": "deny", + "typescript/no-unsafe-return": "deny", + "typescript/no-unsafe-unary-minus": "deny", + "typescript/no-useless-default-assignment": "deny", + "typescript/no-useless-empty-export": "deny", + "typescript/no-wrapper-object-types": "deny", + "typescript/non-nullable-type-assertion-style": "deny", + "typescript/prefer-as-const": "deny", + "typescript/prefer-find": "deny", + "typescript/prefer-for-of": "deny", + "typescript/prefer-function-type": "deny", + "typescript/prefer-includes": "deny", + "typescript/prefer-literal-enum-member": "deny", + "typescript/prefer-nullish-coalescing": "deny", + "typescript/prefer-optional-chain": [ + "deny", + { + checkAny: true, + checkBigInt: true, + checkBoolean: true, + checkNumber: true, + checkString: true, + checkUnknown: true, + requireNullish: false, + }, + ], + "typescript/prefer-promise-reject-errors": "deny", + "typescript/prefer-readonly": "deny", + "typescript/prefer-readonly-parameter-types": [ + "deny", + { + allow: [], + checkParameterProperties: true, + ignoreInferredTypes: true, + treatMethodsAsReadonly: true, + }, + ], + "typescript/prefer-reduce-type-parameter": "deny", + "typescript/prefer-regexp-exec": "deny", + "typescript/prefer-return-this-type": "deny", + "typescript/prefer-string-starts-ends-with": "deny", + "typescript/related-getter-setter-pairs": "deny", + "typescript/require-array-sort-compare": [ + "deny", + { + ignoreStringArrays: true, + }, + ], + "typescript/require-await": "deny", + "typescript/restrict-plus-operands": [ + "deny", { allowAny: false, allowBoolean: false, @@ -97,9 +253,10 @@ const typeScriptRules: DummyRuleMap = { allowRegExp: false, }, ], - "@typescript-eslint/restrict-template-expressions": [ - "error", + "typescript/restrict-template-expressions": [ + "deny", { + allow: [{ from: "lib", name: ["Error", "URL", "URLSearchParams"] }], allowAny: false, allowBoolean: false, allowNever: false, @@ -108,12 +265,30 @@ const typeScriptRules: DummyRuleMap = { allowRegExp: false, }, ], - "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unbound-method": "error", - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "typescript/return-await": ["deny", "error-handling-correctness-only"], + "typescript/strict-void-return": [ + "deny", + { + allowReturnAny: false, + }, + ], + "typescript/switch-exhaustiveness-check": "deny", + "typescript/triple-slash-reference": [ + "deny", + { + lib: "never", + path: "never", + types: "prefer-import", + }, + ], + "typescript/unbound-method": [ + "deny", + { + ignoreStatic: false, + }, + ], + "typescript/unified-signatures": "deny", + "typescript/use-unknown-in-catch-callback-variable": "deny", }; export default typeScriptRules; diff --git a/rules/unicorn.ts b/rules/unicorn.ts index 511dd2a..130d645 100644 --- a/rules/unicorn.ts +++ b/rules/unicorn.ts @@ -1,121 +1,121 @@ import type { DummyRuleMap } from "oxlint"; const unicornRules: DummyRuleMap = { - "unicorn/catch-error-name": "error", - "unicorn/consistent-date-clone": "error", - "unicorn/consistent-empty-array-spread": "error", - "unicorn/consistent-existence-index-check": "error", - "unicorn/custom-error-definition": "error", - "unicorn/error-message": "error", - "unicorn/escape-case": "error", + "unicorn/catch-error-name": "deny", + "unicorn/consistent-date-clone": "deny", + "unicorn/consistent-empty-array-spread": "deny", + "unicorn/consistent-existence-index-check": "deny", + "unicorn/custom-error-definition": "deny", + "unicorn/error-message": "deny", + "unicorn/escape-case": "deny", "unicorn/explicit-length-check": [ - "error", + "deny", { "non-zero": "not-equal", }, ], - "unicorn/new-for-builtins": "error", - "unicorn/no-abusive-eslint-disable": "error", - "unicorn/no-accessor-recursion": "error", - "unicorn/no-anonymous-default-export": "error", - "unicorn/no-array-method-this-argument": "error", - "unicorn/no-array-reverse": "error", - "unicorn/no-array-sort": "error", - "unicorn/no-await-in-promise-methods": "error", - "unicorn/no-console-spaces": "error", - "unicorn/no-document-cookie": "error", - "unicorn/no-empty-file": "error", - "unicorn/no-hex-escape": "error", - "unicorn/no-instanceof-builtins": "error", - "unicorn/no-invalid-fetch-options": "error", - "unicorn/no-invalid-remove-event-listener": "error", - "unicorn/no-lonely-if": "error", - "unicorn/no-magic-array-flat-depth": "error", - "unicorn/no-negated-condition": "error", - "unicorn/no-negation-in-equality-check": "error", - "unicorn/no-nested-ternary": "error", - "unicorn/no-new-array": "error", - "unicorn/no-new-buffer": "error", - "unicorn/no-null": "error", - "unicorn/no-object-as-default-parameter": "error", - "unicorn/no-process-exit": "error", - "unicorn/no-single-promise-in-promise-methods": "error", - "unicorn/no-static-only-class": "error", - "unicorn/no-thenable": "error", - "unicorn/no-this-assignment": "error", - "unicorn/no-typeof-undefined": "error", - "unicorn/no-unnecessary-array-flat-depth": "error", - "unicorn/no-unnecessary-array-splice-count": "error", - "unicorn/no-unnecessary-await": "error", - "unicorn/no-unnecessary-slice-end": "error", - "unicorn/no-unreadable-array-destructuring": "error", - "unicorn/no-unreadable-iife": "error", - "unicorn/no-useless-collection-argument": "error", - "unicorn/no-useless-error-capture-stack-trace": "error", - "unicorn/no-useless-fallback-in-spread": "error", - "unicorn/no-useless-length-check": "error", - "unicorn/no-useless-promise-resolve-reject": "error", - "unicorn/no-useless-spread": "error", - "unicorn/no-useless-switch-case": "error", - "unicorn/no-useless-undefined": "error", - "unicorn/no-zero-fractions": "error", - "unicorn/number-literal-case": "error", - "unicorn/numeric-separators-style": "error", - "unicorn/prefer-add-event-listener": "error", - "unicorn/prefer-array-find": "error", - "unicorn/prefer-array-flat": "error", - "unicorn/prefer-array-flat-map": "error", - "unicorn/prefer-array-index-of": "error", - "unicorn/prefer-array-some": "error", - "unicorn/prefer-at": "error", - "unicorn/prefer-bigint-literals": "error", - "unicorn/prefer-blob-reading-methods": "error", - "unicorn/prefer-class-fields": "error", - "unicorn/prefer-classlist-toggle": "error", - "unicorn/prefer-code-point": "error", - "unicorn/prefer-date-now": "error", - "unicorn/prefer-default-parameters": "error", - "unicorn/prefer-dom-node-append": "error", - "unicorn/prefer-dom-node-remove": "error", - "unicorn/prefer-dom-node-text-content": "error", - "unicorn/prefer-event-target": "error", - "unicorn/prefer-global-this": "error", - "unicorn/prefer-includes": "error", - "unicorn/prefer-keyboard-event-key": "error", - "unicorn/prefer-logical-operator-over-ternary": "error", - "unicorn/prefer-math-min-max": "error", - "unicorn/prefer-math-trunc": "error", - "unicorn/prefer-modern-dom-apis": "error", - "unicorn/prefer-modern-math-apis": "error", - "unicorn/prefer-module": "error", - "unicorn/prefer-native-coercion-functions": "error", - "unicorn/prefer-negative-index": "error", - "unicorn/prefer-node-protocol": "error", - "unicorn/prefer-number-properties": "error", - "unicorn/prefer-object-from-entries": "error", - "unicorn/prefer-optional-catch-binding": "error", - "unicorn/prefer-prototype-methods": "error", - "unicorn/prefer-reflect-apply": "error", - "unicorn/prefer-regexp-test": "error", - "unicorn/prefer-response-static-json": "error", - "unicorn/prefer-set-has": "error", - "unicorn/prefer-set-size": "error", - "unicorn/prefer-string-raw": "error", - "unicorn/prefer-string-replace-all": "error", - "unicorn/prefer-string-slice": "error", - "unicorn/prefer-string-starts-ends-with": "error", - "unicorn/prefer-string-trim-start-end": "error", - "unicorn/prefer-structured-clone": "error", + "unicorn/new-for-builtins": "deny", + "unicorn/no-abusive-eslint-disable": "deny", + "unicorn/no-accessor-recursion": "deny", + "unicorn/no-anonymous-default-export": "deny", + "unicorn/no-array-method-this-argument": "deny", + "unicorn/no-array-reverse": "deny", + "unicorn/no-array-sort": "deny", + "unicorn/no-await-in-promise-methods": "deny", + "unicorn/no-console-spaces": "deny", + "unicorn/no-document-cookie": "deny", + "unicorn/no-empty-file": "deny", + "unicorn/no-hex-escape": "deny", + "unicorn/no-instanceof-builtins": "deny", + "unicorn/no-invalid-fetch-options": "deny", + "unicorn/no-invalid-remove-event-listener": "deny", + "unicorn/no-lonely-if": "deny", + "unicorn/no-magic-array-flat-depth": "deny", + "unicorn/no-negated-condition": "deny", + "unicorn/no-negation-in-equality-check": "deny", + "unicorn/no-nested-ternary": "deny", + "unicorn/no-new-array": "deny", + "unicorn/no-new-buffer": "deny", + "unicorn/no-null": "deny", + "unicorn/no-object-as-default-parameter": "deny", + "unicorn/no-process-exit": "deny", + "unicorn/no-single-promise-in-promise-methods": "deny", + "unicorn/no-static-only-class": "deny", + "unicorn/no-thenable": "deny", + "unicorn/no-this-assignment": "deny", + "unicorn/no-typeof-undefined": "deny", + "unicorn/no-unnecessary-array-flat-depth": "deny", + "unicorn/no-unnecessary-array-splice-count": "deny", + "unicorn/no-unnecessary-await": "deny", + "unicorn/no-unnecessary-slice-end": "deny", + "unicorn/no-unreadable-array-destructuring": "deny", + "unicorn/no-unreadable-iife": "deny", + "unicorn/no-useless-collection-argument": "deny", + "unicorn/no-useless-error-capture-stack-trace": "deny", + "unicorn/no-useless-fallback-in-spread": "deny", + "unicorn/no-useless-length-check": "deny", + "unicorn/no-useless-promise-resolve-reject": "deny", + "unicorn/no-useless-spread": "deny", + "unicorn/no-useless-switch-case": "deny", + "unicorn/no-useless-undefined": "deny", + "unicorn/no-zero-fractions": "deny", + "unicorn/number-literal-case": "deny", + "unicorn/numeric-separators-style": "deny", + "unicorn/prefer-add-event-listener": "deny", + "unicorn/prefer-array-find": "deny", + "unicorn/prefer-array-flat": "deny", + "unicorn/prefer-array-flat-map": "deny", + "unicorn/prefer-array-index-of": "deny", + "unicorn/prefer-array-some": "deny", + "unicorn/prefer-at": "deny", + "unicorn/prefer-bigint-literals": "deny", + "unicorn/prefer-blob-reading-methods": "deny", + "unicorn/prefer-class-fields": "deny", + "unicorn/prefer-classlist-toggle": "deny", + "unicorn/prefer-code-point": "deny", + "unicorn/prefer-date-now": "deny", + "unicorn/prefer-default-parameters": "deny", + "unicorn/prefer-dom-node-append": "deny", + "unicorn/prefer-dom-node-remove": "deny", + "unicorn/prefer-dom-node-text-content": "deny", + "unicorn/prefer-event-target": "deny", + "unicorn/prefer-global-this": "deny", + "unicorn/prefer-includes": "deny", + "unicorn/prefer-keyboard-event-key": "deny", + "unicorn/prefer-logical-operator-over-ternary": "deny", + "unicorn/prefer-math-min-max": "deny", + "unicorn/prefer-math-trunc": "deny", + "unicorn/prefer-modern-dom-apis": "deny", + "unicorn/prefer-modern-math-apis": "deny", + "unicorn/prefer-module": "deny", + "unicorn/prefer-native-coercion-functions": "deny", + "unicorn/prefer-negative-index": "deny", + "unicorn/prefer-node-protocol": "deny", + "unicorn/prefer-number-properties": "deny", + "unicorn/prefer-object-from-entries": "deny", + "unicorn/prefer-optional-catch-binding": "deny", + "unicorn/prefer-prototype-methods": "deny", + "unicorn/prefer-reflect-apply": "deny", + "unicorn/prefer-regexp-test": "deny", + "unicorn/prefer-response-static-json": "deny", + "unicorn/prefer-set-has": "deny", + "unicorn/prefer-set-size": "deny", + "unicorn/prefer-string-raw": "deny", + "unicorn/prefer-string-replace-all": "deny", + "unicorn/prefer-string-slice": "deny", + "unicorn/prefer-string-starts-ends-with": "deny", + "unicorn/prefer-string-trim-start-end": "deny", + "unicorn/prefer-structured-clone": "deny", "unicorn/prefer-ternary": "off", - "unicorn/prefer-top-level-await": "error", - "unicorn/prefer-type-error": "error", - "unicorn/relative-url-style": "error", - "unicorn/require-array-join-separator": "error", - "unicorn/require-module-attributes": "error", - "unicorn/require-module-specifiers": "error", - "unicorn/require-number-to-fixed-digits-argument": "error", - "unicorn/text-encoding-identifier-case": "error", - "unicorn/throw-new-error": "error", + "unicorn/prefer-top-level-await": "deny", + "unicorn/prefer-type-error": "deny", + "unicorn/relative-url-style": "deny", + "unicorn/require-array-join-separator": "deny", + "unicorn/require-module-attributes": "deny", + "unicorn/require-module-specifiers": "deny", + "unicorn/require-number-to-fixed-digits-argument": "deny", + "unicorn/text-encoding-identifier-case": "deny", + "unicorn/throw-new-error": "deny", }; export default unicornRules;