The install function packages/frontend/src/plugin.ts passes an err function to the Interpreter constructor, for the purpose of logging errors.
The Interpreter.handleError function, when an err is present, calls this.abort(). That makes all future calls to _eval (and therefore _run, and therefore exec) to return null. All future calls, because nothing ever resets the .stop attribute of the interpreter.
The MkNote*.vue components call all noteViewInterruptors one after the other, expecting them to return a Misskey.entities.Note | null, and when they return null, the note gets marked as deleted.
So, when a noteViewInterruptor's code throws an exception, all notes rendered after that will be considered deleted, and not shown.
🥰 Expected Behavior
the error gets logged
other plugins still run on the note that triggered the error
💡 Summary
The
install
functionpackages/frontend/src/plugin.ts
passes anerr
function to theInterpreter
constructor, for the purpose of logging errors.The
Interpreter.handleError
function, when anerr
is present, callsthis.abort()
. That makes all future calls to_eval
(and therefore_run
, and thereforeexec
) to returnnull
. All future calls, because nothing ever resets the.stop
attribute of the interpreter.The
MkNote*.vue
components call allnoteViewInterruptors
one after the other, expecting them to return aMisskey.entities.Note | null
, and when they returnnull
, the note gets marked as deleted.So, when a noteViewInterruptor's code throws an exception, all notes rendered after that will be considered deleted, and not shown.
🥰 Expected Behavior
🤬 Actual Behavior
📝 Steps to Reproduce
Install a plugin like:
create a note with no text (e.g. just an image attached)
switch between "home" and "global" timeline
your timeline is now empty
💻 Frontend Environment
🛰 Backend Environment (for server admin)
Do you want to address this bug yourself?