Git Product home page Git Product logo

luajs's Introduction

LuaJS

Lua VM running in Javascript (using emscripten)

Setup Instructions

Make certain to download your git submodules, run git submodule update --init --recursive.

You'll need emscripten and NodeJS installed. If you're running a system that supports homebrew, you can brew install:

Build instructions

Run npm install && npm run clean && npm run build then you have the compiled files in the dist folder.

Usage of Lua from JavaScript

LuaJS.newState().then(async (L) => {
    let value;
    value = await L.run("return 1+2"); //value == [3]

    value = await L.run("return {a = 1, b = 2}"); //value[0] instanceof Module.Table, value[0] instanceof Module.Reference
    value[0].get("a"); // == 1
    console.log(value);
    console.log(value[0].toObject(true, true)); //converts Module.Table to JavaScript object (will drop all other Module.Reference-s if unrefAll == true)
    value[0].unref();

    let func = await L.run("return function(a,b) return a + b end"); //func[0] instanceof Module.Function, func[0] instanceof Module.Reference
    value = func[0].call(3,4); //value == [7]
    console.log(value);
    func[0].unref();
});

Using .unref() is optional as LuaJS does utilize Finalizers. However, those can be called at any time, so if you are memory constrained, manual unref might help!

Usage of JavaScript from Lua

Lua knows the library js, where the js.global table equals the JavaScript window object

When you call JS functions from Lua, the function parameters will always be automatically converted to JS equivalents (and internally .unref()'d, except functions).

You can convert JS objects/arrays to native Lua tables by using jsObject:toTable(recursive), however you can also directly index JS objects from Lua.

Warning: You need to call all JS functions either like js.global:alert("testmessage") or local alert = js.global.alert; alert(nil, "testmessage"). The first argument will be used as the "this" context in JavaScript.

Using Lua inline in HTML

If you call enableLuaScriptTags(document), you can specify <script type="text/lua"> tags just like JavaScript tags with either inline scripts or a src attribute.

Below is an example HTML document that enables Lua scripts for the entire page:

<!DOCTYPE html>
<html>
    <head>
        <script type="module" src="./dist/luajs.mjs"></script>
        <script type="module">
            import emscriptenInit from './dist/luajs.mjs';
            const LuaJS = await emscriptenInit();

            LuaJS.newState().then(async (L) => {
                await L.enableLuaScriptTags(document);
            });
        </script>
        <script type="text/lua">
            js.global.console:log("Hello world")
        </script>
    </head>
</html>

Using Lua in NodeJS

The compiled module can be used in NodeJS as follows:

// EITHER: Import (ES6 modules, .mjs/.mts)
import { LuaJS } from '@doridian/luaj';
// OR: require (CommonJS, .cjs/.cts)
const { LuaJS } = require('@doridian/luajs');

LuaJS.newState().then(async (L) => {
    console.log(await L.run("return 42 + 69"));
});

luajs's People

Contributors

doridian avatar frityet avatar karloscarweber avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

luajs's Issues

npm install && npm run clean && npm run build not working (again)

Error:


C:\Users\user\Documents\Important\IronBrew_Deobfuscation\NewVersion\Handling\LuaJS>npm install && npm run clean && npm run build

up to date, audited 49 packages in 1s

15 packages are looking for funding
run npm fund for details

found 0 vulnerabilities

[email protected] clean
emmake make clean

make: make clean
cd lua && make clean
make[1]: Entering directory 'C:/Users/user/Documents/Important/IronBrew_Deobfuscation/NewVersion/Handling/LuaJS/lua'
rm -f liblua.a lua lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o ltests.o lua.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o lutf8lib.o loadlib.o lcorolib.o linit.o
process_begin: CreateProcess(NULL, rm -f liblua.a lua lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o ltests.o lua.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o lutf8lib.o loadlib.o lcorolib.o linit.o, ...) failed.
make (e=2): The system cannot find the file specified.
make[1]: *** [makefile:123: clean] Error 2
make[1]: Leaving directory 'C:/Users/user/Documents/Important/IronBrew_Deobfuscation/NewVersion/Handling/LuaJS/lua'
make: *** [Makefile:18: clean] Error 2
emmake: error: 'make clean' failed (returned 2)


(Im sorry for creating another issue)

`Uncaught ReferenceError: can't access lexical declaration 'LuaJS' before initialization`

Im trying to run this:

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>LuaJS</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <script type="module" src="./luajs.mjs"></script>
    <script type="module">
        import emscriptenInit from './luajs.mjs';
        const LuaJS = await emscriptenInit(LuaJS);

        LuaJS.newState().then(async (L) => {
            await L.enableLuaScriptTags(document);
        });
    </script>
    <script type="text/lua">
        local mod = require("module")
        local output_module = js.global.document:getElementById("output")
        function js.global.test()
            output_module.textContent = mod.add(3. 4)
        end
    </script>
</head>
<body>
    <pre id="output"></pre>
    <button onclick="test()">Test</button>
</body>
</html>

Can't build on current main branch

I'm running on latest emscripten, and cannot currently build the project.

Here are the full logs.

Full build logs
npm install && npm run clean && npm run build

up to date, audited 49 packages in 678ms

15 packages are looking for funding
run npm fund for details

found 0 vulnerabilities

[email protected] clean
emmake make clean

make: make clean
cd lua && make clean
make[1]: Entering directory '/home/vvilliam/Source/LuaJS/lua'
rm -f liblua.a lua lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o ltests.o lua.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o lutf8lib.o loadlib.o lcorolib.o linit.o
make[1]: Leaving directory '/home/vvilliam/Source/LuaJS/lua'
cd src && make clean
make[1]: Entering directory '/home/vvilliam/Source/LuaJS/src'
rm -f luajs.js luajs_allochelpers.o luajs_interface.o jsvar.o luajs_async.o luajs_ref.o luajs_state.o luajs_eval.o jsvar_object.o jsvar_array.o jsvar_function.o luajs.o luajs.data luajs.wasm luajs.js
make[1]: Leaving directory '/home/vvilliam/Source/LuaJS/src'
sh -e ./patch_lua_makefile.sh clean
rm -rf ./tmp

[email protected] build
tsc && emmake make install

make: make install
sh -e ./patch_lua_makefile.sh
cd lua && make -f ../tmp/lua/makefile liblua.a
make[1]: Entering directory '/home/vvilliam/Source/LuaJS/lua'
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lapi.o lapi.c
shared:INFO: (Emscripten: Running sanity checks)
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lcode.o lcode.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lctype.o lctype.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ldebug.o ldebug.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ldo.o ldo.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ldump.o ldump.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lfunc.o lfunc.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lgc.o lgc.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o llex.o llex.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lmem.o lmem.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lobject.o lobject.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lopcodes.o lopcodes.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lparser.o lparser.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lstate.o lstate.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lstring.o lstring.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ltable.o ltable.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ltm.o ltm.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lundump.o lundump.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lvm.o lvm.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lzio.o lzio.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ltests.o ltests.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lauxlib.o lauxlib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lbaselib.o lbaselib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ldblib.o ldblib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o liolib.o liolib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lmathlib.o lmathlib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o loslib.o loslib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o ltablib.o ltablib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lstrlib.o lstrlib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lutf8lib.o lutf8lib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o loadlib.o loadlib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o lcorolib.o lcorolib.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -Wall -O2 -Wfatal-errors -Wextra -Wshadow -Wundef -Wwrite-strings -Wredundant-decls -Wdisabled-optimization -Wdouble-promotion -Wmissing-declarations -Wdeclaration-after-statement -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wc++-compat -Wold-style-definition -std=c99 -flto -DLUA_CPATH_DEFAULT=""/lua/modules/?.so"" -DLUA_PATH_DEFAULT=""/lua/modules/?.lua;/lua/modules/?/init.lua"" -fno-stack-protector -fno-common -c -o linit.o linit.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emar rc liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o ltests.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o lutf8lib.o loadlib.o lcorolib.o linit.o
/home/vvilliam/Source/emsdk/upstream/emscripten/emranlib liblua.a
make[1]: Leaving directory '/home/vvilliam/Source/LuaJS/lua'
cd src && make
make[1]: Entering directory '/home/vvilliam/Source/LuaJS/src'
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs_allochelpers.o luajs_allochelpers.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs_interface.o luajs_interface.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o jsvar.o jsvar.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs_async.o luajs_async.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs_ref.o luajs_ref.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs_state.o luajs_state.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs_eval.o luajs_eval.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o jsvar_object.o jsvar_object.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o jsvar_array.o jsvar_array.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o jsvar_function.o jsvar_function.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -O3 -flto -I../lua -Wall -c -o luajs.o luajs.c
/home/vvilliam/Source/emsdk/upstream/emscripten/emcc -o luajs.js -O3 -flto luajs_allochelpers.o luajs_interface.o jsvar.o luajs_async.o luajs_ref.o luajs_state.o luajs_eval.o jsvar_object.o jsvar_array.o jsvar_function.o luajs.o ../lua/liblua.a -s EXPORTED_FUNCTIONS="[ '_main', '_malloc', '_free', '_luajs_alloc_int', '_luajs_alloc_size_t', '_luajs_call', '_luajs_delete_state', '_luajs_execute', '_luajs_get_state_global', '_luajs_new_state', '_luajs_popvar', '_luajs_pushref', '_luajs_pushvar', '_luajs_read_int', '_luajs_read_size_t', '_luajs_toref', '_luajs_unref', '_lua_createtable', '_lua_getmetatable', '_lua_gettable', '_lua_gettop', '_lua_next', '_lua_pushboolean', '_lua_pushnil', '_lua_pushnumber', '_lua_pushlstring', '_lua_pushvalue', '_lua_rawset', '_lua_rawseti', '_lua_setmetatable', '_lua_settable', '_lua_settop', '_lua_toboolean', '_lua_tolstring', '_lua_tonumberx', '_lua_type' ]" -s EXPORTED_RUNTIME_METHODS=cwrap -s WASM=1 -s TOTAL_MEMORY=134217728 -s ASYNCIFY -s ALLOW_TABLE_GROWTH --pre-js lua_interface.js --preload-file "../fsroot/@/"
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libGL-getprocaddr.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libGL-getprocaddr.a" for subsequent builds)
system_libs:INFO: compiled 4 inputs in 0.17s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libal.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libal.a" for subsequent builds)
system_libs:INFO: compiled 1 inputs in 0.11s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libhtml5.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libhtml5.a" for subsequent builds)
system_libs:INFO: compiled 5 inputs in 0.12s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libstubs.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libstubs.a" for subsequent builds)
system_libs:INFO: compiled 2 inputs in 0.12s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libnoexit.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libnoexit.a" for subsequent builds)
system_libs:INFO: compiled 1 inputs in 0.06s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libc.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libc.a" for subsequent builds)
system_libs:INFO: compiled 1026 inputs in 2.51s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libdlmalloc.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libdlmalloc.a" for subsequent builds)
system_libs:INFO: compiled 1 inputs in 0.80s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libcompiler_rt.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libcompiler_rt.a" for subsequent builds)
system_libs:INFO: compiled 175 inputs in 0.78s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libc++-noexcept.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libc++-noexcept.a" for subsequent builds)
system_libs:INFO: compiled 52 inputs in 6.89s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libc++abi-noexcept.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libc++abi-noexcept.a" for subsequent builds)
system_libs:INFO: compiled 16 inputs in 1.99s
cache:INFO: - ok
cache:INFO: generating system library: sysroot/lib/wasm32-emscripten/lto/libsockets.a... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto/libsockets.a" for subsequent builds)
system_libs:INFO: compiled 27 inputs in 0.34s
cache:INFO: - ok
cache:INFO: generating system asset: symbol_lists/6e11e07e9f081a120862b3b5f06065e23f596c7c.json... (this will be cached in "/home/vvilliam/Source/emsdk/upstream/emscripten/cache/symbol_lists/6e11e07e9f081a120862b3b5f06065e23f596c7c.json" for subsequent builds)
cache:INFO: - ok
wasm-ld: error: luajs_interface.o: undefined symbol: luaRemoveVarPtr
wasm-ld: error: luajs_interface.o: undefined symbol: luaCallFunctionPointer
emcc: error: '/home/vvilliam/Source/emsdk/upstream/bin/wasm-ld -o luajs.wasm luajs_allochelpers.o luajs_interface.o jsvar.o luajs_async.o luajs_ref.o luajs_state.o luajs_eval.o jsvar_object.o jsvar_array.o jsvar_function.o luajs.o ../lua/liblua.a -L/home/vvilliam/Source/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/lto -lGL-getprocaddr -lal -lhtml5 -lstubs -lnoexit -lc -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp4b1yi721libemscripten_js_symbols.so -u__cxa_atexit --export=malloc --export=free --export=luajs_alloc_int --export=luajs_alloc_size_t --export=luajs_call --export=luajs_delete_state --export=luajs_execute --export=luajs_get_state_global --export=luajs_new_state --export=luajs_popvar --export=luajs_pushref --export=luajs_pushvar --export=luajs_read_int --export=luajs_read_size_t --export=luajs_toref --export=luajs_unref --export=lua_createtable --export=lua_getmetatable --export=lua_gettable --export=lua_gettop --export=lua_next --export=lua_pushboolean --export=lua_pushnil --export=lua_pushnumber --export=lua_pushlstring --export=lua_pushvalue --export=lua_rawset --export=lua_rawseti --export=lua_setmetatable --export=lua_settable --export=lua_settop --export=lua_toboolean --export=lua_tolstring --export=lua_tonumberx --export=lua_type --export=stackAlloc --export=stackSave --export=stackRestore --export=__get_temp_ret --export=__set_temp_ret --export=__wasm_call_ctors --export=malloc --export=free --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-table --growable-table -z stack-size=65536 --initial-memory=134217728 --max-memory=134217728 --no-entry --table-base=1 --global-base=1024' failed (returned 1)
make[1]: *** [Makefile:73: luajs.js] Error 1
make[1]: Leaving directory '/home/vvilliam/Source/LuaJS/src'
make: *** [Makefile:15: build] Error 2
emmake: error: 'make install' failed (returned 2)

In particular, these two lines:

wasm-ld: error: luajs_interface.o: undefined symbol: luaRemoveVarPtr
wasm-ld: error: luajs_interface.o: undefined symbol: luaCallFunctionPointer

Error loading Lua script node when js function fails

Error:

Error loading Lua script node 
<script type="text/lua">
 TypeError: luaPassedVars.get(...) is undefined
    getVarByRef http://0.0.0.0:6931/luajs.js:1
    luaCallFunctionPointer http://0.0.0.0:6931/luajs.js:1
    luaCallFunctionPointer http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    doRewind http://0.0.0.0:6931/luajs.js:1
    handleSleep http://0.0.0.0:6931/luajs.js:1
    promise callback*handleAsync/< http://0.0.0.0:6931/luajs.js:1
    handleSleep http://0.0.0.0:6931/luajs.js:1
    handleAsync http://0.0.0.0:6931/luajs.js:1
    __asyncjs__jslua_await_int http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    doRewind http://0.0.0.0:6931/luajs.js:1
    handleSleep http://0.0.0.0:6931/luajs.js:1
    promise callback*handleAsync/< http://0.0.0.0:6931/luajs.js:1
    handleSleep http://0.0.0.0:6931/luajs.js:1
    handleAsync http://0.0.0.0:6931/luajs.js:1
    __asyncjs__jslua_await_int http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    invoke_vii http://0.0.0.0:6931/luajs.js:1
    x http://0.0.0.0:6931/luajs.js:1
    ccall http://0.0.0.0:6931/luajs.js:1
    cwrap http://0.0.0.0:6931/luajs.js:1
    __run http://0.0.0.0:6931/luajs.js:1
    run http://0.0.0.0:6931/luajs.js:1
    __runNode http://0.0.0.0:6931/luajs.js:1
    __tryRunNode http://0.0.0.0:6931/luajs.js:1
    loadDocumentScripts http://0.0.0.0:6931/luajs.js:1
    enableLuaScriptTags http://0.0.0.0:6931/luajs.js:1
    <anonymous> http://0.0.0.0:6931/site.html:7
    promise callback* http://0.0.0.0:6931/site.html:6
luajs.js:1:15019

Code:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="luajs.js"></script>
        <script type="text/javascript">
            Module.newState().then(async (L) => {
                await L.enableLuaScriptTags(document);
            });
        </script>

        <script type="text/lua">
            local window = js.global
            package.searchers[#package.searchers+1] = function(url)
                url = url:gsub("%.", "/")..".lua"

                local function fetch_text(url)
                    return pcall(function()
                        local req = window:fetch(url)
                        if not req then
                            console:error("failed to fetch", url)
                            error("failed to fetch")
                        end
                        local file = js.await(req)
                        if not file.ok then
                            console:error("failed to fetch: ", file)
                            error("failed to fetch: "..file.status)
                        end
                        return js.await(file:text())
                    end)
                end

                local ok, text = fetch_text(url)

                if not ok then return end

                return load(text, "@"..url)
            end
        </script>

        <script type="text/lua">
            local test = require("test-module")
            js.global:alert(test.message)

            local _, error = pcall(require, ("this module does not exist!!!"))
            js.global:alert(error)
        </script>
    </head>
</html>

enableLuaScriptTags throws an exception if the DOM was modified while loading scripts

For my application I need to create 2 logic-only, no display canvases. This causes the Lua tag enabling to stop.

I've managed to weasel my way out of it by wrapping it in a try/catch and while loop, but it's less than ideal, to say the least.

            let ok = false;
            // this exception absorbing loop is required because the canvases
            // draw.lua creates throw a wrench in the enableLuaScriptTags processing
            while (!ok) {
                try {
                    await L.enableLuaScriptTags(document);
                    ok = true;
                } catch (e) {}
            }

Is the README example up to date?

I keep getting Uncaught SyntaxError: import not found: default on the line import emscriptenInit from "./js/luajs.mjs";

On an unrelated note, I can't seem to put the .wasm and .data files wherever I want, it only finds it if they're in the root of the project.

Using luarocks modules

Hello, I would like to use luarocks (the lua package manager) modules with this project. I have luarocks setup to install the modules into ./lua_modules/share/lua/5.4/?.lua, and I set a script to do that

<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Test</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <script type="text/javascript" src='luajs.js'></script>

    <script>
        Module.ready.then(() => {
            const L = new Module.State();
            L.enableLuaScriptTags(document);
        });
    </script>

    <script type="text/lua">
        package.path="./lua_modules/share/lua/5.4/?.lua;./lua_modules/share/lua/5.4/?/init.lua;"..package.path
    </script>

    <script type="text/lua" src="test.lua"></script>
</head>

However, it still cannot find the modules, what could I do to fix this?

Module not found: Error: Can't resolve './'

there is this react app at https://github.com/Bismuthium/Lunar but our gh workflow fails when it gets to LuaJS

Run yarn build
yarn run v1.22.22
$ react-scripts build
Creating an optimized production build...
Failed to compile.

Module not found: Error: Can't resolve './' in '/home/runner/work/Lunar/Lunar/node_modules/@doridian/luajs/dist'


error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error: Process completed with exit code 1.

Document API surface

  • js.global
  • js.await
  • js.eval
  • JSFunc:new()
  • JSVar:toTable(...)
  • The fact all JS funcs have to be called with :

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

github-actions
.github/workflows/test_build.yml
  • actions/checkout v4
  • actions/setup-node v4
  • mymindstorm/setup-emsdk v14
  • actions/upload-artifact v4
npm
package.json
  • @types/node ^20.10.2
  • glob ^10.3.10
  • typescript ^5.3.2

  • Check this box to trigger a request for Renovate to run again on this repository

Instanciating JS classes?

I get this error trying to instanciate a JS class

Error: TypeError: calling a builtin Map constructor without new is forbidden

Of course, I can make a simple JS wrapper to get around this, but is there a better way?

Defining classes?

How would classes be defined? I want to create custom web components with lua, but I am not sure how to go about doing it, maybe there should be some syntax like

local xml_gen = require("xml-generator")
local xml = xml_gen.xml
---@diagnostic disable-next-line: undefined-global
local js = js
local this = js.global

local WordCount = js.class "WordCount" (this.HTMLParagraphElement) {
    observedAttributes = { "text" },

    constructor = function (self)
        self:super()
        self:attachShadow { mode = "open" }
        self.shadowRoot:appendChild(xml.div {
            xml.p {id="text"},
            xml.p {id="wordCount"}
        })
    end,

    connectedCallback = function (self)
        print("connected")
    end
}

Or better, something simpler

Using in NodeJS, `Module is not defined`

Code:

const luajs = require("./luajs.js")

Module.newState().then(async (L) => {
    L.run("print('Hello, World!')")
})

I am in the dist dir in the LuaJS repo, after having built it

Top-level await is not available in configured target environment

Hello ๐Ÿ‘‹ i installed this package in my svelte shared library, then i imported it and visited the page, the following error occurs

โœ˜ [ERROR] Top-level await is not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari14" + 2 overrides)

    node_modules/.pnpm/@doridian+luajs@1.0.7/node_modules/@doridian/luajs/util/loader_mjs.mjs:2:14:
      2 โ”‚ const LuaJS = await moduleCtor();
        โ•ต               ~~~~~

How did i add and use this package?

I did cd shared-compilation then pnpm install @doridian/luajs,
then to use it, in the file src/lib/wasm/lua/compilation.ts just imported by doing import {LuaJS} from "@doridian/luajs"

Steps to reproduce the issue (with my repo)

If you don't have pnpm, you can get and install it: https://pnpm.io/installation

Clone the repository: git clone https://github.com/ComlineProject/shared-web.git
Change directory: cd shared-web/shared-compilation
Install dependencies: pnpm install
Run in dev mode: pnpm run dev

Visit http://localhost:5173/wasm-compilers/lua
Error will pop up in the local dev console

Having trouble compiling on Mac

Hi Friend,

I'm having trouble compiling this on Mac, I've added a missing step to the docs to setup the project.

I was wondering if I can track my progress working through the compile issues here?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.