mirror of https://github.com/teoxoy/lua-in-js
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
6 years ago | |
|---|---|---|
| .vscode | 6 years ago | |
| src | 6 years ago | |
| tests | 6 years ago | |
| .eslint.base.yml | 6 years ago | |
| .eslint.import.yml | 6 years ago | |
| .eslint.typescript.yml | 6 years ago | |
| .eslintrc.js | 6 years ago | |
| .gitattributes | 6 years ago | |
| .gitignore | 6 years ago | |
| .prettierrc.js | 6 years ago | |
| CONTRIBUTING.md | 6 years ago | |
| LICENSE | 6 years ago | |
| README.md | 6 years ago | |
| package.json | 6 years ago | |
| rollup.config.js | 6 years ago | |
| tsconfig.json | 6 years ago | |
| yarn.lock | 6 years ago | |
README.md
lua-in-js
A Lua to JS transpiler/runtime. This library is a rewrite of Starlight with a lot of improvements.
Install
npm i lua-in-js
API
Import
const luainjs = require(luainjs)
// or
import luainjs from 'luainjs'
Create the lua environment
Lua environments are isolated from each other (they got different global scopes)
const luaEnv = luainjs.createEnv()
A config object can be passed in for extra functionality
const luaEnv = luainjs.createEnv({
LUA_PATH, // default value of package.path
fileExists, // function that takes in a path and returns a boolean
loadFile, // function that takes in a path and returns the content of a file
stdin, // string representing the standard input
stdout, // function representing the standard output
osExit // function called by os.exit
})
Execute a script or file
const luaScript = luaEnv.parse('print(\'Hello world!\')')
const returnValue = luaScript.exec()
const luaScript = luaEnv.parseFile('somefile.lua')
const returnValue = luaScript.exec()
parseFile uses config.fileExists and config.loadFile
Create a global library
Creating a global library allows you write APIs that you can use in the Lua environment.
function helloBuilder(name) {
const NAME = luainjs.utils.coerceArgToString(name, 'sayHi', 1)
return `Hello ${NAME}!`
}
const myLib = new luainjs.Table({ helloBuilder })
luaEnv.loadLib('myLib', myLib)
const helloStr = luaEnv.parse(`return myLib.helloBuilder('John')`).exec()
console.log(helloStr)
Check out the math lib for a more extensive example.
Example
Check out the test runner for a concrete example.
Missing functionality
- coroutine library
- debug library
- utf8 library
- io library
- package.cpath
- package.loadlib
- string.dump
- string.pack
- string.packsize
- string.unpack
- os.clock
- os.execute
- os.getenv
- os.remove
- os.rename
- os.tmpname