diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..d86ef56 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,23 @@ +services: + frontend: + image: node:26-alpine + working_dir: /app + volumes: + - .:/app + - /app/node_modules + env_file: + - example.env + command: sh -c "npm install && npm start" + ports: + - "8082:8082" + + registry: + image: registry:2 + ports: + - "5000:5000" + volumes: + - biochef-registry:/var/lib/registry + - ./registry-config.yml:/etc/docker/registry/config.yml:ro + +volumes: + biochef-registry: \ No newline at end of file diff --git a/example.env b/example.env index 1d8f1aa..f727d86 100644 --- a/example.env +++ b/example.env @@ -1,4 +1,11 @@ +# url where the website will fetch the tools +# use http://localhost:5000 if using the docker compose REGISTRY_URL=http://localhost:5000 -REPO_OWNER=Biochef -REGISTRY_USERNAME=Biochef -REGISTRY_PASSWORD=ghp_1234567890abcdefghijklmnopqrstuvwxYZ12 \ No newline at end of file + +# owner of the github repository +# this is only used if using ghcr +REPO_OWNER= + +# credentials for the registry +REGISTRY_USERNAME= +REGISTRY_PASSWORD= \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 22b210e..a494206 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@biowasm/aioli": "^3.2.1", + "@biowasm/aioli": "github:WildBunnie/aioli", "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", @@ -1535,6 +1535,7 @@ }, "node_modules/@biowasm/aioli": { "version": "3.2.1", + "resolved": "git+ssh://git@github.com/WildBunnie/aioli.git#b5cb1c248d663891f44a8d6a4c7d70c895a295e2", "license": "MIT", "dependencies": { "comlink": "^4.3.1", diff --git a/package.json b/package.json index 8dfb0b8..f0472b3 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "author": "", "license": "ISC", "dependencies": { - "@biowasm/aioli": "^3.2.1", + "@biowasm/aioli": "github:WildBunnie/aioli", "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", diff --git a/registry-config.yml b/registry-config.yml new file mode 100644 index 0000000..cdc9f7b --- /dev/null +++ b/registry-config.yml @@ -0,0 +1,19 @@ +version: 0.1 +log: + fields: + service: registry +storage: + cache: + blobdescriptor: inmemory + filesystem: + rootdirectory: /var/lib/registry +http: + addr: :5000 + headers: + Access-Control-Allow-Origin: ["*"] + Access-Control-Allow-Headers: ["Authorization", "X-Requested-With", "Content-Type"] +health: + storagedriver: + enabled: true + interval: 10s + threshold: 3 diff --git a/src/utils/aioli-custom/aioli.js b/src/utils/aioli-custom/aioli.js deleted file mode 100644 index 7f67422..0000000 --- a/src/utils/aioli-custom/aioli.js +++ /dev/null @@ -1 +0,0 @@ -(function(G,p){typeof exports=="object"&&typeof module<"u"?module.exports=p():typeof define=="function"&&define.amd?define(p):(G=typeof globalThis<"u"?globalThis:G||self,G.Aioli=p())})(this,function(){"use strict";const G=Symbol("Comlink.proxy"),p=Symbol("Comlink.endpoint"),N=Symbol("Comlink.releaseProxy"),X=Symbol("Comlink.thrown"),Y=l=>typeof l=="object"&&l!==null||typeof l=="function",g={canHandle:l=>Y(l)&&l[G],serialize(l){const{port1:c,port2:b}=new MessageChannel;return S(l,c),[b,[b]]},deserialize(l){return l.start(),V(l)}},H={canHandle:l=>Y(l)&&X in l,serialize({value:l}){let c;return l instanceof Error?c={isError:!0,value:{message:l.message,name:l.name,stack:l.stack}}:c={isError:!1,value:l},[c,[]]},deserialize(l){throw l.isError?Object.assign(new Error(l.value.message),l.value):l.value}},r=new Map([["proxy",g],["throw",H]]);function S(l,c=self){c.addEventListener("message",function b(t){if(!t||!t.data)return;const{id:s,type:a,path:n}=Object.assign({path:[]},t.data),d=(t.data.argumentList||[]).map(u);let Z;try{const m=n.slice(0,-1).reduce((i,W)=>i[W],l),e=n.reduce((i,W)=>i[W],l);switch(a){case"GET":Z=e;break;case"SET":m[n.slice(-1)[0]]=u(t.data.value),Z=!0;break;case"APPLY":Z=e.apply(m,d);break;case"CONSTRUCT":{const i=new e(...d);Z=z(i)}break;case"ENDPOINT":{const{port1:i,port2:W}=new MessageChannel;S(l,W),Z=J(i,[i])}break;case"RELEASE":Z=void 0;break;default:return}}catch(m){Z={value:m,[X]:0}}Promise.resolve(Z).catch(m=>({value:m,[X]:0})).then(m=>{const[e,i]=L(m);c.postMessage(Object.assign(Object.assign({},e),{id:s}),i),a==="RELEASE"&&(c.removeEventListener("message",b),R(c))})}),c.start&&c.start()}function x(l){return l.constructor.name==="MessagePort"}function R(l){x(l)&&l.close()}function V(l,c){return y(l,[],c)}function h(l){if(l)throw new Error("Proxy has been released and is not useable")}function y(l,c=[],b=function(){}){let t=!1;const s=new Proxy(b,{get(a,n){if(h(t),n===N)return()=>o(l,{type:"RELEASE",path:c.map(d=>d.toString())}).then(()=>{R(l),t=!0});if(n==="then"){if(c.length===0)return{then:()=>s};const d=o(l,{type:"GET",path:c.map(Z=>Z.toString())}).then(u);return d.then.bind(d)}return y(l,[...c,n])},set(a,n,d){h(t);const[Z,m]=L(d);return o(l,{type:"SET",path:[...c,n].map(e=>e.toString()),value:Z},m).then(u)},apply(a,n,d){h(t);const Z=c[c.length-1];if(Z===p)return o(l,{type:"ENDPOINT"}).then(u);if(Z==="bind")return y(l,c.slice(0,-1));const[m,e]=I(d);return o(l,{type:"APPLY",path:c.map(i=>i.toString()),argumentList:m},e).then(u)},construct(a,n){h(t);const[d,Z]=I(n);return o(l,{type:"CONSTRUCT",path:c.map(m=>m.toString()),argumentList:d},Z).then(u)}});return s}function T(l){return Array.prototype.concat.apply([],l)}function I(l){const c=l.map(L);return[c.map(b=>b[0]),T(c.map(b=>b[1]))]}const k=new WeakMap;function J(l,c){return k.set(l,c),l}function z(l){return Object.assign(l,{[G]:!0})}function L(l){for(const[c,b]of r)if(b.canHandle(l)){const[t,s]=b.serialize(l);return[{type:"HANDLER",name:c,value:t},s]}return[{type:"RAW",value:l},k.get(l)||[]]}function u(l){switch(l.type){case"HANDLER":return r.get(l.name).deserialize(l.value);case"RAW":return l.value}}function o(l,c,b){return new Promise(t=>{const s=U();l.addEventListener("message",function a(n){!n.data||!n.data.id||n.data.id!==s||(l.removeEventListener("message",a),t(n.data))}),l.start&&l.start(),l.postMessage(Object.assign({id:s},c),b)})}function U(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}const C="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx3PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4geShlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ3IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24geShlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksYz0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgdT1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxwKT0+ZFtwXSxlKSxmPW4ucmVkdWNlKChkLHApPT5kW3BdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjp1W24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkodSxjKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4uYyk7bD1OKGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOnB9PW5ldyBNZXNzYWdlQ2hhbm5lbDt5KGUscCksbD1EKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaCh1KXtsPXt2YWx1ZTp1LFt3XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2godT0+KHt2YWx1ZTp1LFt3XTowfSkpLnRoZW4odT0+e2NvbnN0W2YsZF09Uyh1KTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLE0ocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBNKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBoKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYoaChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKGM9PmMudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57TShlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCBjPWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiBjLnRoZW4uYmluZChjKX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbixjKXtoKHMpO2NvbnN0W2wsdV09UyhjKTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sdSkudGhlbihtKX0sYXBwbHkoYSxuLGMpe2gocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W3UsZl09RihjKTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDp1fSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtoKHMpO2NvbnN0W2MsbF09RihuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAodT0+dS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Y30sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBVKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIEYoZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksVShyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRChlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24gTihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89eigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiB6KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBCPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLGs9ImVhZ2VyIix4PSJsYXp5IixXPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgYz1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHtjfWApLHQuZnMuc3ltbGluayhjLGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS50cmltKCkuc3BsaXQoLyArLyksaT1yLnNoaWZ0KCkpO2NvbnN0IHM9dC50b29scy5maW5kKGE9Pnt2YXIgYztsZXQgbj1pO3JldHVybigoYz1hPT1udWxsP3ZvaWQgMDphLmZlYXR1cmVzKT09bnVsbD92b2lkIDA6Yy5zaW1kKT09PSEwJiYobj1gJHtufS1zaW1kYCksYS5wcm9ncmFtPT1ufSk7aWYocz09bnVsbCl0aHJvd2BQcm9ncmFtICR7aX0gbm90IGZvdW5kLmA7cy5zdGRvdXQ9IiIscy5zdGRlcnI9IiIscy5sb2FkaW5nPT14JiYocy5sb2FkaW5nPWssYXdhaXQgdGhpcy5faW5pdE1vZHVsZXMoKSk7dHJ5e3MubW9kdWxlLmNhbGxNYWluKHIpfWNhdGNoKGEpe2NvbnNvbGUuZXJyb3IoYSl9dHJ5e3MubW9kdWxlLkZTLmNsb3NlKHMubW9kdWxlLkZTLnN0cmVhbXNbMV0pLHMubW9kdWxlLkZTLmNsb3NlKHMubW9kdWxlLkZTLnN0cmVhbXNbMl0pfWNhdGNoe31zLm1vZHVsZS5GUy5zdHJlYW1zWzFdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3Rkb3V0IiwidyIpLHMubW9kdWxlLkZTLnN0cmVhbXNbMl09cy5tb2R1bGUuRlMub3BlbigiL2Rldi9zdGRlcnIiLCJ3Iik7bGV0IG89e3N0ZG91dDpzLnN0ZG91dCxzdGRlcnI6cy5zdGRlcnJ9O3JldHVybiB0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCYmYXdhaXQgdGhpcy5yZWluaXQocy50b29sKSxvfSxjYXQoZSl7cmV0dXJuIHQuX2ZpbGVvcCgiY2F0IixlKX0sbHMoZSl7cmV0dXJuIHQuX2ZpbGVvcCgibHMiLGUpfSxkb3dubG9hZChlKXtyZXR1cm4gdC5fZmlsZW9wKCJkb3dubG9hZCIsZSl9LGRvd25sb2FkQmxvYihlKXtyZXR1cm4gdC5fZmlsZW9wKCJkb3dubG9hZEJsb2IiLGUpfSxwd2QoKXtyZXR1cm4gdC5mcy5jd2QoKX0sY2QoZSl7Zm9yKGxldCByIG9mIHQudG9vbHMpIXIubW9kdWxlfHxyLm1vZHVsZS5GUy5jaGRpcihlKX0sbWtkaXIoZSl7cmV0dXJuIHQuZnMubWtkaXIoZSksITB9LHJlYWQoe3BhdGg6ZSxsZW5ndGg6cixmbGFnOmk9InIiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKSxuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiB0LmZzLnJlYWQoYSxuLHMscixvKSx0LmZzLmNsb3NlKGEpLG59LHdyaXRlKHtwYXRoOmUsYnVmZmVyOnIsZmxhZzppPSJ3KyIsb2Zmc2V0OnM9MCxwb3NpdGlvbjpvPTB9KXtjb25zdCBhPXQuZnMub3BlbihlLGkpO3QuZnMud3JpdGUoYSxyLHMsci5sZW5ndGgsbyksdC5mcy5jbG9zZShhKX0sYXN5bmMgcmVpbml0KGUpe2NvbnN0IHI9dC50b29scy5maW5kKHM9PnMudG9vbD09ZSksaT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocixyLmNvbmZpZyksci5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxyLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoaSl9LGFzeW5jIGNsb3NlKCl7dC5fbG9nKCJDbG9zaW5nIHdvcmtlci4uLiIpLHNlbGYuY2xvc2UoKX0sX3N0ZGluVHh0OiIiLF9zdGRpblB0cjowLGdldCBzdGRpbigpe3JldHVybiB0Ll9zdGRpblR4dH0sc2V0IHN0ZGluKGU9IiIpe3QuX2xvZyhgU2V0dGluZyBzdGRpbiB0byAlYyR7ZX0lY2AsImNvbG9yOmRhcmtibHVlIiwiIiksdC5fc3RkaW5UeHQ9ZSx0Ll9zdGRpblB0cj0wfSxhc3luYyBfc2V0dXAoZSl7aWYoZS5yZWFkeSlyZXR1cm47aWYodC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSAoYmFzZSA9ICR7ZS5pc0Jhc2VNb2R1bGU9PT0hMH0pLi4uYCksZS5jb25maWc9T2JqZWN0LmFzc2lnbih7fSxlKSxlLnVybFByZWZpeHx8KGUudXJsUHJlZml4PWAke3QuY29uZmlnLnVybENETn0vJHtlLnRvb2x9LyR7ZS52ZXJzaW9ufWApLGUucHJvZ3JhbXx8KGUucHJvZ3JhbT1lLnRvb2wpLGUuZmVhdHVyZXN8fChlLmZlYXR1cmVzPXt9LChXW2UucHJvZ3JhbV18fFtdKS5pbmNsdWRlcygic2ltZCIpJiYoYXdhaXQgQigpPyhlLnByb2dyYW0rPSItc2ltZCIsZS5mZWF0dXJlcy5zaW1kPSEwKTp0Ll9sb2coYFdlYkFzc2VtYmx5IFNJTUQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXI7IHdpbGwgbG9hZCBub24tU0lNRCB2ZXJzaW9uIG9mICR7ZS5wcm9ncmFtfS5gKSkpLGUuaXNCYXNlTW9kdWxlJiYoZS5sb2FkaW5nPWspLGUubG9hZGluZz09PXgpe3QuX2xvZyhgV2lsbCBsYXp5LWxvYWQgJHtlLnRvb2x9OyBza2lwcGluZyBpbml0aWFsaXphdGlvbi5gKTtyZXR1cm59ZS5zY3JpcHRVcmw/c2VsZi5pbXBvcnRTY3JpcHRzKGUuc2NyaXB0VXJsKTpzZWxmLmltcG9ydFNjcmlwdHMoYCR7ZS51cmxQcmVmaXh9LyR7ZS5wcm9ncmFtfS5qc2ApLGUubW9kdWxlPWF3YWl0IE1vZHVsZSh7dGhpc1Byb2dyYW06ZS5wcm9ncmFtLGxvY2F0ZUZpbGU6KGkscyk9PmUud2FzbVVybD9lLndhc21Vcmw6YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+e3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7c3Rkb3V0Oml9fSk6ZS5zdGRvdXQrPWkrYApgfSxwcmludEVycjppPT57Y29uc3Qgcz10LmNvbmZpZy5wcmludEludGVybGVhdmVkPyJzdGRvdXQiOiJzdGRlcnIiO3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7W3NdOml9fSk6ZVtzXSs9aStgCmB9fSk7Y29uc3Qgcj1lLm1vZHVsZS5GUztlLmlzQmFzZU1vZHVsZT8odC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGJhc2UgbW9kdWxlIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpck1vdW50ZWR9YCw1MTEpLHIuY2hkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCksdC5mcz1yKToodC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCksci5tb3VudChlLm1vZHVsZS5QUk9YWUZTLHtyb290OnQuY29uZmlnLmRpclNoYXJlZCxmczp0LmZzfSx0LmNvbmZpZy5kaXJTaGFyZWQpLHIuY2hkaXIodC5mcy5jd2QoKSkpLGUuc3Rkb3V0PSIiLGUuc3RkZXJyPSIiLGUucmVhZHk9ITB9LGFzeW5jIF9zZXR1cEZTKCl7Y29uc3QgZT10LmZzO2ZvcihsZXQgciBvZiB0LnRvb2xzKXtpZighci5yZWFkeSljb250aW51ZTtjb25zdCBpPXIubW9kdWxlLkZTLHM9YC8ke3IudG9vbH1gLG89YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7c31gOyFpLmFuYWx5emVQYXRoKHMpLmV4aXN0c3x8ZS5hbmFseXplUGF0aChvKS5leGlzdHN8fCh0Ll9sb2coYE1vdW50aW5nICR7c30gb250byAke3QuYmFzZS50b29sfSBmaWxlc3lzdGVtIGF0ICR7b31gKSxlLm1rZGlyKG8pLGUubW91bnQodC5iYXNlLm1vZHVsZS5QUk9YWUZTLHtyb290OnMsZnM6aX0sbykpfX0sX2ZpbGVvcChlLHIpe3QuX2xvZyhgUnVubmluZyAke2V9ICR7cn1gKTtjb25zdCBpPXQuZnMuYW5hbHl6ZVBhdGgocik7aWYoIWkuZXhpc3RzKXJldHVybiB0Ll9sb2coYEZpbGUgJHtyfSBub3QgZm91bmQuYCksITE7c3dpdGNoKGUpe2Nhc2UiY2F0IjpyZXR1cm4gdC5mcy5yZWFkRmlsZShyLHtlbmNvZGluZzoidXRmOCJ9KTtjYXNlImxzIjpyZXR1cm4gdC5mcy5pc0ZpbGUoaS5vYmplY3QubW9kZSk/dC5mcy5zdGF0KHIpOnQuZnMucmVhZGRpcihyKTtjYXNlImRvd25sb2FkIjpjb25zdCBzPW5ldyBCbG9iKFt0aGlzLmNhdChyKV0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKHMpO2Nhc2UiZG93bmxvYWRCbG9iIjpjb25zdCBvPXQuZnMucmVhZEZpbGUocik7cmV0dXJuIG5ldyBCbG9iKFtvXSl9cmV0dXJuITF9LF9sb2coZSl7aWYoIXQuY29uZmlnLmRlYnVnKXJldHVybjtsZXQgcj1bLi4uYXJndW1lbnRzXTtyLnNoaWZ0KCksY29uc29sZS5sb2coYCVjW1dlYldvcmtlcl0lYyAke2V9YCwiZm9udC13ZWlnaHQ6Ym9sZCIsIiIsLi4ucil9fTt5KHQpfSkoKTsK",K=typeof window<"u"&&window.Blob&&new Blob([atob(C)],{type:"text/javascript;charset=utf-8"});function f(){const l=K&&(window.URL||window.webkitURL).createObjectURL(K);try{return l?new Worker(l):new Worker("data:application/javascript;base64,"+C)}finally{l&&(window.URL||window.webkitURL).revokeObjectURL(l)}}const F={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,printStream:!1,callback:null,debug:!1,env:"prd"};class v{constructor(c,b={}){if(c==null)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(c)||(c=[c]),b=Object.assign({},F,b),c=c.map(this._parseTool),b.env==="stg"&&(b.urlCDN=b.urlCDNStg),this.tools=c,this.config=b,this.config.callback!=null&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const c=new f;this.callback&&(c.onmessage=t=>{t.data.type==="biowasm"&&this.callback(t.data.value)});const b=V(c);return b.tools=this.tools,b.config=this.config,await b.init(),b}_parseTool(c){if(typeof c!="string")return c;const b=c.split("/");if(b.length!=2&&b.length!=3)throw"Expecting '/' or '//'";return{tool:b[0],program:b.length==3?b[1]:b[0],version:b[b.length-1]}}}return v}); diff --git a/src/utils/aioli-custom/aioli.mjs b/src/utils/aioli-custom/aioli.mjs deleted file mode 100644 index f003f40..0000000 --- a/src/utils/aioli-custom/aioli.mjs +++ /dev/null @@ -1,252 +0,0 @@ -const Y = Symbol("Comlink.proxy"), K = Symbol("Comlink.endpoint"), g = Symbol("Comlink.releaseProxy"), o = Symbol("Comlink.thrown"), r = (l) => typeof l == "object" && l !== null || typeof l == "function", N = { - canHandle: (l) => r(l) && l[Y], - serialize(l) { - const { port1: c, port2: b } = new MessageChannel(); - return R(l, c), [b, [b]]; - }, - deserialize(l) { - return l.start(), I(l); - } -}, H = { - canHandle: (l) => r(l) && o in l, - serialize({ value: l }) { - let c; - return l instanceof Error ? c = { - isError: !0, - value: { - message: l.message, - name: l.name, - stack: l.stack - } - } : c = { isError: !1, value: l }, [c, []]; - }, - deserialize(l) { - throw l.isError ? Object.assign(new Error(l.value.message), l.value) : l.value; - } -}, S = /* @__PURE__ */ new Map([ - ["proxy", N], - ["throw", H] -]); -function R(l, c = self) { - c.addEventListener("message", function b(t) { - if (!t || !t.data) - return; - const { id: s, type: u, path: Z } = Object.assign({ path: [] }, t.data), d = (t.data.argumentList || []).map(e); - let m; - try { - const n = Z.slice(0, -1).reduce((i, W) => i[W], l), a = Z.reduce((i, W) => i[W], l); - switch (u) { - case "GET": - m = a; - break; - case "SET": - n[Z.slice(-1)[0]] = e(t.data.value), m = !0; - break; - case "APPLY": - m = a.apply(n, d); - break; - case "CONSTRUCT": - { - const i = new a(...d); - m = z(i); - } - break; - case "ENDPOINT": - { - const { port1: i, port2: W } = new MessageChannel(); - R(l, W), m = J(i, [i]); - } - break; - case "RELEASE": - m = void 0; - break; - default: - return; - } - } catch (n) { - m = { value: n, [o]: 0 }; - } - Promise.resolve(m).catch((n) => ({ value: n, [o]: 0 })).then((n) => { - const [a, i] = h(n); - c.postMessage(Object.assign(Object.assign({}, a), { id: s }), i), u === "RELEASE" && (c.removeEventListener("message", b), V(c)); - }); - }), c.start && c.start(); -} -function x(l) { - return l.constructor.name === "MessagePort"; -} -function V(l) { - x(l) && l.close(); -} -function I(l, c) { - return X(l, [], c); -} -function p(l) { - if (l) - throw new Error("Proxy has been released and is not useable"); -} -function X(l, c = [], b = function() { -}) { - let t = !1; - const s = new Proxy(b, { - get(u, Z) { - if (p(t), Z === g) - return () => G(l, { - type: "RELEASE", - path: c.map((d) => d.toString()) - }).then(() => { - V(l), t = !0; - }); - if (Z === "then") { - if (c.length === 0) - return { then: () => s }; - const d = G(l, { - type: "GET", - path: c.map((m) => m.toString()) - }).then(e); - return d.then.bind(d); - } - return X(l, [...c, Z]); - }, - set(u, Z, d) { - p(t); - const [m, n] = h(d); - return G(l, { - type: "SET", - path: [...c, Z].map((a) => a.toString()), - value: m - }, n).then(e); - }, - apply(u, Z, d) { - p(t); - const m = c[c.length - 1]; - if (m === K) - return G(l, { - type: "ENDPOINT" - }).then(e); - if (m === "bind") - return X(l, c.slice(0, -1)); - const [n, a] = y(d); - return G(l, { - type: "APPLY", - path: c.map((i) => i.toString()), - argumentList: n - }, a).then(e); - }, - construct(u, Z) { - p(t); - const [d, m] = y(Z); - return G(l, { - type: "CONSTRUCT", - path: c.map((n) => n.toString()), - argumentList: d - }, m).then(e); - } - }); - return s; -} -function T(l) { - return Array.prototype.concat.apply([], l); -} -function y(l) { - const c = l.map(h); - return [c.map((b) => b[0]), T(c.map((b) => b[1]))]; -} -const k = /* @__PURE__ */ new WeakMap(); -function J(l, c) { - return k.set(l, c), l; -} -function z(l) { - return Object.assign(l, { [Y]: !0 }); -} -function h(l) { - for (const [c, b] of S) - if (b.canHandle(l)) { - const [t, s] = b.serialize(l); - return [ - { - type: "HANDLER", - name: c, - value: t - }, - s - ]; - } - return [ - { - type: "RAW", - value: l - }, - k.get(l) || [] - ]; -} -function e(l) { - switch (l.type) { - case "HANDLER": - return S.get(l.name).deserialize(l.value); - case "RAW": - return l.value; - } -} -function G(l, c, b) { - return new Promise((t) => { - const s = U(); - l.addEventListener("message", function u(Z) { - !Z.data || !Z.data.id || Z.data.id !== s || (l.removeEventListener("message", u), t(Z.data)); - }), l.start && l.start(), l.postMessage(Object.assign({ id: s }, c), b); - }); -} -function U() { - return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-"); -} -const C = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx3PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4geShlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ3IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24geShlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksYz0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgdT1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxwKT0+ZFtwXSxlKSxmPW4ucmVkdWNlKChkLHApPT5kW3BdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjp1W24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkodSxjKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4uYyk7bD1OKGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOnB9PW5ldyBNZXNzYWdlQ2hhbm5lbDt5KGUscCksbD1EKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaCh1KXtsPXt2YWx1ZTp1LFt3XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2godT0+KHt2YWx1ZTp1LFt3XTowfSkpLnRoZW4odT0+e2NvbnN0W2YsZF09Uyh1KTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLE0ocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBNKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBoKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYoaChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKGM9PmMudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57TShlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCBjPWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiBjLnRoZW4uYmluZChjKX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbixjKXtoKHMpO2NvbnN0W2wsdV09UyhjKTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sdSkudGhlbihtKX0sYXBwbHkoYSxuLGMpe2gocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W3UsZl09RihjKTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDp1fSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtoKHMpO2NvbnN0W2MsbF09RihuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAodT0+dS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Y30sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBVKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIEYoZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksVShyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRChlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24gTihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89eigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiB6KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBCPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLGs9ImVhZ2VyIix4PSJsYXp5IixXPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgYz1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHtjfWApLHQuZnMuc3ltbGluayhjLGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS50cmltKCkuc3BsaXQoLyArLyksaT1yLnNoaWZ0KCkpO2NvbnN0IHM9dC50b29scy5maW5kKGE9Pnt2YXIgYztsZXQgbj1pO3JldHVybigoYz1hPT1udWxsP3ZvaWQgMDphLmZlYXR1cmVzKT09bnVsbD92b2lkIDA6Yy5zaW1kKT09PSEwJiYobj1gJHtufS1zaW1kYCksYS5wcm9ncmFtPT1ufSk7aWYocz09bnVsbCl0aHJvd2BQcm9ncmFtICR7aX0gbm90IGZvdW5kLmA7cy5zdGRvdXQ9IiIscy5zdGRlcnI9IiIscy5sb2FkaW5nPT14JiYocy5sb2FkaW5nPWssYXdhaXQgdGhpcy5faW5pdE1vZHVsZXMoKSk7dHJ5e3MubW9kdWxlLmNhbGxNYWluKHIpfWNhdGNoKGEpe2NvbnNvbGUuZXJyb3IoYSl9dHJ5e3MubW9kdWxlLkZTLmNsb3NlKHMubW9kdWxlLkZTLnN0cmVhbXNbMV0pLHMubW9kdWxlLkZTLmNsb3NlKHMubW9kdWxlLkZTLnN0cmVhbXNbMl0pfWNhdGNoe31zLm1vZHVsZS5GUy5zdHJlYW1zWzFdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3Rkb3V0IiwidyIpLHMubW9kdWxlLkZTLnN0cmVhbXNbMl09cy5tb2R1bGUuRlMub3BlbigiL2Rldi9zdGRlcnIiLCJ3Iik7bGV0IG89e3N0ZG91dDpzLnN0ZG91dCxzdGRlcnI6cy5zdGRlcnJ9O3JldHVybiB0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCYmYXdhaXQgdGhpcy5yZWluaXQocy50b29sKSxvfSxjYXQoZSl7cmV0dXJuIHQuX2ZpbGVvcCgiY2F0IixlKX0sbHMoZSl7cmV0dXJuIHQuX2ZpbGVvcCgibHMiLGUpfSxkb3dubG9hZChlKXtyZXR1cm4gdC5fZmlsZW9wKCJkb3dubG9hZCIsZSl9LGRvd25sb2FkQmxvYihlKXtyZXR1cm4gdC5fZmlsZW9wKCJkb3dubG9hZEJsb2IiLGUpfSxwd2QoKXtyZXR1cm4gdC5mcy5jd2QoKX0sY2QoZSl7Zm9yKGxldCByIG9mIHQudG9vbHMpIXIubW9kdWxlfHxyLm1vZHVsZS5GUy5jaGRpcihlKX0sbWtkaXIoZSl7cmV0dXJuIHQuZnMubWtkaXIoZSksITB9LHJlYWQoe3BhdGg6ZSxsZW5ndGg6cixmbGFnOmk9InIiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKSxuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiB0LmZzLnJlYWQoYSxuLHMscixvKSx0LmZzLmNsb3NlKGEpLG59LHdyaXRlKHtwYXRoOmUsYnVmZmVyOnIsZmxhZzppPSJ3KyIsb2Zmc2V0OnM9MCxwb3NpdGlvbjpvPTB9KXtjb25zdCBhPXQuZnMub3BlbihlLGkpO3QuZnMud3JpdGUoYSxyLHMsci5sZW5ndGgsbyksdC5mcy5jbG9zZShhKX0sYXN5bmMgcmVpbml0KGUpe2NvbnN0IHI9dC50b29scy5maW5kKHM9PnMudG9vbD09ZSksaT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocixyLmNvbmZpZyksci5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxyLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoaSl9LGFzeW5jIGNsb3NlKCl7dC5fbG9nKCJDbG9zaW5nIHdvcmtlci4uLiIpLHNlbGYuY2xvc2UoKX0sX3N0ZGluVHh0OiIiLF9zdGRpblB0cjowLGdldCBzdGRpbigpe3JldHVybiB0Ll9zdGRpblR4dH0sc2V0IHN0ZGluKGU9IiIpe3QuX2xvZyhgU2V0dGluZyBzdGRpbiB0byAlYyR7ZX0lY2AsImNvbG9yOmRhcmtibHVlIiwiIiksdC5fc3RkaW5UeHQ9ZSx0Ll9zdGRpblB0cj0wfSxhc3luYyBfc2V0dXAoZSl7aWYoZS5yZWFkeSlyZXR1cm47aWYodC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSAoYmFzZSA9ICR7ZS5pc0Jhc2VNb2R1bGU9PT0hMH0pLi4uYCksZS5jb25maWc9T2JqZWN0LmFzc2lnbih7fSxlKSxlLnVybFByZWZpeHx8KGUudXJsUHJlZml4PWAke3QuY29uZmlnLnVybENETn0vJHtlLnRvb2x9LyR7ZS52ZXJzaW9ufWApLGUucHJvZ3JhbXx8KGUucHJvZ3JhbT1lLnRvb2wpLGUuZmVhdHVyZXN8fChlLmZlYXR1cmVzPXt9LChXW2UucHJvZ3JhbV18fFtdKS5pbmNsdWRlcygic2ltZCIpJiYoYXdhaXQgQigpPyhlLnByb2dyYW0rPSItc2ltZCIsZS5mZWF0dXJlcy5zaW1kPSEwKTp0Ll9sb2coYFdlYkFzc2VtYmx5IFNJTUQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXI7IHdpbGwgbG9hZCBub24tU0lNRCB2ZXJzaW9uIG9mICR7ZS5wcm9ncmFtfS5gKSkpLGUuaXNCYXNlTW9kdWxlJiYoZS5sb2FkaW5nPWspLGUubG9hZGluZz09PXgpe3QuX2xvZyhgV2lsbCBsYXp5LWxvYWQgJHtlLnRvb2x9OyBza2lwcGluZyBpbml0aWFsaXphdGlvbi5gKTtyZXR1cm59ZS5zY3JpcHRVcmw/c2VsZi5pbXBvcnRTY3JpcHRzKGUuc2NyaXB0VXJsKTpzZWxmLmltcG9ydFNjcmlwdHMoYCR7ZS51cmxQcmVmaXh9LyR7ZS5wcm9ncmFtfS5qc2ApLGUubW9kdWxlPWF3YWl0IE1vZHVsZSh7dGhpc1Byb2dyYW06ZS5wcm9ncmFtLGxvY2F0ZUZpbGU6KGkscyk9PmUud2FzbVVybD9lLndhc21Vcmw6YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+e3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7c3Rkb3V0Oml9fSk6ZS5zdGRvdXQrPWkrYApgfSxwcmludEVycjppPT57Y29uc3Qgcz10LmNvbmZpZy5wcmludEludGVybGVhdmVkPyJzdGRvdXQiOiJzdGRlcnIiO3QuY29uZmlnLnByaW50U3RyZWFtP3Bvc3RNZXNzYWdlKHt0eXBlOiJiaW93YXNtIix2YWx1ZTp7W3NdOml9fSk6ZVtzXSs9aStgCmB9fSk7Y29uc3Qgcj1lLm1vZHVsZS5GUztlLmlzQmFzZU1vZHVsZT8odC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGJhc2UgbW9kdWxlIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCw1MTEpLHIubWtkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpck1vdW50ZWR9YCw1MTEpLHIuY2hkaXIoYCR7dC5jb25maWcuZGlyU2hhcmVkfS8ke3QuY29uZmlnLmRpckRhdGF9YCksdC5mcz1yKToodC5fbG9nKGBTZXR0aW5nIHVwICR7ZS50b29sfSB3aXRoIGZpbGVzeXN0ZW0uLi5gKSxyLm1rZGlyKHQuY29uZmlnLmRpclNoYXJlZCksci5tb3VudChlLm1vZHVsZS5QUk9YWUZTLHtyb290OnQuY29uZmlnLmRpclNoYXJlZCxmczp0LmZzfSx0LmNvbmZpZy5kaXJTaGFyZWQpLHIuY2hkaXIodC5mcy5jd2QoKSkpLGUuc3Rkb3V0PSIiLGUuc3RkZXJyPSIiLGUucmVhZHk9ITB9LGFzeW5jIF9zZXR1cEZTKCl7Y29uc3QgZT10LmZzO2ZvcihsZXQgciBvZiB0LnRvb2xzKXtpZighci5yZWFkeSljb250aW51ZTtjb25zdCBpPXIubW9kdWxlLkZTLHM9YC8ke3IudG9vbH1gLG89YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7c31gOyFpLmFuYWx5emVQYXRoKHMpLmV4aXN0c3x8ZS5hbmFseXplUGF0aChvKS5leGlzdHN8fCh0Ll9sb2coYE1vdW50aW5nICR7c30gb250byAke3QuYmFzZS50b29sfSBmaWxlc3lzdGVtIGF0ICR7b31gKSxlLm1rZGlyKG8pLGUubW91bnQodC5iYXNlLm1vZHVsZS5QUk9YWUZTLHtyb290OnMsZnM6aX0sbykpfX0sX2ZpbGVvcChlLHIpe3QuX2xvZyhgUnVubmluZyAke2V9ICR7cn1gKTtjb25zdCBpPXQuZnMuYW5hbHl6ZVBhdGgocik7aWYoIWkuZXhpc3RzKXJldHVybiB0Ll9sb2coYEZpbGUgJHtyfSBub3QgZm91bmQuYCksITE7c3dpdGNoKGUpe2Nhc2UiY2F0IjpyZXR1cm4gdC5mcy5yZWFkRmlsZShyLHtlbmNvZGluZzoidXRmOCJ9KTtjYXNlImxzIjpyZXR1cm4gdC5mcy5pc0ZpbGUoaS5vYmplY3QubW9kZSk/dC5mcy5zdGF0KHIpOnQuZnMucmVhZGRpcihyKTtjYXNlImRvd25sb2FkIjpjb25zdCBzPW5ldyBCbG9iKFt0aGlzLmNhdChyKV0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKHMpO2Nhc2UiZG93bmxvYWRCbG9iIjpjb25zdCBvPXQuZnMucmVhZEZpbGUocik7cmV0dXJuIG5ldyBCbG9iKFtvXSl9cmV0dXJuITF9LF9sb2coZSl7aWYoIXQuY29uZmlnLmRlYnVnKXJldHVybjtsZXQgcj1bLi4uYXJndW1lbnRzXTtyLnNoaWZ0KCksY29uc29sZS5sb2coYCVjW1dlYldvcmtlcl0lYyAke2V9YCwiZm9udC13ZWlnaHQ6Ym9sZCIsIiIsLi4ucil9fTt5KHQpfSkoKTsK", L = typeof window < "u" && window.Blob && new Blob([atob(C)], { type: "text/javascript;charset=utf-8" }); -function f() { - const l = L && (window.URL || window.webkitURL).createObjectURL(L); - try { - return l ? new Worker(l) : new Worker("data:application/javascript;base64," + C); - } finally { - l && (window.URL || window.webkitURL).revokeObjectURL(l); - } -} -const F = "https://biowasm.com/cdn/v3", v = "https://stg.biowasm.com/cdn/v3", B = { - urlCDN: F, - urlCDNStg: v, - dirShared: "/shared", - dirMounted: "/mnt", - dirData: "/data", - printInterleaved: !0, - printStream: !1, - callback: null, - debug: !1, - env: "prd" -}; -class w { - constructor(c, b = {}) { - if (c == null) - throw "Expecting array of tools as input to Aioli constructor."; - return Array.isArray(c) || (c = [c]), b = Object.assign({}, B, b), c = c.map(this._parseTool), b.env === "stg" && (b.urlCDN = b.urlCDNStg), this.tools = c, this.config = b, this.config.callback != null && (this.callback = this.config.callback), delete this.config.callback, this.init(); - } - async init() { - const c = new f(); - this.callback && (c.onmessage = (t) => { - t.data.type === "biowasm" && this.callback(t.data.value); - }); - const b = I(c); - return b.tools = this.tools, b.config = this.config, await b.init(), b; - } - _parseTool(c) { - if (typeof c != "string") - return c; - const b = c.split("/"); - if (b.length != 2 && b.length != 3) - throw "Expecting '/' or '//'"; - return { - tool: b[0], - program: b.length == 3 ? b[1] : b[0], - version: b[b.length - 1] - }; - } -} -export { - w as default -}; diff --git a/src/utils/toolUtils.js b/src/utils/toolUtils.js index 5c3e4f4..08f23b1 100644 --- a/src/utils/toolUtils.js +++ b/src/utils/toolUtils.js @@ -1,4 +1,4 @@ -import Aioli from "./aioli-custom/aioli" +import Aioli from "@biowasm/aioli"; import logger from "./logger"; import { detectIsBinaryFile } from "./detectDataType"; import { makeBinaryDataValue, makeTextDataValue } from './dataValue' @@ -469,4 +469,11 @@ export function toolHasNoInputs(toolName) { if (!tool) return true; return !tool.io?.inputs || tool.io.inputs.length === 0; +} + +export function getToolRuntimes(toolName) { + const tool = getTool(toolName); + if (!tool) return; + + return tool.runtime?.modes } \ No newline at end of file