35 lines
8.5 KiB
JavaScript
35 lines
8.5 KiB
JavaScript
"use strict";(()=>{var w=typeof btoa=="function",d=typeof Buffer=="function",R=typeof TextDecoder=="function"?new TextDecoder:void 0,m=typeof TextEncoder=="function"?new TextEncoder:void 0,j="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=Array.prototype.slice.call(j),P=(e=>{let t={};return e.forEach((o,s)=>t[o]=s),t})(l);var c=String.fromCharCode.bind(String),q=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):e=>new Uint8Array(Array.prototype.slice.call(e,0)),C=e=>e.replace(/=/g,"").replace(/[+\/]/g,t=>t=="+"?"-":"_");var k=e=>{let t,o,s,n,r="",i=e.length%3;for(let p=0;p<e.length;){if((o=e.charCodeAt(p++))>255||(s=e.charCodeAt(p++))>255||(n=e.charCodeAt(p++))>255)throw new TypeError("invalid character found");t=o<<16|s<<8|n,r+=l[t>>18&63]+l[t>>12&63]+l[t>>6&63]+l[t&63]}return i?r.slice(0,i-3)+"===".substring(i):r},f=w?e=>btoa(e):d?e=>Buffer.from(e,"binary").toString("base64"):k,T=d?e=>Buffer.from(e).toString("base64"):e=>{let o=[];for(let s=0,n=e.length;s<n;s+=4096)o.push(c.apply(null,e.subarray(s,s+4096)));return f(o.join(""))};var A=e=>{if(e.length<2){var t=e.charCodeAt(0);return t<128?e:t<2048?c(192|t>>>6)+c(128|t&63):c(224|t>>>12&15)+c(128|t>>>6&63)+c(128|t&63)}else{var t=65536+(e.charCodeAt(0)-55296)*1024+(e.charCodeAt(1)-56320);return c(240|t>>>18&7)+c(128|t>>>12&63)+c(128|t>>>6&63)+c(128|t&63)}},B=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,S=e=>e.replace(B,A),u=d?e=>Buffer.from(e,"utf8").toString("base64"):m?e=>T(m.encode(e)):e=>f(S(e)),g=(e,t=!1)=>t?C(u(e)):u(e);var E=(e,t="text/javascript")=>`data:${t};charset=UTF-8;base64,`+g(e);var x=e=>{try{return new Worker(E(e))}catch{return new Worker(URL.createObjectURL(new Blob([e],{type:"application/javascript"})))}};var b=["esm.sh","skypack","esm.run","jsdelivr.esm","fastly.jsdelivr.esm","gcore.jsdelivr.esm","testingcf.jsdelivr.esm","jsdelivr.b-cdn.esm","jspm"],y=["jsdelivr","fastly.jsdelivr","unpkg","gcore.jsdelivr","testingcf.jsdelivr","jsdelivr.b-cdn","npmcdn"],U=["jsdelivr.gh","fastly.jsdelivr.gh","statically","gcore.jsdelivr.gh","testingcf.jsdelivr.gh","jsdelivr.b-cdn.gh"],a={getModuleUrl:(e,{isModule:t=!0,defaultCDN:o="esm.sh",external:s}={})=>{e=e.replace(/#nobundle/g,"");let n=i=>!s||!i.includes("https://esm.sh")?i:i.includes("?")?`${i}&external=${s}`:`${i}?external=${s}`,r=h(e,t,o);return r?n(r):t?n("https://esm.sh/"+e):"https://cdn.jsdelivr.net/npm/"+e},getUrl:(e,t)=>e.startsWith("http")||e.startsWith("data:")?e:h(e,!1,t||$())||e,cdnLists:{npm:y,module:b,gh:U},checkCDNs:async(e,t)=>{let o=[t,...a.cdnLists.npm].filter(Boolean);for(let s of o)try{if((await fetch(a.getUrl(e,s),{method:"HEAD"})).ok)return s}catch{}return a.cdnLists.npm[0]}},$=()=>{if(globalThis.appCDN)return globalThis.appCDN;try{return new URL(location.href).searchParams.get("appCDN")||a.cdnLists.npm[0]}catch{return a.cdnLists.npm[0]}},h=(e,t,o)=>{let s=t&&e.startsWith("unpkg:")?"?module":"";e.startsWith("gh:")?e=e.replace("gh",U[0]):e.includes(":")||(e=(o||(t?b[0]:y[0]))+":"+e);for(let n of L){let[r,i]=n;if(r.test(e))return e.replace(r,i)+s}return null},L=[[/^(esm\.sh:)(.+)/i,"https://esm.sh/$2"],[/^(npm:)(.+)/i,"https://esm.sh/$2"],[/^(node:)(.+)/i,"https://esm.sh/$2"],[/^(jsr:)(.+)/i,"https://esm.sh/jsr/$2"],[/^(skypack:)(.+)/i,"https://cdn.skypack.dev/$2"],[/^(jsdelivr:)(.+)/i,"https://cdn.jsdelivr.net/npm/$2"],[/^(fastly\.jsdelivr:)(.+)/i,"https://fastly.jsdelivr.net/npm/$2"],[/^(gcore\.jsdelivr:)(.+)/i,"https://gcore.jsdelivr.net/npm/$2"],[/^(testingcf\.jsdelivr:)(.+)/i,"https://testingcf.jsdelivr.net/npm/$2"],[/^(jsdelivr\.b-cdn:)(.+)/i,"https://jsdelivr.b-cdn.net/npm/$2"],[/^(jsdelivr\.gh:)(.+)/i,"https://cdn.jsdelivr.net/gh/$2"],[/^(fastly\.jsdelivr\.gh:)(.+)/i,"https://fastly.jsdelivr.net/gh/$2"],[/^(gcore\.jsdelivr\.gh:)(.+)/i,"https://gcore.jsdelivr.net/gh/$2"],[/^(testingcf\.jsdelivr\.gh:)(.+)/i,"https://testingcf.jsdelivr.net/gh/$2"],[/^(jsdelivr\.b-cdn\.gh:)(.+)/i,"https://jsdelivr.b-cdn.net/gh/$2"],[/^(statically:)(.+)/i,"https://cdn.statically.io/gh/$2"],[/^(esm\.run:)(.+)/i,"https://esm.run/$2"],[/^(jsdelivr\.esm:)(.+)/i,"https://cdn.jsdelivr.net/npm/$2/+esm"],[/^(fastly\.jsdelivr\.esm:)(.+)/i,"https://fastly.jsdelivr.net/npm/$2/+esm"],[/^(gcore\.jsdelivr\.esm:)(.+)/i,"https://gcore.jsdelivr.net/npm/$2/+esm"],[/^(testingcf\.jsdelivr\.esm:)(.+)/i,"https://testingcf.jsdelivr.net/npm/$2/+esm"],[/^(jsdelivr\.b-cdn\.esm:)(.+)/i,"https://jsdelivr.b-cdn.net/npm/$2/+esm"],[/^(jspm:)(.+)/i,"https://jspm.dev/$2"],[/^(esbuild:)(.+)/i,"https://esbuild.vercel.app/$2"],[/^(bundle\.run:)(.+)/i,"https://bundle.run/$2"],[/^(unpkg:)(.+)/i,"https://unpkg.com/$2"],[/^(npmcdn:)(.+)/i,"https://npmcdn.com/$2"],[/^(bundlejs:)(.+)/i,"https://deno.bundlejs.com/?file&q=$2"],[/^(bundle:)(.+)/i,"https://deno.bundlejs.com/?file&q=$2"],[/^(deno:)(.+)/i,"https://deno.bundlejs.com/?file&q=https://deno.land/x/$2/mod.ts"],[/^(https:\/\/deno\.land\/.+)/i,"https://deno.bundlejs.com/?file&q=$1"],[/^(github:|https:\/\/github\.com\/)(.[^\/]+?)\/(.[^\/]+?)\/(?!releases\/)(?:(?:blob|raw)\/)?(.+?\/.+)/i,"https://deno.bundlejs.com/?file&q=https://cdn.jsdelivr.net/gh/$2/$3@$4"],[/^(gist\.github:)(.+?\/[0-9a-f]+\/raw\/(?:[0-9a-f]+\/)?.+)$/i,"https://gist.githack.com/$2"],[/^(gitlab:|https:\/\/gitlab\.com\/)([^\/]+.*\/[^\/]+)\/(?:raw|blob)\/(.+?)(?:\?.*)?$/i,"https://deno.bundlejs.com/?file&q=https://gl.githack.com/$2/raw/$3"],[/^(bitbucket:|https:\/\/bitbucket\.org\/)([^\/]+\/[^\/]+)\/(?:raw|src)\/(.+?)(?:\?.*)?$/i,"https://deno.bundlejs.com/?file&q=https://bb.githack.com/$2/raw/$3"],[/^(bitbucket:)snippets\/([^\/]+\/[^\/]+)\/revisions\/([^\/\#\?]+)(?:\?[^#]*)?(?:\#file-(.+?))$/i,"https://bb.githack.com/!api/2.0/snippets/$2/$3/files/$4"],[/^(bitbucket:)snippets\/([^\/]+\/[^\/\#\?]+)(?:\?[^#]*)?(?:\#file-(.+?))$/i,"https://bb.githack.com/!api/2.0/snippets/$2/HEAD/files/$3"],[/^(bitbucket:)\!api\/2.0\/snippets\/([^\/]+\/[^\/]+\/[^\/]+)\/files\/(.+?)(?:\?.*)?$/i,"https://bb.githack.com/!api/2.0/snippets/$2/files/$3"],[/^(api\.bitbucket:)2.0\/snippets\/([^\/]+\/[^\/]+\/[^\/]+)\/files\/(.+?)(?:\?.*)?$/i,"https://bb.githack.com/!api/2.0/snippets/$2/files/$3"],[/^(rawgit:)(.+?\/[0-9a-f]+\/raw\/(?:[0-9a-f]+\/)?.+)$/i,"https://gist.githack.com/$2"],[/^(rawgit:|https:\/\/raw\.githubusercontent\.com)(\/[^\/]+\/[^\/]+|[0-9A-Za-z-]+\/[0-9a-f]+\/raw)\/(.+)/i,"https://deno.bundlejs.com/?file&q=https://raw.githack.com/$2/$3"]];var{getUrl:D,getModuleUrl:W}=a;var v=D("@chriskoch/cpp-wasm@1.0.2/");var M=async e=>{try{let t=e+"shared.js",o=await fetch(t);if(!o.ok)throw new Error;return`
|
|
var window = self;
|
|
|
|
${(await o.text()).replace("https://cdn.jsdelivr.net/npm/@chriskoch/cpp-wasm@1.0.1/",e).replace("https://cdn.jsdelivr.net/npm/@chriskoch/cpp-wasm/memfs",e+"memfs")};
|
|
|
|
addEventListener('message', async (e) => {
|
|
const runCode = async (code, input) => {
|
|
let output = null;
|
|
let error = null;
|
|
let exitCode = 0;
|
|
try {
|
|
window.CPP.memfs.setStdinStr(input ?? "");
|
|
await window.CPP.compileLinkRun(code);
|
|
output = window.CPP_OUTPUT;
|
|
} catch (err) {
|
|
error = err.message ?? err;
|
|
exitCode = err.code ?? 1;
|
|
} finally {
|
|
window.CPP.memfs.setStdinStr("");
|
|
window.CPP_OUTPUT = "";
|
|
}
|
|
return {input, output, error, exitCode};
|
|
};
|
|
|
|
await window.CPP_READY;
|
|
const code = e.data.code;
|
|
const input = e.data.input;
|
|
const result = code.trim() ? await runCode(code, input) : {};
|
|
postMessage(result);
|
|
});
|
|
|
|
window.CPP_READY.then(() => postMessage({ loaded: true }));
|
|
`}catch{throw new Error("failed loading C++/Clang compiler")}};livecodes.cpp=livecodes.cpp||{};livecodes.cpp.run=livecodes.cpp.run||(e=>new Promise(t=>{let o="";livecodes.cpp.input=e,livecodes.cpp.output=null,document.querySelectorAll('script[type="text/cpp"]').forEach(n=>o+=n.innerHTML+`
|
|
`),livecodes.cpp.worker.onmessage=function(n){if(n.data.loaded){console.log("Clang compiler loaded!"),livecodes.cpp.worker.loaded=!0;return}let r=n.data;r.error!=null?console.error(r.error):r.output!=null&&console.log(r.output),livecodes.cpp.input=r.input,livecodes.cpp.output=r.output,livecodes.cpp.error=r.error,livecodes.cpp.exitCode=r.exitCode,livecodes.cpp.ready=!0,t(r)},livecodes.cpp.worker.postMessage({code:o,input:`${String(e??"")}`})}));livecodes.cpp.loaded=new Promise(async function(e){let t=setInterval(()=>{if(livecodes.cpp.ready)return clearInterval(t),e()},50)});window.addEventListener("load",async()=>{livecodes.cpp.ready=!1,parent.postMessage({type:"loading",payload:!0},"*");let e=await M(v);(()=>{livecodes.cpp.worker||(console.log("Loading Clang compiler..."),livecodes.cpp.worker=x(e))})(),await livecodes.cpp.run(livecodes.cpp.input),parent.postMessage({type:"loading",payload:!1},"*")});})();
|