diff --git a/module/applications/characterCreation/characterCreation.mjs b/module/applications/characterCreation/characterCreation.mjs index aa764c56..e6c0f299 100644 --- a/module/applications/characterCreation/characterCreation.mjs +++ b/module/applications/characterCreation/characterCreation.mjs @@ -554,7 +554,7 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl experiences: { ...this.setup.experiences, ...Object.keys(this.character.system.experiences).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[`${key}`] = _del; return acc; }, {}) } diff --git a/module/applications/dialogs/characterResetDialog.mjs b/module/applications/dialogs/characterResetDialog.mjs index 0836af9c..aecebc7c 100644 --- a/module/applications/dialogs/characterResetDialog.mjs +++ b/module/applications/dialogs/characterResetDialog.mjs @@ -77,8 +77,8 @@ export default class CharacterResetDialog extends HandlebarsApplicationMixin(App if (!this.data.optional.portrait.keep) { foundry.utils.setProperty(update, 'img', this.actor.schema.fields.img.initial(this.actor)); - foundry.utils.setProperty(update, 'prototypeToken.==texture', {}); - foundry.utils.setProperty(update, 'prototypeToken.==ring', {}); + foundry.utils.setProperty(update, 'prototypeToken.texture', _replace({})); + foundry.utils.setProperty(update, 'prototypeToken.ring', _replace({})); } if (this.data.optional.biography.keep) @@ -89,7 +89,7 @@ export default class CharacterResetDialog extends HandlebarsApplicationMixin(App const { system, ...rest } = update; await this.actor.update({ ...rest, - '==system': system ?? {} + system: _replace(system ?? {}) }); const inventoryItemTypes = ['weapon', 'armor', 'consumable', 'loot']; diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index d1a1e123..c28b773c 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -168,7 +168,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } static async #removeMember(_, button) { - const update = { [`members.-=${button.dataset.characterId}`]: null }; + const update = { [`members.${button.dataset.characterId}`]: _del }; if (this.data.initiator.id === button.dataset.characterId) { update.iniator = { id: null }; } diff --git a/module/applications/levelup/levelup.mjs b/module/applications/levelup/levelup.mjs index ba6110cc..c4616d9a 100644 --- a/module/applications/levelup/levelup.mjs +++ b/module/applications/levelup/levelup.mjs @@ -477,7 +477,7 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2) const secondaryData = Object.keys( foundry.utils.getProperty(this.levelup, `${target.dataset.path}.secondaryData`) ).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}); await this.levelup.updateSource({ @@ -511,9 +511,9 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2) const current = foundry.utils.getProperty(this.levelup, `${basePath}.${button.dataset.option}`); if (Number(button.dataset.cost) > 1 || Object.keys(current).length === 1) { // Simple handling that doesn't cover potential Custom LevelTiers. - update[`${basePath}.-=${button.dataset.option}`] = null; + update[`${basePath}.${button.dataset.option}`] = _del; } else { - update[`${basePath}.${button.dataset.option}.-=${button.dataset.checkboxNr}`] = null; + update[`${basePath}.${button.dataset.option}.${button.dataset.checkboxNr}`] = _del; } } else { if (this.levelup.levels[this.levelup.currentLevel].nrSelections.available < Number(button.dataset.cost)) { diff --git a/module/applications/scene/sceneConfigSettings.mjs b/module/applications/scene/sceneConfigSettings.mjs index dda4330a..ceb403cf 100644 --- a/module/applications/scene/sceneConfigSettings.mjs +++ b/module/applications/scene/sceneConfigSettings.mjs @@ -118,7 +118,7 @@ export default class DhSceneConfigSettings extends foundry.applications.sheets.S for (const key of Object.keys(this.document._source.flags.daggerheart?.sceneEnvironments ?? {})) { if (!submitData.flags.daggerheart.sceneEnvironments[key]) { - submitData.flags.daggerheart.sceneEnvironments[`-=${key}`] = null; + submitData.flags.daggerheart.sceneEnvironments[key] = _del; } } diff --git a/module/applications/settings/homebrewSettings.mjs b/module/applications/settings/homebrewSettings.mjs index 6e2e665d..cecd12d7 100644 --- a/module/applications/settings/homebrewSettings.mjs +++ b/module/applications/settings/homebrewSettings.mjs @@ -228,7 +228,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli const isDowntime = ['shortRest', 'longRest'].includes(type); const path = isDowntime ? `restMoves.${type}.moves` : `itemFeatures.${type}`; await this.settings.updateSource({ - [`${path}.-=${id}`]: null + [`${path}.${id}`]: _del }); this.render(); } @@ -250,7 +250,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli const fields = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).schema.fields; const removeUpdate = Object.keys(this.settings.restMoves[target.dataset.type].moves).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}); @@ -310,7 +310,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli [`itemFeatures.${target.dataset.type}`]: Object.keys( this.settings.itemFeatures[target.dataset.type] ).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}) @@ -383,12 +383,12 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli if (!confirmed) return; await this.settings.updateSource({ - [`domains.-=${this.selected.domain}`]: null + [`domains.${this.selected.domain}`]: _del }); const currentSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew); if (currentSettings.domains[this.selected.domain]) { - await currentSettings.updateSource({ [`domains.-=${this.selected.domain}`]: null }); + await currentSettings.updateSource({ [`domains.${this.selected.domain}`]: _del }); await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew, currentSettings); } @@ -435,7 +435,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli static async deleteAdversaryType(_, target) { const { key } = target.dataset; - await this.settings.updateSource({ [`adversaryTypes.-=${key}`]: null }); + await this.settings.updateSource({ [`adversaryTypes.${key}`]: _del }); this.selected.adversaryType = this.selected.adversaryType === key ? null : this.selected.adversaryType; this.render(); diff --git a/module/applications/sheets-configs/adversary-settings.mjs b/module/applications/sheets-configs/adversary-settings.mjs index d3d215be..6593f23d 100644 --- a/module/applications/sheets-configs/adversary-settings.mjs +++ b/module/applications/sheets-configs/adversary-settings.mjs @@ -95,7 +95,7 @@ export default class DHAdversarySettings extends DHBaseActorSettings { }); if (!confirmed) return; - await this.actor.update({ [`system.experiences.-=${target.dataset.experience}`]: null }); + await this.actor.update({ [`system.experiences.${target.dataset.experience}`]: _del }); } async _onDragStart(event) { diff --git a/module/applications/sheets-configs/character-settings.mjs b/module/applications/sheets-configs/character-settings.mjs index 20a09cfc..c655b23f 100644 --- a/module/applications/sheets-configs/character-settings.mjs +++ b/module/applications/sheets-configs/character-settings.mjs @@ -101,8 +101,8 @@ export default class DHCharacterSettings extends DHBaseActorSettings { if (relinkAchievementData.length > 0) { relinkAchievementData.forEach(data => { - updates[`system.levelData.levelups.${data.levelKey}.achievements.experiences.-=${data.experience}`] = - null; + updates[`system.levelData.levelups.${data.levelKey}.achievements.experiences.${data.experience}`] = + _del; }); } else if (relinkSelectionData.length > 0) { relinkSelectionData.forEach(data => { @@ -137,7 +137,7 @@ export default class DHCharacterSettings extends DHBaseActorSettings { await this.actor.update({ ...updates, - [`system.experiences.-=${target.dataset.experience}`]: null + [`system.experiences.${target.dataset.experience}`]: _del }); } } diff --git a/module/applications/sheets-configs/companion-settings.mjs b/module/applications/sheets-configs/companion-settings.mjs index 8aa21479..6c1265af 100644 --- a/module/applications/sheets-configs/companion-settings.mjs +++ b/module/applications/sheets-configs/companion-settings.mjs @@ -117,6 +117,6 @@ export default class DHCompanionSettings extends DHBaseActorSettings { }); if (!confirmed) return; - await this.actor.update({ [`system.experiences.-=${target.dataset.experience}`]: null }); + await this.actor.update({ [`system.experiences.${target.dataset.experience}`]: _del }); } } diff --git a/module/applications/sheets-configs/environment-settings.mjs b/module/applications/sheets-configs/environment-settings.mjs index 15f5701d..5c039f85 100644 --- a/module/applications/sheets-configs/environment-settings.mjs +++ b/module/applications/sheets-configs/environment-settings.mjs @@ -79,7 +79,7 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings { * @type {ApplicationClickAction} */ static async #removeCategory(_, target) { - await this.actor.update({ [`system.potentialAdversaries.-=${target.dataset.categoryId}`]: null }); + await this.actor.update({ [`system.potentialAdversaries.${target.dataset.categoryId}`]: _del }); } /** diff --git a/module/applications/sheets-configs/setting-feature-config.mjs b/module/applications/sheets-configs/setting-feature-config.mjs index e8bf6109..e8ff7818 100644 --- a/module/applications/sheets-configs/setting-feature-config.mjs +++ b/module/applications/sheets-configs/setting-feature-config.mjs @@ -206,7 +206,7 @@ export default class SettingFeatureConfig extends HandlebarsApplicationMixin(App } }); } else { - await this.settings.updateSource({ [`${this.actionsPath}.-=${target.dataset.id}`]: null }); + await this.settings.updateSource({ [`${this.actionsPath}.${target.dataset.id}`]: _del }); } this.move = foundry.utils.getProperty(this.settings, this.movePath); diff --git a/module/applications/sheets-configs/token-config-mixin.mjs b/module/applications/sheets-configs/token-config-mixin.mjs index c29b54ff..a23aa7f4 100644 --- a/module/applications/sheets-configs/token-config-mixin.mjs +++ b/module/applications/sheets-configs/token-config-mixin.mjs @@ -67,7 +67,7 @@ export default function DHTokenConfigMixin(Base) { changes.height = tokenSize; } - const deletions = { '-=actorId': null, '-=actorLink': null }; + const deletions = { actorId: _del, actorLink: _del }; const mergeOptions = { inplace: false, performDeletions: true }; this._preview.updateSource(mergeObject(changes, deletions, mergeOptions)); diff --git a/module/applications/sheets/items/beastform.mjs b/module/applications/sheets/items/beastform.mjs index 880c0796..0c9991c4 100644 --- a/module/applications/sheets/items/beastform.mjs +++ b/module/applications/sheets/items/beastform.mjs @@ -102,7 +102,7 @@ export default class BeastformSheet extends DHBaseItemSheet { async advantageOnRemove(event) { await this.document.update({ - [`system.advantageOn.-=${event.detail.data.value}`]: null + [`system.advantageOn.${event.detail.data.value}`]: _del }); } } diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index edb0a734..d7498e80 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -108,8 +108,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa getSystemFlagUpdate() { const deleteUpdate = Object.keys(this.document._source.flags.daggerheart?.altFormula ?? {}).reduce( (acc, formulaKey) => { - if (!this.daggerheartFlag.altFormula[formulaKey]) - acc.altFormula[formulaKey] = foundry.data.operators.ForcedDeletion.create(); + if (!this.daggerheartFlag.altFormula[formulaKey]) acc.altFormula[formulaKey] = _del; return acc; }, @@ -129,7 +128,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa static async #removeFormula(_event, target) { await this.daggerheartFlag.updateSource({ - [`altFormula.${target.dataset.key}`]: foundry.data.operators.ForcedDeletion.create() + [`altFormula.${target.dataset.key}`]: _del }); this.render({ internalRefresh: true }); } diff --git a/module/applications/ui/countdownEdit.mjs b/module/applications/ui/countdownEdit.mjs index 7f1deea3..8bb9fc1d 100644 --- a/module/applications/ui/countdownEdit.mjs +++ b/module/applications/ui/countdownEdit.mjs @@ -233,6 +233,6 @@ export default class CountdownEdit extends HandlebarsApplicationMixin(Applicatio } if (this.editingCountdowns.has(countdownId)) this.editingCountdowns.delete(countdownId); - this.updateSetting({ [`countdowns.-=${countdownId}`]: null }); + this.updateSetting({ [`countdowns.${countdownId}`]: _del }); } } diff --git a/module/data/activeEffect/beastformEffect.mjs b/module/data/activeEffect/beastformEffect.mjs index 53430ba3..47e28b4c 100644 --- a/module/data/activeEffect/beastformEffect.mjs +++ b/module/data/activeEffect/beastformEffect.mjs @@ -100,7 +100,7 @@ export default class BeastformEffect extends BaseEffect { token.flags.daggerheart?.beastformSubjectTexture ?? this.characterTokenData.tokenRingImg } }, - 'flags.daggerheart': { '-=beastformTokenImg': null, '-=beastformSubjectTexture': null } + 'flags.daggerheart': { beastformTokenImg: _del, beastformSubjectTexture: _del } }; }; diff --git a/module/data/actor/base.mjs b/module/data/actor/base.mjs index 08308eab..833f1222 100644 --- a/module/data/actor/base.mjs +++ b/module/data/actor/base.mjs @@ -169,9 +169,7 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel { const tagTeam = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll); await tagTeam.updateSource({ initiator: this.parent.id === tagTeam.initiator ? null : tagTeam.initiator, - members: Object.keys(tagTeam.members).find(x => x === this.parent.id) - ? { [`-=${this.parent.id}`]: null } - : {} + members: Object.keys(tagTeam.members).find(x => x === this.parent.id) ? { [this.parent.id]: _del } : {} }); await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, tagTeam); } diff --git a/module/data/actor/party.mjs b/module/data/actor/party.mjs index 236d65db..3eddf235 100644 --- a/module/data/actor/party.mjs +++ b/module/data/actor/party.mjs @@ -48,7 +48,7 @@ export default class DhParty extends BaseDataActor { initiator: this.partyMembers.some(x => x.id === tagTeam.initiator) ? null : tagTeam.initiator, members: Object.keys(tagTeam.members).reduce((acc, key) => { if (this.partyMembers.find(x => x.id === key)) { - acc[`-=${key}`] = null; + acc[key] = _del; } return acc; diff --git a/module/data/fields/actionField.mjs b/module/data/fields/actionField.mjs index a6d0abbe..1305a6d8 100644 --- a/module/data/fields/actionField.mjs +++ b/module/data/fields/actionField.mjs @@ -243,11 +243,11 @@ export function ActionMixin(Base) { : foundry.utils.getProperty(result, basePath); } - delete() { + async delete() { if (!this.inCollection) return this.item; const action = foundry.utils.getProperty(this.item, `system.${this.systemPath}`)?.get(this.id); if (!action) return this.item; - this.item.update({ [`system.${this.systemPath}.-=${this.id}`]: null }); + await this.item.update({ [`system.${this.systemPath}.${this.id}`]: _del }); // Does not work. Unsure why. It worked in v13 <_<' this.constructor._sheets.get(this.uuid)?.close(); } diff --git a/module/data/item/armor.mjs b/module/data/item/armor.mjs index 3d4a62fa..050b66d4 100644 --- a/module/data/item/armor.mjs +++ b/module/data/item/armor.mjs @@ -87,7 +87,7 @@ export default class DHArmor extends AttachableItem { } await this.parent.deleteEmbeddedDocuments('ActiveEffect', effectIds); changes.system.actions = actionIds.reduce((acc, id) => { - acc[`-=${id}`] = null; + acc[id] = _del; return acc; }, {}); diff --git a/module/data/item/base.mjs b/module/data/item/base.mjs index 84f39103..447da3bf 100644 --- a/module/data/item/base.mjs +++ b/module/data/item/base.mjs @@ -230,9 +230,9 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel { if (changed.system?.actions) { const triggersToRemove = Object.keys(changed.system.actions).reduce((acc, key) => { - if (!changed.system.actions[key]) { - const strippedKey = key.replace('-=', ''); - acc.push(...this.actions.get(strippedKey).triggers.map(x => x.trigger)); + const action = changed.system.actions[key]; + if (action && Object.keys(action).length === 0) { + acc.push(...this.actions.get(key).triggers.map(x => x.trigger)); } return acc; diff --git a/module/data/item/weapon.mjs b/module/data/item/weapon.mjs index f333e5f3..85849a83 100644 --- a/module/data/item/weapon.mjs +++ b/module/data/item/weapon.mjs @@ -147,7 +147,7 @@ export default class DHWeapon extends AttachableItem { await this.parent.deleteEmbeddedDocuments('ActiveEffect', removedEffectsUpdate); changes.system.actions = removedActionsUpdate.reduce((acc, id) => { - acc[`-=${id}`] = null; + acc[id] = _del; return acc; }, {}); diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index e8bea0bf..cb51a255 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -142,7 +142,7 @@ export default class DhpActor extends Actor { } const updatedLevelups = Object.keys(this.system.levelData.levelups).reduce((acc, level) => { - if (Number(level) > usedLevel) acc[`-=${level}`] = null; + if (Number(level) > usedLevel) acc[level] = _del; return acc; }, {}); @@ -187,7 +187,7 @@ export default class DhpActor extends Actor { if (experiences.length > 0) { const getUpdate = () => ({ 'system.experiences': experiences.reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}) }); diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index bb9a0cfa..7ca2c41c 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -171,10 +171,10 @@ export const getDeleteKeys = (property, innerProperty, innerPropertyDefaultValue [innerProperty]: innerPropertyDefaultValue }; } else { - acc[`${key}.-=${innerProperty}`] = null; + acc[`${key}.${innerProperty}`] = _del; } } else { - acc[`-=${key}`] = null; + acc[`${key}`] = _del; } return acc; diff --git a/module/systemRegistration/migrations.mjs b/module/systemRegistration/migrations.mjs index 743d42a4..4216c38f 100644 --- a/module/systemRegistration/migrations.mjs +++ b/module/systemRegistration/migrations.mjs @@ -197,7 +197,7 @@ export async function runMigrations() { const initatorMissing = tagTeam.initiator && !game.actors.some(actor => actor.id === tagTeam.initiator); const missingMembers = Object.keys(tagTeam.members).reduce((acc, id) => { if (!game.actors.some(actor => actor.id === id)) { - acc[`-=${id}`] = null; + acc[id] = _del; } return acc; }, {});