Update project package serialization to use ProjectDocument

This commit is contained in:
2026-04-11 03:48:24 +02:00
parent 27060a97e1
commit dd0048ff84

View File

@@ -1,9 +1,12 @@
import { strFromU8, strToU8, unzipSync, Zip, ZipDeflate } from "fflate"; import { strFromU8, strToU8, unzipSync, Zip, ZipDeflate } from "fflate";
import type { SceneDocument } from "../document/scene-document"; import type { ProjectDocument } from "../document/scene-document";
import { getProjectAssetKindLabel, type ProjectAssetRecord } from "../assets/project-assets"; import { getProjectAssetKindLabel, type ProjectAssetRecord } from "../assets/project-assets";
import type { ProjectAssetStorage, ProjectAssetStoragePackageRecord } from "../assets/project-asset-storage"; import type { ProjectAssetStorage, ProjectAssetStoragePackageRecord } from "../assets/project-asset-storage";
import { parseSceneDocumentJson, serializeSceneDocument } from "./scene-document-json"; import {
parseProjectDocumentJson,
serializeProjectDocument
} from "./scene-document-json";
export const PROJECT_PACKAGE_FILE_EXTENSION = ".we3d"; export const PROJECT_PACKAGE_FILE_EXTENSION = ".we3d";
export const PROJECT_PACKAGE_SCENE_PATH = "scene.json"; export const PROJECT_PACKAGE_SCENE_PATH = "scene.json";
@@ -201,7 +204,7 @@ function readPackageEntries(bytes: Uint8Array): Map<string, Uint8Array> {
function buildStoredAssetRecordsFromPackage( function buildStoredAssetRecordsFromPackage(
entries: Map<string, Uint8Array>, entries: Map<string, Uint8Array>,
document: SceneDocument document: ProjectDocument
): Map<string, ProjectAssetStoragePackageRecord> { ): Map<string, ProjectAssetStoragePackageRecord> {
const packageRecords = new Map<string, ProjectAssetStoragePackageRecord>(); const packageRecords = new Map<string, ProjectAssetStoragePackageRecord>();
@@ -249,10 +252,10 @@ function buildStoredAssetRecordsFromPackage(
} }
export async function saveProjectPackage( export async function saveProjectPackage(
document: SceneDocument, document: ProjectDocument,
storage: ProjectAssetStorage | null storage: ProjectAssetStorage | null
): Promise<Uint8Array> { ): Promise<Uint8Array> {
const sceneJson = serializeSceneDocument(document); const sceneJson = serializeProjectDocument(document);
const assets = Object.values(document.assets).sort((left, right) => left.id.localeCompare(right.id)); const assets = Object.values(document.assets).sort((left, right) => left.id.localeCompare(right.id));
if (assets.length > 0 && storage === null) { if (assets.length > 0 && storage === null) {
@@ -307,7 +310,7 @@ export async function saveProjectPackage(
export async function loadProjectPackage( export async function loadProjectPackage(
bytes: Uint8Array, bytes: Uint8Array,
storage: ProjectAssetStorage | null storage: ProjectAssetStorage | null
): Promise<SceneDocument> { ): Promise<ProjectDocument> {
let entries: Map<string, Uint8Array>; let entries: Map<string, Uint8Array>;
try { try {
@@ -322,10 +325,10 @@ export async function loadProjectPackage(
throw new Error("Project load failed: project package is missing scene.json."); throw new Error("Project load failed: project package is missing scene.json.");
} }
let document: SceneDocument; let document: ProjectDocument;
try { try {
document = parseSceneDocumentJson(strFromU8(sceneEntry)); document = parseProjectDocumentJson(strFromU8(sceneEntry));
} catch (error) { } catch (error) {
throw new Error(`Project load failed: ${getErrorDetail(error)}`); throw new Error(`Project load failed: ${getErrorDetail(error)}`);
} }