import { EventFragment, FunctionFragment } from '@ethersproject/abi';
export interface FunctionInfo {
    name: string;
    signature: string;
    fragment: FunctionFragment;
}
export interface ContractInfo {
    name: string;
    abi: any;
    selectors: Set<string>;
    functions: Map<string, FunctionInfo>;
    events: Map<string, EventFragment>;
}
export interface FunctionMetadata {
    name: string;
    selector: string;
    signature: string;
    fragment: FunctionFragment;
    params: {
        name: string;
        type: string;
        indexed?: boolean;
    }[];
    returns: {
        type: string;
        name?: string;
    }[];
    stateMutability: 'pure' | 'view' | 'nonpayable' | 'payable';
    visibility: 'external' | 'public' | 'internal' | 'private';
    facetAddress: string;
}
export interface FunctionParameter {
    name: string;
    type: string;
    indexed?: boolean;
    components?: FunctionParameter[];
}
export interface EnhancedFunctionInfo extends FunctionInfo {
    fullName: string;
    selector: string;
    inputs: FunctionParameter[];
    outputs: FunctionParameter[];
    mutability: 'pure' | 'view' | 'nonpayable' | 'payable';
    visibility: 'external' | 'public' | 'internal' | 'private';
}
export interface FacetEvent {
    name: string;
    signature: string;
    inputs: FunctionParameter[];
    anonymous: boolean;
    fragment: EventFragment;
}
export interface FacetInfo extends ContractInfo {
    path: string;
    enhancedFunctions: Map<string, EnhancedFunctionInfo>;
    enhancedEvents: Map<string, FacetEvent>;
}
export interface ProcessedContract {
    facetInfo: FacetInfo;
    timestamp: number;
    metadata: {
        lastProcessed: Date;
        version: string;
        functionCount: number;
        eventCount: number;
    };
}
export declare class TypechainProcessorError extends Error {
    readonly code: string;
    constructor(message: string, code: string);
}
export interface TypechainContractInfo {
    name: string;
    path: string;
    functions: {
        [selector: string]: EnhancedFunctionInfo;
    };
}
export interface CacheEntry {
    data: FacetInfo;
    timestamp: number;
    version: string;
}
export interface CacheMetadata {
    lastUpdate: Date;
    version: string;
    entries: number;
}
export interface SelectorMapping {
    facetName: string;
    functionInfo: EnhancedFunctionInfo;
}
export interface OptimizedLookup {
    selectorToFacet: Map<string, SelectorMapping>;
    facetToSelectors: Map<string, Set<string>>;
    metadata: CacheMetadata;
}
export interface FunctionSelectorInfo {
    facetName: string;
    functionInfo: EnhancedFunctionInfo;
}
export type MapToObject<T> = {
    [key: string]: T;
};
export type ObjectToMap<T> = Map<string, T>;
//# sourceMappingURL=types.d.ts.map