# core/visitors/context.fragment.visitor.ts

> 22 lines of code and 3 definitions.

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

Listed in [core/visitors](https://banes-lab.com/api/source/quality/core/visitors.md), after [core/visitors/block.visitor.ts](https://banes-lab.com/source/quality/core/visitors/block.visitor.ts.md).

## Definitions

- `walkChildren` (lexical_declaration, line 4)
- `walk` (lexical_declaration, line 17, exported)
- `items` (lexical_declaration, line 9)

## Contained in

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

## Uses

- [core/predicates/context.fragment.predicate.ts](https://banes-lab.com/source/quality/core/predicates/context.fragment.predicate.ts.md)

## Linked from

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

## Source

```typescript
import type { AstNode } from "#types/context.types";
import { isNode } from "#core/predicates/context.fragment.predicate";

const walkChildren = function walkChildren(
    value: unknown,
    visit: (n: AstNode) => void,
    recurse: (node: AstNode, visit: (n: AstNode) => void) => void,
): void {
    const items = Array.isArray(value) ? value : [value];
    for (const item of items) {
        if (isNode(item)) {
            recurse(item, visit);
        }
    }
};

export const walk = function walk(node: AstNode, visit: (n: AstNode) => void): void {
    visit(node);
    for (const key of Object.keys(node)) {
        if (key !== "parent") {
            walkChildren(node[key], visit, walk);
        }
    }
};
```
