UNPKG

@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
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 };