Class: Snowflake
A class for generating and deconstructing Twitter snowflakes.
A Twitter snowflake is a 64-bit unsigned integer with 4 fields that have a fixed epoch value.
If we have a snowflake 266241948824764416
we can represent it as binary:
64 22 17 12 0
000000111011000111100001101001000101000000 00001 00000 000000000000
number of ms since epoch worker pid increment
Constructors
new Snowflake()
Parameters
Parameter | Type | Description |
---|---|---|
epoch | number | bigint | Date | the epoch to use |
Returns
Defined in
Properties
[EpochNumberSymbol]
private
readonly
[EpochNumberSymbol]:number
Internal
Internal reference of the epoch passed in the constructor as a number
Defined in
[EpochSymbol]
private
readonly
[EpochSymbol]:bigint
Internal
Internal reference of the epoch passed in the constructor
Defined in
[IncrementSymbol]
private
[IncrementSymbol]:bigint
=0n
Internal
Internal incrementor for generating snowflakes
Defined in
[ProcessIdSymbol]
private
[ProcessIdSymbol]:bigint
=1n
Internal
The process ID that will be used by default in the generate method
Defined in
[WorkerIdSymbol]
private
[WorkerIdSymbol]:bigint
=0n
Internal
The worker ID that will be used by default in the generate method
Defined in
decode()
decode: (
id
:string
|bigint
) =>DeconstructedSnowflake
Alias for deconstruct
Deconstructs a snowflake given a snowflake ID
Parameters
Parameter | Type | Description |
---|---|---|
id | string | bigint | the snowflake to deconstruct |
Returns
a deconstructed snowflake
Example
const epoch = new Date('2000-01-01T00:00:00.000Z');
const snowflake = new Snowflake(epoch).deconstruct('3971046231244935168');
Defined in
Accessors
epoch
Get Signature
get epoch():
bigint
The epoch for this snowflake, as a bigint
Returns
bigint
Defined in
epochNumber
Get Signature
get epochNumber():
number
The epoch for this snowflake, as a number
Returns
number
Defined in
processId
Get Signature
get processId():
bigint
Gets the configured process ID
Returns
bigint
Set Signature
set processId(
value
:number
|bigint
):void
Sets the process ID that will be used by default for the generate method
Parameters
Parameter | Type | Description |
---|---|---|
value | number | bigint | The new value, will be coerced to BigInt and masked with 0b11111n |
Returns
void
Defined in
workerId
Get Signature
get workerId():
bigint
Gets the configured worker ID
Returns
bigint
Set Signature
set workerId(
value
:number
|bigint
):void
Sets the worker ID that will be used by default for the generate method
Parameters
Parameter | Type | Description |
---|---|---|
value | number | bigint | The new value, will be coerced to BigInt and masked with 0b11111n |
Returns
void
Defined in
Methods
deconstruct()
deconstruct(
id
:string
|bigint
):DeconstructedSnowflake
Deconstructs a snowflake given a snowflake ID
Parameters
Parameter | Type | Description |
---|---|---|
id | string | bigint | the snowflake to deconstruct |
Returns
a deconstructed snowflake
Example
const epoch = new Date('2000-01-01T00:00:00.000Z');
const snowflake = new Snowflake(epoch).deconstruct('3971046231244935168');
Defined in
generate()
generate(
options
:SnowflakeGenerateOptions
):bigint
Generates a snowflake given an epoch and optionally a timestamp
Parameters
Parameter | Type | Description |
---|---|---|
options | SnowflakeGenerateOptions | options to pass into the generator, see SnowflakeGenerateOptions note when increment is not provided it defaults to the private increment of the instance |
Returns
bigint
A unique snowflake
Example
const epoch = new Date('2000-01-01T00:00:00.000Z');
const snowflake = new Snowflake(epoch).generate();
Defined in
timestampFrom()
timestampFrom(
id
:string
|bigint
):number
Retrieves the timestamp field's value from a snowflake.
Parameters
Parameter | Type | Description |
---|---|---|
id | string | bigint | The snowflake to get the timestamp value from. |
Returns
number
The UNIX timestamp that is stored in id
.
Defined in
compare()
static
compare(a
:string
|bigint
,b
:string
|bigint
):-1
|0
|1
Returns a number indicating whether a reference snowflake comes before, or after, or is same as the given snowflake in sort order.
Parameters
Parameter | Type | Description |
---|---|---|
a | string | bigint | The first snowflake to compare. |
b | string | bigint | The second snowflake to compare. |
Returns
-1
| 0
| 1
-1
if a
is older than b
, 0
if a
and b
are equals, 1
if a
is newer than b
.
Examples
const ids = ['737141877803057244', '1056191128120082432', '254360814063058944'];
console.log(ids.sort((a, b) => Snowflake.compare(a, b)));
// → ['254360814063058944', '737141877803057244', '1056191128120082432'];
const ids = ['737141877803057244', '1056191128120082432', '254360814063058944'];
console.log(ids.sort((a, b) => -Snowflake.compare(a, b)));
// → ['1056191128120082432', '737141877803057244', '254360814063058944'];