Buckets:
| import { randomBytes } from "crypto" | |
| export namespace Identifier { | |
| const LENGTH = 26 | |
| // State for monotonic ID generation | |
| let lastTimestamp = 0 | |
| let counter = 0 | |
| export function ascending() { | |
| return create(false) | |
| } | |
| export function descending() { | |
| return create(true) | |
| } | |
| function randomBase62(length: number): string { | |
| const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | |
| let result = "" | |
| const bytes = randomBytes(length) | |
| for (let i = 0; i < length; i++) { | |
| result += chars[bytes[i] % 62] | |
| } | |
| return result | |
| } | |
| export function create(descending: boolean, timestamp?: number): string { | |
| const currentTimestamp = timestamp ?? Date.now() | |
| if (currentTimestamp !== lastTimestamp) { | |
| lastTimestamp = currentTimestamp | |
| counter = 0 | |
| } | |
| counter++ | |
| let now = BigInt(currentTimestamp) * BigInt(0x1000) + BigInt(counter) | |
| now = descending ? ~now : now | |
| const timeBytes = Buffer.alloc(6) | |
| for (let i = 0; i < 6; i++) { | |
| timeBytes[i] = Number((now >> BigInt(40 - 8 * i)) & BigInt(0xff)) | |
| } | |
| return timeBytes.toString("hex") + randomBase62(LENGTH - 12) | |
| } | |
| } | |
Xet Storage Details
- Size:
- 1.18 kB
- Xet hash:
- b23c9b4555e4f5aa78010baf62a0417717a21bae8f831a2177c1f176c57f3eb1
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.