import { GraphMoveSubGraphData } from '../../Class/Graph/interface';
import { GraphPinSpec, GraphPinsSpec, GraphPlugOuterSpec, GraphSubPinSpec, PinSpec, Spec, Specs } from '../../types';
import { Dict } from '../../types/Dict';
import { GraphMergeSpec } from '../../types/GraphMergeSpec';
import { GraphMergeUnitSpec } from '../../types/GraphMergeUnitSpec';
import { GraphMergesSpec } from '../../types/GraphMergesSpec';
import { GraphSpec } from '../../types/GraphSpec';
import { GraphUnitMerges } from '../../types/GraphUnitMerges';
import { GraphUnitPlugs } from '../../types/GraphUnitPlugs';
import { GraphUnitSpec } from '../../types/GraphUnitSpec';
import { IO } from '../../types/IO';
import { IOOf } from '../../types/IOOf';
export declare function isValidSpecName(name: string): boolean;
export declare function getPinNodeId(unitId: string, type: IO, pinId: string): string;
export declare function isUnitPinConstant(spec: GraphSpec, unitId: string, type: IO, pinId: string): boolean;
export declare const isPinRef: ({ type, pinId }: {
    type: IO;
    pinId: string;
}, spec: Spec) => any;
export declare function getInputNodeId(unitId: string, pinId: string): string;
export declare function getOutputNodeId(unitId: string, pinId: string): string;
export declare function getMergePinNodeId(mergeId: string, type: IO): string;
export declare function opposite(kind: IO): IO;
export declare const findFirstMergePin: (merge: GraphMergeSpec, type: IO) => {
    unitId: string;
    pinId: string;
} | undefined;
export declare const getExposedPinSpecs: (graph: GraphSpec) => {
    input: GraphPinsSpec;
    output: GraphPinsSpec;
};
export declare const getExposePinSpec: (graph: GraphSpec, type: IO, pinId: string) => any;
export declare const getUnitExposedPins: (graph: GraphSpec, unitId: string) => IOOf<Dict<{
    type: IO;
    pinId: string;
    subPinId: string;
}>>;
export declare const getPinSpec: (graph: GraphSpec, type: IO, pinId: string) => GraphPinSpec;
export declare const getPlugSpecs: (spec: GraphSpec) => {
    input: {};
    output: {};
};
export declare const getSubPinSpec: (graph: GraphSpec, type: IO, pinId: string, subPinId: string) => GraphSubPinSpec;
export declare const findPinMerge: (spec: GraphSpec, unitId: string, type: IO, pinId: string) => string | undefined;
export declare const getPlugCount: (spec: GraphSpec, type: IO, pinId: string) => number;
export declare const getMergePinCount: (merge: GraphMergeSpec) => number;
export declare const getMergePinTypeCount: (merge: GraphMergeSpec, type: IO) => number;
export declare const getMergeTypePinCount: (merge: GraphMergeSpec, type: IO) => number;
export declare const getMergeUnitPinCount: (mergeUnit: GraphMergeUnitSpec) => number;
export declare const getMergeUnitTypePinCount: (mergeUnit: GraphMergeUnitSpec, type: IO) => number;
export declare const forEachPinOnMerges: <T>(merges: Dict<Dict<IOOf<Dict<T>>>>, callback: (mergeId: string, unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachPinOnMerge: <T>(merge: Dict<IOOf<Dict<T>>>, callback: (unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachInputOnMerge: <T>(merge: Dict<IOOf<Dict<T>>>, callback: (unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachOutputOnMerge: <T>(merge: Dict<IOOf<Dict<T>>>, callback: (unitId: string, type: IO, pinId: string, data: T) => void) => void;
export declare const forEachSpecPin: (spec: Spec, callback: (type: IO, pinId: string, pinSpec: PinSpec) => void) => void;
export declare const forEachGraphSpecPin: (spec: GraphSpec, callback: (type: IO, pinId: string, pinSpec: GraphPinSpec) => void) => void;
export declare const forEachGraphSpecPinPlug: (spec: GraphSpec, callback: (type: IO, pinId: string, pinSpec: GraphPinSpec, subPinId: string, subPinSpec: GraphSubPinSpec) => void) => void;
export declare const forEachGraphSpecPinType: (spec: GraphSpec, type: IO, callback: (type: IO, pinId: string, pinSpec: GraphPinSpec) => void) => void;
export declare const forEachGraphSpecPinOfType: (spec: GraphSpec, type: IO, callback: (pinId: string, pinSpec: GraphPinSpec) => void) => void;
export declare const hasUnit: (spec: GraphSpec, unitId: string) => boolean;
export declare const hasMerge: (spec: GraphSpec, mergeId: string) => boolean;
export declare const hasMergePin: (spec: GraphSpec, mergeId: string, unitId: string, type: IO, pinId: string) => boolean;
export declare const hasPinNamed: (spec: Spec, type: IO, pinId: string) => boolean;
export declare const hasPlug: (spec: GraphSpec, type: IO, pinId: string, subPinId: string) => boolean;
export declare const findMergePlug: (spec: GraphSpec, type: IO, mergeId: string) => GraphPlugOuterSpec | null;
export declare const findMergePlugs: (spec: GraphSpec, mergeId: string) => IOOf<GraphPlugOuterSpec | null>;
export declare const findUnitPinPlug: (spec: GraphSpec, unitId: string, type: IO, pinId: string) => GraphPlugOuterSpec | null;
export declare function findUnitPlugs(spec: GraphSpec, unitId: string): GraphUnitPlugs;
export declare const findSpecAtPath: (specs: Specs, spec: Spec, path: string[]) => GraphSpec;
export declare const findUnitAtPath: (specs: Specs, spec: Spec, path: string[], unit?: GraphUnitSpec) => GraphUnitSpec;
export declare const shouldExposePin: (type: IO, pinId: string, pinSpec: GraphPinSpec, subPinId: string, subPinSpec: GraphSubPinSpec, merged: boolean, outerPlug?: GraphPlugOuterSpec | null) => boolean;
export declare function isSubPinSpecRef(specs: Specs, spec: GraphSpec, type: IO, subPinSpec: GraphSubPinSpec): boolean;
export declare function isPinSpecRef(specs: Specs, spec: GraphSpec, type: IO, pinSpec: any): boolean;
export declare function makeFullSpecCollapseMap(unitId: string, spec: GraphSpec, unitIdMap: Dict<string>, mergeIdMap: Dict<string>, plugIdMap: IOOf<Dict<Dict<string>>>, { getUnitMerges, getUnitPlugs, getMerge, getPinMergeId, }: {
    getUnitMerges: (unitId: string) => GraphUnitMerges;
    getUnitPlugs: (unitId: string) => GraphUnitPlugs;
    getMerge: (mergeId: string) => GraphMergeSpec;
    getPinMergeId: (unitId: string, type: IO, pinId: string) => string;
}): GraphMoveSubGraphData;
export declare function getUnitMergesSpec(spec: GraphSpec, unitId: string): GraphMergesSpec;
export declare function getUnitPinDatum(spec: GraphSpec, unitId: string, type: IO, pinId: string): any;
export declare function getUnitInputDatum(spec: GraphSpec, unitId: string, pinId: string): any;
export declare function isEmptyMerge(mergeSpec: GraphMergeSpec): boolean;
