aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lauxlib.js2
-rw-r--r--src/loadlib.js18
2 files changed, 18 insertions, 2 deletions
diff --git a/src/lauxlib.js b/src/lauxlib.js
index d13b2bb..eb174be 100644
--- a/src/lauxlib.js
+++ b/src/lauxlib.js
@@ -816,7 +816,7 @@ if (!WEB) {
lf.f = lua.to_luastring(xhr.response);
} else {
lf.err = xhr.status;
- return errfile(L, "open", fnameindex, xhr.status);
+ return errfile(L, "open", fnameindex, { message: `${xhr.status}: ${xhr.statusText}` });
}
}
let com = skipcomment(lf);
diff --git a/src/loadlib.js b/src/loadlib.js
index e448381..9400bb0 100644
--- a/src/loadlib.js
+++ b/src/loadlib.js
@@ -34,7 +34,7 @@ const AUXMARK = [1];
** Returns the library; in case of error, returns NULL plus an
** error string in the stack.
*/
-const lsys_load = function(L, path) {
+let lsys_load = function(L, path) {
try {
path = lua.to_jsstring(path);
@@ -65,6 +65,22 @@ const lsys_sym = function(L, lib, sym) {
}
};
+if (WEB) {
+ lsys_load = function(L, path) {
+ let xhr = new XMLHttpRequest();
+ xhr.open("GET", lua.to_jsstring(path), false);
+ xhr.send();
+ /* TODO: subresource integrity check? */
+
+ if (xhr.status === 200) {
+ return eval(xhr.response);
+ } else {
+ lua.lua_pushstring(L, lua.to_luastring(`${xhr.status}: ${xhr.statusText}`));
+ return null;
+ }
+ };
+}
+
/*
** return registry.LUA_NOENV as a boolean
*/