@dodona/papyros 3.0.2 → 4.0.0-beta.1
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/README.md +133 -72
- package/dist/Components.d.ts +4 -0
- package/dist/Components.js +5 -0
- package/dist/Components.js.map +1 -0
- package/dist/Papyros.d.ts +18 -127
- package/dist/Papyros.js +39 -211
- package/dist/Papyros.js.map +1 -1
- package/dist/{Backend.d.ts → backend/Backend.d.ts} +3 -12
- package/dist/{Backend.js → backend/Backend.js} +4 -17
- package/dist/backend/Backend.js.map +1 -0
- package/dist/{workers → backend/workers}/javascript/JavaScriptWorker.js +1 -1
- package/dist/backend/workers/javascript/JavaScriptWorker.js.map +1 -0
- package/dist/backend/workers/javascript/worker.js.map +1 -0
- package/dist/{workers → backend/workers}/python/PythonWorker.d.ts +2 -2
- package/dist/{workers → backend/workers}/python/PythonWorker.js +2 -2
- 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.js.map +1 -0
- package/dist/communication/BackendEvent.js.map +1 -0
- package/dist/{BackendEventQueue.d.ts → communication/BackendEventQueue.d.ts} +1 -36
- package/dist/{BackendEventQueue.js → communication/BackendEventQueue.js} +2 -45
- package/dist/communication/BackendEventQueue.js.map +1 -0
- package/dist/{BackendManager.d.ts → communication/BackendManager.d.ts} +2 -2
- package/dist/{BackendManager.js → communication/BackendManager.js} +4 -4
- package/dist/communication/BackendManager.js.map +1 -0
- package/dist/communication/InputServiceWorker.js +37 -0
- package/dist/communication/InputServiceWorker.js.map +1 -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 +62 -0
- package/dist/frontend/components/Debugger.js.map +1 -0
- package/dist/frontend/components/Input.d.ts +17 -0
- package/dist/frontend/components/Input.js +73 -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 +154 -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 +204 -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 +35 -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 +35 -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 +39 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.js.map +1 -0
- package/dist/frontend/components/app/examples/JavaScriptExamples.js.map +1 -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 +47 -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 +43 -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 +54 -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 +206 -0
- package/dist/frontend/components/code_mirror/CodeEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.d.ts +20 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.js +99 -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 +169 -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 +114 -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 +76 -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 +46 -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 +19 -0
- package/dist/frontend/components/input/BatchInput.js +92 -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 +73 -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 +108 -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 +80 -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 +55 -0
- package/dist/frontend/state/InputOutput.js +93 -0
- package/dist/frontend/state/InputOutput.js.map +1 -0
- package/dist/frontend/state/Runner.d.ts +118 -0
- package/dist/frontend/state/Runner.js +330 -0
- package/dist/frontend/state/Runner.js.map +1 -0
- package/dist/frontend/state/Test.d.ts +11 -0
- package/dist/frontend/state/Test.js +59 -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 +188 -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 +55 -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 +55 -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 +55 -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 +55 -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 +55 -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 +55 -0
- package/dist/frontend/state/themes/red-light.js.map +1 -0
- package/dist/util/Util.d.ts +1 -4
- package/dist/util/Util.js +7 -8
- package/dist/util/Util.js.map +1 -1
- package/package.json +13 -21
- package/dist/App.d.ts +0 -1
- package/dist/App.js +0 -76
- package/dist/App.js.map +0 -1
- package/dist/Backend.js.map +0 -1
- package/dist/BackendEvent.js.map +0 -1
- package/dist/BackendEventQueue.js.map +0 -1
- package/dist/BackendManager.js.map +0 -1
- package/dist/CodeRunner.d.ts +0 -188
- package/dist/CodeRunner.js +0 -548
- package/dist/CodeRunner.js.map +0 -1
- package/dist/Constants.d.ts +0 -31
- package/dist/Constants.js +0 -36
- package/dist/Constants.js.map +0 -1
- package/dist/Debugger.d.ts +0 -18
- package/dist/Debugger.js +0 -86
- package/dist/Debugger.js.map +0 -1
- package/dist/InputManager.d.ts +0 -38
- package/dist/InputManager.js +0 -101
- package/dist/InputManager.js.map +0 -1
- package/dist/InputServiceWorker.js.map +0 -1
- package/dist/Library.d.ts +0 -12
- package/dist/Library.js +0 -9
- package/dist/Library.js.map +0 -1
- package/dist/OutputManager.d.ts +0 -90
- package/dist/OutputManager.js +0 -172
- package/dist/OutputManager.js.map +0 -1
- package/dist/Papyros.css +0 -657
- package/dist/Translations.d.ts +0 -180
- package/dist/Translations.js +0 -191
- package/dist/Translations.js.map +0 -1
- package/dist/editor/BatchInputEditor.d.ts +0 -41
- package/dist/editor/BatchInputEditor.js +0 -80
- package/dist/editor/BatchInputEditor.js.map +0 -1
- package/dist/editor/CodeEditor.d.ts +0 -81
- package/dist/editor/CodeEditor.js +0 -213
- package/dist/editor/CodeEditor.js.map +0 -1
- package/dist/editor/CodeMirrorEditor.d.ts +0 -133
- package/dist/editor/CodeMirrorEditor.js +0 -169
- package/dist/editor/CodeMirrorEditor.js.map +0 -1
- package/dist/editor/DarkTheme.d.ts +0 -1
- package/dist/editor/DarkTheme.js +0 -72
- package/dist/editor/DarkTheme.js.map +0 -1
- package/dist/editor/DebugExtension.d.ts +0 -11
- package/dist/editor/DebugExtension.js +0 -70
- package/dist/editor/DebugExtension.js.map +0 -1
- package/dist/editor/Gutters.d.ts +0 -109
- package/dist/editor/Gutters.js +0 -201
- package/dist/editor/Gutters.js.map +0 -1
- package/dist/editor/LineEffectExtension.d.ts +0 -13
- package/dist/editor/LineEffectExtension.js +0 -48
- package/dist/editor/LineEffectExtension.js.map +0 -1
- package/dist/editor/TestCodeExtension.d.ts +0 -21
- package/dist/editor/TestCodeExtension.js +0 -134
- package/dist/editor/TestCodeExtension.js.map +0 -1
- package/dist/examples/Examples.d.ts +0 -6
- package/dist/examples/Examples.js +0 -23
- package/dist/examples/Examples.js.map +0 -1
- package/dist/examples/JavaScriptExamples.js.map +0 -1
- package/dist/examples/PythonExamples.js.map +0 -1
- package/dist/input/BatchInputHandler.d.ts +0 -55
- package/dist/input/BatchInputHandler.js +0 -131
- package/dist/input/BatchInputHandler.js.map +0 -1
- package/dist/input/InteractiveInputHandler.d.ts +0 -27
- package/dist/input/InteractiveInputHandler.js +0 -89
- package/dist/input/InteractiveInputHandler.js.map +0 -1
- package/dist/input/UserInputHandler.d.ts +0 -68
- package/dist/input/UserInputHandler.js +0 -39
- package/dist/input/UserInputHandler.js.map +0 -1
- package/dist/util/HTMLShapes.d.ts +0 -15
- package/dist/util/HTMLShapes.js +0 -25
- package/dist/util/HTMLShapes.js.map +0 -1
- package/dist/util/Rendering.d.ts +0 -120
- package/dist/util/Rendering.js +0 -142
- package/dist/util/Rendering.js.map +0 -1
- package/dist/workers/input/InputWorker.js.map +0 -1
- package/dist/workers/javascript/JavaScriptWorker.js.map +0 -1
- package/dist/workers/javascript/worker.js.map +0 -1
- package/dist/workers/python/PythonWorker.js.map +0 -1
- package/dist/workers/python/python_package.tar.gz.load_by_url +0 -0
- package/dist/workers/python/worker.js.map +0 -1
- /package/dist/{workers → backend/workers}/javascript/JavaScriptWorker.d.ts +0 -0
- /package/dist/{workers → backend/workers}/javascript/worker.d.ts +0 -0
- /package/dist/{workers → backend/workers}/javascript/worker.js +0 -0
- /package/dist/{workers → backend/workers}/python/worker.d.ts +0 -0
- /package/dist/{workers → backend/workers}/python/worker.js +0 -0
- /package/dist/{BackendEvent.d.ts → communication/BackendEvent.d.ts} +0 -0
- /package/dist/{BackendEvent.js → communication/BackendEvent.js} +0 -0
- /package/dist/{InputServiceWorker.d.ts → communication/InputServiceWorker.d.ts} +0 -0
- /package/dist/{workers/input → communication}/InputWorker.d.ts +0 -0
- /package/dist/{workers/input → communication}/InputWorker.js +0 -0
- /package/dist/{examples → frontend/components/app/examples}/JavaScriptExamples.d.ts +0 -0
- /package/dist/{examples → frontend/components/app/examples}/JavaScriptExamples.js +0 -0
- /package/dist/{examples → frontend/components/app/examples}/PythonExamples.d.ts +0 -0
- /package/dist/{examples → frontend/components/app/examples}/PythonExamples.js +0 -0
package/dist/Papyros.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
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
|
+
};
|
|
1
7
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
8
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
9
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -7,37 +13,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
13
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
14
|
});
|
|
9
15
|
};
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
16
|
+
import { State, stateProperty } from "@dodona/lit-state";
|
|
17
|
+
import { Debugger } from "./frontend/state/Debugger";
|
|
18
|
+
import { Runner } from "./frontend/state/Runner";
|
|
19
|
+
import { InputOutput } from "./frontend/state/InputOutput";
|
|
20
|
+
import { Constants } from "./frontend/state/Constants";
|
|
21
|
+
import { Examples } from "./frontend/state/Examples";
|
|
22
|
+
import { BackendManager } from "./communication/BackendManager";
|
|
15
23
|
import { makeChannel } from "sync-message";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
constructor(config) {
|
|
31
|
-
super();
|
|
32
|
-
this.config = config;
|
|
33
|
-
i18n.locale = config.locale;
|
|
34
|
-
this.codeRunner = new CodeRunner(config.programmingLanguage, config.inputMode);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* @return {RunState} The current state of the user's code
|
|
38
|
-
*/
|
|
39
|
-
getState() {
|
|
40
|
-
return this.codeRunner.getState();
|
|
24
|
+
import { cleanCurrentUrl } from "./util/Util";
|
|
25
|
+
import { I18n } from "./frontend/state/I18n";
|
|
26
|
+
import { Test } from "./frontend/state/Test";
|
|
27
|
+
export class Papyros extends State {
|
|
28
|
+
constructor() {
|
|
29
|
+
super(...arguments);
|
|
30
|
+
this.debugger = new Debugger(this);
|
|
31
|
+
this.runner = new Runner(this);
|
|
32
|
+
this.io = new InputOutput(this);
|
|
33
|
+
this.constants = new Constants();
|
|
34
|
+
this.examples = new Examples(this);
|
|
35
|
+
this.i18n = new I18n();
|
|
36
|
+
this.test = new Test(this);
|
|
37
|
+
this.serviceWorkerName = "InputServiceWorker.js";
|
|
41
38
|
}
|
|
42
39
|
/**
|
|
43
40
|
* Launch this instance of Papyros, making it ready to run code
|
|
@@ -46,14 +43,14 @@ export class Papyros extends Renderable {
|
|
|
46
43
|
launch() {
|
|
47
44
|
return __awaiter(this, void 0, void 0, function* () {
|
|
48
45
|
if (!(yield this.configureInput())) {
|
|
49
|
-
alert(t("Papyros.service_worker_error"));
|
|
46
|
+
alert(this.i18n.t("Papyros.service_worker_error"));
|
|
50
47
|
}
|
|
51
48
|
else {
|
|
52
49
|
try {
|
|
53
|
-
yield this.
|
|
50
|
+
yield this.runner.launch();
|
|
54
51
|
}
|
|
55
52
|
catch (_a) {
|
|
56
|
-
if (confirm(t("Papyros.launch_error"))) {
|
|
53
|
+
if (confirm(this.i18n.t("Papyros.launch_error"))) {
|
|
57
54
|
return this.launch();
|
|
58
55
|
}
|
|
59
56
|
}
|
|
@@ -61,47 +58,6 @@ export class Papyros extends Renderable {
|
|
|
61
58
|
return this;
|
|
62
59
|
});
|
|
63
60
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Set the used programming language to the given one to allow editing and running code
|
|
66
|
-
* @param {ProgrammingLanguage} programmingLanguage The language to use
|
|
67
|
-
*/
|
|
68
|
-
setProgrammingLanguage(programmingLanguage) {
|
|
69
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
this.config.programmingLanguage = programmingLanguage;
|
|
71
|
-
yield this.codeRunner.setProgrammingLanguage(programmingLanguage);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* @param {string} locale The locale to use
|
|
76
|
-
*/
|
|
77
|
-
setLocale(locale) {
|
|
78
|
-
if (locale !== this.config.locale) {
|
|
79
|
-
this.config.locale = locale;
|
|
80
|
-
i18n.locale = locale;
|
|
81
|
-
this.render();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* @param {boolean} darkMode Whether to use dark mode
|
|
86
|
-
*/
|
|
87
|
-
setDarkMode(darkMode) {
|
|
88
|
-
if (darkMode !== this.renderOptions.darkMode) {
|
|
89
|
-
this.renderOptions.darkMode = darkMode;
|
|
90
|
-
this.render();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* @param {string} code The code to use in the editor
|
|
95
|
-
*/
|
|
96
|
-
setCode(code) {
|
|
97
|
-
this.codeRunner.editor.setText(code);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* @return {string} The currently written code
|
|
101
|
-
*/
|
|
102
|
-
getCode() {
|
|
103
|
-
return this.codeRunner.editor.getText();
|
|
104
|
-
}
|
|
105
61
|
/**
|
|
106
62
|
* Configure how user input is handled within Papyros
|
|
107
63
|
* By default, we will try to use SharedArrayBuffers
|
|
@@ -111,18 +67,15 @@ export class Papyros extends Renderable {
|
|
|
111
67
|
*/
|
|
112
68
|
configureInput() {
|
|
113
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
-
var _a;
|
|
115
70
|
if (typeof SharedArrayBuffer === "undefined") {
|
|
116
|
-
if (!
|
|
71
|
+
if (!this.serviceWorkerName || !("serviceWorker" in navigator)) {
|
|
117
72
|
return false;
|
|
118
73
|
}
|
|
119
|
-
const serviceWorkerRoot =
|
|
120
|
-
const
|
|
121
|
-
this.config.channelOptions.scope = serviceWorkerRoot;
|
|
122
|
-
const serviceWorkerUrl = serviceWorkerRoot + serviceWorkerName;
|
|
74
|
+
const serviceWorkerRoot = cleanCurrentUrl(true);
|
|
75
|
+
const serviceWorkerUrl = serviceWorkerRoot + this.serviceWorkerName;
|
|
123
76
|
try {
|
|
124
77
|
yield navigator.serviceWorker.register(serviceWorkerUrl, { scope: "/" });
|
|
125
|
-
BackendManager.channel = makeChannel({ serviceWorker:
|
|
78
|
+
BackendManager.channel = makeChannel({ serviceWorker: { scope: serviceWorkerRoot } });
|
|
126
79
|
}
|
|
127
80
|
catch (e) {
|
|
128
81
|
console.error("Error registering service worker:", e);
|
|
@@ -130,139 +83,14 @@ export class Papyros extends Renderable {
|
|
|
130
83
|
}
|
|
131
84
|
}
|
|
132
85
|
else {
|
|
133
|
-
BackendManager.channel = makeChannel({
|
|
134
|
-
atomics: Object.assign({}, this.config.channelOptions)
|
|
135
|
-
});
|
|
86
|
+
BackendManager.channel = makeChannel({ atomics: {} });
|
|
136
87
|
}
|
|
137
88
|
return true;
|
|
138
89
|
});
|
|
139
90
|
}
|
|
140
|
-
_render(renderOptions) {
|
|
141
|
-
// Set default values for each option
|
|
142
|
-
for (const [option, defaultParentId] of [
|
|
143
|
-
["inputOptions", INPUT_AREA_WRAPPER_ID], ["statusPanelOptions", PANEL_WRAPPER_ID],
|
|
144
|
-
["codeEditorOptions", EDITOR_WRAPPER_ID], ["outputOptions", OUTPUT_AREA_WRAPPER_ID],
|
|
145
|
-
["standAloneOptions", MAIN_APP_ID]
|
|
146
|
-
]) {
|
|
147
|
-
const elementOptions = renderOptions[option] || {};
|
|
148
|
-
elementOptions.darkMode = renderOptions.darkMode;
|
|
149
|
-
appendClasses(elementOptions, "tailwind");
|
|
150
|
-
renderOptions[option] = Object.assign({ parentElementId: defaultParentId }, elementOptions);
|
|
151
|
-
}
|
|
152
|
-
if (this.config.standAlone) {
|
|
153
|
-
const { locale, programmingLanguage } = this.config;
|
|
154
|
-
const programmingLanguageSelect = renderSelect(PROGRAMMING_LANGUAGE_SELECT_ID, new Array(...LANGUAGE_MAP.values()), l => t(`Papyros.programming_languages.${l}`), programmingLanguage, t("Papyros.programming_language"));
|
|
155
|
-
const exampleSelect = renderSelect(EXAMPLE_SELECT_ID, getExampleNames(programmingLanguage), name => name, this.config.example, t("Papyros.examples"));
|
|
156
|
-
const locales = [locale, ...getLocales().filter(l => l != locale)];
|
|
157
|
-
const toggleIconClasses = renderOptions.darkMode ? "mdi-toggle-switch _tw-text-[#FF8F00]" : "mdi-toggle-switch-off _tw-text-white";
|
|
158
|
-
const navOptions = `
|
|
159
|
-
<div class="_tw-flex _tw-flex-row-reverse dark:_tw-text-white _tw-items-center">
|
|
160
|
-
<!-- row-reverse to start at the right, so put elements in order of display -->
|
|
161
|
-
<i id=${DARK_MODE_TOGGLE_ID} class="mdi ${toggleIconClasses} hover:_tw-cursor-pointer _tw-text-4xl"></i>
|
|
162
|
-
<p class="_tw-text-white">${t("Papyros.dark_mode")}</p>
|
|
163
|
-
${renderSelect(LOCALE_SELECT_ID, locales, l => t(`Papyros.locales.${l}`), locale)}
|
|
164
|
-
<i class="mdi mdi-web _tw-text-4xl _tw-text-white"></i>
|
|
165
|
-
</div>
|
|
166
|
-
`;
|
|
167
|
-
const navBar = `
|
|
168
|
-
<div class="_tw-bg-blue-500 _tw-text-white _tw-text-lg _tw-p-4 _tw-grid _tw-grid-cols-8
|
|
169
|
-
_tw-items-center _tw-max-h-1/5 dark:_tw-bg-dark-mode-blue">
|
|
170
|
-
<div class="_tw-col-span-6 _tw-text-4xl _tw-font-medium">
|
|
171
|
-
${t("Papyros.Papyros")}
|
|
172
|
-
</div>
|
|
173
|
-
<div class="_tw-col-span-2 _tw-text-black">
|
|
174
|
-
${navOptions}
|
|
175
|
-
</div>
|
|
176
|
-
</div>
|
|
177
|
-
`;
|
|
178
|
-
const header = `
|
|
179
|
-
<!-- Header -->
|
|
180
|
-
<div class="_tw-flex _tw-flex-row _tw-items-center">
|
|
181
|
-
${programmingLanguageSelect}
|
|
182
|
-
${exampleSelect}
|
|
183
|
-
</div>`;
|
|
184
|
-
renderWithOptions(renderOptions.standAloneOptions, `
|
|
185
|
-
<div id="${MAIN_APP_ID}" class="_tw-min-h-screen _tw-h-full dark:_tw-text-white dark:_tw-bg-dark-mode-bg" style="margin-bottom: -40px; padding-bottom: 20px">
|
|
186
|
-
${navBar}
|
|
187
|
-
<div class="_tw-m-10">
|
|
188
|
-
${header}
|
|
189
|
-
<!--Body of the application-->
|
|
190
|
-
<div class="_tw-grid _tw-grid-cols-2 _tw-gap-4 _tw-box-border">
|
|
191
|
-
<!-- Code section-->
|
|
192
|
-
<div>
|
|
193
|
-
${renderLabel(t("Papyros.code"), renderOptions.codeEditorOptions.parentElementId)}
|
|
194
|
-
<div id="${renderOptions.codeEditorOptions.parentElementId}"></div>
|
|
195
|
-
<div id="${renderOptions.statusPanelOptions.parentElementId}"></div>
|
|
196
|
-
</div>
|
|
197
|
-
<!-- User input and output section-->
|
|
198
|
-
<div>
|
|
199
|
-
${renderLabel(t("Papyros.output"), renderOptions.outputOptions.parentElementId)}
|
|
200
|
-
<div id="${renderOptions.outputOptions.parentElementId}"></div>
|
|
201
|
-
${renderLabel(t("Papyros.input"), renderOptions.inputOptions.parentElementId)}
|
|
202
|
-
<div id="${renderOptions.inputOptions.parentElementId}"></div>
|
|
203
|
-
</div>
|
|
204
|
-
</div>
|
|
205
|
-
<!-- Debugging section-->
|
|
206
|
-
<div id="${renderOptions.traceOptions.parentElementId}" ></div>
|
|
207
|
-
</div>
|
|
208
|
-
</div>
|
|
209
|
-
`);
|
|
210
|
-
addListener(PROGRAMMING_LANGUAGE_SELECT_ID, pl => {
|
|
211
|
-
this.setProgrammingLanguage(pl);
|
|
212
|
-
getElement(EXAMPLE_SELECT_ID).innerHTML =
|
|
213
|
-
renderSelectOptions(getExampleNames(pl), name => name);
|
|
214
|
-
removeSelection(EXAMPLE_SELECT_ID);
|
|
215
|
-
this.config.example = undefined;
|
|
216
|
-
// Modify search query params without reloading page
|
|
217
|
-
history.pushState(null, "", `?locale=${i18n.locale}&language=${pl}`);
|
|
218
|
-
}, "change", "value");
|
|
219
|
-
addListener(LOCALE_SELECT_ID, locale => {
|
|
220
|
-
// Modify search query params without reloading page
|
|
221
|
-
history.pushState(null, "", `?locale=${locale}&language=${this.codeRunner.getProgrammingLanguage()}`);
|
|
222
|
-
this.setLocale(locale);
|
|
223
|
-
}, "change", "value");
|
|
224
|
-
addListener(EXAMPLE_SELECT_ID, (name) => __awaiter(this, void 0, void 0, function* () {
|
|
225
|
-
this.config.example = name;
|
|
226
|
-
const code = getCodeForExample(this.codeRunner.getProgrammingLanguage(), name);
|
|
227
|
-
yield this.codeRunner.reset();
|
|
228
|
-
this.setCode(code);
|
|
229
|
-
}), "change", "value");
|
|
230
|
-
// If example is null, it removes the selection
|
|
231
|
-
getElement(EXAMPLE_SELECT_ID).value = this.config.example;
|
|
232
|
-
addListener(DARK_MODE_TOGGLE_ID, () => {
|
|
233
|
-
this.setDarkMode(!renderOptions.darkMode);
|
|
234
|
-
}, "click");
|
|
235
|
-
}
|
|
236
|
-
this.codeRunner.render({
|
|
237
|
-
statusPanelOptions: renderOptions.statusPanelOptions,
|
|
238
|
-
inputOptions: renderOptions.inputOptions,
|
|
239
|
-
codeEditorOptions: renderOptions.codeEditorOptions,
|
|
240
|
-
outputOptions: renderOptions.outputOptions,
|
|
241
|
-
traceOptions: renderOptions.traceOptions,
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Add a button to the status panel within Papyros
|
|
246
|
-
* @param {ButtonOptions} options Options to render the button with
|
|
247
|
-
* @param {function} onClick Listener for click events on the button
|
|
248
|
-
*/
|
|
249
|
-
addButton(options, onClick) {
|
|
250
|
-
this.codeRunner.addButton(options, onClick);
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* @param {ProgrammingLanguage} language The language to check
|
|
254
|
-
* @return {boolean} Whether Papyros supports this language by default
|
|
255
|
-
*/
|
|
256
|
-
static supportsProgrammingLanguage(language) {
|
|
257
|
-
return Papyros.toProgrammingLanguage(language) !== undefined;
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Convert a string to a ProgrammingLanguage
|
|
261
|
-
* @param {string} language The language to convert
|
|
262
|
-
* @return {ProgrammingLanguage | undefined} The ProgrammingLanguage, or undefined if not supported
|
|
263
|
-
*/
|
|
264
|
-
static toProgrammingLanguage(language) {
|
|
265
|
-
return LANGUAGE_MAP.get(language.toLowerCase());
|
|
266
|
-
}
|
|
267
91
|
}
|
|
92
|
+
__decorate([
|
|
93
|
+
stateProperty
|
|
94
|
+
], Papyros.prototype, "serviceWorkerName", void 0);
|
|
95
|
+
export const papyros = new Papyros();
|
|
268
96
|
//# sourceMappingURL=Papyros.js.map
|
package/dist/Papyros.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Papyros.js","sourceRoot":"","sources":["../src/Papyros.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Papyros.js","sourceRoot":"","sources":["../src/Papyros.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BackendEvent } from "
|
|
1
|
+
import { BackendEvent } from "../communication/BackendEvent";
|
|
2
2
|
import { SyncExtras } from "comsync";
|
|
3
|
-
import { BackendEventQueue } from "
|
|
3
|
+
import { BackendEventQueue } from "../communication/BackendEventQueue";
|
|
4
4
|
export interface WorkerDiagnostic {
|
|
5
5
|
/**
|
|
6
6
|
* 1-based index of the starting line containing the issue
|
|
@@ -60,10 +60,9 @@ export declare abstract class Backend<Extras extends SyncExtras = SyncExtras> {
|
|
|
60
60
|
/**
|
|
61
61
|
* Initialize the backend by doing all setup-related work
|
|
62
62
|
* @param {function(BackendEvent):void} onEvent Callback for when events occur
|
|
63
|
-
* @param {function():void} onOverflow Callback for when overflow occurs
|
|
64
63
|
* @return {Promise<void>} Promise of launching
|
|
65
64
|
*/
|
|
66
|
-
launch(onEvent: (e: BackendEvent) => void
|
|
65
|
+
launch(onEvent: (e: BackendEvent) => void): Promise<void>;
|
|
67
66
|
/**
|
|
68
67
|
* Determine whether the modes supported by this Backend are active
|
|
69
68
|
* @param {string} code The current code in the editor
|
|
@@ -83,14 +82,6 @@ export declare abstract class Backend<Extras extends SyncExtras = SyncExtras> {
|
|
|
83
82
|
* @param {string} code The code to lint
|
|
84
83
|
*/
|
|
85
84
|
abstract lintCode(code: string): Promise<Array<WorkerDiagnostic>>;
|
|
86
|
-
/**
|
|
87
|
-
* @return {boolean} Whether too many output events were generated
|
|
88
|
-
*/
|
|
89
|
-
hasOverflow(): boolean;
|
|
90
|
-
/**
|
|
91
|
-
* @return {Array<BackendEvent>} The events that happened after overflow
|
|
92
|
-
*/
|
|
93
|
-
getOverflow(): Array<BackendEvent>;
|
|
94
85
|
/**
|
|
95
86
|
* Provide files to be used by the backend
|
|
96
87
|
* @param {Record<string, string>} inlineFiles Map of file names to their contents
|
|
@@ -7,9 +7,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { BackendEventType } from "
|
|
10
|
+
import { BackendEventType } from "../communication/BackendEvent";
|
|
11
11
|
import { syncExpose } from "comsync";
|
|
12
|
-
import { BackendEventQueue } from "
|
|
12
|
+
import { BackendEventQueue } from "../communication/BackendEventQueue";
|
|
13
13
|
export var RunMode;
|
|
14
14
|
(function (RunMode) {
|
|
15
15
|
RunMode["Run"] = "run";
|
|
@@ -39,10 +39,9 @@ export class Backend {
|
|
|
39
39
|
/**
|
|
40
40
|
* Initialize the backend by doing all setup-related work
|
|
41
41
|
* @param {function(BackendEvent):void} onEvent Callback for when events occur
|
|
42
|
-
* @param {function():void} onOverflow Callback for when overflow occurs
|
|
43
42
|
* @return {Promise<void>} Promise of launching
|
|
44
43
|
*/
|
|
45
|
-
launch(onEvent
|
|
44
|
+
launch(onEvent) {
|
|
46
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
46
|
this.onEvent = (e) => {
|
|
48
47
|
onEvent(e);
|
|
@@ -53,7 +52,7 @@ export class Backend {
|
|
|
53
52
|
return this.extras.readMessage();
|
|
54
53
|
}
|
|
55
54
|
};
|
|
56
|
-
this.queue = new BackendEventQueue(this.onEvent.bind(this)
|
|
55
|
+
this.queue = new BackendEventQueue(this.onEvent.bind(this));
|
|
57
56
|
return Promise.resolve();
|
|
58
57
|
});
|
|
59
58
|
}
|
|
@@ -66,18 +65,6 @@ export class Backend {
|
|
|
66
65
|
runModes(code) {
|
|
67
66
|
return [];
|
|
68
67
|
}
|
|
69
|
-
/**
|
|
70
|
-
* @return {boolean} Whether too many output events were generated
|
|
71
|
-
*/
|
|
72
|
-
hasOverflow() {
|
|
73
|
-
return this.queue.hasOverflow();
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* @return {Array<BackendEvent>} The events that happened after overflow
|
|
77
|
-
*/
|
|
78
|
-
getOverflow() {
|
|
79
|
-
return this.queue.getOverflow();
|
|
80
|
-
}
|
|
81
68
|
/**
|
|
82
69
|
* Provide files to be used by the backend
|
|
83
70
|
* @param {Record<string, string>} inlineFiles Map of file names to their contents
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backend.js","sourceRoot":"","sources":["../../src/backend/Backend.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AA8BvE,MAAM,CAAN,IAAY,OAIX;AAJD,WAAY,OAAO;IACf,sBAAW,CAAA;IACX,0BAAe,CAAA;IACf,8BAAmB,CAAA;AACvB,CAAC,EAJW,OAAO,KAAP,OAAO,QAIlB;AAED,MAAM,OAAgB,OAAO;IAczB;;;;OAIG;IACH;QACI,IAAI,CAAC,MAAM,GAAG,EAAY,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,+BAA+B;QACnC,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,EAAuB,CAAC;IACzC,CAAC;IAED;;OAEG;IACO,UAAU;QAChB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACU,MAAM,CACf,OAAkC;;YAElC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAe,EAAE,EAAE;gBAC/B,OAAO,CAAC,CAAC,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;KAAA;IAED;;;;OAIG;IACH,6DAA6D;IACtD,QAAQ,CAAC,IAAY;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IAiBD;;;;;OAKG;IACH,6DAA6D;IACtD,YAAY,CAAC,WAAmC,EAAE,SAAiC;QACtF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ"}
|
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { Backend } from "../../Backend";
|
|
11
|
-
import { BackendEventType } from "
|
|
11
|
+
import { BackendEventType } from "../../../communication/BackendEvent";
|
|
12
12
|
/**
|
|
13
13
|
* Implementation of a JavaScript backend for Papyros
|
|
14
14
|
* by using eval and overriding some builtins
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JavaScriptWorker.js","sourceRoot":"","sources":["../../../../src/backend/workers/javascript/JavaScriptWorker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/backend/workers/javascript/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Backend, RunMode, WorkerDiagnostic } from "../../Backend";
|
|
2
|
-
import { BackendEvent } from "
|
|
2
|
+
import { BackendEvent } from "../../../communication/BackendEvent";
|
|
3
3
|
import { PyodideExtras } from "pyodide-worker-runner";
|
|
4
4
|
/**
|
|
5
5
|
* Implementation of a Python backend for Papyros
|
|
@@ -19,7 +19,7 @@ export declare class PythonWorker extends Backend<PyodideExtras> {
|
|
|
19
19
|
*/
|
|
20
20
|
protected syncExpose(): any;
|
|
21
21
|
private static getPyodide;
|
|
22
|
-
launch(onEvent: (e: BackendEvent) => void
|
|
22
|
+
launch(onEvent: (e: BackendEvent) => void): Promise<void>;
|
|
23
23
|
/**
|
|
24
24
|
* Helper method to install imports and prevent race conditions with double downloading
|
|
25
25
|
* @param {string} code The code containing import statements
|
|
@@ -35,12 +35,12 @@ export class PythonWorker extends Backend {
|
|
|
35
35
|
return yield loadPyodideAndPackage({ url: pythonPackageUrl, format: ".tgz" });
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
launch(onEvent
|
|
38
|
+
launch(onEvent) {
|
|
39
39
|
const _super = Object.create(null, {
|
|
40
40
|
launch: { get: () => super.launch }
|
|
41
41
|
});
|
|
42
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
-
yield _super.launch.call(this, onEvent
|
|
43
|
+
yield _super.launch.call(this, onEvent);
|
|
44
44
|
this.pyodide = yield PythonWorker.getPyodide();
|
|
45
45
|
// Python calls our function with a PyProxy dict or a Js Map,
|
|
46
46
|
// These must be converted to a PapyrosEvent (JS Object) to allow message passing
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PythonWorker.js","sourceRoot":"","sources":["../../../../src/backend/workers/python/PythonWorker.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAoB,MAAM,eAAe,CAAC;AAInE,OAAO,EAAE,aAAa,EAAiB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE5F,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAE9F;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAsB;IAOpD;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,EAAsB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,EAAa,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,IAAS;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,CAAC;IAED;;OAEG;IACgB,UAAU;QACzB,OAAO,aAAa,CAAC;IACzB,CAAC;IAEO,MAAM,CAAO,UAAU;;YAC3B,OAAO,MAAM,qBAAqB,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;KAAA;IAEY,MAAM,CACf,OAAkC;;;;;YAElC,MAAM,OAAM,MAAM,YAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;YAC/C,6DAA6D;YAC7D,iFAAiF;YACjF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAC9D;gBACI,QAAQ,EAAE,CAAC,CAAM,EAAE,EAAE;oBACjB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC;gBACD,kBAAkB,EAAE,CAAC,EAA6B,EAAE,EAAE;oBAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC3B,OAAO,IAAI,CAAC,KAAK,CAAC;gBACtB,CAAC;aACJ,CACJ,CAAC;YACF,gDAAgD;YAChD,MAAO,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;KAAA;IAED;;;OAGG;IACW,cAAc,CAAC,IAAY;;YACrC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CACzD;oBACI,WAAW,EAAE,IAAI;oBACjB,cAAc,EAAE,IAAI;iBACvB,CAAC,CAAC;YACX,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;KAAA;IAEe,QAAQ,CAAC,IAAY;QACjC,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,KAAK,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACjB,CAAC;IAEqB,OAAO;6DAAC,MAAqB,EAAE,IAAY,EAAE,IAAI,GAAG,MAAM;YAE5E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC3C,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;QACP,CAAC;KAAA;IAEqB,QAAQ,CAAC,IAAY;;YACvC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,CAAC;KAAA;IAEqB,YAAY,CAAC,WAAmC,EAAE,SAAiC;;YACrG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC;gBACxC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;gBACzC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;aACxC,CAAC,CAAC;QACP,CAAC;KAAA;CACJ"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/backend/workers/python/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackendEvent.js","sourceRoot":"","sources":["../../src/communication/BackendEvent.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,gBAYX;AAZD,WAAY,gBAAgB;IACxB,mCAAe,CAAA;IACf,+BAAW,CAAA;IACX,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,mCAAe,CAAA;IACf,mCAAe,CAAA;IACf,2CAAuB,CAAA;IACvB,uCAAmB,CAAA;IACnB,mCAAe,CAAA;IACf,gDAA4B,CAAA;IAC5B,iCAAa,CAAA;AACjB,CAAC,EAZW,gBAAgB,KAAhB,gBAAgB,QAY3B"}
|
|
@@ -9,10 +9,6 @@ export declare class BackendEventQueue {
|
|
|
9
9
|
* Function to process events in the queue
|
|
10
10
|
*/
|
|
11
11
|
private callback;
|
|
12
|
-
/**
|
|
13
|
-
* The maximal amount of output events to send before overflowing
|
|
14
|
-
*/
|
|
15
|
-
private limit;
|
|
16
12
|
/**
|
|
17
13
|
* The time in milliseconds before sending events through
|
|
18
14
|
*/
|
|
@@ -21,37 +17,19 @@ export declare class BackendEventQueue {
|
|
|
21
17
|
* Queue storing the BackendEvents before flushing
|
|
22
18
|
*/
|
|
23
19
|
private queue;
|
|
24
|
-
/**
|
|
25
|
-
* Queue storing Output-events after overflowing
|
|
26
|
-
*/
|
|
27
|
-
private overflow;
|
|
28
|
-
/**
|
|
29
|
-
* Callback for when overflow occurs
|
|
30
|
-
*/
|
|
31
|
-
private onOverflow;
|
|
32
|
-
/**
|
|
33
|
-
* Keep track whether the queue reached its limit this run
|
|
34
|
-
*/
|
|
35
|
-
private overflown;
|
|
36
20
|
/**
|
|
37
21
|
* Time in milliseconds when the last flush occurred
|
|
38
22
|
*/
|
|
39
23
|
private lastFlushTime;
|
|
40
|
-
/**
|
|
41
|
-
* Amount of BackendEvents sent through this run
|
|
42
|
-
*/
|
|
43
|
-
private sendCount;
|
|
44
24
|
/**
|
|
45
25
|
* Decoder to convert data to strings
|
|
46
26
|
*/
|
|
47
27
|
private decoder;
|
|
48
28
|
/**
|
|
49
29
|
* @param {function(BackendEvent):void} callback Function to process events in the queue
|
|
50
|
-
* @param {function():void} onOverflow Callback for when overflow occurs
|
|
51
|
-
* @param {number} limit The maximal amount of output lines to send before overflowing
|
|
52
30
|
* @param {number} flushTime The time in milliseconds before sending events through
|
|
53
31
|
*/
|
|
54
|
-
constructor(callback: (e: BackendEvent) => void,
|
|
32
|
+
constructor(callback: (e: BackendEvent) => void, flushTime?: number);
|
|
55
33
|
/**
|
|
56
34
|
* Add an element to the queue
|
|
57
35
|
* @param {BackendEventType} type The type of the event
|
|
@@ -70,23 +48,10 @@ export declare class BackendEventQueue {
|
|
|
70
48
|
* Reset the queue contents for a new run
|
|
71
49
|
*/
|
|
72
50
|
reset(): void;
|
|
73
|
-
/**
|
|
74
|
-
* @param {BackendEvent} e The event put in the queue
|
|
75
|
-
* @return {number} The amount of lines of data in the event
|
|
76
|
-
*/
|
|
77
|
-
private static lines;
|
|
78
51
|
/**
|
|
79
52
|
* Flush the queue contents using the callback
|
|
80
53
|
*/
|
|
81
54
|
flush(): void;
|
|
82
|
-
/**
|
|
83
|
-
* @return {boolean} Whether too many output events were generated
|
|
84
|
-
*/
|
|
85
|
-
hasOverflow(): boolean;
|
|
86
|
-
/**
|
|
87
|
-
* @return {Array<BackendEvent>} The events that happened after overflow
|
|
88
|
-
*/
|
|
89
|
-
getOverflow(): Array<BackendEvent>;
|
|
90
55
|
/**
|
|
91
56
|
* @param {Function} callback The event-consuming callback
|
|
92
57
|
*/
|