tarinai/js/freeze_store.js
2026-06-25 14:51:58 +09:00

45 lines
1.4 KiB
JavaScript

"use strict";
(function (global) {
const Snapshot = global.TarinaiSnapshot;
if (!Snapshot) throw new Error("TarinaiSnapshot is not available for freeze_store.js");
const STORAGE_KEY = "tarinai_frozen_storage_v1";
const clonePlain = Snapshot.clonePlain;
function frozenList(worldRef = global.world) {
if (!worldRef) return [];
if (!Array.isArray(worldRef.frozenTarinai)) worldRef.frozenTarinai = [];
return worldRef.frozenTarinai;
}
function save(worldRef = global.world) {
try {
global.localStorage?.setItem(STORAGE_KEY, JSON.stringify(frozenList(worldRef)));
} catch (_) {}
}
function load(worldRef = global.world) {
if (!worldRef) return [];
try {
const raw = global.localStorage?.getItem(STORAGE_KEY);
const parsed = raw ? JSON.parse(raw) : [];
if (Array.isArray(parsed) && !worldRef.frozenTarinai?.length) worldRef.frozenTarinai = clonePlain(parsed) || [];
} catch (_) {
if (!Array.isArray(worldRef.frozenTarinai)) worldRef.frozenTarinai = [];
}
return frozenList(worldRef);
}
function ensure(worldRef = global.world) {
if (!Array.isArray(worldRef?.frozenTarinai)) worldRef.frozenTarinai = [];
return frozenList(worldRef);
}
global.TarinaiFreezeStore = {
STORAGE_KEY,
frozenList,
load,
save,
ensure,
};
})(typeof window !== "undefined" ? window : globalThis);