vuepress-theme-plume/assets/codeRepl-BV_0qCs3.js

5 lines
4.5 KiB
JavaScript

const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pyodide-CVAsarFp.js","assets/chunk-DseTPa7n.js","assets/preload-helper-ca-nBW7U.js"])))=>i.map(i=>d[i]);
import{j as e,lt as t}from"./runtime-core.esm-bundler-CZvn3YaB.js";import{t as n}from"./preload-helper-ca-nBW7U.js";import{E as r}from"./dist-CMy7OcvW.js";var i=`wss://play.rust-lang.org/websocket`,a={connected:`websocket/connected`,request:`output/execute/wsExecuteRequest`,execute:{begin:`output/execute/wsExecuteBegin`,stderr:`output/execute/wsExecuteStderr`,stdout:`output/execute/wsExecuteStdout`,end:`output/execute/wsExecuteEnd`}},o=null,s=!1,c=0;function l(){return s?Promise.resolve():(o=new WebSocket(i),c=0,o.addEventListener(`open`,()=>{s=!0,u(a.connected,{iAcceptThisIsAnUnsupportedApi:!0},{websocket:!0,sequenceNumber:c})}),o.addEventListener(`close`,()=>{s=!1,o=null}),r(()=>o?.close()),new Promise(e=>{function t(n){JSON.parse(n.data).type===a.connected&&(o?.removeEventListener(`message`,t),e())}o?.addEventListener(`message`,t)}))}function u(e,t,n){let r={type:e,meta:n,payload:t};o?.send(JSON.stringify(r))}async function d(e,{onEnd:t,onError:n,onStderr:r,onStdout:i,onBegin:s}){await l();let d={sequenceNumber:c++},f={backtrace:!1,channel:`stable`,crateType:`bin`,edition:`2021`,mode:`release`,tests:!1,code:e};u(a.request,f,d);let p=``,m=``;function h(e){let{type:c,payload:l,meta:u={}}=JSON.parse(e.data);if(u.sequenceNumber===d.sequenceNumber){if(c===a.execute.begin&&s?.(),c===a.execute.stdout&&(p+=l,p.endsWith(`
`)&&(i?.(p),p=``)),c===a.execute.stderr&&(m+=l,m.endsWith(`
`))){if(m.startsWith(`error:`)){let e=m.indexOf(`
`);r?.(m.slice(0,e)),r?.(m.slice(e+1))}else r?.(m);m=``}c===a.execute.end&&(l.success===!1&&n?.(l.exitDetail),o?.removeEventListener(`message`,h),t?.())}}o?.addEventListener(`message`,h)}var f={get:async(e,t)=>{let n=new URL(e);if(t)for(let[e,r]of Object.entries(t))n.searchParams.append(e,r);return await(await fetch(n.toString())).json()},post:async(e,t)=>await(await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:t?JSON.stringify(t):void 0})).json()};function p(e){return new Promise(t=>{setTimeout(t,e)})}var m=[`.diff.remove`,`.vp-copy-ignore`],h=/language-(\w+)/,g={go:`https://api.pengzhanbo.cn/repl/golang/run`,kotlin:`https://api.pengzhanbo.cn/repl/kotlin/run`},_=null,v={kt:`kotlin`,kotlin:`kotlin`,go:`go`,rust:`rust`,rs:`rust`,py:`python`,python:`python`},y=[`kotlin`,`go`,`rust`,`python`];function b(e){return e?v[e]||e:``}function x(e){let t=e.cloneNode(!0);return t.querySelectorAll(m.join(`,`)).forEach(e=>e.remove()),t.textContent||``}function S(e){let t=e.querySelector(`div[class*=language-]`),n=t?.className.match(h)?.[1],r=t?.querySelector(`pre`),i=``;return r&&(i=x(r)),{lang:b(n),code:i}}function C(r){let i=t(),a=t(!0),o=t(!0),s=t(!0),c=t([]),l=t([]),u=t(``),m=t(``);e(()=>{r.value&&(i.value=S(r.value).lang)});let h={kotlin:C,go:x,rust:w,python:T};function v(){a.value=!1,s.value=!1,c.value=[],l.value=[],u.value=``,o.value=!0,m.value=``}async function b(){if(!r.value||!a.value)return;let e=S(r.value);i.value=e.lang,!(!i.value||!e.code||!y.includes(i.value))&&(o.value&&=!1,a.value=!1,s.value=!1,c.value=[],l.value=[],u.value=``,await h[i.value]?.(e.code))}async function x(e){let t=await f.post(g.go,{code:e});if(m.value=`v${t.version}`,a.value=!0,t.error){u.value=t.error,s.value=!0;return}let n=t.events||[];for(let e of n)e.kind===`stdout`?(e.delay&&await p(e.delay/1e6),c.value.push(e.message)):e.kind===`stderr`&&l.value.push(e.message);s.value=!0}async function C(e){let t=`File.kt`,n=await f.post(g.kotlin,{args:``,files:[{name:t,publicId:``,text:e}]});if(m.value=`v${n.version}`,a.value=!0,n.errors){let e=Array.isArray(n.errors[t])?n.errors[t]:[n.errors[t]];e.length&&e.forEach(({message:e,severity:t})=>t===`ERROR`&&l.value.push(e))}c.value.push(n.text),s.value=!0}async function w(e){await d(e,{onBegin:()=>{a.value=!0,s.value=!1,c.value=[],l.value=[],u.value=``,m.value=`release`},onError(e){u.value=e},onStdout(e){c.value.push(e)},onStderr(e){l.value.push(e)},onEnd:()=>{s.value=!0}})}async function T(e){if(a.value=!1,s.value=!1,_===null){let{loadPyodide:e,version:t}=await n(async()=>{let{loadPyodide:e,version:t}=await import(`./pyodide-CVAsarFp.js`);return{loadPyodide:e,version:t}},__vite__mapDeps([0,1,2]));_=await e({indexURL:`https://cdn.jsdelivr.net/pyodide/v${t}/full/`})}_.setStdout({batched:e=>c.value.push(e)});try{c.value.push(_.runPython(e))}catch(e){l.value.push(String(e))}a.value=!0,s.value=!0}return{onRunCode:b,onCleanRun:v,lang:i,backendVersion:m,firstRun:o,stderr:l,stdout:c,loaded:a,finished:s,error:u}}export{C as n,S as t};