@alibarbar/common 1.0.9 → 1.1.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/{chunk-O3O67R4I.js → algorithm.cjs} +1 -3
- package/dist/algorithm.js +130 -44
- package/dist/{chunk-LOAZSPGQ.js → array.cjs} +1 -3
- package/dist/array.js +135 -84
- package/dist/{chunk-Y364QIQH.js → color.cjs} +1 -3
- package/dist/color.js +127 -40
- package/dist/{chunk-DYBSRI7V.js → crypto.cjs} +109 -3
- package/dist/crypto.d.mts +48 -1
- package/dist/crypto.d.ts +48 -1
- package/dist/crypto.js +274 -60
- package/dist/{chunk-BHCRFURU.js → data-structure.cjs} +1 -3
- package/dist/data-structure.js +481 -32
- package/dist/{chunk-I3L42475.js → date.cjs} +1 -3
- package/dist/date.js +125 -72
- package/dist/{chunk-JK2SE3I2.js → dom.cjs} +1 -3
- package/dist/dom.js +84 -56
- package/dist/{chunk-7V5UQXIO.js → file.cjs} +1 -3
- package/dist/file.js +79 -32
- package/dist/{chunk-OX5PLOWB.js → i18n.cjs} +1 -3
- package/dist/i18n.js +78 -40
- package/dist/index.cjs +4543 -0
- package/dist/index.d.mts +6 -162
- package/dist/index.d.ts +6 -162
- package/dist/index.js +3712 -17374
- package/dist/{chunk-4RGXV4SJ.js → network.cjs} +1 -3
- package/dist/network.js +97 -28
- package/dist/{chunk-3FRYJPHG.js → number.cjs} +1 -3
- package/dist/number.js +77 -56
- package/dist/{chunk-27UDDVLZ.js → object.cjs} +1 -3
- package/dist/object.js +237 -80
- package/dist/{chunk-JQZBPAPO.js → performance.cjs} +1 -3
- package/dist/performance.js +145 -40
- package/dist/services.cjs +291 -0
- package/dist/services.d.mts +161 -0
- package/dist/services.d.ts +161 -0
- package/dist/services.js +281 -0
- package/dist/storage.cjs +943 -0
- package/dist/storage.d.mts +46 -1
- package/dist/storage.d.ts +46 -1
- package/dist/storage.js +930 -32
- package/dist/{chunk-D7CS5EKF.js → string.cjs} +1 -3
- package/dist/string.js +91 -68
- package/dist/{chunk-56W6YECK.js → tracking.cjs} +1 -3
- package/dist/tracking.js +359 -52
- package/dist/{chunk-ZDMFMUDR.js → transform.cjs} +1 -3
- package/dist/transform.js +299 -32
- package/dist/{chunk-NJARVI6X.mjs → upload.cjs} +42 -15
- package/dist/upload.d.mts +1 -1
- package/dist/upload.d.ts +1 -1
- package/dist/upload.js +402 -20
- package/dist/{chunk-KGFTD255.js → url.cjs} +1 -3
- package/dist/url.js +91 -44
- package/dist/{chunk-TQN37HIN.js → validation.cjs} +1 -3
- package/dist/validation.js +77 -60
- package/package.json +7 -2
- package/dist/algorithm.js.map +0 -1
- package/dist/algorithm.mjs +0 -4
- package/dist/algorithm.mjs.map +0 -1
- package/dist/array.js.map +0 -1
- package/dist/array.mjs +0 -4
- package/dist/array.mjs.map +0 -1
- package/dist/chunk-27UDDVLZ.js.map +0 -1
- package/dist/chunk-2R2QWFJC.mjs +0 -138
- package/dist/chunk-2R2QWFJC.mjs.map +0 -1
- package/dist/chunk-3FRYJPHG.js.map +0 -1
- package/dist/chunk-4RGXV4SJ.js.map +0 -1
- package/dist/chunk-56W6YECK.js.map +0 -1
- package/dist/chunk-5BGSUGTI.mjs +0 -128
- package/dist/chunk-5BGSUGTI.mjs.map +0 -1
- package/dist/chunk-7E6GELHJ.mjs +0 -302
- package/dist/chunk-7E6GELHJ.mjs.map +0 -1
- package/dist/chunk-7V5UQXIO.js.map +0 -1
- package/dist/chunk-A4SWQXX7.mjs +0 -484
- package/dist/chunk-A4SWQXX7.mjs.map +0 -1
- package/dist/chunk-BHCRFURU.js.map +0 -1
- package/dist/chunk-CDSGEAOK.mjs +0 -80
- package/dist/chunk-CDSGEAOK.mjs.map +0 -1
- package/dist/chunk-D7CS5EKF.js.map +0 -1
- package/dist/chunk-DYBSRI7V.js.map +0 -1
- package/dist/chunk-FEBKPX5A.js +0 -386
- package/dist/chunk-FEBKPX5A.js.map +0 -1
- package/dist/chunk-FJ6ZGZIA.mjs +0 -39
- package/dist/chunk-FJ6ZGZIA.mjs.map +0 -1
- package/dist/chunk-HLDFI7R2.mjs +0 -175
- package/dist/chunk-HLDFI7R2.mjs.map +0 -1
- package/dist/chunk-I3L42475.js.map +0 -1
- package/dist/chunk-JBLX27WD.mjs +0 -240
- package/dist/chunk-JBLX27WD.mjs.map +0 -1
- package/dist/chunk-JHZ7M2MR.mjs +0 -133
- package/dist/chunk-JHZ7M2MR.mjs.map +0 -1
- package/dist/chunk-JK2SE3I2.js.map +0 -1
- package/dist/chunk-JQZBPAPO.js.map +0 -1
- package/dist/chunk-JXYGC2C5.mjs +0 -100
- package/dist/chunk-JXYGC2C5.mjs.map +0 -1
- package/dist/chunk-KGFTD255.js.map +0 -1
- package/dist/chunk-LBHBNPNJ.mjs +0 -148
- package/dist/chunk-LBHBNPNJ.mjs.map +0 -1
- package/dist/chunk-LF4CILQS.mjs +0 -87
- package/dist/chunk-LF4CILQS.mjs.map +0 -1
- package/dist/chunk-LOAZSPGQ.js.map +0 -1
- package/dist/chunk-NJARVI6X.mjs.map +0 -1
- package/dist/chunk-NSSDYX2U.mjs +0 -80
- package/dist/chunk-NSSDYX2U.mjs.map +0 -1
- package/dist/chunk-O3O67R4I.js.map +0 -1
- package/dist/chunk-OIXQ3E6W.mjs +0 -354
- package/dist/chunk-OIXQ3E6W.mjs.map +0 -1
- package/dist/chunk-OX5PLOWB.js.map +0 -1
- package/dist/chunk-PJ7UCTX4.mjs +0 -362
- package/dist/chunk-PJ7UCTX4.mjs.map +0 -1
- package/dist/chunk-PR4QN5HX.js +0 -44
- package/dist/chunk-PR4QN5HX.js.map +0 -1
- package/dist/chunk-QIBE7GVN.mjs +0 -81
- package/dist/chunk-QIBE7GVN.mjs.map +0 -1
- package/dist/chunk-QIOC54LQ.mjs +0 -130
- package/dist/chunk-QIOC54LQ.mjs.map +0 -1
- package/dist/chunk-TQN37HIN.js.map +0 -1
- package/dist/chunk-WZDOPUJW.js +0 -361
- package/dist/chunk-WZDOPUJW.js.map +0 -1
- package/dist/chunk-XJTZDXSR.mjs +0 -94
- package/dist/chunk-XJTZDXSR.mjs.map +0 -1
- package/dist/chunk-Y364QIQH.js.map +0 -1
- package/dist/chunk-YXM6Q4JS.mjs +0 -94
- package/dist/chunk-YXM6Q4JS.mjs.map +0 -1
- package/dist/chunk-ZDMFMUDR.js.map +0 -1
- package/dist/chunk-ZVJ6NQUM.mjs +0 -82
- package/dist/chunk-ZVJ6NQUM.mjs.map +0 -1
- package/dist/color.js.map +0 -1
- package/dist/color.mjs +0 -4
- package/dist/color.mjs.map +0 -1
- package/dist/crypto.js.map +0 -1
- package/dist/crypto.mjs +0 -4
- package/dist/crypto.mjs.map +0 -1
- package/dist/data-structure.js.map +0 -1
- package/dist/data-structure.mjs +0 -4
- package/dist/data-structure.mjs.map +0 -1
- package/dist/date.js.map +0 -1
- package/dist/date.mjs +0 -4
- package/dist/date.mjs.map +0 -1
- package/dist/dom.js.map +0 -1
- package/dist/dom.mjs +0 -4
- package/dist/dom.mjs.map +0 -1
- package/dist/file.js.map +0 -1
- package/dist/file.mjs +0 -4
- package/dist/file.mjs.map +0 -1
- package/dist/i18n.js.map +0 -1
- package/dist/i18n.mjs +0 -4
- package/dist/i18n.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -17155
- package/dist/index.mjs.map +0 -1
- package/dist/network.js.map +0 -1
- package/dist/network.mjs +0 -4
- package/dist/network.mjs.map +0 -1
- package/dist/number.js.map +0 -1
- package/dist/number.mjs +0 -4
- package/dist/number.mjs.map +0 -1
- package/dist/object.js.map +0 -1
- package/dist/object.mjs +0 -4
- package/dist/object.mjs.map +0 -1
- package/dist/performance.js.map +0 -1
- package/dist/performance.mjs +0 -4
- package/dist/performance.mjs.map +0 -1
- package/dist/storage.js.map +0 -1
- package/dist/storage.mjs +0 -5
- package/dist/storage.mjs.map +0 -1
- package/dist/string.js.map +0 -1
- package/dist/string.mjs +0 -4
- package/dist/string.mjs.map +0 -1
- package/dist/tracking.js.map +0 -1
- package/dist/tracking.mjs +0 -4
- package/dist/tracking.mjs.map +0 -1
- package/dist/transform.js.map +0 -1
- package/dist/transform.mjs +0 -4
- package/dist/transform.mjs.map +0 -1
- package/dist/upload.js.map +0 -1
- package/dist/upload.mjs +0 -5
- package/dist/upload.mjs.map +0 -1
- package/dist/url.js.map +0 -1
- package/dist/url.mjs +0 -4
- package/dist/url.mjs.map +0 -1
- package/dist/validation.js.map +0 -1
- package/dist/validation.mjs +0 -4
- package/dist/validation.mjs.map +0 -1
- /package/dist/{upload-DchqyDBQ.d.mts → index-DchqyDBQ.d.mts} +0 -0
- /package/dist/{upload-DchqyDBQ.d.ts → index-DchqyDBQ.d.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/string.ts"],"names":["template"],"mappings":"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","file":"chunk-XJTZDXSR.mjs","sourcesContent":["/**\n * 字符串工具函数\n */\n\n/**\n * 首字母大写\n * @param str - 输入字符串\n * @returns 首字母大写的字符串\n */\nexport function capitalize(str: string): string {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n\n/**\n * 驼峰命名转换\n * @param str - 输入字符串(支持 kebab-case, snake_case, space separated)\n * @returns 驼峰命名字符串\n */\nexport function camelCase(str: string): string {\n if (!str) return str;\n\n // 先转换为小写,然后按空格、短横线、下划线分割\n const words = str\n .replace(/[A-Z]/g, letter => ` ${letter.toLowerCase()}`)\n .split(/[\\s\\-_]+/)\n .filter(word => word.length > 0);\n\n if (words.length === 0) return '';\n\n // 第一个单词全小写,后续单词首字母大写\n return (\n words[0].toLowerCase() +\n words\n .slice(1)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n );\n}\n\n/**\n * 短横线命名转换\n * @param str - 输入字符串\n * @returns kebab-case 字符串\n */\nexport function kebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * 截断字符串\n * @param str - 输入字符串\n * @param length - 最大长度\n * @param suffix - 后缀,默认为 '...'\n * @returns 截断后的字符串\n */\nexport function truncate(str: string, length: number, suffix = '...'): string {\n if (str.length <= length) return str;\n return str.slice(0, length - suffix.length) + suffix;\n}\n\n/**\n * 下划线命名转换\n * @param str - 输入字符串\n * @returns snake_case 字符串\n */\nexport function snakeCase(str: string): string {\n if (!str) return str;\n return str\n .replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`)\n .replace(/[\\s-]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .toLowerCase();\n}\n\n/**\n * 帕斯卡命名转换\n * @param str - 输入字符串(支持 kebab-case, snake_case, space separated)\n * @returns PascalCase 字符串\n */\nexport function pascalCase(str: string): string {\n if (!str) return str;\n const camel = camelCase(str);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n}\n\n/**\n * 字符串脱敏\n * @param str - 输入字符串\n * @param options - 脱敏选项\n * @returns 脱敏后的字符串\n */\nexport function mask(\n str: string,\n options: {\n start?: number;\n end?: number;\n maskChar?: string;\n } = {}\n): string {\n if (!str) return str;\n const { start = 0, end = str.length, maskChar = '*' } = options;\n const startIndex = Math.max(0, start);\n const endIndex = Math.min(str.length, end);\n if (startIndex >= endIndex) return str;\n return str.slice(0, startIndex) + maskChar.repeat(endIndex - startIndex) + str.slice(endIndex);\n}\n\n/**\n * 手机号脱敏(默认显示前3位和后4位)\n * @param phone - 手机号\n * @returns 脱敏后的手机号\n */\nexport function maskPhone(phone: string): string {\n if (!phone || phone.length < 7) return phone;\n return mask(phone, { start: 3, end: phone.length - 4 });\n}\n\n/**\n * 邮箱脱敏(默认显示前2位和@后的域名)\n * @param email - 邮箱地址\n * @returns 脱敏后的邮箱\n */\nexport function maskEmail(email: string): string {\n if (!email || !email.includes('@')) return email;\n const [local, domain] = email.split('@');\n if (local.length <= 2) return email;\n return `${local.slice(0, 2)}***@${domain}`;\n}\n\n/**\n * URL友好的字符串转换(slugify)\n * @param str - 输入字符串\n * @returns URL友好的字符串\n */\nexport function slugify(str: string): string {\n if (!str) return '';\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n/**\n * 移除重音符号\n * @param str - 输入字符串\n * @returns 移除重音后的字符串\n */\nexport function removeAccents(str: string): string {\n if (!str) return str;\n return str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\n/**\n * HTML转义\n * @param str - 输入字符串\n * @returns 转义后的字符串\n */\nexport function escapeHtml(str: string): string {\n if (!str) return str;\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n };\n return str.replace(/[&<>\"']/g, char => map[char]);\n}\n\n/**\n * HTML反转义\n * @param str - 输入字符串\n * @returns 反转义后的字符串\n */\nexport function unescapeHtml(str: string): string {\n if (!str) return str;\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n };\n return str.replace(/&|<|>|"|'/g, char => map[char]);\n}\n\n/**\n * 模板字符串替换\n * @param template - 模板字符串,使用 {{key}} 作为占位符\n * @param data - 替换数据对象\n * @returns 替换后的字符串\n */\nexport function template(template: string, data: Record<string, unknown>): string {\n if (!template) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n const value = data[key];\n return value !== undefined && value !== null ? String(value) : match;\n });\n}\n\n/**\n * 关键词高亮\n * @param text - 文本内容\n * @param keyword - 关键词\n * @param tag - 高亮标签,默认为 'mark'\n * @returns 高亮后的HTML字符串\n */\nexport function highlight(text: string, keyword: string, tag = 'mark'): string {\n if (!text || !keyword) return text;\n const regex = new RegExp(`(${escapeRegex(keyword)})`, 'gi');\n return text.replace(regex, `<${tag}>$1</${tag}>`);\n}\n\n/**\n * 转义正则表达式特殊字符\n */\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/format/color.ts"],"names":["p","q"],"mappings":"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","file":"chunk-Y364QIQH.js","sourcesContent":["/**\n * 颜色工具函数\n */\n\n/**\n * RGB颜色类型\n */\nexport interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * HSL颜色类型\n */\nexport interface HSL {\n h: number; // 色相 (0-360)\n s: number; // 饱和度 (0-100)\n l: number; // 亮度 (0-100)\n}\n\n/**\n * 十六进制转RGB\n * @param hex - 十六进制颜色值(如 '#FF0000' 或 'FF0000')\n * @returns RGB对象\n */\nexport function hexToRgb(hex: string): RGB {\n // 移除 # 号\n const cleanHex = hex.replace('#', '');\n\n // 验证格式\n if (!/^[0-9A-Fa-f]{6}$/.test(cleanHex)) {\n throw new Error('Invalid hex color format');\n }\n\n return {\n r: parseInt(cleanHex.substring(0, 2), 16),\n g: parseInt(cleanHex.substring(2, 4), 16),\n b: parseInt(cleanHex.substring(4, 6), 16),\n };\n}\n\n/**\n * RGB转十六进制\n * @param rgb - RGB对象或字符串(如 'rgb(255, 0, 0)')\n * @returns 十六进制颜色值(如 '#FF0000')\n */\nexport function rgbToHex(rgb: RGB | string): string {\n let r: number;\n let g: number;\n let b: number;\n\n if (typeof rgb === 'string') {\n const match = rgb.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (!match) {\n throw new Error('Invalid RGB string format');\n }\n r = parseInt(match[1], 10);\n g = parseInt(match[2], 10);\n b = parseInt(match[3], 10);\n } else {\n r = rgb.r;\n g = rgb.g;\n b = rgb.b;\n }\n\n // 确保值在有效范围内\n r = Math.max(0, Math.min(255, Math.round(r)));\n g = Math.max(0, Math.min(255, Math.round(g)));\n b = Math.max(0, Math.min(255, Math.round(b)));\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();\n}\n\n/**\n * RGB转HSL\n * @param rgb - RGB对象\n * @returns HSL对象\n */\nexport function rgbToHsl(rgb: RGB): HSL {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (delta !== 0) {\n s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n if (max === r) {\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / delta + 2) / 6;\n } else {\n h = ((r - g) / delta + 4) / 6;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\n/**\n * HSL转RGB\n * @param hsl - HSL对象\n * @returns RGB对象\n */\nexport function hslToRgb(hsl: HSL): RGB {\n const h = hsl.h / 360;\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n\n let r: number;\n let g: number;\n let b: number;\n\n if (s === 0) {\n r = g = b = l; // 无色彩\n } else {\n const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n\n/**\n * 颜色变亮\n * @param color - 十六进制颜色值或RGB对象\n * @param amount - 变亮程度(0-100)\n * @returns 新的十六进制颜色值\n */\nexport function lighten(color: string | RGB, amount: number): string {\n const rgb = typeof color === 'string' ? hexToRgb(color) : color;\n const hsl = rgbToHsl(rgb);\n\n hsl.l = Math.min(100, hsl.l + amount);\n\n return rgbToHex(hslToRgb(hsl));\n}\n\n/**\n * 颜色变暗\n * @param color - 十六进制颜色值或RGB对象\n * @param amount - 变暗程度(0-100)\n * @returns 新的十六进制颜色值\n */\nexport function darken(color: string | RGB, amount: number): string {\n const rgb = typeof color === 'string' ? hexToRgb(color) : color;\n const hsl = rgbToHsl(rgb);\n\n hsl.l = Math.max(0, hsl.l - amount);\n\n return rgbToHex(hslToRgb(hsl));\n}\n\n/**\n * 颜色混合\n * @param color1 - 第一个颜色(十六进制)\n * @param color2 - 第二个颜色(十六进制)\n * @param ratio - 混合比例(0-1),0表示完全使用color1,1表示完全使用color2\n * @returns 混合后的十六进制颜色值\n */\nexport function mix(color1: string, color2: string, ratio: number): string {\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n\n const r = Math.round(rgb1.r * (1 - ratio) + rgb2.r * ratio);\n const g = Math.round(rgb1.g * (1 - ratio) + rgb2.g * ratio);\n const b = Math.round(rgb1.b * (1 - ratio) + rgb2.b * ratio);\n\n return rgbToHex({ r, g, b });\n}\n\n/**\n * 计算颜色对比度(WCAG标准)\n * @param color1 - 第一个颜色(十六进制)\n * @param color2 - 第二个颜色(十六进制)\n * @returns 对比度比值(1-21,4.5以上为可接受对比度)\n */\nexport function contrast(color1: string, color2: string): number {\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n\n // 计算相对亮度\n const getLuminance = (rgb: RGB): number => {\n const normalize = (value: number): number => {\n value = value / 255;\n return value <= 0.03928 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4);\n };\n\n return 0.2126 * normalize(rgb.r) + 0.7152 * normalize(rgb.g) + 0.0722 * normalize(rgb.b);\n };\n\n const lum1 = getLuminance(rgb1);\n const lum2 = getLuminance(rgb2);\n\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n\n return (lighter + 0.05) / (darker + 0.05);\n}\n"]}
|
package/dist/chunk-YXM6Q4JS.mjs
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// src/format/url.ts
|
|
2
|
-
function parseUrl(url) {
|
|
3
|
-
try {
|
|
4
|
-
const urlObj = new URL(url);
|
|
5
|
-
return {
|
|
6
|
-
protocol: urlObj.protocol,
|
|
7
|
-
host: urlObj.host,
|
|
8
|
-
hostname: urlObj.hostname,
|
|
9
|
-
port: urlObj.port,
|
|
10
|
-
pathname: urlObj.pathname,
|
|
11
|
-
search: urlObj.search,
|
|
12
|
-
hash: urlObj.hash,
|
|
13
|
-
origin: urlObj.origin
|
|
14
|
-
};
|
|
15
|
-
} catch {
|
|
16
|
-
throw new Error(`Invalid URL: ${url}`);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
function buildUrl(parts) {
|
|
20
|
-
const { protocol = "https:", host = "", pathname = "/", search = "", hash = "" } = parts;
|
|
21
|
-
return `${protocol}//${host}${pathname}${search}${hash}`;
|
|
22
|
-
}
|
|
23
|
-
function getQueryParams(url) {
|
|
24
|
-
const searchParams = url ? new URL(url).searchParams : new URLSearchParams(window.location.search);
|
|
25
|
-
const params = {};
|
|
26
|
-
searchParams.forEach((value, key) => {
|
|
27
|
-
params[key] = value;
|
|
28
|
-
});
|
|
29
|
-
return params;
|
|
30
|
-
}
|
|
31
|
-
function setQueryParams(url, params) {
|
|
32
|
-
try {
|
|
33
|
-
const urlObj = new URL(url);
|
|
34
|
-
Object.keys(params).forEach((key) => {
|
|
35
|
-
urlObj.searchParams.set(key, String(params[key]));
|
|
36
|
-
});
|
|
37
|
-
return urlObj.toString();
|
|
38
|
-
} catch {
|
|
39
|
-
throw new Error(`Invalid URL: ${url}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function removeQueryParams(url, keys) {
|
|
43
|
-
try {
|
|
44
|
-
const urlObj = new URL(url);
|
|
45
|
-
keys.forEach((key) => {
|
|
46
|
-
urlObj.searchParams.delete(key);
|
|
47
|
-
});
|
|
48
|
-
return urlObj.toString();
|
|
49
|
-
} catch {
|
|
50
|
-
throw new Error(`Invalid URL: ${url}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function updateQueryParams(url, params) {
|
|
54
|
-
try {
|
|
55
|
-
const urlObj = new URL(url);
|
|
56
|
-
Object.keys(params).forEach((key) => {
|
|
57
|
-
const value = params[key];
|
|
58
|
-
if (value === null) {
|
|
59
|
-
urlObj.searchParams.delete(key);
|
|
60
|
-
} else {
|
|
61
|
-
urlObj.searchParams.set(key, String(value));
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
return urlObj.toString();
|
|
65
|
-
} catch {
|
|
66
|
-
throw new Error(`Invalid URL: ${url}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function isAbsoluteUrl(url) {
|
|
70
|
-
try {
|
|
71
|
-
new URL(url);
|
|
72
|
-
return true;
|
|
73
|
-
} catch {
|
|
74
|
-
return /^https?:\/\//i.test(url);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function joinUrl(baseUrl, ...paths) {
|
|
78
|
-
const base = baseUrl.replace(/\/+$/, "");
|
|
79
|
-
const joinedPaths = paths.map((path) => path.replace(/^\/+|\/+$/g, "")).filter((path) => path.length > 0).join("/");
|
|
80
|
-
return `${base}/${joinedPaths}`;
|
|
81
|
-
}
|
|
82
|
-
function normalizeUrl(url) {
|
|
83
|
-
try {
|
|
84
|
-
const urlObj = new URL(url);
|
|
85
|
-
urlObj.pathname = urlObj.pathname.replace(/\/+/g, "/");
|
|
86
|
-
return urlObj.toString();
|
|
87
|
-
} catch {
|
|
88
|
-
return url;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export { buildUrl, getQueryParams, isAbsoluteUrl, joinUrl, normalizeUrl, parseUrl, removeQueryParams, setQueryParams, updateQueryParams };
|
|
93
|
-
//# sourceMappingURL=chunk-YXM6Q4JS.mjs.map
|
|
94
|
-
//# sourceMappingURL=chunk-YXM6Q4JS.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/format/url.ts"],"names":[],"mappings":"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","file":"chunk-YXM6Q4JS.mjs","sourcesContent":["/**\n * URL工具函数\n */\n\n/**\n * URL解析结果\n */\nexport interface ParsedUrl {\n protocol: string;\n host: string;\n hostname: string;\n port: string;\n pathname: string;\n search: string;\n hash: string;\n origin: string;\n}\n\n/**\n * URL解析\n * @param url - URL字符串\n * @returns 解析后的URL对象\n */\nexport function parseUrl(url: string): ParsedUrl {\n try {\n const urlObj = new URL(url);\n return {\n protocol: urlObj.protocol,\n host: urlObj.host,\n hostname: urlObj.hostname,\n port: urlObj.port,\n pathname: urlObj.pathname,\n search: urlObj.search,\n hash: urlObj.hash,\n origin: urlObj.origin,\n };\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * URL构建\n * @param parts - URL组成部分\n * @returns 构建后的URL字符串\n */\nexport function buildUrl(parts: {\n protocol?: string;\n host?: string;\n pathname?: string;\n search?: string;\n hash?: string;\n}): string {\n const { protocol = 'https:', host = '', pathname = '/', search = '', hash = '' } = parts;\n return `${protocol}//${host}${pathname}${search}${hash}`;\n}\n\n/**\n * 获取查询参数\n * @param url - URL字符串,默认为当前页面URL\n * @returns 查询参数对象\n */\nexport function getQueryParams(url?: string): Record<string, string> {\n const searchParams = url\n ? new URL(url).searchParams\n : new URLSearchParams(window.location.search);\n const params: Record<string, string> = {};\n searchParams.forEach((value, key) => {\n params[key] = value;\n });\n return params;\n}\n\n/**\n * 设置查询参数\n * @param url - URL字符串\n * @param params - 查询参数对象\n * @returns 设置后的URL字符串\n */\nexport function setQueryParams(\n url: string,\n params: Record<string, string | number | boolean>\n): string {\n try {\n const urlObj = new URL(url);\n Object.keys(params).forEach(key => {\n urlObj.searchParams.set(key, String(params[key]));\n });\n return urlObj.toString();\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * 移除查询参数\n * @param url - URL字符串\n * @param keys - 要移除的查询参数键数组\n * @returns 移除后的URL字符串\n */\nexport function removeQueryParams(url: string, keys: string[]): string {\n try {\n const urlObj = new URL(url);\n keys.forEach(key => {\n urlObj.searchParams.delete(key);\n });\n return urlObj.toString();\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * 更新查询参数\n * @param url - URL字符串\n * @param params - 要更新的查询参数对象\n * @returns 更新后的URL字符串\n */\nexport function updateQueryParams(\n url: string,\n params: Record<string, string | number | boolean | null>\n): string {\n try {\n const urlObj = new URL(url);\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value === null) {\n urlObj.searchParams.delete(key);\n } else {\n urlObj.searchParams.set(key, String(value));\n }\n });\n return urlObj.toString();\n } catch {\n throw new Error(`Invalid URL: ${url}`);\n }\n}\n\n/**\n * 判断是否为绝对URL\n * @param url - URL字符串\n * @returns 是否为绝对URL\n */\nexport function isAbsoluteUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return /^https?:\\/\\//i.test(url);\n }\n}\n\n/**\n * URL拼接\n * @param baseUrl - 基础URL\n * @param ...paths - 路径片段\n * @returns 拼接后的URL\n */\nexport function joinUrl(baseUrl: string, ...paths: string[]): string {\n const base = baseUrl.replace(/\\/+$/, '');\n const joinedPaths = paths\n .map(path => path.replace(/^\\/+|\\/+$/g, ''))\n .filter(path => path.length > 0)\n .join('/');\n return `${base}/${joinedPaths}`;\n}\n\n/**\n * URL标准化\n * @param url - URL字符串\n * @returns 标准化后的URL\n */\nexport function normalizeUrl(url: string): string {\n try {\n const urlObj = new URL(url);\n urlObj.pathname = urlObj.pathname.replace(/\\/+/g, '/');\n return urlObj.toString();\n } catch {\n return url;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transform.ts"],"names":[],"mappings":"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","file":"chunk-ZDMFMUDR.js","sourcesContent":["/**\n * 数据转换工具函数\n */\n\n/**\n * CSV转JSON\n * @param csv - CSV字符串\n * @param options - 选项\n * @returns JSON对象数组\n */\nexport function csvToJson<T extends Record<string, unknown> = Record<string, string>>(\n csv: string,\n options: {\n delimiter?: string;\n headers?: string[];\n skipEmptyLines?: boolean;\n } = {}\n): T[] {\n const { delimiter = ',', headers, skipEmptyLines = true } = options;\n\n const lines = csv.split(/\\r?\\n/).filter(line => {\n if (skipEmptyLines) {\n return line.trim().length > 0;\n }\n return true;\n });\n\n if (lines.length === 0) return [];\n\n // 解析第一行作为表头(如果没有提供)\n const headerRow = headers || lines[0].split(delimiter).map(h => h.trim());\n const dataLines = headers ? lines : lines.slice(1);\n\n return dataLines.map(line => {\n const values = parseCsvLine(line, delimiter);\n const obj: Record<string, unknown> = {};\n headerRow.forEach((header, index) => {\n const val = values[index];\n obj[header] = val !== undefined ? val : '';\n });\n return obj as T;\n });\n}\n\n/**\n * 解析CSV行(处理引号内的逗号)\n */\nfunction parseCsvLine(line: string, delimiter: string): string[] {\n const result: string[] = [];\n let current = '';\n let inQuotes = false;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n const nextChar = line[i + 1];\n\n if (char === '\"') {\n if (inQuotes && nextChar === '\"') {\n // 转义的引号\n current += '\"';\n i++; // 跳过下一个引号\n } else {\n // 切换引号状态\n inQuotes = !inQuotes;\n }\n } else if (char === delimiter && !inQuotes) {\n result.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n\n result.push(current.trim());\n return result;\n}\n\n/**\n * JSON转CSV\n * @param data - JSON对象数组\n * @param options - 选项\n * @returns CSV字符串\n */\nexport function jsonToCsv<T extends Record<string, unknown>>(\n data: T[],\n options: {\n delimiter?: string;\n headers?: string[];\n includeHeaders?: boolean;\n } = {}\n): string {\n const { delimiter = ',', headers, includeHeaders = true } = options;\n\n if (data.length === 0) return '';\n\n // 获取表头\n const headerRow = headers || Object.keys(data[0]);\n\n const lines: string[] = [];\n\n // 添加表头\n if (includeHeaders) {\n lines.push(headerRow.map(escapeCsvValue).join(delimiter));\n }\n\n // 添加数据行\n data.forEach(item => {\n const values = headerRow.map(header => {\n const value = item[header];\n return escapeCsvValue(value != null ? String(value) : '');\n });\n lines.push(values.join(delimiter));\n });\n\n return lines.join('\\n');\n}\n\n/**\n * 转义CSV值(处理引号和换行)\n */\nfunction escapeCsvValue(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\n/**\n * XML转JSON\n * @param xml - XML字符串\n * @returns JSON对象\n */\nexport function xmlToJson(xml: string): Record<string, unknown> {\n const parser = new DOMParser();\n const doc = parser.parseFromString(xml, 'text/xml');\n\n // 检查解析错误\n const parseError = doc.querySelector('parsererror');\n if (parseError) {\n throw new Error('Invalid XML: ' + parseError.textContent);\n }\n\n const result = xmlNodeToJson(doc.documentElement);\n if (typeof result === 'object' && result !== null && !Array.isArray(result)) {\n return result as Record<string, unknown>;\n }\n return { value: result };\n}\n\n/**\n * XML节点转JSON对象\n */\nfunction xmlNodeToJson(node: Node): unknown {\n // 文本节点\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n return text || null;\n }\n\n // 元素节点\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const result: Record<string, unknown> = {};\n\n // 处理属性\n if (element.attributes.length > 0) {\n const attrs: Record<string, string> = {};\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n attrs[attr.name] = attr.value;\n }\n result['@attributes'] = attrs;\n }\n\n // 处理子节点\n const children: Record<string, unknown[]> = {};\n let hasText = false;\n let textContent = '';\n\n for (let i = 0; i < element.childNodes.length; i++) {\n const child = element.childNodes[i];\n\n if (child.nodeType === Node.TEXT_NODE) {\n const text = child.textContent?.trim();\n if (text) {\n textContent += text;\n hasText = true;\n }\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n const childElement = child as Element;\n const childName = childElement.tagName;\n const childValue = xmlNodeToJson(childElement);\n\n if (!children[childName]) {\n children[childName] = [];\n }\n children[childName].push(childValue);\n }\n }\n\n // 合并结果\n if (hasText && Object.keys(children).length === 0) {\n return textContent;\n }\n\n Object.keys(children).forEach(key => {\n result[key] = children[key].length === 1 ? children[key][0] : children[key];\n });\n\n if (hasText) {\n result['#text'] = textContent;\n }\n\n return result;\n }\n\n return null;\n}\n\n/**\n * JSON转XML\n * @param json - JSON对象\n * @param rootTag - 根标签名,默认为 'root'\n * @returns XML字符串\n */\nexport function jsonToXml(json: unknown, rootTag = 'root'): string {\n return jsonToXmlElement(json, rootTag);\n}\n\n/**\n * JSON对象转XML元素\n */\nfunction jsonToXmlElement(obj: unknown, tagName: string): string {\n if (obj === null || obj === undefined) {\n return `<${tagName}></${tagName}>`;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n return `<${tagName}>${escapeXml(String(obj))}</${tagName}>`;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => jsonToXmlElement(item, tagName)).join('');\n }\n\n if (typeof obj === 'object') {\n const record = obj as Record<string, unknown>;\n let xml = `<${tagName}`;\n\n // 处理属性\n if (record['@attributes']) {\n const attrs = record['@attributes'] as Record<string, unknown>;\n Object.keys(attrs).forEach(key => {\n xml += ` ${key}=\"${escapeXml(String(attrs[key]))}\"`;\n });\n }\n\n xml += '>';\n\n // 处理文本内容\n if (record['#text']) {\n xml += escapeXml(String(record['#text']));\n }\n\n // 处理子元素\n Object.keys(record).forEach(key => {\n if (key !== '@attributes' && key !== '#text') {\n const value = record[key];\n if (Array.isArray(value)) {\n value.forEach(item => {\n xml += jsonToXmlElement(item, key);\n });\n } else {\n xml += jsonToXmlElement(value, key);\n }\n }\n });\n\n xml += `</${tagName}>`;\n return xml;\n }\n\n return `<${tagName}></${tagName}>`;\n}\n\n/**\n * 转义XML特殊字符\n */\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * YAML转JSON\n * @param yaml - YAML字符串\n * @returns JSON对象\n */\nexport function yamlToJson(yaml: string): unknown {\n // 简单的YAML解析器(支持基本语法)\n // 注意:这是一个简化版本,完整的YAML解析需要更复杂的实现\n const lines = yaml.split(/\\r?\\n/);\n const result: Record<string, unknown> = {};\n const stack: Array<{ obj: Record<string, unknown>; indent: number }> = [\n { obj: result, indent: -1 },\n ];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // 跳过空行和注释\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n // 计算缩进\n const indent = line.length - line.trimStart().length;\n const current = stack[stack.length - 1];\n\n // 如果缩进减少,弹出栈\n while (stack.length > 1 && indent <= current.indent) {\n stack.pop();\n }\n\n const match = trimmed.match(/^([^:]+):\\s*(.*)$/);\n if (match) {\n const key = match[1].trim();\n const valueStr = match[2].trim();\n\n // 处理值\n let parsedValue: unknown;\n if (valueStr === '') {\n // 空值,可能是对象或数组\n parsedValue = {};\n } else if (valueStr === '[]') {\n parsedValue = [];\n } else if (valueStr.startsWith('[') && valueStr.endsWith(']')) {\n // 数组\n parsedValue = parseYamlArray(valueStr);\n } else if (valueStr === 'true' || valueStr === 'True') {\n parsedValue = true;\n } else if (valueStr === 'false' || valueStr === 'False') {\n parsedValue = false;\n } else if (valueStr === 'null' || valueStr === 'Null' || valueStr === '~') {\n parsedValue = null;\n } else if (/^-?\\d+$/.test(valueStr)) {\n parsedValue = parseInt(valueStr, 10);\n } else if (/^-?\\d+\\.\\d+$/.test(valueStr)) {\n parsedValue = parseFloat(valueStr);\n } else if (valueStr.startsWith('\"') && valueStr.endsWith('\"')) {\n parsedValue = valueStr.slice(1, -1).replace(/\\\\\"/g, '\"');\n } else if (valueStr.startsWith(\"'\") && valueStr.endsWith(\"'\")) {\n parsedValue = valueStr.slice(1, -1);\n } else {\n parsedValue = valueStr;\n }\n\n const currentObj = stack[stack.length - 1].obj;\n if (typeof parsedValue === 'object' && parsedValue !== null && !Array.isArray(parsedValue)) {\n stack.push({ obj: parsedValue as Record<string, unknown>, indent });\n }\n currentObj[key] = parsedValue;\n }\n }\n\n return result;\n}\n\n/**\n * 解析YAML数组\n */\nfunction parseYamlArray(str: string): unknown[] {\n const content = str.slice(1, -1).trim();\n if (!content) return [];\n\n const items: unknown[] = [];\n const parts = content.split(',').map(s => s.trim());\n\n parts.forEach(part => {\n if (part.startsWith('\"') && part.endsWith('\"')) {\n items.push(part.slice(1, -1).replace(/\\\\\"/g, '\"'));\n } else if (part.startsWith(\"'\") && part.endsWith(\"'\")) {\n items.push(part.slice(1, -1));\n } else if (part === 'true' || part === 'True') {\n items.push(true);\n } else if (part === 'false' || part === 'False') {\n items.push(false);\n } else if (part === 'null' || part === 'Null') {\n items.push(null);\n } else if (/^-?\\d+$/.test(part)) {\n items.push(parseInt(part, 10));\n } else if (/^-?\\d+\\.\\d+$/.test(part)) {\n items.push(parseFloat(part));\n } else {\n items.push(part);\n }\n });\n\n return items;\n}\n\n/**\n * JSON转YAML\n * @param json - JSON对象\n * @param indent - 缩进空格数,默认为 2\n * @returns YAML字符串\n */\nexport function jsonToYaml(json: unknown, indent = 2): string {\n return jsonToYamlValue(json, 0, indent);\n}\n\n/**\n * JSON值转YAML字符串\n */\nfunction jsonToYamlValue(value: unknown, level: number, indent: number): string {\n const spaces = ' '.repeat(level * indent);\n\n if (value === null) {\n return 'null';\n }\n\n if (typeof value === 'string') {\n // 如果包含特殊字符,使用引号\n if (value.includes(':') || value.includes('\\n') || value.includes('\"')) {\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]';\n }\n return value.map(item => `${spaces}- ${jsonToYamlValue(item, level + 1, indent)}`).join('\\n');\n }\n\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n return keys\n .map(key => {\n const val: unknown = obj[key];\n const keyStr = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key) ? key : `\"${key}\"`;\n const valStr = jsonToYamlValue(val, level + 1, indent);\n\n // 如果是对象或数组,需要换行\n if (typeof val === 'object' && val !== null) {\n return `${spaces}${keyStr}:\\n${valStr}`;\n }\n\n return `${spaces}${keyStr}: ${valStr}`;\n })\n .join('\\n');\n }\n\n return String(value);\n}\n"]}
|
package/dist/chunk-ZVJ6NQUM.mjs
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
// src/browser/file.ts
|
|
2
|
-
async function calculateFileMD5(file) {
|
|
3
|
-
return new Promise((resolve, reject) => {
|
|
4
|
-
if (typeof FileReader === "undefined") {
|
|
5
|
-
reject(new Error("FileReader is not supported in this environment"));
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
const reader = new FileReader();
|
|
9
|
-
reader.onload = async (e) => {
|
|
10
|
-
try {
|
|
11
|
-
const arrayBuffer = e.target?.result;
|
|
12
|
-
if (!arrayBuffer) {
|
|
13
|
-
reject(new Error("Failed to read file"));
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const hashBuffer = await crypto.subtle.digest("SHA-256", arrayBuffer);
|
|
17
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
18
|
-
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
19
|
-
resolve(hashHex);
|
|
20
|
-
} catch (error) {
|
|
21
|
-
reject(error);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
reader.onerror = reject;
|
|
25
|
-
reader.readAsArrayBuffer(file);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
async function calculateBlobMD5(blob) {
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
if (typeof FileReader === "undefined") {
|
|
31
|
-
reject(new Error("FileReader is not supported in this environment"));
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const reader = new FileReader();
|
|
35
|
-
reader.onload = async (e) => {
|
|
36
|
-
try {
|
|
37
|
-
const arrayBuffer = e.target?.result;
|
|
38
|
-
if (!arrayBuffer) {
|
|
39
|
-
reject(new Error("Failed to read blob"));
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const hashBuffer = await crypto.subtle.digest("SHA-256", arrayBuffer);
|
|
43
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
44
|
-
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
45
|
-
resolve(hashHex);
|
|
46
|
-
} catch (error) {
|
|
47
|
-
reject(error);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
reader.onerror = reject;
|
|
51
|
-
reader.readAsArrayBuffer(blob);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
function splitFileIntoChunks(file, chunkSize) {
|
|
55
|
-
const chunks = [];
|
|
56
|
-
let start = 0;
|
|
57
|
-
while (start < file.size) {
|
|
58
|
-
const end = Math.min(start + chunkSize, file.size);
|
|
59
|
-
chunks.push(file.slice(start, end));
|
|
60
|
-
start = end;
|
|
61
|
-
}
|
|
62
|
-
return chunks;
|
|
63
|
-
}
|
|
64
|
-
function formatFileSize(bytes) {
|
|
65
|
-
if (bytes === 0) return "0 B";
|
|
66
|
-
const k = 1024;
|
|
67
|
-
const sizes = ["B", "KB", "MB", "GB", "TB"];
|
|
68
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
69
|
-
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
70
|
-
}
|
|
71
|
-
function getFileExtension(fileName) {
|
|
72
|
-
const lastDot = fileName.lastIndexOf(".");
|
|
73
|
-
return lastDot > 0 ? fileName.slice(lastDot + 1) : "";
|
|
74
|
-
}
|
|
75
|
-
function getFileNameWithoutExtension(fileName) {
|
|
76
|
-
const lastDot = fileName.lastIndexOf(".");
|
|
77
|
-
return lastDot > 0 ? fileName.slice(0, lastDot) : fileName;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export { calculateBlobMD5, calculateFileMD5, formatFileSize, getFileExtension, getFileNameWithoutExtension, splitFileIntoChunks };
|
|
81
|
-
//# sourceMappingURL=chunk-ZVJ6NQUM.mjs.map
|
|
82
|
-
//# sourceMappingURL=chunk-ZVJ6NQUM.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser/file.ts"],"names":[],"mappings":"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","file":"chunk-ZVJ6NQUM.mjs","sourcesContent":["/**\n * 文件工具函数\n */\n\n/**\n * 计算文件的MD5值(使用浏览器原生API)\n * 注意:这里使用SHA-256作为简化实现,实际项目中建议使用spark-md5库计算真正的MD5\n * @param file - 文件对象\n * @returns Promise<string> 哈希值\n */\nexport async function calculateFileMD5(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof FileReader === 'undefined') {\n reject(new Error('FileReader is not supported in this environment'));\n return;\n }\n\n const reader = new FileReader();\n reader.onload = async (e: ProgressEvent<FileReader>) => {\n try {\n const arrayBuffer = e.target?.result as ArrayBuffer;\n if (!arrayBuffer) {\n reject(new Error('Failed to read file'));\n return;\n }\n const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n // 注意:这里使用SHA-256,如果需要MD5需要使用第三方库如spark-md5\n resolve(hashHex);\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = reject;\n reader.readAsArrayBuffer(file);\n });\n}\n\n/**\n * 计算Blob的MD5值\n * 注意:这里使用SHA-256作为简化实现,实际项目中建议使用spark-md5库计算真正的MD5\n * @param blob - Blob对象\n * @returns Promise<string> 哈希值\n */\nexport async function calculateBlobMD5(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof FileReader === 'undefined') {\n reject(new Error('FileReader is not supported in this environment'));\n return;\n }\n\n const reader = new FileReader();\n reader.onload = async (e: ProgressEvent<FileReader>) => {\n try {\n const arrayBuffer = e.target?.result as ArrayBuffer;\n if (!arrayBuffer) {\n reject(new Error('Failed to read blob'));\n return;\n }\n const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n resolve(hashHex);\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = reject;\n reader.readAsArrayBuffer(blob);\n });\n}\n\n/**\n * 将文件分割为多个分片\n * @param file - 文件对象\n * @param chunkSize - 分片大小(字节)\n * @returns 分片数组\n */\nexport function splitFileIntoChunks(file: File, chunkSize: number): Blob[] {\n const chunks: Blob[] = [];\n let start = 0;\n\n while (start < file.size) {\n const end = Math.min(start + chunkSize, file.size);\n chunks.push(file.slice(start, end));\n start = end;\n }\n\n return chunks;\n}\n\n/**\n * 格式化文件大小\n * @param bytes - 字节数\n * @returns 格式化后的文件大小字符串\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n\n/**\n * 获取文件扩展名\n * @param fileName - 文件名\n * @returns 扩展名(不含点)\n */\nexport function getFileExtension(fileName: string): string {\n const lastDot = fileName.lastIndexOf('.');\n return lastDot > 0 ? fileName.slice(lastDot + 1) : '';\n}\n\n/**\n * 获取文件名(不含扩展名)\n * @param fileName - 文件名\n * @returns 文件名(不含扩展名)\n */\nexport function getFileNameWithoutExtension(fileName: string): string {\n const lastDot = fileName.lastIndexOf('.');\n return lastDot > 0 ? fileName.slice(0, lastDot) : fileName;\n}\n"]}
|
package/dist/color.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"color.js"}
|
package/dist/color.mjs
DELETED
package/dist/color.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"color.mjs"}
|
package/dist/crypto.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"crypto.js"}
|
package/dist/crypto.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { base64Decode, base64Encode, exportPrivateKey, exportPublicKey, generateRSAKeyPair, generateRandomString, generateUUID, hash, importPrivateKey, importPublicKey, rsaDecrypt, rsaEncrypt, sha256 } from './chunk-HLDFI7R2.mjs';
|
|
2
|
-
import './chunk-FJ6ZGZIA.mjs';
|
|
3
|
-
//# sourceMappingURL=crypto.mjs.map
|
|
4
|
-
//# sourceMappingURL=crypto.mjs.map
|
package/dist/crypto.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"crypto.mjs"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"data-structure.js"}
|
package/dist/data-structure.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"data-structure.mjs"}
|
package/dist/date.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"date.js"}
|
package/dist/date.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { addDays, addMonths, addYears, diffDays, endOfDay, formatDate, getDateFormatByGMT, getQuarter, getRelativeTime, getTimeFromGMT, getWeekNumber, isToday, isWeekday, isWeekend, isYesterday, startOfDay } from './chunk-5BGSUGTI.mjs';
|
|
2
|
-
import './chunk-FJ6ZGZIA.mjs';
|
|
3
|
-
//# sourceMappingURL=date.mjs.map
|
|
4
|
-
//# sourceMappingURL=date.mjs.map
|
package/dist/date.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"date.mjs"}
|
package/dist/dom.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"dom.js"}
|
package/dist/dom.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { $, $$, addClass, copyToClipboard, getElementOffset, getScrollPosition, getStyle, isInViewport, removeClass, scrollTo, setStyle, toggleClass } from './chunk-LF4CILQS.mjs';
|
|
2
|
-
import './chunk-FJ6ZGZIA.mjs';
|
|
3
|
-
//# sourceMappingURL=dom.mjs.map
|
|
4
|
-
//# sourceMappingURL=dom.mjs.map
|
package/dist/dom.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"dom.mjs"}
|
package/dist/file.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"file.js"}
|
package/dist/file.mjs
DELETED
package/dist/file.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"file.mjs"}
|
package/dist/i18n.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"i18n.js"}
|
package/dist/i18n.mjs
DELETED
package/dist/i18n.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"i18n.mjs"}
|