routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
Generated
Vendored
+51
@@ -0,0 +1,51 @@
|
||||
import { UnreachableCaseError } from '../unreachable-case-error.js'
|
||||
/**
|
||||
* Creates a function that formats strings for comparison.
|
||||
*
|
||||
* Applies transformations based on the provided options:
|
||||
*
|
||||
* - Case normalization (lowercase if ignoreCase is true)
|
||||
* - Special character handling (keep, trim, or remove)
|
||||
* - Whitespace removal (always applied).
|
||||
*
|
||||
* @param params - Parameters for string formatting.
|
||||
* @param params.ignoreCase - Whether to convert strings to lowercase.
|
||||
* @param params.specialCharacters - How to handle special characters:
|
||||
*
|
||||
* - 'keep': Keep all characters as-is
|
||||
* - 'trim': Remove leading special characters
|
||||
* - 'remove': Remove all special characters.
|
||||
*
|
||||
* @returns Function that formats a string for comparison.
|
||||
* @throws {UnreachableCaseError} If an unknown special characters option is
|
||||
* specified.
|
||||
*/
|
||||
function buildStringFormatter({ specialCharacters, ignoreCase }) {
|
||||
return value => {
|
||||
let valueToCompare = value
|
||||
if (ignoreCase) {
|
||||
valueToCompare = valueToCompare.toLowerCase()
|
||||
}
|
||||
switch (specialCharacters) {
|
||||
case 'remove':
|
||||
valueToCompare = valueToCompare.replaceAll(
|
||||
/[^a-z\u{C0}-\u{24F}\u{1E00}-\u{1EFF}]+/giu,
|
||||
'',
|
||||
)
|
||||
break
|
||||
case 'trim':
|
||||
valueToCompare = valueToCompare.replaceAll(
|
||||
/^[^a-z\u{C0}-\u{24F}\u{1E00}-\u{1EFF}]+/giu,
|
||||
'',
|
||||
)
|
||||
break
|
||||
case 'keep':
|
||||
break
|
||||
/* v8 ignore next 2 -- @preserve Exhaustive guard. */
|
||||
default:
|
||||
throw new UnreachableCaseError(specialCharacters)
|
||||
}
|
||||
return valueToCompare.replaceAll(/\s/gu, '')
|
||||
}
|
||||
}
|
||||
export { buildStringFormatter }
|
||||
Reference in New Issue
Block a user