Harden Typst wasm parser fallback against panics
CI / frontend (push) Successful in 20s
CI / backend (push) Successful in 1m27s

This commit is contained in:
2026-07-22 18:07:19 -04:00
parent 0e69f5a179
commit 2cabc3e303
+18 -2
View File
@@ -70,6 +70,12 @@
const isToml = $derived(filePath.toLowerCase().endsWith(".toml")); const isToml = $derived(filePath.toLowerCase().endsWith(".toml"));
function disableTypstLanguage() {
queueMicrotask(() => {
view?.dispatch({ effects: languageSlot.reconfigure([]) });
});
}
function resilientSync(parser: any) { function resilientSync(parser: any) {
return StateField.define<null>({ return StateField.define<null>({
create: () => null, create: () => null,
@@ -78,7 +84,11 @@
transaction.startState.facet(language) !== transaction.startState.facet(language) !==
transaction.state.facet(language) transaction.state.facet(language)
) { ) {
parser.clearParser(); try {
parser.clearParser();
} catch {
disableTypstLanguage();
}
return null; return null;
} }
@@ -94,7 +104,13 @@
for (const edit of edits.edits) parser.applyTreeEdit(edit); for (const edit of edits.edits) parser.applyTreeEdit(edit);
}); });
} catch { } catch {
parser.clearParser(); try {
parser.clearParser();
} catch {
// The wasm parser instance panicked and is no longer usable.
// Drop syntax highlighting rather than crash on every keystroke.
disableTypstLanguage();
}
} }
return null; return null;