# core/predicates/context.fragment.predicate.ts

> 22 lines of code and 6 definitions.

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

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

## Definitions

- `isNode` (lexical_declaration, line 9, exported)
- `isDefineFragmentCall` (lexical_declaration, line 21, exported)
- `isRecord` (lexical_declaration, line 5, exported)
- `isRuleNode` (lexical_declaration, line 17, exported)
- `isArray` (lexical_declaration, line 13, exported)
- `{ callee }` (lexical_declaration, line 25, exported)

## Contained in

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

## Used by

- [core/fragment/eslint/no-duplicate-fragment.eslint.rule.ts](https://banes-lab.com/source/quality/core/fragment/eslint/no-duplicate-fragment.eslint.rule.ts.md)
- [core/fragment/eslint/no-hardcoded-context-token.eslint.rule.ts](https://banes-lab.com/source/quality/core/fragment/eslint/no-hardcoded-context-token.eslint.rule.ts.md)
- [core/fragment/eslint/no-inline-context-literal.eslint.rule.ts](https://banes-lab.com/source/quality/core/fragment/eslint/no-inline-context-literal.eslint.rule.ts.md)
- [core/fragment/eslint/require-fragment-metadata.eslint.rule.ts](https://banes-lab.com/source/quality/core/fragment/eslint/require-fragment-metadata.eslint.rule.ts.md)
- [core/selectors/context.fragment.selector.ts](https://banes-lab.com/source/quality/core/selectors/context.fragment.selector.ts.md)
- [core/visitors/context.fragment.visitor.ts](https://banes-lab.com/source/quality/core/visitors/context.fragment.visitor.ts.md)

## Linked from

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

## Source

```typescript
import type { AstNode } from "#types/context.types";
import { FRAGMENT_FACTORY } from "#configuration/constants/context.constants";
import type { Rule } from "eslint";

export const isRecord = function isRecord(value: unknown): value is Record<string, unknown> {
    return typeof value === "object" && value !== null;
};

export const isNode = function isNode(value: unknown): value is AstNode {
    return isRecord(value) && typeof value["type"] === "string";
};

export const isArray = function isArray(value: unknown): value is readonly unknown[] {
    return Array.isArray(value);
};

export const isRuleNode = function isRuleNode(value: unknown): value is Rule.Node {
    return isNode(value);
};

export const isDefineFragmentCall = function isDefineFragmentCall(node: unknown): boolean {
    if (!isRecord(node) || node["type"] !== "CallExpression") {
        return false;
    }
    const { callee } = node;
    return isRecord(callee) && callee["type"] === "Identifier" && callee["name"] === FRAGMENT_FACTORY;
};
```
