{"id":14978221,"url":"https://github.com/tomerh2001/eslint-plugin-th-rules","last_synced_at":"2026-01-25T11:05:27.257Z","repository":{"id":224060645,"uuid":"761910403","full_name":"tomerh2001/eslint-plugin-th-rules","owner":"tomerh2001","description":"Custom ESLint rules for improving consistency across projects.","archived":false,"fork":false,"pushed_at":"2026-01-23T18:56:39.000Z","size":4610,"stargazers_count":2,"open_issues_count":17,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-24T08:57:39.980Z","etag":null,"topics":["eslint","eslint-plugin","eslint-rule","eslint-rules"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomerh2001.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-22T18:04:51.000Z","updated_at":"2026-01-18T12:35:22.000Z","dependencies_parsed_at":"2024-03-01T06:28:50.057Z","dependency_job_id":"ec4428ae-9568-4be9-8599-05f25bf42564","html_url":"https://github.com/tomerh2001/eslint-plugin-th-rules","commit_stats":{"total_commits":135,"total_committers":6,"mean_commits":22.5,"dds":0.6666666666666667,"last_synced_commit":"efb7a25b372be7b1cf25ce5992ffb156664e3ee5"},"previous_names":["tomerh2001/eslint-th","tomerh2001/eslint-rules-th"],"tags_count":99,"template":false,"template_full_name":"tomerh2001/semantic-release-repo-template","purl":"pkg:github/tomerh2001/eslint-plugin-th-rules","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomerh2001%2Feslint-plugin-th-rules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomerh2001%2Feslint-plugin-th-rules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomerh2001%2Feslint-plugin-th-rules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomerh2001%2Feslint-plugin-th-rules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomerh2001","download_url":"https://codeload.github.com/tomerh2001/eslint-plugin-th-rules/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomerh2001%2Feslint-plugin-th-rules/sbom","scorecard":{"id":668267,"data":{"date":"2025-07-21T03:49:35Z","repo":{"name":"github.com/tomerh2001/eslint-plugin-th-rules","commit":"b657ed9ae96a6bf85d1afeaaac14faa82cf0be92"},"scorecard":{"version":"v4.13.1","commit":"49c0eed3a423f00c872b5c3c9f1bbca9e8aae799"},"score":4.8,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":-1,"reason":"no pull request found","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"found 30 unreviewed changesets out of 30 -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#code-review"}},{"name":"Contributors","score":3,"reason":"1 different organizations found -- score normalized to 3","details":["Info: contributors work for semantic-release"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: tool 'RenovateBot' is used: renovate.json:1","Info: tool 'Dependabot' is used: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no OSSFuzz integration found: Follow the steps in https://github.com/google/oss-fuzz to integrate fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no OneFuzz integration found: Follow the steps in https://github.com/microsoft/onefuzz to start fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no GoBuiltInFuzzer integration found: Follow the steps in https://go.dev/doc/fuzz/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no PythonAtherisFuzzer integration found: Follow the steps in https://github.com/google/atheris to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CppLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no SwiftLibFuzzer integration found: Follow the steps in https://google.github.io/oss-fuzz/getting-started/new-project-guide/swift-lang/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no RustCargoFuzzer integration found: Follow the steps in https://rust-fuzz.github.io/book/cargo-fuzz.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no JavaJazzerFuzzer integration found: Follow the steps in https://github.com/CodeIntelligenceTesting/jazzer to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no ClusterFuzzLite integration found: Follow the steps in https://github.com/google/clusterfuzzlite to integrate fuzzing as part of CI.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no HaskellPropertyBasedTesting integration found: Use one of the following frameworks to fuzz your project:\nQuickCheck: https://hackage.haskell.org/package/QuickCheck\nhedgehog: https://hedgehog.qa/\nvalidity: https://github.com/NorfairKing/validity\nsmallcheck: https://hackage.haskell.org/package/smallcheck\nhspec: https://hspec.github.io/\ntasty: https://hackage.haskell.org/package/tasty (High effort)","Warn: no TypeScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)","Warn: no JavaScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":null,"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#license"}},{"name":"Maintained","score":0,"reason":"0 commit(s) out of 30 and 0 issue activity out of 2 found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub/GitLab publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codecov.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codecov.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/codecov.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codecov.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dependency-review.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/dependency-review.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dependency-review.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/dependency-review.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snyk-security.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/snyk-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snyk-security.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/snyk-security.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/snyk-security.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/snyk-security.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/snyk-security.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/snyk-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snyk-security.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/snyk-security.yml/main?enable=pin","Info:   3 out of  15 GitHub-owned GitHubAction dependencies pinned","Info:   2 out of   6 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool detected","details":["Warn: no pull requests merged into dev branch","Info: SAST tool detected: CodeQL"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":["Warn: no GitHub releases found"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":8,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codecov.yml:1: Visit https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codecov.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/codecov.yml:15: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1: Visit https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/codeql.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:34","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:35","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependency-review.yml:11","Warn: no topLevel permission defined: .github/workflows/main.yml:1: Visit https://app.stepsecurity.io/secureworkflow/tomerh2001/eslint-plugin-th-rules/main.yml/main?enable=permissions\nTick the 'Restrict permissions for GITHUB_TOKEN'\nUntick other options\nNOTE: If you want to resolve multiple issues at once, you can visit https://app.stepsecurity.io/securerepo instead. (Low effort)","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/main.yml:12: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/snyk-security.yml:14","Info: jobLevel 'contents' permission set to 'read': .github/workflows/snyk-security.yml:19","Info: jobLevel 'actions' permission set to 'read': .github/workflows/snyk-security.yml:21"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":1,"reason":"9 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-x4c5-c7rf-jjgv","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-c76h-2ccp-4975","Warn: Project is vulnerable to: GHSA-cxrh-j4jr-qwg3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T18:57:19.395Z","repository_id":224060645,"created_at":"2025-08-21T18:57:19.395Z","updated_at":"2025-08-21T18:57:19.395Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28752472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T10:25:12.305Z","status":"ssl_error","status_checked_at":"2026-01-25T10:25:11.933Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eslint","eslint-plugin","eslint-rule","eslint-rules"],"created_at":"2024-09-24T13:57:05.703Z","updated_at":"2026-01-25T11:05:27.245Z","avatar_url":"https://github.com/tomerh2001.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# eslint-plugin-th-rules\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![XO code style](https://shields.io/badge/code_style-5ed9c7?logo=xo\u0026labelColor=gray)](https://github.com/xojs/xo)\n[![Snyk Security](../../actions/workflows/snyk-security.yml/badge.svg)](../../actions/workflows/snyk-security.yml)\n[![CodeQL](../../actions/workflows/codeql.yml/badge.svg)](../../actions/workflows/codeql.yml)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/tomerh2001/eslint-plugin-th-rules/badge)](https://securityscorecards.dev/viewer/?uri=github.com/tomerh2001/eslint-plugin-th-rules)\n\nA set of custom ESLint rules designed to improve code quality, enforce consistency, and introduce development conventions across TypeScript, React, and JavaScript projects.\n\nThis plugin provides:\n\n- Custom rules unique to this repository  \n- Recommended flat configs that bundle th-rules with popular third-party plugins  \n- Advanced composable config layers for consumers who want fine-grained control  \n\n---\n\n# Installation\n\n```bash\nnpm install --save-dev eslint-plugin-th-rules\n```\nor\n```bash\nyarn add -D eslint-plugin-th-rules\n```\n\nThis plugin requires ESLint Flat Config (ESLint 8.21+).\n\n---\n\n# Usage\n\nThe plugin exposes three public recommended configurations.\n\nThese are the presets most users should consume.\n\n## Recommended (Full Opinionated)\n\nIncludes:\n\n- All th-rules\n- External plugins (lodash, n, sonarjs, security)\n- Opinionated rule settings for externals\n\n```js\n// eslint.config.js\nimport thRules from \"eslint-plugin-th-rules\";\n\nexport default [\n  ...thRules.configs.recommended\n];\n```\n\n## Recommended + TypeScript\n\nRecommended plus full strict/stylistic TypeScript configurations.\n\n```js\nimport thRules from \"eslint-plugin-th-rules\";\n\nexport default [\n  ...thRules.configs.recommendedTypescript\n];\n```\n\n## Recommended + React\n\nRecommended plus:\n\n- eslint-plugin-react\n- eslint-plugin-react-hooks\n- JSX Runtime rules\n\n```js\nimport thRules from \"eslint-plugin-th-rules\";\n\nexport default [\n  ...thRules.configs.recommendedReact\n];\n```\n\n## Recommended + TypeScript + React\nRecommended plus TypeScript and React extensions.\n\n```js\nimport thRules from \"eslint-plugin-th-rules\";\n\nexport default [\n  ...thRules.configs.recommendedTypescriptReact\n];\n```\n\n---\n\n# Advanced Composition (Optional)\n\nIf you want total control, you may import internal composition layers.\n\nThese layers are intentionally not included in `configs`, because they are not presets but building blocks.\n\n```js\nimport {\n  coreBase,\n  externalsBase,\n  externalsOpinionated,\n  coreTypescript,\n  coreReact\n} from \"eslint-plugin-th-rules\";\n```\n\n### Only use th-rules\n\n```js\nexport default [\n  ...coreBase\n];\n```\n\n### Add external plugins (unstyled)\n\n```js\nexport default [\n  ...coreBase,\n  ...externalsBase\n];\n```\n\n### Add external plugins + th-rules opinions\n\n```js\nexport default [\n  ...coreBase,\n  ...externalsBase,\n  ...externalsOpinionated\n];\n```\n\n### Add TypeScript or React extensions\n\n```js\nexport default [\n  ...coreBase,\n  ...externalsBase,\n  ...externalsOpinionated,\n  ...coreTypescript,\n  ...coreReact\n];\n```\n\n---\n\n# Auto-Generated Rule Documentation\n\nThe following section is generated via `eslint-doc-generator`.  \nDo not edit below this line.\n\n## Rules\n\n\u003c!-- begin auto-generated rules list --\u003e\n\n💼 Configurations enabled in.\\\n✅ Set in the `recommended` configuration.\\\n⚛️ Set in the `recommendedReact` configuration.\\\n🟦 Set in the `recommendedTypescript` configuration.\\\n🎲 Set in the `recommendedTypescriptReact` configuration.\\\n🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\n\n| Name                                                                 | Description                                                                                                                                                                                        | 💼         | 🔧 |\n| :------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------- | :- |\n| [no-boolean-coercion](docs/rules/no-boolean-coercion.md)             | Disallow Boolean(value) or !!value. Enforce explicit checks: !_.isNil(value) for scalars and !_.isEmpty(value) for strings, arrays, and objects. If the value is already boolean, remove coercion. | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [no-comments](docs/rules/no-comments.md)                             | Disallow comments except for specified allowed patterns.                                                                                                                                           | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [no-default-export](docs/rules/no-default-export.md)                 | Convert unnamed default exports to named default exports based on the file name.                                                                                                                   | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [no-destructuring](docs/rules/no-destructuring.md)                   | Disallow destructuring that does not meet certain conditions.                                                                                                                                      | ✅ ⚛️ 🟦 🎲 |    |\n| [no-explicit-nil-compare](docs/rules/no-explicit-nil-compare.md)     | Disallow direct comparisons to null or undefined. Use _.isNull(x) / _.isUndefined(x) instead.                                                                                                      | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [prefer-explicit-nil-check](docs/rules/prefer-explicit-nil-check.md) | Disallow implicit truthy/falsy checks in boolean-test positions. Prefer explicit _.isNil(value) or _.isEmpty(value) (depending on the value type).                                                 | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [prefer-is-empty](docs/rules/prefer-is-empty.md)                     | Require _.isEmpty instead of length comparisons or boolean checks on .length.                                                                                                                      | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [schemas-in-schemas-file](docs/rules/schemas-in-schemas-file.md)     | Require Zod schema declarations to be placed in a .schemas.ts file.                                                                                                                                | ✅ ⚛️ 🟦 🎲 |    |\n| [top-level-functions](docs/rules/top-level-functions.md)             | Require all top-level functions to be named regular functions.                                                                                                                                     | ✅ ⚛️ 🟦 🎲 | 🔧 |\n| [types-in-dts](docs/rules/types-in-dts.md)                           | Require TypeScript type declarations (type/interface/enum) to be placed in .d.ts files.                                                                                                            | ✅ ⚛️ 🟦 🎲 |    |\n\n\u003c!-- end auto-generated rules list --\u003e\n\n---\n\n# License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomerh2001%2Feslint-plugin-th-rules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomerh2001%2Feslint-plugin-th-rules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomerh2001%2Feslint-plugin-th-rules/lists"}