UNPKG

lua-types

Version:

TypeScript definitions for Lua standard library

298 lines (266 loc) 11.6 kB
// Based on https://www.lua.org/manual/5.3/manual.html#6.1 /// <reference lib="es2015.iterable" /> /** @noSelfInFile */ type LuaThread = { readonly __internal__: unique symbol }; type LuaUserdata = { readonly __internal__: unique symbol }; /** * A global variable (not a function) that holds a string containing the running * Lua version. */ declare const _VERSION: | ('Lua 5.0' | 'Lua 5.0.1' | 'Lua 5.0.2' | 'Lua 5.0.3') | 'Lua 5.1' | 'Lua 5.2' | 'Lua 5.3' | 'Lua 5.4'; /** * A global variable (not a function) that holds the global environment (see * §2.2). Lua itself does not use this variable; changing its value does not * affect any environment, nor vice versa. */ declare const _G: typeof globalThis; /** * Calls error if the value of its argument `v` is false (i.e., nil or false); * otherwise, returns all its arguments. In case of error, `message` is the * error object; when absent, it defaults to "assertion failed!" */ declare function assert<V>(v: V): Exclude<V, undefined | null | false>; declare function assert<V, A extends any[]>( v: V, ...args: A ): LuaMultiReturn<[Exclude<V, undefined | null | false>, ...A]>; /** * This function is a generic interface to the garbage collector. It performs * different functions according to its first argument, opt. * * Performs a full garbage-collection cycle. This is the default option. */ declare function collectgarbage(opt?: 'collect'): void; /** * This function is a generic interface to the garbage collector. It performs * different functions according to its first argument, opt. * * Stops automatic execution of the garbage collector. The collector will run * only when explicitly invoked, until a call to restart it. */ declare function collectgarbage(opt: 'stop'): void; /** * This function is a generic interface to the garbage collector. It performs * different functions according to its first argument, opt. * * Restarts automatic execution of the garbage collector. */ declare function collectgarbage(opt: 'restart'): void; /** * This function is a generic interface to the garbage collector. It performs * different functions according to its first argument, opt. * * Sets arg as the new value for the pause of the collector (see §2.5). Returns * the previous value for pause. */ declare function collectgarbage(opt: 'setpause', arg: number): number; /** * This function is a generic interface to the garbage collector. It performs * different functions according to its first argument, opt. * * Sets arg as the new value for the step multiplier of the collector (see * §2.5). Returns the previous value for step. */ declare function collectgarbage(opt: 'setstepmul', arg: number): number; /** * This function is a generic interface to the garbage collector. It performs * different functions according to its first argument, opt. * * Performs a garbage-collection step. The step "size" is controlled by arg. * With a zero value, the collector will perform one basic (indivisible) step. * For non-zero values, the collector will perform as if that amount of memory * (in KBytes) had been allocated by Lua. Returns true if the step finished a * collection cycle. */ declare function collectgarbage(opt: 'step', arg: number): boolean; /** * Opens the named file and executes its contents as a Lua chunk. When called * without arguments, dofile executes the contents of the standard input * (stdin). Returns all values returned by the chunk. In case of errors, dofile * propagates the error to its caller (that is, dofile does not run in protected * mode). */ declare function dofile(filename?: string): any; /** * Terminates the last protected function called and returns message as the * error object. Function error never returns. * * Usually, error adds some information about the error position at the * beginning of the message, if the message is a string. The level argument * specifies how to get the error position. With level 1 (the default), the * error position is where the error function was called. Level 2 points the * error to where the function that called error was called; and so on. Passing * a level 0 avoids the addition of error position information to the message. */ declare function error(message: string, level?: number): never; /** * If object does not have a metatable, returns nil. Otherwise, if the object's * metatable has a __metatable field, returns the associated value. Otherwise, * returns the metatable of the given object. */ declare function getmetatable<T>(object: T): LuaMetatable<T> | undefined; /** * Returns three values (an iterator function, the table t, and 0) so that the * construction * * `for i,v in ipairs(t) do body end` * * will iterate over the key–value pairs (1,t[1]), (2,t[2]), ..., up to the * first nil value. */ declare function ipairs<T>( t: Record<number, T> ): LuaIterable<LuaMultiReturn<[number, NonNullable<T>]>>; /** * Allows a program to traverse all fields of a table. Its first argument is a * table and its second argument is an index in this table. next returns the * next index of the table and its associated value. When called with nil as its * second argument, next returns an initial index and its associated value. When * called with the last index, or with nil in an empty table, next returns nil. * If the second argument is absent, then it is interpreted as nil. In * particular, you can use next(t) to check whether a table is empty. * * The order in which the indices are enumerated is not specified, even for * numeric indices. (To traverse a table in numerical order, use a numerical * for.) * * The behavior of next is undefined if, during the traversal, you assign any * value to a non-existent field in the table. You may however modify existing * fields. In particular, you may clear existing fields. */ declare function next(table: object, index?: any): LuaMultiReturn<[any, any] | []>; /** * If t has a metamethod __pairs, calls it with t as argument and returns the * first three results from the call. Otherwise, returns three values: the next * function, the table t, and nil, so that the construction * * `for k,v in pairs(t) do body end` * * will iterate over all key–value pairs of table t. * * See function next for the caveats of modifying the table during its * traversal. */ declare function pairs<TKey extends AnyNotNil, TValue>( t: LuaTable<TKey, TValue> ): LuaIterable<LuaMultiReturn<[TKey, NonNullable<TValue>]>>; declare function pairs<T>(t: T): LuaIterable<LuaMultiReturn<[keyof T, NonNullable<T[keyof T]>]>>; /** * Calls function f with the given arguments in protected mode. This means that * any error inside f is not propagated; instead, pcall catches the error and * returns a status code. Its first result is the status code (a boolean), which * is true if the call succeeds without errors. In such case, pcall also returns * all results from the call, after this first result. In case of any error, * pcall returns false plus the error message. */ declare function pcall<This, Args extends any[], R>( f: (this: This, ...args: Args) => R, context: This, ...args: Args ): LuaMultiReturn<[true, R] | [false, string]>; declare function pcall<A extends any[], R>( f: (this: void, ...args: A) => R, ...args: A ): LuaMultiReturn<[true, R] | [false, string]>; /** * Receives any number of arguments and prints their values to stdout, using the * tostring function to convert each argument to a string. print is not intended * for formatted output, but only as a quick way to show a value, for instance * for debugging. For complete control over the output, use string.format and * io.write. */ declare function print(...args: any[]): void; /** * Checks whether v1 is equal to v2, without invoking the __eq metamethod. * Returns a boolean. */ declare function rawequal<T>(v1: T, v2: T): boolean; /** * Gets the real value of table[index], without invoking the __index metamethod. * table must be a table; index may be any value. */ declare function rawget<T extends object, K extends keyof T>(table: T, index: K): T[K]; /** * Returns the length of the object v, which must be a table or a string, * without invoking the __len metamethod. Returns an integer. */ declare function rawlen(v: object | string): number; /** * Sets the real value of table[index] to value, without invoking the __newindex * metamethod. table must be a table, index any value different from nil and * NaN, and value any Lua value. * * This function returns table. */ declare function rawset<T extends object, K extends keyof T>(table: T, index: K, value: T[K]): T; /** * If index is a number, returns all arguments after argument number index; a * negative number indexes from the end (-1 is the last argument). Otherwise, * index must be the string "#", and select returns the total number of extra * arguments it received. */ declare function select<T>(index: number, ...args: T[]): LuaMultiReturn<T[]>; /** * If index is a number, returns all arguments after argument number index; a * negative number indexes from the end (-1 is the last argument). Otherwise, * index must be the string "#", and select returns the total number of extra * arguments it received. */ declare function select<T>(index: '#', ...args: T[]): number; /** * Sets the metatable for the given table. (To change the metatable of other * types from Lua code, you must use the debug library (§6.10).) If metatable is * nil, removes the metatable of the given table. If the original metatable has * a __metatable field, raises an error. * * This function returns table. */ declare function setmetatable< T extends object, TIndex extends object | ((this: T, key: any) => any) | undefined = undefined >( table: T, metatable?: LuaMetatable<T, TIndex> | null ): TIndex extends (this: T, key: infer TKey) => infer TValue ? T & { [K in TKey & string]: TValue } : TIndex extends object ? T & TIndex : T; /** * When called with no base, tonumber tries to convert its argument to a number. * If the argument is already a number or a string convertible to a number, then * tonumber returns this number; otherwise, it returns nil. * * The conversion of strings can result in integers or floats, according to the * lexical conventions of Lua (see §3.1). (The string may have leading and * trailing spaces and a sign.) * * When called with base, then e must be a string to be interpreted as an * integer numeral in that base. The base may be any integer between 2 and 36, * inclusive. In bases above 10, the letter 'A' (in either upper or lower case) * represents 10, 'B' represents 11, and so forth, with 'Z' representing 35. If * the string e is not a valid numeral in the given base, the function returns * nil. */ declare function tonumber(e: any, base?: number): number | undefined; /** * Receives a value of any type and converts it to a string in a human-readable * format. (For complete control of how numbers are converted, use * string.format.) * * If the metatable of v has a __tostring field, then tostring calls the * corresponding value with v as argument, and uses the result of the call as * its result. */ declare function tostring(v: any): string; /** * Returns the type of its only argument, coded as a string. */ declare function type( v: any ): 'nil' | 'number' | 'string' | 'boolean' | 'table' | 'function' | 'thread' | 'userdata';