# core/predicates/stylelint.predicate.ts

> 13 lines of code and 3 definitions.

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

Listed in [core/predicates](https://banes-lab.com/api/source/quality/core/predicates.md), after [core/predicates/location.predicate.ts](https://banes-lab.com/source/quality/core/predicates/location.predicate.ts.md).

## Definitions

- `isStylelintPlugin` (lexical_declaration, line 5, exported)
- `isStylelintMeta` (lexical_declaration, line 9, exported)
- `{ meta }` (lexical_declaration, line 13, exported)

## Contained in

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

## Used by

- [core/converters/rule.converter.ts](https://banes-lab.com/source/quality/core/converters/rule.converter.ts.md)

## Linked from

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

## Source

```typescript
import type { GovlabStylelintMeta } from "#types/stylelint.types";
import type { Plugin } from "stylelint";
import { isRecord } from "#core/selectors/record.selector";

export const isStylelintPlugin = function isStylelintPlugin(value: unknown): value is Plugin {
    return isRecord(value) && typeof value["ruleName"] === "string" && typeof value["rule"] === "function";
};

export const isStylelintMeta = function isStylelintMeta(value: unknown): value is GovlabStylelintMeta {
    if (!isRecord(value) || typeof value["ruleId"] !== "string" || typeof value["ruleName"] !== "string") {
        return false;
    }
    const { meta } = value;
    return isRecord(meta) && typeof meta["description"] === "string" && Array.isArray(meta["canonical"]);
};
```
