34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
/**
|
|
* Utility functions for cubes
|
|
* @module cubes/utils
|
|
*/
|
|
/**
|
|
* Generates a random string of the specified length using the current nanotime as a seed.
|
|
*
|
|
* Uses a simple Linear Congruential Generator (LCG) seeded with high-resolution time.
|
|
* Suitable for generating unique identifiers, not for cryptographic purposes.
|
|
*
|
|
* @param length - The desired length of the random string (default: 5)
|
|
* @returns A random alphanumeric string of the specified length
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* const id = uniqid(); // e.g., "Kx7Pm"
|
|
* const longId = uniqid(10); // e.g., "Kx7PmQr2Yw"
|
|
* ```
|
|
*/
|
|
export function uniqid(length = 5) {
|
|
const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
const charsetLength = charset.length;
|
|
// Use process.hrtime.bigint() for high-resolution time in nanoseconds
|
|
let seed = Number(process.hrtime.bigint() % BigInt(Number.MAX_SAFE_INTEGER));
|
|
const randomString = [];
|
|
for (let i = 0; i < length; i++) {
|
|
// Simple linear congruential generator (LCG) for pseudo-randomness
|
|
seed = (seed * 48271) % 2147483647;
|
|
const index = seed % charsetLength;
|
|
randomString.push(charset[index]);
|
|
}
|
|
return randomString.join('');
|
|
}
|