@rockerapp/flake
v2.1.1
Published
Time-based, unique 64-bit ID generator, inspired by Twitter's Snowflake
Downloads
11
Maintainers
Readme
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.