UNPKG

basic-uuid

Version:

Basic UUID class for generating random UUIDs

95 lines (65 loc) 2.05 kB
'use strict'; 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 };