@dodona/papyros 1.0.0 → 2.0.0-beta.0
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/LICENSE +0 -0
- package/README.md +0 -0
- package/dist/App.d.ts +1 -1
- package/dist/App.js +73 -0
- package/dist/App.js.map +1 -0
- package/dist/Backend.d.ts +0 -48
- package/dist/Backend.js +76 -0
- package/dist/Backend.js.map +1 -0
- package/dist/BackendEvent.d.ts +0 -0
- package/dist/BackendEvent.js +24 -0
- package/dist/BackendEvent.js.map +1 -0
- package/dist/BackendEventQueue.d.ts +0 -0
- package/dist/BackendEventQueue.js +135 -0
- package/dist/BackendEventQueue.js.map +1 -0
- package/dist/BackendManager.d.ts +1 -1
- package/dist/BackendManager.js +94 -0
- package/dist/BackendManager.js.map +1 -0
- package/dist/CodeRunner.d.ts +0 -0
- package/dist/CodeRunner.js +372 -0
- package/dist/CodeRunner.js.map +1 -0
- package/dist/Constants.d.ts +0 -0
- package/dist/Constants.js +36 -0
- package/dist/Constants.js.map +1 -0
- package/dist/InputManager.d.ts +0 -0
- package/dist/InputManager.js +102 -0
- package/dist/InputManager.js.map +1 -0
- package/dist/InputServiceWorker.d.ts +0 -0
- package/dist/InputServiceWorker.js +37 -0
- package/dist/InputServiceWorker.js.map +1 -0
- package/dist/Library.d.ts +2 -2
- package/dist/Library.js +9 -1
- package/dist/Library.js.map +1 -0
- package/dist/OutputManager.d.ts +0 -0
- package/dist/OutputManager.js +161 -0
- package/dist/OutputManager.js.map +1 -0
- package/dist/Papyros.css +563 -0
- package/dist/Papyros.d.ts +0 -1
- package/dist/Papyros.js +268 -0
- package/dist/Papyros.js.map +1 -0
- package/dist/ProgrammingLanguage.d.ts +0 -0
- package/dist/ProgrammingLanguage.js +9 -0
- package/dist/ProgrammingLanguage.js.map +1 -0
- package/dist/Translations.d.ts +74 -74
- package/dist/Translations.js +164 -0
- package/dist/Translations.js.map +1 -0
- package/dist/editor/BatchInputEditor.d.ts +0 -0
- package/dist/editor/BatchInputEditor.js +71 -0
- package/dist/editor/BatchInputEditor.js.map +1 -0
- package/dist/editor/CodeEditor.d.ts +0 -5
- package/dist/editor/CodeEditor.js +180 -0
- package/dist/editor/CodeEditor.js.map +1 -0
- package/dist/editor/CodeMirrorEditor.d.ts +0 -0
- package/dist/editor/CodeMirrorEditor.js +168 -0
- package/dist/editor/CodeMirrorEditor.js.map +1 -0
- package/dist/editor/DarkTheme.d.ts +0 -0
- package/dist/editor/DarkTheme.js +73 -0
- package/dist/editor/DarkTheme.js.map +1 -0
- package/dist/editor/Gutters.d.ts +0 -0
- package/dist/editor/Gutters.js +162 -0
- package/dist/editor/Gutters.js.map +1 -0
- package/dist/examples/Examples.d.ts +0 -0
- package/dist/examples/Examples.js +23 -0
- package/dist/examples/Examples.js.map +1 -0
- package/dist/examples/JavaScriptExamples.d.ts +0 -0
- package/dist/examples/JavaScriptExamples.js +16 -0
- package/dist/examples/JavaScriptExamples.js.map +1 -0
- package/dist/examples/PythonExamples.d.ts +0 -0
- package/dist/examples/PythonExamples.js +163 -0
- package/dist/examples/PythonExamples.js.map +1 -0
- package/dist/input/BatchInputHandler.d.ts +0 -0
- package/dist/input/BatchInputHandler.js +112 -0
- package/dist/input/BatchInputHandler.js.map +1 -0
- package/dist/input/InteractiveInputHandler.d.ts +0 -0
- package/dist/input/InteractiveInputHandler.js +90 -0
- package/dist/input/InteractiveInputHandler.js.map +1 -0
- package/dist/input/UserInputHandler.d.ts +0 -0
- package/dist/input/UserInputHandler.js +40 -0
- package/dist/input/UserInputHandler.js.map +1 -0
- package/dist/util/HTMLShapes.d.ts +0 -0
- package/dist/util/HTMLShapes.js +25 -0
- package/dist/util/HTMLShapes.js.map +1 -0
- package/dist/util/Logging.d.ts +0 -0
- package/dist/util/Logging.js +30 -0
- package/dist/util/Logging.js.map +1 -0
- package/dist/util/Rendering.d.ts +0 -0
- package/dist/util/Rendering.js +139 -0
- package/dist/util/Rendering.js.map +1 -0
- package/dist/util/Util.d.ts +1 -1
- package/dist/util/Util.js +148 -0
- package/dist/util/Util.js.map +1 -0
- package/dist/workers/input/InputWorker.d.ts +0 -0
- package/dist/workers/input/InputWorker.js +63 -1
- package/dist/workers/input/InputWorker.js.map +1 -0
- package/dist/workers/javascript/JavaScriptWorker.d.ts +39 -0
- package/dist/workers/javascript/JavaScriptWorker.js +148 -0
- package/dist/workers/javascript/JavaScriptWorker.js.map +1 -0
- package/dist/workers/javascript/worker.d.ts +1 -0
- package/dist/workers/javascript/worker.js +5 -0
- package/dist/workers/javascript/worker.js.map +1 -0
- package/dist/workers/python/PythonWorker.d.ts +31 -0
- package/dist/workers/python/PythonWorker.js +106 -0
- package/dist/workers/python/PythonWorker.js.map +1 -0
- package/dist/workers/python/python_package.tar.gz +0 -0
- package/dist/workers/python/worker.d.ts +1 -0
- package/dist/workers/python/worker.js +5 -0
- package/dist/workers/python/worker.js.map +1 -0
- package/package.json +45 -42
- package/dist/workers/javascript/JavaScriptWorker.worker.d.ts +0 -2
- package/dist/workers/python/PythonWorker.worker.d.ts +0 -2
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { proxy } from "comlink";
|
|
11
|
+
import { BackendEventType } from "./BackendEvent";
|
|
12
|
+
import { BackendManager } from "./BackendManager";
|
|
13
|
+
import { CodeEditor } from "./editor/CodeEditor";
|
|
14
|
+
import { addPapyrosPrefix, APPLICATION_STATE_TEXT_ID, CODE_BUTTONS_WRAPPER_ID, DEFAULT_EDITOR_DELAY, RUN_BTN_ID, STATE_SPINNER_ID, STOP_BTN_ID } from "./Constants";
|
|
15
|
+
import { InputManager } from "./InputManager";
|
|
16
|
+
import { renderSpinningCircle } from "./util/HTMLShapes";
|
|
17
|
+
import { addListener, getElement, t, downloadResults, parseData } from "./util/Util";
|
|
18
|
+
import { renderWithOptions, renderButton, Renderable, appendClasses } from "./util/Rendering";
|
|
19
|
+
import { OutputManager } from "./OutputManager";
|
|
20
|
+
/**
|
|
21
|
+
* Enum representing the possible states while processing code
|
|
22
|
+
*/
|
|
23
|
+
export var RunState;
|
|
24
|
+
(function (RunState) {
|
|
25
|
+
RunState["Loading"] = "loading";
|
|
26
|
+
RunState["Running"] = "running";
|
|
27
|
+
RunState["AwaitingInput"] = "awaiting_input";
|
|
28
|
+
RunState["Stopping"] = "stopping";
|
|
29
|
+
RunState["Ready"] = "ready";
|
|
30
|
+
})(RunState || (RunState = {}));
|
|
31
|
+
/**
|
|
32
|
+
* Helper component to manage and visualize the current RunState
|
|
33
|
+
*/
|
|
34
|
+
export class CodeRunner extends Renderable {
|
|
35
|
+
/**
|
|
36
|
+
* Construct a new RunStateManager with the given listeners
|
|
37
|
+
* @param {ProgrammingLanguage} programmingLanguage The language to use
|
|
38
|
+
* @param {InputMode} inputMode The input mode to use
|
|
39
|
+
*/
|
|
40
|
+
constructor(programmingLanguage, inputMode) {
|
|
41
|
+
super();
|
|
42
|
+
this.programmingLanguage = programmingLanguage;
|
|
43
|
+
this.editor = new CodeEditor(() => {
|
|
44
|
+
if (this.state === RunState.Ready) {
|
|
45
|
+
this.runCode(this.editor.getText());
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
this.inputManager = new InputManager((input) => __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
const backend = yield this.backend;
|
|
50
|
+
backend.writeMessage(input);
|
|
51
|
+
this.setState(RunState.Running);
|
|
52
|
+
}), inputMode);
|
|
53
|
+
this.outputManager = new OutputManager();
|
|
54
|
+
this.backend = Promise.resolve({});
|
|
55
|
+
this.buttons = [];
|
|
56
|
+
this.editor.onChange({
|
|
57
|
+
onChange: (code) => __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const backend = yield this.backend;
|
|
59
|
+
const modes = yield backend.workerProxy.runModes(code);
|
|
60
|
+
modes.forEach(mode => {
|
|
61
|
+
const id = addPapyrosPrefix(mode.mode);
|
|
62
|
+
if (mode.active) {
|
|
63
|
+
this.addButton({
|
|
64
|
+
id: id,
|
|
65
|
+
buttonText: t(`Papyros.run_modes.${mode.mode}`),
|
|
66
|
+
classNames: "_tw-text-white _tw-bg-neutral-bg"
|
|
67
|
+
}, () => this.runCode(this.editor.getText(), mode.mode));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.removeButton(id);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.renderButtons();
|
|
74
|
+
}),
|
|
75
|
+
delay: DEFAULT_EDITOR_DELAY
|
|
76
|
+
});
|
|
77
|
+
BackendManager.subscribe(BackendEventType.Input, () => this.setState(RunState.AwaitingInput));
|
|
78
|
+
this.loadingPackages = [];
|
|
79
|
+
BackendManager.subscribe(BackendEventType.Loading, e => this.onLoad(e));
|
|
80
|
+
BackendManager.subscribe(BackendEventType.Start, e => this.onStart(e));
|
|
81
|
+
this.previousState = RunState.Ready;
|
|
82
|
+
this.runStartTime = new Date().getTime();
|
|
83
|
+
this.state = RunState.Ready;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Start the backend to enable running code
|
|
87
|
+
*/
|
|
88
|
+
start() {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
this.setState(RunState.Loading);
|
|
91
|
+
const backend = BackendManager.getBackend(this.programmingLanguage);
|
|
92
|
+
this.editor.setProgrammingLanguage(this.programmingLanguage);
|
|
93
|
+
// Use a Promise to immediately enable running while downloading
|
|
94
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
95
|
+
this.backend = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
const workerProxy = backend.workerProxy;
|
|
97
|
+
yield workerProxy
|
|
98
|
+
// Allow passing messages between worker and main thread
|
|
99
|
+
.launch(proxy((e) => BackendManager.publish(e)), proxy(() => {
|
|
100
|
+
this.outputManager.onOverflow(null);
|
|
101
|
+
}));
|
|
102
|
+
this.editor.setLintingSource((view) => __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
const workerDiagnostics = yield workerProxy.lintCode(this.editor.getText());
|
|
104
|
+
return workerDiagnostics.map(d => {
|
|
105
|
+
const fromline = view.state.doc.line(d.lineNr);
|
|
106
|
+
const toLine = view.state.doc.line(d.endLineNr);
|
|
107
|
+
const from = Math.min(fromline.from + d.columnNr, fromline.to);
|
|
108
|
+
const to = Math.min(toLine.from + d.endColumnNr, toLine.to);
|
|
109
|
+
return Object.assign(Object.assign({}, d), { from: from, to: to });
|
|
110
|
+
});
|
|
111
|
+
}));
|
|
112
|
+
return resolve(backend);
|
|
113
|
+
}));
|
|
114
|
+
this.editor.focus();
|
|
115
|
+
this.setState(RunState.Ready);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Interrupt the currently running code
|
|
120
|
+
* @return {Promise<void>} Promise of stopping
|
|
121
|
+
*/
|
|
122
|
+
stop() {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
this.setState(RunState.Stopping);
|
|
125
|
+
BackendManager.publish({
|
|
126
|
+
type: BackendEventType.End,
|
|
127
|
+
data: "User cancelled run", contentType: "text/plain"
|
|
128
|
+
});
|
|
129
|
+
const backend = yield this.backend;
|
|
130
|
+
yield backend.interrupt();
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Set the used programming language to the given one to allow editing and running code
|
|
135
|
+
* @param {ProgrammingLanguage} programmingLanguage The language to use
|
|
136
|
+
*/
|
|
137
|
+
setProgrammingLanguage(programmingLanguage) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
if (this.programmingLanguage !== programmingLanguage) { // Expensive, so ensure it is needed
|
|
140
|
+
yield this.backend.then(b => b.interrupt());
|
|
141
|
+
this.programmingLanguage = programmingLanguage;
|
|
142
|
+
yield this.start();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* @return {ProgrammingLanguage} The current programming language
|
|
148
|
+
*/
|
|
149
|
+
getProgrammingLanguage() {
|
|
150
|
+
return this.programmingLanguage;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Show or hide the spinning circle, representing a running animation
|
|
154
|
+
* @param {boolean} show Whether to show the spinner
|
|
155
|
+
*/
|
|
156
|
+
showSpinner(show) {
|
|
157
|
+
getElement(STATE_SPINNER_ID).style.display = show ? "" : "none";
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Show the current state of the program to the user
|
|
161
|
+
* @param {RunState} state The current state of the run
|
|
162
|
+
* @param {string} message Optional message to indicate the state
|
|
163
|
+
*/
|
|
164
|
+
setState(state, message) {
|
|
165
|
+
getElement(APPLICATION_STATE_TEXT_ID).innerText =
|
|
166
|
+
message || t(`Papyros.states.${state}`);
|
|
167
|
+
if (state !== this.state) {
|
|
168
|
+
this.previousState = this.state;
|
|
169
|
+
this.state = state;
|
|
170
|
+
}
|
|
171
|
+
this.showSpinner(this.state !== RunState.Ready);
|
|
172
|
+
this.renderButtons();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* @return {RunState} The state of the current run
|
|
176
|
+
*/
|
|
177
|
+
getState() {
|
|
178
|
+
return this.state;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Remove a button from the internal button list. Requires a re-render to update
|
|
182
|
+
* @param {string} id Identifier of the button to remove
|
|
183
|
+
*/
|
|
184
|
+
removeButton(id) {
|
|
185
|
+
const existingIndex = this.buttons.findIndex(b => b.id === id);
|
|
186
|
+
if (existingIndex !== -1) {
|
|
187
|
+
this.buttons.splice(existingIndex, 1);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Add a button to display to the user
|
|
192
|
+
* @param {ButtonOptions} options Options for rendering the button
|
|
193
|
+
* @param {function} onClick Listener for click events on the button
|
|
194
|
+
*/
|
|
195
|
+
addButton(options, onClick) {
|
|
196
|
+
this.removeButton(options.id);
|
|
197
|
+
this.buttons.push({
|
|
198
|
+
id: options.id,
|
|
199
|
+
buttonHTML: renderButton(options),
|
|
200
|
+
onClick: onClick
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Generate a button that the user can click to process code
|
|
205
|
+
* Can either run the code or interrupt it if already running
|
|
206
|
+
* @return {DynamicButton} A button to interact with the code according to the current state
|
|
207
|
+
*/
|
|
208
|
+
getCodeActionButton() {
|
|
209
|
+
let buttonOptions;
|
|
210
|
+
let buttonHandler;
|
|
211
|
+
if ([RunState.Ready, RunState.Loading].includes(this.state)) {
|
|
212
|
+
buttonOptions = {
|
|
213
|
+
id: RUN_BTN_ID,
|
|
214
|
+
buttonText: t("Papyros.run"),
|
|
215
|
+
classNames: "_tw-text-white _tw-bg-blue-500"
|
|
216
|
+
};
|
|
217
|
+
buttonHandler = () => this.runCode(this.editor.getText());
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
buttonOptions = {
|
|
221
|
+
id: STOP_BTN_ID,
|
|
222
|
+
buttonText: t("Papyros.stop"),
|
|
223
|
+
classNames: "_tw-text-white _tw-bg-red-500"
|
|
224
|
+
};
|
|
225
|
+
buttonHandler = () => this.stop();
|
|
226
|
+
}
|
|
227
|
+
appendClasses(buttonOptions, "_tw-min-w-[60px]");
|
|
228
|
+
return {
|
|
229
|
+
id: buttonOptions.id,
|
|
230
|
+
buttonHTML: renderButton(buttonOptions),
|
|
231
|
+
onClick: buttonHandler
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Specific helper method to render only the buttons required by the user
|
|
236
|
+
*/
|
|
237
|
+
renderButtons() {
|
|
238
|
+
const buttons = [this.getCodeActionButton(), ...this.buttons];
|
|
239
|
+
getElement(CODE_BUTTONS_WRAPPER_ID).innerHTML =
|
|
240
|
+
buttons.map(b => b.buttonHTML).join("\n");
|
|
241
|
+
// Buttons are freshly added to the DOM, so attach listeners now
|
|
242
|
+
buttons.forEach(b => addListener(b.id, b.onClick, "click"));
|
|
243
|
+
}
|
|
244
|
+
_render(options) {
|
|
245
|
+
appendClasses(options.statusPanelOptions,
|
|
246
|
+
// eslint-disable-next-line max-len
|
|
247
|
+
"_tw-border-solid _tw-border-gray-200 _tw-border-b-2 dark:_tw-border-dark-mode-content");
|
|
248
|
+
const rendered = renderWithOptions(options.statusPanelOptions, `
|
|
249
|
+
<div class="_tw-grid _tw-grid-cols-2 _tw-items-center _tw-px-1">
|
|
250
|
+
<div id="${CODE_BUTTONS_WRAPPER_ID}" class="_tw-col-span-1 _tw-flex _tw-flex-row">
|
|
251
|
+
</div>
|
|
252
|
+
<div class="_tw-col-span-1 _tw-flex _tw-flex-row-reverse _tw-items-center">
|
|
253
|
+
<div id="${APPLICATION_STATE_TEXT_ID}"></div>
|
|
254
|
+
${renderSpinningCircle(STATE_SPINNER_ID, "_tw-border-gray-200 _tw-border-b-red-500")}
|
|
255
|
+
</div>
|
|
256
|
+
</div>`);
|
|
257
|
+
this.setState(this.state);
|
|
258
|
+
this.inputManager.render(options.inputOptions);
|
|
259
|
+
this.outputManager.render(options.outputOptions);
|
|
260
|
+
this.editor.render(options.codeEditorOptions);
|
|
261
|
+
this.editor.setPanel(rendered);
|
|
262
|
+
// Set language again to update the placeholder
|
|
263
|
+
this.editor.setProgrammingLanguage(this.programmingLanguage);
|
|
264
|
+
return rendered;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* @param {string} code The code to run
|
|
268
|
+
* @param {string} mode The mode to run with
|
|
269
|
+
* @return {Promise<void>} Promise of running the code
|
|
270
|
+
*/
|
|
271
|
+
runCode(code, mode) {
|
|
272
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
273
|
+
// Setup pre-run
|
|
274
|
+
this.setState(RunState.Loading);
|
|
275
|
+
// Ensure we go back to Loading after finishing any remaining installs
|
|
276
|
+
this.previousState = RunState.Loading;
|
|
277
|
+
BackendManager.publish({
|
|
278
|
+
type: BackendEventType.Start,
|
|
279
|
+
data: "StartClicked", contentType: "text/plain"
|
|
280
|
+
});
|
|
281
|
+
let interrupted = false;
|
|
282
|
+
let terminated = false;
|
|
283
|
+
const backend = yield this.backend;
|
|
284
|
+
this.runStartTime = new Date().getTime();
|
|
285
|
+
try {
|
|
286
|
+
yield backend.call(backend.workerProxy.runCode, code, mode);
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
if (error.type === "InterruptError") {
|
|
290
|
+
// Error signaling forceful interrupt
|
|
291
|
+
interrupted = true;
|
|
292
|
+
terminated = true;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
BackendManager.publish({
|
|
296
|
+
type: BackendEventType.Error,
|
|
297
|
+
data: JSON.stringify(error),
|
|
298
|
+
contentType: "text/json"
|
|
299
|
+
});
|
|
300
|
+
BackendManager.publish({
|
|
301
|
+
type: BackendEventType.End,
|
|
302
|
+
data: "RunError", contentType: "text/plain"
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
finally {
|
|
307
|
+
if (this.state === RunState.Stopping) {
|
|
308
|
+
// Was interrupted, End message already published
|
|
309
|
+
interrupted = true;
|
|
310
|
+
}
|
|
311
|
+
this.setState(RunState.Ready, t(interrupted ? "Papyros.interrupted" : "Papyros.finished", { time: (new Date().getTime() - this.runStartTime) / 1000 }));
|
|
312
|
+
if (terminated) {
|
|
313
|
+
yield this.start();
|
|
314
|
+
}
|
|
315
|
+
else if (yield backend.workerProxy.hasOverflow()) {
|
|
316
|
+
this.outputManager.onOverflow(() => __awaiter(this, void 0, void 0, function* () {
|
|
317
|
+
const backend = yield this.backend;
|
|
318
|
+
const overflowResults = (yield backend.workerProxy.getOverflow())
|
|
319
|
+
.map(e => e.data).join("");
|
|
320
|
+
downloadResults(overflowResults, "overflow-results.txt");
|
|
321
|
+
}));
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Callback to handle loading events
|
|
328
|
+
* @param {BackendEvent} e The loading event
|
|
329
|
+
*/
|
|
330
|
+
onLoad(e) {
|
|
331
|
+
const loadingData = parseData(e.data, e.contentType);
|
|
332
|
+
if (loadingData.status === "loading") {
|
|
333
|
+
loadingData.modules.forEach(m => {
|
|
334
|
+
if (!this.loadingPackages.includes(m)) {
|
|
335
|
+
this.loadingPackages.push(m);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
else if (loadingData.status === "loaded") {
|
|
340
|
+
loadingData.modules.forEach(m => {
|
|
341
|
+
const index = this.loadingPackages.indexOf(m);
|
|
342
|
+
if (index !== -1) {
|
|
343
|
+
this.loadingPackages.splice(index, 1);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
else { // failed
|
|
348
|
+
// If it is a true module, an Exception will be raised when running
|
|
349
|
+
// So this does not need to be handled here, as it is often an incomplete package-name
|
|
350
|
+
// that causes micropip to not find the correct wheel
|
|
351
|
+
this.loadingPackages = [];
|
|
352
|
+
}
|
|
353
|
+
if (this.loadingPackages.length > 0) {
|
|
354
|
+
const packageMessage = t("Papyros.loading", {
|
|
355
|
+
// limit amount of package names shown
|
|
356
|
+
packages: this.loadingPackages.slice(0, 3).join(", ")
|
|
357
|
+
});
|
|
358
|
+
this.setState(RunState.Loading, packageMessage);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
this.setState(this.previousState);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
onStart(e) {
|
|
365
|
+
const startData = parseData(e.data, e.contentType);
|
|
366
|
+
if (startData.includes("RunCode")) {
|
|
367
|
+
this.runStartTime = new Date().getTime();
|
|
368
|
+
this.setState(RunState.Running);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=CodeRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeRunner.js","sourceRoot":"","sources":["../src/CodeRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/Constants.d.ts
CHANGED
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
2
|
+
/**
|
|
3
|
+
* Add a prefix to a string, ensuring uniqueness in the page
|
|
4
|
+
* @param {string} s The value to add a prefix to
|
|
5
|
+
* @return {string} The value with an almost certainly unused prefix
|
|
6
|
+
*/
|
|
7
|
+
export function addPapyrosPrefix(s) {
|
|
8
|
+
return `__papyros-${s}`;
|
|
9
|
+
}
|
|
10
|
+
/* Default HTML ids for various elements */
|
|
11
|
+
export const MAIN_APP_ID = addPapyrosPrefix("root");
|
|
12
|
+
export const OUTPUT_AREA_WRAPPER_ID = addPapyrosPrefix("code-output-area-wrapper");
|
|
13
|
+
export const OUTPUT_AREA_ID = addPapyrosPrefix("code-output-area");
|
|
14
|
+
export const OUTPUT_OVERFLOW_ID = addPapyrosPrefix("output-overflow");
|
|
15
|
+
export const INPUT_AREA_WRAPPER_ID = addPapyrosPrefix("code-input-area-wrapper");
|
|
16
|
+
export const INPUT_TA_ID = addPapyrosPrefix("code-input-area");
|
|
17
|
+
export const USER_INPUT_WRAPPER_ID = addPapyrosPrefix("user-input-wrapper");
|
|
18
|
+
export const EDITOR_WRAPPER_ID = addPapyrosPrefix("code-area");
|
|
19
|
+
export const PANEL_WRAPPER_ID = addPapyrosPrefix("code-status-panel");
|
|
20
|
+
export const STATE_SPINNER_ID = addPapyrosPrefix("state-spinner");
|
|
21
|
+
export const APPLICATION_STATE_TEXT_ID = addPapyrosPrefix("application-state-text");
|
|
22
|
+
export const CODE_BUTTONS_WRAPPER_ID = addPapyrosPrefix("code-buttons");
|
|
23
|
+
export const RUN_BTN_ID = addPapyrosPrefix("run-code-btn");
|
|
24
|
+
export const STOP_BTN_ID = addPapyrosPrefix("stop-btn");
|
|
25
|
+
export const SEND_INPUT_BTN_ID = addPapyrosPrefix("send-input-btn");
|
|
26
|
+
export const SWITCH_INPUT_MODE_A_ID = addPapyrosPrefix("switch-input-mode");
|
|
27
|
+
export const EXAMPLE_SELECT_ID = addPapyrosPrefix("example-select");
|
|
28
|
+
export const LOCALE_SELECT_ID = addPapyrosPrefix("locale-select");
|
|
29
|
+
export const PROGRAMMING_LANGUAGE_SELECT_ID = addPapyrosPrefix("programming-language-select");
|
|
30
|
+
export const DARK_MODE_TOGGLE_ID = addPapyrosPrefix("toggle-dark-mode");
|
|
31
|
+
/* Default values for various properties */
|
|
32
|
+
export const DEFAULT_PROGRAMMING_LANGUAGE = ProgrammingLanguage.Python;
|
|
33
|
+
export const DEFAULT_LOCALE = "nl";
|
|
34
|
+
export const DEFAULT_SERVICE_WORKER = "InputServiceWorker.js";
|
|
35
|
+
export const DEFAULT_EDITOR_DELAY = 750; // milliseconds
|
|
36
|
+
//# sourceMappingURL=Constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../src/Constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACtC,OAAO,aAAa,CAAC,EAAE,CAAC;AAC5B,CAAC;AACD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,8BAA8B,GAAG,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACxE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,mBAAmB,CAAC,MAAM,CAAC;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,eAAe"}
|
package/dist/InputManager.d.ts
CHANGED
|
File without changes
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { t } from "i18n-js";
|
|
2
|
+
import { SWITCH_INPUT_MODE_A_ID, USER_INPUT_WRAPPER_ID } from "./Constants";
|
|
3
|
+
import { BackendEventType } from "./BackendEvent";
|
|
4
|
+
import { addListener, getElement, } from "./util/Util";
|
|
5
|
+
import { InteractiveInputHandler } from "./input/InteractiveInputHandler";
|
|
6
|
+
import { BatchInputHandler } from "./input/BatchInputHandler";
|
|
7
|
+
import { BackendManager } from "./BackendManager";
|
|
8
|
+
import { Renderable, renderWithOptions } from "./util/Rendering";
|
|
9
|
+
export var InputMode;
|
|
10
|
+
(function (InputMode) {
|
|
11
|
+
InputMode["Interactive"] = "interactive";
|
|
12
|
+
InputMode["Batch"] = "batch";
|
|
13
|
+
})(InputMode || (InputMode = {}));
|
|
14
|
+
export const INPUT_MODES = [InputMode.Batch, InputMode.Interactive];
|
|
15
|
+
export class InputManager extends Renderable {
|
|
16
|
+
constructor(sendInput, inputMode) {
|
|
17
|
+
super();
|
|
18
|
+
this.onUserInput = this.onUserInput.bind(this);
|
|
19
|
+
this.inputHandlers = this.buildInputHandlerMap();
|
|
20
|
+
this.inputMode = inputMode;
|
|
21
|
+
this.sendInput = sendInput;
|
|
22
|
+
this.waiting = false;
|
|
23
|
+
this.prompt = "";
|
|
24
|
+
BackendManager.subscribe(BackendEventType.Start, () => this.onRunStart());
|
|
25
|
+
BackendManager.subscribe(BackendEventType.End, () => this.onRunEnd());
|
|
26
|
+
BackendManager.subscribe(BackendEventType.Input, e => this.onInputRequest(e));
|
|
27
|
+
}
|
|
28
|
+
buildInputHandlerMap() {
|
|
29
|
+
const interactiveInputHandler = new InteractiveInputHandler(this.onUserInput);
|
|
30
|
+
const batchInputHandler = new BatchInputHandler(this.onUserInput);
|
|
31
|
+
return new Map([
|
|
32
|
+
[InputMode.Interactive, interactiveInputHandler],
|
|
33
|
+
[InputMode.Batch, batchInputHandler]
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
getInputMode() {
|
|
37
|
+
return this.inputMode;
|
|
38
|
+
}
|
|
39
|
+
setInputMode(inputMode) {
|
|
40
|
+
this.inputHandler.toggle(false);
|
|
41
|
+
this.inputMode = inputMode;
|
|
42
|
+
this.render();
|
|
43
|
+
this.inputHandler.toggle(true);
|
|
44
|
+
}
|
|
45
|
+
getInputHandler(inputMode) {
|
|
46
|
+
return this.inputHandlers.get(inputMode);
|
|
47
|
+
}
|
|
48
|
+
get inputHandler() {
|
|
49
|
+
return this.getInputHandler(this.inputMode);
|
|
50
|
+
}
|
|
51
|
+
isWaiting() {
|
|
52
|
+
return this.waiting;
|
|
53
|
+
}
|
|
54
|
+
_render(options) {
|
|
55
|
+
let switchMode = "";
|
|
56
|
+
const otherMode = this.inputMode === InputMode.Interactive ?
|
|
57
|
+
InputMode.Batch : InputMode.Interactive;
|
|
58
|
+
switchMode = `<a id="${SWITCH_INPUT_MODE_A_ID}" data-value="${otherMode}"
|
|
59
|
+
class="_tw-flex _tw-flex-row-reverse hover:_tw-cursor-pointer _tw-text-blue-500">
|
|
60
|
+
${t(`Papyros.switch_input_mode_to.${otherMode}`)}
|
|
61
|
+
</a>`;
|
|
62
|
+
renderWithOptions(options, `
|
|
63
|
+
<div id="${USER_INPUT_WRAPPER_ID}" class="_tw-my-1">
|
|
64
|
+
</div>
|
|
65
|
+
${switchMode}`);
|
|
66
|
+
addListener(SWITCH_INPUT_MODE_A_ID, im => this.setInputMode(im), "click", "data-value");
|
|
67
|
+
this.inputHandler.render({
|
|
68
|
+
parentElementId: USER_INPUT_WRAPPER_ID,
|
|
69
|
+
darkMode: options.darkMode,
|
|
70
|
+
inputStyling: options.inputStyling
|
|
71
|
+
});
|
|
72
|
+
this.inputHandler.waitWithPrompt(this.waiting, this.prompt);
|
|
73
|
+
}
|
|
74
|
+
waitWithPrompt(waiting, prompt = "") {
|
|
75
|
+
this.waiting = waiting;
|
|
76
|
+
this.prompt = prompt;
|
|
77
|
+
this.inputHandler.waitWithPrompt(this.waiting, this.prompt);
|
|
78
|
+
}
|
|
79
|
+
onUserInput(line) {
|
|
80
|
+
this.sendInput(line);
|
|
81
|
+
this.waitWithPrompt(false);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Asynchronously handle an input request by prompting the user for input
|
|
85
|
+
* @param {BackendEvent} e Event containing the input data
|
|
86
|
+
*/
|
|
87
|
+
onInputRequest(e) {
|
|
88
|
+
this.waitWithPrompt(true, e.data);
|
|
89
|
+
}
|
|
90
|
+
onRunStart() {
|
|
91
|
+
// Prevent switching input mode during runs
|
|
92
|
+
getElement(SWITCH_INPUT_MODE_A_ID).hidden = true;
|
|
93
|
+
this.waitWithPrompt(false);
|
|
94
|
+
this.inputHandler.onRunStart();
|
|
95
|
+
}
|
|
96
|
+
onRunEnd() {
|
|
97
|
+
getElement(SWITCH_INPUT_MODE_A_ID).hidden = false;
|
|
98
|
+
this.inputHandler.onRunEnd();
|
|
99
|
+
this.waitWithPrompt(false);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=InputManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputManager.js","sourceRoot":"","sources":["../src/InputManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAC5B,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAgB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACH,WAAW,EAAE,UAAU,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAiB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGhF,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,wCAA2B,CAAA;IAC3B,4BAAe,CAAA;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;AASpE,MAAM,OAAO,YAAa,SAAQ,UAAqC;IAQnE,YAAY,SAAkC,EAAE,SAAoB;QAChE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1E,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAEO,oBAAoB;QACxB,MAAM,uBAAuB,GACzB,IAAI,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,iBAAiB,GACnB,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,IAAI,GAAG,CAAC;YACX,CAAC,SAAS,CAAC,WAAW,EAAE,uBAAuB,CAAC;YAChD,CAAC,SAAS,CAAC,KAAK,EAAE,iBAAiB,CAAC;SACvC,CAAC,CAAC;IACP,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEM,YAAY,CAAC,SAAoB;QACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,eAAe,CAAC,SAAoB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IAC9C,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC;IACjD,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEkB,OAAO,CAAC,OAAkC;QACzD,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,WAAW,CAAC,CAAC;YACxD,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;QAC5C,UAAU,GAAG,UAAU,sBAAsB,iBAAiB,SAAS;;cAEjE,CAAC,CAAC,gCAAgC,SAAS,EAAE,CAAC;aAC/C,CAAC;QAEN,iBAAiB,CAAC,OAAO,EAAE;WACxB,qBAAqB;;EAE9B,UAAU,EAAE,CAAC,CAAC;QACR,WAAW,CAAY,sBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EACtE,OAAO,EAAE,YAAY,CAAC,CAAC;QAE3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACrB,eAAe,EAAE,qBAAqB;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAEO,cAAc,CAAC,OAAgB,EAAE,MAAM,GAAG,EAAE;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,IAAY;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,CAAe;QAClC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,UAAU;QACd,2CAA2C;QAC3C,UAAU,CAAC,sBAAsB,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAEO,QAAQ;QACZ,UAAU,CAAC,sBAAsB,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACJ"}
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Default service worker to process user input using HTTP requests
|
|
12
|
+
*/
|
|
13
|
+
// Import service worker provided by the Papyros-package
|
|
14
|
+
import { InputWorker } from "./workers/input/InputWorker";
|
|
15
|
+
// Strip away the filename of the script to obtain the scope
|
|
16
|
+
// let domain = location.href;
|
|
17
|
+
// domain = domain.slice(0, domain.lastIndexOf("/") + 1);
|
|
18
|
+
const domain = ""; // Disable SharedArrayBuffers to use same environment as Dodona
|
|
19
|
+
const inputHandler = new InputWorker(domain);
|
|
20
|
+
addEventListener("fetch", function (event) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
if (!(yield inputHandler.handleInputRequest(event))) {
|
|
23
|
+
// Not a Papyros-specific request
|
|
24
|
+
// Fetch as we would handle a normal request
|
|
25
|
+
// Default action is to let browser handle it by not responding here
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
// Prevent needing to reload page to have working input
|
|
31
|
+
addEventListener("install", function (event) {
|
|
32
|
+
event.waitUntil(skipWaiting());
|
|
33
|
+
});
|
|
34
|
+
addEventListener("activate", function (event) {
|
|
35
|
+
event.waitUntil(clients.claim());
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=InputServiceWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputServiceWorker.js","sourceRoot":"","sources":["../src/InputServiceWorker.ts"],"names":[],"mappings":";;;;;;;;;AAAA;;GAEG;AACH,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,4DAA4D;AAC5D,8BAA8B;AAC9B,yDAAyD;AACzD,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,+DAA+D;AAClF,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAE7C,gBAAgB,CAAC,OAAO,EAAE,UAAgB,KAAiB;;QACvD,IAAI,CAAC,CAAA,MAAM,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;YAChD,iCAAiC;YACjC,4CAA4C;YAC5C,oEAAoE;YACpE,OAAO;QACX,CAAC;IACL,CAAC;CAAA,CAAC,CAAC;AACH,uDAAuD;AACvD,gBAAgB,CAAC,SAAS,EAAE,UAAU,KAAsB;IACxD,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,KAAsB;IACzD,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC"}
|
package/dist/Library.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { Papyros, PapyrosConfig, PapyrosRenderOptions } from "./Papyros";
|
|
|
6
6
|
import { CodeRunner, RunState } from "./CodeRunner";
|
|
7
7
|
import { BackendManager } from "./BackendManager";
|
|
8
8
|
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
9
|
-
import {
|
|
9
|
+
import { WorkerDiagnostic } from "./Backend";
|
|
10
10
|
import { ButtonOptions, RenderOptions } from "./util/Rendering";
|
|
11
|
-
export type { BackendEvent, FriendlyError,
|
|
11
|
+
export type { BackendEvent, FriendlyError, WorkerDiagnostic, PapyrosConfig, PapyrosRenderOptions, RenderOptions, ButtonOptions };
|
|
12
12
|
export { Papyros, ProgrammingLanguage, BackendManager, CodeEditor, CodeRunner, RunState, InputManager, InputMode, OutputManager };
|