10 lines
517 B
TypeScript
10 lines
517 B
TypeScript
|
|
/** UUID v4. Falls back to getRandomValues where randomUUID is missing (non-secure contexts, old runtimes). */
|
||
|
|
export function uuidv4(): string {
|
||
|
|
if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();
|
||
|
|
const b = crypto.getRandomValues(new Uint8Array(16));
|
||
|
|
b[6] = (b[6] & 0x0f) | 0x40;
|
||
|
|
b[8] = (b[8] & 0x3f) | 0x80;
|
||
|
|
const h = Array.from(b, (x) => x.toString(16).padStart(2, '0')).join('');
|
||
|
|
return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
|
||
|
|
}
|