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

uniquey

v2.0.0

Published

Uniquey _(you-KNEE-key)_ is a node library that generates random unique strings **(or keys)**.

Downloads

884

Readme

Uniquey

Uniquey (you-KNEE-key) is a node library that generates random unique strings (or keys).

Why?

Yeah, there are UUIDs, and we mostly use v4 (random) ones. But we usually store these 128bit keys as TEXT in a database, which is 32 characters which are larger than 128 bits. So rather than hex, why not base62 (A-Za-z0-9) or even any alphabet? How about always eight characters? A Base62 alphabet and eight characters will give you a total of 2.18*10^14 unique keys, pretty good.

Are Collisions Possible?

Yes, but you can make it less possible by adjusting the length to 22, and you will get a slightly less chance of a collision as UUID v4. With the bonus of only being 22 characters (or even fewer with a larger alphabet).

How random?

Yeah, there are a bunch of less than good ways to generate random stuff in node/javascript. The base of this library uses Crypto.randomFillSync to allocate a bunch of random bytes. This process is similar to how the UUID library generates v4 UUIDs.

Is it blocking? Is it fast?

Yes, and it depends. On my M1 MacBook Air, I can generate 1,000,000 keys in less than 300ms. That seems fast, and was with the default settings. Your performance may be different.

Multi-Byte Characters?

Ugh, well this was fixed in version 1.1, sorry. So a multi-byte character (like 🏢) will be split as a whole character as it's self and not each byte. Support for multi-byte characters needs to be turned on explicitly with the multiByteCharacters option in the constructor.


How to Use

Install it with

yarn add uniquey

or

npm i uniquey

Sample code:

import Uniqee from 'uniquey'
// or const Uniqee = require('uniquey').default

const uniquey = new Uniquey()

console.log(uniquey.create())

// outputs random string like `HqiId0Sj`

Options

You can create a Uniquey instance with the following optional options:

  • length [number]: (default: 8) the length of string to create. Must be greater than 0 and less than allocation.
  • characters [string]: (default: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') the characters to use in the random output. Must be at least 2 characters and no more than 256 and not have any duplicates.
  • allocate [number]: (default: 256) number of random bytes to allocate. This allocation helps with performance. Must be greater than length and greater than 0.
  • multiByteCharacters [boolean]: (default: false) allow multi-byte characters, if true they will be allowed, if not the creation will throw an error if characters contains multi-byte characters.

Example using options:

import Uniquey from 'uniquey'
// or const Uniquey = require('uniquey').default

const uniquey = new Uniquey({
  length: 4,
  characters: '🐈🏢🐕🐎',
  allocate: 4000,
  multiByteCharacters: true
})

console.log(uniquey.create())

// outputs random string like `🐎🐈🏢🐕`
// not very random but fun!
// also this will allocate new random bytes
// after generating 1000 random keys (4000/4)

New in Version 1.1.0

Better handling of multi-byte characters.