Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/teoxoy/lua-in-js
A Lua to JS transpiler / runtime
https://github.com/teoxoy/lua-in-js
javascript lua runtime transpiler
Last synced: 7 days ago
JSON representation
A Lua to JS transpiler / runtime
- Host: GitHub
- URL: https://github.com/teoxoy/lua-in-js
- Owner: teoxoy
- License: mit
- Created: 2018-04-02T00:34:56.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-07-13T08:51:34.000Z (6 months ago)
- Last Synced: 2024-10-11T20:46:21.089Z (3 months ago)
- Topics: javascript, lua, runtime, transpiler
- Language: TypeScript
- Homepage:
- Size: 369 KB
- Stars: 80
- Watchers: 5
- Forks: 20
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# lua-in-js
[![npm](https://img.shields.io/npm/v/lua-in-js.svg?style=flat-square)](https://www.npmjs.com/package/lua-in-js)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-blue.svg?style=flat-square)](./CONTRIBUTING.md)
[![GitHub](https://img.shields.io/github/license/teoxoy/lua-in-js.svg?style=flat-square&color=blue)](./LICENSE)
_Badges are clickable!_A Lua to JS transpiler/runtime. This library is a rewrite of [Starlight](https://github.com/paulcuth/starlight) with a lot of improvements.
## Install
```
npm i lua-in-js
```## API
### Import
```js
import * as luainjs from 'lua-in-js'
``````js
const luainjs = require('lua-in-js')
```### Create the lua environment
Lua environments are isolated from each other (they got different global scopes)
```js
const luaEnv = luainjs.createEnv()
```A config object can be passed in for extra functionality
```js
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
```js
const luaScript = luaEnv.parse('print(\'Hello world!\')')
const returnValue = luaScript.exec()
``````js
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.
```js
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](./src/lib/math.ts) for a more extensive example.
## Example
Check out the [test runner](./tests/test.js) 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