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; }