import { freshSave, parseSave as parse, saveVersion } from "../core.ts"; import type { PetState } from "../types.ts"; // Save versions and migrations live in the shared rules (core/src/save.rs). A // save that cannot be read (corrupt, from a newer version, or a failed // migration) is never overwritten: it becomes a "bad egg" that the owner can // download or replace. export const timeZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC"; export const VERSION = () => saveVersion(); export function fresh(): PetState { return freshSave(Date.now(), timeZone()); } /** Throws with `newer` set for a save from a newer version. */ export function parseSave(raw: string): PetState { const result = parse(raw, Date.now(), timeZone()); if ("state" in result) return result.state; throw Object.assign(new Error(result.error), { newer: result.newer }); }