From 47a8b5dd14140581ecfb7a0c2500a0062fa285a4 Mon Sep 17 00:00:00 2001 From: AsynchronousMatrix Date: Thu, 10 Aug 2023 00:37:44 +0100 Subject: [PATCH] feature: implement 'luau' `types` lib --- types/Luau.luau | 116 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 types/Luau.luau diff --git a/types/Luau.luau b/types/Luau.luau new file mode 100644 index 0000000..5d429ec --- /dev/null +++ b/types/Luau.luau @@ -0,0 +1,116 @@ +--[=[ + @interface CompileSettings + @within Luau + + The Luau compiler settings used in generating luau bytecode + + This is a dictionary that may contain one or more of the following values: + + * `optimizationLevel` - Sets the compiler option "optimizationLevel". Defaults to `1` + * `coverageLevel` - Sets the compiler option "coverageLevel". Defaults to `0` + * `debugLevel` - Sets the compiler option "debugLevel". Defaults to `1` + + Documentation regarding what these values represent can be found here; + * https://github.com/Roblox/luau/blob/bd229816c0a82a8590395416c81c333087f541fd/Compiler/include/luacode.h#L13 +]=] +export type CompileSettings = { + optimizationLevel: number, + coverageLevel: number, + debugLevel: number, +} + +--[=[ + @interface LoadSettings + @within Luau + + The Luau load settings are used for generating a lua function from either bytecode or sourcecode + + This is a dictionary that may contain one or more of the following values: + + * `debugName` - The debug name of the closure. Defaults to `string ["..."]` +]=] +export type LoadSettings = { + debugName: string, +} + +--[=[ + @class Luau + + Built-in library for generating luau bytecode & functions. + + ### Example usage + + ```lua + local luau = require("@lune/luau") + + local bytecode = luau.compile("print('Hello, World!')") + local callableFn = luau.load(bytecode) + + -- Additionally, we can skip the bytecode generation and load a callable function directly from the code itself. + -- local callableFn = luau.load("print('Hello, World!')") + + callableFn() + ``` +]=] +local luau = {} + +--[=[ + @within Luau + + Compiles sourcecode into Luau bytecode + + An error will be thrown if the sourcecode given isn't valid Luau code. + + ### Example usage + + ```lua + local luau = require("@lune/luau") + + local bytecode = luau.compile("print('Hello, World!')", { + optimizationLevel: 1, + coverageLevel: 0, + debugLevel: 1, + }) + + ... + ``` + + @param source The string that'll be compiled into bytecode + @param compileSettings The luau compiler settings used when compiling the source string + + @return luau bytecode +]=] +function luau.compile(source: string, compileSettings: CompileSettings): string + return nil :: any +end + +--[=[ + @within Luau + + Generates a function from either bytecode or sourcecode + + An error will be thrown if the sourcecode given isn't valid luau code. + + ### Example usage + + ```lua + local luau = require("@lune/luau") + + local bytecode = luau.compile("print('Hello, World!')") + local callableFn = luau.load(bytecode, { + debugName = "'Hello, World'" + }) + + callableFn() + ``` + + @param source Either bytecode or sourcecode + @param loadSettings The load settings used when creating a callbable function + + @return luau function +]=] +function luau.load(source: string, loadSettings: LoadSettings): string + return nil :: any +end + +return luau