uuidv6-extension
Version:
UUID version 6 extension for creating time based in RFC UUID v1 for NodeJS.
122 lines (121 loc) • 4.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.v6Ordered = exports.v6 = exports.v4 = exports.v1 = exports.uuidToDateV6 = exports.uuidToDate = exports.versionAll = exports.version = exports.validateAll = exports.validateV6 = exports.validate = exports.stringify = exports.parse = exports.nil = void 0;
var crypto = require("crypto");
var uuid = require("uuid");
// Return the nil UUID string (all zeros)
function nil() {
return uuid.NIL;
}
exports.nil = nil;
// Convert UUID string to array of bytes
function parse(uuidData) {
return uuid.parse(uuidData);
}
exports.parse = parse;
// Convert array of bytes to UUID string
function stringify(uuidData) {
return uuid.stringify(uuidData);
}
exports.stringify = stringify;
// Test a string to see if it is a valid UUID not for v6
function validate(uuidData) {
return uuid.validate(uuidData);
}
exports.validate = validate;
// Test a string to see if it is a valid UUID v6
function validateV6(uuiData) {
var regExpUuid = /^[a-z,0-9,-]{36,36}$/;
return regExpUuid.test(uuiData);
}
exports.validateV6 = validateV6;
function validateAll(uuidData) {
var validation = validate(uuidData) || validateV6(uuidData);
return validation;
}
exports.validateAll = validateAll;
// Detect RFC version of a UUID not for v6
function version(uuidData) {
return uuid.version(uuidData);
}
exports.version = version;
// Detect RFC version of a UUID for v1 to v6
function versionAll(uuidData) {
var version = 0;
if (validateV6(uuidData)) {
return parseInt(uuidData.charAt(14));
}
return uuid.version(uuidData);
}
exports.versionAll = versionAll;
// Convert a UUID V1 to a Date Object
function uuidToDate(uuidData) {
var GREGORIAN_OFFSET = 122192928000000000;
function get_time_int(uuid_str) {
// (string) uuid_str format => '11111111-2222-#333-4444-555555555555'
var uuid_arr = uuid_str.split("-"), time_str = [uuid_arr[2].substring(1), uuid_arr[1], uuid_arr[0]].join("");
// time_str is convert '11111111-2222-#333-4444-555555555555' to '333222211111111'
return parseInt(time_str, 16);
}
function get_date_obj(uuid_str) {
// (string) uuid_str format => '11111111-2222-#333-4444-555555555555'
var int_time = get_time_int(uuid_str) - GREGORIAN_OFFSET, int_millisec = Math.floor(int_time / 10000);
return new Date(int_millisec);
}
return get_date_obj(uuidData);
}
exports.uuidToDate = uuidToDate;
function uuidToDateV6(uuidData) {
var GREGORIAN_OFFSET = 122192920000000000;
function get_time_int(uuid_str) {
var uuid_arr = uuid_str.replaceAll("-", "");
return parseInt(uuid_arr);
}
function get_date_obj(uuid_str) {
var int_time = get_time_int(uuid_str) - GREGORIAN_OFFSET;
var int_millisec = Math.floor(int_time / 10000);
return new Date(int_millisec);
}
return new Date();
}
exports.uuidToDateV6 = uuidToDateV6;
// Create a version 1 (timestamp) UUID
function v1() {
return uuid.v1();
}
exports.v1 = v1;
// Create a version 4 (random) UUID
function v4() {
return uuid.v4();
}
exports.v4 = v4;
// Create a version 6 (ordered timestamp) UUID from version 1
function v6(opts) {
if (opts === void 0) { opts = {}; }
var options = opts || {};
var disableRandom = Boolean(options.disableRandom);
function generateId() {
var raw = v1();
var prefix = "".concat(raw.substring(15, 18)).concat(raw.substring(9, 13)).concat(raw.substring(0, 5), "6").concat(raw.substring(5, 8));
var prefixFormatted = "".concat(prefix.substring(0, 8), "-").concat(prefix.substring(8, 4), "-").concat(prefix.substring(12));
var random = crypto.randomBytes(8).toString("hex");
if (disableRandom) {
return "".concat(prefixFormatted).concat(raw.substring(18));
}
return "".concat(prefixFormatted, "-").concat(random.substring(0, 4), "-").concat(random.substring(4));
}
return generateId();
}
exports.v6 = v6;
function v6Ordered() {
var sourceV1 = v1();
var highDate = sourceV1.substring(15, 18);
var midDate = sourceV1.substring(9, 13);
var firstQ = sourceV1.substring(1, 5);
var secondQ = sourceV1.substring(5, 8);
var thirdQ = sourceV1.substring(19, 23);
var suffix = sourceV1.substring(24, 36);
var uuidTimeStamp = "".concat(highDate).concat(midDate).concat(sourceV1.charAt(0), "-").concat(firstQ, "-6").concat(secondQ, "-").concat(thirdQ, "-").concat(suffix);
return uuidTimeStamp;
}
exports.v6Ordered = v6Ordered;