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,25 @@
export function getLevel(infusionChoice) {
return infusionChoice.level;
}
export function getKey(infusionChoice) {
return infusionChoice.choiceKey;
}
export function getKnownInfusion(infusionChoice) {
return infusionChoice.knownInfusion;
}
export function getInfusion(infusionChoice) {
return infusionChoice.infusion;
}
export function getDataOrigin(infusionChoice) {
return infusionChoice.dataOrigin;
}
export function getDataOriginType(infusionChoice) {
const dataOrigin = getDataOrigin(infusionChoice);
return dataOrigin.type;
}
export function getForcedModifierData(infusionChoice) {
return infusionChoice.forcedModifierData;
}
export function canInfuse(infusionChoice) {
return infusionChoice.canInfuse;
}
@@ -0,0 +1,52 @@
import { orderBy } from 'lodash';
import { ClassAccessors } from '../Class';
import { DataOriginTypeEnum } from '../DataOrigin';
import { InfusionAccessors, InfusionModifierDataTypeEnum, InfusionTypeEnum } from '../Infusion';
import { KnownInfusionAccessors } from '../KnownInfusion';
import { getKnownInfusion, getDataOrigin, getDataOriginType } from './accessors';
/**
*
* @param infusionChoice
*/
export function deriveForcedModifierData(infusionChoice) {
const knownInfusion = getKnownInfusion(infusionChoice);
if (knownInfusion === null) {
return null;
}
const simulatedInfusion = KnownInfusionAccessors.getSimulatedInfusion(knownInfusion);
if (simulatedInfusion === null) {
return null;
}
const modifierData = InfusionAccessors.getModifierData(simulatedInfusion);
const modifierDataType = InfusionAccessors.getModifierDataType(simulatedInfusion);
const dataOriginType = getDataOriginType(infusionChoice);
if (dataOriginType === DataOriginTypeEnum.CLASS_FEATURE &&
modifierDataType === InfusionModifierDataTypeEnum.CLASS_LEVEL) {
const dataOrigin = getDataOrigin(infusionChoice);
const charClass = dataOrigin.parent;
const classLevel = ClassAccessors.getLevel(charClass);
const orderedModifierData = orderBy(modifierData, (data) => data.value, 'desc');
const foundModifierData = orderedModifierData.find((data) => data.value !== null && classLevel >= data.value);
return foundModifierData ? foundModifierData : null;
}
return null;
}
/**
*
* @param infusionChoice
*/
export function deriveCanInfuse(infusionChoice) {
const knownInfusion = getKnownInfusion(infusionChoice);
if (knownInfusion === null) {
return false;
}
const simulatedInfusion = KnownInfusionAccessors.getSimulatedInfusion(knownInfusion);
if (simulatedInfusion === null) {
return false;
}
if (InfusionAccessors.getType(simulatedInfusion) === InfusionTypeEnum.REPLICATE) {
const itemId = KnownInfusionAccessors.getItemId(knownInfusion);
return itemId !== null;
}
return true;
}
@@ -0,0 +1,79 @@
import { TypeScriptUtils } from '../../utils';
import { ClassAccessors } from '../Class';
import { ClassFeatureAccessors } from '../ClassFeature';
import { DataOriginGenerators } from '../DataOrigin';
import { HelperUtils } from '../Helper';
import { getKey } from './accessors';
import { deriveCanInfuse, deriveForcedModifierData } from './derivers';
import { validateIsAvailable } from './validators';
/**
*
* @param infusionChoiceDefinition
* @param dataOriginType
* @param primary
* @param parent
* @param infusionChoiceInfusionLookup
* @param knownInfusionLookupByChoiceKey
*/
export function generateDataOriginBaseInfusionChoice(infusionChoiceDefinition, dataOriginType, primary, parent, infusionChoiceInfusionLookup, knownInfusionLookupByChoiceKey, characterId) {
const choiceKey = getKey(infusionChoiceDefinition);
if (!choiceKey) {
return null;
}
const lookupKey = `${characterId}-${choiceKey}`;
return Object.assign(Object.assign({}, infusionChoiceDefinition), { dataOrigin: DataOriginGenerators.generateDataOrigin(dataOriginType, primary, parent), infusion: HelperUtils.lookupDataOrFallback(infusionChoiceInfusionLookup, lookupKey), knownInfusion: HelperUtils.lookupDataOrFallback(knownInfusionLookupByChoiceKey, lookupKey) });
}
/**
*
* @param dataOriginBaseInfusionChoice
*/
export function generateInfusionChoice(dataOriginBaseInfusionChoice) {
return Object.assign(Object.assign({}, dataOriginBaseInfusionChoice), { forcedModifierData: deriveForcedModifierData(dataOriginBaseInfusionChoice), canInfuse: deriveCanInfuse(dataOriginBaseInfusionChoice) });
}
/**
*
* @param infusionChoices
* @param dataOriginType
* @param primary
* @param parent
* @param infusionChoiceInfusionLookup
* @param knownInfusionLookupByChoiceKey
*/
export function generateInfusionChoices(infusionChoices, dataOriginType, primary, parent, infusionChoiceInfusionLookup, knownInfusionLookupByChoiceKey, characterId) {
return infusionChoices
.map((infusionChoiceDefinition) => {
const dataOriginBaseInfusionChoice = generateDataOriginBaseInfusionChoice(infusionChoiceDefinition, dataOriginType, primary, parent, infusionChoiceInfusionLookup, knownInfusionLookupByChoiceKey, characterId);
if (!dataOriginBaseInfusionChoice) {
return null;
}
return generateInfusionChoice(dataOriginBaseInfusionChoice);
})
.filter(TypeScriptUtils.isNotNullOrUndefined);
}
/**
*
* @param classes
*/
export function generateAggregatedInfusionChoices(classes) {
const chosenItems = [];
classes.forEach((charClass) => {
ClassAccessors.getClassFeatures(charClass).forEach((feature) => {
chosenItems.push(...ClassFeatureAccessors.getInfusionChoices(feature));
});
});
return chosenItems;
}
/**
*
* @param infusionChoices
*/
export function generateAvailableInfusionChoices(infusionChoices) {
return infusionChoices.filter(validateIsAvailable);
}
/**
*
* @param infusionChoices
*/
export function generateInfusionChoiceLookup(infusionChoices) {
return HelperUtils.generateNonNullLookup(infusionChoices, getKey);
}
@@ -0,0 +1,8 @@
import * as InfusionChoiceAccessors from './accessors';
import * as InfusionChoiceDerivers from './derivers';
import * as InfusionChoiceGenerators from './generators';
import * as InfusionChoiceTypings from './typings';
import * as InfusionChoiceValidators from './validators';
export * from './typings';
export { InfusionChoiceAccessors, InfusionChoiceDerivers, InfusionChoiceGenerators, InfusionChoiceValidators };
export default Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, InfusionChoiceAccessors), InfusionChoiceDerivers), InfusionChoiceGenerators), InfusionChoiceTypings), InfusionChoiceValidators);
@@ -0,0 +1,24 @@
import { ClassAccessors } from '../Class';
import { DataOriginTypeEnum } from '../DataOrigin';
import { getLevel, getDataOrigin, getDataOriginType } from './accessors';
/**
*
* @param infusionChoice
*/
export function validateIsAvailable(infusionChoice) {
const dataOrigin = getDataOrigin(infusionChoice);
const dataOriginType = getDataOriginType(infusionChoice);
if (dataOrigin) {
switch (dataOriginType) {
case DataOriginTypeEnum.CLASS_FEATURE:
const charClass = dataOrigin.parent;
if (getLevel(infusionChoice) <= ClassAccessors.getLevel(charClass)) {
return true;
}
break;
default:
// not implemented
}
}
return false;
}