@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
22 lines • 2.91 kB
JavaScript
/* eslint-disable @typescript-eslint/no-magic-numbers */
/**
* Generate a canonically formatted UUID that is Version 1 through 5 and is the appropriate Variant as per RFC4122.
*
* @returns The UUID
*
* @example
* generateUUID() // Returns a UUID such as: `f4ee5eed-ed19-3681-713e-907a23ed7858`
*/
export function generateUUID() {
const buf = new Uint16Array(8);
window.crypto.getRandomValues(buf);
const S4 = function (num) {
let ret = num.toString(16);
while (ret.length < 4) {
ret = `0${ret}`;
}
return ret;
};
return (`${S4(buf[0]) + S4(buf[1])}-${S4(buf[2])}-${S4(buf[3])}-${S4(buf[4])}-${S4(buf[5])}${S4(buf[6])}${S4(buf[7])}`);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtdXVpZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0ZXJtaW51cy9uZ3gtdG9vbHMvdXRpbGl0aWVzLyIsInNvdXJjZXMiOlsiZ2VuZXJhdGUtdXVpZC9nZW5lcmF0ZS11dWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDtBQUN4RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFlBQVk7SUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkMsTUFBTSxFQUFFLEdBQUcsVUFBUyxHQUFXO1FBQzdCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQixHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNqQjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1tYWdpYy1udW1iZXJzICovXG4vKipcbiAqIEdlbmVyYXRlIGEgY2Fub25pY2FsbHkgZm9ybWF0dGVkIFVVSUQgdGhhdCBpcyBWZXJzaW9uIDEgdGhyb3VnaCA1IGFuZCBpcyB0aGUgYXBwcm9wcmlhdGUgVmFyaWFudCBhcyBwZXIgUkZDNDEyMi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVVVJRFxuICpcbiAqIEBleGFtcGxlXG4gKiBnZW5lcmF0ZVVVSUQoKSAvLyBSZXR1cm5zIGEgVVVJRCBzdWNoIGFzOiBgZjRlZTVlZWQtZWQxOS0zNjgxLTcxM2UtOTA3YTIzZWQ3ODU4YFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCk6IHN0cmluZyB7XG4gIGNvbnN0IGJ1ZiA9IG5ldyBVaW50MTZBcnJheSg4KTtcbiAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmKTtcblxuICBjb25zdCBTNCA9IGZ1bmN0aW9uKG51bTogbnVtYmVyKSB7XG4gICAgbGV0IHJldCA9IG51bS50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHJldC5sZW5ndGggPCA0KSB7XG4gICAgICByZXQgPSBgMCR7cmV0fWA7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIChgJHtTNChidWZbMF0pICsgUzQoYnVmWzFdKX0tJHtTNChidWZbMl0pfS0ke1M0KGJ1ZlszXSl9LSR7UzQoYnVmWzRdKX0tJHtTNChidWZbNV0pfSR7UzQoYnVmWzZdKX0ke1M0KGJ1Zls3XSl9YCk7XG59XG4iXX0=