From 54b75151675bcd7a3cce4e2b93daee8f1d45798f Mon Sep 17 00:00:00 2001 From: donteatfriedrice Date: Wed, 19 Feb 2025 10:06:50 +0000 Subject: [PATCH] fix(editor): log when export blob failed (#10287) --- .../blocks/src/_common/transformers/zip.ts | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/blocksuite/blocks/src/_common/transformers/zip.ts b/blocksuite/blocks/src/_common/transformers/zip.ts index 97a1f24043..dd5fca07ad 100644 --- a/blocksuite/blocks/src/_common/transformers/zip.ts +++ b/blocksuite/blocks/src/_common/transformers/zip.ts @@ -35,17 +35,30 @@ async function exportDocs(collection: Workspace, docs: Store[]) { const pathBlobIdMap = job.assetsManager.getPathBlobIdMap(); const assetsMap = job.assets; - await Promise.all( + // Add blobs to assets folder, if failed, log the error and continue + const results = await Promise.all( Array.from(pathBlobIdMap.values()).map(async blobId => { - await job.assetsManager.readFromBlob(blobId); - const ext = getAssetName(assetsMap, blobId).split('.').at(-1); - const blob = assetsMap.get(blobId); - if (blob) { - await assets.file(`${blobId}.${ext}`, blob); + try { + await job.assetsManager.readFromBlob(blobId); + const ext = getAssetName(assetsMap, blobId).split('.').at(-1); + const blob = assetsMap.get(blobId); + if (blob) { + await assets.file(`${blobId}.${ext}`, blob); + return { success: true, blobId }; + } + return { success: false, blobId, error: 'Blob not found' }; + } catch (error) { + console.error(`Failed to process blob: ${blobId}`, error); + return { success: false, blobId, error }; } }) ); + const failures = results.filter(r => !r.success); + if (failures.length > 0) { + console.warn(`Failed to process ${failures.length} blobs:`, failures); + } + const downloadBlob = await zip.generate(); return download(downloadBlob, `${collection.id}.bs.zip`); }