Skip to content

A tiny, secure, URL-friendly, unique string ID generator for Reason/OCaml.

License

Notifications You must be signed in to change notification settings

dylanirlbeck/re-nanoid

Repository files navigation

re-nanoid

npm

A tiny, secure, URL-friendly, unique string ID generator for ReasonML/OCaml, inspired by ai/nanoid.

open NanoId

let id = nanoid(); // "V1StGXR8_Z5jdHi6B-myT"W

Why re-nanoid?

Fast. It's 16% faster than UUID package.

Safe. It uses cryptographically strong random APIs and guarantees a proper distribution of symbols.

Compact. It uses a larger alphabet than UUID (A-Za-z0-9_-) and has a similar number of unique IDs in just 21 symbols instead of 36.

See ai/nanoid's excellent documentation for more background about random identifier generation and comparisons with UUID v4.

Installation

BuckleScript

$ yarn add @dylanirlbeck/re-nanoid

Then add @dylanirlbeck/re-nanoid to your bs-dependencies in bsconfig.json

{
   ...
   "bs-dependencies": ["@dylanirlbeck/re-nanoid"]
}

Native

Coming soon...

Usage

As of now, the following examples work for BuckleScript. The Native library will be released soon.

Simple

The main module uses URL-friendly symbols (A-Za-z0-9_-) and returns an ID with 21 characters by default, though this size is variable (see below).

open NanoId;

let id = nanoid(); // "V1StGXR8_Z5jdHi6B-myT"

If you want to reduce the ID size (and increase collision probability), you can pass the size as an argument. You can also increase the ID size (to a maximum of 36).

open NanoId;

let id = nanoid(~size=10, ()); // "1s_t232nj_"

Custom length or alphabet

Likewise, if you want to use a different alphabet, you can use the customAlphabet function. Note that this function also takes a size parameter.

open NanoId;

let alphabet = "#$@jasssfaª•¶";
let size = 7;

let nanoid = customAlphabet(~size, ~alphabet, ());

let id = nanoid(); // "jfa##$·"

Note the use of the () as the last parameter of the function call.

Custom random bytes generator

Note that this function might not work yet.

customRandom allows you to create a nanoid and replace the default random bytes generator.

open NanoId;

let rbg = size: int => {
  // Put generator logic here
};

let nanoid = customRandom(~alphabet="abcdef", ~size=10, rbg, ());

let id = nanoid(); // "fbaefaadeb"

Contributing

Pull requests are welcome!

Testing

BucklesScript - Jest

In order to run the tests as they stand currently, open a new terminal window and run yarn watch to re-compile upon Reason file changes. In yet another window, run yarn test to watch for changes to compiled files and re-run the tests if changes are detected.

Native - Rely

Native tests do not yet exist, but they should be present soon.

License

re-nanoid is MIT licensed.

Other

This library was born out of a project at HackIllinois 2020. See our Devpost submission here!

About

A tiny, secure, URL-friendly, unique string ID generator for Reason/OCaml.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published