Spaces:
Running
Running
/** | |
* @fileoverview Utilities to operate on strings. | |
* @author Stephen Wade | |
*/ | |
; | |
//------------------------------------------------------------------------------ | |
// Requirements | |
//------------------------------------------------------------------------------ | |
const Graphemer = require("graphemer").default; | |
//------------------------------------------------------------------------------ | |
// Helpers | |
//------------------------------------------------------------------------------ | |
// eslint-disable-next-line no-control-regex -- intentionally including control characters | |
const ASCII_REGEX = /^[\u0000-\u007f]*$/u; | |
/** @type {Graphemer | undefined} */ | |
let splitter; | |
//------------------------------------------------------------------------------ | |
// Public Interface | |
//------------------------------------------------------------------------------ | |
/** | |
* Converts the first letter of a string to uppercase. | |
* @param {string} string The string to operate on | |
* @returns {string} The converted string | |
*/ | |
function upperCaseFirst(string) { | |
if (string.length <= 1) { | |
return string.toUpperCase(); | |
} | |
return string[0].toUpperCase() + string.slice(1); | |
} | |
/** | |
* Counts graphemes in a given string. | |
* @param {string} value A string to count graphemes. | |
* @returns {number} The number of graphemes in `value`. | |
*/ | |
function getGraphemeCount(value) { | |
if (ASCII_REGEX.test(value)) { | |
return value.length; | |
} | |
if (!splitter) { | |
splitter = new Graphemer(); | |
} | |
return splitter.countGraphemes(value); | |
} | |
module.exports = { | |
upperCaseFirst, | |
getGraphemeCount | |
}; | |