/// import type { SolcInputDescription, SolcOutput } from './solc/solc'; import type { ResolvedConfig } from '@evmts/config'; import type { Node } from 'solidity-ast/node'; export type BundlerResult = { code: string; modules: Record<'string', ModuleInfo>; solcInput: SolcInputDescription; solcOutput: SolcOutput; asts?: Record | undefined; }; export type FileAccessObject = { readFile: (path: string, encoding: BufferEncoding) => Promise; readFileSync: (path: string, encoding: BufferEncoding) => string; existsSync: (path: string) => boolean; }; export type AsyncBundlerResult = (module: string, basedir: string, includeAst: boolean) => Promise; export type SyncBundlerResult = (module: string, basedir: string, includeAst: boolean) => BundlerResult; export type Bundler = (config: ResolvedConfig, logger: Logger, fao: FileAccessObject) => { /** * The name of the plugin. */ name: string; /** * The configuration of the plugin. */ config: ResolvedConfig; include?: string[]; exclude?: string[]; /** * Resolves .d.ts representation of the solidity module */ resolveDts: AsyncBundlerResult; /** * Resolves .d.ts representation of the solidity module */ resolveDtsSync: SyncBundlerResult; /** * Resolves typescript representation of the solidity module */ resolveTsModule: AsyncBundlerResult; /** * Resolves typescript representation of the solidity module */ resolveTsModuleSync: SyncBundlerResult; /** * Resolves cjs representation of the solidity module */ resolveCjsModule: AsyncBundlerResult; /** * Resolves cjs representation of the solidity module */ resolveCjsModuleSync: SyncBundlerResult; /** * Resolves the esm representation of the solidity module */ resolveEsmModule: AsyncBundlerResult; /** * Resolves the esm representation of the solidity module */ resolveEsmModuleSync: SyncBundlerResult; }; export type Logger = { info: (...messages: string[]) => void; error: (...message: string[]) => void; warn: (...message: string[]) => void; log: (...message: string[]) => void; }; /** * Copied from rollup (kinda) * @see https://rollupjs.org/plugin-development/#this-getmoduleinfo */ export interface ModuleInfo { id: string; rawCode: string | null; code: string | null; importedIds: string[]; resolutions: ModuleInfo[]; } export type SolidityResolver = (config: ResolvedConfig, logger: Logger) => { /** * The name of the plugin. */ name: string; /** * The configuration of the plugin. */ config: ResolvedConfig; include?: string[]; exclude?: string[]; /** * Resolves .d.ts representation of the solidity module */ resolveDts: (module: string, basedir: string) => Promise; /** * Resolves .d.ts representation of the solidity module */ resolveDtsSync: (module: string, basedir: string) => BundlerResult; /** * Resolves typescript representation of the solidity module */ resolveTsModule: (module: string, basedir: string) => Promise; /** * Resolves typescript representation of the solidity module */ resolveTsModuleSync: (module: string, basedir: string) => BundlerResult; /** * Resolves cjs representation of the solidity module */ resolveCjsModule: (module: string, basedir: string) => Promise; /** * Resolves cjs representation of the solidity module */ resolveCjsModuleSync: (module: string, basedir: string) => BundlerResult; /** * Resolves the esm representation of the solidity module */ resolveEsmModule: (module: string, basedir: string) => Promise; /** * Resolves the esm representation of the solidity module */ resolveEsmModuleSync: (module: string, basedir: string) => BundlerResult; };