uniku 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cuid2/cuid2.d.mts.map +1 -1
- package/build/cuid2/cuid2.mjs +13 -14
- package/build/cuid2/cuid2.mjs.map +1 -1
- package/build/nanoid/nanoid.d.mts +2 -1
- package/build/nanoid/nanoid.d.mts.map +1 -1
- package/build/nanoid/nanoid.mjs +24 -5
- package/build/nanoid/nanoid.mjs.map +1 -1
- package/build/random-B5WWq7hM.mjs +21 -0
- package/build/random-B5WWq7hM.mjs.map +1 -0
- package/build/random-pool-CRCqpq0I.mjs +100 -0
- package/build/random-pool-CRCqpq0I.mjs.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/build/ulid/ulid.mjs +1 -1
- package/build/uuid/v4.mjs +2 -2
- package/build/uuid/v7.d.mts.map +1 -1
- package/build/uuid/v7.mjs +7 -17
- package/build/uuid/v7.mjs.map +1 -1
- package/build/{uuid-cJ5hOOIR.mjs → uuid-BEUMa9NG.mjs} +2 -8
- package/build/uuid-BEUMa9NG.mjs.map +1 -0
- package/package.json +14 -2
- package/build/random-Dul5R6oJ.mjs +0 -17
- package/build/random-Dul5R6oJ.mjs.map +0 -1
- package/build/uuid-cJ5hOOIR.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cuid2.d.mts","names":["cuid2: Cuid2"],"sources":["../../src/cuid2/cuid2.ts"],"sourcesContent":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cuid2.d.mts","names":["cuid2: Cuid2"],"sources":["../../src/cuid2/cuid2.ts"],"sourcesContent":[],"mappings":";KAGY,YAAA;EAAZ;AAeA;AAyMA;;;;;;;;;WA5MW;;KAGC,KAAA;aACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwMAA,OAAO"}
|
package/build/cuid2/cuid2.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { n as getPooledBytes, r as getRandomBytes, t as createPool } from "../random-pool-CRCqpq0I.mjs";
|
|
1
2
|
import { sha3_512 } from "@noble/hashes/sha3.js";
|
|
2
3
|
|
|
3
4
|
//#region src/cuid2/cuid2.ts
|
|
@@ -9,9 +10,11 @@ const CUID2_REGEX = /^[a-z][0-9a-z]+$/;
|
|
|
9
10
|
const ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz";
|
|
10
11
|
const LETTER_ALPHABET = "abcdefghijklmnopqrstuvwxyz";
|
|
11
12
|
const textEncoder = new TextEncoder();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
let pool;
|
|
14
|
+
function ensurePool() {
|
|
15
|
+
if (!pool) pool = createPool(4);
|
|
16
|
+
return pool;
|
|
17
|
+
}
|
|
15
18
|
/**
|
|
16
19
|
* Module-level state for counter and fingerprint.
|
|
17
20
|
* Counter is initialized lazily on first call to prevent unnecessary crypto operations.
|
|
@@ -25,8 +28,7 @@ const state = {
|
|
|
25
28
|
* Initialize counter using crypto for consistency with other entropy sources.
|
|
26
29
|
*/
|
|
27
30
|
function initializeCounter() {
|
|
28
|
-
const buffer =
|
|
29
|
-
globalThis.crypto.getRandomValues(buffer);
|
|
31
|
+
const buffer = getRandomBytes(ensurePool(), 4);
|
|
30
32
|
return ((buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3]) >>> 0) % (INITIAL_COUNT_MAX + 1);
|
|
31
33
|
}
|
|
32
34
|
function bufToBigInt(buf) {
|
|
@@ -60,17 +62,14 @@ function createFingerprint() {
|
|
|
60
62
|
return bigIntToBase36(bufToBigInt(hash(Object.keys(globalThis).toString() + createEntropy(BIG_LENGTH, random)))).slice(1, BIG_LENGTH + 1);
|
|
61
63
|
}
|
|
62
64
|
/**
|
|
63
|
-
* Get a random number in [0, 1) using
|
|
64
|
-
*
|
|
65
|
+
* Get a random number in [0, 1) using CUID2's own random pool.
|
|
66
|
+
* Thread-safe when SharedArrayBuffer is available.
|
|
65
67
|
*/
|
|
66
68
|
function getCryptoRandom() {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const value = (randomBuffer[randomBufferOffset] * 16777216 + randomBuffer[randomBufferOffset + 1] * 65536 + randomBuffer[randomBufferOffset + 2] * 256 + randomBuffer[randomBufferOffset + 3]) / 4294967296;
|
|
72
|
-
randomBufferOffset += 4;
|
|
73
|
-
return value;
|
|
69
|
+
const p = ensurePool();
|
|
70
|
+
const offset = getPooledBytes(p, 4);
|
|
71
|
+
const bytes = p.bytes;
|
|
72
|
+
return (bytes[offset] * 16777216 + bytes[offset + 1] * 65536 + bytes[offset + 2] * 256 + bytes[offset + 3]) / 4294967296;
|
|
74
73
|
}
|
|
75
74
|
function getRandomFn(random) {
|
|
76
75
|
if (random) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cuid2.mjs","names":["state: { counter: number | undefined; fingerprint: string | undefined }","chars: string[]","cuid2: Cuid2"],"sources":["../../src/cuid2/cuid2.ts"],"sourcesContent":["import { sha3_512 } from '@noble/hashes/sha3.js'\n\nexport type Cuid2Options = {\n /**\n * Length of the generated ID (2-32 characters).\n * Default: 24\n */\n length?: number\n /**\n * Custom random bytes for deterministic testing.\n * Must be at least 1 byte. For adequate entropy, use at least 16 bytes.\n * Note: The fingerprint always uses cryptographically secure random bytes,\n * regardless of this option.\n */\n random?: Uint8Array\n}\n\nexport type Cuid2 = {\n (options?: Cuid2Options): string\n isValid(id: unknown): id is string\n}\n\nconst DEFAULT_LENGTH = 24\nconst MAX_LENGTH = 32\nconst MIN_LENGTH = 2\n\n// Maximum initial counter value from cuid2 spec - provides ~29 bits of\n// initial entropy to prevent cross-process collisions at startup\nconst INITIAL_COUNT_MAX = 476782367\n\n// Validation regex: first char must be a-z, rest can be a-z or 0-9\nconst CUID2_REGEX = /^[a-z][0-9a-z]+$/\n\n// Base36 alphabet\nconst ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'\nconst LETTER_ALPHABET = 'abcdefghijklmnopqrstuvwxyz'\n\n// Reusable TextEncoder instance (stateless, safe to share)\nconst textEncoder = new TextEncoder()\n\n//
|
|
1
|
+
{"version":3,"file":"cuid2.mjs","names":["pool: RandomPool | undefined","state: { counter: number | undefined; fingerprint: string | undefined }","chars: string[]","cuid2: Cuid2"],"sources":["../../src/cuid2/cuid2.ts"],"sourcesContent":["import { sha3_512 } from '@noble/hashes/sha3.js'\nimport { createPool, getPooledBytes, getRandomBytes, type RandomPool } from '../common/random-pool'\n\nexport type Cuid2Options = {\n /**\n * Length of the generated ID (2-32 characters).\n * Default: 24\n */\n length?: number\n /**\n * Custom random bytes for deterministic testing.\n * Must be at least 1 byte. For adequate entropy, use at least 16 bytes.\n * Note: The fingerprint always uses cryptographically secure random bytes,\n * regardless of this option.\n */\n random?: Uint8Array\n}\n\nexport type Cuid2 = {\n (options?: Cuid2Options): string\n isValid(id: unknown): id is string\n}\n\nconst DEFAULT_LENGTH = 24\nconst MAX_LENGTH = 32\nconst MIN_LENGTH = 2\n\n// Maximum initial counter value from cuid2 spec - provides ~29 bits of\n// initial entropy to prevent cross-process collisions at startup\nconst INITIAL_COUNT_MAX = 476782367\n\n// Validation regex: first char must be a-z, rest can be a-z or 0-9\nconst CUID2_REGEX = /^[a-z][0-9a-z]+$/\n\n// Base36 alphabet\nconst ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'\nconst LETTER_ALPHABET = 'abcdefghijklmnopqrstuvwxyz'\n\n// Reusable TextEncoder instance (stateless, safe to share)\nconst textEncoder = new TextEncoder()\n\n// CUID2's own pool - lazily initialized on first use\n// Uses 4 bytes per random() call\nlet pool: RandomPool | undefined\n\nfunction ensurePool(): RandomPool {\n if (!pool) pool = createPool(4)\n return pool\n}\n\n/**\n * Module-level state for counter and fingerprint.\n * Counter is initialized lazily on first call to prevent unnecessary crypto operations.\n * Fingerprint is also generated lazily on first call.\n */\nconst state: { counter: number | undefined; fingerprint: string | undefined } = {\n counter: undefined,\n fingerprint: undefined,\n}\n\n/**\n * Initialize counter using crypto for consistency with other entropy sources.\n */\nfunction initializeCounter(): number {\n const buffer = getRandomBytes(ensurePool(), 4)\n return (((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]) >>> 0) % (INITIAL_COUNT_MAX + 1)\n}\n\n// --- Base36 utilities ---\n\nfunction bufToBigInt(buf: Uint8Array): bigint {\n let value = 0n\n for (const byte of buf) {\n value = value * 256n + BigInt(byte)\n }\n return value\n}\n\nfunction bigIntToBase36(value: bigint): string {\n if (value === 0n) return '0'\n const chars: string[] = []\n while (value > 0n) {\n chars.push(ALPHABET[Number(value % 36n)])\n value = value / 36n\n }\n return chars.reverse().join('')\n}\n\nfunction randomLetter(random: () => number): string {\n return LETTER_ALPHABET[Math.floor(random() * 26)]\n}\n\nfunction createEntropy(length: number, random: () => number): string {\n const chars = new Array<string>(length)\n for (let i = 0; i < length; i++) {\n chars[i] = ALPHABET[Math.floor(random() * 36)]\n }\n return chars.join('')\n}\n\n// --- SHA3 hash wrapper ---\n\nfunction hash(input: string): Uint8Array {\n return sha3_512(textEncoder.encode(input))\n}\n\n// --- Fingerprint generation ---\n\nconst BIG_LENGTH = 32\n\nfunction createFingerprint(): string {\n // Always use CSPRNG for fingerprint to ensure security regardless of custom random option\n const random = getCryptoRandom\n const globals = Object.keys(globalThis).toString()\n const sourceString = globals + createEntropy(BIG_LENGTH, random)\n const hashed = hash(sourceString)\n return bigIntToBase36(bufToBigInt(hashed)).slice(1, BIG_LENGTH + 1)\n}\n\n// --- Random function factory ---\n\n/**\n * Get a random number in [0, 1) using CUID2's own random pool.\n * Thread-safe when SharedArrayBuffer is available.\n */\nfunction getCryptoRandom(): number {\n const p = ensurePool()\n const offset = getPooledBytes(p, 4)\n const bytes = p.bytes\n const value =\n (bytes[offset] * 0x1000000 + bytes[offset + 1] * 0x10000 + bytes[offset + 2] * 0x100 + bytes[offset + 3]) /\n 0x100000000\n return value\n}\n\nfunction getRandomFn(random?: Uint8Array): () => number {\n if (random) {\n if (random.length === 0) {\n throw new Error('Random byte array cannot be empty')\n }\n let index = 0\n return () => {\n const value = random[index % random.length] / 256\n index += 1\n return value\n }\n }\n return getCryptoRandom\n}\n\n// --- Main generator ---\n\nfunction cuid2Fn(options?: Cuid2Options): string {\n const length = options?.length ?? DEFAULT_LENGTH\n\n if (length < MIN_LENGTH || length > MAX_LENGTH) {\n throw new RangeError(`CUID2 length must be between ${MIN_LENGTH} and ${MAX_LENGTH}. Received: ${length}`)\n }\n\n const random = getRandomFn(options?.random)\n\n // Initialize counter lazily on first call\n if (state.counter === undefined) {\n state.counter = initializeCounter()\n }\n\n // Initialize fingerprint lazily on first call (always uses CSPRNG)\n if (state.fingerprint === undefined) {\n state.fingerprint = createFingerprint()\n }\n\n const firstLetter = randomLetter(random)\n const time = Date.now().toString(36)\n state.counter += 1\n const count = state.counter.toString(36)\n const salt = createEntropy(length, random)\n\n const hashInput = time + salt + count + state.fingerprint\n const hashed = hash(hashInput)\n const base36Hash = bigIntToBase36(bufToBigInt(hashed))\n\n // Drop first char of hash to avoid histogram bias, prepend random letter\n return firstLetter + base36Hash.slice(1, length)\n}\n\n// --- Validation (type guard) ---\n\nfunction isValid(id: unknown): id is string {\n return typeof id === 'string' && id.length >= MIN_LENGTH && id.length <= MAX_LENGTH && CUID2_REGEX.test(id)\n}\n\n/**\n * Generate a CUID2 string.\n *\n * CUID2 is a secure, collision-resistant identifier that hashes multiple\n * entropy sources using SHA3-512. Unlike time-ordered IDs (ULID, UUID v7),\n * CUID2 prevents enumeration attacks by making IDs non-predictable.\n *\n * Note: CUID2 does not provide toBytes/fromBytes because it is a string-native\n * format with no canonical binary representation (unlike UUID's 16-byte format).\n *\n * @example\n * ```ts\n * import { cuid2 } from 'uniku/cuid2'\n *\n * const id = cuid2()\n * // => \"pfh0haxfpzowht3oi213cqos\"\n *\n * // Custom length\n * const shortId = cuid2({ length: 10 })\n * // => \"tz4a98xxat\"\n *\n * // Validation (type guard)\n * const maybeId: unknown = getUserInput()\n * if (cuid2.isValid(maybeId)) {\n * console.log(maybeId.length) // TypeScript knows maybeId is string\n * }\n * ```\n */\nexport const cuid2: Cuid2 = Object.assign(cuid2Fn, {\n isValid,\n})\n"],"mappings":";;;;AAuBA,MAAM,iBAAiB;AACvB,MAAM,aAAa;AACnB,MAAM,aAAa;AAInB,MAAM,oBAAoB;AAG1B,MAAM,cAAc;AAGpB,MAAM,WAAW;AACjB,MAAM,kBAAkB;AAGxB,MAAM,cAAc,IAAI,aAAa;AAIrC,IAAIA;AAEJ,SAAS,aAAyB;AAChC,KAAI,CAAC,KAAM,QAAO,WAAW,EAAE;AAC/B,QAAO;;;;;;;AAQT,MAAMC,QAA0E;CAC9E,SAAS;CACT,aAAa;CACd;;;;AAKD,SAAS,oBAA4B;CACnC,MAAM,SAAS,eAAe,YAAY,EAAE,EAAE;AAC9C,UAAU,OAAO,MAAM,KAAO,OAAO,MAAM,KAAO,OAAO,MAAM,IAAK,OAAO,QAAQ,MAAM,oBAAoB;;AAK/G,SAAS,YAAY,KAAyB;CAC5C,IAAI,QAAQ;AACZ,MAAK,MAAM,QAAQ,IACjB,SAAQ,QAAQ,OAAO,OAAO,KAAK;AAErC,QAAO;;AAGT,SAAS,eAAe,OAAuB;AAC7C,KAAI,UAAU,GAAI,QAAO;CACzB,MAAMC,QAAkB,EAAE;AAC1B,QAAO,QAAQ,IAAI;AACjB,QAAM,KAAK,SAAS,OAAO,QAAQ,IAAI,EAAE;AACzC,UAAQ,QAAQ;;AAElB,QAAO,MAAM,SAAS,CAAC,KAAK,GAAG;;AAGjC,SAAS,aAAa,QAA8B;AAClD,QAAO,gBAAgB,KAAK,MAAM,QAAQ,GAAG,GAAG;;AAGlD,SAAS,cAAc,QAAgB,QAA8B;CACnE,MAAM,QAAQ,IAAI,MAAc,OAAO;AACvC,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,OAAM,KAAK,SAAS,KAAK,MAAM,QAAQ,GAAG,GAAG;AAE/C,QAAO,MAAM,KAAK,GAAG;;AAKvB,SAAS,KAAK,OAA2B;AACvC,QAAO,SAAS,YAAY,OAAO,MAAM,CAAC;;AAK5C,MAAM,aAAa;AAEnB,SAAS,oBAA4B;CAEnC,MAAM,SAAS;AAIf,QAAO,eAAe,YADP,KAFC,OAAO,KAAK,WAAW,CAAC,UAAU,GACnB,cAAc,YAAY,OAAO,CAC/B,CACQ,CAAC,CAAC,MAAM,GAAG,aAAa,EAAE;;;;;;AASrE,SAAS,kBAA0B;CACjC,MAAM,IAAI,YAAY;CACtB,MAAM,SAAS,eAAe,GAAG,EAAE;CACnC,MAAM,QAAQ,EAAE;AAIhB,SAFG,MAAM,UAAU,WAAY,MAAM,SAAS,KAAK,QAAU,MAAM,SAAS,KAAK,MAAQ,MAAM,SAAS,MACtG;;AAIJ,SAAS,YAAY,QAAmC;AACtD,KAAI,QAAQ;AACV,MAAI,OAAO,WAAW,EACpB,OAAM,IAAI,MAAM,oCAAoC;EAEtD,IAAI,QAAQ;AACZ,eAAa;GACX,MAAM,QAAQ,OAAO,QAAQ,OAAO,UAAU;AAC9C,YAAS;AACT,UAAO;;;AAGX,QAAO;;AAKT,SAAS,QAAQ,SAAgC;CAC/C,MAAM,SAAS,SAAS,UAAU;AAElC,KAAI,SAAS,cAAc,SAAS,WAClC,OAAM,IAAI,WAAW,gCAAgC,WAAW,OAAO,WAAW,cAAc,SAAS;CAG3G,MAAM,SAAS,YAAY,SAAS,OAAO;AAG3C,KAAI,MAAM,YAAY,OACpB,OAAM,UAAU,mBAAmB;AAIrC,KAAI,MAAM,gBAAgB,OACxB,OAAM,cAAc,mBAAmB;CAGzC,MAAM,cAAc,aAAa,OAAO;CACxC,MAAM,OAAO,KAAK,KAAK,CAAC,SAAS,GAAG;AACpC,OAAM,WAAW;CACjB,MAAM,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAQxC,QAAO,cAHY,eAAe,YADnB,KADG,OAFL,cAAc,QAAQ,OAAO,GAEV,QAAQ,MAAM,YAChB,CACuB,CAAC,CAGtB,MAAM,GAAG,OAAO;;AAKlD,SAAS,QAAQ,IAA2B;AAC1C,QAAO,OAAO,OAAO,YAAY,GAAG,UAAU,cAAc,GAAG,UAAU,cAAc,YAAY,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+B7G,MAAaC,QAAe,OAAO,OAAO,SAAS,EACjD,SACD,CAAC"}
|
|
@@ -4,7 +4,8 @@ declare const URL_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx
|
|
|
4
4
|
type NanoidOptions = {
|
|
5
5
|
/**
|
|
6
6
|
* Random bytes for deterministic output (testing).
|
|
7
|
-
*
|
|
7
|
+
* For power-of-2 alphabets (2, 4, 8, 16, 32, 64, 128, 256): exactly `size` bytes needed.
|
|
8
|
+
* For other alphabets: ~size * 2 bytes needed (rejection sampling).
|
|
8
9
|
*/
|
|
9
10
|
random?: Uint8Array;
|
|
10
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nanoid.d.mts","names":["nanoid: Nanoid"],"sources":["../../src/nanoid/nanoid.ts"],"sourcesContent":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"nanoid.d.mts","names":["nanoid: Nanoid"],"sources":["../../src/nanoid/nanoid.ts"],"sourcesContent":[],"mappings":";;AAGa,cAAA,YAAA,GAAA,kEAAA;AASD,KAAA,aAAA,GAAA;EAkBZ;AAoJA;;;;WAhKW;;;;;;;;;;;KAYC,MAAA;;;;;;YAMA;;;;;;;;;;cA8ICA,QAAQ"}
|
package/build/nanoid/nanoid.mjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { n as getPooledBytes, t as createPool } from "../random-pool-CRCqpq0I.mjs";
|
|
2
|
+
|
|
1
3
|
//#region src/nanoid/nanoid.ts
|
|
2
4
|
/** Default URL-safe alphabet (64 characters): A-Z, a-z, 0-9, underscore, hyphen */
|
|
3
5
|
const URL_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
|
|
4
6
|
const DEFAULT_SIZE = 21;
|
|
5
7
|
const MAX_SIZE = 2048;
|
|
6
8
|
const NANOID_REGEX = /^[A-Za-z0-9_-]+$/;
|
|
9
|
+
let pool;
|
|
7
10
|
/**
|
|
8
11
|
* Validate alphabet: 2-256 printable ASCII chars, no duplicates
|
|
9
12
|
*/
|
|
@@ -26,20 +29,36 @@ function validateSize(size) {
|
|
|
26
29
|
if (size > MAX_SIZE) throw new RangeError(`Size must not exceed ${MAX_SIZE}`);
|
|
27
30
|
}
|
|
28
31
|
function nanoidFn(sizeOrOptions) {
|
|
32
|
+
if (sizeOrOptions === void 0) {
|
|
33
|
+
if (!pool) pool = createPool(DEFAULT_SIZE);
|
|
34
|
+
const startOffset = getPooledBytes(pool, DEFAULT_SIZE);
|
|
35
|
+
let id$1 = "";
|
|
36
|
+
for (let i = startOffset; i < startOffset + DEFAULT_SIZE; i++) id$1 += URL_ALPHABET[pool.bytes[i] & 63];
|
|
37
|
+
return id$1;
|
|
38
|
+
}
|
|
29
39
|
let size = DEFAULT_SIZE;
|
|
30
40
|
let alphabet = URL_ALPHABET;
|
|
31
41
|
let randomBytes;
|
|
32
42
|
if (typeof sizeOrOptions === "number") size = sizeOrOptions;
|
|
33
|
-
else
|
|
43
|
+
else {
|
|
34
44
|
size = sizeOrOptions.size ?? DEFAULT_SIZE;
|
|
35
45
|
alphabet = sizeOrOptions.alphabet ?? URL_ALPHABET;
|
|
36
46
|
randomBytes = sizeOrOptions.random;
|
|
37
|
-
if (sizeOrOptions.alphabet) validateAlphabet(alphabet);
|
|
47
|
+
if (sizeOrOptions.alphabet !== void 0) validateAlphabet(alphabet);
|
|
38
48
|
}
|
|
39
49
|
validateSize(size);
|
|
40
50
|
if (size === 0) return "";
|
|
41
|
-
const
|
|
42
|
-
|
|
51
|
+
const alphabetLen = alphabet.length;
|
|
52
|
+
if ((alphabetLen & alphabetLen - 1) === 0) {
|
|
53
|
+
const mask$1 = alphabetLen - 1;
|
|
54
|
+
if (randomBytes && randomBytes.length < size) throw new Error(`Insufficient random bytes: need ${size}, have ${randomBytes.length}`);
|
|
55
|
+
const bytes = randomBytes?.subarray(0, size) ?? globalThis.crypto.getRandomValues(new Uint8Array(size));
|
|
56
|
+
let id$1 = "";
|
|
57
|
+
for (let i = 0; i < size; i++) id$1 += alphabet[bytes[i] & mask$1];
|
|
58
|
+
return id$1;
|
|
59
|
+
}
|
|
60
|
+
const mask = (2 << 31 - Math.clz32(alphabetLen - 1 | 1)) - 1;
|
|
61
|
+
const step = Math.ceil(1.6 * mask * size / alphabetLen);
|
|
43
62
|
let id = "";
|
|
44
63
|
let randomOffset = 0;
|
|
45
64
|
while (id.length < size) {
|
|
@@ -51,7 +70,7 @@ function nanoidFn(sizeOrOptions) {
|
|
|
51
70
|
} else bytes = globalThis.crypto.getRandomValues(new Uint8Array(step));
|
|
52
71
|
for (let i = 0; i < bytes.length && id.length < size; i++) {
|
|
53
72
|
const index = bytes[i] & mask;
|
|
54
|
-
if (index <
|
|
73
|
+
if (index < alphabetLen) id += alphabet[index];
|
|
55
74
|
}
|
|
56
75
|
}
|
|
57
76
|
return id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nanoid.mjs","names":["randomBytes: Uint8Array | undefined","bytes: Uint8Array","nanoid: Nanoid"],"sources":["../../src/nanoid/nanoid.ts"],"sourcesContent":["/** Default URL-safe alphabet (64 characters): A-Z, a-z, 0-9, underscore, hyphen */\nexport const URL_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'\n\nconst DEFAULT_SIZE = 21\nconst MAX_SIZE = 2048\nconst NANOID_REGEX = /^[A-Za-z0-9_-]+$/\n\nexport type NanoidOptions = {\n /**\n * Random bytes for deterministic output (testing).\n *
|
|
1
|
+
{"version":3,"file":"nanoid.mjs","names":["pool: RandomPool | undefined","id","randomBytes: Uint8Array | undefined","mask","bytes: Uint8Array","nanoid: Nanoid"],"sources":["../../src/nanoid/nanoid.ts"],"sourcesContent":["import { createPool, getPooledBytes, type RandomPool } from '../common/random-pool'\n\n/** Default URL-safe alphabet (64 characters): A-Z, a-z, 0-9, underscore, hyphen */\nexport const URL_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'\n\nconst DEFAULT_SIZE = 21\nconst MAX_SIZE = 2048\nconst NANOID_REGEX = /^[A-Za-z0-9_-]+$/\n\n// Nanoid's own pool - lazily initialized on first use\nlet pool: RandomPool | undefined\n\nexport type NanoidOptions = {\n /**\n * Random bytes for deterministic output (testing).\n * For power-of-2 alphabets (2, 4, 8, 16, 32, 64, 128, 256): exactly `size` bytes needed.\n * For other alphabets: ~size * 2 bytes needed (rejection sampling).\n */\n random?: Uint8Array\n /**\n * Custom alphabet to use. Default: URL-safe A-Za-z0-9_-\n * Must be 2-256 printable ASCII characters (32-126) with no duplicates.\n */\n alphabet?: string\n /**\n * Length of generated ID. Default: 21. Maximum: 2048.\n */\n size?: number\n}\n\nexport type Nanoid = {\n /** Generate nanoid with default settings */\n (): string\n /** Generate nanoid with custom size */\n (size: number): string\n /** Generate nanoid with options */\n (options: NanoidOptions): string\n /**\n * Validate a nanoid string against the default URL-safe alphabet.\n * Note: Does not validate IDs generated with custom alphabets.\n */\n isValid(id: unknown): id is string\n}\n\n/**\n * Validate alphabet: 2-256 printable ASCII chars, no duplicates\n */\nfunction validateAlphabet(alphabet: string): void {\n if (alphabet.length < 2) {\n throw new Error('Alphabet must contain at least 2 characters')\n }\n if (alphabet.length > 256) {\n throw new Error('Alphabet must not exceed 256 characters')\n }\n const seen = new Set<string>()\n for (const char of alphabet) {\n const code = char.charCodeAt(0)\n if (code < 32 || code > 126) {\n throw new Error('Alphabet must contain only printable ASCII characters (32-126)')\n }\n if (seen.has(char)) {\n throw new Error(`Duplicate character in alphabet: \"${char}\"`)\n }\n seen.add(char)\n }\n}\n\n/**\n * Validate size parameter\n */\nfunction validateSize(size: number): void {\n if (!Number.isInteger(size) || size < 0) {\n throw new RangeError('Size must be a non-negative integer')\n }\n if (size > MAX_SIZE) {\n throw new RangeError(`Size must not exceed ${MAX_SIZE}`)\n }\n}\n\n// Overloads\nfunction nanoidFn(): string\nfunction nanoidFn(size: number): string\nfunction nanoidFn(options: NanoidOptions): string\nfunction nanoidFn(sizeOrOptions?: number | NanoidOptions): string {\n // ULTRA-FAST PATH: No arguments = default nanoid\n // Uses thread-safe pooled random bytes for high performance\n if (sizeOrOptions === undefined) {\n if (!pool) pool = createPool(DEFAULT_SIZE)\n const startOffset = getPooledBytes(pool, DEFAULT_SIZE)\n let id = ''\n for (let i = startOffset; i < startOffset + DEFAULT_SIZE; i++) {\n id += URL_ALPHABET[pool.bytes[i] & 63]\n }\n return id\n }\n\n let size = DEFAULT_SIZE\n let alphabet = URL_ALPHABET\n let randomBytes: Uint8Array | undefined\n\n if (typeof sizeOrOptions === 'number') {\n size = sizeOrOptions\n } else {\n size = sizeOrOptions.size ?? DEFAULT_SIZE\n alphabet = sizeOrOptions.alphabet ?? URL_ALPHABET\n randomBytes = sizeOrOptions.random\n if (sizeOrOptions.alphabet !== undefined) {\n validateAlphabet(alphabet)\n }\n }\n\n validateSize(size)\n\n if (size === 0) return ''\n\n const alphabetLen = alphabet.length\n\n // FAST PATH: Power-of-2 alphabet (includes default 64-char)\n // No rejection needed - each byte maps directly to a character\n if ((alphabetLen & (alphabetLen - 1)) === 0) {\n const mask = alphabetLen - 1\n if (randomBytes && randomBytes.length < size) {\n throw new Error(`Insufficient random bytes: need ${size}, have ${randomBytes.length}`)\n }\n const bytes = randomBytes?.subarray(0, size) ?? globalThis.crypto.getRandomValues(new Uint8Array(size))\n let id = ''\n for (let i = 0; i < size; i++) {\n id += alphabet[bytes[i] & mask]\n }\n return id\n }\n\n // SLOW PATH: Rejection sampling for non-power-of-2 alphabets\n // Calculate mask: smallest power-of-2 minus 1 that covers alphabet size\n const mask = (2 << (31 - Math.clz32((alphabetLen - 1) | 1))) - 1\n // Calculate step: random bytes per batch (1.6x accounts for rejection)\n const step = Math.ceil((1.6 * mask * size) / alphabetLen)\n\n let id = ''\n let randomOffset = 0\n\n while (id.length < size) {\n let bytes: Uint8Array\n if (randomBytes) {\n if (randomBytes.length - randomOffset < step) {\n throw new Error(\n `Insufficient random bytes: need at least ${step} more, have ${randomBytes.length - randomOffset}`,\n )\n }\n bytes = randomBytes.subarray(randomOffset, randomOffset + step)\n randomOffset += step\n } else {\n bytes = globalThis.crypto.getRandomValues(new Uint8Array(step))\n }\n\n for (let i = 0; i < bytes.length && id.length < size; i++) {\n const index = bytes[i] & mask\n if (index < alphabetLen) {\n id += alphabet[index]\n }\n // Otherwise reject and continue (no modulo bias)\n }\n }\n\n return id\n}\n\n/**\n * Validate a nanoid string against the default URL-safe alphabet.\n * Note: Does not validate IDs generated with custom alphabets.\n */\nfunction isValid(id: unknown): id is string {\n return typeof id === 'string' && id.length > 0 && NANOID_REGEX.test(id)\n}\n\n/**\n * Generate a URL-friendly unique string ID.\n */\nexport const nanoid: Nanoid = Object.assign(nanoidFn, {\n isValid,\n})\n"],"mappings":";;;;AAGA,MAAa,eAAe;AAE5B,MAAM,eAAe;AACrB,MAAM,WAAW;AACjB,MAAM,eAAe;AAGrB,IAAIA;;;;AAqCJ,SAAS,iBAAiB,UAAwB;AAChD,KAAI,SAAS,SAAS,EACpB,OAAM,IAAI,MAAM,8CAA8C;AAEhE,KAAI,SAAS,SAAS,IACpB,OAAM,IAAI,MAAM,0CAA0C;CAE5D,MAAM,uBAAO,IAAI,KAAa;AAC9B,MAAK,MAAM,QAAQ,UAAU;EAC3B,MAAM,OAAO,KAAK,WAAW,EAAE;AAC/B,MAAI,OAAO,MAAM,OAAO,IACtB,OAAM,IAAI,MAAM,iEAAiE;AAEnF,MAAI,KAAK,IAAI,KAAK,CAChB,OAAM,IAAI,MAAM,qCAAqC,KAAK,GAAG;AAE/D,OAAK,IAAI,KAAK;;;;;;AAOlB,SAAS,aAAa,MAAoB;AACxC,KAAI,CAAC,OAAO,UAAU,KAAK,IAAI,OAAO,EACpC,OAAM,IAAI,WAAW,sCAAsC;AAE7D,KAAI,OAAO,SACT,OAAM,IAAI,WAAW,wBAAwB,WAAW;;AAQ5D,SAAS,SAAS,eAAgD;AAGhE,KAAI,kBAAkB,QAAW;AAC/B,MAAI,CAAC,KAAM,QAAO,WAAW,aAAa;EAC1C,MAAM,cAAc,eAAe,MAAM,aAAa;EACtD,IAAIC,OAAK;AACT,OAAK,IAAI,IAAI,aAAa,IAAI,cAAc,cAAc,IACxD,SAAM,aAAa,KAAK,MAAM,KAAK;AAErC,SAAOA;;CAGT,IAAI,OAAO;CACX,IAAI,WAAW;CACf,IAAIC;AAEJ,KAAI,OAAO,kBAAkB,SAC3B,QAAO;MACF;AACL,SAAO,cAAc,QAAQ;AAC7B,aAAW,cAAc,YAAY;AACrC,gBAAc,cAAc;AAC5B,MAAI,cAAc,aAAa,OAC7B,kBAAiB,SAAS;;AAI9B,cAAa,KAAK;AAElB,KAAI,SAAS,EAAG,QAAO;CAEvB,MAAM,cAAc,SAAS;AAI7B,MAAK,cAAe,cAAc,OAAQ,GAAG;EAC3C,MAAMC,SAAO,cAAc;AAC3B,MAAI,eAAe,YAAY,SAAS,KACtC,OAAM,IAAI,MAAM,mCAAmC,KAAK,SAAS,YAAY,SAAS;EAExF,MAAM,QAAQ,aAAa,SAAS,GAAG,KAAK,IAAI,WAAW,OAAO,gBAAgB,IAAI,WAAW,KAAK,CAAC;EACvG,IAAIF,OAAK;AACT,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,SAAM,SAAS,MAAM,KAAKE;AAE5B,SAAOF;;CAKT,MAAM,QAAQ,KAAM,KAAK,KAAK,MAAO,cAAc,IAAK,EAAE,IAAK;CAE/D,MAAM,OAAO,KAAK,KAAM,MAAM,OAAO,OAAQ,YAAY;CAEzD,IAAI,KAAK;CACT,IAAI,eAAe;AAEnB,QAAO,GAAG,SAAS,MAAM;EACvB,IAAIG;AACJ,MAAI,aAAa;AACf,OAAI,YAAY,SAAS,eAAe,KACtC,OAAM,IAAI,MACR,4CAA4C,KAAK,cAAc,YAAY,SAAS,eACrF;AAEH,WAAQ,YAAY,SAAS,cAAc,eAAe,KAAK;AAC/D,mBAAgB;QAEhB,SAAQ,WAAW,OAAO,gBAAgB,IAAI,WAAW,KAAK,CAAC;AAGjE,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,UAAU,GAAG,SAAS,MAAM,KAAK;GACzD,MAAM,QAAQ,MAAM,KAAK;AACzB,OAAI,QAAQ,YACV,OAAM,SAAS;;;AAMrB,QAAO;;;;;;AAOT,SAAS,QAAQ,IAA2B;AAC1C,QAAO,OAAO,OAAO,YAAY,GAAG,SAAS,KAAK,aAAa,KAAK,GAAG;;;;;AAMzE,MAAaC,SAAiB,OAAO,OAAO,UAAU,EACpD,SACD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/uuid/common/random.ts
|
|
2
|
+
const POOL_SIZE = 256;
|
|
3
|
+
const rnds8Pool = new Uint8Array(POOL_SIZE);
|
|
4
|
+
let poolPtr = POOL_SIZE;
|
|
5
|
+
/**
|
|
6
|
+
* Generate 16 bytes of cryptographically strong random data.
|
|
7
|
+
* Uses a pre-filled pool to minimize crypto API calls.
|
|
8
|
+
*/
|
|
9
|
+
function rng() {
|
|
10
|
+
if (poolPtr > POOL_SIZE - 16) {
|
|
11
|
+
crypto.getRandomValues(rnds8Pool);
|
|
12
|
+
poolPtr = 0;
|
|
13
|
+
}
|
|
14
|
+
const start = poolPtr;
|
|
15
|
+
poolPtr += 16;
|
|
16
|
+
return rnds8Pool.subarray(start, poolPtr);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { rng as t };
|
|
21
|
+
//# sourceMappingURL=random-B5WWq7hM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-B5WWq7hM.mjs","names":[],"sources":["../src/uuid/common/random.ts"],"sourcesContent":["// Simple, fast random byte pool for UUID generation.\n// Uses plain JavaScript for maximum performance - no Atomics overhead.\n// Thread safety is not needed for typical UUID use cases.\n\nconst POOL_SIZE = 256 // uuid npm uses 256 bytes\nconst rnds8Pool = new Uint8Array(POOL_SIZE)\nlet poolPtr = POOL_SIZE // Start exhausted to trigger first fill\n\n/**\n * Generate 16 bytes of cryptographically strong random data.\n * Uses a pre-filled pool to minimize crypto API calls.\n */\nexport function rng(): Uint8Array {\n if (poolPtr > POOL_SIZE - 16) {\n crypto.getRandomValues(rnds8Pool)\n poolPtr = 0\n }\n // Return a view - consumed synchronously within the same v7 call\n const start = poolPtr\n poolPtr += 16\n return rnds8Pool.subarray(start, poolPtr)\n}\n\n/**\n * Fill the provided buffer with random bytes from the pool.\n */\nexport function randomBytes(out: Uint8Array): void {\n const count = out.length\n if (poolPtr > POOL_SIZE - count) {\n crypto.getRandomValues(rnds8Pool)\n poolPtr = 0\n }\n out.set(rnds8Pool.subarray(poolPtr, poolPtr + count))\n poolPtr += count\n}\n"],"mappings":";AAIA,MAAM,YAAY;AAClB,MAAM,YAAY,IAAI,WAAW,UAAU;AAC3C,IAAI,UAAU;;;;;AAMd,SAAgB,MAAkB;AAChC,KAAI,UAAU,YAAY,IAAI;AAC5B,SAAO,gBAAgB,UAAU;AACjC,YAAU;;CAGZ,MAAM,QAAQ;AACd,YAAW;AACX,QAAO,UAAU,SAAS,OAAO,QAAQ"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//#region src/common/random-pool.ts
|
|
2
|
+
/**
|
|
3
|
+
* Thread-safe random byte pool utilities using Atomics (when SharedArrayBuffer is available).
|
|
4
|
+
* Falls back to regular pooling in environments without SharedArrayBuffer.
|
|
5
|
+
*
|
|
6
|
+
* This module provides STATELESS utilities - each consumer creates and manages its own pool.
|
|
7
|
+
* Pass the pool state to each function (C-style) for explicit, predictable behavior.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* // Each module creates its own pool
|
|
12
|
+
* let pool: RandomPool | undefined
|
|
13
|
+
*
|
|
14
|
+
* function getBytes(count: number): number {
|
|
15
|
+
* if (!pool) pool = createPool(count)
|
|
16
|
+
* return getPooledBytes(pool, count)
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
const POOL_SIZE_MULTIPLIER = 128;
|
|
21
|
+
const POOL_HEADER_SIZE = 4;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new random pool. Uses SharedArrayBuffer + Atomics when available
|
|
24
|
+
* for thread-safety in Web Worker scenarios.
|
|
25
|
+
*
|
|
26
|
+
* @param minSize - Minimum bytes needed per request (pool = minSize * 128)
|
|
27
|
+
*/
|
|
28
|
+
function createPool(minSize) {
|
|
29
|
+
const totalSize = POOL_HEADER_SIZE + minSize * POOL_SIZE_MULTIPLIER;
|
|
30
|
+
let buffer;
|
|
31
|
+
let useAtomics = false;
|
|
32
|
+
if (typeof SharedArrayBuffer !== "undefined") try {
|
|
33
|
+
buffer = new SharedArrayBuffer(totalSize);
|
|
34
|
+
useAtomics = true;
|
|
35
|
+
} catch {
|
|
36
|
+
buffer = new ArrayBuffer(totalSize);
|
|
37
|
+
}
|
|
38
|
+
else buffer = new ArrayBuffer(totalSize);
|
|
39
|
+
const offset = new Int32Array(buffer, 0, 1);
|
|
40
|
+
const bytes = new Uint8Array(buffer, POOL_HEADER_SIZE);
|
|
41
|
+
crypto.getRandomValues(bytes);
|
|
42
|
+
return {
|
|
43
|
+
buffer,
|
|
44
|
+
bytes,
|
|
45
|
+
offset,
|
|
46
|
+
useAtomics
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get pooled random bytes. Thread-safe when SharedArrayBuffer is available.
|
|
51
|
+
* Returns the starting index in the pool for the requested bytes.
|
|
52
|
+
*
|
|
53
|
+
* @param pool - The pool state (from createPool)
|
|
54
|
+
* @param count - Number of bytes needed
|
|
55
|
+
* @returns Starting offset in pool.bytes
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* const offset = getPooledBytes(pool, 21)
|
|
60
|
+
* for (let i = offset; i < offset + 21; i++) {
|
|
61
|
+
* // Use pool.bytes[i]
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
function getPooledBytes(pool, count) {
|
|
66
|
+
if (pool.useAtomics) {
|
|
67
|
+
const startOffset = Atomics.add(pool.offset, 0, count);
|
|
68
|
+
if (startOffset + count <= pool.bytes.length) return startOffset;
|
|
69
|
+
if (Atomics.compareExchange(pool.offset, 0, startOffset + count, count) === startOffset + count) {
|
|
70
|
+
crypto.getRandomValues(pool.bytes);
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
return getPooledBytes(pool, count);
|
|
74
|
+
} else {
|
|
75
|
+
let currentOffset = pool.offset[0];
|
|
76
|
+
if (currentOffset + count > pool.bytes.length) {
|
|
77
|
+
crypto.getRandomValues(pool.bytes);
|
|
78
|
+
currentOffset = 0;
|
|
79
|
+
}
|
|
80
|
+
pool.offset[0] = currentOffset + count;
|
|
81
|
+
return currentOffset;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get a Uint8Array slice of random bytes from the pool.
|
|
86
|
+
*
|
|
87
|
+
* Note: Returns a subarray VIEW into the pool. If you need the bytes to persist
|
|
88
|
+
* beyond the current synchronous operation, use getRandomBytesCopy() instead.
|
|
89
|
+
*
|
|
90
|
+
* @param pool - The pool state
|
|
91
|
+
* @param count - Number of bytes needed
|
|
92
|
+
*/
|
|
93
|
+
function getRandomBytes(pool, count) {
|
|
94
|
+
const offset = getPooledBytes(pool, count);
|
|
95
|
+
return pool.bytes.subarray(offset, offset + count);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//#endregion
|
|
99
|
+
export { getPooledBytes as n, getRandomBytes as r, createPool as t };
|
|
100
|
+
//# sourceMappingURL=random-pool-CRCqpq0I.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-pool-CRCqpq0I.mjs","names":["buffer: SharedArrayBuffer | ArrayBuffer"],"sources":["../src/common/random-pool.ts"],"sourcesContent":["/**\n * Thread-safe random byte pool utilities using Atomics (when SharedArrayBuffer is available).\n * Falls back to regular pooling in environments without SharedArrayBuffer.\n *\n * This module provides STATELESS utilities - each consumer creates and manages its own pool.\n * Pass the pool state to each function (C-style) for explicit, predictable behavior.\n *\n * @example\n * ```ts\n * // Each module creates its own pool\n * let pool: RandomPool | undefined\n *\n * function getBytes(count: number): number {\n * if (!pool) pool = createPool(count)\n * return getPooledBytes(pool, count)\n * }\n * ```\n */\n\nconst POOL_SIZE_MULTIPLIER = 128\nconst POOL_HEADER_SIZE = 4 // 4 bytes for Int32 offset counter\n\n/**\n * Pool state - passed to all pool functions.\n * Each module creates and owns its own pool instance.\n */\nexport type RandomPool = {\n buffer: SharedArrayBuffer | ArrayBuffer\n bytes: Uint8Array\n offset: Int32Array\n useAtomics: boolean\n}\n\n/**\n * Create a new random pool. Uses SharedArrayBuffer + Atomics when available\n * for thread-safety in Web Worker scenarios.\n *\n * @param minSize - Minimum bytes needed per request (pool = minSize * 128)\n */\nexport function createPool(minSize: number): RandomPool {\n const poolSize = minSize * POOL_SIZE_MULTIPLIER\n const totalSize = POOL_HEADER_SIZE + poolSize\n\n let buffer: SharedArrayBuffer | ArrayBuffer\n let useAtomics = false\n\n // Try SharedArrayBuffer first (thread-safe with Atomics)\n if (typeof SharedArrayBuffer !== 'undefined') {\n try {\n buffer = new SharedArrayBuffer(totalSize)\n useAtomics = true\n } catch {\n // SharedArrayBuffer may be disabled (security restrictions)\n buffer = new ArrayBuffer(totalSize)\n }\n } else {\n buffer = new ArrayBuffer(totalSize)\n }\n\n // First 4 bytes = atomic offset counter, rest = random bytes\n const offset = new Int32Array(buffer, 0, 1)\n const bytes = new Uint8Array(buffer, POOL_HEADER_SIZE)\n crypto.getRandomValues(bytes)\n\n return { buffer, bytes, offset, useAtomics }\n}\n\n/**\n * Get pooled random bytes. Thread-safe when SharedArrayBuffer is available.\n * Returns the starting index in the pool for the requested bytes.\n *\n * @param pool - The pool state (from createPool)\n * @param count - Number of bytes needed\n * @returns Starting offset in pool.bytes\n *\n * @example\n * ```ts\n * const offset = getPooledBytes(pool, 21)\n * for (let i = offset; i < offset + 21; i++) {\n * // Use pool.bytes[i]\n * }\n * ```\n */\nexport function getPooledBytes(pool: RandomPool, count: number): number {\n if (pool.useAtomics) {\n // Thread-safe path using Atomics\n const startOffset = Atomics.add(pool.offset, 0, count)\n\n if (startOffset + count <= pool.bytes.length) {\n return startOffset\n }\n\n // Pool exhausted - need to refill\n // Use compareExchange to ensure only one thread refills\n const resetResult = Atomics.compareExchange(pool.offset, 0, startOffset + count, count)\n if (resetResult === startOffset + count) {\n // We won the race - refill the pool\n crypto.getRandomValues(pool.bytes)\n return 0\n }\n\n // Another thread is refilling or already refilled - retry\n return getPooledBytes(pool, count)\n } else {\n // Single-threaded path\n let currentOffset = pool.offset[0]\n\n if (currentOffset + count > pool.bytes.length) {\n crypto.getRandomValues(pool.bytes)\n currentOffset = 0\n }\n\n pool.offset[0] = currentOffset + count\n return currentOffset\n }\n}\n\n/**\n * Get a Uint8Array slice of random bytes from the pool.\n *\n * Note: Returns a subarray VIEW into the pool. If you need the bytes to persist\n * beyond the current synchronous operation, use getRandomBytesCopy() instead.\n *\n * @param pool - The pool state\n * @param count - Number of bytes needed\n */\nexport function getRandomBytes(pool: RandomPool, count: number): Uint8Array {\n const offset = getPooledBytes(pool, count)\n return pool.bytes.subarray(offset, offset + count)\n}\n\n/**\n * Get a COPY of random bytes from the pool.\n * Use this when bytes need to persist (e.g., returned to caller who may use them later).\n *\n * @param pool - The pool state\n * @param count - Number of bytes needed\n */\nexport function getRandomBytesCopy(pool: RandomPool, count: number): Uint8Array {\n const offset = getPooledBytes(pool, count)\n return pool.bytes.slice(offset, offset + count)\n}\n\n/**\n * Fill the provided buffer with random bytes from the pool.\n *\n * @param pool - The pool state\n * @param out - Buffer to fill\n */\nexport function fillRandomBytes(pool: RandomPool, out: Uint8Array): void {\n const offset = getPooledBytes(pool, out.length)\n out.set(pool.bytes.subarray(offset, offset + out.length))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,MAAM,uBAAuB;AAC7B,MAAM,mBAAmB;;;;;;;AAmBzB,SAAgB,WAAW,SAA6B;CAEtD,MAAM,YAAY,mBADD,UAAU;CAG3B,IAAIA;CACJ,IAAI,aAAa;AAGjB,KAAI,OAAO,sBAAsB,YAC/B,KAAI;AACF,WAAS,IAAI,kBAAkB,UAAU;AACzC,eAAa;SACP;AAEN,WAAS,IAAI,YAAY,UAAU;;KAGrC,UAAS,IAAI,YAAY,UAAU;CAIrC,MAAM,SAAS,IAAI,WAAW,QAAQ,GAAG,EAAE;CAC3C,MAAM,QAAQ,IAAI,WAAW,QAAQ,iBAAiB;AACtD,QAAO,gBAAgB,MAAM;AAE7B,QAAO;EAAE;EAAQ;EAAO;EAAQ;EAAY;;;;;;;;;;;;;;;;;;AAmB9C,SAAgB,eAAe,MAAkB,OAAuB;AACtE,KAAI,KAAK,YAAY;EAEnB,MAAM,cAAc,QAAQ,IAAI,KAAK,QAAQ,GAAG,MAAM;AAEtD,MAAI,cAAc,SAAS,KAAK,MAAM,OACpC,QAAO;AAMT,MADoB,QAAQ,gBAAgB,KAAK,QAAQ,GAAG,cAAc,OAAO,MAAM,KACnE,cAAc,OAAO;AAEvC,UAAO,gBAAgB,KAAK,MAAM;AAClC,UAAO;;AAIT,SAAO,eAAe,MAAM,MAAM;QAC7B;EAEL,IAAI,gBAAgB,KAAK,OAAO;AAEhC,MAAI,gBAAgB,QAAQ,KAAK,MAAM,QAAQ;AAC7C,UAAO,gBAAgB,KAAK,MAAM;AAClC,mBAAgB;;AAGlB,OAAK,OAAO,KAAK,gBAAgB;AACjC,SAAO;;;;;;;;;;;;AAaX,SAAgB,eAAe,MAAkB,OAA2B;CAC1E,MAAM,SAAS,eAAe,MAAM,MAAM;AAC1C,QAAO,KAAK,MAAM,SAAS,QAAQ,SAAS,MAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/index.ts","../src/common/random-pool.ts","../../../node_modules/.pnpm/@noble+hashes@2.0.1/node_modules/@noble/hashes/utils.d.ts","../../../node_modules/.pnpm/@noble+hashes@2.0.1/node_modules/@noble/hashes/sha3.d.ts","../src/cuid2/cuid2.ts","../src/nanoid/nanoid.ts","../src/uuid/common/random.ts","../src/ulid/common/crockford.ts","../src/ulid/ulid.ts","../src/uuid/common/hex.ts","../src/uuid/common/uuid.ts","../src/uuid/v4.ts","../src/uuid/v7.ts","../../../node_modules/.pnpm/@paralleldrive+cuid2@3.3.0/node_modules/@paralleldrive/cuid2/index.d.ts","../../../node_modules/.pnpm/nanoid@5.0.9/node_modules/nanoid/index.d.ts","../../../node_modules/.pnpm/ulid@2.3.0/node_modules/ulid/dist/index.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/types.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/max.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/nil.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/parse.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/stringify.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v1.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v35.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v3.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v4.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v5.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v6.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v7.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/validate.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/version.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/index.d.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.0.18/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/tasks.d-C7UxawJ9.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/traces.d.402V_yFI.d.ts","../../../node_modules/.pnpm/vite@7.3.1_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@7.3.1_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@7.3.1_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@7.3.1_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@7.3.1_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.0.18/node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.0.18/node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.0.18/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/config.d.Cy95HiCx.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/rpc.d.RH3apGEf.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/worker.d.Dyxm8DEL.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/browser.d.ChKACdzH.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.0.18/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.0.3/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.0.18/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/global.d.B15mdLcR.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/suite.d.BJWk38HB.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/index.d.ts","../__tests__/bench/compat.bench.ts","../__tests__/bench/id.bench.ts","../__tests__/integration/compat.test.ts","../__tests__/unit/crockford.test.ts","../__tests__/unit/cuid2.test.ts","../__tests__/unit/nanoid.test.ts","../__tests__/unit/ulid.test.ts","../__tests__/unit/uuid.codec.test.ts","../__tests__/unit/uuid.v4.test.ts","../__tests__/unit/uuid.v7.test.ts","../scripts/bench-summary.ts","../../../node_modules/.pnpm/vitest@4.0.18_@types+node@25.1.0_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/globals.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/globals.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/s3.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/fetch.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/jsx.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/bun.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/extensions.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/devserver.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/ffi.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/html-rewriter.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/jsc.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/sqlite.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/vendor/expect-type/utils.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/vendor/expect-type/overloads.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/vendor/expect-type/branding.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/vendor/expect-type/messages.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/vendor/expect-type/index.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/test.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/wasm.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/overrides.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/deprecated.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/redis.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/shell.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/serve.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/sql.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/security.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/bundle.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/bun.ns.d.ts","../../../node_modules/.pnpm/bun-types@1.3.8/node_modules/bun-types/index.d.ts","../../../node_modules/.pnpm/@types+bun@1.3.8/node_modules/@types/bun/index.d.ts"],"fileIdsList":[[84,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316,319],[143,144,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,194,195,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,196,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,236,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,198,203,205,208,209,212,214,215,216,218,228,233,245,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,198,199,205,208,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,200,205,209,212,214,215,216,228,246,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,201,202,205,209,212,214,215,216,219,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,212,214,215,216,228,233,242,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,203,205,208,209,212,214,215,216,218,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,196,197,204,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,206,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,207,208,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,196,197,205,208,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,210,212,214,215,216,228,233,245,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,208,209,210,212,214,215,216,228,233,236,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,208,209,211,212,214,215,216,218,228,233,245,291,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,211,212,214,215,216,218,228,233,242,245,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,211,212,213,214,215,216,228,233,242,245,292,293,294,296,298,309,310,311,312,313,314,315,316],[174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,217,228,245,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,212,214,215,216,218,228,233,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,219,228,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,220,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,212,214,215,216,223,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,225,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,226,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,212,214,215,216,218,228,236,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,212,214,215,216,228,229,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,230,246,249,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,212,214,215,216,228,233,235,236,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,234,236,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,236,246,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,237,292,293,294,296,298,309,311,312,313,314,315,316],[176,194,197,205,209,212,214,215,216,228,233,239,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,233,238,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,212,214,215,216,228,240,241,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,240,241,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,212,214,215,216,218,228,233,242,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,243,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,218,228,244,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,211,212,214,215,216,226,228,245,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,246,247,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,212,214,215,216,228,247,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,233,248,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,217,228,249,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,250,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,200,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,246,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,291,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,245,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,251,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,223,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,236,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,241,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,208,209,210,212,214,215,216,223,228,233,236,245,248,249,251,291,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,233,252,292,293,294,296,298,309,311,312,313,314,315,316],[116,120,123,125,140,141,142,145,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[120,121,123,124,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[120,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[120,121,123,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[120,121,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,132,133,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,132,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,122,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[117,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,116,117,118,119,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,211,212,214,215,216,228,242,246,251,291,292,293,294,295,298,299,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,291,292,293,296,298,309,311,312,313,314,315,316],[176,197,202,205,209,212,214,215,216,223,228,233,236,242,246,251,291,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,253,292,293,294,296,297,298,299,300,301,302,308,309,310,311,312,313,314,315,316,317,318],[176,197,200,202,205,209,210,212,214,215,216,219,228,236,242,245,252,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,302,309,311,312,313,314,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,307,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,303,304,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,303,304,305,306,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,303,305,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,303,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,292,293,294,296,298,311,312,313,314,315,316],[153,154,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[153,154,155,156,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[153,155,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[153,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,245,257,260,263,264,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,233,245,260,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,245,260,264,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,233,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,254,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,258,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,245,256,257,260,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,218,228,242,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,253,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,253,254,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,218,228,245,256,260,292,293,294,296,298,309,310,311,312,313,314,315,316],[171,172,173,176,197,205,208,209,212,214,215,216,228,233,245,255,259,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,268,276,292,293,294,296,298,309,311,312,313,314,315,316],[172,176,197,205,209,212,214,215,216,228,258,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,285,286,292,293,294,296,298,309,311,312,313,314,315,316],[172,176,197,205,209,212,214,215,216,228,236,245,253,255,260,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,253,254,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,245,256,260,292,293,294,296,298,309,310,311,312,313,314,315,316],[171,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,254,255,256,258,259,260,261,262,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,286,287,288,289,290,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,278,281,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,268,269,270,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,258,260,269,271,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,259,292,293,294,296,298,309,311,312,313,314,315,316],[172,176,197,205,209,212,214,215,216,228,254,260,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,264,269,271,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,264,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,245,258,260,263,292,293,294,296,298,309,310,311,312,313,314,315,316],[172,176,197,205,209,212,214,215,216,228,256,260,268,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,233,292,293,294,296,298,309,310,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,260,278,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,271,292,293,294,296,298,309,311,312,313,314,315,316],[176,197,205,209,212,214,215,216,228,236,251,253,254,260,285,292,293,294,296,298,309,310,311,312,313,314,315,316],[98,99,100,101,102,103,104,106,107,108,109,110,111,112,113,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[98,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[98,105,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[127,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[127,128,129,130,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[129,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[125,147,148,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[125,126,138,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,123,125,134,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[131,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,125,134,137,146,149,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[125,126,131,134,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[125,147,148,149,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[125,131,135,136,137,150,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[115,120,123,125,126,131,134,135,136,137,138,139,140,146,147,148,149,150,151,152,157,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[158,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[86,87,90,93,94,95,96,97,114,158,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[86,87,90,93,94,158,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[87,90,93,94,96,97,114,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[89,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[86,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[87,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[90,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[92,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[93,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[94,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[83,85,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[83,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[88,89,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[91,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316],[88,92,176,197,205,209,212,214,215,216,228,292,293,294,296,298,309,311,312,313,314,315,316]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},"0ceb64dad3a266826c40e9f9d1923b0d3409245129a99815cd0a8548a03b1c57","bf9ee7d362c5d69e3ac2046e7578b4d9065d5f62c6338d4f88bf080952f0db42",{"version":"79766c737b0a94c9d47424412054f0193d78dbfd3b71cfe2ec4f5efce419c081","impliedFormat":99},{"version":"ca8eb419554fb53a9a08c43b2f52b97fa880aa6fa9158dbba3b446b6a0843c77","impliedFormat":99},"4d25fc170a1dca938696a184fd48775778beabf51ca6378844367c84565996d5","d76fb4f0f69233e6f64ef7e1fe342e044cddfc27167ae9be1d57de578424cee6","16ec5a8c96ef17df93775a296f1f6c4e396f474272ff3a3c93a78ccd39060ec4","6f2c953c7d64526870f163587890e737148d7a65fced7a71f3a3eecf87e19bdc","9ef8019b20954e86045ba320ffc8e8624e4b23f3637e9b9066eda908662ef6be","ab71ab536fa7192b3fbc944e59441ea51b577c080280731bf9c8b50e14867068","77f4667a97d72b6d13d133fadea5ada199c1098559c13f7069a5c301fb30baf6","b605c47b21bcce375365d41fdb779c77134f4cf582a41be33e1d3ad9d0c77ecc","eba387af065ebda0760df5b0486c4a371a3d72527a0f7d6ac99a3bba1323b7ef",{"version":"addd3530f4c5e62e0ac3e59088f512a820c02033d112c6a65dfb0e720a207253","impliedFormat":99},{"version":"a45ee7555d019a67fbe092898d1aef0b1d02a9f6679ab84461ff515b4460d706","impliedFormat":99},{"version":"e4e832ae5f0e25c70c8a3b7b8a4dad488c8b969b9595c358d60fc22fca406283","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":99},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":99},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":99},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":99},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":99},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":99},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":99},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":99},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":99},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":99},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":99},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":99},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":99},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":99},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":99},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":99},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":99},{"version":"acfb723d81eda39156251aed414c553294870bf53062429ebfcfba8a68cb4753","impliedFormat":99},{"version":"fa69a90381c2f85889722a911a732a5ee3596dc3acecda8a9aa2fa89b9615d8d","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"57e9e1b0911874c62d743af24b5d56032759846533641d550b12a45ff404bf07","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"854cd3a3375ffc4e7a92b2168dd065d7ff2614b43341038a65cca865a44c00c5","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"2f863ee9b873a65d9c3338ea7aaddbdb41a9673f062f06983d712bd01c25dc6b","impliedFormat":99},{"version":"67aa128c2bc170b93794f191feffc65a4b33e878db211cfcb7658c4b72f7a1f5","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"c35b8117804c639c53c87f2c23e0c786df61d552e513bd5179f5b88e29964838","impliedFormat":99},{"version":"c609331c6ed4ad4af54e101088c6a4dcb48f8db7b0b97e44a6efeb130f4331bd","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"67acaedb46832d66c15f1b09fb7b6a0b7f41bdbf8eaa586ec70459b3e8896eb9","impliedFormat":99},{"version":"4535ab977ee871e956eb7bebe2db5de79f5d5ec7dfbbf1d35e08f4a2d6630dac","impliedFormat":99},{"version":"b79b5ed99f26ffb2f8ae4bdcc4b34a9542197dc3fa96cfb425c2a81e618cff28","impliedFormat":99},{"version":"31fd7c12f6e27154efb52a916b872509a771880f3b20f2dfd045785c13aa813f","impliedFormat":99},{"version":"b481de4ab5379bd481ca12fc0b255cdc47341629a22c240a89cdb4e209522be2","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"4e258d11c899cb9ff36b4b5c53df59cf4a5ccae9a9931529686e77431e0a3518","affectsGlobalScope":true,"impliedFormat":99},{"version":"a5ae67a67f786ffe92d34b55467a40fb50fb0093e92388cadce6168fa42690fd","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"a534e61c2f06a147d97aebad720db97dffd8066b7142212e46bcbcdcb640b81a","impliedFormat":99},{"version":"ddf569d04470a4d629090d43a16735185001f3fcf0ae036ead99f2ceab62be48","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"53c448183c7177c83d3eb0b40824cf8952721a6584cf22052adc24f778986732","impliedFormat":99},"cd7ce9fcfed0de3bd46a9c3bf905107063cbebb487d781a71fa55b9344ec91ab","a2b02401f079d8edc860ab1c097e8d839ede0c97994e81e13d14b0dcea76c21c","291ccdcaacaa9c876b836907c8f0d7f938ebb69f6fbe23348b308912f2b1c196","9bd55a67ae039c041a858ca38a077c3ee0234320781fb106f68cc17a11a219b7","72c162af3c5758a003933d0deb461a85ff523efa5f2c5aa55e13721b27404834","1ab6f1f54fc1f2efaae421e455cb1832b5862984b0ce34a5d1aeeabb47275e3e","91d2112386fafc55d03e294802276d4ef8751d714f6054471c12c03d036891fa","d9559f1a646e2eee7afe2949a92743b64e0d78615d8efb8586f7caa7565aeba5","d848d44c88cb0a6b520153b17cfaa59ecc64b9870f24c3d291eec7fded4fd0b0","f1d96780253328e1f93245569b51833d1b4abae0c1ea6cd5c3b7c884e7b67c70","a0e07a0b49860c6b3c2d1dc25685a0f5b89c2424087bd4f9bb9445758e087c42",{"version":"0a5bc32362b0559b9bcf0a6a83136c4442dbbd0edecd671538a5e03454b6dff0","affectsGlobalScope":true,"impliedFormat":99},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"e6f370b5c1d52edabb93ef055d0c0c396a98be77db8aa022fcc3670787b8b5f5","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"10947bb49601aeec9ea1dddf61ef6e4f8442f949bd40a8008e12b129deb037be","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"1641d32611fc7aa82cdd9fa38ff18349aac4eda9e032ced76b21943673887f9a","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"6e215dac8b234548d91b718f9c07d5b09473cd5cabb29053fcd8be0af190acb6","affectsGlobalScope":true,"impliedFormat":1},{"version":"dbecf494aac7d3ee1b23cdaafae0d0bfea8590567fc153db58fe00ed9fa66c24","impliedFormat":1},{"version":"f3d3e999a323c85c8a63ce90c6e4624ff89fe137a0e2508fddc08e0556d08abf","impliedFormat":1},{"version":"314607151cc203975193d5f44765f38597be3b0a43f466d3c1bfb17176dd3bd3","impliedFormat":1},{"version":"13b67080c26e140e8521f2cb7de76fd55af4ed4aaadffea8fd8be9e260c186fd","impliedFormat":1},{"version":"f40aad6c91017f20fc542f5701ec41e0f6aeba63c61bbf7aa13266ec29a50a3b","impliedFormat":1},{"version":"fc9e630f9302d0414ccd6c8ed2706659cff5ae454a56560c6122fa4a3fac5bbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"aa0a44af370a2d7c1aac988a17836f57910a6c52689f52f5b3ac1d4c6cadcb23","impliedFormat":1},{"version":"0ac74c7586880e26b6a599c710b59284a284e084a2bbc82cd40fb3fbfdea71ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ce12357dadbb8efc4e4ec4dab709c8071bf992722fc9adfea2fe0bd5b50923f","impliedFormat":1},{"version":"b5a907deaba678e5083ccdd7cc063a3a8c3413c688098f6de29d6e4cefabc85f","impliedFormat":1},{"version":"ffd344731abee98a0a85a735b19052817afd2156d97d1410819cd9bcd1bd575e","impliedFormat":1},{"version":"475e07c959f4766f90678425b45cf58ac9b95e50de78367759c1e5118e85d5c3","impliedFormat":1},{"version":"a524ae401b30a1b0814f1bbcdae459da97fa30ae6e22476e506bb3f82e3d9456","impliedFormat":1},{"version":"7375e803c033425e27cb33bae21917c106cb37b508fd242cccd978ef2ee244c7","impliedFormat":1},{"version":"eeb890c7e9218afdad2f30ad8a76b0b0b5161d11ce13b6723879de408e6bc47a","impliedFormat":1},{"version":"561c795984d06b91091780cebeac616e9e41d83240770e1af14e6ec083b713d5","impliedFormat":1},{"version":"dfbcc400ac6d20b941ccc7bd9031b9d9f54e4d495dd79117334e771959df4805","affectsGlobalScope":true,"impliedFormat":1},{"version":"944d65951e33a13068be5cd525ec42bf9bc180263ba0b723fa236970aa21f611","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b386c7b6ce6f369d18246904fa5eac73566167c88fb6508feba74fa7501a384","affectsGlobalScope":true,"impliedFormat":1},{"version":"592a109e67b907ffd2078cd6f727d5c326e06eaada169eef8fb18546d96f6797","impliedFormat":1},{"version":"f2eb1e35cae499d57e34b4ac3650248776fe7dbd9a3ec34b23754cfd8c22fceb","impliedFormat":1},{"version":"fbed43a6fcf5b675f5ec6fc960328114777862b58a2bb19c109e8fc1906caa09","impliedFormat":1},{"version":"9e98bd421e71f70c75dae7029e316745c89fa7b8bc8b43a91adf9b82c206099c","impliedFormat":1},{"version":"fc803e6b01f4365f71f51f9ce13f71396766848204d4f7a1b2b6154434b84b15","impliedFormat":1},{"version":"f3afcc0d6f77a9ca2d2c5c92eb4b89cd38d6fa4bdc1410d626bd701760a977ec","impliedFormat":1},{"version":"c8109fe76467db6e801d0edfbc50e6826934686467c9418ce6b246232ce7f109","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6f803e4e45915d58e721c04ec17830c6e6678d1e3e00e28edf3d52720909cea","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be812b06e518320ba82e2aff3ac2ca37370a9df917db708f081b9043fa3315","impliedFormat":1}],"root":[82,83,[86,94],[159,169]],"options":{"allowJs":false,"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"isolatedDeclarations":true,"module":99,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","removeComments":true,"skipLibCheck":true,"strict":true,"target":99,"verbatimModuleSyntax":true},"referencedMap":[[85,1],[84,2],[95,2],[142,2],[320,3],[145,4],[143,2],[194,5],[195,5],[196,6],[176,7],[197,8],[198,9],[199,10],[174,2],[200,11],[201,12],[202,13],[203,14],[204,15],[205,16],[206,16],[207,17],[208,18],[209,19],[210,20],[177,2],[175,2],[211,21],[212,22],[213,23],[253,24],[214,25],[215,26],[216,25],[217,27],[218,28],[219,29],[220,30],[221,30],[222,30],[223,31],[224,32],[225,33],[226,34],[227,35],[228,36],[229,36],[230,37],[231,2],[232,2],[233,38],[234,39],[235,38],[236,40],[237,41],[238,42],[239,43],[240,44],[241,45],[242,46],[243,47],[244,48],[245,49],[246,50],[247,51],[248,52],[249,53],[250,54],[178,25],[179,2],[180,55],[181,56],[182,2],[183,57],[184,2],[185,58],[186,59],[187,60],[188,60],[189,61],[190,2],[191,62],[192,63],[193,59],[251,64],[252,65],[146,66],[115,2],[125,67],[121,68],[124,69],[147,70],[132,2],[134,71],[133,72],[140,2],[123,73],[116,74],[118,75],[120,76],[119,2],[122,74],[117,2],[144,2],[296,77],[318,2],[317,2],[311,78],[298,79],[297,2],[294,80],[299,2],[292,81],[300,2],[319,82],[301,2],[295,2],[310,83],[312,84],[293,85],[316,86],[314,87],[313,88],[315,89],[302,2],[308,90],[305,91],[307,92],[306,93],[304,94],[303,2],[309,95],[155,96],[157,97],[156,98],[154,99],[153,2],[96,2],[148,2],[141,2],[80,2],[81,2],[13,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[25,2],[4,2],[26,2],[30,2],[27,2],[28,2],[29,2],[31,2],[32,2],[33,2],[5,2],[34,2],[35,2],[36,2],[37,2],[6,2],[41,2],[38,2],[39,2],[40,2],[42,2],[7,2],[43,2],[48,2],[49,2],[44,2],[45,2],[46,2],[47,2],[8,2],[53,2],[50,2],[51,2],[52,2],[54,2],[9,2],[55,2],[56,2],[57,2],[59,2],[58,2],[60,2],[61,2],[10,2],[62,2],[63,2],[64,2],[11,2],[65,2],[66,2],[67,2],[68,2],[69,2],[1,2],[70,2],[71,2],[12,2],[75,2],[73,2],[78,2],[77,2],[72,2],[76,2],[74,2],[79,2],[97,2],[268,100],[280,101],[266,102],[281,103],[290,104],[257,105],[258,106],[256,107],[289,108],[284,109],[288,110],[260,111],[277,112],[259,113],[287,114],[254,115],[255,116],[261,117],[262,2],[267,118],[265,117],[172,119],[291,120],[282,121],[271,122],[270,117],[272,123],[275,124],[269,125],[273,126],[285,108],[263,127],[264,128],[276,129],[173,130],[279,131],[278,117],[274,132],[283,2],[171,2],[286,133],[114,134],[99,2],[100,2],[101,2],[102,2],[98,2],[103,135],[104,2],[106,136],[105,135],[107,135],[108,136],[109,135],[110,2],[111,135],[112,2],[113,2],[128,137],[131,138],[129,137],[127,2],[130,139],[149,140],[139,141],[135,142],[136,68],[152,143],[150,144],[137,145],[151,146],[126,2],[138,147],[158,148],[170,149],[159,150],[160,151],[161,152],[162,153],[163,154],[164,155],[165,156],[166,157],[167,158],[168,159],[169,30],[83,2],[86,160],[82,2],[87,161],[89,2],[90,162],[91,2],[88,2],[92,163],[93,164],[94,164]],"affectedFilesPendingEmit":[[159,48],[160,48],[161,48],[162,48],[163,48],[164,48],[165,48],[166,48],[167,48],[168,48],[169,48],[83,48],[86,48],[82,48],[87,48],[89,48],[90,48],[91,48],[88,48],[92,48],[93,48],[94,48]],"emitSignatures":[82,83,86,87,88,89,90,91,92,93,94,159,160,161,162,163,164,165,166,167,168,169],"version":"5.9.3"}
|
package/build/ulid/ulid.mjs
CHANGED
package/build/uuid/v4.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as rng } from "../random-
|
|
2
|
-
import { n as parseUuid, t as formatUuid } from "../uuid-
|
|
1
|
+
import { t as rng } from "../random-B5WWq7hM.mjs";
|
|
2
|
+
import { n as parseUuid, t as formatUuid } from "../uuid-BEUMa9NG.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/uuid/v4.ts
|
|
5
5
|
const UUID_V4_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
package/build/uuid/v7.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v7.d.mts","names":["uuidv7: UuidV7"],"sources":["../../src/uuid/v7.ts"],"sourcesContent":[],"mappings":";KAGY,eAAA;EAAZ;AAUA;;;EAEkD,MAAA,CAAA,EAPvC,UAOuC;EAAkC,KAAA,CAAA,EAAA,MAAA;EAAwB,GAAA,CAAA,EAAA,MAAA;CAC/F;AACU,KAJX,MAAA,GAIW;EACJ,EAAA,EAAA,MAAA;EAAA,CAAA,aAHH,UAGG,GAHU,UAGV,CAAA,CAAA,OAAA,EAH+B,eAG/B,GAAA,SAAA,EAAA,GAAA,EAHiE,IAGjE,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAHyF,IAGzF;
|
|
1
|
+
{"version":3,"file":"v7.d.mts","names":["uuidv7: UuidV7"],"sources":["../../src/uuid/v7.ts"],"sourcesContent":[],"mappings":";KAGY,eAAA;EAAZ;AAUA;;;EAEkD,MAAA,CAAA,EAPvC,UAOuC;EAAkC,KAAA,CAAA,EAAA,MAAA;EAAwB,GAAA,CAAA,EAAA,MAAA;CAC/F;AACU,KAJX,MAAA,GAIW;EACJ,EAAA,EAAA,MAAA;EAAA,CAAA,aAHH,UAGG,GAHU,UAGV,CAAA,CAAA,OAAA,EAH+B,eAG/B,GAAA,SAAA,EAAA,GAAA,EAHiE,IAGjE,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAHyF,IAGzF;EAyInB,CAAA,OAAqB,CAARA,EA3IA,eA2IQ,EAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA;uBA1IE;mBACJ;;;;;;;;cAyINA,QAAQ"}
|
package/build/uuid/v7.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { t as rng } from "../random-
|
|
2
|
-
import { n as parseUuid, t as formatUuid } from "../uuid-
|
|
1
|
+
import { t as rng } from "../random-B5WWq7hM.mjs";
|
|
2
|
+
import { n as parseUuid, t as formatUuid } from "../uuid-BEUMa9NG.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/uuid/v7.ts
|
|
5
5
|
const UUID_V7_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
6
|
+
const reusableBuf = new Uint8Array(16);
|
|
6
7
|
/**
|
|
7
8
|
* Module-level state for maintaining monotonic ordering within the same millisecond.
|
|
8
9
|
*
|
|
@@ -26,10 +27,7 @@ function updateV7State(current, now, rnds) {
|
|
|
26
27
|
}
|
|
27
28
|
function v7Bytes(rnds, msecs, seq, buf, offset = 0) {
|
|
28
29
|
if (rnds.length < 16) throw new Error("Random bytes length must be >= 16");
|
|
29
|
-
if (
|
|
30
|
-
buf = new Uint8Array(16);
|
|
31
|
-
offset = 0;
|
|
32
|
-
} else if (offset < 0 || offset + 16 > buf.length) throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
|
30
|
+
if (offset < 0 || offset + 16 > buf.length) throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
|
|
33
31
|
msecs ??= Date.now();
|
|
34
32
|
seq ??= rnds[6] * 127 << 24 | rnds[7] << 16 | rnds[8] << 8 | rnds[9];
|
|
35
33
|
buf[offset++] = msecs / 1099511627776 & 255;
|
|
@@ -52,22 +50,14 @@ function v7Bytes(rnds, msecs, seq, buf, offset = 0) {
|
|
|
52
50
|
}
|
|
53
51
|
function v7(options, buf, offset) {
|
|
54
52
|
let bytes;
|
|
55
|
-
if (options) bytes = v7Bytes(options.random ?? rng(), options.msecs, options.seq, buf, offset);
|
|
53
|
+
if (options) bytes = v7Bytes(options.random ?? rng(), options.msecs, options.seq, buf ?? reusableBuf, buf ? offset : 0);
|
|
56
54
|
else {
|
|
57
|
-
/**
|
|
58
|
-
* Note: by default, Cloudflare Workers "freezes" time during request handling to prevent
|
|
59
|
-
* side-channel attacks. This means that Date.now() will return the same value for the entire
|
|
60
|
-
* duration of a request.
|
|
61
|
-
* Implications:
|
|
62
|
-
* - all UUIDv7 generated within a single request will have the same timestamp.
|
|
63
|
-
* - the monotonic ordering will rely entirely on the `state.seq` counter
|
|
64
|
-
*/
|
|
65
55
|
const now = Date.now();
|
|
66
56
|
const rnds = rng();
|
|
67
57
|
updateV7State(state, now, rnds);
|
|
68
|
-
bytes = v7Bytes(rnds, state.msecs, state.seq, buf, offset);
|
|
58
|
+
bytes = v7Bytes(rnds, state.msecs, state.seq, buf ?? reusableBuf, buf ? offset : 0);
|
|
69
59
|
}
|
|
70
|
-
return buf
|
|
60
|
+
return buf ? bytes : formatUuid(bytes);
|
|
71
61
|
}
|
|
72
62
|
function timestamp(id) {
|
|
73
63
|
const bytes = parseUuid(id);
|
package/build/uuid/v7.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v7.mjs","names":["state: V7State","bytes: Uint8Array","uuidv7: UuidV7"],"sources":["../../src/uuid/v7.ts"],"sourcesContent":["import { rng } from './common/random'\nimport { formatUuid, parseUuid } from './common/uuid'\n\nexport type Version7Options = {\n /**\n * 16 bytes of random data to use for UUID generation.\n * Note: Several bytes will be overwritten with timestamp, version, and variant data.\n */\n random?: Uint8Array\n msecs?: number\n seq?: number\n}\n\nexport type UuidV7 = {\n (): string\n <TBuf extends Uint8Array = Uint8Array>(options: Version7Options | undefined, buf: TBuf, offset?: number): TBuf\n (options?: Version7Options, buf?: undefined, offset?: number): string\n toBytes(id: string): Uint8Array\n fromBytes(bytes: Uint8Array): string\n timestamp(id: string): number\n isValid(id: string): boolean\n}\n\nconst UUID_V7_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\ntype V7State = {\n msecs?: number\n seq?: number\n}\n\n/**\n * Module-level state for maintaining monotonic ordering within the same millisecond.\n *\n * IMPORTANT: This state persists across all uuidv7() calls in the module's lifetime.\n * - In serverless/edge functions with warm starts, state persists between invocations.\n * - For isolated state, pass explicit `msecs` and `seq` via options.\n * - Tests should mock Date.now() or provide explicit options for deterministic behavior.\n */\nconst state: V7State = {}\n\nfunction updateV7State(current: V7State, now: number, rnds: Uint8Array): V7State {\n // Initialize state on first call (-Infinity ensures any real timestamp is greater)\n current.msecs ??= -Infinity\n current.seq ??= 0\n\n if (now > current.msecs) {\n // New millisecond tick: reseed sequence from random bytes.\n current.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9]\n current.msecs = now\n } else {\n // Same millisecond: increment sequence, roll over into the next tick if needed.\n current.seq = (current.seq + 1) | 0\n if (current.seq === 0) {\n current.msecs += 1\n }\n }\n\n return current\n}\n\nfunction v7Bytes(rnds: Uint8Array
|
|
1
|
+
{"version":3,"file":"v7.mjs","names":["state: V7State","bytes: Uint8Array","uuidv7: UuidV7"],"sources":["../../src/uuid/v7.ts"],"sourcesContent":["import { rng } from './common/random'\nimport { formatUuid, parseUuid } from './common/uuid'\n\nexport type Version7Options = {\n /**\n * 16 bytes of random data to use for UUID generation.\n * Note: Several bytes will be overwritten with timestamp, version, and variant data.\n */\n random?: Uint8Array\n msecs?: number\n seq?: number\n}\n\nexport type UuidV7 = {\n (): string\n <TBuf extends Uint8Array = Uint8Array>(options: Version7Options | undefined, buf: TBuf, offset?: number): TBuf\n (options?: Version7Options, buf?: undefined, offset?: number): string\n toBytes(id: string): Uint8Array\n fromBytes(bytes: Uint8Array): string\n timestamp(id: string): number\n isValid(id: string): boolean\n}\n\nconst UUID_V7_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\n// Reusable buffer for string output path - avoids allocation per call.\n// Safe because bytes are consumed synchronously by formatUuid().\nconst reusableBuf = new Uint8Array(16)\n\ntype V7State = {\n msecs?: number\n seq?: number\n}\n\n/**\n * Module-level state for maintaining monotonic ordering within the same millisecond.\n *\n * IMPORTANT: This state persists across all uuidv7() calls in the module's lifetime.\n * - In serverless/edge functions with warm starts, state persists between invocations.\n * - For isolated state, pass explicit `msecs` and `seq` via options.\n * - Tests should mock Date.now() or provide explicit options for deterministic behavior.\n */\nconst state: V7State = {}\n\nfunction updateV7State(current: V7State, now: number, rnds: Uint8Array): V7State {\n // Initialize state on first call (-Infinity ensures any real timestamp is greater)\n current.msecs ??= -Infinity\n current.seq ??= 0\n\n if (now > current.msecs) {\n // New millisecond tick: reseed sequence from random bytes.\n current.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9]\n current.msecs = now\n } else {\n // Same millisecond: increment sequence, roll over into the next tick if needed.\n current.seq = (current.seq + 1) | 0\n if (current.seq === 0) {\n current.msecs += 1\n }\n }\n\n return current\n}\n\nfunction v7Bytes(\n rnds: Uint8Array,\n msecs: number | undefined,\n seq: number | undefined,\n buf: Uint8Array,\n offset = 0,\n): Uint8Array {\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16')\n }\n\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`)\n }\n\n msecs ??= Date.now()\n // Derive a 30-bit sequence if not provided by the caller.\n seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9]\n\n // Timestamp (48-bit big-endian milliseconds since Unix epoch).\n buf[offset++] = (msecs / 0x10000000000) & 0xff\n buf[offset++] = (msecs / 0x100000000) & 0xff\n buf[offset++] = (msecs / 0x1000000) & 0xff\n buf[offset++] = (msecs / 0x10000) & 0xff\n buf[offset++] = (msecs / 0x100) & 0xff\n buf[offset++] = msecs & 0xff\n\n // Set version (7) and variant (10xx), then pack sequence and random tail bytes.\n buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f)\n buf[offset++] = (seq >>> 20) & 0xff\n buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f)\n buf[offset++] = (seq >>> 6) & 0xff\n // Lower seq bits plus 2 random bits to complete the 128-bit payload.\n buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03)\n buf[offset++] = rnds[11]\n buf[offset++] = rnds[12]\n buf[offset++] = rnds[13]\n buf[offset++] = rnds[14]\n buf[offset++] = rnds[15]\n\n return buf\n}\n\n/*\n * Overload: no buffer => return a UUID string.\n */\nfunction v7(options?: Version7Options, buf?: undefined, offset?: number): string\n/*\n * Overload: caller provides a buffer slice to fill with UUID bytes.\n */\nfunction v7<TBuf extends Uint8Array = Uint8Array>(\n options: Version7Options | undefined,\n buf: TBuf,\n offset?: number,\n): TBuf\nfunction v7<TBuf extends Uint8Array = Uint8Array>(\n options?: Version7Options,\n buf?: TBuf,\n offset?: number,\n): string | TBuf {\n let bytes: Uint8Array\n\n if (options) {\n bytes = v7Bytes(options.random ?? rng(), options.msecs, options.seq, buf ?? reusableBuf, buf ? offset : 0)\n } else {\n const now = Date.now()\n const rnds = rng()\n updateV7State(state, now, rnds)\n bytes = v7Bytes(rnds, state.msecs, state.seq, buf ?? reusableBuf, buf ? offset : 0)\n }\n\n return buf ? (bytes as TBuf) : formatUuid(bytes)\n}\n\nfunction timestamp(id: string): number {\n const bytes = parseUuid(id)\n let msecs = 0\n for (let i = 0; i < 6; i += 1) {\n msecs = msecs * 256 + bytes[i]\n }\n return msecs\n}\n\nfunction isValid(id: string): boolean {\n return UUID_V7_REGEX.test(id)\n}\n\n/**\n * Generate a UUID v7 string or write the bytes into a buffer.\n * It also includes helpers to convert to and from byte arrays.j\n */\nexport const uuidv7: UuidV7 = Object.assign(v7, {\n toBytes: parseUuid,\n fromBytes: formatUuid,\n timestamp,\n isValid,\n})\n"],"mappings":";;;;AAuBA,MAAM,gBAAgB;AAItB,MAAM,cAAc,IAAI,WAAW,GAAG;;;;;;;;;AAetC,MAAMA,QAAiB,EAAE;AAEzB,SAAS,cAAc,SAAkB,KAAa,MAA2B;AAE/E,SAAQ,UAAU;AAClB,SAAQ,QAAQ;AAEhB,KAAI,MAAM,QAAQ,OAAO;AAEvB,UAAQ,MAAO,KAAK,MAAM,KAAO,KAAK,MAAM,KAAO,KAAK,MAAM,IAAK,KAAK;AACxE,UAAQ,QAAQ;QACX;AAEL,UAAQ,MAAO,QAAQ,MAAM,IAAK;AAClC,MAAI,QAAQ,QAAQ,EAClB,SAAQ,SAAS;;AAIrB,QAAO;;AAGT,SAAS,QACP,MACA,OACA,KACA,KACA,SAAS,GACG;AACZ,KAAI,KAAK,SAAS,GAChB,OAAM,IAAI,MAAM,oCAAoC;AAGtD,KAAI,SAAS,KAAK,SAAS,KAAK,IAAI,OAClC,OAAM,IAAI,WAAW,mBAAmB,OAAO,GAAG,SAAS,GAAG,0BAA0B;AAG1F,WAAU,KAAK,KAAK;AAEpB,SAAU,KAAK,KAAK,OAAS,KAAO,KAAK,MAAM,KAAO,KAAK,MAAM,IAAK,KAAK;AAG3E,KAAI,YAAa,QAAQ,gBAAiB;AAC1C,KAAI,YAAa,QAAQ,aAAe;AACxC,KAAI,YAAa,QAAQ,WAAa;AACtC,KAAI,YAAa,QAAQ,QAAW;AACpC,KAAI,YAAa,QAAQ,MAAS;AAClC,KAAI,YAAY,QAAQ;AAGxB,KAAI,YAAY,MAAS,QAAQ,KAAM;AACvC,KAAI,YAAa,QAAQ,KAAM;AAC/B,KAAI,YAAY,MAAS,QAAQ,KAAM;AACvC,KAAI,YAAa,QAAQ,IAAK;AAE9B,KAAI,YAAc,OAAO,IAAK,MAAS,KAAK,MAAM;AAClD,KAAI,YAAY,KAAK;AACrB,KAAI,YAAY,KAAK;AACrB,KAAI,YAAY,KAAK;AACrB,KAAI,YAAY,KAAK;AACrB,KAAI,YAAY,KAAK;AAErB,QAAO;;AAeT,SAAS,GACP,SACA,KACA,QACe;CACf,IAAIC;AAEJ,KAAI,QACF,SAAQ,QAAQ,QAAQ,UAAU,KAAK,EAAE,QAAQ,OAAO,QAAQ,KAAK,OAAO,aAAa,MAAM,SAAS,EAAE;MACrG;EACL,MAAM,MAAM,KAAK,KAAK;EACtB,MAAM,OAAO,KAAK;AAClB,gBAAc,OAAO,KAAK,KAAK;AAC/B,UAAQ,QAAQ,MAAM,MAAM,OAAO,MAAM,KAAK,OAAO,aAAa,MAAM,SAAS,EAAE;;AAGrF,QAAO,MAAO,QAAiB,WAAW,MAAM;;AAGlD,SAAS,UAAU,IAAoB;CACrC,MAAM,QAAQ,UAAU,GAAG;CAC3B,IAAI,QAAQ;AACZ,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAC1B,SAAQ,QAAQ,MAAM,MAAM;AAE9B,QAAO;;AAGT,SAAS,QAAQ,IAAqB;AACpC,QAAO,cAAc,KAAK,GAAG;;;;;;AAO/B,MAAaC,SAAiB,OAAO,OAAO,IAAI;CAC9C,SAAS;CACT,WAAW;CACX;CACA;CACD,CAAC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
//#region src/uuid/common/hex.ts
|
|
2
2
|
const HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
|
|
3
|
-
function bytesToHex(bytes) {
|
|
4
|
-
let hex = "";
|
|
5
|
-
for (let i = 0; i < bytes.length; i += 1) hex += HEX_TABLE[bytes[i]];
|
|
6
|
-
return hex;
|
|
7
|
-
}
|
|
8
3
|
const ASCII_0 = 48;
|
|
9
4
|
const ASCII_9 = 57;
|
|
10
5
|
const ASCII_A = 65;
|
|
@@ -32,8 +27,7 @@ function hexToBytes(hex, out) {
|
|
|
32
27
|
const UUID_BYTE_LENGTH = 16;
|
|
33
28
|
const UUID_STRING_LENGTH = 36;
|
|
34
29
|
function formatUuid(bytes) {
|
|
35
|
-
|
|
36
|
-
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
30
|
+
return HEX_TABLE[bytes[0]] + HEX_TABLE[bytes[1]] + HEX_TABLE[bytes[2]] + HEX_TABLE[bytes[3]] + "-" + HEX_TABLE[bytes[4]] + HEX_TABLE[bytes[5]] + "-" + HEX_TABLE[bytes[6]] + HEX_TABLE[bytes[7]] + "-" + HEX_TABLE[bytes[8]] + HEX_TABLE[bytes[9]] + "-" + HEX_TABLE[bytes[10]] + HEX_TABLE[bytes[11]] + HEX_TABLE[bytes[12]] + HEX_TABLE[bytes[13]] + HEX_TABLE[bytes[14]] + HEX_TABLE[bytes[15]];
|
|
37
31
|
}
|
|
38
32
|
function parseUuid(value) {
|
|
39
33
|
if (value.length !== UUID_STRING_LENGTH) throw new Error("uuid string must be 36 characters");
|
|
@@ -46,4 +40,4 @@ function parseUuid(value) {
|
|
|
46
40
|
|
|
47
41
|
//#endregion
|
|
48
42
|
export { parseUuid as n, formatUuid as t };
|
|
49
|
-
//# sourceMappingURL=uuid-
|
|
43
|
+
//# sourceMappingURL=uuid-BEUMa9NG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-BEUMa9NG.mjs","names":["HEX_TABLE: string[]"],"sources":["../src/uuid/common/hex.ts","../src/uuid/common/uuid.ts"],"sourcesContent":["// Pre-computed lookup table for byte-to-hex conversion (0x00 -> \"00\", 0xff -> \"ff\")\nexport const HEX_TABLE: string[] = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'))\n\nexport function bytesToHex(bytes: Uint8Array): string {\n // Build string directly, without intermediate array allocation\n let hex = ''\n for (let i = 0; i < bytes.length; i += 1) {\n hex += HEX_TABLE[bytes[i]]\n }\n return hex\n}\n\n// ASCII code ranges for hex character validation\nconst ASCII_0 = 48 // '0'\nconst ASCII_9 = 57 // '9'\nconst ASCII_A = 65 // 'A'\nconst ASCII_F = 70 // 'F'\nconst ASCII_a = 97 // 'a'\nconst ASCII_f = 102 // 'f'\n\nfunction hexValue(code: number): number {\n if (code >= ASCII_0 && code <= ASCII_9) {\n return code - ASCII_0\n }\n if (code >= ASCII_A && code <= ASCII_F) {\n return code - ASCII_A + 10\n }\n if (code >= ASCII_a && code <= ASCII_f) {\n return code - ASCII_a + 10\n }\n return -1 // Invalid hex character\n}\n\nexport function hexToBytes(hex: string, out: Uint8Array): void {\n if (hex.length !== out.length * 2) {\n throw new Error(`hex string must be ${out.length * 2} chars, got ${hex.length}`)\n }\n\n for (let i = 0; i < out.length; i += 1) {\n const hi = hexValue(hex.charCodeAt(i * 2))\n const lo = hexValue(hex.charCodeAt(i * 2 + 1))\n if (hi === -1 || lo === -1) {\n throw new Error('hex string contains invalid characters')\n }\n out[i] = (hi << 4) | lo\n }\n}\n","import { HEX_TABLE, hexToBytes } from './hex'\n\nconst UUID_BYTE_LENGTH = 16\nconst UUID_STRING_LENGTH = 36\n\nexport function formatUuid(bytes: Uint8Array): string {\n // Direct string concatenation - optimized for V8's string builder.\n // This approach avoids loop overhead and intermediate allocations.\n // See: https://github.com/uuidjs/uuid/pull/434\n return (\n HEX_TABLE[bytes[0]] +\n HEX_TABLE[bytes[1]] +\n HEX_TABLE[bytes[2]] +\n HEX_TABLE[bytes[3]] +\n '-' +\n HEX_TABLE[bytes[4]] +\n HEX_TABLE[bytes[5]] +\n '-' +\n HEX_TABLE[bytes[6]] +\n HEX_TABLE[bytes[7]] +\n '-' +\n HEX_TABLE[bytes[8]] +\n HEX_TABLE[bytes[9]] +\n '-' +\n HEX_TABLE[bytes[10]] +\n HEX_TABLE[bytes[11]] +\n HEX_TABLE[bytes[12]] +\n HEX_TABLE[bytes[13]] +\n HEX_TABLE[bytes[14]] +\n HEX_TABLE[bytes[15]]\n )\n}\n\nexport function parseUuid(value: string): Uint8Array {\n if (value.length !== UUID_STRING_LENGTH) {\n throw new Error('uuid string must be 36 characters')\n }\n\n // Validate separator positions directly (more efficient than full loop)\n if (value[8] !== '-' || value[13] !== '-' || value[18] !== '-' || value[23] !== '-') {\n throw new Error('uuid string has invalid separators')\n }\n\n const hex = value.slice(0, 8) + value.slice(9, 13) + value.slice(14, 18) + value.slice(19, 23) + value.slice(24)\n\n const bytes = new Uint8Array(UUID_BYTE_LENGTH)\n hexToBytes(hex, bytes)\n return bytes\n}\n"],"mappings":";AACA,MAAaA,YAAsB,MAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,GAAG,MAAM,EAAE,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AAYzG,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAEhB,SAAS,SAAS,MAAsB;AACtC,KAAI,QAAQ,WAAW,QAAQ,QAC7B,QAAO,OAAO;AAEhB,KAAI,QAAQ,WAAW,QAAQ,QAC7B,QAAO,OAAO,UAAU;AAE1B,KAAI,QAAQ,WAAW,QAAQ,QAC7B,QAAO,OAAO,UAAU;AAE1B,QAAO;;AAGT,SAAgB,WAAW,KAAa,KAAuB;AAC7D,KAAI,IAAI,WAAW,IAAI,SAAS,EAC9B,OAAM,IAAI,MAAM,sBAAsB,IAAI,SAAS,EAAE,cAAc,IAAI,SAAS;AAGlF,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;EACtC,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,EAAE,CAAC;EAC1C,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;AAC9C,MAAI,OAAO,MAAM,OAAO,GACtB,OAAM,IAAI,MAAM,yCAAyC;AAE3D,MAAI,KAAM,MAAM,IAAK;;;;;;AC1CzB,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAE3B,SAAgB,WAAW,OAA2B;AAIpD,QACE,UAAU,MAAM,MAChB,UAAU,MAAM,MAChB,UAAU,MAAM,MAChB,UAAU,MAAM,MAChB,MACA,UAAU,MAAM,MAChB,UAAU,MAAM,MAChB,MACA,UAAU,MAAM,MAChB,UAAU,MAAM,MAChB,MACA,UAAU,MAAM,MAChB,UAAU,MAAM,MAChB,MACA,UAAU,MAAM,OAChB,UAAU,MAAM,OAChB,UAAU,MAAM,OAChB,UAAU,MAAM,OAChB,UAAU,MAAM,OAChB,UAAU,MAAM;;AAIpB,SAAgB,UAAU,OAA2B;AACnD,KAAI,MAAM,WAAW,mBACnB,OAAM,IAAI,MAAM,oCAAoC;AAItD,KAAI,MAAM,OAAO,OAAO,MAAM,QAAQ,OAAO,MAAM,QAAQ,OAAO,MAAM,QAAQ,IAC9E,OAAM,IAAI,MAAM,qCAAqC;CAGvD,MAAM,MAAM,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,MAAM,GAAG;CAEhH,MAAM,QAAQ,IAAI,WAAW,iBAAiB;AAC9C,YAAW,KAAK,MAAM;AACtB,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "uniku",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.5",
|
|
5
5
|
"description": "Minimal, tree-shakeable UUID utilities for every JavaScript runtime",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Alberto Schiabel",
|
|
@@ -98,13 +98,25 @@
|
|
|
98
98
|
"dependencies": {
|
|
99
99
|
"@noble/hashes": "^2.0.1"
|
|
100
100
|
},
|
|
101
|
+
"devDependencies": {
|
|
102
|
+
"@paralleldrive/cuid2": "^3.3.0",
|
|
103
|
+
"@types/bun": "^1.3.8",
|
|
104
|
+
"nanoid": "5.0.9",
|
|
105
|
+
"ulid": "2.3.0",
|
|
106
|
+
"uuid": "11.0.5"
|
|
107
|
+
},
|
|
101
108
|
"scripts": {
|
|
102
109
|
"clean": "rimraf build .turbo",
|
|
103
110
|
"build": "tsdown --config-loader unrun",
|
|
104
111
|
"build:watch": "tsdown --config-loader unrun --watch",
|
|
105
112
|
"test": "vitest run",
|
|
106
113
|
"test:unit": "vitest --project unit run",
|
|
107
|
-
"
|
|
114
|
+
"test:integration": "vitest --project integration run",
|
|
115
|
+
"test:e2e": "pnpm --filter @uniku/e2e-cloudflare test:e2e",
|
|
116
|
+
"test:e2e:cloudflare": "pnpm --filter @uniku/e2e-cloudflare test:e2e:cloudflare",
|
|
117
|
+
"bench": "vitest bench --run",
|
|
118
|
+
"bench:compat": "vitest bench ./__tests__/bench/compat.bench.ts --run",
|
|
119
|
+
"bench:summary": "bun scripts/bench-summary.ts",
|
|
108
120
|
"typecheck": "tsc --noEmit"
|
|
109
121
|
}
|
|
110
122
|
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
//#region src/uuid/common/random.ts
|
|
2
|
-
function randomBytes(out) {
|
|
3
|
-
globalThis.crypto.getRandomValues(out);
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Generate 16 bytes of cryptographically strong random data.
|
|
7
|
-
* Used internally by UUID generators.
|
|
8
|
-
*/
|
|
9
|
-
function rng() {
|
|
10
|
-
const bytes = new Uint8Array(16);
|
|
11
|
-
randomBytes(bytes);
|
|
12
|
-
return bytes;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
//#endregion
|
|
16
|
-
export { rng as t };
|
|
17
|
-
//# sourceMappingURL=random-Dul5R6oJ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"random-Dul5R6oJ.mjs","names":[],"sources":["../src/uuid/common/random.ts"],"sourcesContent":["export function randomBytes(out: Uint8Array): void {\n const crypto = globalThis.crypto\n crypto.getRandomValues(out)\n}\n\n/**\n * Generate 16 bytes of cryptographically strong random data.\n * Used internally by UUID generators.\n */\nexport function rng(): Uint8Array {\n const bytes = new Uint8Array(16)\n randomBytes(bytes)\n return bytes\n}\n"],"mappings":";AAAA,SAAgB,YAAY,KAAuB;AAEjD,CADe,WAAW,OACnB,gBAAgB,IAAI;;;;;;AAO7B,SAAgB,MAAkB;CAChC,MAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,aAAY,MAAM;AAClB,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uuid-cJ5hOOIR.mjs","names":[],"sources":["../src/uuid/common/hex.ts","../src/uuid/common/uuid.ts"],"sourcesContent":["// Pre-computed lookup table for byte-to-hex conversion (0x00 -> \"00\", 0xff -> \"ff\")\nconst HEX_TABLE = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'))\n\nexport function bytesToHex(bytes: Uint8Array): string {\n // Build string directly, without intermediate array allocation\n let hex = ''\n for (let i = 0; i < bytes.length; i += 1) {\n hex += HEX_TABLE[bytes[i]]\n }\n return hex\n}\n\n// ASCII code ranges for hex character validation\nconst ASCII_0 = 48 // '0'\nconst ASCII_9 = 57 // '9'\nconst ASCII_A = 65 // 'A'\nconst ASCII_F = 70 // 'F'\nconst ASCII_a = 97 // 'a'\nconst ASCII_f = 102 // 'f'\n\nfunction hexValue(code: number): number {\n if (code >= ASCII_0 && code <= ASCII_9) {\n return code - ASCII_0\n }\n if (code >= ASCII_A && code <= ASCII_F) {\n return code - ASCII_A + 10\n }\n if (code >= ASCII_a && code <= ASCII_f) {\n return code - ASCII_a + 10\n }\n return -1 // Invalid hex character\n}\n\nexport function hexToBytes(hex: string, out: Uint8Array): void {\n if (hex.length !== out.length * 2) {\n throw new Error(`hex string must be ${out.length * 2} chars, got ${hex.length}`)\n }\n\n for (let i = 0; i < out.length; i += 1) {\n const hi = hexValue(hex.charCodeAt(i * 2))\n const lo = hexValue(hex.charCodeAt(i * 2 + 1))\n if (hi === -1 || lo === -1) {\n throw new Error('hex string contains invalid characters')\n }\n out[i] = (hi << 4) | lo\n }\n}\n","import { bytesToHex, hexToBytes } from './hex'\n\nconst UUID_BYTE_LENGTH = 16\nconst UUID_STRING_LENGTH = 36\n\nexport function formatUuid(bytes: Uint8Array): string {\n // precondition: bytes.length === UUID_BYTE_LENGTH\n const hex = bytesToHex(bytes)\n\n // Build UUID string with dashes at positions 8, 13, 18, 23\n // Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`\n}\n\nexport function parseUuid(value: string): Uint8Array {\n if (value.length !== UUID_STRING_LENGTH) {\n throw new Error('uuid string must be 36 characters')\n }\n\n // Validate separator positions directly (more efficient than full loop)\n if (value[8] !== '-' || value[13] !== '-' || value[18] !== '-' || value[23] !== '-') {\n throw new Error('uuid string has invalid separators')\n }\n\n const hex = value.slice(0, 8) + value.slice(9, 13) + value.slice(14, 18) + value.slice(19, 23) + value.slice(24)\n\n const bytes = new Uint8Array(UUID_BYTE_LENGTH)\n hexToBytes(hex, bytes)\n return bytes\n}\n"],"mappings":";AACA,MAAM,YAAY,MAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,GAAG,MAAM,EAAE,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AAExF,SAAgB,WAAW,OAA2B;CAEpD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,EACrC,QAAO,UAAU,MAAM;AAEzB,QAAO;;AAIT,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAEhB,SAAS,SAAS,MAAsB;AACtC,KAAI,QAAQ,WAAW,QAAQ,QAC7B,QAAO,OAAO;AAEhB,KAAI,QAAQ,WAAW,QAAQ,QAC7B,QAAO,OAAO,UAAU;AAE1B,KAAI,QAAQ,WAAW,QAAQ,QAC7B,QAAO,OAAO,UAAU;AAE1B,QAAO;;AAGT,SAAgB,WAAW,KAAa,KAAuB;AAC7D,KAAI,IAAI,WAAW,IAAI,SAAS,EAC9B,OAAM,IAAI,MAAM,sBAAsB,IAAI,SAAS,EAAE,cAAc,IAAI,SAAS;AAGlF,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;EACtC,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,EAAE,CAAC;EAC1C,MAAM,KAAK,SAAS,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;AAC9C,MAAI,OAAO,MAAM,OAAO,GACtB,OAAM,IAAI,MAAM,yCAAyC;AAE3D,MAAI,KAAM,MAAM,IAAK;;;;;;AC1CzB,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAE3B,SAAgB,WAAW,OAA2B;CAEpD,MAAM,MAAM,WAAW,MAAM;AAI7B,QAAO,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,GAAG;;AAG1G,SAAgB,UAAU,OAA2B;AACnD,KAAI,MAAM,WAAW,mBACnB,OAAM,IAAI,MAAM,oCAAoC;AAItD,KAAI,MAAM,OAAO,OAAO,MAAM,QAAQ,OAAO,MAAM,QAAQ,OAAO,MAAM,QAAQ,IAC9E,OAAM,IAAI,MAAM,qCAAqC;CAGvD,MAAM,MAAM,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,MAAM,GAAG;CAEhH,MAAM,QAAQ,IAAI,WAAW,iBAAiB;AAC9C,YAAW,KAAK,MAAM;AACtB,QAAO"}
|