import { Result, ParentInfo } from "./visitor"; import { SuperNode } from './transformer'; import { Class } from './types'; declare type VisitorExtension = (next: VisitorInvocation) => Result; interface VisitorInit { value: {}; ast: SuperNode; path: string; decorators: any[]; parent?: ParentInfo; } interface VisitorInvocation extends VisitorInit { readonly type: Class; proceed(): Result; } declare class VisitorInvocationImpl implements VisitorInvocation { private visitor; value: {}; ast: SuperNode; path: string; decorators: any[]; parent?: ParentInfo; get type(): Class; constructor(visitor: (i: VisitorInvocation) => Result, init: VisitorInit); proceed(): Result; } declare function pipe(extensions: VisitorExtension[], last: VisitorInvocation): VisitorInvocation; export { pipe, VisitorExtension, VisitorInvocation, VisitorInvocationImpl };