48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
// Maps for number <-> hex string conversion
|
|
var _byteToHex = [];
|
|
var _hexToByte = {};
|
|
for (var i = 0; i < 256; i++) {
|
|
_byteToHex[i] = (i + 0x100).toString(16).substr(1);
|
|
_hexToByte[_byteToHex[i]] = i;
|
|
}
|
|
|
|
// **`parse()` - Parse a UUID into it's component bytes**
|
|
function parse(s, buf, offset) {
|
|
const i = (buf && offset) || 0;
|
|
var ii = 0;
|
|
|
|
if (buf) buf.fill(0, i, i + 16);
|
|
buf = buf || Buffer.alloc(16);
|
|
s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
|
|
if (ii < 16) { // Don't overflow!
|
|
buf[i + ii++] = _hexToByte[oct];
|
|
}
|
|
});
|
|
|
|
var buf2 = Buffer.from(buf.slice(i, i + 16));
|
|
buf[i + 0] = buf2[3];
|
|
buf[i + 1] = buf2[2];
|
|
buf[i + 2] = buf2[1];
|
|
buf[i + 3] = buf2[0];
|
|
buf[i + 4] = buf2[5];
|
|
buf[i + 5] = buf2[4];
|
|
buf[i + 6] = buf2[7];
|
|
buf[i + 7] = buf2[6];
|
|
|
|
return buf;
|
|
}
|
|
|
|
// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
|
|
function unparse(buf, offset) {
|
|
var i = offset || 0;
|
|
return '03020100-0504-0706-0809-101112131415'.replace(/\d{2}/g, function (num) {
|
|
var j = parseInt(num, 10);
|
|
return _byteToHex[buf[i+j]];
|
|
})
|
|
}
|
|
|
|
exports.parse = parse;
|
|
exports.unparse = unparse;
|