I ported Markus Kuhn’s wcwidth to TypeScript and optimized it with bitset lookups for O(1) performance. It now covers the full Unicode 15.1 combining ranges.

GitHub: https://github.com/dawsonhuang0/Wcwidth-O1 NPM: https://www.npmjs.com/package/wcwidth-o1

Feedback welcome!

I was about to say you could figure this kind of thing out with Intl.Segmenter but then saw it was a different problem. Nice.

Now you just have to update it to the just-released Unicode 17.

Thanks for pointing it out! The latest version is now based on Unicode 17.0.0.

Nice