UNPKG

uuidv6-extension

Version:

UUID version 6 extension for creating time based in RFC UUID v1 for NodeJS.

122 lines (121 loc) 4.59 kB
"use strict"; 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;