From 0c5ce83dadc2a764f9c1d3d1943bd4f559ad5060 Mon Sep 17 00:00:00 2001 From: tianma-if Date: Wed, 30 Sep 2026 02:03:20 +0800 Subject: [PATCH] fix: keep release checks green for the note CSS preview and undo test ParentNode.append is the Workers stream helper under the root typecheck, so the preview attaches DOM nodes with appendChild. The sync queue test restores navigator after forcing onLine, so a later headless TipTap test can still read userAgent. --- .../components/settings/NoteProseCssPreview.tsx | 17 ++++++++++++----- tests/web-sync-queue.test.ts | 6 ++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/settings/NoteProseCssPreview.tsx b/apps/web/src/components/settings/NoteProseCssPreview.tsx index 96d0f25a..2c756a01 100644 --- a/apps/web/src/components/settings/NoteProseCssPreview.tsx +++ b/apps/web/src/components/settings/NoteProseCssPreview.tsx @@ -89,14 +89,21 @@ export const NoteProseCssPreview = ({ anchor.textContent = link; const codeElement = document.createElement("code"); codeElement.textContent = code; - paragraph.append(before, anchor, between, codeElement, after); + // Root typecheck resolves ParentNode.append to the Workers stream helper. + paragraph.appendChild(document.createTextNode(before)); + paragraph.appendChild(anchor); + paragraph.appendChild(document.createTextNode(between)); + paragraph.appendChild(codeElement); + paragraph.appendChild(document.createTextNode(after)); const quotation = document.createElement("blockquote"); const quotationText = document.createElement("p"); quotationText.textContent = quote; - quotation.append(quotationText); - prose.append(title, paragraph, quotation); - frame.append(prose); - scope.append(frame); + quotation.appendChild(quotationText); + prose.appendChild(title); + prose.appendChild(paragraph); + prose.appendChild(quotation); + frame.appendChild(prose); + scope.appendChild(frame); root.replaceChildren(style, scope); }, [after, before, between, code, dark, fontSize, heading, lineHeight, link, previewCss, quote]); diff --git a/tests/web-sync-queue.test.ts b/tests/web-sync-queue.test.ts index f2618868..905bd028 100644 --- a/tests/web-sync-queue.test.ts +++ b/tests/web-sync-queue.test.ts @@ -15,6 +15,7 @@ const { } = await import("../apps/web/src/lib/sync-queue"); const { formatLocalDraftClipboardText } = await import("../apps/web/src/lib/memo-save-conflict"); const originalFetch = globalThis.fetch; +const originalNavigator = Object.getOwnPropertyDescriptor(globalThis, "navigator"); const payload = (title: string, revision = 0): MemoUpdateSyncPayload => ({ memoId: "memo_sync_test", @@ -76,6 +77,11 @@ beforeEach(async () => { afterEach(() => { globalThis.fetch = originalFetch; + if (originalNavigator) { + Object.defineProperty(globalThis, "navigator", originalNavigator); + } else { + delete globalThis.navigator; + } }); describe("web sync queue concurrency", () => {