aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/data/resave.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/data/resave.ts')
-rw-r--r--packages/excalidraw/data/resave.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/excalidraw/data/resave.ts b/packages/excalidraw/data/resave.ts
new file mode 100644
index 0000000..6249184
--- /dev/null
+++ b/packages/excalidraw/data/resave.ts
@@ -0,0 +1,41 @@
+import type { ExcalidrawElement } from "../element/types";
+import type { AppState, BinaryFiles } from "../types";
+import { exportCanvas, prepareElementsForExport } from ".";
+import { getFileHandleType, isImageFileHandleType } from "./blob";
+
+export const resaveAsImageWithScene = async (
+ elements: readonly ExcalidrawElement[],
+ appState: AppState,
+ files: BinaryFiles,
+ name: string,
+) => {
+ const { exportBackground, viewBackgroundColor, fileHandle } = appState;
+
+ const fileHandleType = getFileHandleType(fileHandle);
+
+ if (!fileHandle || !isImageFileHandleType(fileHandleType)) {
+ throw new Error(
+ "fileHandle should exist and should be of type svg or png when resaving",
+ );
+ }
+ appState = {
+ ...appState,
+ exportEmbedScene: true,
+ };
+
+ const { exportedElements, exportingFrame } = prepareElementsForExport(
+ elements,
+ appState,
+ false,
+ );
+
+ await exportCanvas(fileHandleType, exportedElements, appState, files, {
+ exportBackground,
+ viewBackgroundColor,
+ name,
+ fileHandle,
+ exportingFrame,
+ });
+
+ return { fileHandle };
+};