45 lines
1.4 KiB
JavaScript
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);
|