import type { WasmoonScriptingConfig } from './config.ts'; import type { LuaApi } from './lua-common.ts'; import type { RespValue } from '../types.ts'; import type { LuaCall } from './plugin.ts'; /** Emscripten module members of an initialized Wasmoon LuaModule used by the runner. */ export interface WasmoonEmscriptenModule { HEAPU8: Uint8Array; HEAPU32: Uint32Array; _malloc(size: number): number; _free(pointer: number): void; _realloc(pointer: number, size: number): number; _lua_pushlstring(L: number, pointer: number, length: number): number; _lua_tolstring(L: number, index: number, lengthPointer: number): number; addFunction(fn: (...args: number[]) => number | void, signature: string): number; removeFunction(pointer: number): void; } /** Members of an initialized Wasmoon LuaModule (`LuaWasm`) used by the runner. Lua states are pointers. */ export interface WasmoonLuaModule extends LuaApi { module: WasmoonEmscriptenModule; lua_newstate(f: number, ud: number): number; lua_close(L: number): void; lua_newthread(L: number): number; lua_pushcclosure(L: number, fn: number, n: number): void; lua_setfield(L: number, idx: number, k: string): void; lua_setglobal(L: number, name: string): void; lua_pcallk(L: number, nargs: number, nresults: number, errfunc: number, ctx: number, k: number): number; luaL_loadbufferx(L: number, buff: number, sz: number, name: string, mode: string): number; lua_dump(L: number, writer: number, data: number, strip: number): number; lua_resume(L: number, from: number, narg: number, nres: number): number; lua_yieldk(L: number, nresults: number, ctx: number, k: number): number; lua_isyieldable(L: number): number; lua_sethook(L: number, func: number, mask: number, count: number): void; luaopen_base(L: number): number; luaopen_string(L: number): number; luaopen_table(L: number): number; luaopen_math(L: number): number; } /** One isolated Lua state. All wire strings cross WASM as pointer + byte length. */ export declare function runLua(lua: WasmoonLuaModule, source: Buffer, keys: Buffer[], args: Buffer[], config: Readonly, call: LuaCall | null, compileOnly?: boolean, onCompiled?: () => void): RespValue;