@dodona/papyros 0.1.922-tar → 0.1.923-tar
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.
- package/dist/Backend.d.ts +8 -13
- package/dist/BackendManager.d.ts +19 -11
- package/dist/Library.d.ts +1 -2
- package/dist/workers/python/PythonWorker.worker.d.ts +0 -2
- package/package.json +5 -4
- package/dist/InputWorker.js +0 -1
- package/dist/Library.js +0 -1
- package/dist/workers/python/Pyodide.d.ts +0 -32
package/dist/Backend.d.ts
CHANGED
|
@@ -34,25 +34,19 @@ export interface WorkerAutocompleteContext {
|
|
|
34
34
|
text: string;
|
|
35
35
|
} | null;
|
|
36
36
|
}
|
|
37
|
-
export declare abstract class Backend {
|
|
38
|
-
protected
|
|
37
|
+
export declare abstract class Backend<Extras extends SyncExtras = SyncExtras> {
|
|
38
|
+
protected extras: Extras;
|
|
39
39
|
protected onEvent: (e: BackendEvent) => any;
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @param {Array<string>} syncMethods The methods to expose
|
|
41
|
+
* Constructor is limited as it is meant to be used as a WebWorker
|
|
42
|
+
* Proper initialization occurs in the launch method when the worker is started
|
|
43
|
+
* Synchronously exposing methods should be done here
|
|
45
44
|
*/
|
|
46
|
-
constructor(
|
|
45
|
+
constructor();
|
|
47
46
|
/**
|
|
48
47
|
* @return {any} The function to expose methods for Comsync to allow interrupting
|
|
49
48
|
*/
|
|
50
49
|
protected syncExpose(): any;
|
|
51
|
-
/**
|
|
52
|
-
* Expose all the methods that should support being interrupted
|
|
53
|
-
* @param {Array<string>} syncMethods The names of the methods to expose
|
|
54
|
-
*/
|
|
55
|
-
protected exposeMethods(syncMethods: Array<string>): void;
|
|
56
50
|
/**
|
|
57
51
|
* Initialize the backend by doing all setup-related work
|
|
58
52
|
* @param {function(BackendEvent):void} onEvent Callback for when events occur
|
|
@@ -61,10 +55,11 @@ export declare abstract class Backend {
|
|
|
61
55
|
launch(onEvent: (e: BackendEvent) => void): Promise<void>;
|
|
62
56
|
/**
|
|
63
57
|
* Executes the given code
|
|
58
|
+
* @param {Extras} extras Helper properties to run code
|
|
64
59
|
* @param {string} code The code to run
|
|
65
60
|
* @return {Promise<void>} Promise of execution
|
|
66
61
|
*/
|
|
67
|
-
abstract runCode(extras:
|
|
62
|
+
abstract runCode(extras: Extras, code: string): Promise<void>;
|
|
68
63
|
/**
|
|
69
64
|
* Converts the context to a cloneable object containing useful properties
|
|
70
65
|
* to generate autocompletion suggestions with
|
package/dist/BackendManager.d.ts
CHANGED
|
@@ -8,29 +8,37 @@ import { SyncClient } from "comsync";
|
|
|
8
8
|
* @param {BackendEvent} e The published event
|
|
9
9
|
*/
|
|
10
10
|
declare type BackendEventListener = (e: BackendEvent) => void;
|
|
11
|
-
declare class Cacheable<T> {
|
|
12
|
-
private cached;
|
|
13
|
-
private createFn;
|
|
14
|
-
constructor(createFn: () => T);
|
|
15
|
-
get(): T;
|
|
16
|
-
}
|
|
17
11
|
/**
|
|
18
12
|
* Abstract class to implement the singleton pattern
|
|
19
13
|
* Static methods group functionality
|
|
20
14
|
*/
|
|
21
15
|
export declare abstract class BackendManager {
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Map programming languages to Backend constructors
|
|
18
|
+
*/
|
|
19
|
+
private static createBackendMap;
|
|
20
|
+
/**
|
|
21
|
+
* Map to cache Backends per ProgrammingLanguage
|
|
22
|
+
*/
|
|
23
|
+
private static backendMap;
|
|
24
24
|
/**
|
|
25
25
|
* Map an event type to interested subscribers
|
|
26
26
|
* Uses an Array to maintain order of subscription
|
|
27
27
|
*/
|
|
28
28
|
static subscriberMap: Map<BackendEventType, Array<BackendEventListener>>;
|
|
29
|
-
private static buildSyncClientMap;
|
|
30
29
|
/**
|
|
31
|
-
*
|
|
30
|
+
* The channel used to communicate with the SyncClients
|
|
31
|
+
*/
|
|
32
|
+
static channel: Channel;
|
|
33
|
+
/**
|
|
34
|
+
* @param {ProgrammingLanguage} language The language to support
|
|
35
|
+
* @param {Function} backendCreator The constructor for a SyncClient
|
|
36
|
+
*/
|
|
37
|
+
static registerBackend(language: ProgrammingLanguage, backendCreator: () => SyncClient<Backend>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Start a backend for the given language and cache for reuse
|
|
32
40
|
* @param {ProgrammingLanguage} language The programming language supported by the backend
|
|
33
|
-
* @return {
|
|
41
|
+
* @return {SyncClient<Backend>} A SyncClient for the Backend
|
|
34
42
|
*/
|
|
35
43
|
static startBackend(language: ProgrammingLanguage): SyncClient<Backend>;
|
|
36
44
|
/**
|
package/dist/Library.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { InputManager, InputMode } from "./InputManager";
|
|
|
4
4
|
import { OutputManager } from "./OutputManager";
|
|
5
5
|
import { Papyros } from "./Papyros";
|
|
6
6
|
import { CodeRunner, RunState } from "./CodeRunner";
|
|
7
|
-
import { InputWorker } from "./workers/input/InputWorker";
|
|
8
7
|
export * from "./ProgrammingLanguage";
|
|
9
8
|
export type { BackendEvent };
|
|
10
|
-
export { Papyros, CodeEditor, RunState, CodeRunner, InputManager, InputMode, OutputManager,
|
|
9
|
+
export { Papyros, CodeEditor, RunState, CodeRunner, InputManager, InputMode, OutputManager, };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dodona/papyros",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.923-tar",
|
|
4
4
|
"private": false,
|
|
5
5
|
"homepage": ".",
|
|
6
6
|
"devDependencies": {
|
|
@@ -52,16 +52,17 @@
|
|
|
52
52
|
"@codemirror/search": "^0.19.3",
|
|
53
53
|
"@codemirror/state": "^0.19.6",
|
|
54
54
|
"comlink": "^4.3.1",
|
|
55
|
-
"comsync": "^0.0.
|
|
55
|
+
"comsync": "^0.0.7",
|
|
56
56
|
"escape-html": "^1.0.3",
|
|
57
57
|
"i18n-js": "^3.8.0",
|
|
58
|
-
"pyodide-worker-runner": "^0.0.
|
|
58
|
+
"pyodide-worker-runner": "^0.0.8",
|
|
59
59
|
"sync-message": "^0.0.9"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"start": "yarn setup && webpack serve --mode development",
|
|
63
63
|
"setup": "bash scripts/setup.sh",
|
|
64
|
-
"build": "bash scripts/build_package.sh",
|
|
64
|
+
"build:app": "bash scripts/build_package.sh development",
|
|
65
|
+
"build:library": "bash scripts/build_package.sh production",
|
|
65
66
|
"test": "echo No tests defined yet",
|
|
66
67
|
"lint": "eslint --ext '.js' --ext '.ts' src",
|
|
67
68
|
"validate:translations": "node scripts/ValidateTranslations.js"
|
package/dist/InputWorker.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Papyros=t():e.Papyros=t()}(self,(function(){return(()=>{var e={137:e=>{self,e.exports=(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{serviceWorkerFetchListener:()=>s,asyncSleep:()=>i,ServiceWorkerError:()=>u,writeMessageAtomics:()=>a,writeMessageServiceWorker:()=>c,writeMessage:()=>f,makeChannel:()=>l,makeAtomicsChannel:()=>d,makeServiceWorkerChannel:()=>y,readMessage:()=>m,syncSleep:()=>h,uuidv4:()=>v});var r=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{a(n.next(e))}catch(e){s(e)}}function u(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,u)}a((n=n.apply(e,t||[])).next())}))};const n="__SyncMessageServiceWorkerInput__",o="__sync-message-v2__";function s(){const e={},t={};return s=>{const{url:i}=s.request;return!!i.includes(n)&&(s.respondWith(function(){return r(this,void 0,void 0,(function*(){function r(e){const t={message:e,version:o};return new Response(JSON.stringify(t),{status:200})}if(i.endsWith("/read")){const{messageId:n,timeout:o}=yield s.request.json(),i=e[n];return i?(delete e[n],r(i)):yield new Promise((e=>{t[n]=e,setTimeout((function(){delete t[n],e(new Response("",{status:408}))}),o)}))}if(i.endsWith("/write")){const{message:n,messageId:o}=yield s.request.json(),i=t[o];return i?(i(r(n)),delete t[o]):e[o]=n,r({early:!i})}if(i.endsWith("/version"))return new Response(o,{status:200})}))}()),!0)}}function i(e){return new Promise((t=>setTimeout(t,e)))}class u extends Error{constructor(e,t){super(`Received status ${t} from ${e}. Ensure the service worker is registered and active.`),this.url=e,this.status=t,this.type="ServiceWorkerError",Object.setPrototypeOf(this,u.prototype)}}function a(e,t){const r=(new TextEncoder).encode(JSON.stringify(t)),{data:n,meta:o}=e;if(r.length>n.length)throw new Error("Message is too big, increase bufferSize when making channel.");n.set(r,0),Atomics.store(o,0,r.length),Atomics.store(o,1,1),Atomics.notify(o,1)}function c(e,t,n){return r(this,void 0,void 0,(function*(){yield navigator.serviceWorker.ready;const r=e.baseUrl+"/write",s=Date.now();for(;;){const a={message:t,messageId:n},c=yield fetch(r,{method:"POST",body:JSON.stringify(a)});if(200===c.status&&(yield c.json()).version===o)return;if(!(Date.now()-s<e.timeout))throw new u(r,c.status);yield i(100)}}))}function f(e,t,n){return r(this,void 0,void 0,(function*(){"atomics"===e.type?a(e,t):yield c(e,t,n)}))}function l(e={}){return"undefined"!=typeof SharedArrayBuffer?d(e.atomics):"serviceWorker"in navigator?y(e.serviceWorker):null}function d({bufferSize:e}={}){return{type:"atomics",data:new Uint8Array(new SharedArrayBuffer(e||131072)),meta:new Int32Array(new SharedArrayBuffer(2*Int32Array.BYTES_PER_ELEMENT))}}function y(e={}){return{type:"serviceWorker",baseUrl:(e.scope||"/")+n,timeout:e.timeout||5e3}}function p(e,t){return e>0?+e:t}function m(e,t,{checkInterrupt:r,checkTimeout:n,timeout:s}={}){const i=performance.now();n=p(n,r?100:5e3);const a=p(s,Number.POSITIVE_INFINITY);let c;if("atomics"===e.type){const{data:t,meta:r}=e;c=()=>{if("timed-out"===Atomics.wait(r,1,0,n))return null;{const e=Atomics.exchange(r,0,0),n=t.slice(0,e);Atomics.store(r,1,0);const o=(new TextDecoder).decode(n);return JSON.parse(o)}}}else c=()=>{const r=new XMLHttpRequest,s=e.baseUrl+"/read";r.open("POST",s,!1);const a={messageId:t,timeout:n};r.send(JSON.stringify(a));const{status:c}=r;if(408===c)return null;if(200===c){const e=JSON.parse(r.responseText);return e.version!==o?null:e.message}if(performance.now()-i<e.timeout)return null;throw new u(s,c)};for(;;){const e=a-(performance.now()-i);if(e<=0)return null;n=Math.min(n,e);const t=c();if(null!==t)return t;if(null==r?void 0:r())return null}}function h(e,t){if(e=p(e,0))if("undefined"!=typeof SharedArrayBuffer){const t=new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));t[0]=0,Atomics.wait(t,0,0,e)}else m(t,`sleep ${e} ${v()}`,{timeout:e})}let v;return v="randomUUID"in crypto?function(){return crypto.randomUUID()}:function(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>{const t=Number(e);return(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16)}))},t})()}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{"use strict";r.r(n),r.d(n,{InputWorker:()=>s});var e=r(137),t=function(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{a(n.next(e))}catch(e){s(e)}}function u(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,u)}a((n=n.apply(e,t||[])).next())}))},o=function(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function u(s){return function(u){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,u])}}},s=function(){function r(t){this.hostName=t,this.syncMessageListener=(0,e.serviceWorkerFetchListener)()}return r.prototype.handleInputRequest=function(e){return t(this,void 0,void 0,(function(){return o(this,(function(t){return this.syncMessageListener(e)?[2,!0]:e.request.url.includes(this.hostName)?(e.respondWith(fetch(e.request).then((function(e){var t=new Headers(e.headers);return t.set("Cross-Origin-Embedder-Policy","require-corp"),t.set("Cross-Origin-Opener-Policy","same-origin"),t.set("Cross-Origin-Resource-Policy","cross-origin"),new Response(e.body,{status:e.status||200,statusText:e.statusText,headers:t})}))),[2,!0]):[2,!1]}))}))},r}()})(),n})()}));
|