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

Source

lib/Snowflake.ts:68

Properties

[EpochSymbol]

Internal

private readonly [EpochSymbol]: bigint

Internal reference of the epoch passed in the constructor

Source

lib/Snowflake.ts:45


[IncrementSymbol]

Internal

private [IncrementSymbol]: bigint

Internal incrementor for generating snowflakes

Source

lib/Snowflake.ts:51


[ProcessIdSymbol]

Internal

private [ProcessIdSymbol]: bigint

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

Source

lib/Snowflake.ts:57


[WorkerIdSymbol]

Internal

private [WorkerIdSymbol]: bigint

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

Source

lib/Snowflake.ts:63


decode()

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

Alias for deconstruct

Parameters

ParameterType
idstring | bigint

Returns

DeconstructedSnowflake

Source

lib/Snowflake.ts:39

Accessors

epoch

get epoch(): bigint

The epoch for this snowflake

Returns

bigint

Source

lib/Snowflake.ts:75


processId

get processId(): bigint

Gets the configured process ID

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

bigint

Source

lib/Snowflake.ts:82


workerId

get workerId(): bigint

Gets the configured worker ID

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

bigint

Source

lib/Snowflake.ts:97

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');

Source

lib/Snowflake.ts:157


generate()

generate(options: SnowflakeGenerateOptions): bigint

Generates a snowflake given an epoch and optionally a timestamp

Parameters

ParameterTypeDescription
optionsSnowflakeGenerateOptions

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

Source

lib/Snowflake.ts:121


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.

Source

lib/Snowflake.ts:175


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'];

Source

lib/Snowflake.ts:198