From 0b784af4cabeb29623bf47a9c247f8ed7c38f104 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 28 Mar 2026 12:03:00 +0200 Subject: [PATCH] chore(core): reintroduce basic non-blocking import for ENEX --- packages/trilium-core/src/services/import/enex.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/trilium-core/src/services/import/enex.ts b/packages/trilium-core/src/services/import/enex.ts index 252a7dc119..1672ff24ff 100644 --- a/packages/trilium-core/src/services/import/enex.ts +++ b/packages/trilium-core/src/services/import/enex.ts @@ -57,7 +57,7 @@ interface Note { let note: Partial = {}; let resource: Resource; -function importEnex(taskContext: TaskContext<"importNotes">, file: File, parentNote: BNote): BNote { +async function importEnex(taskContext: TaskContext<"importNotes">, file: File, parentNote: BNote): Promise { const parser = sax.parser(true); const rootNoteTitle = file.originalname.toLowerCase().endsWith(".enex") ? file.originalname.substr(0, file.originalname.length - 5) : file.originalname; @@ -387,7 +387,14 @@ function importEnex(taskContext: TaskContext<"importNotes">, file: File, parentN }; const content = typeof file.buffer === "string" ? file.buffer : new TextDecoder().decode(file.buffer); - parser.write(content).close(); + + const CHUNK_SIZE = 64 * 1024; + for (let i = 0; i < content.length; i += CHUNK_SIZE) { + parser.write(content.slice(i, i + CHUNK_SIZE)); + // Yield to the event loop between chunks to avoid blocking the server. + await new Promise((resolve) => setTimeout(resolve, 0)); + } + parser.close(); return rootNote; }