Skip to content

CavefulGames/dalbit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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.