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
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.
$ yarn add @dylanirlbeck/re-nanoid
Then add @dylanirlbeck/re-nanoid
to your bs-dependencies
in bsconfig.json
{
...
"bs-dependencies": ["@dylanirlbeck/re-nanoid"]
}
Coming soon...
As of now, the following examples work for BuckleScript. The Native library will be released soon.
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_"
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.
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"
Pull requests are welcome!
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 tests do not yet exist, but they should be present soon.
re-nanoid
is MIT licensed.
This library was born out of a project at HackIllinois 2020. See our Devpost submission here!