UNPKG

lazyid

Version:

Minimal 16-character URL-safe unique ID generator based on a millisecond timestamp, encoded in Base36.

22 lines (17 loc) 684 B
import { randomBytes } from 'crypto'; const TIME_LENGTH = 8; const TOTAL_LENGTH = 16; const BASE = 36; const BIGINT_BASE = BigInt(BASE); const TIME_MODULO = BIGINT_BASE ** BigInt(TIME_LENGTH); const RANDOM_BYTES_NEEDED = 6; export default function lazyid(id) { if (id) { const timePart = id.substring(0, TIME_LENGTH); return parseInt(timePart, BASE); } const timeComponent = BigInt(Date.now()) % TIME_MODULO; const randomComponent = BigInt('0x' + randomBytes(RANDOM_BYTES_NEEDED).toString('hex')) % TIME_MODULO; const combined = (timeComponent * TIME_MODULO) + randomComponent; return combined.toString(BASE).padStart(TOTAL_LENGTH, '0'); }