All files / client/src/lib uuid.ts

90.9% Statements 10/11
75% Branches 3/4
100% Functions 2/2
90% Lines 9/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22        642x   642x 640x     2x       2x 2x 2x   32x 2x    
/**
 * Generates a UUID v4 in browsers that do not expose crypto.randomUUID().
 */
export function generateUuidV4(): string {
  const cryptoApi = globalThis.crypto;
 
  if (typeof cryptoApi?.randomUUID === "function") {
    return cryptoApi.randomUUID();
  }
 
  Iif (typeof cryptoApi?.getRandomValues !== "function") {
    throw new TypeError("Secure random number generation is unavailable");
  }
 
  const bytes = cryptoApi.getRandomValues(new Uint8Array(16));
  bytes[6] = (bytes[6] & 0x0f) | 0x40;
  bytes[8] = (bytes[8] & 0x3f) | 0x80;
 
  const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0"));
  return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10, 16).join("")}`;
}