``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
345 lines
13 KiB
JavaScript
345 lines
13 KiB
JavaScript
import { BackgroundAccessors } from '../Background';
|
|
import { ClassAccessors } from '../Class';
|
|
import { ClassFeatureAccessors } from '../ClassFeature';
|
|
import { ConditionAccessors } from '../Condition';
|
|
import { DataOriginTypeEnum, DataOriginUtils } from '../DataOrigin';
|
|
import { FeatAccessors } from '../Feat';
|
|
import { ItemAccessors } from '../Item';
|
|
import { RaceAccessors } from '../Race';
|
|
import { RacialTraitAccessors } from '../RacialTrait';
|
|
import { VehicleAccessors } from '../Vehicle';
|
|
import { validateIsRestrictedEntityDefinition } from './validators';
|
|
/**
|
|
*
|
|
* @param dataOrigin
|
|
* @param defaultValue
|
|
* @param tryParent
|
|
*/
|
|
export function getDataOriginName(dataOrigin, defaultValue = '', tryParent = false) {
|
|
var _a;
|
|
let extraDisplay = null;
|
|
switch (dataOrigin.type) {
|
|
case DataOriginTypeEnum.RACE:
|
|
if (tryParent) {
|
|
extraDisplay = RaceAccessors.getFullName(dataOrigin.parent);
|
|
}
|
|
if (extraDisplay === null) {
|
|
extraDisplay = RacialTraitAccessors.getName(dataOrigin.primary);
|
|
}
|
|
break;
|
|
case DataOriginTypeEnum.CLASS:
|
|
extraDisplay = ClassAccessors.getName(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.CLASS_FEATURE:
|
|
if (tryParent) {
|
|
extraDisplay = ClassAccessors.getName(dataOrigin.parent);
|
|
}
|
|
if (extraDisplay === null) {
|
|
extraDisplay = ClassFeatureAccessors.getName(dataOrigin.primary);
|
|
}
|
|
break;
|
|
case DataOriginTypeEnum.FEAT:
|
|
extraDisplay = FeatAccessors.getName(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.BACKGROUND:
|
|
extraDisplay = BackgroundAccessors.getName(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.ITEM:
|
|
extraDisplay = ItemAccessors.getDefinitionName(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.CUSTOM:
|
|
extraDisplay = dataOrigin.primary === null ? null : dataOrigin.primary;
|
|
break;
|
|
case DataOriginTypeEnum.FEAT_LIST:
|
|
if (tryParent && dataOrigin.parent !== null) {
|
|
if (dataOrigin.parentType === DataOriginTypeEnum.BACKGROUND) {
|
|
extraDisplay = ((_a = dataOrigin.parent.definition) === null || _a === void 0 ? void 0 : _a.name) || null;
|
|
}
|
|
else if (dataOrigin.parentType === DataOriginTypeEnum.CLASS_FEATURE) {
|
|
extraDisplay = ClassFeatureAccessors.getName(dataOrigin.primary);
|
|
}
|
|
}
|
|
if (extraDisplay === null && dataOrigin.primary !== null) {
|
|
extraDisplay = dataOrigin.primary.name;
|
|
}
|
|
break;
|
|
default:
|
|
//not implemented
|
|
}
|
|
return extraDisplay === null ? defaultValue : extraDisplay;
|
|
}
|
|
/**
|
|
* Gets the id as a string of the primary origin if possible.
|
|
* @param dataOrigin the data origin object from an entity
|
|
* @returns id of the primary origin object as a string, or null
|
|
*/
|
|
export function tryGetPrimaryId(dataOrigin) {
|
|
// The data origin system is risky business because it is all `any` typed.
|
|
// The logic about the types is based on `getDataOriginName` above.
|
|
try {
|
|
let id;
|
|
switch (dataOrigin.type) {
|
|
case DataOriginTypeEnum.RACE:
|
|
id = RacialTraitAccessors.getId(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.CLASS:
|
|
id = ClassAccessors.getId(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.CLASS_FEATURE:
|
|
id = ClassFeatureAccessors.getId(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.FEAT:
|
|
id = FeatAccessors.getId(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.BACKGROUND:
|
|
id = BackgroundAccessors.getId(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.ITEM:
|
|
id = ItemAccessors.getId(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.FEAT_LIST:
|
|
if (dataOrigin.primary !== null) {
|
|
id = dataOrigin.primary.id;
|
|
}
|
|
break;
|
|
}
|
|
return id ? `${id}` : null;
|
|
}
|
|
catch (e) {
|
|
console.log(e);
|
|
return null;
|
|
}
|
|
}
|
|
/**
|
|
* Gets the id as a string of parent origin if possible.
|
|
* Note that most entity types don't have a parent origin.
|
|
* @param dataOrigin the data origin object from an entity
|
|
* @returns id of the parent origin object as a string, or null
|
|
*/
|
|
export function tryGetParentId(dataOrigin) {
|
|
var _a;
|
|
// See comment above about the typings.
|
|
try {
|
|
let id;
|
|
switch (dataOrigin.type) {
|
|
case DataOriginTypeEnum.RACE:
|
|
id = RaceAccessors.getDefinitionKey(dataOrigin.parent);
|
|
break;
|
|
case DataOriginTypeEnum.CLASS_FEATURE:
|
|
id = ClassAccessors.getId(dataOrigin.parent);
|
|
break;
|
|
case DataOriginTypeEnum.FEAT_LIST:
|
|
if (dataOrigin.parentType === DataOriginTypeEnum.BACKGROUND && dataOrigin.parent !== null) {
|
|
id = (_a = dataOrigin.parent.definition) === null || _a === void 0 ? void 0 : _a.id;
|
|
}
|
|
else if (dataOrigin.parentType === DataOriginTypeEnum.CLASS_FEATURE && dataOrigin.parent !== null) {
|
|
id = ClassFeatureAccessors.getId(dataOrigin.parent);
|
|
}
|
|
break;
|
|
}
|
|
return id ? `${id}` : null;
|
|
}
|
|
catch (e) {
|
|
console.log(e);
|
|
return null;
|
|
}
|
|
}
|
|
/**
|
|
*
|
|
* @param ref
|
|
* @param refData
|
|
* @param defaultValue
|
|
* @param tryParent
|
|
*/
|
|
export function getDataOriginRefName(ref, refData, defaultValue, tryParent = false) {
|
|
var _a;
|
|
let extraDisplay = null;
|
|
switch (ref.type) {
|
|
case DataOriginTypeEnum.RACE: {
|
|
if (tryParent) {
|
|
const parent = DataOriginUtils.getRefParent(ref, refData);
|
|
if (parent !== null) {
|
|
extraDisplay = RaceAccessors.getFullName(parent);
|
|
}
|
|
}
|
|
if (extraDisplay === null) {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
extraDisplay = RacialTraitAccessors.getName(primary);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.CLASS: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary) {
|
|
extraDisplay = ClassAccessors.getName(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.CLASS_FEATURE: {
|
|
if (tryParent) {
|
|
const parent = DataOriginUtils.getRefParent(ref, refData);
|
|
if (parent !== null) {
|
|
extraDisplay = ClassAccessors.getName(parent);
|
|
}
|
|
}
|
|
if (extraDisplay === null) {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
extraDisplay = ClassFeatureAccessors.getName(primary);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.FEAT: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
extraDisplay = FeatAccessors.getName(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.BACKGROUND: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
extraDisplay = BackgroundAccessors.getName(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.ITEM: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
extraDisplay = ItemAccessors.getName(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.CUSTOM: {
|
|
extraDisplay = 'Custom';
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.UNKNOWN: {
|
|
extraDisplay = defaultValue !== null && defaultValue !== void 0 ? defaultValue : 'No Origin';
|
|
break;
|
|
}
|
|
default:
|
|
//not implemented
|
|
}
|
|
return (_a = extraDisplay !== null && extraDisplay !== void 0 ? extraDisplay : defaultValue) !== null && _a !== void 0 ? _a : '';
|
|
}
|
|
/**
|
|
*
|
|
* @param dataOrigin
|
|
* @param fallback
|
|
*/
|
|
export function getPrimaryDescription(dataOrigin, fallback = '') {
|
|
let description = fallback;
|
|
if (!dataOrigin) {
|
|
return description;
|
|
}
|
|
switch (dataOrigin.type) {
|
|
case DataOriginTypeEnum.RACE:
|
|
description = RacialTraitAccessors.getDescription(dataOrigin.primary);
|
|
break;
|
|
case DataOriginTypeEnum.FEAT:
|
|
const featDescription = FeatAccessors.getDescription(dataOrigin.primary);
|
|
description = featDescription === null ? '' : featDescription;
|
|
break;
|
|
case DataOriginTypeEnum.CLASS_FEATURE:
|
|
const classFeatureDescription = ClassFeatureAccessors.getDescription(dataOrigin.primary);
|
|
description = classFeatureDescription === null ? '' : classFeatureDescription;
|
|
break;
|
|
default:
|
|
if (dataOrigin.primary && dataOrigin.primary.definition && dataOrigin.primary.definition.description) {
|
|
description = dataOrigin.primary.definition.description;
|
|
}
|
|
}
|
|
return description === null ? '' : description;
|
|
}
|
|
/**
|
|
*
|
|
* @param ref
|
|
* @param refData
|
|
* @param fallback
|
|
*/
|
|
export function getDataOriginRefPrimaryDescription(ref, refData, fallback = '') {
|
|
let description = null;
|
|
switch (ref.type) {
|
|
case DataOriginTypeEnum.RACE: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = RacialTraitAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.FEAT: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = FeatAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.CLASS: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary) {
|
|
description = ClassAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.CLASS_FEATURE: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = ClassFeatureAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.BACKGROUND: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = BackgroundAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.ITEM: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = ItemAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.VEHICLE: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = VehicleAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
case DataOriginTypeEnum.CONDITION: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
description = ConditionAccessors.getDescription(primary);
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
// not implemented
|
|
}
|
|
return description !== null && description !== void 0 ? description : fallback;
|
|
}
|
|
/**
|
|
*
|
|
* @param entities
|
|
* @param entityRestrictionData
|
|
*/
|
|
export function filterNonRestrictedEntities(entities, entityRestrictionData) {
|
|
return entities.filter((entity) => entity.definition !== null &&
|
|
!validateIsRestrictedEntityDefinition(entity.definition, entityRestrictionData));
|
|
}
|
|
/**
|
|
*
|
|
* @param entityDefinitions
|
|
* @param entityRestrictionData
|
|
*/
|
|
export function filterNonRestrictedEntityDefinitions(entityDefinitions, entityRestrictionData) {
|
|
return entityDefinitions.filter((definition) => !validateIsRestrictedEntityDefinition(definition, entityRestrictionData));
|
|
}
|