basic-uuid
Version:
Basic UUID class for generating random UUIDs
95 lines (65 loc) • 2.05 kB
JavaScript
;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var PATTERN = /^([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{12})$/i;
function UUID(value) {
var __digits__ = value || createRandomDigitList();
this.getId = function () {
var _hex = digitListToHex(__digits__);
return formatUUIDFromHex(_hex);
};
this.toJSON = function () {
return '{"uuid":"' + this.getId() + '"}';
};
}
function formatUUIDFromHex(hex) {
return hex.replace(PATTERN, "$1-$2-$3-$4-$5");
}
function padLeft(value) {
var lengthTotal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
while (value.length < lengthTotal) {
value = '0' + value;
}
return value;
}
function hexToDigitList(hex) {
var _value = hex.match(/.{2}/g);
return _value.map(function (digit) {
return parseInt(digit, 16);
});
}
function digitListToHex(list) {
var _value = list.map(function (item) {
return padLeft(item.toString(16));
});
return _value.join('');
}
function createRandomDigitList() {
var _time = new Date().getTime();
var _hex = padLeft(_time.toString(16).substr(-8), 8);
var _hexList = hexToDigitList(_hex);
return [].concat(_toConsumableArray(randomDigits(10)), _toConsumableArray(_hexList), _toConsumableArray(randomDigits(2)));
}
function randomDigits(count) {
var _value = new Array(count).fill(null);
return _value.map(function () {
return Math.floor(Math.random() * 0x100);
});
}
function isUUID(id) {
return PATTERN.test(id.replace(/-/g, ''));
}
function randomUUID() {
return new UUID();
}
function fromString(id) {
if (isUUID(id)) {
var _list = hexToDigitList(id.replace(/-/g, ''));
return new UUID(_list);
}
throw new TypeError('[UUID.fromString: Invalid id: \'' + id + '\']');
}
module.exports = {
isUUID: isUUID,
randomUUID: randomUUID,
fromString: fromString
};