/// <reference types="emscripten" />
import type { RPtr, RTypeNumber } from './robj';
import type { RObject, RList } from './robj-worker';
import type { EvalROptions } from './webr-chan';
import type { UnwindProtectException } from './utils-r';
import type { ChannelWorker } from './chan/channel';
import type { FSMountOptions } from './webr-main';
export interface Module extends EmscriptenModule {
    FS: typeof FS & {
        _mount: typeof FS.mount;
        mkdirTree(path: string): void;
        filesystems: {
            [key: string]: Emscripten.FileSystemType;
        };
    };
    ENV: {
        [key: string]: string;
    };
    GOT: {
        [key: string]: {
            required: boolean;
            value: number;
        };
    };
    createLazyFilesystem: () => void;
    monitorRunDependencies: (n: number) => void;
    websocket?: {
        url?: string;
        WebSocket?: typeof WebSocket;
        subprotocol?: string;
    };
    noImageDecoding: boolean;
    noAudioDecoding: boolean;
    noWasmDecoding: boolean;
    downloadFileContent: (URL: string, headers?: Array<string>) => {
        status: number;
        response: string | ArrayBuffer;
    };
    mountImageUrl: (url: string, mountpoint: string) => void;
    mountImagePath: (path: string, mountpoint: string) => void;
    mountDriveFS: (mountpoint: string, options: FSMountOptions<'DRIVEFS'>) => void;
    allocateUTF8: typeof allocateUTF8;
    allocateUTF8OnStack: typeof allocateUTF8OnStack;
    getValue: typeof getValue;
    setValue: typeof setValue;
    UTF8ToString: typeof UTF8ToString;
    callMain: (args: string[]) => void;
    getWasmTableEntry: (entry: number) => (...args: any[]) => RPtr;
    _ATTRIB: (ptr: RPtr) => RPtr;
    _CAR: (ptr: RPtr) => RPtr;
    _CDR: (ptr: RPtr) => RPtr;
    _CLOENV: (ptr: RPtr) => RPtr;
    _COMPLEX: (ptr: RPtr) => RPtr;
    _FRAME: (ptr: RPtr) => RPtr;
    _INTEGER: (ptr: RPtr) => RPtr;
    _INTERNAL: (ptr: RPtr) => RPtr;
    _LENGTH: (ptr: RPtr) => number;
    _LOGICAL: (ptr: RPtr) => RPtr;
    _PRINTNAME: (ptr: RPtr) => RPtr;
    _R_CHAR: (ptr: RPtr) => RPtr;
    _RAW: (ptr: RPtr) => RPtr;
    _REAL: (ptr: RPtr) => RPtr;
    _SETCAR: (x: RPtr, y: RPtr) => void;
    _STRING_ELT: (ptr: RPtr, idx: number) => RPtr;
    _STRING_PTR: (ptr: RPtr) => RPtr;
    _SYMVALUE: (ptr: RPtr) => RPtr;
    _TAG: (ptr: RPtr) => RPtr;
    _TYPEOF: (ptr: RPtr) => RPtr;
    _VECTOR_ELT: (ptr: RPtr, idx: number) => RPtr;
    _R_lsInternal3: (env: RPtr, all: number, sorted: number) => RPtr;
    _R_MakeExternalPtr: (p: number, tag: RPtr, prot: RPtr) => RPtr;
    _R_NewEnv: (enclos: RPtr, hash: number, size: number) => RPtr;
    _R_ParseEvalString: (code: number, env: RPtr) => RPtr;
    _R_PreserveObject: (ptr: RPtr) => void;
    _R_ReleaseObject: (ptr: RPtr) => void;
    _R_ReplDLLinit: () => void;
    _R_ReplDLLdo1: () => number;
    _Rf_ScalarReal: (n: number) => RPtr;
    _Rf_ScalarLogical: (l: number) => RPtr;
    _Rf_ScalarInteger: (n: number) => RPtr;
    _Rf_ScalarString: (s: string) => RPtr;
    _Rf_allocList: (len: number) => RPtr;
    _Rf_allocVector: (type: RTypeNumber, len: number) => RPtr;
    _Rf_defineVar: (symbol: RPtr, value: RPtr, env: RPtr) => void;
    _Rf_error: (msg: EmPtr) => void;
    _Rf_eval: (call: RPtr, env: RPtr) => RPtr;
    _Rf_findVarInFrame: (rho: RPtr, symbol: RPtr) => RPtr;
    _Rf_listAppend: (source: RPtr, target: RPtr) => RPtr;
    _Rf_getAttrib: (ptr1: RPtr, ptr2: RPtr) => RPtr;
    _Rf_initialize_R: (argc: number, argv: RPtr) => void;
    _Rf_install: (ptr: number) => RPtr;
    _Rf_installTrChar: (name: RPtr) => RPtr;
    _Rf_lang1: (ptr1: RPtr) => RPtr;
    _Rf_lang2: (ptr1: RPtr, ptr2: RPtr) => RPtr;
    _Rf_lang3: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;
    _Rf_lang4: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr) => RPtr;
    _Rf_lang5: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr) => RPtr;
    _Rf_lang6: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr, ptr6: RPtr) => RPtr;
    _Rf_mkChar: (string: number) => RPtr;
    _Rf_mkCharCE: (string: number, encoding: number) => RPtr;
    _Rf_mkString: (ptr: number) => RPtr;
    _Rf_onintr: () => void;
    _Rf_protect: (ptr: RPtr) => RPtr;
    _Rf_translateCharUTF8: (ptr: RPtr) => RPtr;
    _R_ContinueUnwind: (cont: RPtr) => never;
    _R_ProtectWithIndex: (ptr1: RPtr, ptr2: RPtr) => void;
    _R_Reprotect: (ptr1: RPtr, ptr2: RPtr) => void;
    _Rf_setAttrib: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;
    _Rf_unprotect: (n: number) => void;
    _Rf_unprotect_ptr: (ptr: RPtr) => void;
    _DLLbuf: RPtr;
    _DLLbufp: RPtr;
    _R_BaseEnv: RPtr;
    _R_BracketSymbol: RPtr;
    _R_Bracket2Symbol: RPtr;
    _R_DollarSymbol: RPtr;
    _R_EmptyEnv: RPtr;
    _R_FalseValue: RPtr;
    _R_GlobalEnv: RPtr;
    _R_Interactive: RPtr;
    _R_NaInt: RPtr;
    _R_NaReal: RPtr;
    _R_NaString: RPtr;
    _R_LogicalNAValue: RPtr;
    _R_NilValue: RPtr;
    _R_TrueValue: RPtr;
    _R_NamesSymbol: RPtr;
    _R_UnboundValue: RPtr;
    _SET_STRING_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;
    _SET_VECTOR_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;
    _setup_Rmainloop: () => void;
    _strcpy: (dest: RPtr, src: RPtr) => number;
    _vmaxget: () => number;
    _vmaxset: (ptr: number) => void;
    webr: {
        UnwindProtectException: typeof UnwindProtectException;
        channel: ChannelWorker | undefined;
        canvas: {
            [key: number]: {
                ctx: OffscreenCanvasRenderingContext2D;
                offscreen: OffscreenCanvas;
                transmit: boolean;
            };
        };
        readConsole: () => number;
        setPrompt: (prompt: string) => void;
        resolveInit: () => void;
        handleEvents: () => void;
        dataViewer: (data: RPtr, title: string) => void;
        evalJs: (code: RPtr) => unknown;
        evalR: (expr: string | RObject, options?: EvalROptions) => RObject;
        captureR: (expr: string | RObject, options: EvalROptions) => {
            result: RObject;
            output: RList;
            images: ImageBitmap[];
        };
        setTimeoutWasm: (ptr: EmPtr, data: EmPtr, delay: number) => void;
    };
}
export declare const Module: Module;
export type EmPtr = ReturnType<typeof Module.allocateUTF8>;
export interface DictEmPtrs {
    [key: string]: EmPtr;
}
export declare function dictEmFree(dict: {
    [key: string | number]: EmPtr;
}): void;
