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,21 @@
/**
*
* @param duration
*/
export function getInterval(duration) {
return duration.durationInterval;
}
/**
*
* @param duration
*/
export function getUnit(duration) {
return duration.durationUnit;
}
/**
*
* @param duration
*/
export function getType(duration) {
return duration.durationType;
}
@@ -0,0 +1,9 @@
export var DurationUnitEnum;
(function (DurationUnitEnum) {
DurationUnitEnum["ROUND"] = "Round";
DurationUnitEnum["MINUTE"] = "Minute";
DurationUnitEnum["HOUR"] = "Hour";
DurationUnitEnum["DAY"] = "Day";
DurationUnitEnum["UNTIL_DISPELLED"] = "Until Dispelled";
DurationUnitEnum["SPECIAL"] = "Special";
})(DurationUnitEnum || (DurationUnitEnum = {}));
@@ -0,0 +1,7 @@
import * as DurationAccessors from './accessors';
import * as DurationConstants from './constants';
import * as DurationRenderers from './renderers';
import * as DurationUtils from './utils';
export * from './constants';
export { DurationAccessors, DurationRenderers, DurationUtils };
export default Object.assign(Object.assign(Object.assign(Object.assign({}, DurationAccessors), DurationConstants), DurationRenderers), DurationUtils);
@@ -0,0 +1,73 @@
import { FormatUtils } from '../Format';
import { SpellDurationTypeEnum } from '../Spell';
import { getInterval, getType, getUnit } from './accessors';
import { DurationUnitEnum } from './constants';
import { isSpellDurationContract } from './utils';
/**
*
* @param duration
* @param usesConcentration
*/
export function renderDuration(duration, usesConcentration = false) {
const durationInterval = getInterval(duration);
const durationUnit = getUnit(duration);
let durationType = null;
if (isSpellDurationContract(duration)) {
durationType = getType(duration);
}
let durationString = '';
if (durationType !== null &&
durationType !== SpellDurationTypeEnum.TIME &&
durationType !== SpellDurationTypeEnum.CONCENTRATION) {
durationString += durationType;
}
if (durationInterval && durationInterval > 0) {
durationString += ` ${durationInterval} ${durationUnit}${durationInterval !== 1 ? 's' : ''}`;
}
durationString = durationString.trim();
if (usesConcentration) {
durationString = `Concentration, up to ${durationString}`;
}
return FormatUtils.upperCaseFirstLetterOnly(durationString);
}
/**
*
* @param duration
*/
export function renderDurationAbbreviation(duration) {
const durationInterval = getInterval(duration);
const durationUnit = getUnit(duration);
let durationType = null;
if (isSpellDurationContract(duration)) {
durationType = getType(duration);
}
let durationString = '';
if (durationType &&
durationType !== SpellDurationTypeEnum.TIME &&
durationType !== SpellDurationTypeEnum.CONCENTRATION) {
durationString = durationType;
}
else if (durationInterval && durationInterval > 0) {
durationString = `${durationInterval}${renderDurationUnitAbbreviation(durationUnit)}`;
}
return durationString;
}
/**
*
* @param unit
*/
export function renderDurationUnitAbbreviation(unit) {
switch (unit) {
case DurationUnitEnum.DAY:
return 'd';
case DurationUnitEnum.HOUR:
return 'h';
case DurationUnitEnum.MINUTE:
return 'm';
case DurationUnitEnum.ROUND:
return 'Rnd';
default:
// not implemented
}
return '';
}
@@ -0,0 +1,7 @@
/**
*
* @param duration
*/
export function isSpellDurationContract(duration) {
return duration.durationType !== undefined;
}