// Defaults for the roster transforms. These started life as module constants // in the Python scripts this was ported from; the values are the same, but the app // passes them in so they can be edited without touching the transform code. export const defaultConfig = { // --- mergeDuplicateUnits ------------------------------------------------- // Two force-level selections are the same unit when all of these attributes // agree. ``entryId`` identifies the catalogue entry plus the option path // that produced it, so it is the real key; ``name`` and ``type`` are there // so a unit the user renamed by hand stays a unit of its own. unitMatchAttrs: ["entryId", "name", "type"], // Selections carrying one of these categories are roster bookkeeping // (battle size, detachment, ...), not datasheets. Leave them alone. skipCategories: ["Configuration"], // --- removeLeaderAbilities ---------------------------------------------- // Abilities to strip, matched against the ``name`` attribute (exactly, // case-sensitively). Both the Abilities profile and the same-named rule go. abilitiesToStrip: ["Leader", "Support"], // --- convertChoiceAbilities --------------------------------------------- // Abilities to split into per-option profiles, matched against the // profile's ``name`` attribute. abilitiesToConvert: ["Canticles of the Omnissiah", "Battle Protocols", "Icon of War"], }; // Which transforms run by default when a roster is loaded. export const defaultToggles = { mergeDuplicateUnits: true, removeLeaderAbilities: true, convertChoiceAbilities: true, }; // typeName BattleScribe files datasheet abilities under. Only profiles of // this type are matched, so a *weapon* that happened to be called "Support" // stays, and a rule that happens to share an ability's name is still removed // deliberately (the strip wants both halves). export const ABILITY_TYPE_NAME = "Abilities"; // Name of the characteristic holding the rules text. export const DESCRIPTION_CHARACTERISTIC = "Description"; // Child elements of a that get merged, in the order BattleScribe // writes them. The order only matters when a container is missing from the // unit we keep and has to be created. export const CONTAINER_ORDER = [ "rules", "profiles", "selections", "costs", "categories", ]; // Containers that are removed once a strip empties them. A container that was // *already* empty is left as it was. export const PRUNABLE_CONTAINERS = ["profiles", "rules"];