1 | import * as ASTv1 from '../v1/api';
|
2 | import { VisitorKey } from '../v1/visitor-keys';
|
3 | import WalkerPath from './path';
|
4 | export interface FullNodeTraversal<N extends ASTv1.Node> {
|
5 | enter?(node: N, path: WalkerPath<N>): void;
|
6 | exit?(node: N, path: WalkerPath<N>): void;
|
7 | keys?: KeysVisitor<N>;
|
8 | }
|
9 | export declare type NodeHandler<N extends ASTv1.Node> = (node: N, path: WalkerPath<N>) => void;
|
10 | export declare type NodeTraversal<N extends ASTv1.Node> = FullNodeTraversal<N> | NodeHandler<N>;
|
11 | export declare type NodeVisitor = {
|
12 | [P in keyof ASTv1.Nodes]?: NodeTraversal<ASTv1.Nodes[P]>;
|
13 | } & {
|
14 | All?: NodeTraversal<ASTv1.Node>;
|
15 | };
|
16 | export interface FullKeyTraversal<N extends ASTv1.Node, K extends string> {
|
17 | enter?(node: N, key: K): void;
|
18 | exit?(node: N, key: K): void;
|
19 | }
|
20 | export declare type KeyHandler<N extends ASTv1.Node, K extends VisitorKey<N>> = (node: N, key: K) => void;
|
21 | export declare type KeyTraversal<N extends ASTv1.Node, K extends VisitorKey<N>> = FullKeyTraversal<N, K> | KeyHandler<N, K>;
|
22 | export declare type KeysVisitor<N extends ASTv1.Node> = {
|
23 | [P in VisitorKey<N>]?: KeyTraversal<N, P>;
|
24 | } & {
|
25 | All?: KeyTraversal<N, VisitorKey<N>>;
|
26 | };
|
27 |
|
\ | No newline at end of file |