UNPKG

typescript

Version:

TypeScript is a language for application scale JavaScript development

50 lines 2.89 kB
import type { Node, NodeArray } from "./ast.ts"; /** * A callback that receives a node and returns a visited node (or undefined to remove it). */ export type Visitor = (node: Node) => Node | undefined; /** * Visits a Node using the supplied visitor, possibly returning a new Node in its place. * * - If the input node is undefined, then the output is undefined. * - If the visitor returns undefined, then the output is undefined. * - If the output node is not undefined, then it will satisfy the test function. * - In order to obtain a return type that is more specific than `Node`, a test * function must be provided, and that function must be a type predicate. * * @param node The Node to visit. * @param visitor The callback used to visit the Node. * @param test A callback to execute to verify the Node is valid. */ export declare function visitNode<TIn extends Node | undefined, TOut extends Node>(node: TIn, visitor: Visitor, test: (node: Node) => node is TOut): TOut | (TIn & undefined); /** * Visits a Node using the supplied visitor, possibly returning a new Node in its place. * * - If the input node is undefined, then the output is undefined. * - If the visitor returns undefined, then the output is undefined. * * @param node The Node to visit. * @param visitor The callback used to visit the Node. * @param test An optional callback to execute to verify the Node is valid. */ export declare function visitNode<TIn extends Node | undefined>(node: TIn, visitor: Visitor, test?: (node: Node) => boolean): Node | (TIn & undefined); /** * Visits a NodeArray using the supplied visitor, possibly returning a new NodeArray in its place. * * - If the input node array is undefined, the output is undefined. * - If the visitor returns undefined for a node, that node is dropped from the result. */ export declare function visitNodes<T extends Node>(nodes: NodeArray<T>, visitor: Visitor): NodeArray<T>; export declare function visitNodes<T extends Node>(nodes: NodeArray<T> | undefined, visitor: Visitor): NodeArray<T> | undefined; export declare function visitNodesArray<T extends Node>(nodes: readonly T[], visitor: Visitor): readonly T[]; export declare function visitNodesArray<T extends Node>(nodes: readonly T[] | undefined, visitor: Visitor): readonly T[] | undefined; /** * Visits each child of a Node using the supplied visitor, possibly returning a new Node of the same kind in its place. * * @param node The Node whose children will be visited. * @param visitor The callback used to visit each child. * @returns The original node if no children changed, or a new node with visited children. */ export declare function visitEachChild<T extends Node>(node: T, visitor: Visitor): T; export declare function visitEachChild<T extends Node>(node: T | undefined, visitor: Visitor): T | undefined; //# sourceMappingURL=visitor.generated.d.ts.map