npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

utf8string

v0.2.0

Published

Starter for a es6 node library

Downloads

4

Readme

Utf8String

NPM version Build Status

While this string implementation has all the necessary bits to sometime grow into a full-fledged implementation, this is unlikely to happen firstly because of time needed, but also because such an implementation require a custom regular expression engine.

Simple Example

const str = new Utf8String('aaaabc');
const searchStr = new Utf8String('aab');
const result = str.substring(str.find(searchStr));
console.log(String(result)); // "aabc"

For more examples please refer to the tests.

Immutability

All string operation return a new Utf8String object.

Iterating a string

Because of the nature of UTF-8 encoding (and Unicode in general), a JavaScript's String style random access to a string is not very desirable for performance reasons since you have to always iterate from the start of the string and count the code points.

Moreover code points may not be what you want to count, as, for example grapheme clusters should be used for counting what would one visually consider "characters".

This is why Utf8String exposes a codePoints() method that returns an iterator over unicode code points, which is also aliased to an [Symbol.iterator]() method so that it is easy to use Utf8String in for .. of constructs and with other functions and constructs that expect an object conforming to an iterator protocol such as Array.from() or spread operator.

Utf8String also provides a bytes() iterator that could be used for low-level access to the string.

Size of a string

The same as with iteration, depending on your particular requirements you might have a different definition of a size (or a length) of a string. This is why instead of providing a multitude of instance methods Utf8String library takes a different approach with delivering a single class utility method called Utf8String.count(), which accepts and iterable, such as one returned by codePoints() or bytes() instance method.

This approach also allows to provide additional iterators such as characters (grapheme clusters), or even words as separate packages while making use of default length / counting facilities.