diff --git a/src/mol-util/uuid.ts b/src/mol-util/uuid.ts index 7972eaf9fea3c30738f8f97539c1f574e2fd324f..983d88663c1d4a0a54d1ec54e8d1c24c3d321714 100644 --- a/src/mol-util/uuid.ts +++ b/src/mol-util/uuid.ts @@ -9,14 +9,20 @@ import { now } from 'mol-util/now'; type UUID = string & { '@type': 'uuid' } namespace UUID { + const chars: string[] = []; export function create(): UUID { let d = (+new Date()) + now(); - const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - const r = (d + Math.random()*16)%16 | 0; - d = Math.floor(d/16); - return (c==='x' ? r : (r&0x3|0x8)).toString(16); - }); - return uuid as any; + for (let i = 0; i < 16; i++) { + chars[i] = String.fromCharCode((d + Math.random()*0xff)%0xff | 0); + d = Math.floor(d/0xff); + } + return btoa(chars.join('')).substr(0, 22) as UUID; + // const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + // const r = (d + Math.random()*16)%16 | 0; + // d = Math.floor(d/16); + // return (c==='x' ? r : (r&0x3|0x8)).toString(16); + // }); + // return uuid as any; } }