更新记录
1.0.0(2026-07-19)
首发:自研 编写的 easy-mode 工具全家桶(8 工具,全自研 无额外系统依赖):文件类型嗅探(infer magic bytes)、HTML 净化(ammon
平台兼容性
uni-app x(5.14)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | 5.0 | 12 | × | × |
nex-toolkit —— 高性能 工具全家桶(easy-mode,8 工具 / 17 API)
自研的 easy-mode 工具全家桶,全部自研(无额外系统依赖),提供 Kotlin/Swift 绑定,桥接为 uni-app 可调的 JS API。支持 App 端(Android / iOS) 与 H5 端 (同一自研核心 编译为 H5 端,见下「H5 端」);小程序不支持。
命名/签名/边界以 docs/toolkit-plugin-contract.md 契约为准。
API(17 个,8 类工具)
| 工具 | API | 说明 |
|---|---|---|
| 文件类型嗅探(infer) | sniffFileType(path) / sniffBytesBase64(b64) |
读 magic bytes 判类型,返回 FileType{mime,ext,matched} |
| HTML 净化(ammonia) | sanitizeHtml(html) / sanitizeHtmlToText(html) |
防 XSS:剥 script/style/事件处理器 / 剥全部标签留纯文本 |
| 文本 diff(similar) | textDiff(old,new) / textDiffUnified(old,new) |
词级 → JSON [{op,value}] / 行级 unified diff 串 |
| 拼音(pinyin) | toPinyin(text,style) / pinyinMatch(query,text) |
style∈plain/tone/firstLetter;"bj" 匹配 "北京" |
| 语义版本(semver) | semverCompare(a,b) / semverSatisfies(version,req) / semverValid(v) |
比较 -1/0/1 / 约束匹配 / 合法性 |
| 真随机(rand OsRng) | randomInt(min,max) / randomBytesHex(len) / shuffle(items) |
系统熵 CSPRNG:区间整数 / hex 随机 / 洗牌 |
| URL(url) | normalizeUrl(url) / parseUrl(url) |
补 scheme / 解析为 JSON 各组成部分 |
| BlurHash(blurhash+内置图像编解码) | blurhashEncode(imagePath,componentsX,componentsY) |
图片 → BlurHash 占位串,components 1..=9 |
类型
type FileType = { mime: string; ext: string; matched: boolean };
// 未识别:mime="application/octet-stream", ext="", matched=false
出错时原生层抛 ToolException(Android) / ToolError(iOS),含 InvalidParam / Io / Decode(均带 msg)。
用法
import {
sniffFileType, sanitizeHtml, textDiff, toPinyin, pinyinMatch,
semverCompare, randomInt, randomBytesHex, shuffle, normalizeUrl, parseUrl, blurhashEncode
} from '@/uni_modules/nex-toolkit';
const ft = sniffFileType('/sdcard/a.png'); // { mime:'内置图像编解码/png', ext:'png', matched:true }
const safe = sanitizeHtml('<script>x</script><b>hi</b>'); // '<b>hi</b>'
const diff = textDiff('the cat', 'the dog'); // JSON: [{op:'equal',value:'the'},...,{op:'delete',value:'cat'},{op:'insert',value:'dog'}]
const py = toPinyin('中国', 'plain'); // 'zhong guo'
const hit = pinyinMatch('bj', '北京'); // true
const cmp = semverCompare('1.2.0', '1.10.0'); // -1
const n = randomInt(1, 6); // 1..=6 内的真随机整数
const hex = randomBytesHex(16); // 32 个 hex 字符
const order = shuffle(['a', 'b', 'c']); // 一个随机排列
const url = normalizeUrl('example.com/x'); // 'https://example.com/x'
const blur = blurhashEncode('/sdcard/a.png', 4, 3); // 'L...' BlurHash 串
H5 端(H5 端引擎)
- 同一份 自研核心编到
H5 端引擎32-unknown-unknown,经 H5 端引擎-bindgen 生成 JS 绑定,utssdk/web/index.uts加载(H5 端引擎 字节 base64 内嵌,无需额外静态资源部署)。 - 内存型 15 API 均可用(嗅探 base64 / HTML 净化 / diff / 拼音 / semver / 真随机 / URL);
文件路径型 2 API(sniffFileType / blurhashEncode)H5 不支持——浏览器无文件系统,
调用即抛错(绝不静默假成功);类型嗅探请改用内存型
sniffBytesBase64。 - 真随机在 H5 端经 getrandom("js") 走浏览器
crypto.getRandomValues(CSPRNG,与移动端系统熵同级)。 randomInt在 H5 端以 f64 过桥(避免 BigInt 破坏 number 契约),min/max 须为 |v|≤2^53 的整数。- diff 超时退化机制由 similar 的
H5 端引擎32_web_time(performance.now)驱动,行为与移动端一致。 - H5 端引擎 初始化是异步的:建议应用启动时(仅 H5 分支)
await ensureReady()一次, 过早调用会抛「尚未就绪」错误。 - 真值验证:
node scripts/H5 端引擎-smoke/toolkit.test.mjs(黄金向量与 test 对齐)。
平台与调试边界
- 真随机基于设备系统 CSPRNG(
OsRng),适合令牌/盐/抽样等用途;越狱/Root 设备运行时仍可被注入调用——这是 软件级能力的固有边界(同全仓密码学/防护类插件),高敏感场景请叠加服务端校验。 - HTML 净化遵循 ammonia 默认安全档(白名单);如需自定义白名单可后续扩展。
- BlurHash 仅做编码(图片 → 占位串);解码/渲染由前端按 BlurHash 算法实现。
cli launch --compile(真机转译)与 iOS 离线自定义基座 = gated(全仓所有插件同此闸门,HBuilderX 自定义基座)。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12438998
赞赏 1934
赞赏
京公网安备:11010802035340号