ds4/src/migration/008.js

67 lines
2 KiB
JavaScript
Raw Normal View History

2022-11-21 03:00:46 +01:00
// SPDX-FileCopyrightText: 2022 Johannes Loher
//
// SPDX-License-Identifier: MIT
import {
2023-07-10 22:23:13 +02:00
getSceneMigrator,
migrateCollection,
migrateCompendiums,
getCompendiumMigrator,
getActorMigrator,
getItemMigrator,
} from "./migrationHelpers.js";
2022-11-21 03:00:46 +01:00
/** @type {import("./migration.js").Migration["migrate"]} */
2022-11-21 03:00:46 +01:00
async function migrate() {
2023-07-10 22:23:13 +02:00
const itemsResult = await migrateCollection(game.items, migrateItem);
const actorsResult = await migrateCollection(game.actors, migrateActor);
const scenesResult = await migrateCollection(game.scenes, migrateScene);
const compendiumsResult = await migrateCompendiums(migrateCompendium);
return itemsResult === "error" ||
actorsResult === "error" ||
scenesResult === "error" ||
compendiumsResult === "error"
? "error"
: "success";
2022-11-21 03:00:46 +01:00
}
/** @type {import('./migrationHelpers.js').Migrator<ActiveEffect>} */
async function migrateActiveEffect(activeEffect) {
2023-07-10 22:23:13 +02:00
const data = activeEffect.toObject();
let hasUpdates = false;
2023-07-10 22:23:13 +02:00
if ("changes" in data) {
for (const change of data.changes) {
const newValue = change.value.replaceAll(/@data\./g, "@system.");
if (newValue !== change.value) {
hasUpdates = true;
change.value = newValue;
}
2022-11-21 03:00:46 +01:00
}
2023-07-10 22:23:13 +02:00
}
2022-11-21 03:00:46 +01:00
2023-07-10 22:23:13 +02:00
/** @type {string | undefined} */
const condition = data.flags?.ds4?.itemEffectConfig?.condition;
if (condition !== undefined) {
const newCondition = condition.replaceAll(/(@actor|@item|@effect)\.data/g, "$1.system");
if (newCondition !== condition) {
hasUpdates = true;
data.flags.ds4.itemEffectConfig.condition = newCondition;
2022-11-21 03:00:46 +01:00
}
2023-07-10 22:23:13 +02:00
}
if (hasUpdates) {
await activeEffect.update(data);
}
2022-11-21 03:00:46 +01:00
}
const migrateItem = getItemMigrator(migrateActiveEffect);
const migrateActor = getActorMigrator(migrateItem, migrateActiveEffect);
const migrateScene = getSceneMigrator(migrateActor);
const migrateCompendium = getCompendiumMigrator({ migrateItem, migrateActor, migrateScene });
2022-11-21 03:00:46 +01:00
/** @type {import("./migration.js").Migration} */
2022-11-21 03:00:46 +01:00
export const migration = {
2023-07-10 22:23:13 +02:00
migrate,
migrateCompendium,
2022-11-21 03:00:46 +01:00
};