import { Change, Prefix, EvaluationContext } from "./runtime"; import * as Runtime from "./runtime"; import { Renderer } from "../microReact"; import { PerformanceTracker } from "./performance"; export declare enum TraceNode { Join = 0, Choose = 1, Union = 2, LinearFlow = 3, BinaryJoin = 4, AntiJoin = 5, AntiJoinPresolvedRight = 6, Aggregate = 7, AggregateOuterLookup = 8, Output = 9, Watch = 10 } export declare enum TraceFrameType { Program = 0, Transaction = 1, Input = 2, Block = 3, Node = 4, MaybeOutput = 5, MaybeExternalInput = 6 } export interface Frame { type: TraceFrameType; } export interface ProgramFrame extends Frame { type: TraceFrameType.Program; transactions: TransactionFrame[]; } export interface TransactionFrame extends Frame { type: TraceFrameType.Transaction; id: number; externalInputs: any[]; inputs: any[]; } export interface BlockFrame extends Frame { type: TraceFrameType.Block; name: string; nodes: any[]; } export interface InputFrame extends Frame { type: TraceFrameType.Input; input: Change; blocks: any[]; } export declare class Tracer { context: EvaluationContext; stack: any[]; _currentInput: Change | undefined; inputsToOutputs: any; outputsToInputs: any; eToChange: any; renderer: Renderer; activeBlock: string; tracker: PerformanceTracker; constructor(context: EvaluationContext, shouldDraw?: boolean); changeKey(change: Change): string; current(): any; transaction(id: number): void; frame(commits: Change[]): void; indexChange(change: Change): void; input(input: Change): void; block(name: string): void; node(node: Runtime.Node, inputPrefix: Prefix): void; capturePrefix(prefix: Prefix): void; _mapOutput(output: Change): void; maybeOutput(change: Change): void; postDistinct(): void; output(output: Change): void; commit(commit: Change): void; distinctCheck(): boolean; pop(type: TraceFrameType): void; activeSearch: string; activeInput: Change | undefined; draw(): void; $interface: () => any; makeSearch: (query: string) => (input: Change) => boolean; inSearch: (input: Change) => boolean; $searcher: (program: ProgramFrame) => any; getInputFrame(program: ProgramFrame, input: Change): any; $visualization: (program: ProgramFrame) => any; $block: (block: any) => any; $node: (node: any) => any; $prefix: (prefix: Prefix) => any; setLink: (e: any, elem: any) => void; $changeLink: (change: Change) => any; } export declare class NoopTracer extends Tracer { context: EvaluationContext; activeBlock: string; constructor(context: EvaluationContext); transaction(id: number): void; frame(commits: Change[]): void; input(input: Change): void; block(name: string): void; node(node: Runtime.Node, inputPrefix: Prefix): void; capturePrefix(prefix: Prefix): void; maybeOutput(change: Change): void; postDistinct(): void; output(output: Change): void; commit(commit: Change): void; distinctCheck(): boolean; pop(type: TraceFrameType): void; }