import {BLANK_DIGIT} from '../../../utils/numeric'; const config = { onesNames: ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'], onesOrdinalNames: ['zeroth', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth'], teensNames: [ 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', ], teensOrdinalNames: [ 'tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth', ], tensNames: ['zero', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'], tensOrdinalNames: [ 'zeroth', 'tenth', 'twentieth', 'thirtieth', 'fortieth', 'fiftieth', 'sixtieth', 'seventieth', 'eightieth', 'ninetieth', ], hundredName: 'hundred', hundredOrdinalName: 'hundredth', grouping: 3, }; export const getGroupDigitsName = (digitsRaw: string, ordinal: boolean) => { const digits = digitsRaw.padStart(config.grouping, BLANK_DIGIT); const [hundreds, tens, ones] = digits.split('').map(s => Number(s)); const names = []; if (hundreds !== 0) { names.push(config.onesNames[hundreds]); if (!ordinal || (tens > 0 || ones > 0)) { names.push(config.hundredName); } } if (tens === 1) { names.push(ordinal ? config.teensOrdinalNames[ones] : config.teensNames[ones]); } else if (tens > 1) { if (ones > 0) { names.push(config.tensNames[tens]); names.push(ordinal ? config.onesOrdinalNames[ones] : config.onesNames[ones]); } else { names.push(ordinal ? config.tensOrdinalNames[tens] : config.tensNames[tens]); } } else { if (hundreds === 0) { names.push(ordinal ? config.onesOrdinalNames[ones] : config.onesNames[ones]); } else if (ones > 0) { names.push(ordinal ? config.onesOrdinalNames[ones] : config.onesNames[ones]); } else if (ordinal) { names.push(config.hundredOrdinalName); } } return names.join(' '); };