From effd08fed7d2b2a98a809e15e62b151ffc12557e Mon Sep 17 00:00:00 2001 From: tianma-if Date: Wed, 7 Oct 2026 23:29:56 +0800 Subject: [PATCH] fix(desktop): show notebook not empty delete message --- apps/web/src/lib/notebook-delete.test.mjs | 8 +++++++- apps/web/src/lib/notebook-delete.ts | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/web/src/lib/notebook-delete.test.mjs b/apps/web/src/lib/notebook-delete.test.mjs index b0f0fffc..b7a606a5 100644 --- a/apps/web/src/lib/notebook-delete.test.mjs +++ b/apps/web/src/lib/notebook-delete.test.mjs @@ -1,5 +1,11 @@ import { describe, expect, test } from "bun:test"; -import { notebookDeleteIdsFromPayload, notebooksBlockedByPendingDeletes } from "./notebook-delete.ts"; +import { isNotebookNotEmptyError, notebookDeleteIdsFromPayload, notebooksBlockedByPendingDeletes } from "./notebook-delete.ts"; + +test("recognizes a notebook with notes through Electron's IPC error wrapper", () => { + expect(isNotebookNotEmptyError(new Error("notebook_not_empty"))).toBe(true); + expect(isNotebookNotEmptyError(new Error("Error invoking remote method 'desktop:sidecar-request': Error: notebook_not_empty"))).toBe(true); + expect(isNotebookNotEmptyError(new Error("Error invoking remote method 'desktop:sidecar-request': Error: database is busy"))).toBe(false); +}); describe("notebook delete ids", () => { test("uses the ordered descendant list and falls back to the single id", () => { diff --git a/apps/web/src/lib/notebook-delete.ts b/apps/web/src/lib/notebook-delete.ts index 61f6aaa4..7b42073e 100644 --- a/apps/web/src/lib/notebook-delete.ts +++ b/apps/web/src/lib/notebook-delete.ts @@ -12,7 +12,9 @@ export const isNotebookNotEmptyError = (error: unknown) => { if (typeof error === "object" && error !== null && "code" in error && (error as { code?: unknown }).code === "notebook_not_empty") { return true; } - return error instanceof Error && error.message === "notebook_not_empty"; + // Electron prefixes errors thrown by the sidecar IPC handler, for example: + // Error invoking remote method 'desktop:sidecar-request': Error: notebook_not_empty + return error instanceof Error && /(?:^|:\s*)notebook_not_empty$/.test(error.message.trim()); }; export const notebookDeleteIdsFromPayload = (