项目作者: rockerapp

项目描述 :
Snowflake–like unique ID generator
高级语言: TypeScript
项目地址: git://github.com/rockerapp/flake.git
创建时间: 2020-06-12T00:58:38Z
项目社区:https://github.com/rockerapp/flake

开源协议:MIT License

下载


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

  1. import Flake from '@rockerapp/flake'
  2. // initialize Flake instance
  3. // all settings are optional
  4. const flake = new Flake({
  5. nodeId: 42, // optional, define machine ID
  6. timeOffset: 1593561600 * 1000 // optional, define a time offset (in milliseconds)
  7. })

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

Generate ID

  1. const id1 = flake.generate() // returns something like '285124269753503744'
  2. const id2 = flake.generateRaw() // returns something like 285124417543999488n (of type BigInt)

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 the current time, in milliseconds. Effectively creates a custom start time for ID generation.

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.