Muito bom! Utilizei o imask ao invés de utilizar as funções próprias. É uma lib que utilizo a muito tempo, ela é bem simples e deixa o código mais fácil de entender.
https://github.com/uNmAnNeR/imaskjs
Usei dessa forma para uma mascara de cep por exemplo:
import IMask from 'imask'
const cepPipe = IMask.createPipe({
mask: '00000-000',
})
<input
{...register('cep', {
onChange: (event) => {
event.target.value = cepPipe(event.target.value)
},
})}
/>