UNPKG

1.44 kBTypeScriptView Raw
1import type * as ASTv1 from '../v1/api';
2import type { VisitorKey } from '../v1/visitor-keys';
3import type WalkerPath from './path';
4export 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}
9export type NodeHandler<N extends ASTv1.Node> = (node: N, path: WalkerPath<N>) => ASTv1.Node | ASTv1.Node[] | undefined | void;
10export type NodeTraversal<N extends ASTv1.Node> = FullNodeTraversal<N> | NodeHandler<N>;
11export type NodeVisitor = {
12 [P in keyof ASTv1.Nodes]?: NodeTraversal<ASTv1.Nodes[P]>;
13} & {
14 All?: NodeTraversal<ASTv1.Node>;
15 /**
16 * @deprecated use Template or Block instead
17 */
18 Program?: NodeTraversal<ASTv1.Template | ASTv1.Block>;
19};
20export interface FullKeyTraversal<N extends ASTv1.Node, K extends string> {
21 enter?(node: N, key: K): void;
22 exit?(node: N, key: K): void;
23}
24export type KeyHandler<N extends ASTv1.Node, K extends VisitorKey<N>> = (node: N, key: K) => void;
25export type KeyTraversal<N extends ASTv1.Node, K extends VisitorKey<N>> = FullKeyTraversal<N, K> | KeyHandler<N, K>;
26export type KeysVisitor<N extends ASTv1.Node> = {
27 [P in VisitorKey<N>]?: KeyTraversal<N, P>;
28} & {
29 All?: KeyTraversal<N, VisitorKey<N>>;
30 /**
31 * @deprecated use Template or Block instead
32 */
33 Program?: KeyTraversal<ASTv1.Template | ASTv1.Block, 'body'>;
34};