2026-03-31 01:29:35 +02:00
|
|
|
import type { SceneDocument } from "../document/scene-document";
|
|
|
|
|
import { migrateSceneDocument } from "../document/migrate-scene-document";
|
2026-03-31 03:41:10 +02:00
|
|
|
import { assertSceneDocumentIsValid } from "../document/scene-document-validation";
|
2026-03-31 01:29:35 +02:00
|
|
|
|
|
|
|
|
export function serializeSceneDocument(document: SceneDocument): string {
|
2026-03-31 03:41:10 +02:00
|
|
|
assertSceneDocumentIsValid(document);
|
2026-03-31 01:29:35 +02:00
|
|
|
return JSON.stringify(document, null, 2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function parseSceneDocumentJson(source: string): SceneDocument {
|
|
|
|
|
let parsedValue: unknown;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
parsedValue = JSON.parse(source);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
const cause = error instanceof Error ? error.message : "Unknown JSON parse failure.";
|
|
|
|
|
throw new Error(`Scene document JSON could not be parsed: ${cause}`);
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 03:41:10 +02:00
|
|
|
const document = migrateSceneDocument(parsedValue);
|
|
|
|
|
assertSceneDocumentIsValid(document);
|
|
|
|
|
return document;
|
2026-03-31 01:29:35 +02:00
|
|
|
}
|