From 30a36e45686db503fded68e4da5d4c465a06f978 Mon Sep 17 00:00:00 2001 From: cashmere Date: Mon, 27 Jul 2026 01:21:20 +0200 Subject: feat: single-file project import/export (.ocp) fflate zip container: project.json (serialized project incl. schema version) + media files with a manifest. Export gathers all project media (missing blobs warn, never abort) after save-flush; import validates everything before any write, migrates older archives through the storage migration registry, remaps media ids, and creates a new project with rollback on failure. Entry points: projects page import/export, editor header menu, export-project-archive action. 29 tests incl. full round-trip. --- apps/web/src/project/transfer/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/web/src/project/transfer/index.ts (limited to 'apps/web/src/project/transfer/index.ts') diff --git a/apps/web/src/project/transfer/index.ts b/apps/web/src/project/transfer/index.ts new file mode 100644 index 00000000..81d97a6a --- /dev/null +++ b/apps/web/src/project/transfer/index.ts @@ -0,0 +1,16 @@ +export { + PROJECT_ARCHIVE_EXTENSION, + ProjectArchiveError, +} from "./container"; +export type { + ArchivedMediaEntry, + ArchivedMediaMetadata, +} from "./container"; +export { + exportProjectArchive, + importProjectArchive, +} from "./archive"; +export type { + ExportProjectArchiveResult, + ImportProjectArchiveResult, +} from "./archive"; -- cgit v1.3.1