Skip to content

truncate

Encurta uma string até um tamanho máximo e marca o corte com reticências. Lida bem com Unicode e sabe que qual ponta você guarda muda o sentido do corte.

Uso

ts
import { truncate } from 'ranuts/utils';

truncate('the quick brown fox', 12); // 'the quick b…'

truncate('/Users/me/code/app/src/index.ts', { length: 20, position: 'start' });
// '…de/app/src/index.ts'

truncate('0xabcdef0123456789', { length: 11, position: 'middle' });
// '0xabc…56789'

API

truncate(value, options)

Parâmetros

ParâmetroDescriçãoTipoPadrão
valueA string que será encurtadastringObrigatório
optionsUm número sozinho é a forma curta de { length }TruncateOptions | numberObrigatório

TruncateOptions

CampoDescriçãoTipoPadrão
lengthTamanho máximo do resultado, reticências incluídasnumber
positionQual ponta sobrevive; veja abaixo'end' | 'start' | 'middle''end'
ellipsisA marca colocada no cortestring'…'

position decide qual ponta sobrevive, e essa escolha carrega informação de verdade:

  • 'end' (padrão) guarda o começo: o certo para prosa e títulos.
  • 'start' guarda o fim, que é o que um caminho de arquivo pede: /Users/alguem/trabalho/… é a parte que quem lê já conhece; …/src/utils/str.ts é a que interessa.
  • 'middle' guarda as duas pontas, para identificadores em que o começo e o fim significam algo, como um hash ou um número de conta.

Retorna

string: nunca maior que length. Se length for menor que as próprias reticências, o que se corta são elas, em vez de transbordar.

Notas

  1. Corta por ponto de código Unicode, não por unidade UTF-16. Um value.slice(i) ingênuo pode cair dentro de um par substituto: qualquer caractere fora do plano multilíngue básico (emoji, alguns caracteres de extensão CJK) ocupa duas unidades UTF-16, e deixa junto às reticências um substituto solto que aparece como caracteres corrompidos. O truncate percorre por ponto de código, então nunca parte um caractere de várias unidades.
  2. Um value menor que length volta como está, sem reticências.
  3. Passe o seu próprio ellipsis ('...' ou '[cut]', por exemplo) se o caractere '…' não existir na fonte com que você desenha.

Publicado sob a licença MIT.