@webwriter/code
Version:
Write and run code as a code cell. Supports several languages (HTML, JavaScript/TypeScript, Python, Java, WebAssembly).
772 lines (771 loc) • 16 kB
JavaScript
let n = new Map();
let e = null;
let a = /.+\.wasm:wasm-function\[[0-9]+]:0x([0-9a-f]+).*/;
let S = function (e) {
let t = n.get(e);
if (typeof t === "undefined") {
t = new Function("return " + e + ";");
n.set(e, t);
}
return t();
};
let D = function (e, t) {
new Function("value", e + " = value;")(t);
};
function y(e, t) {
let n = { exports: null, userExports: t, stackDeobfuscator: null };
if (!M()) {
r(e);
}
o(e);
l(e, n);
i(e, n);
u(e, n);
e.teavmMath = Math;
return {
supplyExports(e) {
n.exports = e;
},
supplyStackDeobfuscator(e) {
n.stackDeobfuscator = e;
},
};
}
let E = Symbol("javaException");
class W extends Error {
#context;
constructor(e, t) {
super();
this.#context = e;
this[E] = t;
e.exports["teavm.setJsException"](t, this);
}
get message() {
let t = this.#context.exports["teavm.exceptionMessage"];
if (typeof t === "function") {
let e = t(this[E]);
if (e != null) {
return e;
}
}
return "(could not fetch message)";
}
}
function r(e) {
e["wasm:js-string"] = {
fromCharCode: e => String.fromCharCode(e),
fromCharCodeArray: () => {
throw new Error("Not supported");
},
intoCharCodeArray: () => {
throw new Error("Not supported");
},
concat: (e, t) => e + t,
charCodeAt: (e, t) => e.charCodeAt(t),
length: e => e.length,
substring: (e, t, n) => e.substring(t, n),
};
}
function o(e) {
e.teavmDate = {
currentTimeMillis: () => new Date().getTime(),
dateToString: e => new Date(e).toString(),
getYear: e => new Date(e).getFullYear(),
setYear(e, t) {
let n = new Date(e);
n.setFullYear(t);
return n.getTime();
},
getMonth: e => new Date(e).getMonth(),
setMonth(e, t) {
let n = new Date(e);
n.setMonth(t);
return n.getTime();
},
getDate: e => new Date(e).getDate(),
setDate(e, t) {
let n = new Date(e);
n.setDate(t);
return n.getTime();
},
create: (e, t, n, r, o, a) => new Date(e, t, n, r, o, a).getTime(),
createFromUTC: (e, t, n, r, o, a) => Date.UTC(e, t, n, r, o, a),
};
}
function l(e) {
let t = "";
let n = "";
e.teavmConsole = {
putcharStderr(e) {
if (e === 10) {
console.error(t);
t = "";
} else {
t += String.fromCharCode(e);
}
},
putcharStdout(e) {
if (e === 10) {
console.log(n);
n = "";
} else {
n += String.fromCharCode(e);
}
},
};
}
function i(e, r) {
let o = new FinalizationRegistry(e => {
let t = r.exports["teavm.reportGarbageCollectedValue"];
if (typeof t !== "undefined") {
t(e.queue, e.ref);
}
});
let n = new FinalizationRegistry(e => {
let t = r.exports["teavm.reportGarbageCollectedString"];
if (typeof t === "function") {
t(e);
}
});
e.teavm = {
createWeakRef(e, t, n) {
if (n !== null) {
o.register(e, { ref: t, queue: n });
}
return new WeakRef(e);
},
deref: e => {
let t = e.deref();
return t !== void 0 ? t : null;
},
createStringWeakRef(e, t) {
n.register(e, t);
return new WeakRef(e);
},
stringDeref: e => e.deref(),
takeStackTrace() {
let t = new Error().stack;
let n = [];
for (let e of t.split("\n")) {
let t = a.exec(e);
if (t !== null && t.length >= 2) {
let e = parseInt(t[1], 16);
n.push(e);
}
}
return {
getStack() {
let e;
if (r.stackDeobfuscator) {
try {
e = r.stackDeobfuscator(n);
} catch (e) {
console.warn("Could not deobfuscate stack", e);
}
}
if (!e) {
e = n.map(e => {
return {
className: "java.lang.Throwable$FakeClass",
method: "fakeMethod",
file: "Throwable.java",
line: e,
};
});
}
return e;
},
};
},
decorateException(e) {
new W(r, e);
},
linearMemory() {
return r.exports["teavm.memory"].buffer;
},
};
}
function u(o, l) {
let i = Symbol("javaObject");
let u = Symbol("functions");
let a = Symbol("functionOrigin");
let s = Symbol("wrapperCallMarker");
let c = new WeakMap();
let n = new WeakMap();
let r = new Map();
let f = new FinalizationRegistry(e => r.delete(e));
let p = new WeakMap();
let t = 2463534242;
let y = () => {
let e = t;
e ^= e << 13;
e ^= e >>> 17;
e ^= e << 5;
t = e;
return e;
};
function h(e) {
return e;
}
function d(n) {
let r = "";
let e = n.charAt(0);
r += m(e) ? e : "_";
for (let t = 1; t < n.length; ++t) {
let e = n.charAt(t);
r += w(e) ? e : "_";
}
return r;
}
function m(e) {
return (e >= "A" && e <= "Z") || (e >= "a" && e <= "z") || e === "_" || e === "$";
}
function w(e) {
return m(e) || (e >= "0" && e <= "9");
}
function e(e, t, n) {
if (e === null) {
D(t, n);
} else {
e[t] = n;
}
}
function b(a) {
if (a instanceof WebAssembly.Exception) {
let r = l.exports["teavm.javaException"];
let o = l.exports["teavm.getJsException"];
if (a.is(r)) {
let e = a.getArg(r, 0);
let t = x(e);
if (t !== null) {
return t;
}
let n = o(e);
if (typeof n === "undefined") {
n = new W(l, e);
}
return n;
}
}
return a;
}
function g(e) {
if (E in e) {
return e[E];
} else {
return l.exports["teavm.js.wrapException"](e);
}
}
function v(e) {
l.exports["teavm.js.throwException"](g(e));
}
function x(e) {
return l.exports["teavm.js.extractException"](e);
}
function j(e) {
throw b(e);
}
function J(e, t) {
try {
return e !== null ? e[t] : S(t);
} catch (e) {
v(e);
}
}
function A(t) {
let n = [];
for (let e = 0; e < t.length; ++e) {
n.push("p" + e);
}
let e = n.length === 0 ? "" : n.join(", ");
return new Function(
"rethrowJavaAsJs",
"fn",
`return function(${e}) {\n` +
` try {\n` +
` return fn(${e});\n` +
` } catch (e) {\n` +
` rethrowJavaAsJs(e);\n` +
` }\n` +
`};`,
)(j, t);
}
function C(e, t) {
return new Function(
"constructor",
`return function ${e}(marker, javaObject) {\n` +
` return constructor.call(this, marker, javaObject);\n` +
`}\n`,
)(t);
}
o.teavmJso = {
stringBuiltinsSupported: () => M(),
isUndefined: e => typeof e === "undefined",
emptyArray: () => [],
appendToArray: (e, t) => e.push(t),
unwrapBoolean: e => (e ? 1 : 0),
wrapBoolean: e => !!e,
getProperty: J,
setProperty: e,
setPropertyPure: e,
global(e) {
try {
return S(e);
} catch (e) {
v(e);
}
},
createClass(e, t, n) {
e = d(e || "JavaObject");
let r;
let o = C(e, function (e, t) {
if (e === s) {
r.call(this, t);
} else if (n === null) {
throw new Error("This class can't be instantiated directly");
} else {
try {
return n.apply(null, arguments);
} catch (e) {
j(e);
}
}
});
if (t === null) {
r = function (e) {
this[i] = e;
this[u] = null;
};
} else {
r = function (e) {
t.call(this, e);
};
}
o.prototype = Object.create(t ? t.prototype : Object.prototype);
o.prototype.constructor = o;
let a = C(e, function (e) {
return o.call(this, s, e);
});
a[s] = o;
a.prototype = o.prototype;
return a;
},
exportClass(e) {
return e[s];
},
defineMethod(e, t, n) {
let r = [];
for (let e = 1; e < n.length; ++e) {
r.push("p" + e);
}
let o = r.length === 0 ? "" : r.join(", ");
e.prototype[t] = new Function(
"rethrowJavaAsJs",
"fn",
`return function(${o}) {\n` +
` try {\n` +
` return fn(${["this", r].join(", ")});\n` +
` } catch (e) {\n` +
` rethrowJavaAsJs(e);\n` +
` }\n` +
`};`,
)(j, n);
},
defineStaticMethod(e, t, n) {
e[t] = A(n);
},
defineFunction: A,
defineProperty(e, t, n, r) {
let o = {
get() {
try {
return n(this);
} catch (e) {
j(e);
}
},
};
if (r !== null) {
o.set = function (e) {
try {
r(this, e);
} catch (e) {
j(e);
}
};
}
Object.defineProperty(e.prototype, t, o);
},
defineStaticProperty(e, t, n, r) {
let o = {
get() {
try {
return n();
} catch (e) {
j(e);
}
},
};
if (r !== null) {
o.set = function (e) {
try {
r(e);
} catch (e) {
j(e);
}
};
}
Object.defineProperty(e, t, o);
},
javaObjectToJS(e, t) {
if (e === null) {
return null;
}
let n = c.get(e);
if (typeof n != "undefined") {
let e = n.deref();
if (typeof e !== "undefined") {
return e;
}
}
let r = new t(e);
c.set(e, new WeakRef(r));
return r;
},
unwrapJavaObject(e) {
return e[i];
},
asFunction(e, t) {
let n = e[u];
if (n === null) {
n = Object.create(null);
e[u] = n;
}
let r = n[t];
if (typeof r !== "function") {
r = function () {
return e[t].apply(e, arguments);
};
r[a] = e;
n[t] = r;
}
return r;
},
functionAsObject(t, n) {
let r = t[a];
if (typeof r !== "undefined") {
let e = r[u];
if (e !== void 0 && e[n] === t) {
return r;
}
}
return {
[n]: function (...e) {
try {
return t(...e);
} catch (e) {
j(e);
}
},
};
},
wrapObject(t) {
if (t === null) {
return null;
}
if (typeof t === "object" || typeof t === "function" || typeof "obj" === "symbol") {
let e = t[i];
if (typeof e === "object") {
return e;
}
e = n.get(t);
if (e !== void 0) {
e = e.deref();
if (e !== void 0) {
return e;
}
}
e = l.exports["teavm.jso.createWrapper"](t);
n.set(t, new WeakRef(e));
return e;
} else {
let e = r.get(t);
if (e !== void 0) {
e = e.deref();
if (e !== void 0) {
return e;
}
}
e = l.exports["teavm.jso.createWrapper"](t);
r.set(t, new WeakRef(e));
f.register(e, t);
return e;
}
},
isPrimitive: (e, t) => typeof e === t,
instanceOf: (e, t) => e instanceof t,
instanceOfOrNull: (e, t) => e === null || e instanceof t,
sameRef: (e, t) => e === t,
hashCode: t => {
if (typeof t === "object" || typeof t === "function" || typeof t === "symbol") {
let e = p.get(t);
if (typeof e === "number") {
return e;
}
e = y();
p.set(t, e);
return e;
} else if (typeof t === "number") {
return t | 0;
} else if (typeof t === "bigint") {
return BigInt.asIntN(t, 32);
} else if (typeof t === "boolean") {
return t ? 1 : 0;
} else {
return 0;
}
},
apply: (e, t, n) => {
try {
if (e === null) {
let e = S(t);
return e(...n);
} else {
return e[t](...n);
}
} catch (e) {
v(e);
}
},
concatArray: (e, t) => [...e, ...t],
getJavaException: e => e[E],
getJSException: e => {
let t = l.exports["teavm.getJsException"];
return t(e);
},
jsExports: () => l.userExports,
};
for (let e of [
"wrapByte",
"wrapShort",
"wrapChar",
"wrapInt",
"wrapLong",
"wrapFloat",
"wrapDouble",
"unwrapByte",
"unwrapShort",
"unwrapChar",
"unwrapInt",
"unwrapLong",
"unwrapFloat",
"unwrapDouble",
]) {
o.teavmJso[e] = h;
}
function F(e) {
try {
return e();
} catch (e) {
v(e);
}
}
let k = [];
for (let r = 0; r < 32; ++r) {
let e = k.length === 0 ? "" : k.join(", ");
let t = [...k, "body"].join(", ");
o.teavmJso["createFunction" + r] = new Function(
"wrapCallFromJavaToJs",
...k,
"body",
`return new Function('wrapCallFromJavaToJs', ${t}).bind(this, wrapCallFromJavaToJs);`,
).bind(null, F);
o.teavmJso["bindFunction" + r] = (e, ...t) => e.bind(null, ...t);
o.teavmJso["callFunction" + r] = new Function(
"rethrowJsAsJava",
"fn",
...k,
`try {\n` +
` return fn(${e});\n` +
`} catch (e) {\n` +
` rethrowJsAsJava(e);\n` +
`}`,
).bind(null, v);
o.teavmJso["callMethod" + r] = new Function(
"rethrowJsAsJava",
"getGlobalName",
"instance",
"method",
...k,
`try {\n` +
` return instance !== null\n` +
` ? instance[method](${e})\n` +
` : getGlobalName(method)(${e});\n` +
`} catch (e) {\n` +
` rethrowJsAsJava(e);\n` +
`}`,
).bind(null, v, S);
o.teavmJso["construct" + r] = new Function(
"rethrowJsAsJava",
"constructor",
...k,
`try {\n` +
` return new constructor(${e});\n` +
`} catch (e) {\n` +
` rethrowJsAsJava(e);\n` +
`}`,
).bind(null, v);
o.teavmJso["arrayOf" + r] = new Function(...k, "return [" + e + "]");
let n = "p" + (r + 1);
k.push(n);
}
}
function t(e) {
return new Proxy(e, {
get(e, t) {
let n = e[t];
return new WebAssembly.Global({ value: "externref", mutable: false }, n);
},
});
}
async function h(t, a) {
let r = [];
let l = {};
for (let { module: o, name: e, kind: n } of WebAssembly.Module.imports(t)) {
if (n !== "global" || o in a) {
continue;
}
let t = l[o];
if (t === void 0) {
let e = [];
t = e;
l[o] = t;
r.push(
(async () => {
let n = await import(o);
let r = {};
for (let t of e) {
let e = t === "__self__" ? n : n[t];
r[t] = new WebAssembly.Global({ value: "externref", mutable: false }, e);
}
a[o] = r;
})(),
);
}
t.push(e);
}
if (r.length === 0) {
return;
}
await Promise.all(r);
}
async function s(e, t) {
if (!t) {
t = {};
}
let n = t.stackDeobfuscator || {};
let r = n.infoLocation || "auto";
let o =
typeof e === "string"
? WebAssembly.compileStreaming(fetch(e), { builtins: ["js-string"] })
: WebAssembly.compile(e, { builtins: ["js-string"] });
let [a, l, i] = await Promise.all([n.enabled ? d(e, n) : Promise.resolve(null), o, w(e, r, n)]);
const u = {};
let s = {};
const c = y(u, s);
if (typeof t.installImports !== "undefined") {
t.installImports(u);
}
if (!t.noAutoImports) {
await h(l, u);
}
let f = await WebAssembly.instantiate(l, u);
c.supplyExports(f.exports);
if (a) {
let e = r === "auto" || r === "embedded" ? l : null;
let t = m(e, i, a);
if (t !== null) {
c.supplyStackDeobfuscator(t);
}
}
let p = { exports: s, instance: f, module: f.module };
for (let t in f.exports) {
let e = f.exports[t];
if (e instanceof WebAssembly.Global) {
Object.defineProperty(s, t, { get: () => e.value });
}
}
return p;
}
let c = null;
function M() {
if (c === null) {
let e = new Int8Array([
0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 2, 23, 1, 14, 119, 97, 115, 109, 58,
106, 115, 45, 115, 116, 114, 105, 110, 103, 4, 99, 97, 115, 116, 0, 0, 3, 1, 0, 5, 4, 1,
1, 0, 0, 10, -127, -128, -128, 0, 0,
]);
c = !WebAssembly.validate(e, { builtins: ["js-string"] });
}
return c;
}
async function d(e, t) {
if (typeof e !== "string" && !t.path) {
return null;
}
try {
const n = {};
const r = y(n, {});
const o = t.path || e + "-deobfuscator.wasm";
const { instance: a } = await WebAssembly.instantiateStreaming(fetch(o), n, {
builtins: ["js-string"],
});
r.supplyExports(a.exports);
return a;
} catch (e) {
console.warn("Could not load deobfuscator", e);
return null;
}
}
function m(e, t, n) {
let r = null;
let o = false;
function a() {
if (!o) {
o = true;
if (t !== null) {
try {
r = n.exports.createFromExternalFile.value(t);
} catch (e) {
console.warn("Could not load create deobfuscator", e);
}
}
if (r == null && e !== null) {
try {
r = n.exports.createForModule.value(e);
} catch (e) {
console.warn("Could not create deobfuscator from module data", e);
}
}
}
}
return e => {
a();
return r !== null ? r.deobfuscate(e) : [];
};
}
async function w(e, t, n) {
if (!n.enabled || typeof e !== "string") {
return null;
}
if (t !== "auto" && t !== "external") {
return null;
}
let r = n.externalInfoPath || e + ".teadbg";
let o = await fetch(r);
if (!o.ok) {
return null;
}
return new Int8Array(await o.arrayBuffer());
}
export { y as defaults, s as load, t as wrapImport };