0.6.1 • Published 1 year ago

sunflake v0.6.1

Weekly downloads
-
License
LGPL-3.0-or-later
Repository
github
Last release
1 year ago

lvksh sunflake

MINIFIED SIZE COVERAGE LANGUAGES DEPENDENCIRES NPM

Zero dependency, lightweight, snowflake generator.

This library follows the Twitter Snowflake ID specification, which is currently what is utilized by platforms such as Discord, Twitter, Instagram and Blizzard just to name a few.

How it works

Sunflake takes a 42 bit unix timestamp, 10 bits of machine id and 12 bits of sequence number. Sunflake generates id in string format (which easily can be casted into a 64 bit bigint in databases), as javascript is limited to 53 bit integer precision.

1111111111111111111111111111111111111111111111111111111111111111
6422120

FIELDBITSDESCRIPTIONRETRIEVAL
Timestamp42Milliseconds since given Epoch(snowflake >> 22) + epoch
Machine Id10(snowflake & 0x3FF000) >> 12
Increment12Increments for every id createdin the same timestamp.snowflake & 0xFFF
  • (snowflake >> 22) + epoch: We right shift with 22 (64 - 42). This grabs the 42 first bits which is the time since the epoch. We then add the epoch to it and we have a unix timestamp in milliseconds.
  • (snowflake & 0x3FF000) >> 12: We start by offset 0x3FF000, which in binary is 0b1111111111000000000000 which is 22 bits long. This extracts the 10 bits after the 12 bits from the right, and then we remove those 12 bits from the right that we don't need. This is our Machine Id.
  • snowflake & 0xFFF: Grabs everything after the offset 0xFFF which is 111111111111 in binary which is 12 bits long. We start at the 12th bit (start of increament).

Installation

Using npm:

npm install sunflake

or if you prefer to use the yarn package manager:

yarn add sunflake

Usage

import { generateSunflake } from 'sunflake';

export const SnowflakeGen = generateSunflake({
    machineId: 1, // Machine id
    epoch: 1640995200000, // January 1st, 2022
});

Now you can use that function easily

const id1 = SnowflakeGen();
const id2 = SnowflakeGen();

Contributors

npm.io

LICENSE

This package is licensed under the GNU Lesser General Public License.

0.6.1

1 year ago

0.6.0-alpha.1

2 years ago

0.5.0

2 years ago

0.6.0

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.3.0

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.2

2 years ago