diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-15 14:28:34 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-15 14:28:34 -0500 |
commit | ed3a55508532fbaf6359abcc6e6a29192139cc9c (patch) | |
tree | a64f46a7b093281cc309c084d48818dd8a7d9854 | |
parent | 17f98c7d0a864502e5722e756e33c6d2fef8a2c0 (diff) | |
download | teleterm-ed3a55508532fbaf6359abcc6e6a29192139cc9c.tar.gz teleterm-ed3a55508532fbaf6359abcc6e6a29192139cc9c.zip |
move paths around a bit
this seems more likely to work when building the published crate
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | teleterm/src/web.rs | 6 | ||||
-rw-r--r-- | teleterm/static/index.html (renamed from static/index.html) | 0 | ||||
-rw-r--r-- | teleterm/static/teleterm_web.js | 343 | ||||
-rw-r--r-- | teleterm/static/teleterm_web_bg.wasm | bin | 0 -> 38686 bytes |
5 files changed, 351 insertions, 5 deletions
@@ -95,8 +95,11 @@ install-arch: pkg/$(ARCH_PACKAGE) @sudo pacman -U pkg/$(ARCH_PACKAGE) .PHONY: install-arch -wasm: target/wasm/teleterm_web_bg.wasm +wasm: teleterm/static/teleterm_web.js teleterm/static/teleterm_web_bg.wasm .PHONY: wasm -target/wasm/teleterm_web_bg.wasm: teleterm-web/Cargo.toml teleterm-web/src/lib.rs +teleterm/static/%: target/wasm/% + @cp -f $< $@ + +target/wasm/teleterm_web.js target/wasm/teleterm_web_bg.wasm: teleterm-web/Cargo.toml teleterm-web/src/lib.rs @wasm-pack build --no-typescript --target web --out-dir ../target/wasm teleterm-web diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index 5159233..1cf3a31 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -8,15 +8,15 @@ use lazy_static_include::*; lazy_static_include::lazy_static_include_bytes!( INDEX_HTML, - "../static/index.html" + "static/index.html" ); lazy_static_include::lazy_static_include_bytes!( TELETERM_WEB_JS, - "../target/wasm/teleterm_web.js" + "static/teleterm_web.js" ); lazy_static_include::lazy_static_include_bytes!( TELETERM_WEB_WASM, - "../target/wasm/teleterm_web_bg.wasm" + "static/teleterm_web_bg.wasm" ); pub fn router() -> impl gotham::handler::NewHandler { diff --git a/static/index.html b/teleterm/static/index.html index 58a7c36..58a7c36 100644 --- a/static/index.html +++ b/teleterm/static/index.html diff --git a/teleterm/static/teleterm_web.js b/teleterm/static/teleterm_web.js new file mode 100644 index 0000000..eccf740 --- /dev/null +++ b/teleterm/static/teleterm_web.js @@ -0,0 +1,343 @@ + +let wasm; + +const heap = new Array(32); + +heap.fill(undefined); + +heap.push(undefined, null, true, false); + +let heap_next = heap.length; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} +function __wbg_elem_binding0(arg0, arg1, arg2) { + wasm.__wbg_function_table.get(2)(arg0, arg1, addHeapObject(arg2)); +} +function __wbg_elem_binding1(arg0, arg1, arg2) { + wasm.__wbg_function_table.get(2)(arg0, arg1, addHeapObject(arg2)); +} +function __wbg_elem_binding2(arg0, arg1, arg2) { + wasm.__wbg_function_table.get(2)(arg0, arg1, addHeapObject(arg2)); +} +/** +*/ +export function main() { + wasm.main(); +} + +function getObject(idx) { return heap[idx]; } + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +let cachegetUint8Memory = null; +function getUint8Memory() { + if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) { + cachegetUint8Memory = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory; +} + +function getStringFromWasm(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len)); +} + +function handleError(e) { + wasm.__wbindgen_exn_store(addHeapObject(e)); +} + +let WASM_VECTOR_LEN = 0; + +let cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm(arg) { + + let len = arg.length; + let ptr = wasm.__wbindgen_malloc(len); + + const mem = getUint8Memory(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory = null; +function getInt32Memory() { + if (cachegetInt32Memory === null || cachegetInt32Memory.buffer !== wasm.memory.buffer) { + cachegetInt32Memory = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory; +} + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} + +function init(module) { + if (typeof module === 'undefined') { + module = import.meta.url.replace(/\.js$/, '_bg.wasm'); + } + let result; + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_cb_forget = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbg_log_93d35dab6e237612 = function(arg0, arg1) { + console.log(getStringFromWasm(arg0, arg1)); + }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_object_clone_ref = function(arg0) { + const ret = getObject(arg0); + return addHeapObject(ret); + }; + imports.wbg.__widl_f_new_WebSocket = function(arg0, arg1) { + try { + const ret = new WebSocket(getStringFromWasm(arg0, arg1)); + return addHeapObject(ret); + } catch (e) { + handleError(e) + } + }; + imports.wbg.__widl_f_send_with_str_WebSocket = function(arg0, arg1, arg2) { + try { + getObject(arg0).send(getStringFromWasm(arg1, arg2)); + } catch (e) { + handleError(e) + } + }; + imports.wbg.__widl_f_set_onopen_WebSocket = function(arg0, arg1) { + getObject(arg0).onopen = getObject(arg1); + }; + imports.wbg.__widl_f_set_onerror_WebSocket = function(arg0, arg1) { + getObject(arg0).onerror = getObject(arg1); + }; + imports.wbg.__widl_f_set_onmessage_WebSocket = function(arg0, arg1) { + getObject(arg0).onmessage = getObject(arg1); + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ret0 = passStringToWasm(ret); + const ret1 = WASM_VECTOR_LEN; + getInt32Memory()[arg0 / 4 + 0] = ret0; + getInt32Memory()[arg0 / 4 + 1] = ret1; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm(arg0, arg1)); + }; + imports.wbg.__wbindgen_rethrow = function(arg0) { + throw takeObject(arg0); + }; + imports.wbg.__wbindgen_closure_wrapper19 = function(arg0, arg1, arg2) { + const state = { a: arg0, b: arg1, cnt: 1 }; + const real = (arg0) => { + state.cnt++; + const a = state.a; + state.a = 0; + try { + return __wbg_elem_binding2(a, state.b, arg0); + } finally { + if (--state.cnt === 0) wasm.__wbg_function_table.get(3)(a, state.b); + else state.a = a; + } + } + ; + real.original = state; + const ret = real; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_closure_wrapper17 = function(arg0, arg1, arg2) { + const state = { a: arg0, b: arg1, cnt: 1 }; + const real = (arg0) => { + state.cnt++; + const a = state.a; + state.a = 0; + try { + return __wbg_elem_binding0(a, state.b, arg0); + } finally { + if (--state.cnt === 0) wasm.__wbg_function_table.get(3)(a, state.b); + else state.a = a; + } + } + ; + real.original = state; + const ret = real; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_closure_wrapper21 = function(arg0, arg1, arg2) { + const state = { a: arg0, b: arg1, cnt: 1 }; + const real = (arg0) => { + state.cnt++; + const a = state.a; + state.a = 0; + try { + return __wbg_elem_binding1(a, state.b, arg0); + } finally { + if (--state.cnt === 0) wasm.__wbg_function_table.get(3)(a, state.b); + else state.a = a; + } + } + ; + real.original = state; + const ret = real; + return addHeapObject(ret); + }; + + if ((typeof URL === 'function' && module instanceof URL) || typeof module === 'string' || (typeof Request === 'function' && module instanceof Request)) { + + const response = fetch(module); + if (typeof WebAssembly.instantiateStreaming === 'function') { + result = WebAssembly.instantiateStreaming(response, imports) + .catch(e => { + return response + .then(r => { + if (r.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + return r.arrayBuffer(); + } else { + throw e; + } + }) + .then(bytes => WebAssembly.instantiate(bytes, imports)); + }); + } else { + result = response + .then(r => r.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, imports)); + } + } else { + + result = WebAssembly.instantiate(module, imports) + .then(result => { + if (result instanceof WebAssembly.Instance) { + return { instance: result, module }; + } else { + return result; + } + }); + } + return result.then(({instance, module}) => { + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + wasm.__wbindgen_start(); + return wasm; + }); +} + +export default init; + diff --git a/teleterm/static/teleterm_web_bg.wasm b/teleterm/static/teleterm_web_bg.wasm Binary files differnew file mode 100644 index 0000000..38eeef1 --- /dev/null +++ b/teleterm/static/teleterm_web_bg.wasm |