@dodona/papyros 4.1.1 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/Library.d.ts +11 -0
  2. package/dist/Library.js +11 -0
  3. package/dist/Library.js.map +1 -0
  4. package/dist/ProgrammingLanguage.d.ts +7 -0
  5. package/dist/ProgrammingLanguage.js +9 -0
  6. package/dist/ProgrammingLanguage.js.map +1 -0
  7. package/dist/backend/Backend.d.ts +92 -0
  8. package/dist/backend/Backend.js +79 -0
  9. package/dist/backend/Backend.js.map +1 -0
  10. package/dist/backend/workers/javascript/JavaScriptWorker.d.ts +39 -0
  11. package/dist/backend/workers/javascript/JavaScriptWorker.js +158 -0
  12. package/dist/backend/workers/javascript/JavaScriptWorker.js.map +1 -0
  13. package/dist/backend/workers/javascript/worker.d.ts +1 -0
  14. package/dist/backend/workers/javascript/worker.js +5 -0
  15. package/dist/backend/workers/javascript/worker.js.map +1 -0
  16. package/dist/backend/workers/python/PythonWorker.d.ts +32 -0
  17. package/dist/backend/workers/python/PythonWorker.js +117 -0
  18. package/dist/backend/workers/python/PythonWorker.js.map +1 -0
  19. package/dist/backend/workers/python/python_package.tar.gz.load_by_url +0 -0
  20. package/dist/backend/workers/python/worker.d.ts +1 -0
  21. package/dist/backend/workers/python/worker.js +5 -0
  22. package/dist/backend/workers/python/worker.js.map +1 -0
  23. package/dist/communication/BackendEvent.d.ts +33 -0
  24. package/dist/communication/BackendEvent.js +18 -0
  25. package/dist/communication/BackendEvent.js.map +1 -0
  26. package/dist/communication/BackendEventQueue.d.ts +59 -0
  27. package/dist/communication/BackendEventQueue.js +96 -0
  28. package/dist/communication/BackendEventQueue.js.map +1 -0
  29. package/dist/communication/BackendManager.d.ts +68 -0
  30. package/dist/communication/BackendManager.js +99 -0
  31. package/dist/communication/BackendManager.js.map +1 -0
  32. package/dist/communication/InputServiceWorker.d.ts +1 -0
  33. package/dist/communication/InputServiceWorker.js +37 -0
  34. package/dist/communication/InputServiceWorker.js.map +1 -0
  35. package/dist/communication/InputWorker.d.ts +22 -0
  36. package/dist/communication/InputWorker.js +63 -0
  37. package/dist/communication/InputWorker.js.map +1 -0
  38. package/dist/frontend/components/CodeRunner.d.ts +9 -0
  39. package/dist/frontend/components/CodeRunner.js +60 -0
  40. package/dist/frontend/components/CodeRunner.js.map +1 -0
  41. package/dist/frontend/components/Debugger.d.ts +7 -0
  42. package/dist/frontend/components/Debugger.js +75 -0
  43. package/dist/frontend/components/Debugger.js.map +1 -0
  44. package/dist/frontend/components/Input.d.ts +13 -0
  45. package/dist/frontend/components/Input.js +60 -0
  46. package/dist/frontend/components/Input.js.map +1 -0
  47. package/dist/frontend/components/Output.d.ts +14 -0
  48. package/dist/frontend/components/Output.js +157 -0
  49. package/dist/frontend/components/Output.js.map +1 -0
  50. package/dist/frontend/components/PapyrosElement.d.ts +8 -0
  51. package/dist/frontend/components/PapyrosElement.js +24 -0
  52. package/dist/frontend/components/PapyrosElement.js.map +1 -0
  53. package/dist/frontend/components/app/App.d.ts +24 -0
  54. package/dist/frontend/components/app/App.js +207 -0
  55. package/dist/frontend/components/app/App.js.map +1 -0
  56. package/dist/frontend/components/app/ExamplePicker.d.ts +7 -0
  57. package/dist/frontend/components/app/ExamplePicker.js +36 -0
  58. package/dist/frontend/components/app/ExamplePicker.js.map +1 -0
  59. package/dist/frontend/components/app/LanguagePicker.d.ts +7 -0
  60. package/dist/frontend/components/app/LanguagePicker.js +33 -0
  61. package/dist/frontend/components/app/LanguagePicker.js.map +1 -0
  62. package/dist/frontend/components/app/ProgrammingLanguagePicker.d.ts +7 -0
  63. package/dist/frontend/components/app/ProgrammingLanguagePicker.js +38 -0
  64. package/dist/frontend/components/app/ProgrammingLanguagePicker.js.map +1 -0
  65. package/dist/frontend/components/app/examples/JavaScriptExamples.d.ts +5 -0
  66. package/dist/frontend/components/app/examples/JavaScriptExamples.js +16 -0
  67. package/dist/frontend/components/app/examples/JavaScriptExamples.js.map +1 -0
  68. package/dist/frontend/components/app/examples/PythonExamples.d.ts +14 -0
  69. package/dist/frontend/components/app/examples/PythonExamples.js +163 -0
  70. package/dist/frontend/components/app/examples/PythonExamples.js.map +1 -0
  71. package/dist/frontend/components/app/themes/ThemePicker.d.ts +11 -0
  72. package/dist/frontend/components/app/themes/ThemePicker.js +48 -0
  73. package/dist/frontend/components/app/themes/ThemePicker.js.map +1 -0
  74. package/dist/frontend/components/app/themes/ThemedButton.d.ts +9 -0
  75. package/dist/frontend/components/app/themes/ThemedButton.js +53 -0
  76. package/dist/frontend/components/app/themes/ThemedButton.js.map +1 -0
  77. package/dist/frontend/components/code_mirror/BatchInputEditor.d.ts +8 -0
  78. package/dist/frontend/components/code_mirror/BatchInputEditor.js +51 -0
  79. package/dist/frontend/components/code_mirror/BatchInputEditor.js.map +1 -0
  80. package/dist/frontend/components/code_mirror/CodeEditor.d.ts +24 -0
  81. package/dist/frontend/components/code_mirror/CodeEditor.js +204 -0
  82. package/dist/frontend/components/code_mirror/CodeEditor.js.map +1 -0
  83. package/dist/frontend/components/code_mirror/CodeMirrorEditor.d.ts +22 -0
  84. package/dist/frontend/components/code_mirror/CodeMirrorEditor.js +111 -0
  85. package/dist/frontend/components/code_mirror/CodeMirrorEditor.js.map +1 -0
  86. package/dist/frontend/components/code_mirror/Extensions.d.ts +15 -0
  87. package/dist/frontend/components/code_mirror/Extensions.js +164 -0
  88. package/dist/frontend/components/code_mirror/Extensions.js.map +1 -0
  89. package/dist/frontend/components/code_mirror/MaterialTheme.d.ts +5 -0
  90. package/dist/frontend/components/code_mirror/MaterialTheme.js +115 -0
  91. package/dist/frontend/components/code_mirror/MaterialTheme.js.map +1 -0
  92. package/dist/frontend/components/code_runner/ButtonLint.d.ts +9 -0
  93. package/dist/frontend/components/code_runner/ButtonLint.js +72 -0
  94. package/dist/frontend/components/code_runner/ButtonLint.js.map +1 -0
  95. package/dist/frontend/components/code_runner/Code.d.ts +7 -0
  96. package/dist/frontend/components/code_runner/Code.js +48 -0
  97. package/dist/frontend/components/code_runner/Code.js.map +1 -0
  98. package/dist/frontend/components/code_runner/RunState.d.ts +7 -0
  99. package/dist/frontend/components/code_runner/RunState.js +41 -0
  100. package/dist/frontend/components/code_runner/RunState.js.map +1 -0
  101. package/dist/frontend/components/input/BatchInput.d.ts +9 -0
  102. package/dist/frontend/components/input/BatchInput.js +53 -0
  103. package/dist/frontend/components/input/BatchInput.js.map +1 -0
  104. package/dist/frontend/components/input/InteractiveInput.d.ts +13 -0
  105. package/dist/frontend/components/input/InteractiveInput.js +71 -0
  106. package/dist/frontend/components/input/InteractiveInput.js.map +1 -0
  107. package/dist/frontend/state/Constants.d.ts +38 -0
  108. package/dist/frontend/state/Constants.js +111 -0
  109. package/dist/frontend/state/Constants.js.map +1 -0
  110. package/dist/frontend/state/Debugger.d.ts +23 -0
  111. package/dist/frontend/state/Debugger.js +86 -0
  112. package/dist/frontend/state/Debugger.js.map +1 -0
  113. package/dist/frontend/state/Examples.d.ts +11 -0
  114. package/dist/frontend/state/Examples.js +36 -0
  115. package/dist/frontend/state/Examples.js.map +1 -0
  116. package/dist/frontend/state/I18n.d.ts +16 -0
  117. package/dist/frontend/state/I18n.js +75 -0
  118. package/dist/frontend/state/I18n.js.map +1 -0
  119. package/dist/frontend/state/InputOutput.d.ts +64 -0
  120. package/dist/frontend/state/InputOutput.js +146 -0
  121. package/dist/frontend/state/InputOutput.js.map +1 -0
  122. package/dist/frontend/state/Papyros.d.ts +40 -0
  123. package/dist/frontend/state/Papyros.js +115 -0
  124. package/dist/frontend/state/Papyros.js.map +1 -0
  125. package/dist/frontend/state/Runner.d.ts +123 -0
  126. package/dist/frontend/state/Runner.js +372 -0
  127. package/dist/frontend/state/Runner.js.map +1 -0
  128. package/dist/frontend/state/Test.d.ts +10 -0
  129. package/dist/frontend/state/Test.js +43 -0
  130. package/dist/frontend/state/Test.js.map +1 -0
  131. package/dist/frontend/state/Translations.d.ts +178 -0
  132. package/dist/frontend/state/Translations.js +187 -0
  133. package/dist/frontend/state/Translations.js.map +1 -0
  134. package/dist/frontend/state/themes/blue-dark.d.ts +2 -0
  135. package/dist/frontend/state/themes/blue-dark.js +56 -0
  136. package/dist/frontend/state/themes/blue-dark.js.map +1 -0
  137. package/dist/frontend/state/themes/blue-light.d.ts +2 -0
  138. package/dist/frontend/state/themes/blue-light.js +56 -0
  139. package/dist/frontend/state/themes/blue-light.js.map +1 -0
  140. package/dist/frontend/state/themes/green-dark.d.ts +2 -0
  141. package/dist/frontend/state/themes/green-dark.js +56 -0
  142. package/dist/frontend/state/themes/green-dark.js.map +1 -0
  143. package/dist/frontend/state/themes/green-light.d.ts +2 -0
  144. package/dist/frontend/state/themes/green-light.js +56 -0
  145. package/dist/frontend/state/themes/green-light.js.map +1 -0
  146. package/dist/frontend/state/themes/red-dark.d.ts +2 -0
  147. package/dist/frontend/state/themes/red-dark.js +56 -0
  148. package/dist/frontend/state/themes/red-dark.js.map +1 -0
  149. package/dist/frontend/state/themes/red-light.d.ts +2 -0
  150. package/dist/frontend/state/themes/red-light.js +56 -0
  151. package/dist/frontend/state/themes/red-light.js.map +1 -0
  152. package/dist/util/Logging.d.ts +15 -0
  153. package/dist/util/Logging.js +30 -0
  154. package/dist/util/Logging.js.map +1 -0
  155. package/dist/util/Util.d.ts +8 -0
  156. package/dist/util/Util.js +48 -0
  157. package/dist/util/Util.js.map +1 -0
  158. package/package.json +1 -1
  159. package/dist/assets/__vite-browser-external-9wXp6ZBx.js +0 -1
  160. package/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  161. package/dist/assets/index-C1AWjGcU.js +0 -2202
  162. package/dist/assets/manifest-BaVmi6rC.json +0 -15
  163. package/dist/assets/python_package.tar.gz-B8aMWvGt.load_by_url +0 -0
  164. package/dist/assets/worker-BhABRh01.js +0 -5
  165. package/dist/assets/worker-C2Ju1j5g.js +0 -110
  166. package/dist/index.html +0 -26
  167. package/dist/manifest.json +0 -15
  168. package/dist/robots.txt +0 -3
@@ -0,0 +1,123 @@
1
+ import { SyncClient } from "comsync";
2
+ import { Backend, RunMode, WorkerDiagnostic } from "../../backend/Backend";
3
+ import { State } from "@dodona/lit-state";
4
+ import { Papyros } from "./Papyros";
5
+ import { ProgrammingLanguage } from "../../ProgrammingLanguage";
6
+ /**
7
+ * Enum representing the possible states while processing code
8
+ */
9
+ export declare enum RunState {
10
+ Loading = "loading",
11
+ Running = "running",
12
+ AwaitingInput = "awaiting_input",
13
+ Stopping = "stopping",
14
+ Ready = "ready"
15
+ }
16
+ /**
17
+ * Interface to represent information required when handling loading events
18
+ */
19
+ export interface LoadingData {
20
+ /**
21
+ * List of module names that are being loaded
22
+ */
23
+ modules: Array<string>;
24
+ /**
25
+ * The status of the import
26
+ */
27
+ status: "loading" | "loaded" | "failed";
28
+ }
29
+ /**
30
+ * Helper component to manage and visualize the current RunState
31
+ */
32
+ export declare class Runner extends State {
33
+ /**
34
+ * The currently used programming language
35
+ */
36
+ private _programmingLanguage;
37
+ get programmingLanguage(): ProgrammingLanguage;
38
+ set programmingLanguage(value: ProgrammingLanguage);
39
+ /**
40
+ * The backend that executes the code asynchronously
41
+ */
42
+ backend: Promise<SyncClient<Backend>>;
43
+ /**
44
+ * Current state of the program
45
+ */
46
+ state: RunState;
47
+ /**
48
+ * An explanatory message about the current state
49
+ */
50
+ stateMessage: string;
51
+ /**
52
+ * Previous state to restore when loading is done
53
+ */
54
+ private previousState;
55
+ /**
56
+ * Array of packages that are being installed
57
+ */
58
+ loadingPackages: Array<string>;
59
+ /**
60
+ * Time at which the setState call occurred
61
+ */
62
+ runStartTime: number;
63
+ /**
64
+ * The code we are working with
65
+ */
66
+ _code: string;
67
+ get code(): string;
68
+ set code(value: string);
69
+ static CODE_SEPARATOR: string;
70
+ get effectiveCode(): string;
71
+ set effectiveCode(value: string);
72
+ /**
73
+ * Async getter for the linting diagnostics of the current code
74
+ */
75
+ lintSource(): Promise<WorkerDiagnostic[]>;
76
+ /**
77
+ * available run modes for the current code
78
+ */
79
+ runModes: Array<RunMode>;
80
+ /**
81
+ * The global state where we are part of
82
+ */
83
+ private papyros;
84
+ constructor(papyros: Papyros);
85
+ /**
86
+ * Stops the current run and resets the state of the program
87
+ * Regular and debug output is cleared
88
+ * @return {Promise<void>} Returns when the program has been reset
89
+ */
90
+ reset(): Promise<void>;
91
+ /**
92
+ * Start the backend to enable running code
93
+ */
94
+ launch(): Promise<void>;
95
+ /**
96
+ * Execute the code in the editor
97
+ * @param {RunMode} mode The mode to run with
98
+ * @return {Promise<void>} Promise of running the code
99
+ */
100
+ start(mode?: RunMode): Promise<void>;
101
+ /**
102
+ * Interrupt the currently running code
103
+ * @return {Promise<void>} Returns when the code has been interrupted
104
+ */
105
+ stop(): Promise<void>;
106
+ provideInput(input: string): Promise<void>;
107
+ provideFiles(inlinedFiles: Record<string, string>, hrefFiles: Record<string, string>): Promise<void>;
108
+ /**
109
+ * Show the current state of the program to the user
110
+ * @param {RunState} state The current state of the run
111
+ * @param {string} message Optional message to indicate the state
112
+ */
113
+ setState(state: RunState, message?: string): void;
114
+ /**
115
+ * Callback to handle loading events
116
+ * @param {BackendEvent} e The loading event
117
+ */
118
+ private onLoad;
119
+ private onStart;
120
+ private onEnd;
121
+ private onError;
122
+ private updateRunModes;
123
+ }
@@ -0,0 +1,372 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ import { proxy } from "comlink";
17
+ import { RunMode } from "../../backend/Backend";
18
+ import { BackendEventType } from "../../communication/BackendEvent";
19
+ import { BackendManager } from "../../communication/BackendManager";
20
+ import { parseData } from "../../util/Util";
21
+ import { State, stateProperty } from "@dodona/lit-state";
22
+ import { ProgrammingLanguage } from "../../ProgrammingLanguage";
23
+ /**
24
+ * Enum representing the possible states while processing code
25
+ */
26
+ export var RunState;
27
+ (function (RunState) {
28
+ RunState["Loading"] = "loading";
29
+ RunState["Running"] = "running";
30
+ RunState["AwaitingInput"] = "awaiting_input";
31
+ RunState["Stopping"] = "stopping";
32
+ RunState["Ready"] = "ready";
33
+ })(RunState || (RunState = {}));
34
+ /**
35
+ * Helper component to manage and visualize the current RunState
36
+ */
37
+ export class Runner extends State {
38
+ get programmingLanguage() {
39
+ return this._programmingLanguage;
40
+ }
41
+ set programmingLanguage(value) {
42
+ if (this._programmingLanguage !== value) {
43
+ this._programmingLanguage = value;
44
+ this.launch();
45
+ }
46
+ }
47
+ get code() {
48
+ return this._code;
49
+ }
50
+ set code(value) {
51
+ if (this._code !== value) {
52
+ this._code = value;
53
+ this.updateRunModes();
54
+ }
55
+ }
56
+ get effectiveCode() {
57
+ let result = this.code;
58
+ if (this.papyros.test.testCode !== undefined) {
59
+ result += `${Runner.CODE_SEPARATOR}${this.papyros.test.testCode}`;
60
+ }
61
+ return result;
62
+ }
63
+ set effectiveCode(value) {
64
+ let codeWithoutTest = value;
65
+ if (this.papyros.test.testCode !== undefined) {
66
+ codeWithoutTest = codeWithoutTest.slice(0, -(Runner.CODE_SEPARATOR.length + this.papyros.test.testCode.length));
67
+ }
68
+ this.code = codeWithoutTest;
69
+ }
70
+ /**
71
+ * Async getter for the linting diagnostics of the current code
72
+ */
73
+ lintSource() {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ const backend = yield this.backend;
76
+ const proxy = backend.workerProxy;
77
+ if (!proxy) {
78
+ return [];
79
+ }
80
+ return yield proxy.lintCode(this.code);
81
+ });
82
+ }
83
+ constructor(papyros) {
84
+ super();
85
+ /**
86
+ * The currently used programming language
87
+ */
88
+ this._programmingLanguage = ProgrammingLanguage.Python;
89
+ /**
90
+ * Current state of the program
91
+ */
92
+ this.state = RunState.Ready;
93
+ /**
94
+ * An explanatory message about the current state
95
+ */
96
+ this.stateMessage = "";
97
+ /**
98
+ * Previous state to restore when loading is done
99
+ */
100
+ this.previousState = RunState.Ready;
101
+ /**
102
+ * Array of packages that are being installed
103
+ */
104
+ this.loadingPackages = [];
105
+ /**
106
+ * Time at which the setState call occurred
107
+ */
108
+ this.runStartTime = new Date().getTime();
109
+ /**
110
+ * The code we are working with
111
+ */
112
+ this._code = "";
113
+ /**
114
+ * available run modes for the current code
115
+ */
116
+ this.runModes = [RunMode.Debug];
117
+ this.papyros = papyros;
118
+ this.backend = Promise.resolve({});
119
+ BackendManager.subscribe(BackendEventType.Input, () => this.setState(RunState.AwaitingInput));
120
+ BackendManager.subscribe(BackendEventType.Loading, (e) => this.onLoad(e));
121
+ BackendManager.subscribe(BackendEventType.Start, (e) => this.onStart(e));
122
+ BackendManager.subscribe(BackendEventType.End, (e) => this.onEnd(e));
123
+ BackendManager.subscribe(BackendEventType.Error, () => this.onError());
124
+ BackendManager.subscribe(BackendEventType.Stop, () => this.stop());
125
+ }
126
+ /**
127
+ * Stops the current run and resets the state of the program
128
+ * Regular and debug output is cleared
129
+ * @return {Promise<void>} Returns when the program has been reset
130
+ */
131
+ reset() {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ if (![RunState.Ready, RunState.Loading].includes(this.state)) {
134
+ yield this.stop();
135
+ }
136
+ this.papyros.debugger.active = false;
137
+ });
138
+ }
139
+ /**
140
+ * Start the backend to enable running code
141
+ */
142
+ launch() {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ this.setState(RunState.Loading);
145
+ const backend = BackendManager.getBackend(this.programmingLanguage);
146
+ // Use a Promise to immediately enable running while downloading
147
+ // eslint-disable-next-line no-async-promise-executor
148
+ this.backend = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
149
+ const workerProxy = backend.workerProxy;
150
+ // Allow passing messages between worker and main thread
151
+ yield workerProxy.launch(proxy((e) => BackendManager.publish(e)));
152
+ this.updateRunModes();
153
+ return resolve(backend);
154
+ }));
155
+ this.setState(RunState.Ready);
156
+ });
157
+ }
158
+ /**
159
+ * Execute the code in the editor
160
+ * @param {RunMode} mode The mode to run with
161
+ * @return {Promise<void>} Promise of running the code
162
+ */
163
+ start(mode) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ this.papyros.debugger.active = mode === RunMode.Debug;
166
+ // Setup pre-run
167
+ this.setState(RunState.Loading);
168
+ // Ensure we go back to Loading after finishing any remaining installs
169
+ this.previousState = RunState.Loading;
170
+ BackendManager.publish({
171
+ type: BackendEventType.Start,
172
+ data: "StartClicked",
173
+ contentType: "text/plain",
174
+ });
175
+ let interrupted = false;
176
+ let terminated = false;
177
+ const backend = yield this.backend;
178
+ this.runStartTime = new Date().getTime();
179
+ try {
180
+ yield backend.call(backend.workerProxy.runCode, this.effectiveCode, mode);
181
+ }
182
+ catch (error) {
183
+ if (error.type === "InterruptError") {
184
+ // Error signaling forceful interrupt
185
+ interrupted = true;
186
+ terminated = true;
187
+ }
188
+ else {
189
+ this.papyros.io.logError(error);
190
+ BackendManager.publish({
191
+ type: BackendEventType.End,
192
+ data: "RunError",
193
+ contentType: "text/plain",
194
+ });
195
+ }
196
+ }
197
+ finally {
198
+ if (this.state === RunState.Stopping) {
199
+ // Was interrupted, End message already published
200
+ interrupted = true;
201
+ }
202
+ if (terminated) {
203
+ yield this.launch();
204
+ }
205
+ if (interrupted || terminated) {
206
+ this.setState(RunState.Ready, this.papyros.i18n.t("Papyros.interrupted", {
207
+ time: (new Date().getTime() - this.runStartTime) / 1000,
208
+ }));
209
+ }
210
+ }
211
+ });
212
+ }
213
+ /**
214
+ * Interrupt the currently running code
215
+ * @return {Promise<void>} Returns when the code has been interrupted
216
+ */
217
+ stop() {
218
+ return __awaiter(this, void 0, void 0, function* () {
219
+ this.setState(RunState.Stopping);
220
+ BackendManager.publish({
221
+ type: BackendEventType.End,
222
+ data: "User cancelled run",
223
+ contentType: "text/plain",
224
+ });
225
+ const backend = yield this.backend;
226
+ yield backend.interrupt();
227
+ const startTime = new Date().getTime();
228
+ while (this.state === RunState.Stopping && new Date().getTime() - startTime < 5000) {
229
+ yield new Promise((resolve) => setTimeout(resolve, 100));
230
+ }
231
+ if (this.state === RunState.Stopping) {
232
+ console.warn("Deadlock while stopping, restarting backend");
233
+ yield this.launch();
234
+ this.setState(RunState.Ready, this.papyros.i18n.t("Papyros.interrupted", { time: (new Date().getTime() - this.runStartTime) / 1000 }));
235
+ }
236
+ });
237
+ }
238
+ provideInput(input) {
239
+ return __awaiter(this, void 0, void 0, function* () {
240
+ const backend = yield this.backend;
241
+ this.setState(RunState.Running);
242
+ yield backend.writeMessage(input);
243
+ });
244
+ }
245
+ provideFiles(inlinedFiles, hrefFiles) {
246
+ return __awaiter(this, void 0, void 0, function* () {
247
+ const fileNames = [...Object.keys(inlinedFiles), ...Object.keys(hrefFiles)];
248
+ if (fileNames.length === 0) {
249
+ return;
250
+ }
251
+ BackendManager.publish({
252
+ type: BackendEventType.Loading,
253
+ data: JSON.stringify({
254
+ modules: fileNames,
255
+ status: "loading",
256
+ }),
257
+ });
258
+ const backend = yield this.backend;
259
+ yield backend.workerProxy.provideFiles(inlinedFiles, hrefFiles);
260
+ });
261
+ }
262
+ /**
263
+ * Show the current state of the program to the user
264
+ * @param {RunState} state The current state of the run
265
+ * @param {string} message Optional message to indicate the state
266
+ */
267
+ setState(state, message) {
268
+ this.stateMessage = message || this.papyros.i18n.t(`Papyros.states.${state}`);
269
+ if (state !== this.state) {
270
+ this.previousState = this.state;
271
+ this.state = state;
272
+ }
273
+ }
274
+ /**
275
+ * Callback to handle loading events
276
+ * @param {BackendEvent} e The loading event
277
+ */
278
+ onLoad(e) {
279
+ const loadingData = parseData(e.data, e.contentType);
280
+ if (loadingData.status === "loading") {
281
+ loadingData.modules.forEach((m) => {
282
+ if (!this.loadingPackages.includes(m)) {
283
+ this.loadingPackages.push(m);
284
+ }
285
+ });
286
+ }
287
+ else if (loadingData.status === "loaded") {
288
+ loadingData.modules.forEach((m) => {
289
+ const index = this.loadingPackages.indexOf(m);
290
+ if (index !== -1) {
291
+ this.loadingPackages.splice(index, 1);
292
+ }
293
+ });
294
+ }
295
+ else {
296
+ // failed
297
+ // If it is a true module, an Exception will be raised when running
298
+ // So this does not need to be handled here, as it is often an incomplete package-name
299
+ // that causes micropip to not find the correct wheel
300
+ this.loadingPackages = [];
301
+ }
302
+ if (this.loadingPackages.length > 0) {
303
+ const packageMessage = this.papyros.i18n.t("Papyros.loading", {
304
+ // limit amount of package names shown
305
+ packages: this.loadingPackages.slice(0, 3).join(", "),
306
+ });
307
+ this.setState(RunState.Loading, packageMessage);
308
+ }
309
+ else {
310
+ this.setState(this.previousState);
311
+ }
312
+ }
313
+ onStart(e) {
314
+ const startData = parseData(e.data, e.contentType);
315
+ if (startData.includes("RunCode")) {
316
+ this.runStartTime = new Date().getTime();
317
+ this.setState(RunState.Running);
318
+ }
319
+ }
320
+ onEnd(e) {
321
+ const endData = parseData(e.data, e.contentType);
322
+ if (endData.includes("CodeFinished")) {
323
+ this.setState(RunState.Ready, this.papyros.i18n.t("Papyros.finished", { time: (new Date().getTime() - this.runStartTime) / 1000 }));
324
+ }
325
+ }
326
+ onError() {
327
+ this.setState(RunState.Ready, this.papyros.i18n.t("Papyros.finished", { time: (new Date().getTime() - this.runStartTime) / 1000 }));
328
+ }
329
+ updateRunModes() {
330
+ this.backend.then((backend) => __awaiter(this, void 0, void 0, function* () {
331
+ const proxy = backend.workerProxy;
332
+ if (proxy) {
333
+ this.runModes = yield proxy.runModes(this.effectiveCode);
334
+ }
335
+ }));
336
+ }
337
+ }
338
+ Runner.CODE_SEPARATOR = "\n\n";
339
+ __decorate([
340
+ stateProperty
341
+ ], Runner.prototype, "_programmingLanguage", void 0);
342
+ __decorate([
343
+ stateProperty
344
+ ], Runner.prototype, "programmingLanguage", null);
345
+ __decorate([
346
+ stateProperty
347
+ ], Runner.prototype, "backend", void 0);
348
+ __decorate([
349
+ stateProperty
350
+ ], Runner.prototype, "state", void 0);
351
+ __decorate([
352
+ stateProperty
353
+ ], Runner.prototype, "stateMessage", void 0);
354
+ __decorate([
355
+ stateProperty
356
+ ], Runner.prototype, "loadingPackages", void 0);
357
+ __decorate([
358
+ stateProperty
359
+ ], Runner.prototype, "runStartTime", void 0);
360
+ __decorate([
361
+ stateProperty
362
+ ], Runner.prototype, "_code", void 0);
363
+ __decorate([
364
+ stateProperty
365
+ ], Runner.prototype, "code", null);
366
+ __decorate([
367
+ stateProperty
368
+ ], Runner.prototype, "effectiveCode", null);
369
+ __decorate([
370
+ stateProperty
371
+ ], Runner.prototype, "runModes", void 0);
372
+ //# sourceMappingURL=Runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Runner.js","sourceRoot":"","sources":["../../../src/frontend/state/Runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { State } from "@dodona/lit-state";
2
+ import { Papyros } from "./Papyros";
3
+ export declare class Test extends State {
4
+ papyros: Papyros;
5
+ testCode: string | undefined;
6
+ editTestCode(): void;
7
+ get testLines(): number[] | undefined;
8
+ get testLineCount(): number | undefined;
9
+ constructor(papyros: Papyros);
10
+ }
@@ -0,0 +1,43 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { State, stateProperty } from "@dodona/lit-state";
8
+ import { Runner } from "./Runner";
9
+ export class Test extends State {
10
+ editTestCode() {
11
+ this.papyros.runner.code = this.papyros.runner.effectiveCode;
12
+ this.testCode = undefined;
13
+ }
14
+ get testLines() {
15
+ if (this.testCode === undefined) {
16
+ return undefined;
17
+ }
18
+ const codeLines = this.papyros.runner.code.split("\n").length;
19
+ const testLines = this.testCode.split("\n").length;
20
+ return Array.from({ length: testLines }, (_, i) => i + codeLines + Runner.CODE_SEPARATOR.length);
21
+ }
22
+ get testLineCount() {
23
+ if (this.testCode === undefined) {
24
+ return undefined;
25
+ }
26
+ return this.testCode.split("\n").length;
27
+ }
28
+ constructor(papyros) {
29
+ super();
30
+ this.testCode = undefined;
31
+ this.papyros = papyros;
32
+ }
33
+ }
34
+ __decorate([
35
+ stateProperty
36
+ ], Test.prototype, "testCode", void 0);
37
+ __decorate([
38
+ stateProperty
39
+ ], Test.prototype, "testLines", null);
40
+ __decorate([
41
+ stateProperty
42
+ ], Test.prototype, "testLineCount", null);
43
+ //# sourceMappingURL=Test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Test.js","sourceRoot":"","sources":["../../../src/frontend/state/Test.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,OAAO,IAAK,SAAQ,KAAK;IAMpB,YAAY;QACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,IAAW,SAAS;QAChB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACnD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrG,CAAC;IAGD,IAAW,aAAa;QACpB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,YAAY,OAAgB;QACxB,KAAK,EAAE,CAAC;QAzBL,aAAQ,GAAuB,SAAS,CAAC;QA0B5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ;AA5BU;IADN,aAAa;sCACkC;AAOhD;IADC,aAAa;qCAQb;AAGD;IADC,aAAa;yCAMb"}