@glimmer/syntax
Version:
35 lines (34 loc) • 1.44 kB
TypeScript
import type * as ASTv1 from '../v1/api';
import type { VisitorKey } from '../v1/visitor-keys';
import type WalkerPath from './path';
export interface FullNodeTraversal<N extends ASTv1.Node> {
enter?(node: N, path: WalkerPath<N>): void;
exit?(node: N, path: WalkerPath<N>): void;
keys?: KeysVisitor<N>;
}
export type NodeHandler<N extends ASTv1.Node> = (node: N, path: WalkerPath<N>) => ASTv1.Node | ASTv1.Node[] | undefined | void;
export type NodeTraversal<N extends ASTv1.Node> = FullNodeTraversal<N> | NodeHandler<N>;
export type NodeVisitor = {
[P in keyof ASTv1.Nodes]?: NodeTraversal<ASTv1.Nodes[P]>;
} & {
All?: NodeTraversal<ASTv1.Node>;
/**
* @deprecated use Template or Block instead
*/
Program?: NodeTraversal<ASTv1.Template | ASTv1.Block>;
};
export interface FullKeyTraversal<N extends ASTv1.Node, K extends string> {
enter?(node: N, key: K): void;
exit?(node: N, key: K): void;
}
export type KeyHandler<N extends ASTv1.Node, K extends VisitorKey<N>> = (node: N, key: K) => void;
export type KeyTraversal<N extends ASTv1.Node, K extends VisitorKey<N>> = FullKeyTraversal<N, K> | KeyHandler<N, K>;
export type KeysVisitor<N extends ASTv1.Node> = {
[P in VisitorKey<N>]?: KeyTraversal<N, P>;
} & {
All?: KeyTraversal<N, VisitorKey<N>>;
/**
* @deprecated use Template or Block instead
*/
Program?: KeyTraversal<ASTv1.Template | ASTv1.Block, 'body'>;
};