@rockerapp/flake
TypeScript icon, indicating that this package has built-in type declarations

2.1.1 • Public • Published

Flake

A module to generate time-based 64-bit unique IDs, inspired by Twitter's Snowflake ID system.

Flake is generated by concatenating:

  • a 42-bit timestamp,
  • a 10-bit node ID (or any random number you provide), and
  • a 12-bit sequential number.

Because of JavaScript's 53-bit integer precision limit, Flake generates a BigInt like 285124269753503744n, which can be easily be type-cast as a 64-bit bigint in a database.

Usage

Initialize

import Flake from '@rockerapp/flake'

// initialize Flake instance
// all settings are optional
const flake = new Flake({
	nodeId: 42, // optional, define machine ID
	timeOffset: (2020-1970)*31536000*1000 // optional, define a time offset
})

Create a instance of Flake as shown above, which will be used to generate IDs afterward.

Generate ID

const id1 = flake.generate() // returns something like 285124269753503744n
const id2 = flake.generate() // returns something like 285124417543999488n

Options

nodeId (number, default: 1)

A machine ID or any random number. If you are generating IDs on multiple nodes, it's highly advised to pass a proper node ID that is unique to the machine.


timeOffset (number, default: 0)

Time to be subtracted from current timestamp (based on the Unix epoch) to determine the first 42 bits of ID.

Functions

generate() (string)

Returns a stringified generateRaw() output.


generateRaw() (BigInt)

Generates an ID based on the options passed to the Flake instance.

License

Flake is distributed under the MIT license. Originally created by Sudhanshu Yadav, with help from other contributors.

See LICENSE file for license text.

Package Sidebar

Install

npm i @rockerapp/flake

Weekly Downloads

3

Version

2.1.1

License

MIT

Unpacked Size

8.41 kB

Total Files

6

Last publish

Collaborators

  • maxichrome