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

@shgysk8zer0/suid

v1.0.0

Published

Simple/Sortable Unique IDentifiers

Downloads

74

Readme

@shgysk8zer0/suid

Simple/Sortable Unique IDentifiers

CodeQL Node CI Lint Code Base

GitHub license GitHub last commit GitHub release GitHub Sponsors

npm node-current npm bundle size gzipped npm

GitHub followers GitHub forks GitHub stars Twitter Follow

Donate using Liberapay


What/Why

This library generates simple/sortable, deterministic, and reversible unique identifiers (SUIDs).

  • Sortable: SUIDs are designed to be easily sorted chronologically based on their embedded timestamp.
  • Deterministic: Given the same input options, the getSUID() function will always generate the same SUID.
  • Reversible: The parseSUID() function allows you to recover the original date and random data used to generate a given SUID.
  • Customizable: Generating options allow varying entropy in the random bits, and supports base64 or base64 URL encoding.
  • Lighweight: After minifying and tree-shaking and gzip compression, can be as small as 460B.
  • Standards-based and modern: Uses new Uint8Array methods for converting to/from base64 and hexadecimal.

Installation/importing

Via npm

npm i @shgysk8zer0/suid

Via unpkg & importmap

<script type="importmap">

<script type="importmap">
  {
    "imports": {
      "@shgysk8zer0/suid": "https://unpkg.com/@shgysk8zer0/suid[@:version]/suid.min.js"
    }
  }
</script>

Example Usage

import { getSUID, parseSUID } from '@shgysk8zer0/suid';

const suid = getSUID();
const { date, randomBits, alphabet, separator } = parseSUID(suid);

Advanced Usage

import { getSUID, parseSUID, BASE64_URL } from '@shgysk8zer0/suid';

const suid = getSUID({
  date: 1734076800000, // 2024-12-13T08:00:00.000Z
  randomBits: new Uint8Array([236, 229, 72, 197, 74, 155, 111, 0, 144, 245, 43, 1]),
  alphabet: BASE64_URL, // "base64url"
  separator: ':',
});

console.log(suid); // "AZO_CBwA:7OVIxUqb:bwCQ9SsB"
console.log(parseSUID(suid, { alphabet: BASE64_URL, separator: ':' }));
/* Object {
  date: Date Fri Dec 13 2024 00:00:00 GMT-0800 (Pacific Standard Time),
  randomBits: Uint8Array(12),
  alphabet: "base64url",
  separator: ":"
}*/

SUID Generating Options

| Option Name | Type | Default | Description | |---|---|---|---| | date | Date | number | Date.now() | The timestamp to use in the SUID. If a Date object is provided, its timestamp will be used. | | randomBits | Uint8Array | crypto.getRandomValues(new Uint8Array(12)) | Random data for the SUID. Must be at least 2 bytes. | | alphabet | string | 'base64' | Base64 alphabet to use for encoding. Allowed values: 'base64', 'base64url'. | | separator | string | '.' | Separator character between SUID parts. Be careful to not use a char that may be used in the encoding. |

Requirements

This library requires the new Uint8Array methods for converting to/from base64 & hexadecimal. For the time being, you will probably want a polyfill such as found in core-js.