@georgestagg/webr
Version:
The statistical programming langauge R compiled into WASM for use in a web browser and node.
6 lines (5 loc) • 36.5 kB
JavaScript
var vt=Object.create;var Le=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var It=Object.getOwnPropertyNames,nt=Object.getOwnPropertySymbols,Pt=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty,Nt=Object.prototype.propertyIsEnumerable;var st=(n,e,t)=>e in n?Le(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,at=(n,e)=>{for(var t in e||(e={}))ot.call(e,t)&&st(n,t,e[t]);if(nt)for(var t of nt(e))Nt.call(e,t)&&st(n,t,e[t]);return n};var M=(n=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(n,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):n)(function(n){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+n+'" is not supported')});var Ut=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of It(e))!ot.call(n,s)&&s!==t&&Le(n,s,{get:()=>e[s],enumerable:!(r=St(e,s))||r.enumerable});return n};var de=(n,e,t)=>(t=n!=null?vt(Pt(n)):{},Ut(e||!n||!n.__esModule?Le(t,"default",{value:n,enumerable:!0}):t,n));var qe=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var i=(n,e,t)=>(qe(n,e,"read from private field"),t?t.call(n):e.get(n)),l=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)},d=(n,e,t,r)=>(qe(n,e,"write to private field"),r?r.call(n,t):e.set(n,t),t);var g=(n,e,t)=>(qe(n,e,"access private method"),t);var h=typeof process<"u"&&process.release&&process.release.name==="node"&&typeof process.browser>"u",Be;if(globalThis.document)Be=n=>new Promise((e,t)=>{let r=document.createElement("script");r.src=n,r.onload=()=>e(),r.onerror=t,document.head.appendChild(r)});else if(globalThis.importScripts)Be=async n=>{try{globalThis.importScripts(n)}catch(e){if(e instanceof TypeError)await Promise.resolve().then(()=>de(M(n)));else throw e}};else if(h)Be=async n=>{let e=(await Promise.resolve().then(()=>de(M("path")))).default;await Promise.resolve().then(()=>de(M(e.resolve(n))))};else throw new Error("Cannot determine runtime environment");var b,w,H,Fe,_=class{constructor(){l(this,H);l(this,b,void 0);l(this,w,void 0);d(this,w,[]),d(this,b,[])}put(e){i(this,w).length||g(this,H,Fe).call(this),i(this,w).shift()(e)}async get(){return i(this,b).length||g(this,H,Fe).call(this),i(this,b).shift()}isEmpty(){return!i(this,b).length}isBlocked(){return!!i(this,w).length}get length(){return i(this,b).length-i(this,w).length}};b=new WeakMap,w=new WeakMap,H=new WeakSet,Fe=function(){i(this,b).push(new Promise(e=>{i(this,w).push(e)}))};function v(){let n={resolve:t=>{},reject:t=>{},promise:null},e=new Promise((t,r)=>{n.resolve=t,n.reject=r});return n.promise=e,n}function it(n){return new Promise(e=>setTimeout(e,n))}function E(n,e,t,...r){return n===null||typeof n!="object"?n:e(n)?t(n,...r):Array.isArray(n)||ArrayBuffer.isView(n)?n.map(s=>E(s,e,t,...r)):Object.fromEntries(Object.entries(n).map(([s,o],u)=>[s,E(o,e,t,...r)]))}function ut(n){return E(n,e=>"values"in e&&(Array.isArray(e.values)||ArrayBuffer.isView(e))&&e.values.length===1,e=>e.values[0])}function ye(n,e){let t=new XMLHttpRequest;t.open("get",n,!0),t.onload=()=>{let r=new Worker(URL.createObjectURL(new Blob([t.responseText])));e(r)},t.send()}function S(n){if(h)return!1;let e=new URL(location.href),t=new URL(n,location.origin);return!(e.host===t.host&&e.port===t.port&&e.protocol===t.protocol)}var Ct=new WeakMap;function lt(n,e){return Ct.set(n,e),n}var he=63;function fe(){let n=Array.from({length:4},Dt).join("-");if(n.length!==he)throw new Error("comlink internal error: UUID has the wrong length");return n}function Dt(){let n=Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16),e=15-n.length;return e>0&&(n=Array.from({length:e},()=>0).join("")+n),n}function G(n,e){return pt({type:"request",data:{uuid:fe(),msg:n}},e)}function Ve(n,e,t){return pt({type:"response",data:{uuid:n,resp:e}},t)}function pt(n,e){return e&<(n,e),n}function ct(n,e){return{type:"sync-request",data:{msg:n,reqData:e}}}var Wt=new TextEncoder,Lt=new TextDecoder("utf-8");function me(n){return Wt.encode(JSON.stringify(n))}function ge(n){return JSON.parse(Lt.decode(n))}var qt=new TextEncoder;async function yt(n,e,t){try{let{taskId:r,sizeBuffer:s,dataBuffer:o,signalBuffer:u}=e,p=me(t),y=p.length<=o.length;if(Atomics.store(s,0,p.length),Atomics.store(s,1,+y),!y){let[j,x]=Bt(n);o.set(qt.encode(j)),await dt(u,r),o=(await x).dataBuffer}o.set(p),Atomics.store(s,1,1),await dt(u,r)}catch(r){console.warn(r)}}function Bt(n){let e=fe();return[e,new Promise(t=>{h?n.once("message",r=>{!r.id||r.id!==e||t(r)}):n.addEventListener("message",function r(s){!s.data||!s.data.id||s.data.id!==e||(n.removeEventListener("message",r),t(s.data))}),n.start&&n.start()})]}async function dt(n,e){let t=(e>>1)%32,r=1;for(;Atomics.compareExchange(n,t+1,0,e)!==0;)await it(r),r<32&&(r*=2);Atomics.or(n,0,1<<t),Atomics.notify(n,0)}var Vt=new TextDecoder("utf-8"),I,P,J,Q,N,Te=class{constructor(e,t,r=[]){l(this,I,!1);l(this,P,void 0);l(this,J,void 0);l(this,Q,void 0);l(this,N,void 0);this.syncifier=new He;this.endpoint=e,this.msg=t,this.transfers=r,d(this,P,!1)}scheduleSync(){if(!i(this,I))return d(this,I,!0),this.syncifier.scheduleTask(this),d(this,N,this.doSync()),i(this,N).next(),this}poll(){if(!i(this,I))throw new Error("Task not synchronously scheduled");let{done:e,value:t}=i(this,N).next();return e?(d(this,P,!0),d(this,J,t),!0):!1}*doSync(){let{endpoint:e,msg:t,transfers:r}=this,s=new Int32Array(new SharedArrayBuffer(8)),o=this.signalBuffer,u=this.taskId,p=ht(he),y=ct(t,{sizeBuffer:s,dataBuffer:p,signalBuffer:o,taskId:u});if(e.postMessage(y,r),yield,Atomics.load(s,1)===0){let x=Vt.decode(p.slice(0,he));Ht(p);let We=Atomics.load(s,0);p=ht(We),e.postMessage({id:x,dataBuffer:p}),yield}let j=Atomics.load(s,0);return ge(p.slice(0,j))}get result(){if(i(this,Q))throw i(this,Q);if(i(this,P))return i(this,J);throw new Error("Not ready.")}syncify(){return this.scheduleSync(),this.syncifier.syncifyTask(this),this.result}};I=new WeakMap,P=new WeakMap,J=new WeakMap,Q=new WeakMap,N=new WeakMap;var He=class{constructor(){this.nextTaskId=new Int32Array([1]),this.signalBuffer=new Int32Array(new SharedArrayBuffer(32*4+4)),this.tasks=new Map}scheduleTask(e){e.taskId=this.nextTaskId[0],this.nextTaskId[0]+=2,e.signalBuffer=this.signalBuffer,this.tasks.set(e.taskId,e)}waitOnSignalBuffer(){for(;;)switch(Atomics.wait(this.signalBuffer,0,0,50)){case"ok":case"not-equal":return;case"timed-out":Ge[0]!==0&&ft();break;default:throw new Error("Unreachable")}}*tasksIdsToWakeup(){let e=Atomics.load(this.signalBuffer,0);for(let t=0;t<32;t++){let r=1<<t;e&r&&(Atomics.and(this.signalBuffer,0,~r),yield Atomics.exchange(this.signalBuffer,t+1,0))}}pollTasks(e){let t=!1;for(let r of this.tasksIdsToWakeup()){let s=this.tasks.get(r);if(!s)throw new Error(`Assertion error: unknown taskId ${r}.`);s.poll()&&(this.tasks.delete(r),s===e&&(t=!0))}return t}syncifyTask(e){for(;;)if(this.waitOnSignalBuffer(),this.pollTasks(e))return}},we=[];function ht(n){let e=Math.ceil(Math.log2(n));we[e]||(we[e]=[]);let t=we[e].pop();return t?(t.fill(0),t):new Uint8Array(new SharedArrayBuffer(2**e))}function Ht(n){let e=Math.ceil(Math.log2(n.byteLength));we[e].push(n)}var Ge=new Int32Array(new ArrayBuffer(4)),ft=()=>{throw Ge[0]=0,new Error("Interrupted!")};function mt(n){ft=n}function gt(n){Ge=new Int32Array(n)}h&&(globalThis.Worker=M("worker_threads").Worker);var U,C,Me,Rt,_e,bt,X,$=class{constructor(e){l(this,Me);l(this,_e);this.inputQueue=new _;this.outputQueue=new _;l(this,U,void 0);this.close=()=>{};l(this,C,new Map);l(this,X,async(e,t)=>{if(!(!t||!t.type))switch(t.type){case"resolve":d(this,U,new Int32Array(t.data)),this.resolve();return;case"response":g(this,Me,Rt).call(this,t);return;default:this.outputQueue.put(t);return;case"sync-request":{let r=t,s=r.data.msg,o=r.data.reqData;switch(s.type){case"read":{let u=await this.inputQueue.get();await yt(e,o,u);break}default:throw new TypeError(`Unsupported request type '${s.type}'.`)}return}case"request":throw new TypeError("Can't send messages of type 'request' from a worker. Please Use 'sync-request' instead.")}});let t=r=>{g(this,_e,bt).call(this,r),this.close=()=>r.terminate();let s={type:"init",data:{config:e,channelType:T.SharedArrayBuffer}};r.postMessage(s)};if(S(e.WEBR_URL))ye(`${e.WEBR_URL}webr-worker.js`,r=>t(r));else{let r=new Worker(`${e.WEBR_URL}webr-worker.js`);t(r)}({resolve:this.resolve,promise:this.initialised}=v())}async read(){return await this.outputQueue.get()}async flush(){let e=[];for(;!this.outputQueue.isEmpty();)e.push(await this.read());return e}interrupt(){if(!i(this,U))throw new Error("Failed attempt to interrupt before initialising interruptBuffer");i(this,U)[0]=1}write(e){this.inputQueue.put(e)}async request(e,t){let r=G(e,t),{resolve:s,promise:o}=v();return i(this,C).set(r.data.uuid,s),this.write(r),o}};U=new WeakMap,C=new WeakMap,Me=new WeakSet,Rt=function(e){let t=e.data.uuid,r=i(this,C).get(t);r?(i(this,C).delete(t),r(e.data.resp)):console.warn("Can't find request.")},_e=new WeakSet,bt=function(e){h?e.on("message",t=>{i(this,X).call(this,e,t)}):e.onmessage=t=>i(this,X).call(this,e,t.data)},X=new WeakMap;var D,Z,k,K,Je=class{constructor(){l(this,D,void 0);l(this,Z,()=>0);l(this,k,new Int32Array(new SharedArrayBuffer(4)));l(this,K,()=>{});d(this,D,h?M("worker_threads").parentPort:globalThis),gt(i(this,k).buffer),mt(()=>this.handleInterrupt())}resolve(){this.write({type:"resolve",data:i(this,k).buffer})}write(e,t){i(this,D).postMessage(e,t)}read(){let e={type:"read"};return new Te(i(this,D),e).syncify()}inputOrDispatch(){for(;;){let e=this.read();if(e.type==="stdin")return Module.allocateUTF8(e.data);i(this,Z).call(this,e)}}run(e){Module.callMain(e)}setInterrupt(e){d(this,K,e)}handleInterrupt(){i(this,k)[0]!==0&&(i(this,k)[0]=0,i(this,K).call(this))}setDispatchHandler(e){d(this,Z,e)}};D=new WeakMap,Z=new WeakMap,k=new WeakMap,K=new WeakMap;h&&(globalThis.Worker=M("worker_threads").Worker);var W,L,A,q,Oe,wt,je,Tt,xe,Mt,Ee,_t,Y,z=class{constructor(e){l(this,Oe);l(this,je);l(this,xe);l(this,Ee);this.inputQueue=new _;this.outputQueue=new _;this.close=()=>{};l(this,W,new Map);l(this,L,new Map);l(this,A,void 0);l(this,q,!1);l(this,Y,async(e,t)=>{if(!(!t||!t.type))switch(t.type){case"resolve":this.resolve();return;case"response":g(this,xe,Mt).call(this,t);return;default:this.outputQueue.put(t);return;case"sync-request":{let r=t.data;i(this,L).set(r.data.uuid,r.data.msg);return}case"request":throw new TypeError("Can't send messages of type 'request' from a worker.Use service worker fetch request instead.")}});let t=r=>{g(this,Ee,_t).call(this,r),this.close=()=>r.terminate(),g(this,Oe,wt).call(this,`${e.SW_URL}webr-serviceworker.js`).then(s=>{let o={type:"init",data:{config:e,channelType:T.ServiceWorker,clientId:s,location:window.location.href}};r.postMessage(o)})};if(S(e.SW_URL))ye(`${e.SW_URL}webr-worker.js`,r=>t(r));else{let r=new Worker(`${e.SW_URL}webr-worker.js`);t(r)}({resolve:this.resolve,promise:this.initialised}=v())}activeRegistration(){var e;if(!((e=i(this,A))!=null&&e.active))throw new Error("Attempted to obtain a non-existent active registration.");return i(this,A).active}async read(){return await this.outputQueue.get()}async flush(){let e=[];for(;!this.outputQueue.isEmpty();)e.push(await this.read());return e}interrupt(){d(this,q,!0)}write(e){this.inputQueue.put(e)}async request(e,t){let r=G(e,t),{resolve:s,promise:o}=v();return i(this,W).set(r.data.uuid,s),this.write(r),o}};W=new WeakMap,L=new WeakMap,A=new WeakMap,q=new WeakMap,Oe=new WeakSet,wt=async function(e){d(this,A,await navigator.serviceWorker.register(e)),await navigator.serviceWorker.ready,window.addEventListener("beforeunload",()=>{var r;(r=i(this,A))==null||r.unregister()});let t=await new Promise(r=>{navigator.serviceWorker.addEventListener("message",function s(o){o.data.type==="registration-successful"&&(navigator.serviceWorker.removeEventListener("message",s),r(o.data.clientId))}),this.activeRegistration().postMessage({type:"register-client-main"})});return navigator.serviceWorker.addEventListener("message",r=>{g(this,je,Tt).call(this,r)}),t},je=new WeakSet,Tt=async function(e){if(e.data.type==="request"){let t=e.data.data,r=i(this,L).get(t);if(!r)throw new Error("Request not found during service worker XHR request");switch(i(this,L).delete(t),r.type){case"read":{let s=await this.inputQueue.get();this.activeRegistration().postMessage({type:"wasm-webr-fetch-response",uuid:t,response:Ve(t,s)});break}case"interrupt":{let s=i(this,q);this.activeRegistration().postMessage({type:"wasm-webr-fetch-response",uuid:t,response:Ve(t,s)}),d(this,q,!1);break}default:throw new TypeError(`Unsupported request type '${r.type}'.`)}return}},xe=new WeakSet,Mt=function(e){let t=e.data.uuid,r=i(this,W).get(t);r?(i(this,W).delete(t),r(e.data.resp)):console.warn("Can't find request.")},Ee=new WeakSet,_t=function(e){h?e.on("message",t=>{i(this,Y).call(this,e,t)}):e.onmessage=t=>i(this,Y).call(this,e,t.data)},Y=new WeakMap;var ee,te,re,ne,se,Qe=class{constructor(e){l(this,ee,void 0);l(this,te,void 0);l(this,re,void 0);l(this,ne,()=>0);l(this,se,()=>{});this.onMessageFromMainThread=()=>{};if(!e.clientId||!e.location)throw Error("Unable to start service worker channel");d(this,te,e.clientId),d(this,re,e.location),d(this,ee,h?M("worker_threads").parentPort:globalThis)}resolve(){this.write({type:"resolve"})}write(e,t){i(this,ee).postMessage(e,t)}syncRequest(e){let t=G(e);this.write({type:"sync-request",data:t});let r=0;for(;;)try{let s=new URL("__wasm__/webr-fetch-request/",i(this,re)),o=new XMLHttpRequest;o.timeout=6e4,o.responseType="arraybuffer",o.open("POST",s,!1);let u={clientId:i(this,te),uuid:t.data.uuid};return o.send(me(u)),ge(new Uint8Array(o.response))}catch(s){if(s instanceof DOMException&&r++<1e3)console.log("Service worker request failed - resending request");else throw s}}read(){return this.syncRequest({type:"read"}).data.resp}inputOrDispatch(){for(;;){let e=this.read();if(e.type==="stdin")return Module.allocateUTF8(e.data);i(this,ne).call(this,e)}}run(e){Module.callMain(e)}setInterrupt(e){d(this,se,e)}handleInterrupt(){this.syncRequest({type:"interrupt"}).data.resp&&i(this,se).call(this)}setDispatchHandler(e){d(this,ne,e)}};ee=new WeakMap,te=new WeakMap,re=new WeakMap,ne=new WeakMap,se=new WeakMap;var T={Automatic:0,SharedArrayBuffer:1,ServiceWorker:2};function Ot(n){switch(n.channelType){case T.SharedArrayBuffer:return new $(n);case T.ServiceWorker:return new z(n);case T.Automatic:default:if(h||crossOriginIsolated)return new $(n);if("serviceWorker"in navigator&&!S(n.SW_URL))return new z(n);throw new Error("Unable to initialise main thread communication channel")}}var jt="https://cdn.webr.workers.dev/latest/",xt="https://repo.webr.workers.dev/";var c={null:0,symbol:1,pairlist:2,closure:3,environment:4,promise:5,call:6,special:7,builtin:8,string:9,logical:10,integer:13,double:14,complex:15,character:16,dots:17,any:18,list:19,expression:20,bytecode:21,pointer:22,weakref:23,raw:24,s4:25,new:30,free:31,function:99};function $e(n){let e=n.obj;if(m(e))return new(kt(c[e.type]))(e);if(e&&typeof e=="object"&&"type"in e&&e.type==="null")return new ke;if(e===null)return new oe({type:"logical",names:null,values:[null]});if(typeof e=="boolean")return new oe(e);if(typeof e=="number")return new ve(e);if(typeof e=="object"&&"re"in e&&"im"in e)return new Se(e);if(typeof e=="string")return new ae(e);if(Array.isArray(e)){let t=e.map(y=>$e({targetType:"raw",obj:y})),r=Module.allocateUTF8("c"),s=a.protect(a.wrap(Module._Rf_allocVector(c.call,t.length+1)));s.setcar(a.wrap(Module._Rf_install(r)));let o=s.cdr(),u=0;for(;!o.isNull();)o.setcar(t[u++]),o=o.cdr();let p=a.wrap(Module._Rf_eval(s.ptr,a.baseEnv.ptr));return a.unprotect(1),Module._free(r),p}throw new Error("Robj construction for this JS object is not yet supported")}var a=class{constructor(e){if(this.ptr=0,R(e)){if(e.targetType==="ptr")return this.ptr=e.obj.ptr,this;if(e.targetType==="raw")return $e(e)}return $e({targetType:"raw",obj:e})}get[Symbol.toStringTag](){return`RObj:${this.type()}`}type(){let e=Module._TYPEOF(this.ptr);return Object.keys(c).find(r=>c[r]===e)}protect(){this.ptr=Module._Rf_protect(this.ptr)}unprotect(){Module._Rf_unprotect_ptr(this.ptr)}preserve(){Module._R_PreserveObject(this.ptr)}release(){Module._R_ReleaseObject(this.ptr)}isNull(){return Module._TYPEOF(this.ptr)===c.null}isUnbound(){return this.ptr===a.unboundValue.ptr}attrs(){return a.wrap(Module._ATTRIB(this.ptr))}setNames(e){let t;if(e===null)t=a.null,a.protect(t);else if(Array.isArray(e)&&e.every(r=>typeof r=="string"||r===null))t=new ae(e);else throw new Error("Argument to setNames must be null or an Array of strings or null");return Module._Rf_setAttrib(this.ptr,a.namesSymbol.ptr,t.ptr),a.unprotect(1),this}names(){let e=a.wrap(Module._Rf_protect(Module._Rf_getAttrib(this.ptr,a.namesSymbol.ptr)));return e.isNull()?null:e.toArray()}includes(e){let t=this.names();return t&&t.includes(e)}toTree(e={depth:0},t=1){throw new Error("This R object cannot be converted to JS")}toJs(){return this.toTree()}subset(e){let t,r=0;typeof e=="number"?t=Module._Rf_protect(Module._Rf_ScalarInteger(e)):(r=Module.allocateUTF8(e),t=Module._Rf_protect(Module._Rf_mkString(r)));let s=Module._Rf_protect(Module._Rf_lang3(a.bracketSymbol.ptr,this.ptr,t)),o=a.wrap(Module._Rf_eval(s,a.baseEnv.ptr));return Module._Rf_unprotect(2),r&&Module._free(r),o}get(e){let t,r=0;typeof e=="number"?t=Module._Rf_protect(Module._Rf_ScalarInteger(e)):(r=Module.allocateUTF8(e),t=Module._Rf_protect(Module._Rf_mkString(r)));let s=Module._Rf_protect(Module._Rf_lang3(a.bracket2Symbol.ptr,this.ptr,t)),o=a.wrap(Module._Rf_eval(s,a.baseEnv.ptr));return Module._Rf_unprotect(2),r&&Module._free(r),o}getDollar(e){let t=Module.allocateUTF8(e),r=Module._Rf_protect(Module._Rf_mkString(t)),s=Module._Rf_protect(Module._Rf_lang3(a.dollarSymbol.ptr,this.ptr,r)),o=a.wrap(Module._Rf_eval(s,a.baseEnv.ptr));return Module._Rf_unprotect(2),Module._free(t),o}pluck(...e){try{let t=e.reduce((r,s)=>r.get(s),this);return t.isNull()?void 0:t}catch(t){if(t===1/0)return;throw t}}set(e,t){let r,s=0;typeof e=="number"?r=Module._Rf_protect(Module._Rf_ScalarInteger(e)):(s=Module.allocateUTF8(e),r=Module._Rf_protect(Module._Rf_mkString(s)));let o=ie(t)?t:new a({obj:t,targetType:"raw"}),u=Module.allocateUTF8("[[<-"),p=Module._Rf_protect(Module._Rf_lang4(Module._Rf_install(u),this.ptr,r,o.ptr)),y=a.wrap(Module._Rf_eval(p,a.baseEnv.ptr));return Module._Rf_unprotect(2),s&&Module._free(s),Module._free(u),ie(t)||o.release(),y}static getMethods(e){let t=new Set,r=e;do Object.getOwnPropertyNames(r).map(s=>t.add(s));while(r=Object.getPrototypeOf(r));return[...t.keys()].filter(s=>typeof e[s]=="function")}static get globalEnv(){return a.wrap(Module.getValue(Module._R_GlobalEnv,"*"))}static get emptyEnv(){return a.wrap(Module.getValue(Module._R_EmptyEnv,"*"))}static get baseEnv(){return a.wrap(Module.getValue(Module._R_BaseEnv,"*"))}static get null(){return a.wrap(Module.getValue(Module._R_NilValue,"*"))}static get naLogical(){return Module.getValue(Module._R_NaInt,"i32")}static get naInteger(){return Module.getValue(Module._R_NaInt,"i32")}static get naDouble(){return Module.getValue(Module._R_NaReal,"double")}static get naString(){return a.wrap(Module.getValue(Module._R_NaString,"*"))}static get unboundValue(){return a.wrap(Module.getValue(Module._R_UnboundValue,"*"))}static get bracketSymbol(){return a.wrap(Module.getValue(Module._R_BracketSymbol,"*"))}static get bracket2Symbol(){return a.wrap(Module.getValue(Module._R_Bracket2Symbol,"*"))}static get dollarSymbol(){return a.wrap(Module.getValue(Module._R_DollarSymbol,"*"))}static get namesSymbol(){return a.wrap(Module.getValue(Module._R_NamesSymbol,"*"))}static wrap(e){let t=Module._TYPEOF(e);return new(kt(t))({targetType:"ptr",obj:{ptr:e}})}static protect(e){return a.wrap(Module._Rf_protect(e.ptr))}static unprotect(e){Module._Rf_unprotect(e)}static unprotectPtr(e){Module._Rf_unprotect_ptr(e.ptr)}static preserveObject(e){Module._R_PreserveObject(e.ptr)}static releaseObject(e){Module._R_ReleaseObject(e.ptr)}},ke=class extends a{constructor(){return super({targetType:"ptr",obj:{ptr:Module.getValue(Module._R_NilValue,"*")}}),this}toTree(){return{type:"null"}}},Xe=class extends a{toTree(){return this.isUnbound()?null:this.toObject()}toObject(){return{printname:this.printname().isUnbound()?null:this.printname().toString(),symvalue:this.symvalue().isUnbound()?null:this.symvalue().ptr,internal:this.internal().isNull()?null:this.internal().ptr}}printname(){return a.wrap(Module._PRINTNAME(this.ptr))}symvalue(){return a.wrap(Module._SYMVALUE(this.ptr))}internal(){return a.wrap(Module._INTERNAL(this.ptr))}},Ae=class extends a{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=a.wrap(Module._Rf_allocList(t.length));r.preserve();for(let[s,o]=[0,r];!o.isNull();[s,o]=[s+1,o.cdr()])o.setcar(new a(t[s]));r.setNames(m(e)?e.names:null),super({targetType:"ptr",obj:{ptr:r.ptr}})}get length(){return this.toArray().length}toArray(e={depth:1}){return this.toTree(e).values}toObject({allowDuplicateKey:e=!0,allowEmptyKey:t=!1,depth:r=1}={}){let s=this.entries({depth:r}),o=s.map(([u,p])=>u);if(!e&&new Set(o).size!==o.length)throw new Error("Duplicate key when converting pairlist without allowDuplicateKey enabled");if(!t&&o.some(u=>!u))throw new Error("Empty or null key when converting pairlist without allowEmptyKey enabled");return Object.fromEntries(s.filter((u,p)=>s.findIndex(y=>y[0]===u[0])===p))}entries(e={depth:1}){let t=this.toTree(e);return t.values.map((r,s)=>[t.names?t.names[s]:null,r])}toTree(e={depth:0},t=1){let r=[],s=!1,o=[];for(let p=this;!p.isNull();p=p.cdr()){let y=p.tag();y.isNull()?r.push(""):(s=!0,r.push(y.printname().toString())),e.depth&&t>=e.depth?o.push(p.car()):o.push(p.car().toTree(e,t+1))}let u=s?r:null;return{type:this.type(),names:u,values:o}}includes(e){return e in this.toObject()}setcar(e){Module._SETCAR(this.ptr,e.ptr)}car(){return a.wrap(Module._CAR(this.ptr))}cdr(){return a.wrap(Module._CDR(this.ptr))}tag(){return a.wrap(Module._TAG(this.ptr))}},Ze=class extends a{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=Module._Rf_protect(Module._Rf_allocVector(c.list,t.length));t.forEach((s,o)=>{Module._SET_VECTOR_ELT(r,o,new a(s).ptr)}),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}get length(){return Module._LENGTH(this.ptr)}toArray(e={depth:1}){return this.toTree(e).values}toObject({allowDuplicateKey:e=!0,allowEmptyKey:t=!1,depth:r=1}={}){let s=this.entries({depth:r}),o=s.map(([u,p])=>u);if(!e&&new Set(o).size!==o.length)throw new Error("Duplicate key when converting list without allowDuplicateKey enabled");if(!t&&o.some(u=>!u))throw new Error("Empty or null key when converting list without allowEmptyKey enabled");return Object.fromEntries(s.filter((u,p)=>s.findIndex(y=>y[0]===u[0])===p))}entries(e={depth:1}){let t=this.toTree(e);return t.values.map((r,s)=>[t.names?t.names[s]:null,r])}toTree(e={depth:0},t=1){return{type:this.type(),names:this.names(),values:[...Array(this.length).keys()].map(r=>e.depth&&t>=e.depth?this.get(r+1):this.get(r+1).toTree(e,t+1))}}},B=class extends a{exec(...e){let t=e.map(p=>ie(p)?p:new a({obj:p,targetType:"raw"})),r=a.protect(a.wrap(Module._Rf_allocVector(c.call,e.length+1)));r.setcar(this);let s=r.cdr(),o=0;for(;!s.isNull();)s.setcar(t[o++]),s=s.cdr();let u=a.wrap(Module._Rf_eval(r.ptr,a.baseEnv.ptr));return a.unprotect(1),t.forEach((p,y)=>{ie(e[y])||p.release()}),u}},Ke=class extends a{toString(){return Module.UTF8ToString(Module._R_CHAR(this.ptr))}toTree(){return this.toString()}},ze=class extends a{constructor(e){if(R(e))return super(e),this;let t=Module._Rf_protect(Module._R_NewEnv(a.globalEnv.ptr,0,0));e.values.forEach((r,s)=>{let o=e.names?e.names[s]:null;if(!o)throw new Error("Unable to create object in new environment with empty symbol name");let u=Module.allocateUTF8(o);Module._Rf_defineVar(Module._Rf_install(u),new a(r).ptr,t),Module._free(u)}),Module._Rf_unprotect(1),Module._R_PreserveObject(t),super({targetType:"ptr",obj:{ptr:t}})}ls(e=!1,t=!0){return a.wrap(Module._R_lsInternal3(this.ptr,Number(e),Number(t))).toArray()}bind(e,t){let r=Module.allocateUTF8(e);Module._Rf_defineVar(Module._Rf_install(r),ie(t)?t.ptr:new a({targetType:"raw",obj:t}).ptr,this.ptr),Module._free(r)}names(){return this.ls(!0,!0)}frame(){return a.wrap(Module._FRAME(this.ptr))}subset(e){if(typeof e=="number")throw new Error("Object of type environment is not subsettable");return this.getDollar(e)}toObject({depth:e=0}={}){let t=this.names();return Object.fromEntries([...Array(t.length).keys()].map(r=>[t[r],this.getDollar(t[r]).toTree({depth:e})]))}toTree(e={depth:0},t=1){let r=this.names(),s=[...Array(r.length).keys()].map(o=>e.depth&&t>=e.depth?this.getDollar(r[o]):this.getDollar(r[o]).toTree(e,t+1));return{type:this.type(),names:r,values:s}}},O=class extends a{get length(){return Module._LENGTH(this.ptr)}get(e){return super.get(e)}subset(e){return super.subset(e)}getDollar(e){throw new Error("$ operator is invalid for atomic vectors")}detectMissing(){let e=Module.allocateUTF8("is.na"),t=Module._Rf_protect(Module._Rf_lang2(Module._Rf_install(e),this.ptr)),s=a.wrap(Module._Rf_protect(Module._Rf_eval(t,a.baseEnv.ptr))).toTypedArray();return a.unprotect(2),Module._free(e),Array.from(s).map(o=>Boolean(o))}toArray(){let e=this.toTypedArray();return this.detectMissing().map((t,r)=>t?null:e[r])}toObject({allowDuplicateKey:e=!0,allowEmptyKey:t=!1}={}){let r=this.entries(),s=r.map(([o,u])=>o);if(!e&&new Set(s).size!==s.length)throw new Error("Duplicate key when converting atomic vector without allowDuplicateKey enabled");if(!t&&s.some(o=>!o))throw new Error("Empty or null key when converting atomic vector without allowEmptyKey enabled");return Object.fromEntries(r.filter((o,u)=>r.findIndex(p=>p[0]===o[0])===u))}entries(){let e=this.toArray(),t=this.names();return e.map((r,s)=>[t?t[s]:null,r])}toTree(){return{type:this.type(),names:this.names(),values:this.toArray()}}},oe=class extends O{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=Module._Rf_protect(Module._Rf_allocVector(c.logical,t.length)),s=Module._LOGICAL(r);t.forEach((o,u)=>Module.setValue(s+4*u,o===null?a.naLogical:Boolean(o),"i32")),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}getLogical(e){return this.get(e).toArray()[0]}toLogical(){if(this.length!==1)throw new Error("Unable to convert atomic vector of length > 1 to a scalar JS value");return this.getLogical(1)}toTypedArray(){return new Int32Array(Module.HEAP32.subarray(Module._LOGICAL(this.ptr)/4,Module._LOGICAL(this.ptr)/4+this.length))}toArray(){let e=this.toTypedArray();return this.detectMissing().map((t,r)=>t?null:Boolean(e[r]))}},Ye=class extends O{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=Module._Rf_protect(Module._Rf_allocVector(c.integer,t.length)),s=Module._INTEGER(r);t.forEach((o,u)=>Module.setValue(s+4*u,o===null?a.naInteger:Math.round(Number(o)),"i32")),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}getNumber(e){return this.get(e).toArray()[0]}toNumber(){if(this.length!==1)throw new Error("Unable to convert atomic vector of length > 1 to a scalar JS value");return this.getNumber(1)}toTypedArray(){return new Int32Array(Module.HEAP32.subarray(Module._INTEGER(this.ptr)/4,Module._INTEGER(this.ptr)/4+this.length))}},ve=class extends O{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=Module._Rf_protect(Module._Rf_allocVector(c.double,t.length)),s=Module._REAL(r);t.forEach((o,u)=>Module.setValue(s+8*u,o===null?a.naDouble:o,"double")),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}getNumber(e){return this.get(e).toTypedArray()[0]}toNumber(){if(this.length!==1)throw new Error("Unable to convert atomic vector of length > 1 to a scalar JS value");return this.getNumber(1)}toTypedArray(){return new Float64Array(Module.HEAPF64.subarray(Module._REAL(this.ptr)/8,Module._REAL(this.ptr)/8+this.length))}},Se=class extends O{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=Module._Rf_protect(Module._Rf_allocVector(c.complex,t.length)),s=Module._COMPLEX(r);t.forEach((o,u)=>Module.setValue(s+8*(2*u),o===null?a.naDouble:o.re,"double")),t.forEach((o,u)=>Module.setValue(s+8*(2*u+1),o===null?a.naDouble:o.im,"double")),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}getComplex(e){return this.get(e).toArray()[0]}toComplex(){if(this.length!==1)throw new Error("Unable to convert atomic vector of length > 1 to a scalar JS value");return this.getComplex(1)}toTypedArray(){return new Float64Array(Module.HEAPF64.subarray(Module._COMPLEX(this.ptr)/8,Module._COMPLEX(this.ptr)/8+2*this.length))}toArray(){let e=this.toTypedArray();return this.detectMissing().map((t,r)=>t?null:{re:e[2*r],im:e[2*r+1]})}},ae=class extends O{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e],r=Module._Rf_protect(Module._Rf_allocVector(c.character,t.length));t.forEach((s,o)=>{if(s===null)Module._SET_STRING_ELT(r,o,a.naString.ptr);else{let u=Module.allocateUTF8(String(s));Module._SET_STRING_ELT(r,o,Module._Rf_mkChar(u)),Module._free(u)}}),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}getString(e){return this.get(e).toArray()[0]}toString(){if(this.length!==1)throw new Error("Unable to convert atomic vector of length > 1 to a scalar JS value");return this.getString(1)}toTypedArray(){return new Uint32Array(Module.HEAPU32.subarray(Module._STRING_PTR(this.ptr)/4,Module._STRING_PTR(this.ptr)/4+this.length))}toArray(){return this.detectMissing().map((e,t)=>e?null:Module.UTF8ToString(Module._R_CHAR(Module._STRING_ELT(this.ptr,t))))}},et=class extends O{constructor(e){if(R(e))return super(e),this;let t=m(e)?e.values:Array.isArray(e)?e:[e];if(t.some(o=>o===null||o>255||o<0))throw new Error("Cannot create new RRaw object");let r=Module._Rf_protect(Module._Rf_allocVector(c.raw,t.length)),s=Module._RAW(r);t.forEach((o,u)=>Module.setValue(s+u,Number(o),"i8")),a.wrap(r).setNames(m(e)?e.names:null),Module._Rf_unprotect(1),Module._R_PreserveObject(r),super({targetType:"ptr",obj:{ptr:r}})}getNumber(e){return this.get(e).toArray()[0]}toNumber(){if(this.length!==1)throw new Error("Unable to convert atomic vector of length > 1 to a scalar JS value");return this.getNumber(1)}toTypedArray(){return new Uint8Array(Module.HEAPU8.subarray(Module._RAW(this.ptr),Module._RAW(this.ptr)+this.length))}};function ie(n){return n&&typeof n=="object"&&"type"in n&&"toJs"in n}function F(n){return n&&(typeof n=="object"||typeof n=="function")&&"targetType"in n&&tt(n._target)}function R(n){return n&&typeof n=="object"&&"targetType"in n&&"obj"in n}function tt(n){return R(n)&&n.targetType==="ptr"}function Et(n){var e;return Boolean(F(n)&&((e=n._target.obj.methods)==null?void 0:e.includes("exec")))}function m(n){return n&&typeof n=="object"&&(Array.isArray(n.names)||n.names===null)&&Object.keys(c).includes(n.type)}function kt(n){let e={[c.null]:ke,[c.symbol]:Xe,[c.pairlist]:Ae,[c.closure]:B,[c.environment]:ze,[c.call]:Ae,[c.special]:B,[c.builtin]:B,[c.string]:Ke,[c.logical]:oe,[c.integer]:Ye,[c.double]:ve,[c.complex]:Se,[c.character]:ae,[c.list]:Ze,[c.raw]:et,[c.function]:B};return n in e?e[n]:a}function Gt(){}function Jt(n,e){return async function*(){let t=await n.request({type:"getRObjProperty",data:{target:e._target,prop:"length"}});if(t.targetType==="err"){let r=new Error(`Cannot iterate over object, ${t.obj.message}`);throw r.name=t.obj.name,r.stack=t.obj.stack,r}else if(typeof t.obj!="number")throw new Error("Cannot iterate over object, unexpected type for length property.");for(let r=1;r<=t.obj;r++)yield e.get(r)}}function Qt(n,e,t){return async(...r)=>{let s=Array.from({length:r.length},(u,p)=>{let y=r[p];return F(y)?y._target:{obj:y,targetType:"raw"}}),o=await n.request({type:"callRObjMethod",data:{target:e,prop:t,args:s}});switch(o.targetType){case"ptr":return V(n,o);case"err":{let u=new Error(o.obj.message);throw u.name=o.obj.name,u.stack=o.obj.stack,u}default:return E(o,tt,(p,y)=>V(y,p),n).obj}}}function V(n,e){var r;let t=new Proxy((r=e.obj.methods)!=null&&r.includes("exec")?Object.assign(Gt,at({},e)):e,{get:(s,o)=>{var u;if(o==="_target")return e;if(o===Symbol.asyncIterator)return Jt(n,t);if((u=e.obj.methods)!=null&&u.includes(o.toString()))return Qt(n,e,o.toString())},apply:async(s,o,u)=>{let p=await V(n,e).exec(...u);return Et(p)?p:p.toJs()}});return t}var $t={R_HOME:"/usr/lib/R",R_ENABLE_JIT:"0"},Xt={RArgs:[],REnv:$t,WEBR_URL:jt,SW_URL:"",PKG_URL:xt,homedir:"/home/web_user",interactive:!0,channelType:T.Automatic},f,Ie=class{constructor(e={}){l(this,f,void 0);let t=Object.assign(Xt,e);d(this,f,Ot(t))}async init(){return await i(this,f).initialised}close(){return i(this,f).close()}async read(){return await i(this,f).read()}async flush(){return await i(this,f).flush()}write(e){i(this,f).write(e)}writeConsole(e){this.write({type:"stdin",data:e+`
`})}interrupt(){i(this,f).interrupt()}async installPackages(e){for(let t of e){let r={type:"installPackage",data:{name:t}};await i(this,f).request(r)}}async putFileData(e,t){let r={type:"putFileData",data:{name:e,data:t}};return await i(this,f).request(r)}async getFileData(e){return await i(this,f).request({type:"getFileData",data:{name:e}})}async getFSNode(e){return await i(this,f).request({type:"getFSNode",data:{path:e}})}async evalRCode(e,t,r={}){if(t&&!F(t))throw new Error("Attempted to evalRcode with invalid environment object");let s=await i(this,f).request({type:"evalRCode",data:{code:e,env:t==null?void 0:t._target,options:r}});switch(s.targetType){case"raw":throw new Error("Unexpected raw target type returned from evalRCode");case"err":{let o=new Error(s.obj.message);throw o.name=s.obj.name,o.stack=s.obj.stack,o}default:{let o=V(i(this,f),s);o.preserve();let u=await o.get(1),p=await o.get(2),y=[];for await(let j of p){let x=await(await j.pluck(1,1)).toString();if(x==="stdout"||x==="stderr"){let We=await j.toObject({depth:0});y.push(ut(We))}else y.push({type:x,data:await j.pluck(2)})}return o.release(),{result:u,output:y}}}}async newRObject(e){let t=E(e,F,s=>s._target),r=await i(this,f).request({type:"newRObject",data:{targetType:"raw",obj:t}});switch(r.targetType){case"raw":throw new Error("Unexpected raw target type returned from newRObject");case"err":{let s=new Error(r.obj.message);throw s.name=r.obj.name,s.stack=r.obj.stack,s}default:return V(i(this,f),r)}}};f=new WeakMap;var ue,le,pe,ce,Pe,Ne,Ue,Ce,De,At,rt=class{constructor(e={},t={REnv:{R_HOME:"/usr/lib/R",R_ENABLE_JIT:"0",R_DEFAULT_DEVICE:"canvas"}}){l(this,De);l(this,ue,void 0);l(this,le,void 0);l(this,pe,void 0);l(this,ce,void 0);l(this,Pe,e=>{console.log(e)});l(this,Ne,e=>{console.error(e)});l(this,Ue,e=>{let t=prompt(e);t&&this.stdin(`${t}
`)});l(this,Ce,e=>{if(h)throw new Error("Plotting with HTML canvas is not yet supported under Node");Function(`this.getContext('2d').${e}`).bind(this.canvas)()});this.webR=new Ie(t),h||(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("width","1008"),this.canvas.setAttribute("height","1008")),d(this,ue,e.stdout||i(this,Pe)),d(this,le,e.stderr||i(this,Ne)),d(this,pe,e.prompt||i(this,Ue)),d(this,ce,e.canvasExec||i(this,Ce))}stdin(e){this.webR.writeConsole(e+`
`)}interrupt(){this.webR.interrupt()}run(){g(this,De,At).call(this)}};ue=new WeakMap,le=new WeakMap,pe=new WeakMap,ce=new WeakMap,Pe=new WeakMap,Ne=new WeakMap,Ue=new WeakMap,Ce=new WeakMap,De=new WeakSet,At=async function(){for(;;){let e=await this.webR.read();switch(e.type){case"stdout":i(this,ue).call(this,e.data);break;case"stderr":i(this,le).call(this,e.data);break;case"prompt":i(this,pe).call(this,e.data);break;case"canvasExec":i(this,ce).call(this,e.data);break;default:console.warn(`Unhandled output type for webR Console: ${e.type}.`)}}};export{rt as Console};
//# sourceMappingURL=console.mjs.map