diff options
| author | Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> | 2024-02-22 16:38:50 +0000 |
|---|---|---|
| committer | Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> | 2024-02-22 16:38:50 +0000 |
| commit | 89a4a69f6da706a0cd8c4036bc1aa4c6e44f6e11 (patch) | |
| tree | e6e0409dd6efa7eaba08bff0bcd50143dcda1d24 /frontend/src/wsrouter.ts | |
| parent | a449181802f05c0d1bd1a318741ce347e993d6f7 (diff) | |
| download | decky-loader-89a4a69f6da706a0cd8c4036bc1aa4c6e44f6e11.tar.gz decky-loader-89a4a69f6da706a0cd8c4036bc1aa4c6e44f6e11.zip | |
make frontend -> backend errors actually work
Diffstat (limited to 'frontend/src/wsrouter.ts')
| -rw-r--r-- | frontend/src/wsrouter.ts | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/frontend/src/wsrouter.ts b/frontend/src/wsrouter.ts index 37df4262..e3a6900b 100644 --- a/frontend/src/wsrouter.ts +++ b/frontend/src/wsrouter.ts @@ -30,10 +30,20 @@ interface ReplyMessage { interface ErrorMessage { type: MessageType.ERROR; - error: any; + error: { name: string; message: string; traceback: string | null }; id: number; } +export class PyError extends Error { + pythonTraceback: string | null; + + constructor(name: string, message: string, traceback: string | null) { + super(message); + this.name = `Python ${name}`; + this.pythonTraceback = traceback; + } +} + interface EventMessage { type: MessageType.EVENT; event: string; @@ -45,7 +55,7 @@ type Message = CallMessage | ReplyMessage | ErrorMessage | EventMessage; // Helper to resolve a promise from the outside interface PromiseResolver<T> { resolve: (res: T) => void; - reject: (error: string) => void; + reject: (error: PyError) => void; promise: Promise<T>; } @@ -124,7 +134,8 @@ export class WSRouter extends Logger { case MessageType.ERROR: if (this.runningCalls.has(data.id)) { - this.runningCalls.get(data.id)!.reject(data.error); + let err = new PyError(data.error.name, data.error.message, data.error.traceback); + this.runningCalls.get(data.id)!.reject(err); this.runningCalls.delete(data.id); this.debug(`Rejected PY call ${data.id} with error`, data.error); } |
