# core/factories/eslint.factory.ts

> 23 lines of code and 3 definitions.

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

Listed in [core/factories](https://banes-lab.com/api/source/quality/core/factories.md), after [core/factories/dependency.factory.ts](https://banes-lab.com/source/quality/core/factories/dependency.factory.ts.md) and before [core/factories/eslint.scope.factory.ts](https://banes-lab.com/source/quality/core/factories/eslint.scope.factory.ts.md).

## Definitions

- `govlabMeta` (lexical_declaration, line 5, exported)
- `tagged` (lexical_declaration, line 6, exported)
- `docs` (lexical_declaration, line 10, exported)

## Contained in

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

## Uses

- [core/formatters/canon.formatter.ts](https://banes-lab.com/source/quality/core/formatters/canon.formatter.ts.md)

## Linked from

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

## Source

```typescript
import type { GovlabRuleDocs, GovlabRuleSpec } from "#types/eslint.types";
import type { Rule } from "eslint";
import { withCanon } from "#core/formatters/canon.formatter";

export const govlabMeta = function govlabMeta(spec: GovlabRuleSpec): Rule.RuleMetaData {
    const tagged: Record<string, string> = {};
    for (const [id, text] of Object.entries(spec.messages)) {
        tagged[id] = withCanon(text, spec.ruleId, spec.canonical);
    }
    const docs: GovlabRuleDocs = {
        canonical: spec.canonical,
        description: spec.description,
        ruleId: spec.ruleId,
        url: spec.url,
    };
    return {
        docs,
        fixable: spec.fixable,
        hasSuggestions: spec.hasSuggestions,
        messages: tagged,
        schema: spec.schema ?? [],
        type: spec.type ?? "problem",
    };
};
```
