core/visitors/context.fragment.visitor.ts

core/visitors/context.fragment.visitor.ts is a file in GovLab Quality. 22 lines of code and 3 definitions.

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);
        }
    }
};