@cloudcome/utils-core 1.21.0 → 1.23.0
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/dist/array.cjs.map +1 -1
- package/dist/array.mjs.map +1 -1
- package/dist/async.cjs +1 -0
- package/dist/async.cjs.map +1 -1
- package/dist/async.mjs +1 -0
- package/dist/async.mjs.map +1 -1
- package/dist/base64.cjs.map +1 -1
- package/dist/base64.mjs.map +1 -1
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.mjs.map +1 -1
- package/dist/color.cjs.map +1 -1
- package/dist/color.mjs.map +1 -1
- package/dist/crypto.cjs.map +1 -1
- package/dist/crypto.mjs.map +1 -1
- package/dist/date.cjs.map +1 -1
- package/dist/date.mjs.map +1 -1
- package/dist/dict.cjs.map +1 -1
- package/dist/dict.mjs.map +1 -1
- package/dist/easing.cjs.map +1 -1
- package/dist/easing.mjs.map +1 -1
- package/dist/emitter.cjs.map +1 -1
- package/dist/emitter.mjs.map +1 -1
- package/dist/env.cjs.map +1 -1
- package/dist/env.mjs.map +1 -1
- package/dist/error.cjs.map +1 -1
- package/dist/error.mjs.map +1 -1
- package/dist/function.cjs.map +1 -1
- package/dist/function.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/object.cjs.map +1 -1
- package/dist/object.mjs.map +1 -1
- package/dist/path.cjs.map +1 -1
- package/dist/path.mjs.map +1 -1
- package/dist/promise.cjs.map +1 -1
- package/dist/promise.mjs.map +1 -1
- package/dist/qs.cjs.map +1 -1
- package/dist/qs.mjs.map +1 -1
- package/dist/regexp.cjs.map +1 -1
- package/dist/regexp.mjs.map +1 -1
- package/dist/string2.cjs.map +1 -1
- package/dist/string2.mjs.map +1 -1
- package/dist/time.cjs.map +1 -1
- package/dist/time.mjs.map +1 -1
- package/dist/timer.cjs.map +1 -1
- package/dist/timer.d.ts +1 -2
- package/dist/timer.mjs.map +1 -1
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.mjs.map +1 -1
- package/dist/try.cjs.map +1 -1
- package/dist/try.mjs.map +1 -1
- package/dist/type.cjs.map +1 -1
- package/dist/type.mjs.map +1 -1
- package/dist/unique.cjs.map +1 -1
- package/dist/unique.mjs.map +1 -1
- package/dist/url.cjs.map +1 -1
- package/dist/url.mjs.map +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs.map +1 -1
- package/package.json +1 -9
- package/dist/exception.cjs +0 -40
- package/dist/exception.cjs.map +0 -1
- package/dist/exception.d.ts +0 -31
- package/dist/exception.mjs +0 -39
- package/dist/exception.mjs.map +0 -1
package/dist/type.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.mjs","names":[],"sources":["../src/type.ts"],"sourcesContent":["import type { AnyArray, AnyAsyncFunction, AnyFunction, AnyObject } from './types';\n\n/**\n * 获取未知类型的类型名称\n * @param unknown - 未知类型的值\n * @returns 类型名称字符串\n */\nexport function typeIs(\n unknown: unknown,\n):\n | 'string'\n | 'number'\n | 'boolean'\n | 'object'\n | 'array'\n | 'function'\n | 'null'\n | 'undefined'\n | 'symbol'\n | 'bigint'\n | 'error'\n | 'promise'\n | string {\n return Object.prototype.toString.call(unknown).slice(8, -1).toLowerCase();\n}\n\n/**\n * 检查值是否为字符串\n * @param unknown - 未知类型的值\n * @returns 如果值为字符串则返回 true,否则返回 false\n */\nexport function isString(unknown: unknown): unknown is string {\n return typeof unknown === 'string';\n}\n\n/**\n * 检查值是否为布尔值\n * @param unknown - 未知类型的值\n * @returns 如果值为布尔值则返回 true,否则返回 false\n */\nexport function isBoolean(unknown: unknown): unknown is boolean {\n return typeof unknown === 'boolean';\n}\n\n/**\n * 检查值是否为符号\n * @param unknown - 未知类型的值\n * @returns 如果值为符号则返回 true,否则返回 false\n */\nexport function isSymbol(unknown: unknown): unknown is symbol {\n return typeof unknown === 'symbol';\n}\n\n/**\n * 检查值是否为大整数\n * @param unknown - 未知类型的值\n * @returns 如果值为大整数则返回 true,否则返回 false\n */\nexport function isBigInt(unknown: unknown): unknown is bigint {\n return typeof unknown === 'bigint';\n}\n\n/**\n * 检查值是否为数字\n * @param unknown - 未知类型的值\n * @returns 如果值为数字且不是 NaN 则返回 true,否则返回 false\n */\nexport function isNumber(unknown: unknown): unknown is number {\n return typeof unknown === 'number' && !Number.isNaN(unknown);\n}\n\n/**\n * 检查值是否为 undefined\n * @param unknown - 未知类型的值\n * @returns 如果值为 undefined 则返回 true,否则返回 false\n */\nexport function isUndefined(unknown: unknown): unknown is undefined {\n return typeof unknown === 'undefined';\n}\n\n/**\n * 检查值是否为 void\n * @param unknown - 未知类型的值\n * @returns 如果值为 undefined 则返回 true,否则返回 false\n */\n// biome-ignore lint/suspicious/noConfusingVoidType: 必须使用 void 类型断言\nexport function isVoid(unknown: unknown): unknown is void {\n return isUndefined(unknown);\n}\n\n/**\n * 永不执行,用于 switch-case/if-else 类型断言\n * @param unknown - 永远不会执行的值\n */\nexport function isNever(_unknown: never) {\n //\n}\n\n/**\n * 检查值是否为 null\n * @param unknown - 未知类型的值\n * @returns 如果值为 null 则返回 true,否则返回 false\n */\nexport function isNull(unknown: unknown): unknown is null {\n return unknown === null;\n}\n\n/**\n * 检查值是否为 nullish(null 或 undefined 或 void)\n * @param unknown - 未知类型的值\n * @returns 如果值为 null 或 undefined 或 void 则返回 true,否则返回 false\n */\nexport function isNullish(unknown: unknown): unknown is null | undefined | undefined {\n return isNull(unknown) || isUndefined(unknown) || isVoid(unknown);\n}\n\n/**\n * 检查值是否为原始类型(null 或 非对象)\n * @param unknown - 未知类型的值\n * @returns 如果值为原始类型则返回 true,否则返回 false\n */\nexport function isPrimitive(\n unknown: unknown,\n): unknown is string | number | boolean | symbol | bigint | null | undefined {\n return isNull(unknown) || !(typeof unknown === 'object' || typeof unknown === 'function');\n}\n\n/**\n * 检查值是否为对象,但要注意,此时的对象类型是包含了数组和函数\n * @param unknown - 未知类型的值\n * @returns 如果值为对象则返回 true,否则返回 false\n */\nexport function isObject(unknown: unknown): unknown is AnyObject {\n return typeIs(unknown) === 'object';\n}\n\n/**\n * 检查值是否为数组\n * @param unknown - 未知类型的值\n * @returns 如果值为数组则返回 true,否则返回 false\n */\nexport function isArray(unknown: unknown): unknown is AnyArray {\n return Array.isArray(unknown);\n}\n\n/**\n * 检查值是否为函数\n * @param unknown - 未知类型的值\n * @returns 如果值为函数则返回 true,否则返回 false\n */\nexport function isFunction(unknown: unknown): unknown is AnyFunction {\n return typeof unknown === 'function';\n}\n\n/**\n * 检查值是否为异步函数\n * @param unknown - 需要检查的值\n * @returns 如果值为异步函数则返回 true,否则返回 false\n * @example\n * ```typescript\n * async function example() {}\n *\n * isAsyncFunction(example); // true\n * isAsyncFunction(() => {}); // false\n * ```\n */\nexport function isAsyncFunction(unknown: unknown): unknown is AnyAsyncFunction {\n return isFunction(unknown) && unknown.constructor.name === 'AsyncFunction';\n}\n\n/**\n * 检查值是否为 Error 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Error 类型则返回 true,否则返回 false\n */\nexport function isError(unknown: unknown): unknown is Error {\n return unknown instanceof Error;\n}\n\n/**\n * 检查值是否为 Promise 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Promise 类型则返回 true,否则返回 false\n */\nexport function isPromise<T>(unknown: unknown): unknown is Promise<T> {\n return typeIs(unknown) === 'promise';\n}\n\n/**\n * 检查值是否为 Date 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Date 类型则返回 true,否则返回 false\n */\nexport function isDate(unknown: unknown): unknown is Date {\n return unknown instanceof Date;\n}\n"],"mappings":";;;;;;AAOA,SAAgB,OACd,SAcS;CACT,OAAO,OAAO,UAAU,SAAS,KAAK,
|
|
1
|
+
{"version":3,"file":"type.mjs","names":[],"sources":["../src/type.ts"],"sourcesContent":["import type { AnyArray, AnyAsyncFunction, AnyFunction, AnyObject } from './types';\n\n/**\n * 获取未知类型的类型名称\n * @param unknown - 未知类型的值\n * @returns 类型名称字符串\n */\nexport function typeIs(\n unknown: unknown,\n):\n | 'string'\n | 'number'\n | 'boolean'\n | 'object'\n | 'array'\n | 'function'\n | 'null'\n | 'undefined'\n | 'symbol'\n | 'bigint'\n | 'error'\n | 'promise'\n | string {\n return Object.prototype.toString.call(unknown).slice(8, -1).toLowerCase();\n}\n\n/**\n * 检查值是否为字符串\n * @param unknown - 未知类型的值\n * @returns 如果值为字符串则返回 true,否则返回 false\n */\nexport function isString(unknown: unknown): unknown is string {\n return typeof unknown === 'string';\n}\n\n/**\n * 检查值是否为布尔值\n * @param unknown - 未知类型的值\n * @returns 如果值为布尔值则返回 true,否则返回 false\n */\nexport function isBoolean(unknown: unknown): unknown is boolean {\n return typeof unknown === 'boolean';\n}\n\n/**\n * 检查值是否为符号\n * @param unknown - 未知类型的值\n * @returns 如果值为符号则返回 true,否则返回 false\n */\nexport function isSymbol(unknown: unknown): unknown is symbol {\n return typeof unknown === 'symbol';\n}\n\n/**\n * 检查值是否为大整数\n * @param unknown - 未知类型的值\n * @returns 如果值为大整数则返回 true,否则返回 false\n */\nexport function isBigInt(unknown: unknown): unknown is bigint {\n return typeof unknown === 'bigint';\n}\n\n/**\n * 检查值是否为数字\n * @param unknown - 未知类型的值\n * @returns 如果值为数字且不是 NaN 则返回 true,否则返回 false\n */\nexport function isNumber(unknown: unknown): unknown is number {\n return typeof unknown === 'number' && !Number.isNaN(unknown);\n}\n\n/**\n * 检查值是否为 undefined\n * @param unknown - 未知类型的值\n * @returns 如果值为 undefined 则返回 true,否则返回 false\n */\nexport function isUndefined(unknown: unknown): unknown is undefined {\n return typeof unknown === 'undefined';\n}\n\n/**\n * 检查值是否为 void\n * @param unknown - 未知类型的值\n * @returns 如果值为 undefined 则返回 true,否则返回 false\n */\n// biome-ignore lint/suspicious/noConfusingVoidType: 必须使用 void 类型断言\nexport function isVoid(unknown: unknown): unknown is void {\n return isUndefined(unknown);\n}\n\n/**\n * 永不执行,用于 switch-case/if-else 类型断言\n * @param unknown - 永远不会执行的值\n */\nexport function isNever(_unknown: never) {\n //\n}\n\n/**\n * 检查值是否为 null\n * @param unknown - 未知类型的值\n * @returns 如果值为 null 则返回 true,否则返回 false\n */\nexport function isNull(unknown: unknown): unknown is null {\n return unknown === null;\n}\n\n/**\n * 检查值是否为 nullish(null 或 undefined 或 void)\n * @param unknown - 未知类型的值\n * @returns 如果值为 null 或 undefined 或 void 则返回 true,否则返回 false\n */\nexport function isNullish(unknown: unknown): unknown is null | undefined | undefined {\n return isNull(unknown) || isUndefined(unknown) || isVoid(unknown);\n}\n\n/**\n * 检查值是否为原始类型(null 或 非对象)\n * @param unknown - 未知类型的值\n * @returns 如果值为原始类型则返回 true,否则返回 false\n */\nexport function isPrimitive(\n unknown: unknown,\n): unknown is string | number | boolean | symbol | bigint | null | undefined {\n return isNull(unknown) || !(typeof unknown === 'object' || typeof unknown === 'function');\n}\n\n/**\n * 检查值是否为对象,但要注意,此时的对象类型是包含了数组和函数\n * @param unknown - 未知类型的值\n * @returns 如果值为对象则返回 true,否则返回 false\n */\nexport function isObject(unknown: unknown): unknown is AnyObject {\n return typeIs(unknown) === 'object';\n}\n\n/**\n * 检查值是否为数组\n * @param unknown - 未知类型的值\n * @returns 如果值为数组则返回 true,否则返回 false\n */\nexport function isArray(unknown: unknown): unknown is AnyArray {\n return Array.isArray(unknown);\n}\n\n/**\n * 检查值是否为函数\n * @param unknown - 未知类型的值\n * @returns 如果值为函数则返回 true,否则返回 false\n */\nexport function isFunction(unknown: unknown): unknown is AnyFunction {\n return typeof unknown === 'function';\n}\n\n/**\n * 检查值是否为异步函数\n * @param unknown - 需要检查的值\n * @returns 如果值为异步函数则返回 true,否则返回 false\n * @example\n * ```typescript\n * async function example() {}\n *\n * isAsyncFunction(example); // true\n * isAsyncFunction(() => {}); // false\n * ```\n */\nexport function isAsyncFunction(unknown: unknown): unknown is AnyAsyncFunction {\n return isFunction(unknown) && unknown.constructor.name === 'AsyncFunction';\n}\n\n/**\n * 检查值是否为 Error 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Error 类型则返回 true,否则返回 false\n */\nexport function isError(unknown: unknown): unknown is Error {\n return unknown instanceof Error;\n}\n\n/**\n * 检查值是否为 Promise 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Promise 类型则返回 true,否则返回 false\n */\nexport function isPromise<T>(unknown: unknown): unknown is Promise<T> {\n return typeIs(unknown) === 'promise';\n}\n\n/**\n * 检查值是否为 Date 类型\n * @param unknown - 未知类型的值\n * @returns 如果值为 Date 类型则返回 true,否则返回 false\n */\nexport function isDate(unknown: unknown): unknown is Date {\n return unknown instanceof Date;\n}\n"],"mappings":";;;;;;AAOA,SAAgB,OACd,SAcS;CACT,OAAO,OAAO,UAAU,SAAS,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,YAAY;AAC1E;;;;;;AAOA,SAAgB,SAAS,SAAqC;CAC5D,OAAO,OAAO,YAAY;AAC5B;;;;;;AAOA,SAAgB,UAAU,SAAsC;CAC9D,OAAO,OAAO,YAAY;AAC5B;;;;;;AAOA,SAAgB,SAAS,SAAqC;CAC5D,OAAO,OAAO,YAAY;AAC5B;;;;;;AAOA,SAAgB,SAAS,SAAqC;CAC5D,OAAO,OAAO,YAAY;AAC5B;;;;;;AAOA,SAAgB,SAAS,SAAqC;CAC5D,OAAO,OAAO,YAAY,YAAY,CAAC,OAAO,MAAM,OAAO;AAC7D;;;;;;AAOA,SAAgB,YAAY,SAAwC;CAClE,OAAO,OAAO,YAAY;AAC5B;;;;;;AAQA,SAAgB,OAAO,SAAmC;CACxD,OAAO,YAAY,OAAO;AAC5B;;;;;AAMA,SAAgB,QAAQ,UAAiB,CAEzC;;;;;;AAOA,SAAgB,OAAO,SAAmC;CACxD,OAAO,YAAY;AACrB;;;;;;AAOA,SAAgB,UAAU,SAA2D;CACnF,OAAO,OAAO,OAAO,KAAK,YAAY,OAAO,KAAK,OAAO,OAAO;AAClE;;;;;;AAOA,SAAgB,YACd,SAC2E;CAC3E,OAAO,OAAO,OAAO,KAAK,EAAE,OAAO,YAAY,YAAY,OAAO,YAAY;AAChF;;;;;;AAOA,SAAgB,SAAS,SAAwC;CAC/D,OAAO,OAAO,OAAO,MAAM;AAC7B;;;;;;AAOA,SAAgB,QAAQ,SAAuC;CAC7D,OAAO,MAAM,QAAQ,OAAO;AAC9B;;;;;;AAOA,SAAgB,WAAW,SAA0C;CACnE,OAAO,OAAO,YAAY;AAC5B;;;;;;;;;;;;;AAcA,SAAgB,gBAAgB,SAA+C;CAC7E,OAAO,WAAW,OAAO,KAAK,QAAQ,YAAY,SAAS;AAC7D;;;;;;AAOA,SAAgB,QAAQ,SAAoC;CAC1D,OAAO,mBAAmB;AAC5B;;;;;;AAOA,SAAgB,UAAa,SAAyC;CACpE,OAAO,OAAO,OAAO,MAAM;AAC7B;;;;;;AAOA,SAAgB,OAAO,SAAmC;CACxD,OAAO,mBAAmB;AAC5B"}
|
package/dist/unique.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unique.cjs","names":[],"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"],"mappings":";;;;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;;;;;;;;AAStB,SAAgB,aAAa,eAAe,GAAW;CACrD,MAAM,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"unique.cjs","names":[],"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"],"mappings":";;;;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;;;;;;;;AAStB,SAAgB,aAAa,eAAe,GAAW;CACrD,MAAM,MAAM,KAAK,IAAI;CAErB,IAAI,QAAQ,eAAe;EACzB,gBAAgB;EAChB,kBAAkB;CACpB;CAEA,IAAI,aAAa;CAEjB,IAAI,eAAe,GAAG;EACpB,MAAM,YAAY,OAAO,eAAe;EACxC,MAAM,YAAY,MAAM,eAAe;EACvC,aAAa,OAAO,eAAA,aAAa,WAAW,SAAS,CAAC;CACxD;CAEA,OAAO,OAAO,aAAa,oBAAoB,GAAG;AACpD;AAEA,IAAM,eAAe,SAAyB;CAG5C,OAAO,KAFW,eAAA,aAAa,GAAG,KAAK,SAAS,CAEpC;AACd;AAgBA,SAAgB,aAAa,WAA6B,MAAe;CACvE,IAAI,cAAc;CAClB,IAAI,YAAY,eAAA;CAEhB,IAAI,aAAA,SAAS,IAAI,GAAG;EAClB,cAAc;EACd,YAAY;CACd,OAAO,IAAI,aAAA,SAAS,SAAS,GAC3B,cAAc;MACT,IAAI,aAAA,SAAS,SAAS,GAC3B,YAAY;CAGd,IAAI,eAAe,eAAA,cAAc,aAAa,GAAG,SAAS;CAC1D,IAAI,eAAe,cAAc,aAAa;CAE9C,IAAI,gBAAgB,GAAG,OAAO;CAE9B,OAAO,gBACL,gBAAgB,YAAY,SAAS;CAGvC,OAAO;AACT"}
|
package/dist/unique.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unique.mjs","names":[],"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"],"mappings":";;;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;;;;;;;;AAStB,SAAgB,aAAa,eAAe,GAAW;CACrD,MAAM,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"unique.mjs","names":[],"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"],"mappings":";;;AAIA,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;;;;;;;;AAStB,SAAgB,aAAa,eAAe,GAAW;CACrD,MAAM,MAAM,KAAK,IAAI;CAErB,IAAI,QAAQ,eAAe;EACzB,gBAAgB;EAChB,kBAAkB;CACpB;CAEA,IAAI,aAAa;CAEjB,IAAI,eAAe,GAAG;EACpB,MAAM,YAAY,OAAO,eAAe;EACxC,MAAM,YAAY,MAAM,eAAe;EACvC,aAAa,OAAO,aAAa,WAAW,SAAS,CAAC;CACxD;CAEA,OAAO,OAAO,aAAa,oBAAoB,GAAG;AACpD;AAEA,IAAM,eAAe,SAAyB;CAG5C,OAAO,KAFW,aAAa,GAAG,KAAK,SAAS,CAEpC;AACd;AAgBA,SAAgB,aAAa,WAA6B,MAAe;CACvE,IAAI,cAAc;CAClB,IAAI,YAAY;CAEhB,IAAI,SAAS,IAAI,GAAG;EAClB,cAAc;EACd,YAAY;CACd,OAAO,IAAI,SAAS,SAAS,GAC3B,cAAc;MACT,IAAI,SAAS,SAAS,GAC3B,YAAY;CAGd,IAAI,eAAe,cAAc,aAAa,GAAG,SAAS;CAC1D,IAAI,eAAe,cAAc,aAAa;CAE9C,IAAI,gBAAgB,GAAG,OAAO;CAE9B,OAAO,gBACL,gBAAgB,YAAY,SAAS;CAGvC,OAAO;AACT"}
|
package/dist/url.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.cjs","names":[],"sources":["../src/url.ts"],"sourcesContent":["/**\n * URL 元信息\n */\nexport type UrlMeta = {\n /**\n * 协议部分,包含冒号,例如 \"https:\"。\n */\n protocol: string;\n /**\n * 主机部分,包括主机名和端口。\n */\n host: string;\n /**\n * 主机名部分。\n */\n hostname: string;\n /**\n * 端口部分。\n */\n port: string;\n /**\n * 路径部分。\n */\n pathname: string;\n /**\n * 查询字符串部分。\n */\n search: string;\n /**\n * 哈希部分。\n */\n hash: string;\n /**\n * 用户名部分。\n */\n username: string;\n /**\n * 密码部分。\n */\n password: string;\n};\n\n/**\n * 解析 URL 字符串为组件对象。\n * @param url - 需要解析的 URL 字符串。\n * @returns 包含解析后 URL 组件的对象。\n */\nexport function urlParse(url: string): UrlMeta {\n let result: URL | null = null;\n\n try {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n result = new globalThis.URL(url);\n } catch {\n // ignore\n }\n\n const protocol = result?.protocol || '';\n const host = result?.host || '';\n\n return {\n protocol,\n host,\n hostname: result?.hostname || '',\n port: result?.port || '',\n pathname: result?.pathname || '',\n search: result?.search || '',\n hash: result?.hash || '',\n username: result?.username || '',\n password: result?.password || '',\n };\n}\n\n/**\n * 将 UrlMeta 对象转换回 URL 字符串。\n * @param url - 需要转换的 UrlMeta 对象。\n * @returns 转换后的 URL 字符串。\n */\nexport function urlStringify(url: UrlMeta) {\n const { protocol, hostname, port, pathname, search, hash, username, password } = url;\n return [\n protocol ? `${protocol}//` : '',\n username && password ? `${username}:${password}@` : '',\n hostname,\n port ? `:${port}` : '',\n pathname,\n search,\n hash,\n ]\n .filter(Boolean)\n .join('');\n}\n"],"mappings":";;;;;;;AA+CA,SAAgB,SAAS,KAAsB;CAC7C,IAAI,SAAqB;CAEzB,IAAI;EAGF,SAAS,IAAI,WAAW,IAAI,
|
|
1
|
+
{"version":3,"file":"url.cjs","names":[],"sources":["../src/url.ts"],"sourcesContent":["/**\n * URL 元信息\n */\nexport type UrlMeta = {\n /**\n * 协议部分,包含冒号,例如 \"https:\"。\n */\n protocol: string;\n /**\n * 主机部分,包括主机名和端口。\n */\n host: string;\n /**\n * 主机名部分。\n */\n hostname: string;\n /**\n * 端口部分。\n */\n port: string;\n /**\n * 路径部分。\n */\n pathname: string;\n /**\n * 查询字符串部分。\n */\n search: string;\n /**\n * 哈希部分。\n */\n hash: string;\n /**\n * 用户名部分。\n */\n username: string;\n /**\n * 密码部分。\n */\n password: string;\n};\n\n/**\n * 解析 URL 字符串为组件对象。\n * @param url - 需要解析的 URL 字符串。\n * @returns 包含解析后 URL 组件的对象。\n */\nexport function urlParse(url: string): UrlMeta {\n let result: URL | null = null;\n\n try {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n result = new globalThis.URL(url);\n } catch {\n // ignore\n }\n\n const protocol = result?.protocol || '';\n const host = result?.host || '';\n\n return {\n protocol,\n host,\n hostname: result?.hostname || '',\n port: result?.port || '',\n pathname: result?.pathname || '',\n search: result?.search || '',\n hash: result?.hash || '',\n username: result?.username || '',\n password: result?.password || '',\n };\n}\n\n/**\n * 将 UrlMeta 对象转换回 URL 字符串。\n * @param url - 需要转换的 UrlMeta 对象。\n * @returns 转换后的 URL 字符串。\n */\nexport function urlStringify(url: UrlMeta) {\n const { protocol, hostname, port, pathname, search, hash, username, password } = url;\n return [\n protocol ? `${protocol}//` : '',\n username && password ? `${username}:${password}@` : '',\n hostname,\n port ? `:${port}` : '',\n pathname,\n search,\n hash,\n ]\n .filter(Boolean)\n .join('');\n}\n"],"mappings":";;;;;;;AA+CA,SAAgB,SAAS,KAAsB;CAC7C,IAAI,SAAqB;CAEzB,IAAI;EAGF,SAAS,IAAI,WAAW,IAAI,GAAG;CACjC,QAAQ,CAER;CAKA,OAAO;EACL,UAJe,QAAQ,YAAY;EAKnC,MAJW,QAAQ,QAAQ;EAK3B,UAAU,QAAQ,YAAY;EAC9B,MAAM,QAAQ,QAAQ;EACtB,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ,UAAU;EAC1B,MAAM,QAAQ,QAAQ;EACtB,UAAU,QAAQ,YAAY;EAC9B,UAAU,QAAQ,YAAY;CAChC;AACF;;;;;;AAOA,SAAgB,aAAa,KAAc;CACzC,MAAM,EAAE,UAAU,UAAU,MAAM,UAAU,QAAQ,MAAM,UAAU,aAAa;CACjF,OAAO;EACL,WAAW,GAAG,SAAS,MAAM;EAC7B,YAAY,WAAW,GAAG,SAAS,GAAG,SAAS,KAAK;EACpD;EACA,OAAO,IAAI,SAAS;EACpB;EACA;EACA;CACF,EACG,OAAO,OAAO,EACd,KAAK,EAAE;AACZ"}
|
package/dist/url.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.mjs","names":[],"sources":["../src/url.ts"],"sourcesContent":["/**\n * URL 元信息\n */\nexport type UrlMeta = {\n /**\n * 协议部分,包含冒号,例如 \"https:\"。\n */\n protocol: string;\n /**\n * 主机部分,包括主机名和端口。\n */\n host: string;\n /**\n * 主机名部分。\n */\n hostname: string;\n /**\n * 端口部分。\n */\n port: string;\n /**\n * 路径部分。\n */\n pathname: string;\n /**\n * 查询字符串部分。\n */\n search: string;\n /**\n * 哈希部分。\n */\n hash: string;\n /**\n * 用户名部分。\n */\n username: string;\n /**\n * 密码部分。\n */\n password: string;\n};\n\n/**\n * 解析 URL 字符串为组件对象。\n * @param url - 需要解析的 URL 字符串。\n * @returns 包含解析后 URL 组件的对象。\n */\nexport function urlParse(url: string): UrlMeta {\n let result: URL | null = null;\n\n try {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n result = new globalThis.URL(url);\n } catch {\n // ignore\n }\n\n const protocol = result?.protocol || '';\n const host = result?.host || '';\n\n return {\n protocol,\n host,\n hostname: result?.hostname || '',\n port: result?.port || '',\n pathname: result?.pathname || '',\n search: result?.search || '',\n hash: result?.hash || '',\n username: result?.username || '',\n password: result?.password || '',\n };\n}\n\n/**\n * 将 UrlMeta 对象转换回 URL 字符串。\n * @param url - 需要转换的 UrlMeta 对象。\n * @returns 转换后的 URL 字符串。\n */\nexport function urlStringify(url: UrlMeta) {\n const { protocol, hostname, port, pathname, search, hash, username, password } = url;\n return [\n protocol ? `${protocol}//` : '',\n username && password ? `${username}:${password}@` : '',\n hostname,\n port ? `:${port}` : '',\n pathname,\n search,\n hash,\n ]\n .filter(Boolean)\n .join('');\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,SAAS,KAAsB;CAC7C,IAAI,SAAqB;CAEzB,IAAI;EAGF,SAAS,IAAI,WAAW,IAAI,
|
|
1
|
+
{"version":3,"file":"url.mjs","names":[],"sources":["../src/url.ts"],"sourcesContent":["/**\n * URL 元信息\n */\nexport type UrlMeta = {\n /**\n * 协议部分,包含冒号,例如 \"https:\"。\n */\n protocol: string;\n /**\n * 主机部分,包括主机名和端口。\n */\n host: string;\n /**\n * 主机名部分。\n */\n hostname: string;\n /**\n * 端口部分。\n */\n port: string;\n /**\n * 路径部分。\n */\n pathname: string;\n /**\n * 查询字符串部分。\n */\n search: string;\n /**\n * 哈希部分。\n */\n hash: string;\n /**\n * 用户名部分。\n */\n username: string;\n /**\n * 密码部分。\n */\n password: string;\n};\n\n/**\n * 解析 URL 字符串为组件对象。\n * @param url - 需要解析的 URL 字符串。\n * @returns 包含解析后 URL 组件的对象。\n */\nexport function urlParse(url: string): UrlMeta {\n let result: URL | null = null;\n\n try {\n // 添加 globalThis 是便于对接外部环境 URL 的自行实现\n // 例如在 uni-app、微信小程序等运行环境。\n result = new globalThis.URL(url);\n } catch {\n // ignore\n }\n\n const protocol = result?.protocol || '';\n const host = result?.host || '';\n\n return {\n protocol,\n host,\n hostname: result?.hostname || '',\n port: result?.port || '',\n pathname: result?.pathname || '',\n search: result?.search || '',\n hash: result?.hash || '',\n username: result?.username || '',\n password: result?.password || '',\n };\n}\n\n/**\n * 将 UrlMeta 对象转换回 URL 字符串。\n * @param url - 需要转换的 UrlMeta 对象。\n * @returns 转换后的 URL 字符串。\n */\nexport function urlStringify(url: UrlMeta) {\n const { protocol, hostname, port, pathname, search, hash, username, password } = url;\n return [\n protocol ? `${protocol}//` : '',\n username && password ? `${username}:${password}@` : '',\n hostname,\n port ? `:${port}` : '',\n pathname,\n search,\n hash,\n ]\n .filter(Boolean)\n .join('');\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,SAAS,KAAsB;CAC7C,IAAI,SAAqB;CAEzB,IAAI;EAGF,SAAS,IAAI,WAAW,IAAI,GAAG;CACjC,QAAQ,CAER;CAKA,OAAO;EACL,UAJe,QAAQ,YAAY;EAKnC,MAJW,QAAQ,QAAQ;EAK3B,UAAU,QAAQ,YAAY;EAC9B,MAAM,QAAQ,QAAQ;EACtB,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ,UAAU;EAC1B,MAAM,QAAQ,QAAQ;EACtB,UAAU,QAAQ,YAAY;EAC9B,UAAU,QAAQ,YAAY;CAChC;AACF;;;;;;AAOA,SAAgB,aAAa,KAAc;CACzC,MAAM,EAAE,UAAU,UAAU,MAAM,UAAU,QAAQ,MAAM,UAAU,aAAa;CACjF,OAAO;EACL,WAAW,GAAG,SAAS,MAAM;EAC7B,YAAY,WAAW,GAAG,SAAS,GAAG,SAAS,KAAK;EACpD;EACA,OAAO,IAAI,SAAS;EACpB;EACA;EACA;CACF,EACG,OAAO,OAAO,EACd,KAAK,EAAE;AACZ"}
|
package/dist/version.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.cjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["import { isInteger } from './regexp';\nimport { isUndefined } from './type';\n\n/**\n * 表示包含主版本号、次版本号和修订号的对象\n */\nexport type VersionObject = {\n /**\n * 主版本号,当有不兼容的API修改时递增\n */\n major: number;\n /**\n * 次版本号,当有向下兼容的功能新增时递增\n */\n minor: number;\n /**\n * 修订号,当有向下兼容的问题修正时递增\n */\n patch: number;\n};\n\n/**\n * 将数字转换为安全的数值,如果输入为NaN则返回0\n * @param pos - 位置描述,用于错误提示\n * @param str - 要转换的数字字符串\n * @returns 安全的数字(如果输入为NaN则返回0)\n */\nfunction internal_numerical(pos: string, str?: string) {\n if (isUndefined(str)) throw new Error(`${pos}不存在`);\n if (!isInteger(str)) throw new Error(`${pos}不是整数`);\n const num = Number(str);\n if (num < 0) throw new Error(`${pos}不是正整数`);\n return num;\n}\n\n/**\n * 将语义化版本号字符串解析为VersionObject对象\n * @param version - 要解析的版本号字符串 (例如 \"1.2.3\")\n * @returns 包含主版本号、次版本号和修订号的对象\n * @throws 如果版本号字符串格式无效将抛出错误\n */\nexport function versionParse(version: string): VersionObject {\n const parts = version.split('.');\n\n if (parts.length !== 3) {\n throw new Error('版本号格式不正确');\n }\n\n const [major, minor, patch] = parts;\n\n return {\n major: internal_numerical('主版本号', major),\n minor: internal_numerical('次版本号', minor),\n patch: internal_numerical('修订号', patch),\n };\n}\n\n/**\n * 比较两个语义化版本号字符串\n * @param version1 - 要比较的第一个版本号字符串\n * @param version2 - 要比较的第二个版本号字符串\n * @returns 如果version1较大返回1,version2较大返回-1,相等返回0\n * @throws 如果任一版本号字符串格式无效将抛出错误\n */\nexport function versionCompare(version1: string, version2: string): number {\n const vo1 = versionParse(version1);\n const vo2 = versionParse(version2);\n const order: (keyof VersionObject)[] = ['major', 'minor', 'patch'];\n\n for (const key of order) {\n const n1 = vo1[key];\n const n2 = vo2[key];\n\n if (n1 > n2) {\n return 1;\n }\n\n if (n1 < n2) {\n return -1;\n }\n }\n\n return 0;\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAS,mBAAmB,KAAa,KAAc;CACrD,IAAI,aAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"version.cjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["import { isInteger } from './regexp';\nimport { isUndefined } from './type';\n\n/**\n * 表示包含主版本号、次版本号和修订号的对象\n */\nexport type VersionObject = {\n /**\n * 主版本号,当有不兼容的API修改时递增\n */\n major: number;\n /**\n * 次版本号,当有向下兼容的功能新增时递增\n */\n minor: number;\n /**\n * 修订号,当有向下兼容的问题修正时递增\n */\n patch: number;\n};\n\n/**\n * 将数字转换为安全的数值,如果输入为NaN则返回0\n * @param pos - 位置描述,用于错误提示\n * @param str - 要转换的数字字符串\n * @returns 安全的数字(如果输入为NaN则返回0)\n */\nfunction internal_numerical(pos: string, str?: string) {\n if (isUndefined(str)) throw new Error(`${pos}不存在`);\n if (!isInteger(str)) throw new Error(`${pos}不是整数`);\n const num = Number(str);\n if (num < 0) throw new Error(`${pos}不是正整数`);\n return num;\n}\n\n/**\n * 将语义化版本号字符串解析为VersionObject对象\n * @param version - 要解析的版本号字符串 (例如 \"1.2.3\")\n * @returns 包含主版本号、次版本号和修订号的对象\n * @throws 如果版本号字符串格式无效将抛出错误\n */\nexport function versionParse(version: string): VersionObject {\n const parts = version.split('.');\n\n if (parts.length !== 3) {\n throw new Error('版本号格式不正确');\n }\n\n const [major, minor, patch] = parts;\n\n return {\n major: internal_numerical('主版本号', major),\n minor: internal_numerical('次版本号', minor),\n patch: internal_numerical('修订号', patch),\n };\n}\n\n/**\n * 比较两个语义化版本号字符串\n * @param version1 - 要比较的第一个版本号字符串\n * @param version2 - 要比较的第二个版本号字符串\n * @returns 如果version1较大返回1,version2较大返回-1,相等返回0\n * @throws 如果任一版本号字符串格式无效将抛出错误\n */\nexport function versionCompare(version1: string, version2: string): number {\n const vo1 = versionParse(version1);\n const vo2 = versionParse(version2);\n const order: (keyof VersionObject)[] = ['major', 'minor', 'patch'];\n\n for (const key of order) {\n const n1 = vo1[key];\n const n2 = vo2[key];\n\n if (n1 > n2) {\n return 1;\n }\n\n if (n1 < n2) {\n return -1;\n }\n }\n\n return 0;\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAS,mBAAmB,KAAa,KAAc;CACrD,IAAI,aAAA,YAAY,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,IAAI;CACjD,IAAI,CAAC,eAAA,UAAU,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,KAAK;CACjD,MAAM,MAAM,OAAO,GAAG;CACtB,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,MAAM;CAC1C,OAAO;AACT;;;;;;;AAQA,SAAgB,aAAa,SAAgC;CAC3D,MAAM,QAAQ,QAAQ,MAAM,GAAG;CAE/B,IAAI,MAAM,WAAW,GACnB,MAAM,IAAI,MAAM,UAAU;CAG5B,MAAM,CAAC,OAAO,OAAO,SAAS;CAE9B,OAAO;EACL,OAAO,mBAAmB,QAAQ,KAAK;EACvC,OAAO,mBAAmB,QAAQ,KAAK;EACvC,OAAO,mBAAmB,OAAO,KAAK;CACxC;AACF;;;;;;;;AASA,SAAgB,eAAe,UAAkB,UAA0B;CACzE,MAAM,MAAM,aAAa,QAAQ;CACjC,MAAM,MAAM,aAAa,QAAQ;CAGjC,KAAK,MAAM,OAAO;EAFsB;EAAS;EAAS;CAExC,GAAO;EACvB,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,IAAI;EAEf,IAAI,KAAK,IACP,OAAO;EAGT,IAAI,KAAK,IACP,OAAO;CAEX;CAEA,OAAO;AACT"}
|
package/dist/version.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.mjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["import { isInteger } from './regexp';\nimport { isUndefined } from './type';\n\n/**\n * 表示包含主版本号、次版本号和修订号的对象\n */\nexport type VersionObject = {\n /**\n * 主版本号,当有不兼容的API修改时递增\n */\n major: number;\n /**\n * 次版本号,当有向下兼容的功能新增时递增\n */\n minor: number;\n /**\n * 修订号,当有向下兼容的问题修正时递增\n */\n patch: number;\n};\n\n/**\n * 将数字转换为安全的数值,如果输入为NaN则返回0\n * @param pos - 位置描述,用于错误提示\n * @param str - 要转换的数字字符串\n * @returns 安全的数字(如果输入为NaN则返回0)\n */\nfunction internal_numerical(pos: string, str?: string) {\n if (isUndefined(str)) throw new Error(`${pos}不存在`);\n if (!isInteger(str)) throw new Error(`${pos}不是整数`);\n const num = Number(str);\n if (num < 0) throw new Error(`${pos}不是正整数`);\n return num;\n}\n\n/**\n * 将语义化版本号字符串解析为VersionObject对象\n * @param version - 要解析的版本号字符串 (例如 \"1.2.3\")\n * @returns 包含主版本号、次版本号和修订号的对象\n * @throws 如果版本号字符串格式无效将抛出错误\n */\nexport function versionParse(version: string): VersionObject {\n const parts = version.split('.');\n\n if (parts.length !== 3) {\n throw new Error('版本号格式不正确');\n }\n\n const [major, minor, patch] = parts;\n\n return {\n major: internal_numerical('主版本号', major),\n minor: internal_numerical('次版本号', minor),\n patch: internal_numerical('修订号', patch),\n };\n}\n\n/**\n * 比较两个语义化版本号字符串\n * @param version1 - 要比较的第一个版本号字符串\n * @param version2 - 要比较的第二个版本号字符串\n * @returns 如果version1较大返回1,version2较大返回-1,相等返回0\n * @throws 如果任一版本号字符串格式无效将抛出错误\n */\nexport function versionCompare(version1: string, version2: string): number {\n const vo1 = versionParse(version1);\n const vo2 = versionParse(version2);\n const order: (keyof VersionObject)[] = ['major', 'minor', 'patch'];\n\n for (const key of order) {\n const n1 = vo1[key];\n const n2 = vo2[key];\n\n if (n1 > n2) {\n return 1;\n }\n\n if (n1 < n2) {\n return -1;\n }\n }\n\n return 0;\n}\n"],"mappings":";;;;;;;;;AA2BA,SAAS,mBAAmB,KAAa,KAAc;CACrD,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"version.mjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["import { isInteger } from './regexp';\nimport { isUndefined } from './type';\n\n/**\n * 表示包含主版本号、次版本号和修订号的对象\n */\nexport type VersionObject = {\n /**\n * 主版本号,当有不兼容的API修改时递增\n */\n major: number;\n /**\n * 次版本号,当有向下兼容的功能新增时递增\n */\n minor: number;\n /**\n * 修订号,当有向下兼容的问题修正时递增\n */\n patch: number;\n};\n\n/**\n * 将数字转换为安全的数值,如果输入为NaN则返回0\n * @param pos - 位置描述,用于错误提示\n * @param str - 要转换的数字字符串\n * @returns 安全的数字(如果输入为NaN则返回0)\n */\nfunction internal_numerical(pos: string, str?: string) {\n if (isUndefined(str)) throw new Error(`${pos}不存在`);\n if (!isInteger(str)) throw new Error(`${pos}不是整数`);\n const num = Number(str);\n if (num < 0) throw new Error(`${pos}不是正整数`);\n return num;\n}\n\n/**\n * 将语义化版本号字符串解析为VersionObject对象\n * @param version - 要解析的版本号字符串 (例如 \"1.2.3\")\n * @returns 包含主版本号、次版本号和修订号的对象\n * @throws 如果版本号字符串格式无效将抛出错误\n */\nexport function versionParse(version: string): VersionObject {\n const parts = version.split('.');\n\n if (parts.length !== 3) {\n throw new Error('版本号格式不正确');\n }\n\n const [major, minor, patch] = parts;\n\n return {\n major: internal_numerical('主版本号', major),\n minor: internal_numerical('次版本号', minor),\n patch: internal_numerical('修订号', patch),\n };\n}\n\n/**\n * 比较两个语义化版本号字符串\n * @param version1 - 要比较的第一个版本号字符串\n * @param version2 - 要比较的第二个版本号字符串\n * @returns 如果version1较大返回1,version2较大返回-1,相等返回0\n * @throws 如果任一版本号字符串格式无效将抛出错误\n */\nexport function versionCompare(version1: string, version2: string): number {\n const vo1 = versionParse(version1);\n const vo2 = versionParse(version2);\n const order: (keyof VersionObject)[] = ['major', 'minor', 'patch'];\n\n for (const key of order) {\n const n1 = vo1[key];\n const n2 = vo2[key];\n\n if (n1 > n2) {\n return 1;\n }\n\n if (n1 < n2) {\n return -1;\n }\n }\n\n return 0;\n}\n"],"mappings":";;;;;;;;;AA2BA,SAAS,mBAAmB,KAAa,KAAc;CACrD,IAAI,YAAY,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,IAAI;CACjD,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,KAAK;CACjD,MAAM,MAAM,OAAO,GAAG;CACtB,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,MAAM;CAC1C,OAAO;AACT;;;;;;;AAQA,SAAgB,aAAa,SAAgC;CAC3D,MAAM,QAAQ,QAAQ,MAAM,GAAG;CAE/B,IAAI,MAAM,WAAW,GACnB,MAAM,IAAI,MAAM,UAAU;CAG5B,MAAM,CAAC,OAAO,OAAO,SAAS;CAE9B,OAAO;EACL,OAAO,mBAAmB,QAAQ,KAAK;EACvC,OAAO,mBAAmB,QAAQ,KAAK;EACvC,OAAO,mBAAmB,OAAO,KAAK;CACxC;AACF;;;;;;;;AASA,SAAgB,eAAe,UAAkB,UAA0B;CACzE,MAAM,MAAM,aAAa,QAAQ;CACjC,MAAM,MAAM,aAAa,QAAQ;CAGjC,KAAK,MAAM,OAAO;EAFsB;EAAS;EAAS;CAExC,GAAO;EACvB,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,IAAI;EAEf,IAAI,KAAK,IACP,OAAO;EAGT,IAAI,KAAK,IACP,OAAO;CAEX;CAEA,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcome/utils-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"description": "cloudcome core utils",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -43,9 +43,6 @@
|
|
|
43
43
|
"error": [
|
|
44
44
|
"./dist/error.d.ts"
|
|
45
45
|
],
|
|
46
|
-
"exception": [
|
|
47
|
-
"./dist/exception.d.ts"
|
|
48
|
-
],
|
|
49
46
|
"function": [
|
|
50
47
|
"./dist/function.d.ts"
|
|
51
48
|
],
|
|
@@ -167,11 +164,6 @@
|
|
|
167
164
|
"import": "./dist/error.mjs",
|
|
168
165
|
"require": "./dist/error.cjs"
|
|
169
166
|
},
|
|
170
|
-
"./exception": {
|
|
171
|
-
"types": "./dist/exception.d.ts",
|
|
172
|
-
"import": "./dist/exception.mjs",
|
|
173
|
-
"require": "./dist/exception.cjs"
|
|
174
|
-
},
|
|
175
167
|
"./function": {
|
|
176
168
|
"types": "./dist/function.d.ts",
|
|
177
169
|
"import": "./dist/function.mjs",
|
package/dist/exception.cjs
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_object = require("./object.cjs");
|
|
3
|
-
//#region src/exception.ts
|
|
4
|
-
/**
|
|
5
|
-
* 默认的异常构建选项
|
|
6
|
-
*/
|
|
7
|
-
var defaults = {
|
|
8
|
-
/**
|
|
9
|
-
* 默认消息格式函数
|
|
10
|
-
* @default (name, message) => `[${name}] ${message}`
|
|
11
|
-
*/
|
|
12
|
-
format: (name, message) => `[${name}] ${message}` };
|
|
13
|
-
/**
|
|
14
|
-
* 自定义异常类
|
|
15
|
-
* @template T 额外属性的类型
|
|
16
|
-
* @param name 异常类名称
|
|
17
|
-
* @param options 构建选项
|
|
18
|
-
* @returns 自定义异常类
|
|
19
|
-
* @example
|
|
20
|
-
* const MyException = defineException<{ code: number }>('MyException');
|
|
21
|
-
* const err = new MyException('error', { code: 404 });
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* const SimpleException = defineException('SimpleException');
|
|
25
|
-
* const err = new SimpleException('error', undefined);
|
|
26
|
-
*/
|
|
27
|
-
function defineException(name, options) {
|
|
28
|
-
const { format } = require_object.objectDefaults(options || {}, defaults);
|
|
29
|
-
return class extends Error {
|
|
30
|
-
constructor(message, extra) {
|
|
31
|
-
super(format(name, message));
|
|
32
|
-
this.name = name;
|
|
33
|
-
Object.assign(this, extra);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
//#endregion
|
|
38
|
-
exports.defineException = defineException;
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=exception.cjs.map
|
package/dist/exception.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exception.cjs","names":[],"sources":["../src/exception.ts"],"sourcesContent":["import { objectDefaults } from './object';\n\n/**\n * 构建异常选项\n */\nexport type DefineExceptionOptions = {\n /**\n * 自定义错误消息格式函数\n * @param name 错误名称\n * @param message 原始错误消息\n * @returns 格式化后的错误消息\n * @example\n * (name, message) => `${name}::${message}`\n */\n format?: (name: string, message: string) => string;\n};\n\n/**\n * 默认的异常构建选项\n */\nconst defaults: DefineExceptionOptions = {\n /**\n * 默认消息格式函数\n * @default (name, message) => `[${name}] ${message}`\n */\n format: (name, message) => `[${name}] ${message}`,\n};\n\n/**\n * 自定义异常类\n * @template T 额外属性的类型\n * @param name 异常类名称\n * @param options 构建选项\n * @returns 自定义异常类\n * @example\n * const MyException = defineException<{ code: number }>('MyException');\n * const err = new MyException('error', { code: 404 });\n *\n * @example\n * const SimpleException = defineException('SimpleException');\n * const err = new SimpleException('error', undefined);\n */\nexport function defineException<T = void>(name: string, options?: DefineExceptionOptions) {\n const { format } = objectDefaults(options || {}, defaults) as Required<DefineExceptionOptions>;\n\n return class extends Error {\n constructor(message: string, extra: T) {\n super(format(name, message));\n this.name = name;\n Object.assign(this, extra);\n }\n } as unknown as {\n new (message: string, extra: T): Error & T;\n };\n}\n\n// const MyException = defineException<{ foo: string; bar: number }>('MyException: ');\n// const myException = new MyException('bar', { foo: '1', bar: 1 });\n// myException.foo;\n// myException.bar;\n// myException.name;\n// myException.message;\n// myException.stack;\n// myException.cause;\n\n// const MyException2 = defineException('MyException2: ');\n// const myException2 = new MyException2('bar');\n"],"mappings":";;;;;;AAoBA,IAAM,WAAmC;;;;;AAKvC,SAAS,MAAM,YAAY,IAAI,KAAK,IAAI,WACzC;;;;;;;;;;;;;;;AAgBD,SAAgB,gBAA0B,MAAc,SAAkC;CACxF,MAAM,EAAE,WAAW,eAAA,eAAe,WAAW,EAAE,EAAE,SAAS;CAE1D,OAAO,cAAc,MAAM;EACzB,YAAY,SAAiB,OAAU;GACrC,MAAM,OAAO,MAAM,QAAQ,CAAC;GAC5B,KAAK,OAAO;GACZ,OAAO,OAAO,MAAM,MAAM"}
|
package/dist/exception.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 构建异常选项
|
|
3
|
-
*/
|
|
4
|
-
export type DefineExceptionOptions = {
|
|
5
|
-
/**
|
|
6
|
-
* 自定义错误消息格式函数
|
|
7
|
-
* @param name 错误名称
|
|
8
|
-
* @param message 原始错误消息
|
|
9
|
-
* @returns 格式化后的错误消息
|
|
10
|
-
* @example
|
|
11
|
-
* (name, message) => `${name}::${message}`
|
|
12
|
-
*/
|
|
13
|
-
format?: (name: string, message: string) => string;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* 自定义异常类
|
|
17
|
-
* @template T 额外属性的类型
|
|
18
|
-
* @param name 异常类名称
|
|
19
|
-
* @param options 构建选项
|
|
20
|
-
* @returns 自定义异常类
|
|
21
|
-
* @example
|
|
22
|
-
* const MyException = defineException<{ code: number }>('MyException');
|
|
23
|
-
* const err = new MyException('error', { code: 404 });
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* const SimpleException = defineException('SimpleException');
|
|
27
|
-
* const err = new SimpleException('error', undefined);
|
|
28
|
-
*/
|
|
29
|
-
export declare function defineException<T = void>(name: string, options?: DefineExceptionOptions): {
|
|
30
|
-
new (message: string, extra: T): Error & T;
|
|
31
|
-
};
|
package/dist/exception.mjs
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { objectDefaults } from "./object.mjs";
|
|
2
|
-
//#region src/exception.ts
|
|
3
|
-
/**
|
|
4
|
-
* 默认的异常构建选项
|
|
5
|
-
*/
|
|
6
|
-
var defaults = {
|
|
7
|
-
/**
|
|
8
|
-
* 默认消息格式函数
|
|
9
|
-
* @default (name, message) => `[${name}] ${message}`
|
|
10
|
-
*/
|
|
11
|
-
format: (name, message) => `[${name}] ${message}` };
|
|
12
|
-
/**
|
|
13
|
-
* 自定义异常类
|
|
14
|
-
* @template T 额外属性的类型
|
|
15
|
-
* @param name 异常类名称
|
|
16
|
-
* @param options 构建选项
|
|
17
|
-
* @returns 自定义异常类
|
|
18
|
-
* @example
|
|
19
|
-
* const MyException = defineException<{ code: number }>('MyException');
|
|
20
|
-
* const err = new MyException('error', { code: 404 });
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* const SimpleException = defineException('SimpleException');
|
|
24
|
-
* const err = new SimpleException('error', undefined);
|
|
25
|
-
*/
|
|
26
|
-
function defineException(name, options) {
|
|
27
|
-
const { format } = objectDefaults(options || {}, defaults);
|
|
28
|
-
return class extends Error {
|
|
29
|
-
constructor(message, extra) {
|
|
30
|
-
super(format(name, message));
|
|
31
|
-
this.name = name;
|
|
32
|
-
Object.assign(this, extra);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
//#endregion
|
|
37
|
-
export { defineException };
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=exception.mjs.map
|
package/dist/exception.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exception.mjs","names":[],"sources":["../src/exception.ts"],"sourcesContent":["import { objectDefaults } from './object';\n\n/**\n * 构建异常选项\n */\nexport type DefineExceptionOptions = {\n /**\n * 自定义错误消息格式函数\n * @param name 错误名称\n * @param message 原始错误消息\n * @returns 格式化后的错误消息\n * @example\n * (name, message) => `${name}::${message}`\n */\n format?: (name: string, message: string) => string;\n};\n\n/**\n * 默认的异常构建选项\n */\nconst defaults: DefineExceptionOptions = {\n /**\n * 默认消息格式函数\n * @default (name, message) => `[${name}] ${message}`\n */\n format: (name, message) => `[${name}] ${message}`,\n};\n\n/**\n * 自定义异常类\n * @template T 额外属性的类型\n * @param name 异常类名称\n * @param options 构建选项\n * @returns 自定义异常类\n * @example\n * const MyException = defineException<{ code: number }>('MyException');\n * const err = new MyException('error', { code: 404 });\n *\n * @example\n * const SimpleException = defineException('SimpleException');\n * const err = new SimpleException('error', undefined);\n */\nexport function defineException<T = void>(name: string, options?: DefineExceptionOptions) {\n const { format } = objectDefaults(options || {}, defaults) as Required<DefineExceptionOptions>;\n\n return class extends Error {\n constructor(message: string, extra: T) {\n super(format(name, message));\n this.name = name;\n Object.assign(this, extra);\n }\n } as unknown as {\n new (message: string, extra: T): Error & T;\n };\n}\n\n// const MyException = defineException<{ foo: string; bar: number }>('MyException: ');\n// const myException = new MyException('bar', { foo: '1', bar: 1 });\n// myException.foo;\n// myException.bar;\n// myException.name;\n// myException.message;\n// myException.stack;\n// myException.cause;\n\n// const MyException2 = defineException('MyException2: ');\n// const myException2 = new MyException2('bar');\n"],"mappings":";;;;;AAoBA,IAAM,WAAmC;;;;;AAKvC,SAAS,MAAM,YAAY,IAAI,KAAK,IAAI,WACzC;;;;;;;;;;;;;;;AAgBD,SAAgB,gBAA0B,MAAc,SAAkC;CACxF,MAAM,EAAE,WAAW,eAAe,WAAW,EAAE,EAAE,SAAS;CAE1D,OAAO,cAAc,MAAM;EACzB,YAAY,SAAiB,OAAU;GACrC,MAAM,OAAO,MAAM,QAAQ,CAAC;GAC5B,KAAK,OAAO;GACZ,OAAO,OAAO,MAAM,MAAM"}
|