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