Skip to content

A fast function for determining a string's display width

License

Notifications You must be signed in to change notification settings

llimllib/display-width

Repository files navigation

display-width

A node.js port of uwcwidth, a fast function for determining a string's display width

That code is a port of POSIX wcswidth, a standard function for counting the number of columns occupied by a string, and is derived from musl libc

How to use it

import { wcswidth } from "display-width";

// wcswidth("👩‍❤️‍👨") == 2
console.log(wcswidth("\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F468}"));

Why to use it

>> wcswidth("café") == 4
>> "café".length == 5

>> wcswidth("⚠︎ warning") == 9
>> "⚠︎ warning".length == 10

>> wcswidth("👨‍👨‍👧‍👧") == 2
>> "👨‍👨‍👧‍👧".length == 11

>> wcswidth("👩‍❤️‍👨") == 2
>> "👩‍❤️‍👨".length == 8

Is it fast?

yes! Compared to string-width, it's about 33x faster

┌─────────┬─────────────────┬───────────┬────────────────────┬───────────┬─────────┐
│ (index) │ Task Name       │ ops/sec   │ Average Time (ns)  │ Margin    │ Samples │
├─────────┼─────────────────┼───────────┼────────────────────┼───────────┼─────────┤
│ 0       │ 'display-width' │ '188,426' │ 5307.115321339439  │ '±1.55%'  │ 18843   │
│ 1       │ 'string-width'  │ '5,586'   │ 179008.73345259373 │ '±11.73%' │ 559     │
└─────────┴─────────────────┴───────────┴────────────────────┴───────────┴─────────┘

see the bench directory for details

Is it large?

no!

Does it have any dependencies?

no!

Do you completely understand it?

no! I ported the code and all the tests from uwcwidth though, so I have good vibes about it

About

A fast function for determining a string's display width

Resources

License

Stars

Watchers

Forks

Packages

No packages published