From f5c44e1f0b04a85faa6bce0d3e31930d4071585f Mon Sep 17 00:00:00 2001 From: Achille Lacoin Date: Thu, 21 Jul 2022 20:31:29 +0000 Subject: [PATCH] add compressData and decompressData to the npm package --- src/packages/excalidraw/CHANGELOG.md | 5 +++++ src/packages/excalidraw/README.md | 23 +++++++++++++++++++++++ src/packages/excalidraw/index.tsx | 3 +++ src/packages/utils.ts | 2 ++ 4 files changed, 33 insertions(+) diff --git a/src/packages/excalidraw/CHANGELOG.md b/src/packages/excalidraw/CHANGELOG.md index 2e6e043ac..969e7189b 100644 --- a/src/packages/excalidraw/CHANGELOG.md +++ b/src/packages/excalidraw/CHANGELOG.md @@ -15,6 +15,11 @@ Please add the latest change on the top under the correct section. ### Excalidraw API +#### Features + +- Added [`compressData`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#compressData) and [`decompressData`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#decompressData) +- Added [`generateEncryptionKey`](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#generateEncryptionKey) + #### Breaking Changes - `setToastMessage` API is now renamed to `setToast` API and the function signature is also updated [#5427](https://github.com/excalidraw/excalidraw/pull/5427). You can also pass `duration` and `closable` attributes along with `message`. diff --git a/src/packages/excalidraw/README.md b/src/packages/excalidraw/README.md index 3025a9da4..47bae6d12 100644 --- a/src/packages/excalidraw/README.md +++ b/src/packages/excalidraw/README.md @@ -1150,6 +1150,29 @@ loadSceneOrLibraryFromBlob( This function loads either scene or library data from the supplied blob. If the blob contains scene data, and you pass `localAppState`, `localAppState` value will be preferred over the `appState` derived from `blob`. Throws if blob doesn't contain neither valid scene data or library data. +#### `compressData` + +```js +const encrytionKey = generateEncryptionKey(); + +const buffer = await compressData( + new TextEncoder().encode( + serializeAsJSON(elements, appState, files, "database"), + ), + { encryptionKey }, +); +``` + +#### `decompressData` + +```js +const { data: decodedBuffer } = await decompressData(new Uint8Array(payload), { + decryptionKey, +}); +``` + +#### `generateEncryptionKey` + #### `getFreeDrawSvgPath` **How to use** diff --git a/src/packages/excalidraw/index.tsx b/src/packages/excalidraw/index.tsx index 7e0798f4d..a84b28d7a 100644 --- a/src/packages/excalidraw/index.tsx +++ b/src/packages/excalidraw/index.tsx @@ -206,6 +206,9 @@ export { getFreeDrawSvgPath, exportToClipboard, mergeLibraryItems, + generateEncryptionKey, + compressData, + decompressData, } from "../../packages/utils"; export { isLinearElement } from "../../element/typeChecks"; diff --git a/src/packages/utils.ts b/src/packages/utils.ts index 4d9a8af17..fa32d4014 100644 --- a/src/packages/utils.ts +++ b/src/packages/utils.ts @@ -193,6 +193,8 @@ export const exportToClipboard = async ( } }; +export { decompressData, compressData } from "../data/encode"; +export { generateEncryptionKey } from "../data/encryption"; export { serializeAsJSON, serializeLibraryAsJSON } from "../data/json"; export { loadFromBlob,