import type { ScriptingConfig } from './config.ts'; import type { LuaApi } from './lua-common.ts'; import type { RespValue } from '../types.ts'; import type { LuaCall } from './plugin.ts'; /** Opaque Fengari `lua_State`. */ export type FengariLuaState = object; type FengariFunction = (L: FengariLuaState) => number; /** Members of `fengari.lua` used by the runner. Strings are Lua byte strings (`Uint8Array`). */ export interface FengariLua extends LuaApi { LUA_MASKCOUNT: number; lua_newstate(): FengariLuaState; lua_close(L: FengariLuaState): void; lua_newthread(L: FengariLuaState): FengariLuaState; lua_pushlstring(L: FengariLuaState, s: Uint8Array, len: number): unknown; lua_tolstring(L: FengariLuaState, idx: number): Uint8Array; lua_pushcfunction(L: FengariLuaState, fn: FengariFunction): void; lua_setfield(L: FengariLuaState, idx: number, k: Uint8Array): void; lua_setglobal(L: FengariLuaState, name: Uint8Array): void; lua_rawseti(L: FengariLuaState, idx: number, n: number): void; lua_pcall(L: FengariLuaState, nargs: number, nresults: number, msgh: number): number; lua_dump(L: FengariLuaState, writer: (L: FengariLuaState, chunk: Uint8Array, size: number, ud: unknown) => number, data: unknown, strip: boolean): number; lua_resume(L: FengariLuaState, from: FengariLuaState | null, nargs: number): number; lua_sethook(L: FengariLuaState, func: ((L: FengariLuaState) => void) | null, mask: number, count: number): void; lua_isyieldable(L: FengariLuaState): boolean; lua_yield(L: FengariLuaState, nresults: number): unknown; lua_error(L: FengariLuaState): unknown; } /** The `fengari` module object (its default export), passed in by the caller. */ export interface FengariModule { lua: FengariLua; lauxlib: { luaL_newstate(): FengariLuaState; luaL_loadbufferx(L: FengariLuaState, buff: Uint8Array, size: number, name: Uint8Array, mode: Uint8Array): number; }; lualib: { luaopen_base(L: FengariLuaState): number; luaopen_string(L: FengariLuaState): number; luaopen_table(L: FengariLuaState): number; luaopen_math(L: FengariLuaState): number; }; luaconf: { LUA_MAXINTEGER: number; }; to_luastring(str: string): Uint8Array; } /** Synchronous runner for trusted scripts. Memory is managed by the JavaScript GC. */ export declare function runFengari(fengari: FengariModule, source: Buffer, keys: Buffer[], args: Buffer[], config: Readonly, call: LuaCall | null, compileOnly?: boolean, onCompiled?: () => void): RespValue; export {};