UNPKG

wasm-module

Version:

A web component for making web assembly modules that can interact with browser easily

2 lines (1 loc) 6.16 kB
var js_ffi={run:function(path){let allocations=[void 0,null,console,window,document],empty=[];function allocate(e){const n=empty.length>0?empty.pop():allocations.length;return allocations[n]=e,n}function allocator_release(e){e>4&&(delete allocations[e],empty.push(e))}function allocator_get(e){if(e<0)return;const n=allocations[e];return 0===e||n||console.error(`Asked for ${e} after it was released.`),n}let functions=[],mod=null;const TYPE_NOTHING=0,TYPE_NUM=1,TYPE_STRING=2,TYPE_BOOL=3,TYPE_FUNCTION=4,TYPE_OBJ=5,TYPE_UINT8_ARRAY=6,utf8dec=new TextDecoder("utf-8"),utf8enc=new TextEncoder("utf-8");function createString(e){let n=utf8enc.encode(e+String.fromCharCode(0)),t=n.length,o=mod.instance.exports.jsffimalloc(t);return new Uint8Array(mod.instance.exports.memory.buffer).set(n,o),o}function getStringFromMemory(e,n){const t=new Uint8Array(e),o=[];let r=n;for(;0!==t[r];)o.push(t[r]),r++;return utf8dec.decode(new Uint8Array(o))}function getUint8ArrayFromMemory(e,n){const t=new Uint32Array(e),o=(new Uint8Array(e),t[n/4]),r=t[n/4+1];let c=e.slice(r,r+o);return new Uint8Array(c)}function convertArgument(e,n){if(e==TYPE_NOTHING)n=void 0;else if(e==TYPE_STRING)n=getStringFromMemory(mod.instance.exports.memory.buffer,n);else if(e==TYPE_BOOL)n=0!=n;else if(e==TYPE_OBJ)n=allocator_get(n);else if(e==TYPE_UINT8_ARRAY)n=getUint8ArrayFromMemory(mod.instance.exports.memory.buffer,n);else if(e==TYPE_FUNCTION){let e=n;n=function(n,t,o,r,c,s,l,u,a,v){let i=arguments.length;0===i?mod.instance.exports.jsfficallback(e,0,0,0,0,0,0,0,0,0,0):1===i?mod.instance.exports.jsfficallback(e,convertResponse(n),0,0,0,0,0,0,0,0,0):2===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),0,0,0,0,0,0,0,0):3===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),0,0,0,0,0,0,0):4===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),0,0,0,0,0,0):5===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),convertResponse(c),0,0,0,0,0):6===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),convertResponse(c),convertResponse(s),0,0,0,0):7===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),convertResponse(c),convertResponse(s),convertResponse(l),0,0,0):8===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),convertResponse(c),convertResponse(s),convertResponse(l),convertResponse(u),0,0):9===i?mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),convertResponse(c),convertResponse(s),convertResponse(l),convertResponse(u),convertResponse(a),0):10===i&&mod.instance.exports.jsfficallback(e,convertResponse(n),convertResponse(t),convertResponse(o),convertResponse(r),convertResponse(c),convertResponse(s),convertResponse(l),convertResponse(u),convertResponse(a),convertResponse(v))}}return n}function convertResponse(e){const n=typeof e;return"string"===n?createString(e):"number"===n?e:void 0===e?0:null===e?1:!0===e?1:!1===e?0:allocate(e)}fetch(path).then(e=>e.arrayBuffer()).then(bytes=>WebAssembly.instantiate(bytes,{env:{jsffirelease:function(e){allocator_release(e)},jsffiregister:function(code){code=getStringFromMemory(mod.instance.exports.memory.buffer,code);let id=functions.length;return functions.push(eval(code)),id},jsfficall0:function(e,n){return convertResponse(functions[n].call(allocator_get(e)))},jsfficall1:function(e,n,t,o){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o)))},jsfficall2:function(e,n,t,o,r,c){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c)))},jsfficall3:function(e,n,t,o,r,c,s,l){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l)))},jsfficall4:function(e,n,t,o,r,c,s,l,u,a){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a)))},jsfficall5:function(e,n,t,o,r,c,s,l,u,a,v,i){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a),convertArgument(v,i)))},jsfficall6:function(e,n,t,o,r,c,s,l,u,a,v,i,f,m){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a),convertArgument(v,i),convertArgument(f,m)))},jsfficall7:function(e,n,t,o,r,c,s,l,u,a,v,i,f,m,p,g){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a),convertArgument(v,i),convertArgument(f,m),convertArgument(p,g)))},jsfficall8:function(e,n,t,o,r,c,s,l,u,a,v,i,f,m,p,g,R,A){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a),convertArgument(v,i),convertArgument(f,m),convertArgument(p,g),convertArgument(R,A)))},jsfficall9:function(e,n,t,o,r,c,s,l,u,a,v,i,f,m,p,g,R,A,d,_){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a),convertArgument(v,i),convertArgument(f,m),convertArgument(p,g),convertArgument(R,A),convertArgument(d,_)))},jsfficall10:function(e,n,t,o,r,c,s,l,u,a,v,i,f,m,p,g,R,A,d,_,j,y){return convertResponse(functions[n].call(allocator_get(e),convertArgument(t,o),convertArgument(r,c),convertArgument(s,l),convertArgument(u,a),convertArgument(v,i),convertArgument(f,m),convertArgument(p,g),convertArgument(R,A),convertArgument(d,_),convertArgument(j,y)))}}}).then(e=>{mod=e,e.instance.exports.main()}))}};class WasmModule extends HTMLElement{connectedCallback(){let e=this.getAttribute("src");e?js_ffi.run(e):console.error("no 'src' attribute specified for wasm-module")}}window.customElements.define("wasm-module",WasmModule);