@dodona/papyros 0.1.11-rc → 0.1.22-rc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Papyros=e():t.Papyros=e()}(self,(function(){return(()=>{"use strict";var t,e,n={572:(t,e,n)=>{var r,o=n(375),i=n(691),s=(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),a=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},u=function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};importScripts("https://cdn.jsdelivr.net/pyodide/v0.18.1/full/pyodide.js");var l=function(t){function e(){var e=t.call(this)||this;return e.pyodide={},e.initialized=!1,e.globals=new Map,e}return s(e,t),e.prototype.launch=function(e,n,r){return a(this,void 0,void 0,(function(){var o,i,s=this;return u(this,(function(a){switch(a.label){case 0:return[4,t.prototype.launch.call(this,e,n,r)];case 1:return a.sent(),[4,loadPyodide({indexURL:"https://cdn.jsdelivr.net/pyodide/v0.18.1/full/",fullStdLib:!1})];case 2:return o=a.sent(),this.pyodide=o,[4,this.runCode('\nfrom pyodide import to_js\nimport sys\n\ndef __override_builtins(cb):\n __capture_stdout(cb)\n __override_stdin(cb)\n # set name to main instead of builtins\n globals()["__name__"] = "__main__"\n\ndef __capture_stdout(cb):\n class _OutputWriter:\n def __init__(self):\n self.encoding = "utf-8"\n \n def write(self, s):\n cb(to_js({"type": "output", "data":s}))\n\n def flush(self):\n pass # Given data is always immediately written\n\n sys.stdout = _OutputWriter()\n\n__papyros_input = ""\ndef __override_stdin(cb):\n def __papyros_readline(n=-1):\n global __papyros_input\n if not __papyros_input:\n __papyros_input = cb(to_js({"type": "input", "data":"next line"})) + "\\n"\n if n < 0 or n > len(__papyros_input):\n n = len(__papyros_input)\n to_return = __papyros_input[0:n]\n __papyros_input = __papyros_input[n:]\n return to_return\n\n sys.stdin.readline = __papyros_readline\n',0)];case 3:return a.sent(),i=function(t){var e="toJs"in t?t.toJs():Object.fromEntries(t);return s.onEvent(e)},this.pyodide.globals.get("__override_builtins")(i),this.globals=new Map(this.pyodide.globals.toJs()),this.initialized=!0,[2]}}))}))},e.prototype._cleanScope=function(){var t,e,n=this.pyodide.globals,r=[];try{for(var o=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(n.keys()),i=o.next();!i.done;i=o.next()){var s=i.value;this.globals.has(s)?n.set(s,this.globals.get(s)):r.push(s)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}r.forEach((function(t){return n.delete(t)}))},e.prototype._runCodeInternal=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(n){switch(n.label){case 0:return[4,this.pyodide.loadPackagesFromImports(t)];case 1:return n.sent(),this.initialized?(e=this.pyodide.runPython(t),this._cleanScope(),[2,e]):[2,this.pyodide.runPythonAsync(t)]}}))}))},e}(i.z);(0,o.Jj)(new l)}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={exports:{}};return n[t](i,i.exports,o),i.exports}return o.m=n,o.x=()=>{var t=o.O(void 0,[71],(()=>o(572)));return o.O(t)},t=[],o.O=(e,n,r,i)=>{if(!n){var s=1/0;for(p=0;p<t.length;p++){for(var[n,r,i]=t[p],a=!0,u=0;u<n.length;u++)(!1&i||s>=i)&&Object.keys(o.O).every((t=>o.O[t](n[u])))?n.splice(u--,1):(a=!1,i<s&&(s=i));if(a){t.splice(p--,1);var l=r();void 0!==l&&(e=l)}}return e}i=i||0;for(var p=t.length;p>0&&t[p-1][2]>i;p--)t[p]=t[p-1];t[p]=[n,r,i]},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce(((e,n)=>(o.f[n](t,e),e)),[])),o.u=t=>t+".index.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),(()=>{var t={572:1};o.f.i=(e,n)=>{t[e]||importScripts(o.p+o.u(e))};var e=self.webpackChunkPapyros=self.webpackChunkPapyros||[],n=e.push.bind(e);e.push=e=>{var[r,i,s]=e;for(var a in i)o.o(i,a)&&(o.m[a]=i[a]);for(s&&s(o);r.length;)t[r.pop()]=1;n(e)}})(),e=o.x,o.x=()=>o.e(71).then(e),o.x()})()}));
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkPapyros=self.webpackChunkPapyros||[]).push([[71],{691:(e,t,n)=>{n.d(t,{z:()=>o});var r=n(738),a=n(155),o=function(){function e(){this.onEvent=function(){},this.runId=0}return e.prototype.launch=function(e,t,n){var a=this,o=function(e,t){if(e&&t){var n=new TextDecoder;return function(){for(;"timed-out"===Atomics.wait(t,0,0,100););Atomics.store(t,0,0);var r=Atomics.exchange(t,1,0),a=e.slice(0,r);return n.decode(a)}}return function(){var e=new XMLHttpRequest;do{e.open("GET",r.jB,!1),e.send(null)}while(e.status>=400);return e.responseText}}(t,n);return this.onEvent=function(t){if(t.runId=a.runId,e(t),"input"===t.type)return o()},Promise.resolve()},e.prototype.runCode=function(e,t){return n=this,r=void 0,i=function(){var n,r,o;return function(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!((a=(a=i.trys).length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}(this,(function(i){switch(i.label){case 0:this.runId=t,(0,a.V)(a.h.Debug,"Running code in worker: ",e),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this._runCodeInternal(e)];case 2:return n=i.sent(),(0,a.V)(a.h.Important,"ran code: "+e+" and received: ",n),[2,this.onEvent({type:"success",data:n,runId:t})];case 3:return r=i.sent(),o="toString"in r?r.toString():JSON.stringify(r),(0,a.V)(a.h.Error,"Error during execution: ",r,o),[2,this.onEvent({type:"error",data:o,runId:t})];case 4:return[2]}}))},new((o=void 0)||(o=Promise))((function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function s(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,s)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},e}()},738:(e,t,n)=>{n.d(t,{jB:()=>r}),n(905).Xn.Python;var r="/__papyros_input"},905:(e,t,n)=>{var r;n.d(t,{Xn:()=>r}),function(e){e.Python="Python",e.JavaScript="JavaScript"}(r||(r={})),r.Python,r.JavaScript,new Map([["python",r.Python],["javascript",r.JavaScript]])},155:(e,t,n)=>{n.d(t,{h:()=>r,V:()=>i});var r,a=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i},o=function(e,t,n){if(n||2===arguments.length)for(var r,a=0,o=t.length;a<o;a++)!r&&a in t||(r||(r=Array.prototype.slice.call(t,0,a)),r[a]=t[a]);return e.concat(r||Array.prototype.slice.call(t))};function i(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var i=e!==r.Debug;i&&(e===r.Error?console.error.apply(console,o([],a(t),!1)):console.log.apply(console,o([],a(t),!1)))}!function(e){e[e.Debug=0]="Debug",e[e.Error=1]="Error",e[e.Important=2]="Important"}(r||(r={}))},375:(e,t,n)=>{n.d(t,{Jj:()=>u});const r=Symbol("Comlink.proxy"),a=Symbol("Comlink.endpoint"),o=Symbol("Comlink.releaseProxy"),i=Symbol("Comlink.thrown"),s=e=>"object"==typeof e&&null!==e||"function"==typeof e,c=new Map([["proxy",{canHandle:e=>s(e)&&e[r],serialize(e){const{port1:t,port2:n}=new MessageChannel;return u(e,t),[n,[n]]},deserialize:e=>(e.start(),f(e,[],undefined))}],["throw",{canHandle:e=>s(e)&&i 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=self){t.addEventListener("message",(function n(a){if(!a||!a.data)return;const{id:o,type:s,path:c}=Object.assign({path:[]},a.data),p=(a.data.argumentList||[]).map(v);let f;try{const t=c.slice(0,-1).reduce(((e,t)=>e[t]),e),n=c.reduce(((e,t)=>e[t]),e);switch(s){case"GET":f=n;break;case"SET":t[c.slice(-1)[0]]=v(a.data.value),f=!0;break;case"APPLY":f=n.apply(t,p);break;case"CONSTRUCT":f=function(e){return Object.assign(e,{[r]:!0})}(new n(...p));break;case"ENDPOINT":{const{port1:t,port2:n}=new MessageChannel;u(e,n),f=function(e,t){return d.set(e,t),e}(t,[t])}break;case"RELEASE":f=void 0;break;default:return}}catch(e){f={value:e,[i]:0}}Promise.resolve(f).catch((e=>({value:e,[i]:0}))).then((e=>{const[r,a]=y(e);t.postMessage(Object.assign(Object.assign({},r),{id:o}),a),"RELEASE"===s&&(t.removeEventListener("message",n),l(t))}))})),t.start&&t.start()}function l(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function p(e){if(e)throw new Error("Proxy has been released and is not useable")}function f(e,t=[],n=function(){}){let r=!1;const i=new Proxy(n,{get(n,a){if(p(r),a===o)return()=>m(e,{type:"RELEASE",path:t.map((e=>e.toString()))}).then((()=>{l(e),r=!0}));if("then"===a){if(0===t.length)return{then:()=>i};const n=m(e,{type:"GET",path:t.map((e=>e.toString()))}).then(v);return n.then.bind(n)}return f(e,[...t,a])},set(n,a,o){p(r);const[i,s]=y(o);return m(e,{type:"SET",path:[...t,a].map((e=>e.toString())),value:i},s).then(v)},apply(n,o,i){p(r);const s=t[t.length-1];if(s===a)return m(e,{type:"ENDPOINT"}).then(v);if("bind"===s)return f(e,t.slice(0,-1));const[c,u]=h(i);return m(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:c},u).then(v)},construct(n,a){p(r);const[o,i]=h(a);return m(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:o},i).then(v)}});return i}function h(e){const t=e.map(y);return[t.map((e=>e[0])),(n=t.map((e=>e[1])),Array.prototype.concat.apply([],n))];var n}const d=new WeakMap;function y(e){for(const[t,n]of c)if(n.canHandle(e)){const[r,a]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},a]}return[{type:"RAW",value:e},d.get(e)||[]]}function v(e){switch(e.type){case"HANDLER":return c.get(e.name).deserialize(e.value);case"RAW":return e.value}}function m(e,t,n){return new Promise((r=>{const a=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===a&&(e.removeEventListener("message",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:a},t),n)}))}}}]);
@@ -0,0 +1 @@
1
+ !function(t,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Papyros=r():t.Papyros=r()}(self,(function(){return(()=>{"use strict";var t,r,n={806:(t,r,n)=>{var e,o=n(375),i=n(691),a=(e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])},e(t,r)},function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}),s=function(t,r){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var e,o,i=n.call(t),a=[];try{for(;(void 0===r||r-- >0)&&!(e=i.next()).done;)a.push(e.value)}catch(t){o={error:t}}finally{try{e&&!e.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},p=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return a(r,t),r.prototype._runCodeInternal=function(t){var r,n,e=new Map([["prompt","__prompt"],["console.log","__papyros_log"],["console.error","__papyros_error"]]),o={__onEvent:this.onEvent.bind(this)},i=[],a=[];for(var p in o)Object.prototype.hasOwnProperty.call(o,p)&&a.push("const ".concat(p," = ctx['").concat(p,"'];"));try{for(var c=function(t){var r="function"==typeof Symbol&&Symbol.iterator,n=r&&t[r],e=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&e>=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}(e.entries()),u=c.next();!u.done;u=c.next()){var l=s(u.value,2),f=l[0],y=l[1];a.push("".concat(y," = ").concat(f)),i.push("".concat(f," = ").concat(y))}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}a.push('\nfunction prompt(text="", defaultText=""){\n __onEvent({"type": "output", "data": text});\n const promptedValue = __onEvent({"type": "input", "data": text});\n __onEvent({"type": "output", "data": promptedValue + "\\n"});\n return promptedValue;\n}\nfunction __stringify(args, addNewline=false){\n let asString = "";\n if(Array.isArray(args)){\n if(args.length === 1){\n asString = JSON.stringify(args[0]);\n } else {\n asString = args.map(s => {\n if(typeof s === \'string\' || s instanceof String){\n return s; // prevent spurious quotes\n } else {\n return JSON.stringify(s);\n }\n }).join(" ");\n }\n } else {\n asString = JSON.stringify(args);\n }\n if(addNewline){\n asString += "\\n";\n }\n return asString;\n}\nconsole.log = (...args) => {\n __onEvent({"type": "output", "data": __stringify(args, true)});\n}\nconsole.error = (...args) => {\n __onEvent({"type": "error", "data": __stringify(args, true)});\n}\n '),a.push("\ntry {\n".concat(t,"\n} finally {\n").concat(i.join("\n"),"\n}\n "));var g=a.join("\n");return Promise.resolve(new Function("ctx",g)(o))},r}(i.z);(0,o.Jj)(new p)}},e={};function o(t){var r=e[t];if(void 0!==r)return r.exports;var i=e[t]={exports:{}};return n[t](i,i.exports,o),i.exports}return o.m=n,o.x=()=>{var t=o.O(void 0,[71],(()=>o(806)));return o.O(t)},t=[],o.O=(r,n,e,i)=>{if(!n){var a=1/0;for(u=0;u<t.length;u++){for(var[n,e,i]=t[u],s=!0,p=0;p<n.length;p++)(!1&i||a>=i)&&Object.keys(o.O).every((t=>o.O[t](n[p])))?n.splice(p--,1):(s=!1,i<a&&(a=i));if(s){t.splice(u--,1);var c=e();void 0!==c&&(r=c)}}return r}i=i||0;for(var u=t.length;u>0&&t[u-1][2]>i;u--)t[u]=t[u-1];t[u]=[n,e,i]},o.d=(t,r)=>{for(var n in r)o.o(r,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce(((r,n)=>(o.f[n](t,r),r)),[])),o.u=t=>t+".index.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,r)=>Object.prototype.hasOwnProperty.call(t,r),(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var r=o.g.document;if(!t&&r&&(r.currentScript&&(t=r.currentScript.src),!t)){var n=r.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),(()=>{var t={806:1};o.f.i=(r,n)=>{t[r]||importScripts(o.p+o.u(r))};var r=self.webpackChunkPapyros=self.webpackChunkPapyros||[],n=r.push.bind(r);r.push=r=>{var[e,i,a]=r;for(var s in i)o.o(i,s)&&(o.m[s]=i[s]);for(a&&a(o);e.length;)t[e.pop()]=1;n(r)}})(),r=o.x,o.x=()=>o.e(71).then(r),o.x()})()}));
@@ -0,0 +1,22 @@
1
+ import { PapyrosEvent } from "./PapyrosEvent";
2
+ export declare abstract class Backend {
3
+ onEvent: (e: PapyrosEvent) => any;
4
+ runId: number;
5
+ constructor();
6
+ /**
7
+ * Initialize the backend, setting up any globals required
8
+ * @param {function(PapyrosEvent):void} onEvent Callback for when events occur
9
+ * @param {Uint8Array} inputTextArray Optional shared buffer for input
10
+ * @param {Int32Array} inputMetaData Optional shared buffer for metadata about input
11
+ * @return {Promise<void>} Promise of launching
12
+ */
13
+ launch(onEvent: (e: PapyrosEvent) => void, inputTextArray?: Uint8Array, inputMetaData?: Int32Array): Promise<void>;
14
+ abstract _runCodeInternal(code: string): Promise<any>;
15
+ /**
16
+ * Validate and run arbitrary code
17
+ * @param {string} code The code to run
18
+ * @param {string} runId The uuid for this execution
19
+ * @return {Promise<void>} Promise of execution
20
+ */
21
+ runCode(code: string, runId: number): Promise<void>;
22
+ }
@@ -0,0 +1,5 @@
1
+ import { Remote } from "comlink";
2
+ import { Backend } from "./Backend";
3
+ import { ProgrammingLanguage } from "./ProgrammingLanguage";
4
+ export declare function getBackend(language: ProgrammingLanguage): Remote<Backend>;
5
+ export declare function stopBackend(backend: Remote<Backend>): void;
@@ -0,0 +1,12 @@
1
+ import { Compartment } from "@codemirror/state";
2
+ import { ProgrammingLanguage } from "./ProgrammingLanguage";
3
+ import { EditorView } from "@codemirror/view";
4
+ export declare class CodeEditor {
5
+ editorView: EditorView;
6
+ languageCompartment: Compartment;
7
+ indentCompartment: Compartment;
8
+ constructor(element: HTMLElement, language: ProgrammingLanguage, initialCode?: string, indentLength?: number);
9
+ setLanguage(language: ProgrammingLanguage): void;
10
+ setIndentLength(indentLength: number): void;
11
+ getCode(): string;
12
+ }
@@ -0,0 +1,14 @@
1
+ import { ProgrammingLanguage } from "./ProgrammingLanguage";
2
+ export declare const MAIN_APP_ID = "papyros";
3
+ export declare const OUTPUT_TA_ID = "code-output-area";
4
+ export declare const INPUT_TA_ID = "code-input-area";
5
+ export declare const EDITOR_WRAPPER_ID = "code-area";
6
+ export declare const STATE_SPINNER_ID = "state-spinner";
7
+ export declare const APPLICATION_STATE_TEXT_ID = "application-state-text";
8
+ export declare const RUN_BTN_ID = "run-code-btn";
9
+ export declare const TERMINATE_BTN_ID = "terminate-btn";
10
+ export declare const PROGRAMMING_LANGUAGE_SELECT_ID = "programming-language-select";
11
+ export declare const DEFAULT_PROGRAMMING_LANGUAGE = ProgrammingLanguage.Python;
12
+ export declare const LOCALE_SELECT_ID = "locale-select";
13
+ export declare const DEFAULT_LOCALE = "nl";
14
+ export declare const INPUT_RELATIVE_URL = "/__papyros_input";
@@ -0,0 +1,61 @@
1
+ import "./Papyros.css";
2
+ import { Remote } from "comlink";
3
+ import { Backend } from "./Backend";
4
+ import { CodeEditor } from "./CodeEditor";
5
+ import { PapyrosEvent } from "./PapyrosEvent";
6
+ import { ProgrammingLanguage } from "./ProgrammingLanguage";
7
+ declare enum PapyrosState {
8
+ Loading = "loading",
9
+ Running = "running",
10
+ AwaitingInput = "awaiting_input",
11
+ Terminating = "terminating",
12
+ Ready = "ready"
13
+ }
14
+ declare class PapyrosStateManager {
15
+ state: PapyrosState;
16
+ stateSpinner: HTMLElement;
17
+ stateText: HTMLElement;
18
+ runButton: HTMLButtonElement;
19
+ terminateButton: HTMLButtonElement;
20
+ constructor();
21
+ setState(state: PapyrosState, message?: string): void;
22
+ }
23
+ interface PapyrosCodeState {
24
+ programmingLanguage: ProgrammingLanguage;
25
+ editor: CodeEditor;
26
+ backend: Remote<Backend>;
27
+ runId: number;
28
+ outputArea: HTMLInputElement;
29
+ }
30
+ interface PapyrosInputState {
31
+ lineNr: number;
32
+ textEncoder: TextEncoder;
33
+ inputArea: HTMLInputElement;
34
+ inputTextArray?: Uint8Array;
35
+ inputMetaData?: Int32Array;
36
+ }
37
+ interface PapyrosConfig {
38
+ standAlone: boolean;
39
+ locale?: string;
40
+ programmingLanguage?: ProgrammingLanguage;
41
+ inputTextArray?: Uint8Array;
42
+ inputMetaData?: Int32Array;
43
+ }
44
+ export declare class Papyros {
45
+ stateManager: PapyrosStateManager;
46
+ codeState: PapyrosCodeState;
47
+ inputState: PapyrosInputState;
48
+ constructor(programmingLanguage: ProgrammingLanguage, inputTextArray?: Uint8Array, inputMetaData?: Int32Array);
49
+ get state(): PapyrosState;
50
+ launch(): Promise<Papyros>;
51
+ setProgrammingLanguage(programmingLanguage: ProgrammingLanguage): Promise<void>;
52
+ startBackend(): Promise<void>;
53
+ static fromElement(parent: HTMLElement, config: PapyrosConfig): Promise<Papyros>;
54
+ onError(e: PapyrosEvent): void;
55
+ sendInput(): Promise<boolean>;
56
+ onInput(e: PapyrosEvent): Promise<void>;
57
+ onMessage(e: PapyrosEvent): void;
58
+ runCode(): Promise<void>;
59
+ terminate(): Promise<void>;
60
+ }
61
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface PapyrosEvent {
2
+ type: "input" | "output" | "script" | "success" | "error";
3
+ data: string;
4
+ runId: number;
5
+ }
@@ -0,0 +1,6 @@
1
+ export declare enum ProgrammingLanguage {
2
+ Python = "Python",
3
+ JavaScript = "JavaScript"
4
+ }
5
+ export declare const PROGRAMMING_LANGUAGES: ProgrammingLanguage[];
6
+ export declare function plFromString(language: string): ProgrammingLanguage;
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import "bootstrap/dist/css/bootstrap.css";
2
+ import "./App.css";