mirror of
https://github.com/YuzuZensai/Pien-Studio.git
synced 2026-09-02 14:18:35 +00:00
27 lines
996 B
TypeScript
27 lines
996 B
TypeScript
import { ProjectFileSchema, type Project, type ProjectFile } from "@pien-studio/types";
|
|||
|
|
import { normalizeProject } from "./normalize";
|
||
|
|
|
||
|
|
export function serializeProjectFile(project: Project, options?: { checkpointCount?: number }): string {
|
||
|
|
const document: ProjectFile = {
|
||
|
|
format: "pien.project",
|
||
|
|
version: 1,
|
||
|
|
exportedAt: new Date().toISOString(),
|
||
|
|
app: { name: "pien.studio", platform: "web" },
|
||
|
|
project,
|
||
|
|
assets: [],
|
||
|
|
history: { checkpointCount: options?.checkpointCount ?? 0 },
|
||
|
|
};
|
||
|
|
return JSON.stringify(document, null, 2);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function parseProjectFile(raw: string): { ok: true; project: Project } | { ok: false; error: string } {
|
||
|
|
try {
|
||
|
|
const data = JSON.parse(raw) as unknown;
|
||
|
|
const result = ProjectFileSchema.safeParse(data);
|
||
|
|
if (result.success) return { ok: true, project: normalizeProject(result.data.project) };
|
||
|
|
return { ok: false, error: "Invalid project format" };
|
||
|
|
} catch {
|
||
|
|
return { ok: false, error: "Invalid JSON" };
|
||
|
|
}
|
||
|
|
}
|