tarinai/js/save_schema.js
2026-07-16 22:12:03 +09:00

47 lines
1.7 KiB
JavaScript

"use strict";
// Layer: persistence/schema
// Current-format identifiers. Saves are accepted only when their schema exactly matches this build.
(function (global) {
const ids = global.TarinaiDomainIds;
const itemCatalog = global.TarinaiItemTypeCatalog;
if (!ids) throw new Error("TarinaiDomainIds must be loaded before save_schema.js");
if (!itemCatalog) throw new Error("TarinaiItemTypeCatalog must be loaded before save_schema.js");
const SNAPSHOT_VERSION = 40;
const BINARY_SCHEMA_VERSION = 49;
function moodValue(index, fallback = "relaxed") {
return ids.canonicalMoodId(ids.enumValue(ids.MOOD_IDS, index, fallback));
}
global.TarinaiSaveSchema = Object.freeze({
SNAPSHOT_VERSION,
BINARY_SCHEMA_VERSION,
FIELD_IDS: ids.FIELD_IDS,
GROUND_IDS: ids.GROUND_IDS,
WEATHER_IDS: ids.WEATHER_IDS,
MOOD_IDS: ids.MOOD_IDS,
STATE_IDS: ids.STATE_IDS,
POWER_MODE_IDS: ids.POWER_MODE_IDS,
SIZE_MODE_IDS: ids.SIZE_MODE_IDS,
LIFE_MODE_IDS: ids.LIFE_MODE_IDS,
PIN_STATE_IDS: ids.PIN_STATE_IDS,
STAGE_IDS: ids.STAGE_IDS,
ITEM_TYPE_IDS: itemCatalog.ITEM_TYPE_IDS,
FIELD_INDEX: ids.FIELD_INDEX,
GROUND_INDEX: ids.GROUND_INDEX,
WEATHER_INDEX: ids.WEATHER_INDEX,
MOOD_INDEX: ids.MOOD_INDEX,
ITEM_TYPE_INDEX: itemCatalog.ITEM_TYPE_INDEX,
canonicalFieldId: ids.canonicalFieldId,
canonicalGroundId: ids.canonicalGroundId,
canonicalWeatherId: ids.canonicalWeatherId,
canonicalMoodId: ids.canonicalMoodId,
moodValue,
enumIndex: ids.enumIndex,
enumValue: ids.enumValue,
itemTypeIndex: itemCatalog.itemTypeIndex,
itemTypeValue: itemCatalog.itemTypeValue,
});
})(typeof window !== "undefined" ? window : globalThis);