From 93c33fef20186f6699dddb5c1bb48c005e3be26c Mon Sep 17 00:00:00 2001 From: dwelle <5153846+dwelle@users.noreply.github.com> Date: Fri, 19 Jul 2024 10:33:53 +0200 Subject: [PATCH] feat: support importing `obsidian.md` files --- excalidraw-app/vite.config.mts | 7 ++++++- packages/excalidraw/data/blob.ts | 18 +++++++++++++++++- packages/excalidraw/package.json | 1 + yarn.lock | 4 ++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/excalidraw-app/vite.config.mts b/excalidraw-app/vite.config.mts index 39417de36d..a8575293da 100644 --- a/excalidraw-app/vite.config.mts +++ b/excalidraw-app/vite.config.mts @@ -64,7 +64,12 @@ export default defineConfig({ workbox: { // Don't push fonts and locales to app precache - globIgnores: ["fonts.css", "**/locales/**", "service-worker.js"], + globIgnores: [ + "fonts.css", + "**/locales/**", + "service-worker.js", + "lz-string", + ], runtimeCaching: [ { urlPattern: new RegExp("/.+.(ttf|woff2|otf)"), diff --git a/packages/excalidraw/data/blob.ts b/packages/excalidraw/data/blob.ts index 1eb1e1bedc..cecda5be18 100644 --- a/packages/excalidraw/data/blob.ts +++ b/packages/excalidraw/data/blob.ts @@ -123,10 +123,26 @@ export const loadSceneOrLibraryFromBlob = async ( fileHandle?: FileSystemHandle | null, ) => { const contents = await parseFileContents(blob); + let data; + + // assume Obsidian excalidraw plugin file + if (blob.name?.endsWith(".excalidraw.md")) { + if (contents.indexOf("```compressed-json") > -1) { + let str = contents.slice( + contents.indexOf("```compressed-json") + '"```compressed-json'.length, + ); + str = str.slice(0, str.indexOf("```")); + str = str.replace(/\n/g, "").replace(/\r/g, ""); + const LZString = await import("lz-string"); + + data = JSON.parse(LZString.decompressFromBase64(str)); + } + } + try { try { - data = JSON.parse(contents); + data = data || JSON.parse(contents); } catch (error: any) { if (isSupportedImageFile(blob)) { throw new ImageSceneDataError( diff --git a/packages/excalidraw/package.json b/packages/excalidraw/package.json index 7279346c87..be91a64c79 100644 --- a/packages/excalidraw/package.json +++ b/packages/excalidraw/package.json @@ -72,6 +72,7 @@ "image-blob-reduce": "3.0.1", "jotai": "1.13.1", "lodash.throttle": "4.1.1", + "lz-string": "1.5.0", "nanoid": "3.3.3", "open-color": "1.9.1", "pako": "1.0.11", diff --git a/yarn.lock b/yarn.lock index dc1c07c76c..4526222bb5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7753,9 +7753,9 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lz-string@^1.5.0: +lz-string@1.5.0, lz-string@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.25.0, magic-string@^0.25.7: