{"version":3,"sources":["../../source/random/random.ts"],"names":["IN_NODE","getRandomIntNumber","options","max","min","random","getSafeRandomNumber","getRandomNumber","getRandomValues"],"mappings":"AAAA,OAAS,WAAAA,MAAe,+CAcxB,eAAsBC,EAAmBC,EAA+B,CAAC,EAAoB,CAC5F,GAAM,CAAE,IAAAC,EAAM,OAAO,iBAAkB,IAAAC,EAAM,OAAO,gBAAiB,EAAIF,EAEnEG,EAAS,MAAMC,EAAoB,EACzC,OAAO,KAAK,MAAMD,GAAUF,EAAMC,EAAM,GAAKA,CAAG,CACjD,CAGA,eAAsBG,EAAgBL,EAA+B,CAAC,EAAoB,CACzF,GAAM,CAAE,IAAAC,EAAM,OAAO,iBAAkB,IAAAC,EAAM,OAAO,gBAAiB,EAAIF,EAEzE,OAAQ,MAAMI,EAAoB,GAAMH,EAAMC,GAAOA,CACtD,CAEA,eAAeE,GAAuC,CACrD,IAAID,EAEJ,GAAIL,EAAS,CACZ,GAAM,CAAE,gBAAAQ,CAAgB,EAAI,KAAM,QAAO,QAAa,EAEtDH,EAASG,EAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,OAEjDH,EAAS,WAAW,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,EAQpE,OAAOA,GAAU,WAAgB,EAClC","sourcesContent":["import { IN_NODE } from \"@terminal-nerds/snippets-runtime/environment\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\nimport type { MaxSafeInteger, MinSafeInteger } from \"../schema/groups/safe/safe.ts\";\n\n/* prettier-ignore */\nexport interface RandomNumberOptions {\n    /** @defaultValue {@link MaxSafeInteger} */\n    max?: number;\n    /** @defaultValue {@link MinSafeInteger} */\n    min?: number;\n}\n\n/** Get a random **integer** number from the specified range. */\nexport async function getRandomIntNumber(options: RandomNumberOptions = {}): Promise<number> {\n\tconst { max = Number.MAX_SAFE_INTEGER, min = Number.MIN_SAFE_INTEGER } = options;\n\n\tconst random = await getSafeRandomNumber();\n\treturn Math.floor(random * (max - min + 1) + min);\n}\n\n/** Get a random number **_(with decimals!)_** from the specified range. */\nexport async function getRandomNumber(options: RandomNumberOptions = {}): Promise<number> {\n\tconst { max = Number.MAX_SAFE_INTEGER, min = Number.MIN_SAFE_INTEGER } = options;\n\n\treturn (await getSafeRandomNumber()) * (max - min) + min;\n}\n\nasync function getSafeRandomNumber(): Promise<number> {\n\tlet random: number;\n\n\tif (IN_NODE) {\n\t\tconst { getRandomValues } = await import(\"node:crypto\");\n\n\t\trandom = getRandomValues(new Uint32Array(1)).at(0) as number;\n\t} else {\n\t\trandom = globalThis.crypto.getRandomValues(new Uint32Array(1)).at(0) as number;\n\t}\n\n\t/**\n\t * NOTE: `0xff_ff_ff_ff`  aka (`0xFFFFFFF`) - Uint32 Max value represent in hexadecimal format\n\t * `+1` - because Math.random is inclusive of 0, but not 1\n\t * Credits: https://stackoverflow.com/a/62792582\n\t */\n\treturn random / (0xff_ff_ff_ff + 1);\n}\n"]}