Grabbed dndbeyond's source code

```
~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js
```
This commit is contained in:
2025-05-28 11:50:03 -07:00
commit 8df9031d27
3592 changed files with 319051 additions and 0 deletions
@@ -0,0 +1,429 @@
import { ActivationAccessors } from '../Activation';
import { FeatureTypeEnum } from '../Core';
/**
*
* @param feature
*/
export function getDefinition(feature) {
return feature.definition;
}
/**
*
* @param feature
*/
export function getDefinitionKey(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.definitionKey) !== null && _b !== void 0 ? _b : '';
}
/**
*
* @param feature
*/
export function getName(feature) {
return getDefinitionName(feature);
}
/**
*
* @param feature
*/
export function getDefinitionName(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';
}
/**
*
* @param feature
*/
export function getId(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : -1;
}
/**
*
* @param feature
*/
export function getEntityTypeId(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.entityTypeId) !== null && _b !== void 0 ? _b : -1;
}
/**
*
* @param feature
*/
export function getUniqueKey(feature) {
return `${getId(feature)}-${getEntityTypeId(feature)}`;
}
/**
*
* @param feature
*/
export function getDescription(feature) {
return getDefinitionDescription(feature);
}
/**
*
* @param feature
*/
export function getDefinitionDescription(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getSourceId(feature) {
return getDefinitionSourceId(feature);
}
/**
*
* @param feature
*/
export function getDefinitionSourceId(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.sourceId) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getSourcePage(feature) {
return getDefinitionSourcePage(feature);
}
/**
*
* @param feature
*/
export function getDefinitionSourcePage(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.sourcePageNumber) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getActivation(feature) {
return getDefinitionActivation(feature);
}
/**
*
* @param feature
*/
export function getDefinitionActivation(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.activation) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getActivationTime(feature) {
return ActivationAccessors.getTime(getActivation(feature));
}
/**
*
* @param feature
*/
export function getActivationType(feature) {
return ActivationAccessors.getType(getActivation(feature));
}
/**
*
* @param feature
*/
export function getDefinitionLevelScales(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.levelScales) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getLevelScales(feature) {
return getDefinitionLevelScales(feature);
}
/**
*
* @param feature
*/
export function getDefinitionLimitedUse(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.limitedUse) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getLimitedUse(feature) {
return getDefinitionLimitedUse(feature);
}
/**
*
* @param feature
*/
export function getMultiClassDescription(feature) {
return getDefinitionMultiClassDescription(feature);
}
/**
*
* @param feature
*/
export function getDefinitionMultiClassDescription(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.multiClassDescription) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getSnippet(feature) {
return getDefinitionSnippet(feature);
}
/**
*
* @param feature
*/
export function getDefinitionSnippet(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.snippet) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getDisplayOrder(feature) {
return getDefinitionDisplayOrder(feature);
}
/**
*
* @param feature
*/
export function getDefinitionDisplayOrder(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.displayOrder) !== null && _b !== void 0 ? _b : null;
}
/**
*
* @param feature
*/
export function getHideInBuilder(feature) {
return getDefinitionHideInBuilder(feature);
}
/**
*
* @param feature
*/
export function getDefinitionHideInBuilder(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.hideInBuilder) !== null && _b !== void 0 ? _b : false;
}
/**
*
* @param feature
*/
export function getHideInSheet(feature) {
return getDefinitionHideInSheet(feature);
}
/**
*
* @param feature
*/
export function getDefinitionHideInSheet(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.hideInSheet) !== null && _b !== void 0 ? _b : false;
}
/**
* @deprecated see getDefinitionIsSubClassFeature
* @param feature
*/
export function getIsSubClassFeature(feature) {
return getDefinitionIsSubClassFeature(feature);
}
/**
* @deprecated we are switching to the property "classId" instead for more useful information
* @param feature
*/
export function getDefinitionIsSubClassFeature(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.isSubClassFeature) !== null && _b !== void 0 ? _b : false;
}
/**
*
* @param feature
*/
export function getDefinitionClassId(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.classId) !== null && _b !== void 0 ? _b : -1;
}
/**
*
* @param feature
*/
export function getClassId(feature) {
return getDefinitionClassId(feature);
}
/**
*
* @param feature
*/
export function getRequiredLevel(feature) {
return getDefinitionRequiredLevel(feature);
}
/**
*
* @param feature
*/
export function getDefinitionRequiredLevel(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.requiredLevel) !== null && _b !== void 0 ? _b : -1;
}
/**
*
* @param feature
*/
export function getDefinitionCreatureRules(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.creatureRules) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getCreatureRules(feature) {
return getDefinitionCreatureRules(feature);
}
/**
*
* @param feature
*/
export function getDefinitionSpellListIds(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.spellListIds) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getSpellListIds(feature) {
return getDefinitionSpellListIds(feature);
}
/**
*
* @param feature
*/
export function getAffectedFeatureDefinitionKeys(feature) {
return getDefinitionAffectedFeatureDefinitionKeys(feature);
}
/**
*
* @param feature
*/
export function getDefinitionAffectedFeatureDefinitionKeys(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.affectedFeatureDefinitionKeys) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getSources(feature) {
return getDefinitionSources(feature);
}
/**
*
* @param feature
*/
export function getDefinitionSources(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.sources) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getFeatureType(feature) {
return getDefinitionFeatureType(feature);
}
/**
*
* @param feature
*/
export function getDefinitionFeatureType(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.featureType) !== null && _b !== void 0 ? _b : FeatureTypeEnum.GRANTED;
}
/**
*
* @param feature
*/
export function getLevelScale(feature) {
return feature.levelScale;
}
/**
*
* @param feature
*/
export function getOptions(feature) {
return feature.options;
}
/**
*
* @param feature
*/
export function getActions(feature) {
return feature.actions;
}
/**
*
* @param feature
*/
export function getChoices(feature) {
return feature.choices;
}
/**
*
* @param feature
*/
export function getModifiers(feature) {
return feature.modifiers;
}
/**
*
* @param feature
*/
export function getSpells(feature) {
return feature.spells;
}
/**
*
* @param feature
*/
export function getFeats(feature) {
return feature.feats;
}
/**
*
* @param feature
*/
export function getInfusionChoices(feature) {
return feature.infusionChoices;
}
/**
*
* @param feature
*/
export function getInfusionRules(feature) {
var _a, _b;
return (_b = (_a = getDefinition(feature)) === null || _a === void 0 ? void 0 : _a.infusionRules) !== null && _b !== void 0 ? _b : [];
}
/**
*
* @param feature
*/
export function getAccessType(feature) {
return feature.accessType;
}
export function getFeatListContracts(featureContract) {
var _a, _b;
return (_b = (_a = getDefinition(featureContract)) === null || _a === void 0 ? void 0 : _a.grantedFeats) !== null && _b !== void 0 ? _b : [];
}
@@ -0,0 +1,93 @@
import { ActionGenerators } from '../Action';
import { ChoiceGenerators } from '../Choice';
import { ClassAccessors } from '../Class';
import { CreatureRuleGenerators } from '../CreatureRule';
import { DataOriginDataInfoKeyEnum, DataOriginGenerators, DataOriginTypeEnum, } from '../DataOrigin';
import { DefinitionPoolUtils } from '../DefinitionPool';
import { FeatGenerators } from '../Feat';
import { FeatList } from '../FeatList';
import { InfusionChoiceGenerators } from '../InfusionChoice';
import { ModifierGenerators } from '../Modifier';
import { OptionAccessors, OptionGenerators } from '../Option';
import { SpellGenerators } from '../Spell';
import { getCreatureRules, getDefinitionKey, getEntityTypeId, getFeatListContracts, getId, getInfusionRules, getOptions, getUniqueKey, } from './accessors';
export function generateClassFeature(charClass, classFeature, ruleData, classesLookupData, definitionPool, characterId, choiceComponents, baseFeats) {
const id = getId(classFeature);
const entityTypeId = getEntityTypeId(classFeature);
const { actionLookup, choiceLookup, modifierLookup, spellLookup, valueLookup, featLookup, optionLookup, infusionChoiceInfusionLookup, knownInfusionLookupByChoiceKey, spellListDataOriginLookup, } = classesLookupData;
const actions = ActionGenerators.generateBaseActions(id, entityTypeId, actionLookup, valueLookup, DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass);
const choices = ChoiceGenerators.generateBaseChoices(id, entityTypeId, choiceLookup, DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass);
const modifiers = ModifierGenerators.generateModifiers(id, entityTypeId, modifierLookup, DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass);
const spells = SpellGenerators.generateBaseSpells(id, entityTypeId, spellLookup, DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass, ruleData, spellListDataOriginLookup, valueLookup);
const feats = FeatGenerators.generateDataOriginFeats(id, entityTypeId, featLookup, DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass);
const options = generateClassFeatureOptions(classFeature, charClass, featLookup, actionLookup, spellLookup, optionLookup, modifierLookup, valueLookup, spellListDataOriginLookup, ruleData);
const infusionChoices = InfusionChoiceGenerators.generateInfusionChoices(getInfusionRules(classFeature), DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass, infusionChoiceInfusionLookup, knownInfusionLookupByChoiceKey, characterId);
const featLists = getFeatListContracts(classFeature).map((contract) => new FeatList(contract, choiceComponents.definitionKeyNameMap, baseFeats));
return Object.assign(Object.assign({}, classFeature), { actions,
choices,
feats,
modifiers,
spells,
options,
infusionChoices, accessType: DefinitionPoolUtils.getDefinitionAccessType(getDefinitionKey(classFeature), definitionPool), featLists });
}
/**
*
* @param classFeature
* @param charClass
* @param featLookup
* @param actionLookup
* @param spellLookup
* @param optionLookup
* @param modifierLookup
* @param valueLookup
* @param spellListDataOriginLookup
* @param ruleData
*/
export function generateClassFeatureOptions(classFeature, charClass, featLookup, actionLookup, spellLookup, optionLookup, modifierLookup, valueLookup, spellListDataOriginLookup, ruleData) {
const baseOptions = OptionGenerators.generateDataOriginBaseOptions(getId(classFeature), getEntityTypeId(classFeature), optionLookup, DataOriginTypeEnum.CLASS_FEATURE, classFeature, charClass);
return OptionGenerators.generateOptions(baseOptions, DataOriginTypeEnum.CLASS_FEATURE, featLookup, actionLookup, spellLookup, optionLookup, modifierLookup, valueLookup, spellListDataOriginLookup, ruleData, classFeature, charClass);
}
/**
*
* @param classes
* @param xpInfo
* @param ruleData
*/
export function generateClassCreatureRules(classes, xpInfo, ruleData) {
const rules = [];
classes.forEach((charClass) => {
const features = ClassAccessors.getActiveClassFeatures(charClass);
features.forEach((feature) => {
const dataOrigin = DataOriginGenerators.generateDataOrigin(DataOriginTypeEnum.CLASS_FEATURE, feature, charClass);
const featureRules = getCreatureRules(feature);
featureRules.forEach((rule) => {
rules.push(CreatureRuleGenerators.generateRule(rule, dataOrigin, xpInfo, ruleData));
});
const options = getOptions(feature);
options.forEach((option) => {
const optionRules = OptionAccessors.getCreatureRules(option);
optionRules.forEach((rule) => {
rules.push(CreatureRuleGenerators.generateRule(rule, dataOrigin, xpInfo, ruleData));
});
});
});
});
return rules;
}
/**
*
* @param classes
*/
export function generateRefClassFeatureData(classes) {
let data = {};
classes.forEach((charClass) => {
ClassAccessors.getClassFeatures(charClass).forEach((classFeature) => {
data[getUniqueKey(classFeature)] = {
[DataOriginDataInfoKeyEnum.PRIMARY]: classFeature,
[DataOriginDataInfoKeyEnum.PARENT]: charClass,
};
});
});
return data;
}
@@ -0,0 +1,9 @@
import * as ClassFeatureAccessors from './accessors';
import * as ClassFeatureGenerators from './generators';
import * as ClassFeatureSimulators from './simulators';
import * as ClassFeatureTypings from './typings';
import * as ClassFeatureUtils from './utils';
import * as ClassFeatureValidators from './validators';
export * from './typings';
export { ClassFeatureAccessors, ClassFeatureGenerators, ClassFeatureSimulators, ClassFeatureUtils, ClassFeatureValidators, };
export default Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ClassFeatureAccessors), ClassFeatureGenerators), ClassFeatureSimulators), ClassFeatureTypings), ClassFeatureUtils), ClassFeatureValidators);
@@ -0,0 +1,42 @@
import { ClassAccessors } from '../Class';
import { DefinitionPoolUtils } from '../DefinitionPool';
import { FeatList } from '../FeatList';
import { getFeatListContracts } from './accessors';
export function simulateClassFeature(definitionKey, definitionPool,
// Optional args. Sometimes this method is called just to get an object that kind of looks like
// a class feature, but is only used for a few properties.
classes, choiceComponents, baseFeats) {
var _a;
const definition = DefinitionPoolUtils.getClassFeatureDefinition(definitionKey, definitionPool);
if (definition === null) {
return null;
}
let levelScale = null;
if (definition === null || definition === void 0 ? void 0 : definition.levelScales) {
// Find class that correlates to feature
const classFeatureClass = classes === null || classes === void 0 ? void 0 : classes.find((classIterator) => ClassAccessors.getId(classIterator) === definition.classId);
if (classFeatureClass) {
// Find max level scale of appropriate level
(_a = definition.levelScales) === null || _a === void 0 ? void 0 : _a.forEach((definitionLevelScale) => {
if (definitionLevelScale.level <= classFeatureClass.level) {
levelScale = definitionLevelScale;
}
});
}
}
const classFeatureMapping = simulateClassFeatureContract({
definition,
levelScale,
});
const featLists = choiceComponents && baseFeats
? getFeatListContracts(classFeatureMapping).map((contract) => new FeatList(contract, choiceComponents.definitionKeyNameMap, baseFeats))
: [];
return Object.assign(Object.assign({}, classFeatureMapping), { actions: [], choices: [], feats: [], modifiers: [], options: [], spells: [], infusionChoices: [], accessType: DefinitionPoolUtils.getDefinitionAccessType(definitionKey, definitionPool), featLists });
}
/**
*
* @param classFeatureProps
*/
export function simulateClassFeatureContract(classFeatureProps) {
return Object.assign({ levelScale: null, definition: null }, classFeatureProps);
}
@@ -0,0 +1,27 @@
import { ClassAccessors } from '../Class';
import { AppContextTypeEnum, DB_STRING_MARTIAL_ARTS, DB_STRING_PACT_MAGIC, DB_STRING_SPELLCASTING, DB_STRING_DEDICATED_WEAPON, } from '../Core';
import { getHideInBuilder, getHideInSheet, getLevelScale, getName } from './accessors';
export function doesEnableSpellcasting(feature) {
return getName(feature) === DB_STRING_SPELLCASTING;
}
export function doesEnablePactMagic(feature) {
return getName(feature) === DB_STRING_PACT_MAGIC;
}
export function doesEnableDedicatedWeapon(feature) {
return getName(feature) === DB_STRING_DEDICATED_WEAPON;
}
export function doesEnableMartialArts(feature) {
return getName(feature).indexOf(DB_STRING_MARTIAL_ARTS) === 0;
}
export function getContextData(feature, charClass) {
return {
levelScale: getLevelScale(feature),
classLevel: charClass ? ClassAccessors.getLevel(charClass) : null,
};
}
export function getHideInContext(feature, context) {
if (context === AppContextTypeEnum.SHEET) {
return getHideInSheet(feature);
}
return getHideInBuilder(feature);
}
@@ -0,0 +1,10 @@
import { ClassValidators } from '../Class';
import { getClassId } from './accessors';
/**
*
* @param charClass
* @param classFeature
*/
export function isValidClassClassFeature(charClass, classFeature) {
return ClassValidators.isValidClassId(charClass, getClassId(classFeature));
}