7 lines
10 KiB
JavaScript
7 lines
10 KiB
JavaScript
"use strict";(self.webpackChunk_mixly_python_pyodide=self.webpackChunk_mixly_python_pyodide||[]).push([[357],{1838:(e,t,n)=>{n.d(t,{E:()=>s});class s extends Error{constructor(e){super(`Function ${e} not implemented!`),this.name="NotImplementedError"}}},6358:(e,t,n)=>{n.d(t,{z:()=>i});var s=n(9610);var r=n(1838);class a extends Event{constructor(e,t){super(e),this.detail=t}}class i{constructor(e){this._isReady=!1,this._ready=new s.D,this._stopped=Promise.resolve(),this._execution_count=0,this._pendingInput=void 0,this._listeners=new Map,this._files=new Map,this._modules=new Map,this._options=this.clone(e),this._rootPath=e.rootPath,this.safeKernel()||console.warn(`%c⚠ DANGER ⚠: kernel ${this.language()} not safe! Please consider using a safe kernel.`,"color: red; font-size: 20px;")}safeKernel(){return!1}version(){return"0.62.22"}language(){throw new r.E("language")}languageName(){throw new r.E("languageName")}moduleExts(){throw new r.E("moduleExts")}get execution_count(){return this._execution_count}evalAsync(e,t,n,s=null){throw new r.E("evalAsync")}async putFile(e,t){this._files.set(e,t)}async putModule(e,t){this._modules.set(e,t)}userModules(){return[]}getFile(e){throw new r.E("getFile")}getUserModuleFile(e){throw new r.E("getUserModuleFile")}async more(e){throw new r.E("more")}async complete(e){return[]}banner(){return`Welcome to the ${this.languageName()} REPL!`}ps1(){return">>> "}ps2(){return"... "}async _init(){}async init(){try{await this._init()}catch(e){return void this._ready.reject(e)}this.addEventListener("eval.request",this.evalFromEvent.bind(this)),await this.start()}async _start(){}async start(){await this._stopped,this._execution_count=0;try{await this._start()}catch(e){return void this._ready.reject(e)}this._files.forEach(((e,t)=>this.putFile(t,e))),this._modules.forEach(((e,t)=>this.putModule(t,e))),this._isReady=!0,this._ready.resolve()}async _stop(){}stop(){this._isReady=!1,this._ready=new s.D,this._stopped=this._stop()}restart(){this.stop(),this.start()}get isReady(){return this._isReady}async ready(){return this._ready.promise}basthonRoot(e=!1){let t=this._rootPath+"/"+this.version()+"/"+this.language();if(e&&!t.startsWith("http")){const e=window.location.origin+window.location.pathname;t=e.substring(0,e.lastIndexOf("/"))+"/"+t}return t}download(e,t){if(!("string"==typeof e||e instanceof String)){const t=new Blob([e],{type:"application/octet-stream"});e=window.URL.createObjectURL(t)}const n=document.createElement("a");n.download=t,n.href=e,n.target="_blank",n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}static loadScript(e){return new Promise((function(t,n){let s=document.createElement("script");s.onload=t,s.onerror=n,s.src=e,document.head.appendChild(s)}))}dispatchEvent(e,t){document.dispatchEvent(new a(`basthon.${e}`,t))}addEventListener(e,t){const n=e=>t(e.detail);document.addEventListener(`basthon.${e}`,n);let s=this._listeners.get(e);null==s&&(s=new Map,this._listeners.set(e,s)),s.set(t,n)}removeEventListener(e,t){const n=this._listeners.get(e);document.removeEventListener(`basthon.${e}`,n?.get(t))}async inputAsync(e,t=!1,n=void 0){(n=this.clone(n)).content={prompt:e,password:t};const r=new s.D;n.resolve=r.resolve.bind(r),n.reject=r.reject.bind(r),this._pendingInput=r,this.dispatchEvent("eval.input",n);const a=await r.promise;return this._pendingInput=void 0,a}resolvePendingInput(){this._pendingInput?.resolve("")}clone(e){return JSON.parse(JSON.stringify(e))}async putRessource(e,t){const n=e.split(".").pop()??"";return this.moduleExts().includes(n)?await this.putModule(e,t):await this.putFile(e,t)}pendingInput(){return null!=this._pendingInput}async evalFromEvent(e){const t=t=>n=>{let s=this.clone(e);s.stream=t,s.content=n,this.dispatchEvent("eval.output",s)},n=t("stdout"),s=t("stderr");let r;try{r=await this.evalAsync(e.code,n,s,e)}catch(t){s(t.toString());const n=this.clone(e);return n.error=t,n.execution_count=this.execution_count,void this.dispatchEvent("eval.error",n)}if(null==r)return;const a=r[0],i=r[1];let o=this.clone(e);o.execution_count=i,null!=a&&(o.result=a),this.dispatchEvent("eval.finished",o)}}},7738:(e,t,n)=>{n.d(t,{I:()=>i});var s=n(4590),r=n(1838),a=n(6358);if("SandboxedWorker"!==globalThis.Worker.name){class e extends Worker{constructor(e,t){if(t.sandboxed){const t=new URL(e).href,n=`self._assetsURL = "${t.substring(0,t.lastIndexOf("/"))}";\n globalThis = {importScripts: self.importScripts, location: "${e}"};\n importScripts("${e}");\n globalThis = self;`.replace(/\s/g,"");super(`data:text/javascript;base64,${btoa(n)}`)}else super(e,t)}}globalThis.Worker=e}class i extends a.z{constructor(e){super(e)}safeKernel(){return!0}newWorker(){throw new r.E("newWorker")}async _start(){await super._start();const e=this.newWorker(),t=new Worker(new URL(n.p+n.u(69),n.b),{type:void 0}),r=(0,s.LV)(t);this._worker=e,e.onmessage=e=>this.processWorkerMessage(e.data);const a=(0,s.LV)(e);this._remote=await new a(this._options);const i=await r[s.UD]();await(this.remote?.setProxyPort((0,s.k0)(i,[i]))),await(this.remote?.init())}get remote(){return this._remote}async _stop(){this._worker?.terminate(),this._worker=void 0,this._remote=void 0,await super._stop()}processWorkerMessage(e){switch(e.type){case"stream":const{stream:t,text:n}=e.content,s=this.clone(e.data);s.stream=t,s.content=n,this.dispatchEvent("eval.output",s);break;case"download":const{content:r,filename:a}=e.content;this.download(r,a);break;case"display":this.dispatchEvent("eval.display",e.data);break;case"input":const{prompt:i,password:o,data:c,sab:l}=e.content;(async()=>{const e=await this.inputAsync(i,o,c),t=(new TextEncoder).encode(e);new Uint8Array(l).set(t.subarray(0,l.byteLength)),Atomics.notify(new Int32Array(l),0,1)})()}}async evalAsync(e,t,n,s=null){s.interactive=!0,this._execution_count++;const r=await(this.remote?.eval(s,e));let a;if("ok"===r?.status)a=r.result;return[a,this._execution_count]}async putFile(e,t){await super.putFile(e,t),await(this.remote?.putFile(e,t))}async putModule(e,t){await super.putModule(e,t),await(this.remote?.putModule(e,t))}async complete(e){return await(this.remote?.complete(e))??[]}async more(e){return await(this.remote?.more(e))??!1}}n(9610)},4590:(e,t,n)=>{n.d(t,{LV:()=>p,UD:()=>r,k0:()=>_});
|
||
/**
|
||
* @license
|
||
* Copyright 2019 Google LLC
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
const s=Symbol("Comlink.proxy"),r=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),i=Symbol("Comlink.finalizer"),o=Symbol("Comlink.thrown"),c=e=>"object"==typeof e&&null!==e||"function"==typeof e,l=new Map([["proxy",{canHandle:e=>c(e)&&e[s],serialize(e){const{port1:t,port2:n}=new MessageChannel;return u(e,t),[n,[n]]},deserialize:e=>(e.start(),p(e))}],["throw",{canHandle:e=>c(e)&&o in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function u(e,t=globalThis,n=["*"]){t.addEventListener("message",(function r(a){if(!a||!a.data)return;if(!function(e,t){for(const n of e){if(t===n||"*"===n)return!0;if(n instanceof RegExp&&n.test(t))return!0}return!1}(n,a.origin))return void console.warn(`Invalid origin '${a.origin}' for comlink proxy`);const{id:c,type:l,path:p}=Object.assign({path:[]},a.data),d=(a.data.argumentList||[]).map(b);let m;try{const t=p.slice(0,-1).reduce(((e,t)=>e[t]),e),n=p.reduce(((e,t)=>e[t]),e);switch(l){case"GET":m=n;break;case"SET":t[p.slice(-1)[0]]=b(a.data.value),m=!0;break;case"APPLY":m=n.apply(t,d);break;case"CONSTRUCT":m=function(e){return Object.assign(e,{[s]:!0})}(new n(...d));break;case"ENDPOINT":{const{port1:t,port2:n}=new MessageChannel;u(e,n),m=_(t,[t])}break;case"RELEASE":m=void 0;break;default:return}}catch(e){m={value:e,[o]:0}}Promise.resolve(m).catch((e=>({value:e,[o]:0}))).then((n=>{const[s,a]=E(n);t.postMessage(Object.assign(Object.assign({},s),{id:c}),a),"RELEASE"===l&&(t.removeEventListener("message",r),h(t),i in e&&"function"==typeof e[i]&&e[i]())})).catch((e=>{const[n,s]=E({value:new TypeError("Unserializable return value"),[o]:0});t.postMessage(Object.assign(Object.assign({},n),{id:c}),s)}))})),t.start&&t.start()}function h(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function p(e,t){return g(e,[],t)}function d(e){if(e)throw new Error("Proxy has been released and is not useable")}function m(e){return k(e,{type:"RELEASE"}).then((()=>{h(e)}))}const y=new WeakMap,w="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const t=(y.get(e)||0)-1;y.set(e,t),0===t&&m(e)}));function g(e,t=[],n=function(){}){let s=!1;const i=new Proxy(n,{get(n,r){if(d(s),r===a)return()=>{!function(e){w&&w.unregister(e)}(i),m(e),s=!0};if("then"===r){if(0===t.length)return{then:()=>i};const n=k(e,{type:"GET",path:t.map((e=>e.toString()))}).then(b);return n.then.bind(n)}return g(e,[...t,r])},set(n,r,a){d(s);const[i,o]=E(a);return k(e,{type:"SET",path:[...t,r].map((e=>e.toString())),value:i},o).then(b)},apply(n,a,i){d(s);const o=t[t.length-1];if(o===r)return k(e,{type:"ENDPOINT"}).then(b);if("bind"===o)return g(e,t.slice(0,-1));const[c,l]=v(i);return k(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:c},l).then(b)},construct(n,r){d(s);const[a,i]=v(r);return k(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:a},i).then(b)}});return function(e,t){const n=(y.get(t)||0)+1;y.set(t,n),w&&w.register(e,t,e)}(i,e),i}function v(e){const t=e.map(E);return[t.map((e=>e[0])),(n=t.map((e=>e[1])),Array.prototype.concat.apply([],n))];var n}const f=new WeakMap;function _(e,t){return f.set(e,t),e}function E(e){for(const[t,n]of l)if(n.canHandle(e)){const[s,r]=n.serialize(e);return[{type:"HANDLER",name:t,value:s},r]}return[{type:"RAW",value:e},f.get(e)||[]]}function b(e){switch(e.type){case"HANDLER":return l.get(e.name).deserialize(e.value);case"RAW":return e.value}}function k(e,t,n){return new Promise((s=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function t(n){n.data&&n.data.id&&n.data.id===r&&(e.removeEventListener("message",t),s(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:r},t),n)}))}}}]); |