@cloudcome/utils-core
Version:
cloudcome core utils
1 lines • 3.62 kB
Source Map (JSON)
{"version":3,"file":"unique.cjs","sources":["../src/unique.ts"],"sourcesContent":["import { numberConvert, randomNumber } from './number';\nimport { STRING_DICT } from './string';\nimport { isNumber, isString } from './type';\n\nlet lastTimestamp = 0;\nlet lastSafePadding = 0;\n\n/**\n * 生成一个唯一的 BigInt 值。\n *\n * @param randomLength - 可选参数,指定随机部分的长度,默认为 0。\n * 如果大于 0,则会在结果中附加指定长度的随机数。\n * @returns 返回一个唯一的 BigInt 值,包含时间戳、随机部分(如果有)以及递增的填充值。\n */\nexport function uniqueBigInt(randomLength = 0): bigint {\n const now = Date.now();\n\n if (now !== lastTimestamp) {\n lastTimestamp = now;\n lastSafePadding = 0;\n }\n\n let randomPart = '';\n\n if (randomLength > 0) {\n const randomMin = 10 ** (randomLength - 1);\n const randomMax = 10 ** randomLength - 1;\n randomPart = String(randomNumber(randomMin, randomMax));\n }\n\n return BigInt(randomPart + lastSafePadding++ + now);\n}\n\nconst _randomChar = (dict: string): string => {\n const poolIndex = randomNumber(0, dict.length - 1);\n\n return dict[poolIndex];\n};\n\n/**\n * 生成一个唯一的字符串。\n *\n * @param minLength - 可选参数,指定生成字符串的最小长度。\n * 如果未提供或为字符串类型,则使用默认长度。\n * @param dict - 可选参数,指定生成字符串时使用的字符集。\n * 如果未提供,则使用默认字符集 `STRING_DICT`。\n * @returns 返回一个唯一的字符串,包含时间戳、随机部分(如果有)以及递增的填充值。\n * 如果指定了 `length`,则返回值的长度将被调整到指定长度。\n */\nexport function uniqueString(minLength: number, dict: string): string;\nexport function uniqueString(minLength: number): string;\nexport function uniqueString(dict: string): string;\nexport function uniqueString(): string;\nexport function uniqueString(minLength?: number | string, dict?: string) {\n let finalLength = 0;\n let finalDict = STRING_DICT;\n\n if (isString(dict)) {\n finalLength = minLength as number;\n finalDict = dict;\n } else if (isNumber(minLength)) {\n finalLength = minLength;\n } else if (isString(minLength)) {\n finalDict = minLength;\n }\n\n let uniqueString = numberConvert(uniqueBigInt(), finalDict);\n let insertLength = finalLength - uniqueString.length;\n\n if (insertLength <= 0) return uniqueString;\n\n while (insertLength--) {\n uniqueString += _randomChar(finalDict);\n }\n\n return uniqueString;\n}\n"],"names":["randomNumber","STRING_DICT","isString","isNumber","uniqueString","numberConvert"],"mappings":";;;;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;AASN,SAAA,aAAa,eAAe,GAAW;AAC/C,QAAA,MAAM,KAAK,IAAI;AAErB,MAAI,QAAQ,eAAe;AACT,oBAAA;AACE,sBAAA;AAAA,EAAA;AAGpB,MAAI,aAAa;AAEjB,MAAI,eAAe,GAAG;AACd,UAAA,YAAY,OAAO,eAAe;AAClC,UAAA,YAAY,MAAM,eAAe;AACvC,iBAAa,OAAOA,OAAAA,aAAa,WAAW,SAAS,CAAC;AAAA,EAAA;AAGjD,SAAA,OAAO,aAAa,oBAAoB,GAAG;AACpD;AAEA,MAAM,cAAc,CAAC,SAAyB;AAC5C,QAAM,YAAYA,OAAAA,aAAa,GAAG,KAAK,SAAS,CAAC;AAEjD,SAAO,KAAK,SAAS;AACvB;AAgBgB,SAAA,aAAa,WAA6B,MAAe;AACvE,MAAI,cAAc;AAClB,MAAI,YAAYC,OAAA;AAEZ,MAAAC,KAAAA,SAAS,IAAI,GAAG;AACJ,kBAAA;AACF,gBAAA;AAAA,EAAA,WACHC,KAAAA,SAAS,SAAS,GAAG;AAChB,kBAAA;AAAA,EAAA,WACLD,KAAAA,SAAS,SAAS,GAAG;AAClB,gBAAA;AAAA,EAAA;AAGd,MAAIE,gBAAeC,OAAAA,cAAc,aAAa,GAAG,SAAS;AACtD,MAAA,eAAe,cAAcD,cAAa;AAE1C,MAAA,gBAAgB,EAAUA,QAAAA;AAE9B,SAAO,gBAAgB;AACrBA,qBAAgB,YAAY,SAAS;AAAA,EAAA;AAGhCA,SAAAA;AACT;;;"}