Class: Snowflake
Defined in: Snowflake.ts:37
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()
Defined in: Snowflake.ts:77
Parameters
Parameter | Type | Description |
---|---|---|
epoch | number | bigint | Date | the epoch to use |
Returns
Properties
[EpochNumberSymbol]
private
readonly
[EpochNumberSymbol]:number
Defined in: Snowflake.ts:54
Internal
Internal reference of the epoch passed in the constructor as a number
[EpochSymbol]
private
readonly
[EpochSymbol]:bigint
Defined in: Snowflake.ts:48
Internal
Internal reference of the epoch passed in the constructor
[IncrementSymbol]
private
[IncrementSymbol]:bigint
=0n
Defined in: Snowflake.ts:60
Internal
Internal incrementor for generating snowflakes
[ProcessIdSymbol]
private
[ProcessIdSymbol]:bigint
=1n
Defined in: Snowflake.ts:66
Internal
The process ID that will be used by default in the generate method
[WorkerIdSymbol]
private
[WorkerIdSymbol]:bigint
=0n
Defined in: Snowflake.ts:72
Internal
The worker ID that will be used by default in the generate method
decode()
decode: (
id
:string
|bigint
) =>DeconstructedSnowflake
Defined in: Snowflake.ts:42
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');
Accessors
epoch
Get Signature
get epoch():
bigint
Defined in: Snowflake.ts:85
The epoch for this snowflake, as a bigint
Returns
bigint
epochNumber
Get Signature
get epochNumber():
number
Defined in: Snowflake.ts:92
The epoch for this snowflake, as a number
Returns
number
processId
Get Signature
get processId():
bigint
Defined in: Snowflake.ts:99
Gets the configured process ID
Returns
bigint
Set Signature
set processId(
value
:number
|bigint
):void
Defined in: Snowflake.ts:107
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
workerId
Get Signature
get workerId():
bigint
Defined in: Snowflake.ts:114
Gets the configured worker ID
Returns
bigint
Set Signature
set workerId(
value
:number
|bigint
):void
Defined in: Snowflake.ts:122
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
Methods
deconstruct()
deconstruct(
id
:string
|bigint
):DeconstructedSnowflake
Defined in: Snowflake.ts:174
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');
generate()
generate(
options
:SnowflakeGenerateOptions
):bigint
Defined in: Snowflake.ts:138
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();
timestampFrom()
timestampFrom(
id
:string
|bigint
):number
Defined in: Snowflake.ts:192
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
.
compare()
static
compare(a
:string
|bigint
,b
:string
|bigint
):-1
|0
|1
Defined in: Snowflake.ts:215
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'];