Files
mixly3/boards/default/python_pyodide/38.bundle.js
2024-09-08 13:32:13 +08:00

1 line
8.6 KiB
JavaScript

"use strict";(self.webpackChunk_mixly_python_pyodide=self.webpackChunk_mixly_python_pyodide||[]).push([[38],{6998:(e,t,n)=>{n.d(t,{z:()=>r});var a=n(9610);const s="filesystem:/";!function(){var e;const t=async e=>await new Promise(((t,n)=>{const a=new FileReader;a.onloadend=()=>{t(a.result)},a.onerror=n,a.readAsDataURL(new Blob([e]))}));window._fetch=null!==(e=window._fetch)&&void 0!==e?e:window.fetch,window.fetch=async function(e,n){var a;const o=null!==(a=e.url)&&void 0!==a?a:e.toString(),i=s;if(o.startsWith(i)){const e=o.slice(12);let n=null;const a={status:200,statusText:"OK",headers:new Headers};try{n=window.Basthon.getFile(e);const s=await t(n),o=s.substring(s.indexOf(":")+1,s.indexOf(";"));n=n.buffer,a.headers.append("Content-Type",o),a.headers.append("Content-Length",n.byteLength)}catch(e){a.status=404,a.statusText="Not Found"}return new Response(n,a)}return await window._fetch(e,n)};const n=Object.getOwnPropertyDescriptor(HTMLImageElement.prototype,"src");Object.defineProperty(HTMLImageElement.prototype,"src",{...n,get:function(){var e;return null===(e=null==n?void 0:n.get)||void 0===e?void 0:e.call(this)},set:function(e){var a;const o=s;if(e.startsWith(o)){const a=e.slice(12),s=window.Basthon.getFile(a).buffer;(async()=>{var e;null===(e=null==n?void 0:n.set)||void 0===e||e.call(this,await t(s))})()}else null===(a=null==n?void 0:n.set)||void 0===a||a.call(this,e)}})}();class o extends Error{constructor(e){super(`Function ${e} not implemented!`),this.name="NotImplementedError"}}class i extends Event{constructor(e,t){super(e),this.detail=t}}class r{constructor(e){this._ready=!1,this._loaded=new a.D,this._execution_count=0,this._pendingInput=!1,this._listeners=new Map,this._rootPath=e.rootPath}version(){return"0.62.21"}language(){throw new o("language")}languageName(){throw new o("languageName")}moduleExts(){throw new o("moduleExts")}async launch(){throw new o("launch")}get execution_count(){return this._execution_count}evalAsync(e,t,n,a=null){throw new o("evalAsync")}restart(){throw new o("restart")}async putFile(e,t){throw new o("putFile")}async putModule(e,t){throw new o("putModule")}userModules(){return[]}getFile(e){throw new o("getFile")}getUserModuleFile(e){throw new o("getUserModuleFile")}more(e){throw new o("more")}complete(e){return[]}banner(){return`Welcome to the ${this.languageName()} REPL!`}ps1(){return">>> "}ps2(){return"... "}async init(){try{await this.launch()}catch(e){return void this._loaded.reject(e)}this.addEventListener("eval.request",this.evalFromEvent.bind(this)),this._ready=!0,this._loaded.resolve()}get ready(){return this._ready}async loaded(){await this._loaded.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 a=document.createElement("script");a.onload=t,a.onerror=n,a.src=e,document.head.appendChild(a)}))}dispatchEvent(e,t){document.dispatchEvent(new i(`basthon.${e}`,t))}addEventListener(e,t){const n=e=>t(e.detail);document.addEventListener(`basthon.${e}`,n);let a=this._listeners.get(e);null==a&&(a=new Map,this._listeners.set(e,a)),a.set(t,n)}removeEventListener(e,t){const n=this._listeners.get(e);document.removeEventListener(`basthon.${e}`,null==n?void 0:n.get(t))}async inputAsync(e,t=!1,n=void 0){(n=this.clone(n)).content={prompt:e,password:t};const a=new Promise((function(e,t){n.resolve=e,n.reject=t}));this._pendingInput=!0,this.dispatchEvent("eval.input",n);const s=await a;return this._pendingInput=!1,s}clone(e){return JSON.parse(JSON.stringify(e))}async putRessource(e,t){var n;const a=null!==(n=e.split(".").pop())&&void 0!==n?n:"";return this.moduleExts().includes(a)?await this.putModule(e,t):await this.putFile(e,t)}pendingInput(){return this._pendingInput}async evalFromEvent(e){const t=t=>n=>{let a=this.clone(e);a.stream=t,a.content=n,this.dispatchEvent("eval.output",a)},n=t("stdout"),a=t("stderr");let s;try{s=await this.evalAsync(e.code,n,a,e)}catch(t){a(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==s)return;const o=s[0],i=s[1];let r=this.clone(e);r.execution_count=i,null!=o&&(r.result=o),this.dispatchEvent("eval.finished",r)}}},38:(e,t,n)=>{n.d(t,{KernelOCaml:()=>s});var a=n(6998);class s extends a.z{constructor(e){super(e),this.__eval_data__={},this._initInnerCode='open Js_of_ocaml\nmodule Basthon = struct\n let download (path: string): unit = ignore((Js.Unsafe.eval_string "window.Basthon.__kernel__")##download path)\n let create_canvas () = (Js.Unsafe.eval_string "window.Basthon.__kernel__")##createcanvas()\n let display_canvas canvas: unit = ignore((Js.Unsafe.eval_string "window.Basthon.__kernel__")##displaycanvas canvas)\n let save_canvas canvas (path: string): unit = ignore((Js.Unsafe.eval_string "window.Basthon.__kernel__")##savecanvas canvas path)\n let download_canvas ?(format = "png") canvas: unit = ignore((Js.Unsafe.eval_string "window.Basthon.__kernel__")##downloadcanvas canvas format)\n let display_image (path: string): unit = ignore((Js.Unsafe.eval_string "window.Basthon.__kernel__")##displayimage path)\n let version () : string = (Js.Unsafe.eval_string "window.Basthon.__kernel__")##version()\n let help () : unit = print_endline {ext|Basthon module\n help: Show this help.\n download path: Download a file from the local filesystem.\n display_image path: Display a PNG image from the local filesystem.\n create_canvas: Create a HTML5 canvas to be displayed with display_canvas.\n display_canvas canvas: Display a HTML5 canvas created with create_canvas.\n save_canvas canvas path: Save a canvas to a PNG/JPG file to the local filesystem.\n download_canvas ?(format = "png") canvas: Download a canvas to a PNG/JPG file.\n|ext}\nend'}language(){return"ocaml"}languageName(){return"OCaml"}moduleExts(){return["ml"]}async launch(){const{__kernel__:e}=await Promise.all([n.e(950),n.e(974)]).then(n.t.bind(n,950,23));this.__kernel__=e,this.restart()}async evalAsync(e,t,n,a=null){var s,o;if(null==this.__kernel__)return;0===this._execution_count&&(null===(s=this.__kernel__)||void 0===s||s.exec(this._initInnerCode)),a.interactive=!0,this.__eval_data__=a,this.__kernel__.io.stdout=t,this.__kernel__.io.stderr=n,this._execution_count++;let i=null===(o=this.__kernel__)||void 0===o?void 0:o.exec(e);return this.__kernel__.io.stdout=console.log,this.__kernel__.io.stderr=console.error,i="string"==typeof i&&i.length>0?{"text/plain":i.replace(/\n$/,"")}:void 0,[i,this._execution_count]}restart(){var e;if(0!==(null===(e=this.__kernel__)||void 0===e?void 0:e.init()))throw new Error("Can't start OCaml kernel!");this._execution_count=0}ocamlDownload(e,t){const n=window.jsoo_runtime.caml_convert_bytes_to_array(e);this.download(n,t)}displayCanvas(e){const t=JSON.parse(JSON.stringify(this.__eval_data__));t.display_type="ocaml-canvas",t.content=e,this.dispatchEvent("eval.display",t)}async saveCanvas(e,t){var n;if(null==this.__kernel__)return;const a=null===(n=t.split(".").pop())||void 0===n?void 0:n.toLowerCase();let s="image/png";"jpg"!==a&&"jpeg"!==a||(s="image/jpeg");const o=await new Promise((t=>e.toBlob(t,s)));if(null==o)return;const i=await new Response(o).arrayBuffer();this.__kernel__.createfile(t,i)}downloadCanvas(e,t){let n;switch(null!=t&&("string"==typeof t||t instanceof String)||(t="png"),t=t.toLowerCase()){case"jpg":case"jpeg":n="image/jpeg";break;default:n="image/png",t="png"}const a=e.toDataURL(n).replace(n,"image/octet-stream");this.download(a,`canvas.${t}`)}async displayImage(e){const t=JSON.parse(JSON.stringify(this.__eval_data__)),n=window.jsoo_runtime.caml_convert_bytes_to_array(e),a=new Blob([n],{type:"image/png"}),s=(await new Promise((e=>{const t=new FileReader;t.onloadend=()=>e(t.result),t.readAsDataURL(a)}))).slice(22);t.display_type="multiple",t.content={"image/png":s},this.dispatchEvent("eval.display",t)}async putFile(e,t){null!=this.__kernel__&&this.__kernel__.createfile(e,t)}async putModule(e,t){var n;this.putFile(e,t),null===(n=this.__kernel__)||void 0===n||n.loadmodule(e)}userModules(){return[]}getFile(e){return new Uint8Array([])}getUserModuleFile(e){return new Uint8Array([])}more(e){return!1}banner(){return" OCaml version 4.11.1\n"}ps1(){return"# "}ps2(){return" "}complete(e){return[]}}}}]);