pip-services3-commons-node
Version:
Portable abstractions and patterns for Pip.Services in Node.js
62 lines (55 loc) • 2 kB
text/typescript
/** @module data */
/** @hidden */
const uuid = require('uuid');
// Maps for number <-> hex string conversion
/** @hidden */
let byteToHex = [];
for (let i = 0; i < 256; i++) {
byteToHex[i] = (i + 0x100).toString(16).substr(1);
}
/**
* Helper class to generate unique object IDs.
* It supports two types of IDs: long and short.
*
* Long IDs are string GUIDs. They are globally unique and 32-character long.
*
* ShortIDs are just 9-digit random numbers. They are not guaranteed be unique.
*
* ### Example ###
*
* IdGenerator.nextLong(); // Possible result: "234ab342c56a2b49c2ab42bf23ff991ac"
* IdGenerator.nextShort(); // Possible result: "23495247"
*
*/
export class IdGenerator {
/**
* Generates a random 9-digit random ID (code).
*
* Remember: The returned value is not guaranteed to be unique.
*
* @returns a generated random 9-digit code
*/
public static nextShort(): string {
return Math.ceil(100000000 + Math.random() * 899999999).toString();
}
private static uuidToHex(buffer) {
return byteToHex[buffer[0]] + byteToHex[buffer[1]]
+ byteToHex[buffer[2]] + byteToHex[buffer[3]]
+ byteToHex[buffer[4]] + byteToHex[buffer[5]]
+ byteToHex[buffer[6]] + byteToHex[buffer[7]]
+ byteToHex[buffer[8]] + byteToHex[buffer[9]]
+ byteToHex[buffer[10]] + byteToHex[buffer[11]]
+ byteToHex[buffer[12]] + byteToHex[buffer[13]]
+ byteToHex[buffer[14]] + byteToHex[buffer[15]];
}
/**
* Generates a globally unique 32-digit object ID.
* The value is a string representation of a GUID value.
*
* @returns a generated 32-digit object ID
*/
public static nextLong(): string {
var buffer = new Array(16);
return IdGenerator.uuidToHex(uuid.v4(null, buffer));
}
}