@dodona/papyros 0.1.4-rc → 0.1.8-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.
Files changed (46) hide show
  1. package/dist/Backend.d.ts +22 -0
  2. package/dist/Backend.js +133 -0
  3. package/dist/Backend.js.map +1 -0
  4. package/dist/BackendManager.d.ts +5 -0
  5. package/dist/BackendManager.js +39 -0
  6. package/dist/BackendManager.js.map +1 -0
  7. package/dist/CodeEditor.d.ts +12 -0
  8. package/dist/CodeEditor.js +146 -0
  9. package/dist/CodeEditor.js.map +1 -0
  10. package/dist/Constants.d.ts +15 -0
  11. package/dist/Constants.js +16 -0
  12. package/dist/Constants.js.map +1 -0
  13. package/dist/Main.d.ts +1 -0
  14. package/dist/Main.js +42 -0
  15. package/dist/Main.js.map +1 -0
  16. package/dist/Papyros.css +9 -0
  17. package/dist/Papyros.d.ts +58 -0
  18. package/dist/Papyros.js +390 -0
  19. package/dist/Papyros.js.map +1 -0
  20. package/dist/PapyrosEvent.d.ts +5 -0
  21. package/dist/PapyrosEvent.js +2 -0
  22. package/dist/PapyrosEvent.js.map +1 -0
  23. package/dist/ProgrammingLanguage.d.ts +6 -0
  24. package/dist/ProgrammingLanguage.js +23 -0
  25. package/dist/ProgrammingLanguage.js.map +1 -0
  26. package/dist/Translations.d.ts +40 -0
  27. package/dist/Translations.js +39 -0
  28. package/dist/Translations.js.map +1 -0
  29. package/dist/util/Logging.d.ts +6 -0
  30. package/dist/util/Logging.js +48 -0
  31. package/dist/util/Logging.js.map +1 -0
  32. package/dist/workers/javascript/JavaScriptWorker.worker.d.ts +1 -0
  33. package/dist/workers/javascript/JavaScriptWorker.worker.js +91 -0
  34. package/dist/workers/javascript/JavaScriptWorker.worker.js.map +1 -0
  35. package/dist/workers/python/PythonWorker.worker.d.ts +1 -0
  36. package/dist/workers/python/PythonWorker.worker.js +161 -0
  37. package/dist/workers/python/PythonWorker.worker.js.map +1 -0
  38. package/dist/workers/python/init.py.d.ts +1 -0
  39. package/dist/workers/python/init.py.js +2 -0
  40. package/dist/workers/python/init.py.js.map +1 -0
  41. package/package.json +5 -7
  42. package/dist/114.index.js +0 -1
  43. package/dist/572.index.js +0 -1
  44. package/dist/806.index.js +0 -1
  45. package/dist/index.d.ts +0 -189
  46. package/dist/index.js +0 -1
@@ -0,0 +1,91 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __values = (this && this.__values) || function(o) {
17
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
18
+ if (m) return m.call(o);
19
+ if (o && typeof o.length === "number") return {
20
+ next: function () {
21
+ if (o && i >= o.length) o = void 0;
22
+ return { value: o && o[i++], done: !o };
23
+ }
24
+ };
25
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
26
+ };
27
+ var __read = (this && this.__read) || function (o, n) {
28
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
29
+ if (!m) return o;
30
+ var i = m.call(o), r, ar = [], e;
31
+ try {
32
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
33
+ }
34
+ catch (error) { e = { error: error }; }
35
+ finally {
36
+ try {
37
+ if (r && !r.done && (m = i["return"])) m.call(i);
38
+ }
39
+ finally { if (e) throw e.error; }
40
+ }
41
+ return ar;
42
+ };
43
+ import { expose } from "comlink";
44
+ import { Backend } from "../../Backend";
45
+ var JavaScriptWorker = /** @class */ (function (_super) {
46
+ __extends(JavaScriptWorker, _super);
47
+ function JavaScriptWorker() {
48
+ return _super !== null && _super.apply(this, arguments) || this;
49
+ }
50
+ JavaScriptWorker.prototype._runCodeInternal = function (code) {
51
+ var e_1, _a;
52
+ var toRestore = new Map([
53
+ ["prompt", "__prompt"],
54
+ ["console.log", "__papyros_log"],
55
+ ["console.error", "__papyros_error"]
56
+ ]);
57
+ var overrideBuiltins = "\nfunction prompt(text=\"\", defaultText=\"\"){\n __onEvent({\"type\": \"output\", \"data\": text});\n const promptedValue = __onEvent({\"type\": \"input\", \"data\": text});\n __onEvent({\"type\": \"output\", \"data\": promptedValue + \"\\n\"});\n return promptedValue;\n}\nfunction __stringify(args, addNewline=false){\n let asString = \"\";\n if(Array.isArray(args)){\n if(args.length === 1){\n asString = JSON.stringify(args[0]);\n } else {\n asString = args.map(s => {\n if(typeof s === 'string' || s instanceof String){\n return s; // prevent spurious quotes\n } else {\n return JSON.stringify(s);\n }\n }).join(\" \");\n }\n } else {\n asString = JSON.stringify(args);\n }\n if(addNewline){\n asString += \"\\n\";\n }\n return asString;\n}\nconsole.log = (...args) => {\n __onEvent({\"type\": \"output\", \"data\": __stringify(args, true)});\n}\nconsole.error = (...args) => {\n __onEvent({\"type\": \"error\", \"data\": __stringify(args, true)});\n}\n ";
58
+ var newContext = {
59
+ "__onEvent": this.onEvent.bind(this)
60
+ };
61
+ var restoreBuiltins = [];
62
+ var newBody = [];
63
+ for (var k in newContext) {
64
+ if (Object.prototype.hasOwnProperty.call(newContext, k)) {
65
+ newBody.push("const " + k + " = ctx['" + k + "'];");
66
+ }
67
+ }
68
+ try {
69
+ for (var _b = __values(toRestore.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
70
+ var _d = __read(_c.value, 2), fn = _d[0], backup = _d[1];
71
+ newBody.push(backup + " = " + fn);
72
+ restoreBuiltins.push(fn + " = " + backup);
73
+ }
74
+ }
75
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
76
+ finally {
77
+ try {
78
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
79
+ }
80
+ finally { if (e_1) throw e_1.error; }
81
+ }
82
+ newBody.push(overrideBuiltins);
83
+ newBody.push("\ntry {\n" + code + "\n} finally {\n" + restoreBuiltins.join("\n") + "\n}\n ");
84
+ var fnBody = newBody.join("\n");
85
+ // eslint-disable-next-line no-new-func
86
+ return Promise.resolve(new Function("ctx", fnBody)(newContext));
87
+ };
88
+ return JavaScriptWorker;
89
+ }(Backend));
90
+ expose(new JavaScriptWorker());
91
+ //# sourceMappingURL=JavaScriptWorker.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JavaScriptWorker.worker.js","sourceRoot":"","sources":["../../../src/workers/javascript/JavaScriptWorker.worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;IAA+B,oCAAO;IAAtC;;IAqEA,CAAC;IApEY,2CAAgB,GAAzB,UAA0B,IAAY;;QAClC,IAAM,SAAS,GAAG,IAAI,GAAG,CAAC;YACtB,CAAC,QAAQ,EAAE,UAAU,CAAC;YACtB,CAAC,aAAa,EAAE,eAAe,CAAC;YAChC,CAAC,eAAe,EAAE,iBAAiB,CAAC;SACvC,CAAC,CAAC;QACH,IAAM,gBAAgB,GAAG,uoCAmCxB,CAAC;QACF,IAAM,UAAU,GAAG;YACf,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SACvC,CAAC;QACF,IAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAM,CAAC,IAAI,UAAU,EAAE;YACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE;gBACrD,OAAO,CAAC,IAAI,CAAC,WAAS,CAAC,gBAAW,CAAC,QAAK,CAAC,CAAC;aAC7C;SACJ;;YACD,KAA2B,IAAA,KAAA,SAAA,SAAS,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;gBAArC,IAAA,KAAA,mBAAY,EAAX,EAAE,QAAA,EAAE,MAAM,QAAA;gBAClB,OAAO,CAAC,IAAI,CAAI,MAAM,WAAM,EAAI,CAAC,CAAC;gBAClC,eAAe,CAAC,IAAI,CAAI,EAAE,WAAM,MAAQ,CAAC,CAAC;aAC7C;;;;;;;;;QACD,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,cAEnB,IAAI,uBAEJ,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,kBAEnB,CAAC,CAAC;QACH,IAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,uCAAuC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,CAAC;IACL,uBAAC;AAAD,CAAC,AArED,CAA+B,OAAO,GAqErC;AAED,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,161 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (_) try {
32
+ 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;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
52
+ var __values = (this && this.__values) || function(o) {
53
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
54
+ if (m) return m.call(o);
55
+ if (o && typeof o.length === "number") return {
56
+ next: function () {
57
+ if (o && i >= o.length) o = void 0;
58
+ return { value: o && o[i++], done: !o };
59
+ }
60
+ };
61
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
62
+ };
63
+ import { expose } from "comlink";
64
+ import { Backend } from "../../Backend";
65
+ import { INITIALIZATION_CODE } from "./init.py";
66
+ importScripts("https://cdn.jsdelivr.net/pyodide/v0.18.1/full/pyodide.js");
67
+ var PythonWorker = /** @class */ (function (_super) {
68
+ __extends(PythonWorker, _super);
69
+ function PythonWorker() {
70
+ var _this = _super.call(this) || this;
71
+ _this.pyodide = {};
72
+ _this.initialized = false;
73
+ _this.globals = new Map();
74
+ return _this;
75
+ }
76
+ PythonWorker.prototype.launch = function (onEvent, inputTextArray, inputMetaData) {
77
+ return __awaiter(this, void 0, void 0, function () {
78
+ var pyodide, eventCallback;
79
+ var _this = this;
80
+ return __generator(this, function (_a) {
81
+ switch (_a.label) {
82
+ case 0: return [4 /*yield*/, _super.prototype.launch.call(this, onEvent, inputTextArray, inputMetaData)];
83
+ case 1:
84
+ _a.sent();
85
+ return [4 /*yield*/, loadPyodide({
86
+ indexURL: "https://cdn.jsdelivr.net/pyodide/v0.18.1/full/",
87
+ fullStdLib: false
88
+ })];
89
+ case 2:
90
+ pyodide = _a.sent();
91
+ this.pyodide = pyodide;
92
+ return [4 /*yield*/, this.runCode(INITIALIZATION_CODE, 0)];
93
+ case 3:
94
+ _a.sent();
95
+ eventCallback = function (data) {
96
+ var jsEvent = "toJs" in data ? data.toJs() : Object.fromEntries(data);
97
+ return _this.onEvent(jsEvent);
98
+ };
99
+ this.pyodide.globals.get("__override_builtins")(eventCallback);
100
+ this.globals = new Map(this.pyodide.globals.toJs());
101
+ this.initialized = true;
102
+ return [2 /*return*/];
103
+ }
104
+ });
105
+ });
106
+ };
107
+ PythonWorker.prototype._cleanScope = function () {
108
+ var e_1, _a;
109
+ // Find the newly added globals
110
+ var pyodideGlobals = this.pyodide.globals;
111
+ var keysToRemove = [];
112
+ try {
113
+ for (var _b = __values(pyodideGlobals.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
114
+ var key = _c.value;
115
+ if (!this.globals.has(key)) {
116
+ keysToRemove.push(key);
117
+ }
118
+ else {
119
+ // Reset value in case it was overriden
120
+ pyodideGlobals.set(key, this.globals.get(key));
121
+ }
122
+ }
123
+ }
124
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
125
+ finally {
126
+ try {
127
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
128
+ }
129
+ finally { if (e_1) throw e_1.error; }
130
+ }
131
+ // Remove them from the actual globals
132
+ // Separate runs of code should not be able to access variables/functions
133
+ // that were defined earlier on, as this could cause non-obvious bugs
134
+ keysToRemove.forEach(function (k) { return pyodideGlobals.delete(k); });
135
+ };
136
+ PythonWorker.prototype._runCodeInternal = function (code) {
137
+ return __awaiter(this, void 0, void 0, function () {
138
+ var result;
139
+ return __generator(this, function (_a) {
140
+ switch (_a.label) {
141
+ case 0: return [4 /*yield*/, this.pyodide.loadPackagesFromImports(code)];
142
+ case 1:
143
+ _a.sent();
144
+ if (this.initialized) {
145
+ result = this.pyodide.runPython(code);
146
+ // Cleanup the scope after computations are done
147
+ this._cleanScope();
148
+ return [2 /*return*/, result];
149
+ }
150
+ else {
151
+ return [2 /*return*/, this.pyodide.runPythonAsync(code)];
152
+ }
153
+ return [2 /*return*/];
154
+ }
155
+ });
156
+ });
157
+ };
158
+ return PythonWorker;
159
+ }(Backend));
160
+ expose(new PythonWorker());
161
+ //# sourceMappingURL=PythonWorker.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PythonWorker.worker.js","sourceRoot":"","sources":["../../../src/workers/python/PythonWorker.worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const INITIALIZATION_CODE = "\nfrom pyodide import to_js\nimport sys\n\ndef __override_builtins(cb):\n __capture_stdout(cb)\n __override_stdin(cb)\n # set name to main instead of builtins\n globals()[\"__name__\"] = \"__main__\"\n\ndef __capture_stdout(cb):\n class _OutputWriter:\n def __init__(self):\n self.encoding = \"utf-8\"\n \n def write(self, s):\n cb(to_js({\"type\": \"output\", \"data\":s}))\n\n def flush(self):\n pass # Given data is always immediately written\n\n sys.stdout = _OutputWriter()\n\n__papyros_input = \"\"\ndef __override_stdin(cb):\n def __papyros_readline(n=-1):\n global __papyros_input\n if not __papyros_input:\n __papyros_input = cb(to_js({\"type\": \"input\", \"data\":\"next line\"})) + \"\\n\"\n if n < 0 or n > len(__papyros_input):\n n = len(__papyros_input)\n to_return = __papyros_input[0:n]\n __papyros_input = __papyros_input[n:]\n return to_return\n\n sys.stdin.readline = __papyros_readline\n";
@@ -0,0 +1,2 @@
1
+ export var INITIALIZATION_CODE = "\nfrom pyodide import to_js\nimport sys\n\ndef __override_builtins(cb):\n __capture_stdout(cb)\n __override_stdin(cb)\n # set name to main instead of builtins\n globals()[\"__name__\"] = \"__main__\"\n\ndef __capture_stdout(cb):\n class _OutputWriter:\n def __init__(self):\n self.encoding = \"utf-8\"\n \n def write(self, s):\n cb(to_js({\"type\": \"output\", \"data\":s}))\n\n def flush(self):\n pass # Given data is always immediately written\n\n sys.stdout = _OutputWriter()\n\n__papyros_input = \"\"\ndef __override_stdin(cb):\n def __papyros_readline(n=-1):\n global __papyros_input\n if not __papyros_input:\n __papyros_input = cb(to_js({\"type\": \"input\", \"data\":\"next line\"})) + \"\\n\"\n if n < 0 or n > len(__papyros_input):\n n = len(__papyros_input)\n to_return = __papyros_input[0:n]\n __papyros_input = __papyros_input[n:]\n return to_return\n\n sys.stdin.readline = __papyros_readline\n";
2
+ //# sourceMappingURL=init.py.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.py.js","sourceRoot":"","sources":["../../../src/workers/python/init.py.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,mBAAmB,GAC5B,uiCAoCH,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@dodona/papyros",
3
- "version": "0.1.4-rc",
3
+ "version": "0.1.8-rc",
4
4
  "description": "Scratchpad for multiple programming languages in the browser.",
5
5
  "scripts": {
6
6
  "start": "webpack serve",
7
- "build": "webpack build --mode production",
7
+ "build": "scripts/build.sh",
8
8
  "test": "echo No tests defined yet",
9
9
  "lint": "eslint --ext '.js' --ext '.ts' src"
10
10
  },
@@ -19,8 +19,7 @@
19
19
  },
20
20
  "homepage": "https://docs.dodona.be/papyros/",
21
21
  "type": "module",
22
- "main": "./dist/index.js",
23
- "types": "./dist/index.d.ts",
22
+ "main": "./dist/Papyros.js",
24
23
  "license": "MIT",
25
24
  "devDependencies": {
26
25
  "@codemirror/language": "^0.19.5",
@@ -44,10 +43,8 @@
44
43
  "postcss-import": "^14.0.2",
45
44
  "postcss-loader": "^6.2.0",
46
45
  "style-loader": "^3.3.1",
47
- "tailwindcss": "^2.2.19",
48
46
  "ts-jest": "^27.0.7",
49
47
  "ts-loader": "^9.2.6",
50
- "types-webpack-bundler": "https://github.com/droyson/types-webpack-bundler",
51
48
  "typescript": "^4.1.2",
52
49
  "webpack": "^5.64.0",
53
50
  "webpack-cli": "^4.9.1",
@@ -66,7 +63,8 @@
66
63
  "@codemirror/search": "^0.19.3",
67
64
  "@codemirror/state": "^0.19.6",
68
65
  "comlink": "^4.3.1",
69
- "i18n-js": "^3.8.0"
66
+ "i18n-js": "^3.8.0",
67
+ "tailwindcss": "^2.2.19"
70
68
  },
71
69
  "babel": {
72
70
  "presets": [
package/dist/114.index.js DELETED
@@ -1 +0,0 @@
1
- "use strict";exports.id=114,exports.ids=[114],exports.modules={872:(e,t,n)=>{var r;n.d(t,{z:()=>c}),function(e){e.Python="Python",e.JavaScript="JavaScript"}(r||(r={})),r.Python,r.JavaScript,new Map([["python",r.Python],["javascript",r.JavaScript]]),r.Python;var o,a=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i},i=function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};function s(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=e!==o.Debug;r&&(e===o.Error?console.error.apply(console,i([],a(t),!1)):console.log.apply(console,i([],a(t),!1)))}!function(e){e[e.Debug=0]="Debug",e[e.Error=1]="Error",e[e.Important=2]="Important"}(o||(o={}));var c=function(){function e(){this.onEvent=function(){},this.runId=0}return e.prototype.launch=function(e,t,n){var r=this,o=function(e,t){if(e&&t){var n=new TextDecoder;return function(){for(;"timed-out"===Atomics.wait(t,0,0,100););Atomics.store(t,0,0);var r=Atomics.exchange(t,1,0),o=e.slice(0,r);return n.decode(o)}}return function(){var e=new XMLHttpRequest;do{e.open("GET","/__papyros_input",!1),e.send(null)}while(e.status>=400);return e.responseText}}(t,n);return this.onEvent=function(t){if(t.runId=r.runId,e(t),"input"===t.type)return o()},Promise.resolve()},e.prototype.runCode=function(e,t){return n=this,r=void 0,i=function(){var n,r,a;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}(this,(function(i){switch(i.label){case 0:this.runId=t,s(o.Debug,"Running code in worker: ",e),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this._runCodeInternal(e)];case 2:return n=i.sent(),s(o.Important,"ran code: "+e+" and received: ",n),[2,this.onEvent({type:"success",data:n,runId:t})];case 3:return r=i.sent(),a="toString"in r?r.toString():JSON.stringify(r),s(o.Error,"Error during execution: ",r,a),[2,this.onEvent({type:"error",data:a,runId:t})];case 4:return[2]}}))},new((a=void 0)||(a=Promise))((function(e,t){function o(e){try{c(i.next(e))}catch(e){t(e)}}function s(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a((function(e){e(n)}))).then(o,s)}c((i=i.apply(n,r||[])).next())}));var n,r,a,i},e}()},375:(e,t,n)=>{n.d(t,{Jj:()=>u});const r=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),i=Symbol("Comlink.thrown"),s=e=>"object"==typeof e&&null!==e||"function"==typeof e,c=new Map([["proxy",{canHandle:e=>s(e)&&e[r],serialize(e){const{port1:t,port2:n}=new MessageChannel;return u(e,t),[n,[n]]},deserialize:e=>(e.start(),f(e,[],undefined))}],["throw",{canHandle:e=>s(e)&&i in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function u(e,t=self){t.addEventListener("message",(function n(o){if(!o||!o.data)return;const{id:a,type:s,path:c}=Object.assign({path:[]},o.data),p=(o.data.argumentList||[]).map(v);let f;try{const t=c.slice(0,-1).reduce(((e,t)=>e[t]),e),n=c.reduce(((e,t)=>e[t]),e);switch(s){case"GET":f=n;break;case"SET":t[c.slice(-1)[0]]=v(o.data.value),f=!0;break;case"APPLY":f=n.apply(t,p);break;case"CONSTRUCT":f=function(e){return Object.assign(e,{[r]:!0})}(new n(...p));break;case"ENDPOINT":{const{port1:t,port2:n}=new MessageChannel;u(e,n),f=function(e,t){return d.set(e,t),e}(t,[t])}break;case"RELEASE":f=void 0;break;default:return}}catch(e){f={value:e,[i]:0}}Promise.resolve(f).catch((e=>({value:e,[i]:0}))).then((e=>{const[r,o]=y(e);t.postMessage(Object.assign(Object.assign({},r),{id:a}),o),"RELEASE"===s&&(t.removeEventListener("message",n),l(t))}))})),t.start&&t.start()}function l(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function p(e){if(e)throw new Error("Proxy has been released and is not useable")}function f(e,t=[],n=function(){}){let r=!1;const i=new Proxy(n,{get(n,o){if(p(r),o===a)return()=>m(e,{type:"RELEASE",path:t.map((e=>e.toString()))}).then((()=>{l(e),r=!0}));if("then"===o){if(0===t.length)return{then:()=>i};const n=m(e,{type:"GET",path:t.map((e=>e.toString()))}).then(v);return n.then.bind(n)}return f(e,[...t,o])},set(n,o,a){p(r);const[i,s]=y(a);return m(e,{type:"SET",path:[...t,o].map((e=>e.toString())),value:i},s).then(v)},apply(n,a,i){p(r);const s=t[t.length-1];if(s===o)return m(e,{type:"ENDPOINT"}).then(v);if("bind"===s)return f(e,t.slice(0,-1));const[c,u]=h(i);return m(e,{type:"APPLY",path:t.map((e=>e.toString())),argumentList:c},u).then(v)},construct(n,o){p(r);const[a,i]=h(o);return m(e,{type:"CONSTRUCT",path:t.map((e=>e.toString())),argumentList:a},i).then(v)}});return i}function h(e){const t=e.map(y);return[t.map((e=>e[0])),(n=t.map((e=>e[1])),Array.prototype.concat.apply([],n))];var n}const d=new WeakMap;function y(e){for(const[t,n]of c)if(n.canHandle(e)){const[r,o]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},o]}return[{type:"RAW",value:e},d.get(e)||[]]}function v(e){switch(e.type){case"HANDLER":return c.get(e.name).deserialize(e.value);case"RAW":return e.value}}function m(e,t,n){return new Promise((r=>{const o=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function t(n){n.data&&n.data.id&&n.data.id===o&&(e.removeEventListener("message",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:o},t),n)}))}}};
package/dist/572.index.js DELETED
@@ -1 +0,0 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Papyros=e():t.Papyros=e()}(global,(function(){return(()=>{"use strict";var t,e,n,r={572:(t,e,n)=>{var r,o=n(375),i=n(872),s=(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),a=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},u=function(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}};importScripts("https://cdn.jsdelivr.net/pyodide/v0.18.1/full/pyodide.js");var l=function(t){function e(){var e=t.call(this)||this;return e.pyodide={},e.initialized=!1,e.globals=new Map,e}return s(e,t),e.prototype.launch=function(e,n,r){return a(this,void 0,void 0,(function(){var o,i,s=this;return u(this,(function(a){switch(a.label){case 0:return[4,t.prototype.launch.call(this,e,n,r)];case 1:return a.sent(),[4,loadPyodide({indexURL:"https://cdn.jsdelivr.net/pyodide/v0.18.1/full/",fullStdLib:!1})];case 2:return o=a.sent(),this.pyodide=o,[4,this.runCode('\nfrom pyodide import to_js\nimport sys\n\ndef __override_builtins(cb):\n __capture_stdout(cb)\n __override_stdin(cb)\n # set name to main instead of builtins\n globals()["__name__"] = "__main__"\n\ndef __capture_stdout(cb):\n class _OutputWriter:\n def __init__(self):\n self.encoding = "utf-8"\n \n def write(self, s):\n cb(to_js({"type": "output", "data":s}))\n\n def flush(self):\n pass # Given data is always immediately written\n\n sys.stdout = _OutputWriter()\n\n__papyros_input = ""\ndef __override_stdin(cb):\n def __papyros_readline(n=-1):\n global __papyros_input\n if not __papyros_input:\n __papyros_input = cb(to_js({"type": "input", "data":"next line"})) + "\\n"\n if n < 0 or n > len(__papyros_input):\n n = len(__papyros_input)\n to_return = __papyros_input[0:n]\n __papyros_input = __papyros_input[n:]\n return to_return\n\n sys.stdin.readline = __papyros_readline\n',0)];case 3:return a.sent(),i=function(t){var e="toJs"in t?t.toJs():Object.fromEntries(t);return s.onEvent(e)},this.pyodide.globals.get("__override_builtins")(i),this.globals=new Map(this.pyodide.globals.toJs()),this.initialized=!0,[2]}}))}))},e.prototype._cleanScope=function(){var t,e,n=this.pyodide.globals,r=[];try{for(var o=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(n.keys()),i=o.next();!i.done;i=o.next()){var s=i.value;this.globals.has(s)?n.set(s,this.globals.get(s)):r.push(s)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}r.forEach((function(t){return n.delete(t)}))},e.prototype._runCodeInternal=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(n){switch(n.label){case 0:return[4,this.pyodide.loadPackagesFromImports(t)];case 1:return n.sent(),this.initialized?(e=this.pyodide.runPython(t),this._cleanScope(),[2,e]):[2,this.pyodide.runPythonAsync(t)]}}))}))},e}(i.z);(0,o.Jj)(new l)}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={exports:{}};return r[t](n,n.exports,i),n.exports}return i.m=r,i.x=()=>{var t=i.O(void 0,[114],(()=>i(572)));return i.O(t)},t=[],i.O=(e,n,r,o)=>{if(!n){var s=1/0;for(p=0;p<t.length;p++){for(var[n,r,o]=t[p],a=!0,u=0;u<n.length;u++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](n[u])))?n.splice(u--,1):(a=!1,o<s&&(s=o));if(a){t.splice(p--,1);var l=r();void 0!==l&&(e=l)}}return e}o=o||0;for(var p=t.length;p>0&&t[p-1][2]>o;p--)t[p]=t[p-1];t[p]=[n,r,o]},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,n)=>(i.f[n](t,e),e)),[])),i.u=t=>t+".index.js",i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={572:1},i.O.require=t=>n[t],i.f.require=(t,e)=>{n[t]||(t=>{var e=t.modules,r=t.ids,o=t.runtime;for(var s in e)i.o(e,s)&&(i.m[s]=e[s]);o&&o(i);for(var a=0;a<r.length;a++)n[r[a]]=1;i.O()})(require("./"+i.u(t)))},e=i.x,i.x=()=>(i.e(114),e()),i.x()})()}));
package/dist/806.index.js DELETED
@@ -1 +0,0 @@
1
- !function(r,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.Papyros=n():r.Papyros=n()}(global,(function(){return(()=>{"use strict";var r,n,t,e={806:(r,n,t)=>{var e,o=t(375),i=t(872),a=(e=function(r,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(r[t]=n[t])},e(r,n)},function(r,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function t(){this.constructor=r}e(r,n),r.prototype=null===n?Object.create(n):(t.prototype=n.prototype,new t)}),s=function(r,n){var t="function"==typeof Symbol&&r[Symbol.iterator];if(!t)return r;var e,o,i=t.call(r),a=[];try{for(;(void 0===n||n-- >0)&&!(e=i.next()).done;)a.push(e.value)}catch(r){o={error:r}}finally{try{e&&!e.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a},u=function(r){function n(){return null!==r&&r.apply(this,arguments)||this}return a(n,r),n.prototype._runCodeInternal=function(r){var n,t,e=new Map([["prompt","__prompt"],["console.log","__papyros_log"],["console.error","__papyros_error"]]),o={__onEvent:this.onEvent.bind(this)},i=[],a=[];for(var u in o)Object.prototype.hasOwnProperty.call(o,u)&&a.push("const "+u+" = ctx['"+u+"'];");try{for(var l=function(r){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&r[n],e=0;if(t)return t.call(r);if(r&&"number"==typeof r.length)return{next:function(){return r&&e>=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}(e.entries()),p=l.next();!p.done;p=l.next()){var f=s(p.value,2),c=f[0],y=f[1];a.push(y+" = "+c),i.push(c+" = "+y)}}catch(r){n={error:r}}finally{try{p&&!p.done&&(t=l.return)&&t.call(l)}finally{if(n)throw n.error}}a.push('\nfunction prompt(text="", defaultText=""){\n __onEvent({"type": "output", "data": text});\n const promptedValue = __onEvent({"type": "input", "data": text});\n __onEvent({"type": "output", "data": promptedValue + "\\n"});\n return promptedValue;\n}\nfunction __stringify(args, addNewline=false){\n let asString = "";\n if(Array.isArray(args)){\n if(args.length === 1){\n asString = JSON.stringify(args[0]);\n } else {\n asString = args.map(s => {\n if(typeof s === \'string\' || s instanceof String){\n return s; // prevent spurious quotes\n } else {\n return JSON.stringify(s);\n }\n }).join(" ");\n }\n } else {\n asString = JSON.stringify(args);\n }\n if(addNewline){\n asString += "\\n";\n }\n return asString;\n}\nconsole.log = (...args) => {\n __onEvent({"type": "output", "data": __stringify(args, true)});\n}\nconsole.error = (...args) => {\n __onEvent({"type": "error", "data": __stringify(args, true)});\n}\n '),a.push("\ntry {\n"+r+"\n} finally {\n"+i.join("\n")+"\n}\n ");var v=a.join("\n");return Promise.resolve(new Function("ctx",v)(o))},n}(i.z);(0,o.Jj)(new u)}},o={};function i(r){var n=o[r];if(void 0!==n)return n.exports;var t=o[r]={exports:{}};return e[r](t,t.exports,i),t.exports}return i.m=e,i.x=()=>{var r=i.O(void 0,[114],(()=>i(806)));return i.O(r)},r=[],i.O=(n,t,e,o)=>{if(!t){var a=1/0;for(p=0;p<r.length;p++){for(var[t,e,o]=r[p],s=!0,u=0;u<t.length;u++)(!1&o||a>=o)&&Object.keys(i.O).every((r=>i.O[r](t[u])))?t.splice(u--,1):(s=!1,o<a&&(a=o));if(s){r.splice(p--,1);var l=e();void 0!==l&&(n=l)}}return n}o=o||0;for(var p=r.length;p>0&&r[p-1][2]>o;p--)r[p]=r[p-1];r[p]=[t,e,o]},i.d=(r,n)=>{for(var t in n)i.o(n,t)&&!i.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:n[t]})},i.f={},i.e=r=>Promise.all(Object.keys(i.f).reduce(((n,t)=>(i.f[t](r,n),n)),[])),i.u=r=>r+".index.js",i.o=(r,n)=>Object.prototype.hasOwnProperty.call(r,n),t={806:1},i.O.require=r=>t[r],i.f.require=(r,n)=>{t[r]||(r=>{var n=r.modules,e=r.ids,o=r.runtime;for(var a in n)i.o(n,a)&&(i.m[a]=n[a]);o&&o(i);for(var s=0;s<e.length;s++)t[e[s]]=1;i.O()})(require("./"+i.u(r)))},n=i.x,i.x=()=>(i.e(114),n()),i.x()})()}));
package/dist/index.d.ts DELETED
@@ -1,189 +0,0 @@
1
- declare module Papyros
2
- {
3
- import { PapyrosEvent } from "./PapyrosEvent";
4
- export abstract class Backend {
5
- onEvent: (e: PapyrosEvent) => any;
6
- runId: number;
7
- constructor();
8
- /**
9
- * Initialize the backend, setting up any globals required
10
- * @param {function(PapyrosEvent):void} onEvent Callback for when events occur
11
- * @param {Uint8Array} inputTextArray Optional shared buffer for input
12
- * @param {Int32Array} inputMetaData Optional shared buffer for metadata about input
13
- * @return {Promise<void>} Promise of launching
14
- */
15
- launch(onEvent: (e: PapyrosEvent) => void, inputTextArray?: Uint8Array, inputMetaData?: Int32Array): Promise<void>;
16
- abstract _runCodeInternal(code: string): Promise<any>;
17
- /**
18
- * Validate and run arbitrary code
19
- * @param {string} code The code to run
20
- * @param {string} runId The uuid for this execution
21
- * @return {Promise<void>} Promise of execution
22
- */
23
- runCode(code: string, runId: number): Promise<void>;
24
- }
25
-
26
- import { Remote } from "comlink";
27
- import { Backend } from "./Backend";
28
- import { ProgrammingLanguage } from "./ProgrammingLanguage";
29
- export function getBackend(language: ProgrammingLanguage): Remote<Backend>;
30
- export function stopBackend(backend: Remote<Backend>): void;
31
-
32
- import { Compartment } from "@codemirror/state";
33
- import { ProgrammingLanguage } from "./ProgrammingLanguage";
34
- import { EditorView } from "@codemirror/view";
35
- export class CodeEditor {
36
- editorView: EditorView;
37
- languageCompartment: Compartment;
38
- indentCompartment: Compartment;
39
- constructor(element: HTMLElement, language: ProgrammingLanguage, initialCode?: string, indentLength?: number);
40
- setLanguage(language: ProgrammingLanguage): void;
41
- setIndentLength(indentLength: number): void;
42
- getCode(): string;
43
- }
44
-
45
- import { ProgrammingLanguage } from "./ProgrammingLanguage";
46
- export const MAIN_APP_ID = "papyros";
47
- export const OUTPUT_TA_ID = "code-output-area";
48
- export const INPUT_TA_ID = "code-input-area";
49
- export const EDITOR_WRAPPER_ID = "code-area";
50
- export const STATE_SPINNER_ID = "state-spinner";
51
- export const APPLICATION_STATE_TEXT_ID = "application-state-text";
52
- export const RUN_BTN_ID = "run-code-btn";
53
- export const TERMINATE_BTN_ID = "terminate-btn";
54
- export const PROGRAMMING_LANGUAGE_SELECT_ID = "programming-language-select";
55
- export const DEFAULT_PROGRAMMING_LANGUAGE = ProgrammingLanguage.Python;
56
- export const LOCALE_SELECT_ID = "locale-select";
57
- export const DEFAULT_LOCALE = "nl";
58
- export const INPUT_RELATIVE_URL = "/__papyros_input";
59
- export const SERVICE_WORKER_PATH = "./inputServiceWorker.js";
60
-
61
- export {};
62
-
63
- import "./Papyros.css";
64
- import { Remote } from "comlink";
65
- import { Backend } from "./Backend";
66
- import { CodeEditor } from "./CodeEditor";
67
- import { PapyrosEvent } from "./PapyrosEvent";
68
- import { ProgrammingLanguage } from "./ProgrammingLanguage";
69
- enum PapyrosState {
70
- Loading = "loading",
71
- Running = "running",
72
- AwaitingInput = "awaiting_input",
73
- Terminating = "terminating",
74
- Ready = "ready"
75
- }
76
- class PapyrosStateManager {
77
- state: PapyrosState;
78
- stateSpinner: HTMLElement;
79
- stateText: HTMLElement;
80
- runButton: HTMLButtonElement;
81
- terminateButton: HTMLButtonElement;
82
- constructor();
83
- setState(state: PapyrosState, message?: string): void;
84
- }
85
- interface PapyrosCodeState {
86
- programmingLanguage: ProgrammingLanguage;
87
- editor: CodeEditor;
88
- backend: Remote<Backend>;
89
- runId: number;
90
- outputArea: HTMLInputElement;
91
- }
92
- interface PapyrosInputState {
93
- lineNr: number;
94
- textEncoder: TextEncoder;
95
- inputArea: HTMLInputElement;
96
- inputTextArray?: Uint8Array;
97
- inputMetaData?: Int32Array;
98
- }
99
- interface PapyrosConfig {
100
- standAlone: boolean;
101
- locale: string;
102
- programmingLanguage: ProgrammingLanguage;
103
- }
104
- export class Papyros {
105
- stateManager: PapyrosStateManager;
106
- codeState: PapyrosCodeState;
107
- inputState: PapyrosInputState;
108
- constructor(programmingLanguage: ProgrammingLanguage, inputTextArray?: Uint8Array, inputMetaData?: Int32Array);
109
- launch(): Promise<Papyros>;
110
- setProgrammingLanguage(programmingLanguage: ProgrammingLanguage): Promise<void>;
111
- startBackend(): Promise<void>;
112
- static fromElement(parent: HTMLElement, config: PapyrosConfig): Promise<Papyros>;
113
- onError(e: PapyrosEvent): void;
114
- sendInput(): Promise<boolean>;
115
- onInput(e: PapyrosEvent): Promise<void>;
116
- onMessage(e: PapyrosEvent): void;
117
- runCode(): Promise<void>;
118
- terminate(): Promise<void>;
119
- }
120
- export {};
121
-
122
- export interface PapyrosEvent {
123
- type: "input" | "output" | "script" | "success" | "error";
124
- data: string;
125
- runId: number;
126
- }
127
-
128
- export enum ProgrammingLanguage {
129
- Python = "Python",
130
- JavaScript = "JavaScript"
131
- }
132
- export const PROGRAMMING_LANGUAGES: ProgrammingLanguage[];
133
- export function plFromString(language: string): ProgrammingLanguage;
134
-
135
- export const TRANSLATIONS: {
136
- en: {
137
- Papyros: {
138
- Papyros: string;
139
- enter_code: string;
140
- enter_input: string;
141
- code_output: string;
142
- run: string;
143
- terminate: string;
144
- running: string;
145
- terminating: string;
146
- loading: string;
147
- awaiting_input: string;
148
- ready: string;
149
- finished: string;
150
- programming_language: string;
151
- Python: string;
152
- JavaScript: string;
153
- };
154
- };
155
- nl: {
156
- Papyros: {
157
- Papyros: string;
158
- enter_code: string;
159
- enter_input: string;
160
- code_output: string;
161
- run: string;
162
- terminate: string;
163
- running: string;
164
- terminating: string;
165
- loading: string;
166
- awaiting_input: string;
167
- ready: string;
168
- finished: string;
169
- programming_language: string;
170
- Python: string;
171
- JavaScript: string;
172
- };
173
- };
174
- };
175
-
176
- export enum LogType {
177
- Debug = 0,
178
- Error = 1,
179
- Important = 2
180
- }
181
- export function papyrosLog(logType: LogType, ...args: any[]): void;
182
-
183
- export {};
184
-
185
- export {};
186
-
187
- export const INITIALIZATION_CODE = "\nfrom pyodide import to_js\nimport sys\n\ndef __override_builtins(cb):\n __capture_stdout(cb)\n __override_stdin(cb)\n # set name to main instead of builtins\n globals()[\"__name__\"] = \"__main__\"\n\ndef __capture_stdout(cb):\n class _OutputWriter:\n def __init__(self):\n self.encoding = \"utf-8\"\n \n def write(self, s):\n cb(to_js({\"type\": \"output\", \"data\":s}))\n\n def flush(self):\n pass # Given data is always immediately written\n\n sys.stdout = _OutputWriter()\n\n__papyros_input = \"\"\ndef __override_stdin(cb):\n def __papyros_readline(n=-1):\n global __papyros_input\n if not __papyros_input:\n __papyros_input = cb(to_js({\"type\": \"input\", \"data\":\"next line\"})) + \"\\n\"\n if n < 0 or n > len(__papyros_input):\n n = len(__papyros_input)\n to_return = __papyros_input[0:n]\n __papyros_input = __papyros_input[n:]\n return to_return\n\n sys.stdin.readline = __papyros_readline\n";
188
-
189
- }