#lua #transpiler #luau

bin+lib kaledis_dalbit

A fork of a Luau-to-Lua transpiler based on darklua to use for kaledis

2 releases

new 0.1.1 Dec 11, 2024
0.1.0 Dec 10, 2024

#5 in #transpiler

28 downloads per month
Used in kaledis

MIT license

89KB
2K SLoC

Dalbit

Discord

Dalbit(달빛) is a Luau-to-Lua transpiler, designed specifically for Lua 5.3.

TO-DOs

  • Implement CLI.
  • Implement basic transpilation process using darklua and full-moon.
  • Implement modifiers (such as converting number literals and generalized iterations)
  • Implement basic lua polyfills.
  • Add tests for polyfills.
  • Add tests for transpilation. (to ensure the same results in lua and luau)
  • Add tests for dalbit internally.
  • Add logging for dalbit internally for debug.
  • convert_bit32 modifier now converts bit32.btest.
  • Add comments for docs and code readability. (WIP)
  • Optimize polyfill.

Installation

From Releases

Using Cargo (build from source)

cargo install dalbit --locked

Usage

init

Initializes dalbit manifest file in the current path.

dalbit init

fetch

Fetches and updates lua polyfills.

  • This polyfill can be found here.
dalbit fetch

transpile

Transpiles luau code to lua code.

dalbit transpile

clean

Cleans polyfill caches from disk.

dalbit clean

Example

dalbit.toml

input = "input.luau"
output = "output.lua"
file_extension = "lua"
target_version = "lua53"
minify = true

[modifiers]

[polyfill]
repository = "https://github.com/CavefulGames/dalbit-polyfill"
injection_path = "__polyfill__"

inputs/input.luau

local obj = { items = {1, 4, 9} }
setmetatable(obj, { __iter = function(o) return next, o.items end })

for k, v in obj do
    print(k * k)
end

outputs/output.luau

local setmetatable=require'./__polyfill__'.setmetatable local __DALBIT_getmetatable_iter=require'./__polyfill__'.__DALBIT_getmetatable_iter local type=require'./__polyfill__'.type local next=require'./__polyfill__'.next local io=nil local module=nil local package=nil local dofile=nil local loadfile=nil local load=nil local obj={items={1,4,9}}
setmetatable(obj,{__iter=function(o)return next,o.items end})do local _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c=

obj if type(_DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c)=='table'then local m=__DALBIT_getmetatable_iter(_DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c)if type(m)=='table'and type(m.__iter)=='function'then _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c=m.__iter(_DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c)else _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c, _DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c=next, _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c end end for k,v in _DALBIT_REMOVE_GENERALIZED_ITERATION_itere234e8bef135bb4c,_DALBIT_REMOVE_GENERALIZED_ITERATION_invare234e8bef135bb4c,_DALBIT_REMOVE_GENERALIZED_ITERATION_controle234e8bef135bb4c do
print(k*k)
end end

How does it work?

  • Dalbit utilizes darklua and full-moon to transform lua scripts.

Real-world use cases

  • Kaledis - A tool that enables Luau to work with Love2D, simplifying project management, transpiling, and configuration.
  • Overblox - A tool that can transpile Roblox scripts to OVERDARE scripts using Dalbit.

Why darklua-demo over darklua?

  • darklua-demo is a temporary fork to work properly with dal.
  • darklua-demo will be replaced by official darklua once darklua released with important features to work properly with dal.

Contributions

Any issues, advices, and PRs for contribution are welcome!

Special Thanks

Trivia

The name of this project, Dalbit, translates to "moonshine" in Korean.

Dependencies

~27–44MB
~802K SLoC