node-flakes
v2.1.0
Published
128-bit, k-ordered, lexicographically sortable, base 62, coordination-free id generation for Node that stays crunchy in milk
Readme
node-flakes
The Node identity lib that provides:
- Coordination free
- 128 bit keys
- K-ordered
- Lexicographically sortable
- base 62
Break down
128 bit key comprised of the following:
{timestamp}{worker}{sequence}
- 64 bit timestamp
- 48 bit worker id
- 16 bit sequence number
The sequence number increments for each subsequent id requested within the same millisecond.
Requirements
- Node.js 18 or newer
API
getBase62Provider()
Returns a function that creates base62 ids that sort lexicographically by time.
const { getBase62Provider } = require('node-flakes');
const nextId = getBase62Provider();
const id = nextId();import { getBase62Provider } from 'node-flakes';
const nextId = getBase62Provider();
const id = nextId();getBigIntIdProvider()
Returns a function that creates bigint ids ordered by time.
const { getBigIntIdProvider } = require('node-flakes');
const nextId = getBigIntIdProvider();
const id = nextId();getBigIntIdProviderFromMac(macNumber: bigint)
Uses a provided 48-bit node id (MAC address) to seed the generator.
const { getBigIntIdProviderFromMac } = require('node-flakes');
const nextId = getBigIntIdProviderFromMac(0x112233445566n);
const id = nextId();bigIntTo62(num: bigint)
Converts a bigint into a 22-character base62 id that preserves lexicographic order.
const { bigIntTo62 } = require('node-flakes');
const id = bigIntTo62(123456789n);Speed
Looks like this tops out around 500 / ms on comodity processors. Do with that what you will :)
