{"id":47865276,"url":"https://github.com/parloti/eslint-plugin","last_synced_at":"2026-04-29T22:04:10.830Z","repository":{"id":349039000,"uuid":"1181848708","full_name":"parloti/eslint-plugin","owner":"parloti","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-03T22:51:21.000Z","size":736,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T01:13:03.771Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/parloti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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},"funding":{"github":["parloti"],"patreon":"parloti"}},"created_at":"2026-03-14T17:53:26.000Z","updated_at":"2026-04-03T22:44:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/parloti/eslint-plugin","commit_stats":null,"previous_names":["parloti/eslint-plugin"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/parloti/eslint-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parloti%2Feslint-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parloti%2Feslint-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parloti%2Feslint-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parloti%2Feslint-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parloti","download_url":"https://codeload.github.com/parloti/eslint-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parloti%2Feslint-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32445577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T20:22:27.477Z","status":"ssl_error","status_checked_at":"2026-04-29T20:22:26.507Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2026-04-04T00:07:48.196Z","updated_at":"2026-04-29T22:04:10.824Z","avatar_url":"https://github.com/parloti.png","language":"TypeScript","funding_links":["https://github.com/sponsors/parloti","https://patreon.com/parloti"],"categories":[],"sub_categories":[],"readme":"# @codeperfect/eslint-plugin\n\nCustom ESLint rules for TypeScript repositories.\n\n## What this package provides\n\n`@codeperfect/eslint-plugin` ships a single ESLint plugin object, ready-to-use first-party presets, and direct exports for every package-owned rule. It does not compose third-party configs, load optional integrations, or provide a wrapper factory for `eslint.config.ts`.\n\nThe package scope is intentionally narrow:\n\n- root preset exports for package-owned rules only\n- package-owned custom rules\n- rule documentation under `docs/rules/`\n- architecture and maintenance notes under `docs/design/`\n- autogenerated API reference under `docs/api/`\n- a small registry used by tests and benchmarks\n\n## Installation\n\n```bash\nnpm install -D @codeperfect/eslint-plugin eslint\n```\n\nIf you lint TypeScript files, also install and configure the parser or plugin stack that your repository already uses.\n\n## Usage\n\nImport a preset if you want the plugin registration and matching rules together:\n\n```typescript\nimport { defineConfig } from \"eslint/config\";\nimport { all } from \"@codeperfect/eslint-plugin\";\n\nexport default defineConfig(all);\n```\n\nYou can also use a narrower preset such as `architecture`, `core`, `docs`, `testing`, or `aaa`:\n\n```typescript\nimport { defineConfig } from \"eslint/config\";\nimport { aaa, testing } from \"@codeperfect/eslint-plugin\";\n\nexport default defineConfig(testing, aaa);\n```\n\nRegister the plugin directly in your local ESLint config when you want full manual control:\n\n```typescript\nimport { defineConfig } from \"eslint/config\";\nimport { parser } from \"typescript-eslint\";\nimport codeperfectPlugin from \"@codeperfect/eslint-plugin\";\n\nexport default defineConfig({\n  files: [\"**/*.ts\"],\n  languageOptions: {\n    parser,\n    sourceType: \"module\",\n  },\n  plugins: {\n    codeperfect: codeperfectPlugin,\n  },\n  rules: {\n    \"codeperfect/prefer-interface-types\": \"error\",\n    \"codeperfect/require-example-language\": \"error\",\n  },\n});\n```\n\n## Exported surface\n\nThe root package exports:\n\n- the default plugin object\n- the named `codeperfectPlugin` export\n- the named preset exports: `all`, `architecture`, `core`, `docs`, `testing`, and `aaa`\n- the `customRules` registry\n- each rule module as a named export\n\nExample:\n\n```typescript\nimport codeperfectPlugin, {\n  all,\n  customRules,\n  preferInterfaceTypesRule,\n} from \"@codeperfect/eslint-plugin\";\n\nvoid codeperfectPlugin;\nvoid all;\nvoid customRules;\nvoid preferInterfaceTypesRule;\n```\n\n## Package-owned rules\n\n- `codeperfect/assert-actual-expected-names`\n- `codeperfect/barrel-files-exports-only`\n- `codeperfect/consistent-barrel-files`\n- `codeperfect/enforce-aaa-phase-purity`\n- `codeperfect/enforce-aaa-structure`\n- `codeperfect/no-interface-member-docs`\n- `codeperfect/no-reexports-outside-barrels`\n- `codeperfect/prefer-interface-types`\n- `codeperfect/prefer-vi-mocked-import`\n- `codeperfect/require-aaa-sections`\n- `codeperfect/require-act-result-capture`\n- `codeperfect/require-example-language`\n- `codeperfect/require-test-companion`\n- `codeperfect/single-act-statement`\n- `codeperfect/single-line-jsdoc`\n\n## Documentation\n\n- `docs/rules/` contains rule-level reference pages.\n- `docs/design/` contains architecture and release-process documentation.\n- `docs/api/` is generated from the public TypeScript entrypoint.\n\nRun `npm run docs` to refresh the generated API reference before publishing or deploying docs.\n\n## Internal layout\n\n- `src/index.ts` is the public package entrypoint.\n- `src/domain/` contains the concrete rule implementations and domain-only support code.\n- `src/application/` contains package-level rule catalogs and registries.\n- `src/infrastructure/` contains ESLint-facing adapters such as the plugin object and ready-to-use presets.\n\nAdditional design and release notes live in `docs/design/architecture.md` and `docs/design/release.md`.\n\n## Validation\n\nWhen changing this package:\n\n- run `npm run validate`\n- run `npm run validate` a second time to confirm deterministic results\n- run `npm run docs` if the public API or docs structure changed\n- keep the README and rule documentation aligned with the exported surface\n\n## Release\n\nPushes or merges to `main` and `master` are intended to publish automatically through Semantic Release.\n\nRepository prerequisites:\n\n- configure the npm package for trusted publishing or provide `NPM_TOKEN` in GitHub Actions secrets\n- keep commit messages compliant with the emoji conventional-commit format enforced by commitlint\n- keep `npm run validate` and `npm run docs` passing on the release branch\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparloti%2Feslint-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparloti%2Feslint-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparloti%2Feslint-plugin/lists"}