ugly work-around to prevent plugins from breaking timelines

as the comment says, this is a complicated interaction that must be
fixed upstream (I'm not going to fork aiscript for this!)

but at least this stops errors in plugins from completely breaking
Sharkey's frontend
This commit is contained in:
dakkar 2024-06-20 10:20:47 +01:00
parent 717696c472
commit d6a1db1e7b
1 changed files with 25 additions and 4 deletions

View File

@ -28,10 +28,31 @@ export async function install(plugin: Plugin): Promise<void> {
}, },
log: (): void => { log: (): void => {
}, },
err: (err): void => { /* dakkar 2024-06-20
pluginLogs.value.get(plugin.id).push(`${err}`);
throw err; // install時のtry-catchに反応させる passing an `err` triggers an unwanted side-effect inside the
}, AiScript Interpreter:
- the plugin code throws an exception of any kind (in the
specific case that made us look, it was `note.text.split(...)`
on a note with no text)
- the Interpreter's `handleError` calls `this.abort()` before
calling our `err`
- from that point on, every evaluation of that Interpreter object
returns null
- which, at least inside a noteViewInterruptor, causes all notes
to be replaced with a null
I'm reporting this problem upstream, in the meantime we'll have
to do without error logs
*/
// err: (err): void => {
// pluginLogs.value.get(plugin.id).push(`${err}`);
// throw err; // install時のtry-catchに反応させる
// },
}); });
initPlugin({ plugin, aiscript }); initPlugin({ plugin, aiscript });