UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

1 lines 2.29 kB
{"version":3,"file":"uuid.cjs","sources":["../../../src/utils/uuid.ts"],"sourcesContent":["/**\n * Returns a RFC 4122 version 4 UUID.\n *\n * Prefers `crypto.randomUUID()` when available. In non-secure browser contexts\n * (e.g. a dev server accessed via a LAN IP over HTTP) `crypto.randomUUID` is\n * `undefined`, so this falls back to building a UUIDv4 from\n * `crypto.getRandomValues`. Throws if neither API is available.\n *\n * See https://github.com/TanStack/db/issues/1541.\n */\nexport function safeRandomUUID(): string {\n const c: Crypto | undefined =\n typeof globalThis !== `undefined` ? (globalThis as any).crypto : undefined\n\n if (c && typeof c.randomUUID === `function`) {\n return c.randomUUID()\n }\n\n if (c && typeof c.getRandomValues === `function`) {\n const bytes = c.getRandomValues(new Uint8Array(16))\n // Per RFC 4122 §4.4: set version (4) and variant (10xx) bits.\n bytes[6] = (bytes[6]! & 0x0f) | 0x40\n bytes[8] = (bytes[8]! & 0x3f) | 0x80\n\n const hex: Array<string> = []\n for (let i = 0; i < 16; i++) {\n hex.push(bytes[i]!.toString(16).padStart(2, `0`))\n }\n return (\n hex.slice(0, 4).join(``) +\n `-` +\n hex.slice(4, 6).join(``) +\n `-` +\n hex.slice(6, 8).join(``) +\n `-` +\n hex.slice(8, 10).join(``) +\n `-` +\n hex.slice(10, 16).join(``)\n )\n }\n\n throw new Error(\n `No secure random number generator available: neither crypto.randomUUID nor crypto.getRandomValues is defined in this environment.`,\n )\n}\n"],"names":[],"mappings":";;AAUO,SAAS,iBAAyB;AACvC,QAAM,IACJ,OAAO,eAAe,cAAe,WAAmB,SAAS;AAEnE,MAAI,KAAK,OAAO,EAAE,eAAe,YAAY;AAC3C,WAAO,EAAE,WAAA;AAAA,EACX;AAEA,MAAI,KAAK,OAAO,EAAE,oBAAoB,YAAY;AAChD,UAAM,QAAQ,EAAE,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAElD,UAAM,CAAC,IAAK,MAAM,CAAC,IAAK,KAAQ;AAChC,UAAM,CAAC,IAAK,MAAM,CAAC,IAAK,KAAQ;AAEhC,UAAM,MAAqB,CAAA;AAC3B,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAI,KAAK,MAAM,CAAC,EAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,IAClD;AACA,WACE,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,IACvB,MACA,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,IACvB,MACA,IAAI,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,IACvB,MACA,IAAI,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,IACxB,MACA,IAAI,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE;AAAA,EAE7B;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,EAAA;AAEJ;;"}