@dodona/papyros 4.1.1 → 4.1.2
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/Library.d.ts +11 -0
- package/dist/Library.js +11 -0
- package/dist/Library.js.map +1 -0
- package/dist/ProgrammingLanguage.d.ts +7 -0
- package/dist/ProgrammingLanguage.js +9 -0
- package/dist/ProgrammingLanguage.js.map +1 -0
- package/dist/backend/Backend.d.ts +92 -0
- package/dist/backend/Backend.js +79 -0
- package/dist/backend/Backend.js.map +1 -0
- package/dist/backend/workers/javascript/JavaScriptWorker.d.ts +39 -0
- package/dist/backend/workers/javascript/JavaScriptWorker.js +158 -0
- package/dist/backend/workers/javascript/JavaScriptWorker.js.map +1 -0
- package/dist/backend/workers/javascript/worker.d.ts +1 -0
- package/dist/backend/workers/javascript/worker.js +5 -0
- package/dist/backend/workers/javascript/worker.js.map +1 -0
- package/dist/backend/workers/python/PythonWorker.d.ts +32 -0
- package/dist/backend/workers/python/PythonWorker.js +117 -0
- package/dist/backend/workers/python/PythonWorker.js.map +1 -0
- package/dist/backend/workers/python/python_package.tar.gz.load_by_url +0 -0
- package/dist/backend/workers/python/worker.d.ts +1 -0
- package/dist/backend/workers/python/worker.js +5 -0
- package/dist/backend/workers/python/worker.js.map +1 -0
- package/dist/communication/BackendEvent.d.ts +33 -0
- package/dist/communication/BackendEvent.js +18 -0
- package/dist/communication/BackendEvent.js.map +1 -0
- package/dist/communication/BackendEventQueue.d.ts +59 -0
- package/dist/communication/BackendEventQueue.js +96 -0
- package/dist/communication/BackendEventQueue.js.map +1 -0
- package/dist/communication/BackendManager.d.ts +68 -0
- package/dist/communication/BackendManager.js +99 -0
- package/dist/communication/BackendManager.js.map +1 -0
- package/dist/communication/InputServiceWorker.d.ts +1 -0
- package/dist/communication/InputServiceWorker.js +37 -0
- package/dist/communication/InputServiceWorker.js.map +1 -0
- package/dist/communication/InputWorker.d.ts +22 -0
- package/dist/communication/InputWorker.js +63 -0
- package/dist/communication/InputWorker.js.map +1 -0
- package/dist/frontend/components/CodeRunner.d.ts +9 -0
- package/dist/frontend/components/CodeRunner.js +60 -0
- package/dist/frontend/components/CodeRunner.js.map +1 -0
- package/dist/frontend/components/Debugger.d.ts +7 -0
- package/dist/frontend/components/Debugger.js +75 -0
- package/dist/frontend/components/Debugger.js.map +1 -0
- package/dist/frontend/components/Input.d.ts +13 -0
- package/dist/frontend/components/Input.js +60 -0
- package/dist/frontend/components/Input.js.map +1 -0
- package/dist/frontend/components/Output.d.ts +14 -0
- package/dist/frontend/components/Output.js +157 -0
- package/dist/frontend/components/Output.js.map +1 -0
- package/dist/frontend/components/PapyrosElement.d.ts +8 -0
- package/dist/frontend/components/PapyrosElement.js +24 -0
- package/dist/frontend/components/PapyrosElement.js.map +1 -0
- package/dist/frontend/components/app/App.d.ts +24 -0
- package/dist/frontend/components/app/App.js +207 -0
- package/dist/frontend/components/app/App.js.map +1 -0
- package/dist/frontend/components/app/ExamplePicker.d.ts +7 -0
- package/dist/frontend/components/app/ExamplePicker.js +36 -0
- package/dist/frontend/components/app/ExamplePicker.js.map +1 -0
- package/dist/frontend/components/app/LanguagePicker.d.ts +7 -0
- package/dist/frontend/components/app/LanguagePicker.js +33 -0
- package/dist/frontend/components/app/LanguagePicker.js.map +1 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.d.ts +7 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.js +38 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.js.map +1 -0
- package/dist/frontend/components/app/examples/JavaScriptExamples.d.ts +5 -0
- package/dist/frontend/components/app/examples/JavaScriptExamples.js +16 -0
- package/dist/frontend/components/app/examples/JavaScriptExamples.js.map +1 -0
- package/dist/frontend/components/app/examples/PythonExamples.d.ts +14 -0
- package/dist/frontend/components/app/examples/PythonExamples.js +163 -0
- package/dist/frontend/components/app/examples/PythonExamples.js.map +1 -0
- package/dist/frontend/components/app/themes/ThemePicker.d.ts +11 -0
- package/dist/frontend/components/app/themes/ThemePicker.js +48 -0
- package/dist/frontend/components/app/themes/ThemePicker.js.map +1 -0
- package/dist/frontend/components/app/themes/ThemedButton.d.ts +9 -0
- package/dist/frontend/components/app/themes/ThemedButton.js +53 -0
- package/dist/frontend/components/app/themes/ThemedButton.js.map +1 -0
- package/dist/frontend/components/code_mirror/BatchInputEditor.d.ts +8 -0
- package/dist/frontend/components/code_mirror/BatchInputEditor.js +51 -0
- package/dist/frontend/components/code_mirror/BatchInputEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/CodeEditor.d.ts +24 -0
- package/dist/frontend/components/code_mirror/CodeEditor.js +204 -0
- package/dist/frontend/components/code_mirror/CodeEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.d.ts +22 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.js +111 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/Extensions.d.ts +15 -0
- package/dist/frontend/components/code_mirror/Extensions.js +164 -0
- package/dist/frontend/components/code_mirror/Extensions.js.map +1 -0
- package/dist/frontend/components/code_mirror/MaterialTheme.d.ts +5 -0
- package/dist/frontend/components/code_mirror/MaterialTheme.js +115 -0
- package/dist/frontend/components/code_mirror/MaterialTheme.js.map +1 -0
- package/dist/frontend/components/code_runner/ButtonLint.d.ts +9 -0
- package/dist/frontend/components/code_runner/ButtonLint.js +72 -0
- package/dist/frontend/components/code_runner/ButtonLint.js.map +1 -0
- package/dist/frontend/components/code_runner/Code.d.ts +7 -0
- package/dist/frontend/components/code_runner/Code.js +48 -0
- package/dist/frontend/components/code_runner/Code.js.map +1 -0
- package/dist/frontend/components/code_runner/RunState.d.ts +7 -0
- package/dist/frontend/components/code_runner/RunState.js +41 -0
- package/dist/frontend/components/code_runner/RunState.js.map +1 -0
- package/dist/frontend/components/input/BatchInput.d.ts +9 -0
- package/dist/frontend/components/input/BatchInput.js +53 -0
- package/dist/frontend/components/input/BatchInput.js.map +1 -0
- package/dist/frontend/components/input/InteractiveInput.d.ts +13 -0
- package/dist/frontend/components/input/InteractiveInput.js +71 -0
- package/dist/frontend/components/input/InteractiveInput.js.map +1 -0
- package/dist/frontend/state/Constants.d.ts +38 -0
- package/dist/frontend/state/Constants.js +111 -0
- package/dist/frontend/state/Constants.js.map +1 -0
- package/dist/frontend/state/Debugger.d.ts +23 -0
- package/dist/frontend/state/Debugger.js +86 -0
- package/dist/frontend/state/Debugger.js.map +1 -0
- package/dist/frontend/state/Examples.d.ts +11 -0
- package/dist/frontend/state/Examples.js +36 -0
- package/dist/frontend/state/Examples.js.map +1 -0
- package/dist/frontend/state/I18n.d.ts +16 -0
- package/dist/frontend/state/I18n.js +75 -0
- package/dist/frontend/state/I18n.js.map +1 -0
- package/dist/frontend/state/InputOutput.d.ts +64 -0
- package/dist/frontend/state/InputOutput.js +146 -0
- package/dist/frontend/state/InputOutput.js.map +1 -0
- package/dist/frontend/state/Papyros.d.ts +40 -0
- package/dist/frontend/state/Papyros.js +115 -0
- package/dist/frontend/state/Papyros.js.map +1 -0
- package/dist/frontend/state/Runner.d.ts +123 -0
- package/dist/frontend/state/Runner.js +372 -0
- package/dist/frontend/state/Runner.js.map +1 -0
- package/dist/frontend/state/Test.d.ts +10 -0
- package/dist/frontend/state/Test.js +43 -0
- package/dist/frontend/state/Test.js.map +1 -0
- package/dist/frontend/state/Translations.d.ts +178 -0
- package/dist/frontend/state/Translations.js +187 -0
- package/dist/frontend/state/Translations.js.map +1 -0
- package/dist/frontend/state/themes/blue-dark.d.ts +2 -0
- package/dist/frontend/state/themes/blue-dark.js +56 -0
- package/dist/frontend/state/themes/blue-dark.js.map +1 -0
- package/dist/frontend/state/themes/blue-light.d.ts +2 -0
- package/dist/frontend/state/themes/blue-light.js +56 -0
- package/dist/frontend/state/themes/blue-light.js.map +1 -0
- package/dist/frontend/state/themes/green-dark.d.ts +2 -0
- package/dist/frontend/state/themes/green-dark.js +56 -0
- package/dist/frontend/state/themes/green-dark.js.map +1 -0
- package/dist/frontend/state/themes/green-light.d.ts +2 -0
- package/dist/frontend/state/themes/green-light.js +56 -0
- package/dist/frontend/state/themes/green-light.js.map +1 -0
- package/dist/frontend/state/themes/red-dark.d.ts +2 -0
- package/dist/frontend/state/themes/red-dark.js +56 -0
- package/dist/frontend/state/themes/red-dark.js.map +1 -0
- package/dist/frontend/state/themes/red-light.d.ts +2 -0
- package/dist/frontend/state/themes/red-light.js +56 -0
- package/dist/frontend/state/themes/red-light.js.map +1 -0
- package/dist/util/Logging.d.ts +15 -0
- package/dist/util/Logging.js +30 -0
- package/dist/util/Logging.js.map +1 -0
- package/dist/util/Util.d.ts +8 -0
- package/dist/util/Util.js +48 -0
- package/dist/util/Util.js.map +1 -0
- package/package.json +1 -1
- package/dist/assets/__vite-browser-external-9wXp6ZBx.js +0 -1
- package/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
- package/dist/assets/index-C1AWjGcU.js +0 -2202
- package/dist/assets/manifest-BaVmi6rC.json +0 -15
- package/dist/assets/python_package.tar.gz-B8aMWvGt.load_by_url +0 -0
- package/dist/assets/worker-BhABRh01.js +0 -5
- package/dist/assets/worker-C2Ju1j5g.js +0 -110
- package/dist/index.html +0 -26
- package/dist/manifest.json +0 -15
- package/dist/robots.txt +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../src/frontend/state/Constants.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAa,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAEnE,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAQxC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAApC;;QACI;;;;;WAKG;QAEH,oBAAe,GAAW,IAAI,CAAC;QAC/B;;;;WAIG;QAEH,mBAAc,GAAW,KAAK,CAAC;QAG/B,UAAK,GAAG;YACJ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAA;;;;eAId;YACP,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAA;;eAEZ;YACP,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;;eAEhB;YACP,IAAI,EAAE,IAAI,CAAA;;eAEH;YACP,SAAS,EAAE,IAAI,CAAA;;;;eAIR;YACP,IAAI,EAAE,IAAI,CAAA;;;;;;SAMT;YACD,IAAI,EAAE,IAAI,CAAA;;;;;;SAMT;SACJ,CAAC;QAGF,oBAAe,GAAW,CAAC,CAAC;QAG5B,oBAAe,GAAc,QAAQ,CAAC;QAGtC,WAAM,GAAgC;YAClC,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;YACnE,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YAC/D,aAAa,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE;YACtE,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE;YAClE,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;YAChE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;SAC/D,CAAC;QAGM,qBAAgB,GAAW,YAAY,CAAC;IAUpD,CAAC;IAPG,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,WAAW,CAAC,KAAkB;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC;IACvC,CAAC;CACJ;AAzEG;IADC,aAAa;kDACiB;AAO/B;IADC,aAAa;iDACiB;AAG/B;IADC,aAAa;wCAmCZ;AAGF;IADC,aAAa;kDACc;AAG5B;IADC,aAAa;kDACwB;AAGtC;IADC,aAAa;yCAQZ;AAGM;IADP,aAAa;mDACkC;AAGhD;IADC,aAAa;4CAGb"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Frame } from "@dodona/trace-component/dist/trace_types";
|
|
2
|
+
import { State } from "@dodona/lit-state";
|
|
3
|
+
import { Papyros } from "./Papyros";
|
|
4
|
+
export type FrameState = {
|
|
5
|
+
line: number;
|
|
6
|
+
outputs: number;
|
|
7
|
+
inputs: number;
|
|
8
|
+
};
|
|
9
|
+
export declare class Debugger extends State {
|
|
10
|
+
private papyros;
|
|
11
|
+
private frameStates;
|
|
12
|
+
activeFrame: number | undefined;
|
|
13
|
+
trace: Frame[];
|
|
14
|
+
private _active;
|
|
15
|
+
set active(active: boolean);
|
|
16
|
+
get active(): boolean;
|
|
17
|
+
constructor(papyros: Papyros);
|
|
18
|
+
reset(): void;
|
|
19
|
+
get activeFrameState(): FrameState | undefined;
|
|
20
|
+
get debugLine(): number | undefined;
|
|
21
|
+
get debugOutputs(): number | undefined;
|
|
22
|
+
get debugUsedInputs(): number | undefined;
|
|
23
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BackendManager } from "../../communication/BackendManager";
|
|
8
|
+
import { BackendEventType } from "../../communication/BackendEvent";
|
|
9
|
+
import { State, stateProperty } from "@dodona/lit-state";
|
|
10
|
+
export class Debugger extends State {
|
|
11
|
+
set active(active) {
|
|
12
|
+
this._active = active;
|
|
13
|
+
this.reset();
|
|
14
|
+
}
|
|
15
|
+
get active() {
|
|
16
|
+
return this._active;
|
|
17
|
+
}
|
|
18
|
+
constructor(papyros) {
|
|
19
|
+
super();
|
|
20
|
+
this.frameStates = [];
|
|
21
|
+
this.activeFrame = undefined;
|
|
22
|
+
this.trace = [];
|
|
23
|
+
this._active = false;
|
|
24
|
+
this.papyros = papyros;
|
|
25
|
+
this.reset();
|
|
26
|
+
BackendManager.subscribe(BackendEventType.Start, () => {
|
|
27
|
+
this.reset();
|
|
28
|
+
});
|
|
29
|
+
BackendManager.subscribe(BackendEventType.Frame, (e) => {
|
|
30
|
+
var _a;
|
|
31
|
+
(_a = this.activeFrame) !== null && _a !== void 0 ? _a : (this.activeFrame = 0);
|
|
32
|
+
const frame = JSON.parse(e.data);
|
|
33
|
+
const frameState = {
|
|
34
|
+
line: frame.line,
|
|
35
|
+
outputs: this.papyros.io.output.length,
|
|
36
|
+
inputs: this.papyros.io.inputs.length,
|
|
37
|
+
};
|
|
38
|
+
this.frameStates = [...this.frameStates, frameState];
|
|
39
|
+
this.trace = [...this.trace, frame];
|
|
40
|
+
if (this.frameStates.length >= this.papyros.constants.maxDebugFrames) {
|
|
41
|
+
this.papyros.runner.stop();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
reset() {
|
|
46
|
+
this.frameStates = [];
|
|
47
|
+
this.currentOutputs = 0;
|
|
48
|
+
this.currentInputs = 0;
|
|
49
|
+
this.activeFrame = undefined;
|
|
50
|
+
this.trace = [];
|
|
51
|
+
}
|
|
52
|
+
get activeFrameState() {
|
|
53
|
+
if (this.activeFrame === undefined) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
return this.frameStates[this.activeFrame];
|
|
57
|
+
}
|
|
58
|
+
get debugLine() {
|
|
59
|
+
var _a;
|
|
60
|
+
return (_a = this.activeFrameState) === null || _a === void 0 ? void 0 : _a.line;
|
|
61
|
+
}
|
|
62
|
+
get debugOutputs() {
|
|
63
|
+
var _a;
|
|
64
|
+
return (_a = this.activeFrameState) === null || _a === void 0 ? void 0 : _a.outputs;
|
|
65
|
+
}
|
|
66
|
+
get debugUsedInputs() {
|
|
67
|
+
var _a;
|
|
68
|
+
return (_a = this.activeFrameState) === null || _a === void 0 ? void 0 : _a.inputs;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
__decorate([
|
|
72
|
+
stateProperty
|
|
73
|
+
], Debugger.prototype, "frameStates", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
stateProperty
|
|
76
|
+
], Debugger.prototype, "activeFrame", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
stateProperty
|
|
79
|
+
], Debugger.prototype, "trace", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
stateProperty
|
|
82
|
+
], Debugger.prototype, "_active", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
stateProperty
|
|
85
|
+
], Debugger.prototype, "active", null);
|
|
86
|
+
//# sourceMappingURL=Debugger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Debugger.js","sourceRoot":"","sources":["../../../src/frontend/state/Debugger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { State } from "@dodona/lit-state";
|
|
2
|
+
import { ProgrammingLanguage } from "../../ProgrammingLanguage";
|
|
3
|
+
import { Papyros } from "./Papyros";
|
|
4
|
+
export declare class Examples extends State {
|
|
5
|
+
papyros: Papyros;
|
|
6
|
+
private examples;
|
|
7
|
+
constructor(papyros: Papyros);
|
|
8
|
+
setExamples(language: ProgrammingLanguage, examples: Record<string, string>): void;
|
|
9
|
+
get names(): Array<string>;
|
|
10
|
+
getExampleCode(name: string): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { State, StateMap, stateProperty } from "@dodona/lit-state";
|
|
8
|
+
import { ProgrammingLanguage } from "../../ProgrammingLanguage";
|
|
9
|
+
import { JAVASCRIPT_EXAMPLES } from "../components/app/examples/JavaScriptExamples";
|
|
10
|
+
import { PYTHON_EXAMPLES } from "../components/app/examples/PythonExamples";
|
|
11
|
+
export class Examples extends State {
|
|
12
|
+
constructor(papyros) {
|
|
13
|
+
super();
|
|
14
|
+
this.examples = new StateMap();
|
|
15
|
+
this.papyros = papyros;
|
|
16
|
+
this.setExamples(ProgrammingLanguage.JavaScript, JAVASCRIPT_EXAMPLES);
|
|
17
|
+
this.setExamples(ProgrammingLanguage.Python, PYTHON_EXAMPLES);
|
|
18
|
+
}
|
|
19
|
+
setExamples(language, examples) {
|
|
20
|
+
this.examples.set(language, examples);
|
|
21
|
+
}
|
|
22
|
+
get names() {
|
|
23
|
+
var _a;
|
|
24
|
+
const language = this.papyros.runner.programmingLanguage;
|
|
25
|
+
return Object.keys((_a = this.examples.get(language)) !== null && _a !== void 0 ? _a : {});
|
|
26
|
+
}
|
|
27
|
+
getExampleCode(name) {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
const language = this.papyros.runner.programmingLanguage;
|
|
30
|
+
return (_b = (_a = this.examples.get(language)) === null || _a === void 0 ? void 0 : _a[name]) !== null && _b !== void 0 ? _b : "";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
__decorate([
|
|
34
|
+
stateProperty
|
|
35
|
+
], Examples.prototype, "examples", void 0);
|
|
36
|
+
//# sourceMappingURL=Examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Examples.js","sourceRoot":"","sources":["../../../src/frontend/state/Examples.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E,MAAM,OAAO,QAAS,SAAQ,KAAK;IAK/B,YAAY,OAAgB;QACxB,KAAK,EAAE,CAAC;QAHJ,aAAQ,GAAG,IAAI,QAAQ,EAA+C,CAAC;QAI3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAClE,CAAC;IAEM,WAAW,CAAC,QAA6B,EAAE,QAAgC;QAC9E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,IAAW,KAAK;;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAEM,cAAc,CAAC,IAAY;;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACzD,OAAO,MAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,0CAAG,IAAI,CAAC,mCAAI,EAAE,CAAC;IACrD,CAAC;CACJ;AAtBW;IADP,aAAa;0CACiE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { State } from "@dodona/lit-state";
|
|
2
|
+
export type Translations = {
|
|
3
|
+
[key: string]: string | Translations;
|
|
4
|
+
};
|
|
5
|
+
export declare class I18n extends State {
|
|
6
|
+
private readonly polyglot;
|
|
7
|
+
private readonly translations;
|
|
8
|
+
private _locale;
|
|
9
|
+
get availableLocales(): string[];
|
|
10
|
+
setTranslations(locale: string, translations: Translations): void;
|
|
11
|
+
set locale(locale: string);
|
|
12
|
+
get locale(): string;
|
|
13
|
+
t(phrase: string, options?: Record<string, any>): string;
|
|
14
|
+
getTranslations(key?: string): Translations | undefined;
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { State, StateMap, stateProperty } from "@dodona/lit-state";
|
|
8
|
+
import Polyglot from "node-polyglot";
|
|
9
|
+
import { DUTCH_TRANSLATION, ENGLISH_TRANSLATION } from "./Translations";
|
|
10
|
+
export class I18n extends State {
|
|
11
|
+
get availableLocales() {
|
|
12
|
+
return [...this.translations.keys()];
|
|
13
|
+
}
|
|
14
|
+
setTranslations(locale, translations) {
|
|
15
|
+
this.translations.set(locale, translations);
|
|
16
|
+
if (this.locale === locale) {
|
|
17
|
+
this.dispatchStateEvent("t");
|
|
18
|
+
this.polyglot.replace(this.translations.get(locale));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
set locale(locale) {
|
|
22
|
+
if (this.translations.has(locale)) {
|
|
23
|
+
this.dispatchStateEvent("t");
|
|
24
|
+
this._locale = locale;
|
|
25
|
+
this.polyglot.locale(locale);
|
|
26
|
+
this.polyglot.replace(this.translations.get(locale));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error(`Locale ${locale} not loaded`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
get locale() {
|
|
33
|
+
return this._locale;
|
|
34
|
+
}
|
|
35
|
+
t(phrase, options) {
|
|
36
|
+
this.recordRead("t");
|
|
37
|
+
return this.polyglot.t(phrase, options);
|
|
38
|
+
}
|
|
39
|
+
getTranslations(key) {
|
|
40
|
+
if (!this.translations.has(this.locale)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (!key) {
|
|
44
|
+
return this.translations.get(this.locale);
|
|
45
|
+
}
|
|
46
|
+
const keys = key.split(".");
|
|
47
|
+
let record = this.translations.get(this.locale);
|
|
48
|
+
for (const k of keys) {
|
|
49
|
+
if (typeof record === "string" || !(k in record)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
record = record[k];
|
|
53
|
+
}
|
|
54
|
+
if (typeof record === "string") {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
return record;
|
|
58
|
+
}
|
|
59
|
+
constructor() {
|
|
60
|
+
super();
|
|
61
|
+
this.polyglot = new Polyglot();
|
|
62
|
+
this.translations = new StateMap();
|
|
63
|
+
this._locale = "en";
|
|
64
|
+
this.polyglot.locale(this.locale);
|
|
65
|
+
this.setTranslations("en", ENGLISH_TRANSLATION);
|
|
66
|
+
this.setTranslations("nl", DUTCH_TRANSLATION);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
__decorate([
|
|
70
|
+
stateProperty
|
|
71
|
+
], I18n.prototype, "_locale", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
stateProperty
|
|
74
|
+
], I18n.prototype, "locale", null);
|
|
75
|
+
//# sourceMappingURL=I18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"I18n.js","sourceRoot":"","sources":["../../../src/frontend/state/I18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { State } from "@dodona/lit-state";
|
|
2
|
+
import { Papyros } from "./Papyros";
|
|
3
|
+
/**
|
|
4
|
+
* Shape of Error objects that are easy to interpret
|
|
5
|
+
*/
|
|
6
|
+
export interface FriendlyError {
|
|
7
|
+
/**
|
|
8
|
+
* The name of the Error
|
|
9
|
+
*/
|
|
10
|
+
name: string;
|
|
11
|
+
/**
|
|
12
|
+
* Traceback for where in the code the Error occurred
|
|
13
|
+
*/
|
|
14
|
+
traceback?: string;
|
|
15
|
+
/**
|
|
16
|
+
* General information about this type of Error
|
|
17
|
+
*/
|
|
18
|
+
info?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Information about what went wrong in this case
|
|
21
|
+
*/
|
|
22
|
+
what?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Information about why this is wrong and how to fix it
|
|
25
|
+
*/
|
|
26
|
+
why?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Where specifically in the source code the Error occurred
|
|
29
|
+
*/
|
|
30
|
+
where?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare enum OutputType {
|
|
33
|
+
stdout = "stdout",
|
|
34
|
+
stderr = "stderr",
|
|
35
|
+
img = "img"
|
|
36
|
+
}
|
|
37
|
+
export type OutputEntry = {
|
|
38
|
+
type: OutputType;
|
|
39
|
+
content: string | FriendlyError;
|
|
40
|
+
contentType?: string;
|
|
41
|
+
};
|
|
42
|
+
export declare enum InputMode {
|
|
43
|
+
batch = "batch",
|
|
44
|
+
interactive = "interactive"
|
|
45
|
+
}
|
|
46
|
+
export declare class InputOutput extends State {
|
|
47
|
+
private papyros;
|
|
48
|
+
inputs: string[];
|
|
49
|
+
output: OutputEntry[];
|
|
50
|
+
prompt: string;
|
|
51
|
+
awaitingInput: boolean;
|
|
52
|
+
inputMode: InputMode;
|
|
53
|
+
private _inputBuffer;
|
|
54
|
+
get inputBuffer(): string;
|
|
55
|
+
set inputBuffer(value: string);
|
|
56
|
+
private get nextBufferedLine();
|
|
57
|
+
constructor(papyros: Papyros);
|
|
58
|
+
logError(error: FriendlyError | string): void;
|
|
59
|
+
logImage(imageData: string, contentType?: string): void;
|
|
60
|
+
logOutput(output: string): void;
|
|
61
|
+
provideInput(input: string): void;
|
|
62
|
+
clearInputs(): void;
|
|
63
|
+
reset(): void;
|
|
64
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { State, stateProperty } from "@dodona/lit-state";
|
|
8
|
+
import { BackendManager } from "../../communication/BackendManager";
|
|
9
|
+
import { BackendEventType } from "../../communication/BackendEvent";
|
|
10
|
+
import { parseData } from "../../util/Util";
|
|
11
|
+
import { RunState } from "./Runner";
|
|
12
|
+
export var OutputType;
|
|
13
|
+
(function (OutputType) {
|
|
14
|
+
OutputType["stdout"] = "stdout";
|
|
15
|
+
OutputType["stderr"] = "stderr";
|
|
16
|
+
OutputType["img"] = "img";
|
|
17
|
+
})(OutputType || (OutputType = {}));
|
|
18
|
+
export var InputMode;
|
|
19
|
+
(function (InputMode) {
|
|
20
|
+
InputMode["batch"] = "batch";
|
|
21
|
+
InputMode["interactive"] = "interactive";
|
|
22
|
+
})(InputMode || (InputMode = {}));
|
|
23
|
+
export class InputOutput extends State {
|
|
24
|
+
get inputBuffer() {
|
|
25
|
+
return this._inputBuffer;
|
|
26
|
+
}
|
|
27
|
+
set inputBuffer(value) {
|
|
28
|
+
this._inputBuffer = value;
|
|
29
|
+
if (this.nextBufferedLine !== undefined && this.inputMode === InputMode.batch && this.awaitingInput) {
|
|
30
|
+
this.provideInput(this.nextBufferedLine);
|
|
31
|
+
}
|
|
32
|
+
if (!this.papyros.debugger.active && this.papyros.runner.state === RunState.Ready) {
|
|
33
|
+
this.clearInputs();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
get nextBufferedLine() {
|
|
37
|
+
const bufferedLines = this.inputBuffer.split("\n").slice(0, -1);
|
|
38
|
+
if (bufferedLines.length > this.inputs.length) {
|
|
39
|
+
return bufferedLines[this.inputs.length];
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
constructor(papyros) {
|
|
44
|
+
super();
|
|
45
|
+
this.inputs = [];
|
|
46
|
+
this.output = [];
|
|
47
|
+
this.prompt = "";
|
|
48
|
+
this.awaitingInput = false;
|
|
49
|
+
this.inputMode = InputMode.interactive;
|
|
50
|
+
this._inputBuffer = "";
|
|
51
|
+
this.papyros = papyros;
|
|
52
|
+
this.reset();
|
|
53
|
+
BackendManager.subscribe(BackendEventType.Start, () => this.reset());
|
|
54
|
+
BackendManager.subscribe(BackendEventType.Output, (e) => {
|
|
55
|
+
const data = parseData(e.data, e.contentType);
|
|
56
|
+
if (e.contentType && e.contentType.startsWith("img")) {
|
|
57
|
+
this.logImage(data, e.contentType);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.logOutput(data);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
BackendManager.subscribe(BackendEventType.Error, (e) => {
|
|
64
|
+
const data = parseData(e.data, e.contentType);
|
|
65
|
+
this.logError(data);
|
|
66
|
+
});
|
|
67
|
+
BackendManager.subscribe(BackendEventType.Input, (e) => {
|
|
68
|
+
if (this.nextBufferedLine !== undefined && this.inputMode === InputMode.batch) {
|
|
69
|
+
this.provideInput(this.nextBufferedLine);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.prompt = e.data || "";
|
|
73
|
+
this.awaitingInput = true;
|
|
74
|
+
});
|
|
75
|
+
BackendManager.subscribe(BackendEventType.End, () => {
|
|
76
|
+
this.awaitingInput = false;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
logError(error) {
|
|
80
|
+
var _a;
|
|
81
|
+
if (typeof error === "string") {
|
|
82
|
+
if (error.includes("service worker for reading input")) {
|
|
83
|
+
this.papyros.errorHandler(new Error("Service worker for reading input was not available", { cause: error }));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if ((_a = error.traceback) === null || _a === void 0 ? void 0 : _a.includes("service worker for reading input")) {
|
|
87
|
+
this.papyros.errorHandler(new Error("Service worker for reading input was not available", { cause: error }));
|
|
88
|
+
}
|
|
89
|
+
this.output = [...this.output, { type: OutputType.stderr, content: error }];
|
|
90
|
+
}
|
|
91
|
+
logImage(imageData, contentType = "img/png") {
|
|
92
|
+
this.output = [...this.output, { type: OutputType.img, content: imageData, contentType }];
|
|
93
|
+
}
|
|
94
|
+
logOutput(output) {
|
|
95
|
+
// lines have been merged to limit the number of events
|
|
96
|
+
// we split them again here, to simplify overflow detection
|
|
97
|
+
const lines = output.split("\n");
|
|
98
|
+
if (lines.length > 1) {
|
|
99
|
+
this.output = [
|
|
100
|
+
...this.output,
|
|
101
|
+
...lines.slice(0, -1).map((line) => ({ type: OutputType.stdout, content: line + "\n" })),
|
|
102
|
+
{ type: OutputType.stdout, content: lines[lines.length - 1] },
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.output = [...this.output, { type: OutputType.stdout, content: output }];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
provideInput(input) {
|
|
110
|
+
this.inputs = [...this.inputs, input];
|
|
111
|
+
this.papyros.runner.provideInput(input);
|
|
112
|
+
this.prompt = "";
|
|
113
|
+
this.awaitingInput = false;
|
|
114
|
+
}
|
|
115
|
+
clearInputs() {
|
|
116
|
+
this.inputs = [];
|
|
117
|
+
}
|
|
118
|
+
reset() {
|
|
119
|
+
this.inputs = [];
|
|
120
|
+
this.output = [];
|
|
121
|
+
this.prompt = "";
|
|
122
|
+
this.awaitingInput = false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
__decorate([
|
|
126
|
+
stateProperty
|
|
127
|
+
], InputOutput.prototype, "inputs", void 0);
|
|
128
|
+
__decorate([
|
|
129
|
+
stateProperty
|
|
130
|
+
], InputOutput.prototype, "output", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
stateProperty
|
|
133
|
+
], InputOutput.prototype, "prompt", void 0);
|
|
134
|
+
__decorate([
|
|
135
|
+
stateProperty
|
|
136
|
+
], InputOutput.prototype, "awaitingInput", void 0);
|
|
137
|
+
__decorate([
|
|
138
|
+
stateProperty
|
|
139
|
+
], InputOutput.prototype, "inputMode", void 0);
|
|
140
|
+
__decorate([
|
|
141
|
+
stateProperty
|
|
142
|
+
], InputOutput.prototype, "_inputBuffer", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
stateProperty
|
|
145
|
+
], InputOutput.prototype, "inputBuffer", null);
|
|
146
|
+
//# sourceMappingURL=InputOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputOutput.js","sourceRoot":"","sources":["../../../src/frontend/state/InputOutput.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { State } from "@dodona/lit-state";
|
|
2
|
+
import { Debugger } from "./Debugger";
|
|
3
|
+
import { Runner } from "./Runner";
|
|
4
|
+
import { InputOutput } from "./InputOutput";
|
|
5
|
+
import { Constants } from "./Constants";
|
|
6
|
+
import { Examples } from "./Examples";
|
|
7
|
+
import { I18n } from "./I18n";
|
|
8
|
+
import { Test } from "./Test";
|
|
9
|
+
export declare class Papyros extends State {
|
|
10
|
+
readonly debugger: Debugger;
|
|
11
|
+
readonly runner: Runner;
|
|
12
|
+
readonly io: InputOutput;
|
|
13
|
+
readonly constants: Constants;
|
|
14
|
+
readonly examples: Examples;
|
|
15
|
+
readonly i18n: I18n;
|
|
16
|
+
readonly test: Test;
|
|
17
|
+
errorHandler: (error: Error) => void;
|
|
18
|
+
serviceWorkerName: string;
|
|
19
|
+
/**
|
|
20
|
+
* Launch this instance of Papyros, making it ready to run code
|
|
21
|
+
* @return {Promise<Papyros>} Promise of launching, chainable
|
|
22
|
+
*/
|
|
23
|
+
launch(): Promise<Papyros>;
|
|
24
|
+
/**
|
|
25
|
+
* Set an error handler in papyros. Papyros will pass any errors to this handler that should be investigated but don't bubble up naturally.
|
|
26
|
+
*
|
|
27
|
+
* @param handler An error handler (e.g. something that passes the error on to sentry)
|
|
28
|
+
*/
|
|
29
|
+
setErrorHandler(handler: (error: Error) => void): void;
|
|
30
|
+
/**
|
|
31
|
+
* Configure how user input is handled within Papyros
|
|
32
|
+
* By default, we will try to use SharedArrayBuffers
|
|
33
|
+
* If this option is not available, the optional arguments in the channelOptions config are used
|
|
34
|
+
* They are needed to register a service worker to handle communication between threads
|
|
35
|
+
* @return {Promise<boolean>} Promise of configuring input
|
|
36
|
+
*/
|
|
37
|
+
private configureInput;
|
|
38
|
+
private waitForActiveRegistration;
|
|
39
|
+
}
|
|
40
|
+
export declare const papyros: Papyros;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { State, stateProperty } from "@dodona/lit-state";
|
|
17
|
+
import { Debugger } from "./Debugger";
|
|
18
|
+
import { Runner } from "./Runner";
|
|
19
|
+
import { InputOutput } from "./InputOutput";
|
|
20
|
+
import { Constants } from "./Constants";
|
|
21
|
+
import { Examples } from "./Examples";
|
|
22
|
+
import { BackendManager } from "../../communication/BackendManager";
|
|
23
|
+
import { makeChannel } from "sync-message";
|
|
24
|
+
import { I18n } from "./I18n";
|
|
25
|
+
import { Test } from "./Test";
|
|
26
|
+
export class Papyros extends State {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
this.debugger = new Debugger(this);
|
|
30
|
+
this.runner = new Runner(this);
|
|
31
|
+
this.io = new InputOutput(this);
|
|
32
|
+
this.constants = new Constants();
|
|
33
|
+
this.examples = new Examples(this);
|
|
34
|
+
this.i18n = new I18n();
|
|
35
|
+
this.test = new Test(this);
|
|
36
|
+
this.errorHandler = () => { };
|
|
37
|
+
this.serviceWorkerName = "InputServiceWorker.js";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Launch this instance of Papyros, making it ready to run code
|
|
41
|
+
* @return {Promise<Papyros>} Promise of launching, chainable
|
|
42
|
+
*/
|
|
43
|
+
launch() {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
if (!(yield this.configureInput())) {
|
|
46
|
+
alert(this.i18n.t("Papyros.service_worker_error"));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
try {
|
|
50
|
+
yield this.runner.launch();
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
this.errorHandler(new Error("Error launching papyros after registering service worker", { cause: e }));
|
|
54
|
+
if (confirm(this.i18n.t("Papyros.launch_error"))) {
|
|
55
|
+
return this.launch();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return this;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Set an error handler in papyros. Papyros will pass any errors to this handler that should be investigated but don't bubble up naturally.
|
|
64
|
+
*
|
|
65
|
+
* @param handler An error handler (e.g. something that passes the error on to sentry)
|
|
66
|
+
*/
|
|
67
|
+
setErrorHandler(handler) {
|
|
68
|
+
this.errorHandler = handler;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Configure how user input is handled within Papyros
|
|
72
|
+
* By default, we will try to use SharedArrayBuffers
|
|
73
|
+
* If this option is not available, the optional arguments in the channelOptions config are used
|
|
74
|
+
* They are needed to register a service worker to handle communication between threads
|
|
75
|
+
* @return {Promise<boolean>} Promise of configuring input
|
|
76
|
+
*/
|
|
77
|
+
configureInput() {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
if (typeof SharedArrayBuffer === "undefined") {
|
|
80
|
+
if (!this.serviceWorkerName || !("serviceWorker" in navigator)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
yield navigator.serviceWorker.register(this.serviceWorkerName, { scope: "/" });
|
|
85
|
+
BackendManager.channel = makeChannel({ serviceWorker: { scope: "/" } });
|
|
86
|
+
yield this.waitForActiveRegistration();
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
this.errorHandler(new Error("Error registering service worker", { cause: e }));
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
BackendManager.channel = makeChannel({ atomics: {} });
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
waitForActiveRegistration() {
|
|
100
|
+
return __awaiter(this, arguments, void 0, function* (timeout = 5000) {
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
const timeoutHandle = setTimeout(() => reject(new Error("Timed out waiting for activated service worker")), timeout);
|
|
103
|
+
navigator.serviceWorker.ready.then(() => {
|
|
104
|
+
clearTimeout(timeoutHandle);
|
|
105
|
+
resolve();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
__decorate([
|
|
112
|
+
stateProperty
|
|
113
|
+
], Papyros.prototype, "serviceWorkerName", void 0);
|
|
114
|
+
export const papyros = new Papyros();
|
|
115
|
+
//# sourceMappingURL=Papyros.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Papyros.js","sourceRoot":"","sources":["../../../src/frontend/state/Papyros.ts"],"names":[],"mappings":"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"}
|