import { ResolvedCompilerConfig } from '@tevm/config';
import { ModuleInfo as ModuleInfo$1 } from '@tevm/resolutions';
import { SolcContractOutput, SolcOutput, SolcInputDescription } from '@tevm/solc';
import { Node } from 'solidity-ast/node.js';

type ResolvedArtifacts$1 = {
    artifacts: Artifacts$1;
    modules: Record<string, ModuleInfo$1>;
    asts?: Record<string, Node> | undefined;
    solcInput?: SolcInputDescription | undefined;
    solcOutput?: SolcOutput | undefined;
};
type ResolveArtifacts = (solFile: string, basedir: string, logger: Logger$1, config: ResolvedCompilerConfig, includeAst: boolean, includeBytecode: boolean, fao: FileAccessObject$1, solc: any) => Promise<ResolvedArtifacts$1>;
type ResolveArtifactsSync = (solFile: string, basedir: string, logger: Logger$1, config: ResolvedCompilerConfig, includeAst: boolean, includeBytecode: boolean, fao: FileAccessObject$1, solc: any) => ResolvedArtifacts$1;
type FileAccessObject$1 = {
    readFile: (path: string, encoding: BufferEncoding) => Promise<string>;
    readFileSync: (path: string, encoding: BufferEncoding) => string;
    existsSync: (path: string) => boolean;
    exists: (path: string) => Promise<boolean>;
};
type Logger$1 = {
    info: (...messages: string[]) => void;
    error: (...message: string[]) => void;
    warn: (...message: string[]) => void;
    log: (...message: string[]) => void;
};

type CompiledContracts$1<TIncludeAsts extends boolean = boolean> = {
    artifacts: SolcOutput['contracts'][string] | undefined;
    modules: Record<string, ModuleInfo$1>;
    asts: TIncludeAsts extends true ? Record<string, Node> : undefined;
    solcInput?: SolcInputDescription;
    solcOutput?: SolcOutput;
};
type Artifacts$1 = Record<string, Pick<SolcContractOutput, 'abi' | 'userdoc' | 'evm'> & {
    contractName: string;
}>;

/**
 * Resolves artifacts with solc asyncronously
 * @type {import('./types.js').ResolveArtifacts}
 */
declare const resolveArtifacts: ResolveArtifacts;

/**
 * @type {import('./types.js').ResolveArtifactsSync}
 */
declare const resolveArtifactsSync: ResolveArtifactsSync;

/**
 * ./types.ts
 */
type Artifacts = Artifacts$1;
/**
 * ./types.ts
 */
type CompiledContracts = CompiledContracts$1;
/**
 * ./types.ts
 */
type FileAccessObject = FileAccessObject$1;
/**
 * ./types.ts
 */
type Logger = Logger$1;
/**
 * ./types.ts
 */
type ModuleInfo = ModuleInfo$1;
/**
 * ./types.ts
 */
type ResolvedArtifacts = ResolvedArtifacts$1;

export { type Artifacts, type CompiledContracts, type FileAccessObject, type Logger, type ModuleInfo, type ResolvedArtifacts, resolveArtifacts, resolveArtifactsSync };
