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:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user