import type { CommandReply, RespValue } from '../types.ts'; /** Integer argument of lua_rawseti/lua_rawgeti/lua_pushinteger: BigInt in Wasmoon, number in Fengari. */ export type LuaInteger = bigint | number; /** Field or global name: a C string in Wasmoon, a Lua byte string in Fengari. */ export type LuaName = string | Uint8Array; /** Lua C API members used by the reply and JSON codecs; satisfied by both runtimes. */ export interface LuaApi { lua_absindex(L: State, idx: number): number; lua_checkstack(L: State, n: number): number | boolean; lua_createtable(L: State, narr: number, nrec: number): void; lua_gettop(L: State): number; lua_next(L: State, idx: number): number | boolean; lua_pop(L: State, n: number): void; lua_pushboolean(L: State, b: number): void; lua_pushinteger(L: State, n: LuaInteger): void; lua_pushlightuserdata(L: State, p: null): void; lua_pushnil(L: State): void; lua_pushnumber(L: State, n: number): void; lua_rawget(L: State, idx: number): unknown; lua_rawgeti(L: State, idx: number, n: LuaInteger): unknown; lua_rawset(L: State, idx: number): void; lua_rawseti(L: State, idx: number, n: LuaInteger): void; lua_setfield(L: State, idx: number, k: LuaName): void; lua_settop(L: State, idx: number): void; lua_toboolean(L: State, idx: number): number | boolean; lua_tonumberx(L: State, idx: number, isnum: number): number; lua_topointer(L: State, idx: number): unknown; lua_type(L: State, idx: number): number; } /** Byte transfer and deadline helpers a runtime hands to the codecs. */ export interface LuaCodecIo { pushBytes: (L: State, value: Buffer | string) => void; readBytes: (L: State, index: number) => Buffer; timedOut: () => boolean; timeoutError: () => Error; } interface ReplyCodecOptions extends LuaCodecIo { integerIndex?: (n: number) => LuaInteger; fieldName?: (name: string) => LuaName; } export declare const LUA: { OK: number; YIELD: number; NIL: number; BOOLEAN: number; LIGHTUSERDATA: number; NUMBER: number; STRING: number; TABLE: number; COUNT: number; }; export declare const BOOTSTRAP: Buffer; export declare function cleanError(message: unknown): string; export declare function createReplyCodec(lua: LuaApi, { pushBytes, readBytes, timedOut, timeoutError, integerIndex, fieldName }: ReplyCodecOptions): { pushReply: (L: State, value: CommandReply | undefined) => void; readReply: (L: State, index: number, seen?: Set) => RespValue; }; export {};