@dodona/papyros 0.1.4-rc → 0.1.5-rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Backend.d.ts +22 -0
- package/dist/Backend.js +133 -0
- package/dist/Backend.js.map +1 -0
- package/dist/BackendManager.d.ts +5 -0
- package/dist/BackendManager.js +39 -0
- package/dist/BackendManager.js.map +1 -0
- package/dist/CodeEditor.d.ts +12 -0
- package/dist/CodeEditor.js +146 -0
- package/dist/CodeEditor.js.map +1 -0
- package/dist/Constants.d.ts +15 -0
- package/dist/Constants.js +16 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Main.d.ts +1 -0
- package/dist/Main.js +42 -0
- package/dist/Main.js.map +1 -0
- package/dist/Papyros.d.ts +58 -0
- package/dist/Papyros.js +390 -0
- package/dist/Papyros.js.map +1 -0
- package/dist/PapyrosEvent.d.ts +5 -0
- package/dist/PapyrosEvent.js +2 -0
- package/dist/PapyrosEvent.js.map +1 -0
- package/dist/ProgrammingLanguage.d.ts +6 -0
- package/dist/ProgrammingLanguage.js +23 -0
- package/dist/ProgrammingLanguage.js.map +1 -0
- package/dist/Translations.d.ts +40 -0
- package/dist/Translations.js +39 -0
- package/dist/Translations.js.map +1 -0
- package/dist/util/Logging.d.ts +6 -0
- package/dist/util/Logging.js +48 -0
- package/dist/util/Logging.js.map +1 -0
- package/dist/workers/javascript/JavaScriptWorker.worker.d.ts +1 -0
- package/dist/workers/javascript/JavaScriptWorker.worker.js +91 -0
- package/dist/workers/javascript/JavaScriptWorker.worker.js.map +1 -0
- package/dist/workers/python/PythonWorker.worker.d.ts +1 -0
- package/dist/workers/python/PythonWorker.worker.js +161 -0
- package/dist/workers/python/PythonWorker.worker.js.map +1 -0
- package/dist/workers/python/init.py.d.ts +1 -0
- package/dist/workers/python/init.py.js +2 -0
- package/dist/workers/python/init.py.js.map +1 -0
- package/package.json +2 -3
- package/dist/114.index.js +0 -1
- package/dist/572.index.js +0 -1
- package/dist/806.index.js +0 -1
- package/dist/index.d.ts +0 -189
- package/dist/index.js +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PapyrosEvent } from "./PapyrosEvent";
|
|
2
|
+
export declare abstract class Backend {
|
|
3
|
+
onEvent: (e: PapyrosEvent) => any;
|
|
4
|
+
runId: number;
|
|
5
|
+
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Initialize the backend, setting up any globals required
|
|
8
|
+
* @param {function(PapyrosEvent):void} onEvent Callback for when events occur
|
|
9
|
+
* @param {Uint8Array} inputTextArray Optional shared buffer for input
|
|
10
|
+
* @param {Int32Array} inputMetaData Optional shared buffer for metadata about input
|
|
11
|
+
* @return {Promise<void>} Promise of launching
|
|
12
|
+
*/
|
|
13
|
+
launch(onEvent: (e: PapyrosEvent) => void, inputTextArray?: Uint8Array, inputMetaData?: Int32Array): Promise<void>;
|
|
14
|
+
abstract _runCodeInternal(code: string): Promise<any>;
|
|
15
|
+
/**
|
|
16
|
+
* Validate and run arbitrary code
|
|
17
|
+
* @param {string} code The code to run
|
|
18
|
+
* @param {string} runId The uuid for this execution
|
|
19
|
+
* @return {Promise<void>} Promise of execution
|
|
20
|
+
*/
|
|
21
|
+
runCode(code: string, runId: number): Promise<void>;
|
|
22
|
+
}
|
package/dist/Backend.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
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
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (_) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { INPUT_RELATIVE_URL } from "./Constants";
|
|
38
|
+
import { LogType, papyrosLog } from "./util/Logging";
|
|
39
|
+
function getInputCallback(inputTextArray, inputMetaData) {
|
|
40
|
+
if (inputTextArray && inputMetaData) {
|
|
41
|
+
var textDecoder_1 = new TextDecoder();
|
|
42
|
+
return function () {
|
|
43
|
+
// eslint-disable-next-line no-constant-condition
|
|
44
|
+
while (true) {
|
|
45
|
+
if (Atomics.wait(inputMetaData, 0, 0, 100) === "timed-out") {
|
|
46
|
+
// papyrosLog.log("waiting on input");
|
|
47
|
+
// if (interruptBuffer[0] === 2) {
|
|
48
|
+
// return null;
|
|
49
|
+
// }
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
Atomics.store(inputMetaData, 0, 0);
|
|
56
|
+
var size = Atomics.exchange(inputMetaData, 1, 0);
|
|
57
|
+
var bytes = inputTextArray.slice(0, size);
|
|
58
|
+
return textDecoder_1.decode(bytes);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return function () {
|
|
63
|
+
var request = new XMLHttpRequest();
|
|
64
|
+
do {
|
|
65
|
+
// `false` makes the request synchronous
|
|
66
|
+
request.open("GET", INPUT_RELATIVE_URL, false);
|
|
67
|
+
request.send(null);
|
|
68
|
+
} while (request.status >= 400); // todo better error handling
|
|
69
|
+
return request.responseText;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
var Backend = /** @class */ (function () {
|
|
74
|
+
function Backend() {
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
76
|
+
this.onEvent = function () { };
|
|
77
|
+
this.runId = 0;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Initialize the backend, setting up any globals required
|
|
81
|
+
* @param {function(PapyrosEvent):void} onEvent Callback for when events occur
|
|
82
|
+
* @param {Uint8Array} inputTextArray Optional shared buffer for input
|
|
83
|
+
* @param {Int32Array} inputMetaData Optional shared buffer for metadata about input
|
|
84
|
+
* @return {Promise<void>} Promise of launching
|
|
85
|
+
*/
|
|
86
|
+
Backend.prototype.launch = function (onEvent, inputTextArray, inputMetaData) {
|
|
87
|
+
var _this = this;
|
|
88
|
+
var inputCallback = getInputCallback(inputTextArray, inputMetaData);
|
|
89
|
+
this.onEvent = function (e) {
|
|
90
|
+
e.runId = _this.runId;
|
|
91
|
+
onEvent(e);
|
|
92
|
+
if (e.type === "input") {
|
|
93
|
+
return inputCallback();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
return Promise.resolve();
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Validate and run arbitrary code
|
|
100
|
+
* @param {string} code The code to run
|
|
101
|
+
* @param {string} runId The uuid for this execution
|
|
102
|
+
* @return {Promise<void>} Promise of execution
|
|
103
|
+
*/
|
|
104
|
+
Backend.prototype.runCode = function (code, runId) {
|
|
105
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
106
|
+
var data, error_1, errorString;
|
|
107
|
+
return __generator(this, function (_a) {
|
|
108
|
+
switch (_a.label) {
|
|
109
|
+
case 0:
|
|
110
|
+
this.runId = runId;
|
|
111
|
+
papyrosLog(LogType.Debug, "Running code in worker: ", code);
|
|
112
|
+
_a.label = 1;
|
|
113
|
+
case 1:
|
|
114
|
+
_a.trys.push([1, 3, , 4]);
|
|
115
|
+
return [4 /*yield*/, this._runCodeInternal(code)];
|
|
116
|
+
case 2:
|
|
117
|
+
data = _a.sent();
|
|
118
|
+
papyrosLog(LogType.Important, "ran code: " + code + " and received: ", data);
|
|
119
|
+
return [2 /*return*/, this.onEvent({ type: "success", data: data, runId: runId })];
|
|
120
|
+
case 3:
|
|
121
|
+
error_1 = _a.sent();
|
|
122
|
+
errorString = "toString" in error_1 ? error_1.toString() : JSON.stringify(error_1);
|
|
123
|
+
papyrosLog(LogType.Error, "Error during execution: ", error_1, errorString);
|
|
124
|
+
return [2 /*return*/, this.onEvent({ type: "error", data: errorString, runId: runId })];
|
|
125
|
+
case 4: return [2 /*return*/];
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
return Backend;
|
|
131
|
+
}());
|
|
132
|
+
export { Backend };
|
|
133
|
+
//# sourceMappingURL=Backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backend.js","sourceRoot":"","sources":["../src/Backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Remote } from "comlink";
|
|
2
|
+
import { Backend } from "./Backend";
|
|
3
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
4
|
+
export declare function getBackend(language: ProgrammingLanguage): Remote<Backend>;
|
|
5
|
+
export declare function stopBackend(backend: Remote<Backend>): void;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import { releaseProxy, wrap } from "comlink";
|
|
3
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
4
|
+
// Store Worker per Backend as Comlink proxy has no explicit reference to the Worker
|
|
5
|
+
// We need the Worker itself to be able to terminate it (@see stopBackend)
|
|
6
|
+
var BACKEND_MAP = new Map();
|
|
7
|
+
export function getBackend(language) {
|
|
8
|
+
var worker;
|
|
9
|
+
switch (language) {
|
|
10
|
+
// Requires switch to have actual string constants and make webpack bundle the workers
|
|
11
|
+
case ProgrammingLanguage.Python: {
|
|
12
|
+
worker = new Worker(new URL("./workers/python/PythonWorker.worker.ts", import.meta.url));
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
case ProgrammingLanguage.JavaScript: {
|
|
16
|
+
worker = new Worker(new URL("./workers/javascript/JavaScriptWorker.worker.ts", import.meta.url));
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
default: {
|
|
20
|
+
throw new Error(language + " is not yet supported.");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
var backend = wrap(worker);
|
|
24
|
+
// store worker itself in the map
|
|
25
|
+
BACKEND_MAP.set(backend, worker);
|
|
26
|
+
return backend;
|
|
27
|
+
}
|
|
28
|
+
export function stopBackend(backend) {
|
|
29
|
+
if (BACKEND_MAP.has(backend)) {
|
|
30
|
+
var toStop = BACKEND_MAP.get(backend);
|
|
31
|
+
toStop.terminate();
|
|
32
|
+
backend[releaseProxy]();
|
|
33
|
+
BACKEND_MAP.delete(backend);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
throw new Error("Unknown backend supplied for backend " + JSON.stringify(backend));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=BackendManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackendManager.js","sourceRoot":"","sources":["../src/BackendManager.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,YAAY,EAAU,IAAI,EAAE,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,oFAAoF;AACpF,0EAA0E;AAC1E,IAAM,WAAW,GAAiC,IAAI,GAAG,EAAE,CAAC;AAE5D,MAAM,UAAU,UAAU,CAAC,QAA6B;IACpD,IAAI,MAAM,CAAC;IACX,QAAQ,QAAQ,EAAE;QACd,sFAAsF;QACtF,KAAK,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC7B,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACzF,MAAM;SACT;QAED,KAAK,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACjC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,iDAAiD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACjG,MAAM;SACT;QAED,OAAO,CAAC,CAAC;YACL,MAAM,IAAI,KAAK,CAAI,QAAQ,2BAAwB,CAAC,CAAC;SACxD;KACJ;IACD,IAAM,OAAO,GAAG,IAAI,CAAU,MAAM,CAAC,CAAC;IACtC,iCAAiC;IACjC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAwB;IAChD,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC1B,IAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;QACzC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxB,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC/B;SAAM;QACH,MAAM,IAAI,KAAK,CAAC,0CAAwC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAG,CAAC,CAAC;KACtF;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Compartment } from "@codemirror/state";
|
|
2
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
3
|
+
import { EditorView } from "@codemirror/view";
|
|
4
|
+
export declare class CodeEditor {
|
|
5
|
+
editorView: EditorView;
|
|
6
|
+
languageCompartment: Compartment;
|
|
7
|
+
indentCompartment: Compartment;
|
|
8
|
+
constructor(element: HTMLElement, language: ProgrammingLanguage, initialCode?: string, indentLength?: number);
|
|
9
|
+
setLanguage(language: ProgrammingLanguage): void;
|
|
10
|
+
setIndentLength(indentLength: number): void;
|
|
11
|
+
getCode(): string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
+
if (!m) return o;
|
|
4
|
+
var i = m.call(o), r, ar = [], e;
|
|
5
|
+
try {
|
|
6
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
+
}
|
|
8
|
+
catch (error) { e = { error: error }; }
|
|
9
|
+
finally {
|
|
10
|
+
try {
|
|
11
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
+
}
|
|
13
|
+
finally { if (e) throw e.error; }
|
|
14
|
+
}
|
|
15
|
+
return ar;
|
|
16
|
+
};
|
|
17
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
18
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
19
|
+
if (ar || !(i in from)) {
|
|
20
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
21
|
+
ar[i] = from[i];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
|
+
};
|
|
26
|
+
import { indentWithTab } from "@codemirror/commands";
|
|
27
|
+
import { javascript } from "@codemirror/lang-javascript";
|
|
28
|
+
import { indentUnit } from "@codemirror/language";
|
|
29
|
+
import { Compartment, EditorState } from "@codemirror/state";
|
|
30
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
31
|
+
import { python } from "@codemirror/lang-python";
|
|
32
|
+
import { EditorView, keymap, highlightSpecialChars, drawSelection, highlightActiveLine } from "@codemirror/view";
|
|
33
|
+
import { history, historyKeymap } from "@codemirror/history";
|
|
34
|
+
import { foldGutter, foldKeymap } from "@codemirror/fold";
|
|
35
|
+
import { indentOnInput } from "@codemirror/language";
|
|
36
|
+
import { lineNumbers, highlightActiveLineGutter } from "@codemirror/gutter";
|
|
37
|
+
import { defaultKeymap } from "@codemirror/commands";
|
|
38
|
+
import { bracketMatching } from "@codemirror/matchbrackets";
|
|
39
|
+
import { closeBrackets, closeBracketsKeymap } from "@codemirror/closebrackets";
|
|
40
|
+
import { searchKeymap, highlightSelectionMatches } from "@codemirror/search";
|
|
41
|
+
import { autocompletion, completionKeymap } from "@codemirror/autocomplete";
|
|
42
|
+
import { commentKeymap } from "@codemirror/comment";
|
|
43
|
+
import { rectangularSelection } from "@codemirror/rectangular-selection";
|
|
44
|
+
import { defaultHighlightStyle } from "@codemirror/highlight";
|
|
45
|
+
import { lintKeymap } from "@codemirror/lint";
|
|
46
|
+
function getLanguageSupport(language) {
|
|
47
|
+
switch (language) {
|
|
48
|
+
case ProgrammingLanguage.Python: {
|
|
49
|
+
return python();
|
|
50
|
+
}
|
|
51
|
+
case ProgrammingLanguage.JavaScript: {
|
|
52
|
+
return javascript();
|
|
53
|
+
}
|
|
54
|
+
default: {
|
|
55
|
+
throw new Error(language + " is not yet supported.");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/*
|
|
60
|
+
* - [syntax highlighting depending on the language](#getLanguageSupport)
|
|
61
|
+
* - [line numbers](#gutter.lineNumbers)
|
|
62
|
+
* - [special character highlighting](#view.highlightSpecialChars)
|
|
63
|
+
* - [the undo history](#history.history)
|
|
64
|
+
* - [a fold gutter](#fold.foldGutter)
|
|
65
|
+
* - [custom selection drawing](#view.drawSelection)
|
|
66
|
+
* - [multiple selections](#state.EditorState^allowMultipleSelections)
|
|
67
|
+
* - [reindentation on input](#language.indentOnInput)
|
|
68
|
+
* - [the default highlight style](#highlight.defaultHighlightStyle) (as fallback)
|
|
69
|
+
* - [bracket matching](#matchbrackets.bracketMatching)
|
|
70
|
+
* - [bracket closing](#closebrackets.closeBrackets)
|
|
71
|
+
* - [autocompletion](#autocomplete.autocompletion)
|
|
72
|
+
* - [rectangular selection](#rectangular-selection.rectangularSelection)
|
|
73
|
+
* - [active line highlighting](#view.highlightActiveLine)
|
|
74
|
+
* - [active line gutter highlighting](#gutter.highlightActiveLineGutter)
|
|
75
|
+
* - [selection match highlighting](#search.highlightSelectionMatches)
|
|
76
|
+
* Keymaps:
|
|
77
|
+
* - [the default command bindings](#commands.defaultKeymap)
|
|
78
|
+
* - [search](#search.searchKeymap)
|
|
79
|
+
* - [commenting](#comment.commentKeymap)
|
|
80
|
+
* - [linting](#lint.lintKeymap)
|
|
81
|
+
* - [indenting with tab](#commands.indentWithTab)
|
|
82
|
+
*/
|
|
83
|
+
function getExtensions() {
|
|
84
|
+
return [
|
|
85
|
+
lineNumbers(),
|
|
86
|
+
highlightActiveLineGutter(),
|
|
87
|
+
highlightSpecialChars(),
|
|
88
|
+
history(),
|
|
89
|
+
foldGutter(),
|
|
90
|
+
drawSelection(),
|
|
91
|
+
EditorState.allowMultipleSelections.of(true),
|
|
92
|
+
indentOnInput(),
|
|
93
|
+
defaultHighlightStyle.fallback,
|
|
94
|
+
bracketMatching(),
|
|
95
|
+
closeBrackets(),
|
|
96
|
+
autocompletion(),
|
|
97
|
+
rectangularSelection(),
|
|
98
|
+
highlightActiveLine(),
|
|
99
|
+
highlightSelectionMatches(),
|
|
100
|
+
keymap.of(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(closeBracketsKeymap), false), __read(defaultKeymap), false), __read(searchKeymap), false), __read(historyKeymap), false), __read(foldKeymap), false), __read(commentKeymap), false), __read(completionKeymap), false), __read(lintKeymap), false)),
|
|
101
|
+
keymap.of([indentWithTab])
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
function getEditorView(parentElement, initialCode, extensions) {
|
|
105
|
+
if (initialCode === void 0) { initialCode = ""; }
|
|
106
|
+
if (extensions === void 0) { extensions = []; }
|
|
107
|
+
return new EditorView({
|
|
108
|
+
state: EditorState.create({
|
|
109
|
+
doc: initialCode,
|
|
110
|
+
extensions: extensions
|
|
111
|
+
}),
|
|
112
|
+
parent: parentElement
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function getIndentUnit(indentLength) {
|
|
116
|
+
return new Array(indentLength).fill(" ").join("");
|
|
117
|
+
}
|
|
118
|
+
var CodeEditor = /** @class */ (function () {
|
|
119
|
+
function CodeEditor(element, language, initialCode, indentLength) {
|
|
120
|
+
if (indentLength === void 0) { indentLength = 4; }
|
|
121
|
+
this.languageCompartment = new Compartment();
|
|
122
|
+
this.indentCompartment = new Compartment();
|
|
123
|
+
this.editorView = getEditorView(element, initialCode, __spreadArray([
|
|
124
|
+
this.languageCompartment.of(getLanguageSupport(language)),
|
|
125
|
+
this.indentCompartment.of(indentUnit.of(getIndentUnit(indentLength))),
|
|
126
|
+
keymap.of([indentWithTab])
|
|
127
|
+
], __read(getExtensions()), false));
|
|
128
|
+
element.replaceChildren(this.editorView.dom);
|
|
129
|
+
}
|
|
130
|
+
CodeEditor.prototype.setLanguage = function (language) {
|
|
131
|
+
this.editorView.dispatch({
|
|
132
|
+
effects: this.languageCompartment.reconfigure(getLanguageSupport(language))
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
CodeEditor.prototype.setIndentLength = function (indentLength) {
|
|
136
|
+
this.editorView.dispatch({
|
|
137
|
+
effects: this.indentCompartment.reconfigure(indentUnit.of(getIndentUnit(indentLength)))
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
CodeEditor.prototype.getCode = function () {
|
|
141
|
+
return this.editorView.state.doc.toString();
|
|
142
|
+
};
|
|
143
|
+
return CodeEditor;
|
|
144
|
+
}());
|
|
145
|
+
export { CodeEditor };
|
|
146
|
+
//# sourceMappingURL=CodeEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../src/CodeEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
2
|
+
export declare const MAIN_APP_ID = "papyros";
|
|
3
|
+
export declare const OUTPUT_TA_ID = "code-output-area";
|
|
4
|
+
export declare const INPUT_TA_ID = "code-input-area";
|
|
5
|
+
export declare const EDITOR_WRAPPER_ID = "code-area";
|
|
6
|
+
export declare const STATE_SPINNER_ID = "state-spinner";
|
|
7
|
+
export declare const APPLICATION_STATE_TEXT_ID = "application-state-text";
|
|
8
|
+
export declare const RUN_BTN_ID = "run-code-btn";
|
|
9
|
+
export declare const TERMINATE_BTN_ID = "terminate-btn";
|
|
10
|
+
export declare const PROGRAMMING_LANGUAGE_SELECT_ID = "programming-language-select";
|
|
11
|
+
export declare const DEFAULT_PROGRAMMING_LANGUAGE = ProgrammingLanguage.Python;
|
|
12
|
+
export declare const LOCALE_SELECT_ID = "locale-select";
|
|
13
|
+
export declare const DEFAULT_LOCALE = "nl";
|
|
14
|
+
export declare const INPUT_RELATIVE_URL = "/__papyros_input";
|
|
15
|
+
export declare const SERVICE_WORKER_PATH = "./inputServiceWorker.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
2
|
+
export var MAIN_APP_ID = "papyros";
|
|
3
|
+
export var OUTPUT_TA_ID = "code-output-area";
|
|
4
|
+
export var INPUT_TA_ID = "code-input-area";
|
|
5
|
+
export var EDITOR_WRAPPER_ID = "code-area";
|
|
6
|
+
export var STATE_SPINNER_ID = "state-spinner";
|
|
7
|
+
export var APPLICATION_STATE_TEXT_ID = "application-state-text";
|
|
8
|
+
export var RUN_BTN_ID = "run-code-btn";
|
|
9
|
+
export var TERMINATE_BTN_ID = "terminate-btn";
|
|
10
|
+
export var PROGRAMMING_LANGUAGE_SELECT_ID = "programming-language-select";
|
|
11
|
+
export var DEFAULT_PROGRAMMING_LANGUAGE = ProgrammingLanguage.Python;
|
|
12
|
+
export var LOCALE_SELECT_ID = "locale-select";
|
|
13
|
+
export var DEFAULT_LOCALE = "nl";
|
|
14
|
+
export var INPUT_RELATIVE_URL = "/__papyros_input";
|
|
15
|
+
export var SERVICE_WORKER_PATH = "./inputServiceWorker.js";
|
|
16
|
+
//# 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,MAAM,CAAC,IAAM,WAAW,GAAG,SAAS,CAAC;AAErC,MAAM,CAAC,IAAM,YAAY,GAAG,kBAAkB,CAAC;AAC/C,MAAM,CAAC,IAAM,WAAW,GAAG,iBAAiB,CAAC;AAC7C,MAAM,CAAC,IAAM,iBAAiB,GAAG,WAAW,CAAC;AAE7C,MAAM,CAAC,IAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,MAAM,CAAC,IAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAElE,MAAM,CAAC,IAAM,UAAU,GAAG,cAAc,CAAC;AACzC,MAAM,CAAC,IAAM,gBAAgB,GAAG,eAAe,CAAC;AAEhD,MAAM,CAAC,IAAM,8BAA8B,GAAG,6BAA6B,CAAC;AAC5E,MAAM,CAAC,IAAM,4BAA4B,GAAG,mBAAmB,CAAC,MAAM,CAAC;AAEvE,MAAM,CAAC,IAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,MAAM,CAAC,IAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,MAAM,CAAC,IAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,IAAM,mBAAmB,GAAG,yBAAyB,CAAC"}
|
package/dist/Main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/Main.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DEFAULT_LOCALE, DEFAULT_PROGRAMMING_LANGUAGE, MAIN_APP_ID, SERVICE_WORKER_PATH } from "./Constants";
|
|
2
|
+
import { Papyros } from "./Papyros";
|
|
3
|
+
import { papyrosLog, LogType } from "./util/Logging";
|
|
4
|
+
import { plFromString } from "./ProgrammingLanguage";
|
|
5
|
+
var RELOAD_STORAGE_KEY = "__papyros_reloading";
|
|
6
|
+
if (window.localStorage.getItem(RELOAD_STORAGE_KEY)) {
|
|
7
|
+
// We are the result of the page reload, so we can start
|
|
8
|
+
window.localStorage.removeItem(RELOAD_STORAGE_KEY);
|
|
9
|
+
startPapyros();
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
if (typeof SharedArrayBuffer === "undefined") {
|
|
13
|
+
papyrosLog(LogType.Important, "SharedArrayBuffers are not available. ");
|
|
14
|
+
if ("serviceWorker" in navigator) {
|
|
15
|
+
papyrosLog(LogType.Important, "Registering service worker.");
|
|
16
|
+
// Store that we are reloading, to prevent the next load from doing all this again
|
|
17
|
+
window.localStorage.setItem(RELOAD_STORAGE_KEY, RELOAD_STORAGE_KEY);
|
|
18
|
+
navigator.serviceWorker.register(SERVICE_WORKER_PATH, { scope: "" })
|
|
19
|
+
// service worker adds new headers that may allow SharedArrayBuffers to be used
|
|
20
|
+
.then(function () { return window.location.reload(); });
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
document.getElementById(MAIN_APP_ID).innerHTML =
|
|
24
|
+
"Your browser is unsupported. \n Please use a modern version of Chrome, Safari, Firefox, ...";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
startPapyros();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function startPapyros() {
|
|
32
|
+
var rootElement = document.getElementById("root");
|
|
33
|
+
var urlParams = new URLSearchParams(window.location.search);
|
|
34
|
+
var language = plFromString(urlParams.get("language") || DEFAULT_PROGRAMMING_LANGUAGE);
|
|
35
|
+
var locale = urlParams.get("locale") || DEFAULT_LOCALE;
|
|
36
|
+
Papyros.fromElement(rootElement, {
|
|
37
|
+
standAlone: true,
|
|
38
|
+
programmingLanguage: language,
|
|
39
|
+
locale: locale
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=Main.js.map
|
package/dist/Main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EAAE,4BAA4B,EAC5C,WAAW,EAAE,mBAAmB,EACnC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,IAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAGjD,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;IACjD,wDAAwD;IACxD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACnD,YAAY,EAAE,CAAC;CAClB;KAAM;IACH,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;QAC1C,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC;QACxE,IAAI,eAAe,IAAI,SAAS,EAAE;YAC9B,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;YAC7D,kFAAkF;YAClF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;YACpE,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBAChE,+EAA+E;iBAC9E,IAAI,CAAC,cAAM,OAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAxB,CAAwB,CAAC,CAAC;SAC7C;aAAM;YACH,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC,SAAS;gBAC3C,6GAC6D,CAAC;SACrE;KACJ;SAAM;QACH,YAAY,EAAE,CAAC;KAClB;CACJ;AAGD,SAAS,YAAY;IACjB,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC;IACrD,IAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,4BAA4B,CAAC,CAAC;IACzF,IAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;IACzD,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;QAC7B,UAAU,EAAE,IAAI;QAChB,mBAAmB,EAAE,QAAQ;QAC7B,MAAM,EAAE,MAAM;KACjB,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import "./Papyros.css";
|
|
2
|
+
import { Remote } from "comlink";
|
|
3
|
+
import { Backend } from "./Backend";
|
|
4
|
+
import { CodeEditor } from "./CodeEditor";
|
|
5
|
+
import { PapyrosEvent } from "./PapyrosEvent";
|
|
6
|
+
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
7
|
+
declare enum PapyrosState {
|
|
8
|
+
Loading = "loading",
|
|
9
|
+
Running = "running",
|
|
10
|
+
AwaitingInput = "awaiting_input",
|
|
11
|
+
Terminating = "terminating",
|
|
12
|
+
Ready = "ready"
|
|
13
|
+
}
|
|
14
|
+
declare class PapyrosStateManager {
|
|
15
|
+
state: PapyrosState;
|
|
16
|
+
stateSpinner: HTMLElement;
|
|
17
|
+
stateText: HTMLElement;
|
|
18
|
+
runButton: HTMLButtonElement;
|
|
19
|
+
terminateButton: HTMLButtonElement;
|
|
20
|
+
constructor();
|
|
21
|
+
setState(state: PapyrosState, message?: string): void;
|
|
22
|
+
}
|
|
23
|
+
interface PapyrosCodeState {
|
|
24
|
+
programmingLanguage: ProgrammingLanguage;
|
|
25
|
+
editor: CodeEditor;
|
|
26
|
+
backend: Remote<Backend>;
|
|
27
|
+
runId: number;
|
|
28
|
+
outputArea: HTMLInputElement;
|
|
29
|
+
}
|
|
30
|
+
interface PapyrosInputState {
|
|
31
|
+
lineNr: number;
|
|
32
|
+
textEncoder: TextEncoder;
|
|
33
|
+
inputArea: HTMLInputElement;
|
|
34
|
+
inputTextArray?: Uint8Array;
|
|
35
|
+
inputMetaData?: Int32Array;
|
|
36
|
+
}
|
|
37
|
+
interface PapyrosConfig {
|
|
38
|
+
standAlone: boolean;
|
|
39
|
+
locale: string;
|
|
40
|
+
programmingLanguage: ProgrammingLanguage;
|
|
41
|
+
}
|
|
42
|
+
export declare class Papyros {
|
|
43
|
+
stateManager: PapyrosStateManager;
|
|
44
|
+
codeState: PapyrosCodeState;
|
|
45
|
+
inputState: PapyrosInputState;
|
|
46
|
+
constructor(programmingLanguage: ProgrammingLanguage, inputTextArray?: Uint8Array, inputMetaData?: Int32Array);
|
|
47
|
+
launch(): Promise<Papyros>;
|
|
48
|
+
setProgrammingLanguage(programmingLanguage: ProgrammingLanguage): Promise<void>;
|
|
49
|
+
startBackend(): Promise<void>;
|
|
50
|
+
static fromElement(parent: HTMLElement, config: PapyrosConfig): Promise<Papyros>;
|
|
51
|
+
onError(e: PapyrosEvent): void;
|
|
52
|
+
sendInput(): Promise<boolean>;
|
|
53
|
+
onInput(e: PapyrosEvent): Promise<void>;
|
|
54
|
+
onMessage(e: PapyrosEvent): void;
|
|
55
|
+
runCode(): Promise<void>;
|
|
56
|
+
terminate(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
export {};
|