---
url: https://adecore.dev/utils/text.md
---
# Text

```ts
import { isHighSurrogate, isLowSurrogate } from '@adecore/utils/text';
```

A character outside the Basic Multilingual Plane, such as most emoji, takes two UTF-16 code units in a JavaScript string: a high surrogate and a low one. Cutting between them leaves a broken character.

`isHighSurrogate(code)` and `isLowSurrogate(code)` take a code unit from `charCodeAt`. Check them before you cut a string at an offset:

```ts
function truncate(text: string, length: number): string {
    if (text.length <= length) {
        return text;
    }

    const end = isHighSurrogate(text.charCodeAt(length - 1)) ? length - 1 : length;

    return text.slice(0, end);
}
```
