import { LoadHookContext } from 'module' import { Dict } from 'cosmokit' type ModuleFormat = 'builtin' | 'commonjs' | 'json' | 'module' | 'wasm' type ModuleSource = string | ArrayBuffer interface ResolveResult { format: ModuleFormat url: string } interface LoadResult { format: ModuleFormat source?: ModuleSource } type LoadCacheData = ModuleJob // | Function interface LoadCache extends Omit>, 'get' | 'set' | 'has'> { get(url: string, type?: string): LoadCacheData | undefined set(url: string, type?: string, job?: LoadCacheData): this has(url: string, type?: string): boolean } export interface ModuleWrap { url: string getNamespace(): any } export interface ModuleJob { url: string loader: ModuleLoader module?: ModuleWrap importAttributes: ImportAttributes linked: Promise instantiate(): Promise run(): Promise<{ module: ModuleWrap }> } export interface ModuleLoader { loadCache: LoadCache import(specifier: string, parentURL: string, importAttributes: ImportAttributes): Promise register(specifier: string | URL, parentURL?: string | URL, data?: any, transferList?: any[]): void getModuleJob(specifier: string, parentURL: string, importAttributes: ImportAttributes): Promise getModuleJobSync(specifier: string, parentURL: string, importAttributes: ImportAttributes): ModuleJob resolve(originalSpecifier: string, parentURL: string, importAttributes: ImportAttributes): Promise resolveSync(originalSpecifier: string, parentURL: string, importAttributes: ImportAttributes): ResolveResult load(specifier: string, context: Pick): Promise loadSync(specifier: string, context: Pick): LoadResult }