lua-types
Version: 
TypeScript definitions for Lua standard library
142 lines (132 loc) • 6.56 kB
TypeScript
// Based on https://www.lua.org/manual/5.3/manual.html#6.3
/** @noSelfInFile */
/**
 * Loads the given module. The function starts by looking into the
 * package.loaded table to determine whether modname is already loaded. If it
 * is, then require returns the value stored at package.loaded[modname].
 * Otherwise, it tries to find a loader for the module.
 *
 * To find a loader, require is guided by the package.searchers sequence. By
 * changing this sequence, we can change how require looks for a module. The
 * following explanation is based on the default configuration for
 * package.searchers.
 *
 * First require queries package.preload[modname]. If it has a value, this value
 * (which must be a function) is the loader. Otherwise require searches for a
 * Lua loader using the path stored in package.path. If that also fails, it
 * searches for a C loader using the path stored in package.cpath. If that also
 * fails, it tries an all-in-one loader (see package.searchers).
 *
 * Once a loader is found, require calls the loader with two arguments: modname
 * and an extra value dependent on how it got the loader. (If the loader came
 * from a file, this extra value is the file name.) If the loader returns any
 * non-nil value, require assigns the returned value to package.loaded[modname].
 * If the loader does not return a non-nil value and has not assigned any value
 * to package.loaded[modname], then require assigns true to this entry. In any
 * case, require returns the final value of package.loaded[modname].
 *
 * If there is any error loading or running the module, or if it cannot find any
 * loader for the module, then require raises an error.
 */
declare function require(modname: string): any;
/**
 * The package library provides basic facilities for loading modules in Lua. It
 * exports one function directly in the global environment: require. Everything
 * else is exported in a table package.
 */
declare namespace package {
    /**
     * A string describing some compile-time configurations for packages. This
     * string is a sequence of lines:
     * * The first line is the directory separator string. Default is '\' for
     *   Windows and '/' for all other systems.
     * * The second line is the character that separates templates in a path.
     *   Default is ';'.
     * * The third line is the string that marks the substitution points in a
     *   template. Default is '?'.
     * * The fourth line is a string that, in a path in Windows, is replaced by
     *   the executable's directory. Default is '!'.
     * * The fifth line is a mark to ignore all text after it when building the
     *   luaopen_ function name. Default is '-'.
     */
    var config: string;
    /**
     * The path used by require to search for a C loader.
     *
     * Lua initializes the C path package.cpath in the same way it initializes the
     * Lua path package.path, using the environment variable LUA_CPATH_5_3, or the
     * environment variable LUA_CPATH, or a default path defined in luaconf.h.
     */
    var cpath: string;
    /**
     * A table used by require to control which modules are already loaded. When
     * you require a module modname and package.loaded[modname] is not false,
     * require simply returns the value stored there.
     *
     * This variable is only a reference to the real table; assignments to this
     * variable do not change the table used by require.
     */
    const loaded: Record<string, any>;
    /**
     * Dynamically links the host program with the C library libname.
     *
     * If funcname is "*", then it only links with the library, making the symbols
     * exported by the library available to other dynamically linked libraries.
     * Otherwise, it looks for a function funcname inside the library and returns
     * this function as a C function. So, funcname must follow the lua_CFunction
     * prototype (see lua_CFunction).
     *
     * This is a low-level function. It completely bypasses the package and module
     * system. Unlike require, it does not perform any path searching and does not
     * automatically adds extensions. libname must be the complete file name of
     * the C library, including if necessary a path and an extension. funcname
     * must be the exact name exported by the C library (which may depend on the C
     * compiler and linker used).
     *
     * This function is not supported by Standard C. As such, it is only available
     * on some platforms (Windows, Linux, Mac OS X, Solaris, BSD, plus other Unix
     * systems that support the dlfcn standard).
     */
    function loadlib(
        libname: string,
        funcname: string
    ): [Function] | [undefined, string, 'open' | 'init'];
    /**
     * The path used by require to search for a Lua loader.
     *
     * At start-up, Lua initializes this variable with the value of the
     * environment variable LUA_PATH_5_3 or the environment variable LUA_PATH or
     * with a default path defined in luaconf.h, if those environment variables
     * are not defined. Any ";;" in the value of the environment variable is
     * replaced by the default path.
     */
    var path: string;
    /**
     * A table to store loaders for specific modules (see require).
     *
     * This variable is only a reference to the real table; assignments to this
     * variable do not change the table used by require.
     */
    const preload: Record<string, (modname: string, fileName?: string) => any>;
    /**
     * Searches for the given name in the given path.
     *
     * A path is a string containing a sequence of templates separated by
     * semicolons. For each template, the function replaces each interrogation
     * mark (if any) in the template with a copy of name wherein all occurrences
     * of sep (a dot, by default) were replaced by rep (the system's directory
     * separator, by default), and then tries to open the resulting file name.
     *
     * For instance, if the path is the string
     *
     * `./?.lua;./?.lc;/usr/local/?/init.lua`
     *
     * the search for the name foo.a will try to open the files ./foo/a.lua,
     * ./foo/a.lc, and /usr/local/foo/a/init.lua, in that order.
     *
     * Returns the resulting name of the first file that it can open in read mode
     * (after closing the file), or nil plus an error message if none succeeds.
     * (This error message lists all file names it tried to open.)
     */
    function searchpath(name: string, path: string, sep?: string, rep?: string): string;
}