From bfbaeae67fc7a79cb5d0215021ed3db836be44d1 Mon Sep 17 00:00:00 2001 From: DanielJGeiger <1852529+DanielJGeiger@users.noreply.github.com> Date: Mon, 14 Nov 2022 02:32:54 -0600 Subject: [PATCH] fix: Correctly paste contents parsed by `JSON.parse()` as text. (#5868) * Fix #5867 * Add test. * Add tests to clipboard.test.ts Co-authored-by: Aakansha Doshi --- src/clipboard.test.ts | 27 +++++++++++++++++++++++++++ src/clipboard.ts | 16 +++++++--------- 2 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 src/clipboard.test.ts diff --git a/src/clipboard.test.ts b/src/clipboard.test.ts new file mode 100644 index 000000000..142038e8e --- /dev/null +++ b/src/clipboard.test.ts @@ -0,0 +1,27 @@ +import { parseClipboard } from "./clipboard"; + +describe("Test parseClipboard", () => { + it("should parse valid json correctly", async () => { + let text = "123"; + + let clipboardData = await parseClipboard({ + //@ts-ignore + clipboardData: { + getData: () => text, + }, + }); + + expect(clipboardData.text).toBe(text); + + text = "[123]"; + + clipboardData = await parseClipboard({ + //@ts-ignore + clipboardData: { + getData: () => text, + }, + }); + + expect(clipboardData.text).toBe(text); + }); +}); diff --git a/src/clipboard.ts b/src/clipboard.ts index bc4d3d3b4..4e2c06222 100644 --- a/src/clipboard.ts +++ b/src/clipboard.ts @@ -156,15 +156,13 @@ export const parseClipboard = async ( files: systemClipboardData.files, }; } - return appClipboardData; - } catch { - // system clipboard doesn't contain excalidraw elements → return plaintext - // unless we set a flag to prefer in-app clipboard because browser didn't - // support storing to system clipboard on copy - return PREFER_APP_CLIPBOARD && appClipboardData.elements - ? appClipboardData - : { text: systemClipboard }; - } + } catch (e) {} + // system clipboard doesn't contain excalidraw elements → return plaintext + // unless we set a flag to prefer in-app clipboard because browser didn't + // support storing to system clipboard on copy + return PREFER_APP_CLIPBOARD && appClipboardData.elements + ? appClipboardData + : { text: systemClipboard }; }; export const copyBlobToClipboardAsPng = async (blob: Blob | Promise) => {