# core/plugins/eslint.plugin.ts

> 15 lines of code and 5 definitions.

Tree: GovLab Quality
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/quality#file-quality-core-plugins-eslint-plugin-ts
Source text: https://banes-lab.com/source/quality/core/plugins/eslint.plugin.ts.txt

Listed in [core/plugins](https://banes-lab.com/api/source/quality/core/plugins.md), after [core/plugins/context.plugin.ts](https://banes-lab.com/source/quality/core/plugins/context.plugin.ts.md) and before [core/plugins/stylelint.plugin.ts](https://banes-lab.com/source/quality/core/plugins/stylelint.plugin.ts.md).

## Definitions

- `RULE_FILES` (lexical_declaration, line 10)
- `RULE_ENTRIES` (lexical_declaration, line 11)
- `rules` (lexical_declaration, line 13, exported)
- `ALL_RULES` (lexical_declaration, line 15)
- `configs` (lexical_declaration, line 19, exported)

## Contained in

- [core/plugins](https://banes-lab.com/anatomy/quality/folder-quality-core-plugins.md)

## Source

```typescript
import type { Linter, Rule } from "eslint";
import { ESLINT_RULE_SUFFIX } from "#configuration/constants/eslint.constants";
import { absolutePath } from "@ssot/paths";
import { eslintRuleEntries } from "#core/converters/rule.converter";
import { loadRuleFolder } from "#core/loaders/rule.loader";

export { govlabMeta } from "#core/factories/eslint.factory";
export type { GovlabRuleSpec } from "#types/eslint.types";

const RULE_FILES = await loadRuleFolder(absolutePath("govlab.quality.eslintRules"), ESLINT_RULE_SUFFIX);
const RULE_ENTRIES = eslintRuleEntries(RULE_FILES);

export const rules: Record<string, Rule.RuleModule> = Object.fromEntries(RULE_ENTRIES);

const ALL_RULES: Linter.RulesRecord = Object.fromEntries(
    RULE_ENTRIES.map(([id]): [string, Linter.RuleEntry] => [`govlab/${id}`, "error"]),
);

export const configs = { all: { rules: ALL_RULES } };

export default { configs, rules };
```
