@randsum/dice
Version:
A flexible, type-safe dice roller for tabletop RPGs, game development, and probability simulations
28 lines (27 loc) • 1.01 kB
JavaScript
/**
* Cache for storing pre-generated dice faces to avoid redundant calculations
* This significantly improves performance for frequently used dice (d4, d6, d8, d10, d12, d20)
*/
const facesCache = new Map();
/**
* Generates an array of numerical faces for a die with the given number of sides
* Uses memoization to cache results for better performance
*
* @param sides - The number of sides on the die
* @returns An array of numbers representing the faces of the die
*/
export function generateNumericalFaces(sides) {
const numSides = Number(sides);
if (facesCache.has(numSides)) {
const cachedFaces = facesCache.get(numSides);
if (cachedFaces === undefined) {
throw new Error('Faces cache is empty');
}
return cachedFaces;
}
const faces = Array.from({ length: numSides }, (_, index) => index + 1);
if (numSides <= 100 || [4, 6, 8, 10, 12, 20, 100].includes(numSides)) {
facesCache.set(numSides, faces);
}
return faces;
}