JSPM

scuid

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3605265
  • Score
    100M100P100Q207531F
  • License MIT

Collision-resistant IDs optimized for horizontal scaling and performance

Package Exports

  • scuid

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (scuid) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

scuid

npm npm license npm downloads build status

Collision-resistant IDs optimized for horizontal scaling and performance.

A slim, alternative, and compatible implementation of cuid for node, also featuring a wide range of options, as well as custom random number generator support. It can serve as a drop-in replacement, and is also faster than cuid.

Install via npm

$ npm install --save scuid

Usage

var scuid = require( 'scuid' )

Generate an ID

var id = scuid()
> 'ciux3hs0x0000io10cusdm8r2'

Generate a slug

var slug = scuid.slug()
> '6x1i0r0'

Get the process' fingerprint

var fingerprint = scuid.fingerprint()
> 'io10'

Use a custom (P)RNG

// Create a random number generator;
// It has to have a method called `random`
var generator = {
  random: function() {
    return 5 // chosen by fair dice roll
  }
}

// Create a custom scuid instance
var scuid = require( 'scuid' ).create({
  rng: generator
})

Use other custom options

Note that fiddeling with these might make your IDs incompatible with cuid's guarantees.

var scuid = require( 'scuid' ).create({
  prefix: 'c', // the ID's prefix
  base: 36, // radix used in .toString() calls (2-36)
  blockSize: 4, // block size to pad and trim to
  fill: '0', // block padding character
  pid: process.pid, // process ID
  fingerprint: scuid.createFingerprint( [pid], [hostname] ), // Machine fingerprint
  rng: Math, // Random number generator
})

Tests

Just like cuid, collision resistance for both – slugs and IDs – is tested over 1 million and 2 million iterations respectively. To run the tests, run:

$ npm test

Benchmarks

$ npm run benchmark
scuid
  id ............................................. 573,618 op/s
  slug ........................................... 673,732 op/s
  fingerprint .................................... 131,156,394 op/s

cuid
  id ............................................. 445,260 op/s
  slug ........................................... 531,770 op/s
  fingerprint .................................... 125,159,685 op/s