Skip to main content

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()​

new Snowflake(epoch: number | bigint | Date): Snowflake

Parameters​

ParameterTypeDescription
epochnumber | bigint | Datethe epoch to use

Returns​

Snowflake

Defined in​

Snowflake.ts:77

Properties​

[EpochNumberSymbol]​

private readonly [EpochNumberSymbol]: number

Internal

Internal reference of the epoch passed in the constructor as a number

Defined in​

Snowflake.ts:54


[EpochSymbol]​

private readonly [EpochSymbol]: bigint

Internal

Internal reference of the epoch passed in the constructor

Defined in​

Snowflake.ts:48


[IncrementSymbol]​

private [IncrementSymbol]: bigint = 0n

Internal

Internal incrementor for generating snowflakes

Defined in​

Snowflake.ts:60


[ProcessIdSymbol]​

private [ProcessIdSymbol]: bigint = 1n

Internal

The process ID that will be used by default in the generate method

Defined in​

Snowflake.ts:66


[WorkerIdSymbol]​

private [WorkerIdSymbol]: bigint = 0n

Internal

The worker ID that will be used by default in the generate method

Defined in​

Snowflake.ts:72


decode()​

decode: (id: string | bigint) => DeconstructedSnowflake

Alias for deconstruct

Deconstructs a snowflake given a snowflake ID

Parameters​

ParameterTypeDescription
idstring | bigintthe snowflake to deconstruct

Returns​

DeconstructedSnowflake

a deconstructed snowflake

Example​

const epoch = new Date('2000-01-01T00:00:00.000Z');
const snowflake = new Snowflake(epoch).deconstruct('3971046231244935168');

Defined in​

Snowflake.ts:42

Accessors​

epoch​

Get Signature​

get epoch(): bigint

The epoch for this snowflake, as a bigint

Returns​

bigint

Defined in​

Snowflake.ts:85


epochNumber​

Get Signature​

get epochNumber(): number

The epoch for this snowflake, as a number

Returns​

number

Defined in​

Snowflake.ts:92


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​
ParameterTypeDescription
valuenumber | bigintThe new value, will be coerced to BigInt and masked with 0b11111n
Returns​

void

Defined in​

Snowflake.ts:99


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​
ParameterTypeDescription
valuenumber | bigintThe new value, will be coerced to BigInt and masked with 0b11111n
Returns​

void

Defined in​

Snowflake.ts:114

Methods​

deconstruct()​

deconstruct(id: string | bigint): DeconstructedSnowflake

Deconstructs a snowflake given a snowflake ID

Parameters​

ParameterTypeDescription
idstring | bigintthe snowflake to deconstruct

Returns​

DeconstructedSnowflake

a deconstructed snowflake

Example​

const epoch = new Date('2000-01-01T00:00:00.000Z');
const snowflake = new Snowflake(epoch).deconstruct('3971046231244935168');

Defined in​

Snowflake.ts:174


generate()​

generate(options: SnowflakeGenerateOptions): bigint

Generates a snowflake given an epoch and optionally a timestamp

Parameters​

ParameterTypeDescription
optionsSnowflakeGenerateOptionsoptions 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​

Snowflake.ts:138


timestampFrom()​

timestampFrom(id: string | bigint): number

Retrieves the timestamp field's value from a snowflake.

Parameters​

ParameterTypeDescription
idstring | bigintThe snowflake to get the timestamp value from.

Returns​

number

The UNIX timestamp that is stored in id.

Defined in​

Snowflake.ts:192


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​

ParameterTypeDescription
astring | bigintThe first snowflake to compare.
bstring | bigintThe 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'];

Defined in​

Snowflake.ts:215