12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import { fileOpen, fileSave } from "browser-nativefs";
- import { cleanAppStateForExport } from "../appState";
- import { MIME_TYPES } from "../constants";
- import { clearElementsForExport } from "../element";
- import { ExcalidrawElement } from "../element/types";
- import { AppState } from "../types";
- import { loadFromBlob } from "./blob";
- import { Library } from "./library";
-
- export const serializeAsJSON = (
- elements: readonly ExcalidrawElement[],
- appState: AppState,
- ): string =>
- JSON.stringify(
- {
- type: "excalidraw",
- version: 2,
- source: window.location.origin,
- elements: clearElementsForExport(elements),
- appState: cleanAppStateForExport(appState),
- },
- null,
- 2,
- );
-
- export const saveAsJSON = async (
- elements: readonly ExcalidrawElement[],
- appState: AppState,
- ) => {
- const serialized = serializeAsJSON(elements, appState);
- const blob = new Blob([serialized], {
- type: "application/json",
- });
-
- const fileHandle = await fileSave(
- blob,
- {
- fileName: appState.name,
- description: "Excalidraw file",
- extensions: [".excalidraw"],
- },
- appState.fileHandle,
- );
- return { fileHandle };
- };
-
- export const loadFromJSON = async (localAppState: AppState) => {
- const blob = await fileOpen({
- description: "Excalidraw files",
- extensions: [".json", ".excalidraw", ".png", ".svg"],
- mimeTypes: ["application/json", "image/png", "image/svg+xml"],
- });
- return loadFromBlob(blob, localAppState);
- };
-
- export const isValidLibrary = (json: any) => {
- return (
- typeof json === "object" &&
- json &&
- json.type === "excalidrawlib" &&
- json.version === 1
- );
- };
-
- export const saveLibraryAsJSON = async () => {
- const library = await Library.loadLibrary();
- const serialized = JSON.stringify(
- {
- type: "excalidrawlib",
- version: 1,
- library,
- },
- null,
- 2,
- );
- const fileName = "library.excalidrawlib";
- const blob = new Blob([serialized], {
- type: MIME_TYPES.excalidrawlib,
- });
- await fileSave(blob, {
- fileName,
- description: "Excalidraw library file",
- extensions: [".excalidrawlib"],
- });
- };
-
- export const importLibraryFromJSON = async () => {
- const blob = await fileOpen({
- description: "Excalidraw library files",
- extensions: [".json", ".excalidrawlib"],
- mimeTypes: ["application/json"],
- });
- Library.importLibrary(blob);
- };
|