import { Number2, PolyDictionary } from '../../../../types/GlobalTypes';
import { TypedNode } from '../../../nodes/_Base';
import { NodeContext } from '../../../poly/NodeContext';
import { ParamJsonExporterData } from '../../../nodes/utils/io/IOController';
import { ParamType } from '../../../poly/ParamType';
import { BaseConnectionPointData } from '../../../nodes/utils/io/connections/_Base';
interface NamedInputData {
    index: number;
    node: string;
    output: string;
}
declare type IndexedInputData = string | null;
export declare type InputData = NamedInputData | IndexedInputData;
interface FlagsData {
    bypass?: boolean;
    display?: boolean;
    optimize?: boolean;
}
export interface IoConnectionPointsData {
    in?: BaseConnectionPointData[];
    out?: BaseConnectionPointData[];
}
export interface NodeJsonExporterData {
    type: string;
    nodes?: PolyDictionary<NodeJsonExporterData>;
    children_context?: NodeContext;
    params?: PolyDictionary<ParamJsonExporterData<ParamType>>;
    inputs?: InputData[];
    connection_points?: IoConnectionPointsData;
    selection?: string[];
    flags?: FlagsData;
    cloned_state_overriden?: boolean;
    persisted_config?: object;
}
export interface NodeJsonExporterUIData {
    pos?: Number2;
    comment?: string;
    nodes: PolyDictionary<NodeJsonExporterUIData>;
}
declare type BaseNodeTypeWithIO = TypedNode<NodeContext, any>;
export interface DataRequestOption {
    showPolyNodesData?: boolean;
}
export declare class NodeJsonExporter<T extends BaseNodeTypeWithIO> {
    protected _node: T;
    private _data;
    constructor(_node: T);
    data(options?: DataRequestOption): NodeJsonExporterData;
    ui_data(options?: DataRequestOption): NodeJsonExporterUIData;
    protected ui_data_without_children(): NodeJsonExporterUIData;
    private is_root;
    protected inputs_data(): InputData[];
    protected connection_points_data(): IoConnectionPointsData | undefined;
    protected params_data(): PolyDictionary<any>;
    protected nodes_data(options?: DataRequestOption): PolyDictionary<NodeJsonExporterData>;
    protected add_custom(): void;
}
export {};
