@selize/utils - v1.1.0
    Preparing search index...

    Twitter's distributed auto-increment ID snowflake algorithm(https://github.com/twitter/snowflake),

    default start time:

    2025-01-01 00:00:00Z / 1735660800000

    import { Snowflake } from '@selize/utils';

    const sf = new Snowflake({workId: 1, datacenterId: 1, epoch: 1735660800000})
    const uuid = sf.nextId()
    console.log('Generated UUID:', id.toString());
    // Generated UUID: 69715707826409472n

    const parsed = sf.parseId(id);
    console.log('Parsed ID:', parsed);
    // Parsed ID:
    // {
    // "timestamp": 1752282320001,
    // "datacenterId": 1,
    // "workerId": 1,
    // "sequence": 0
    // }
    Index

    Constructors

    • Constructor

      Parameters

      • options: { datacenterId?: number; epoch?: number; workerId?: number } = {}

        Configuration Item

        • OptionaldatacenterId?: number

          Data Center ID

        • Optionalepoch?: number

          default start time: 2025-01-01 00:00:00Z / 1735660800000

        • OptionalworkerId?: number

          Work Node ID

      Returns Snowflake

    Properties

    datacenterId: number = 1

    Data center ID (0~31)

    datacenterIdBits: number = 5

    The number of bits occupied by the data identifier ID

    datacenterIdShift: number = ...

    The data identification ID is shifted left by 17 bits (12+5).

    epoch: number = 1735660800000

    Start time cut-off (2025-01-01 00:00:00)

    lastTimestamp: number = -1

    The timestamp of the last generated ID

    MAX_UINT64: 18446744073709551615n = 0xFFFFFFFFFFFFFFFFn
    maxDatacenterId: number = ...

    The maximum supported data identifier ID

    maxWorkerId: number = ...

    Maximum supported machine ID

    sequence: number = 0

    Millisecond sequence (0~4095)

    sequenceBits: number = 12

    The number of digits occupied by the sequence in the ID

    sequenceMask: number = ...

    Generate a mask for the sequence, here it is 4095 (0b111111111111=0xfff=4095)

    timestampLeftShift: number = ...

    The time is shifted left by 22 bits (5+5+12)

    totalBits: BigInt = ...
    workerId: number = 1

    Work machine ID (0~31)

    workerIdBits: number = 5

    The number of bits occupied by the machine ID

    workerIdShift: number = ...

    The machine ID shifts left by 12 bits.

    Methods

    • Analyze ID

      Parameters

      • id: bigint

        64-bit ID

      Returns { datacenterId: number; sequence: number; timestamp: number; workerId: number }

      Analysis results with:

      • timestamp: Milliseconds since epoch
      • datacenterId: Datacenter ID part of the Snowflake ID
      • workerId: Worker node ID part of the Snowflake ID
      • sequence: Sequence number for IDs generated in the same millisecond
      const uuid = (69715707826409472n).toBigInt();
      const parsed = snowflake.parseId(uuid);

      console.log('Parsed ID:', parsed);
      // Parsed ID:
      // {
      // "timestamp": 1752282320001,
      // "datacenterId": 1,
      // "workerId": 1,
      // "sequence": 0
      // }
    • Block until the next millisecond, until a new timestamp is obtained.

      Parameters

      • lastTimestamp: number

        The timestamp of the last generated ID

      Returns number

      Current timestamp