更新记录

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 自定义基座)。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据。所有计算/处理均在本地完成,无任何网络请求、不发送数据到任何服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。