jxk 函数工具库
jxk (意为: 极致、小巧、快捷) 的函数工具库,包含了常用的函数
🎠 在线演示 · 📚 完整文档 · 📖 API 参考
中文 | English
🚀 特性
- 🔒 零依赖: 完全原生实现,无需引入任何第三方依赖
- 📦 模块化: 按功能分类组织,支持按需引入,减少包体积
- 🛡️ 国密算法: 集成 SM2、SM3、SM4 国家密码标准算法
- 📝 TypeScript: 提供完整的类型定义文件
- ⚡ 高性能: 注重运行效率和内存占用优化
- 🧪 高质量: 完善的单元测试,测试覆盖率 > 90%
- 📖 文档完善: 详细的 JSDoc 注释和使用示例
📋 目录
📦 安装
# 使用 pnpm (推荐)
pnpm add jxk
# 使用 yarn
yarn add jxk
# 使用 npm
npm install jxk
🎯 快速开始
ES6 模块导入
// 按需导入(推荐,支持 Tree Shaking)
import { chunk, sm2, copyText, format } from 'jxk'
// 全量导入
import jxk from 'jxk'
CommonJS 导入
const { chunk, sm2, copyText } = require('jxk')
基础使用示例
import { chunk, camelCase, sm3, copyText } from 'jxk'
// 数组分块
const chunks = chunk([1, 2, 3, 4, 5], 2)
console.log(chunks) // [[1, 2], [3, 4], [5]]
// 字符串转驼峰
const camelStr = camelCase('hello-world')
console.log(camelStr) // 'helloWorld'
// 国密 SM3 哈希
const hash = sm3('Hello, World!')
console.log(hash) // SM3 哈希值
// 复制文本到剪贴板(浏览器环境)
await copyText('复制的内容')
🎨 核心功能
🔢 数组处理
强大的数组操作函数集合:
import {
chunk, // 数组分块
unique, // 数组去重
toTree, // 转换为树结构
shuffle, // 随机排序
groupBy // 分组
} from 'jxk'
// 数组分块
chunk(['a', 'b', 'c', 'd'], 2) // [['a', 'b'], ['c', 'd']]
// 数组去重
unique([1, 2, 2, 3, 3, 4]) // [1, 2, 3, 4]
// 扁平数据转树结构
const flatData = [
{ id: 1, name: '根节点', parentId: null },
{ id: 2, name: '子节点', parentId: 1 }
]
toTree(flatData) // 树形结构
🔤 字符串处理
丰富的字符串操作工具:
import {
camelCase, // 驼峰命名
kebabCase, // 短横线命名
truncate, // 字符串截取
randomString // 随机字符串
} from 'jxk'
camelCase('hello-world') // 'helloWorld'
kebabCase('helloWorld') // 'hello-world'
truncate('很长的字符串', 5) // '很长的字...'
randomString(8) // 'aB3kL9mN'
🕐 时间处理
基于 date-fns 的时间格式化:
import { format, addDays, diffDays } from 'jxk'
const now = new Date()
format(now, 'yyyy-MM-dd HH:mm:ss') // '2024-08-16 15:30:45'
addDays(now, 7) // 7天后的日期
diffDays(date1, date2) // 计算日期差
🌐 浏览器工具
浏览器环境的实用功能:
import {
copyText, // 复制文本
getQueryParams, // 获取URL参数
openFullscreen, // 全屏控制
urlEncode // URL编码
} from 'jxk'
// 复制文本到剪贴板
await copyText('Hello, World!')
// 解析URL参数
getQueryParams('?name=john&age=30') // { name: 'john', age: '30' }
// 打开全屏
openFullscreen(document.body)
✅ 类型检查
全面的 JavaScript 类型检查:
import {
isString, isNumber, isArray,
isEmail, isPhone, isIdCard
} from 'jxk'
isString('hello') // true
isEmail('user@example.com') // true
isPhone('13812345678') // true
isIdCard('身份证号') // true/false
🎭 数据脱敏
保护敏感信息的脱敏工具:
import { maskPhone, maskEmail, maskIdCard } from 'jxk'
maskPhone('13812345678') // '138****5678'
maskEmail('user@example.com') // 'u***@example.com'
maskIdCard('身份证号') // '3301**********1234'
🛡️ 国密算法
符合国家标准的密码算法实现:
SM2 椭圆曲线算法
import { sm2 } from 'jxk'
// 生成密钥对
const keyPair = sm2.generateKeyPairHex()
console.log(keyPair.publicKey) // 公钥
console.log(keyPair.privateKey) // 私钥
// 加密解密
const plaintext = 'Hello, SM2!'
const encrypted = sm2.doEncrypt(plaintext, keyPair.publicKey)
const decrypted = sm2.doDecrypt(encrypted, keyPair.privateKey)
console.log(decrypted) // 'Hello, SM2!'
// 数字签名
const signature = sm2.doSignature(plaintext, keyPair.privateKey)
const isValid = sm2.doVerifySignature(plaintext, signature, keyPair.publicKey)
console.log(isValid) // true
SM3 哈希算法
import { sm3 } from 'jxk'
const hash = sm3('Hello, World!')
console.log(hash) // SM3 哈希值
SM4 对称加密
import { sm4 } from 'jxk'
const key = '0123456789abcdeffedcba9876543210'
const plaintext = 'Hello, SM4!'
const encrypted = sm4.encrypt(plaintext, key)
const decrypted = sm4.decrypt(encrypted, key)
console.log(decrypted) // 'Hello, SM4!'
📚 文档
📖 核心文档
🌐 在线资源
📝 函数列表
数组处理 (array)
chunk
- 数组分块concat
- 数组合并unique
- 数组去重sort
- 数组排序toTree
- 转换为树结构fromTree
- 树结构展平shuffle
- 随机排序groupBy
- 数组分组intersection
- 数组交集max/min
- 最大/最小值
字符串处理 (string)
camelCase
- 驼峰命名转换kebabCase
- 短横线命名snakeCase
- 下划线命名capitalize
- 首字母大写truncate
- 字符串截取randomString
- 随机字符串
时间处理 (time)
format
- 时间格式化addDays/subDays
- 日期加减diffDays
- 日期差计算isValid
- 日期有效性startOfDay/endOfDay
- 日期边界
浏览器工具 (browser)
copyText
- 复制文本getQueryParams
- URL参数解析openFullscreen/exitFullScreen
- 全屏控制urlEncode/urlDecode
- URL编码openWindow
- 窗口管理
类型检查 (is)
isString/isNumber/isArray
- 基础类型isEmail/isPhone/isUrl
- 格式验证isIdCard
- 身份证验证isEmpty/isNull
- 空值检查
国密算法 (sm)
sm2
- 椭圆曲线公钥算法sm3
- 哈希摘要算法sm4
- 对称加密算法
杂项工具 (misc)
debounce/throttle
- 防抖节流deepClone
- 深拷贝delay
- 延迟执行download
- 文件下载
🧪 测试
项目具有完善的测试体系:
# 运行测试
npm test
# 生成覆盖率报告
npm run test:coverage
# 监听模式
npm run test:watch
测试覆盖率目标:
- 语句覆盖率: > 90%
- 分支覆盖率: > 85%
- 函数覆盖率: > 95%
- 行覆盖率: > 90%
🔧 开发
环境要求
- Node.js >= 18.0.0
- pnpm >= 8.0.0
开发命令
# 安装依赖
pnpm install
# 启动开发服务器
npm run dev
# 构建项目
npm run build
# 生成文档
npm run docs
# 代码检查
npm run lint
贡献
欢迎贡献!请阅读 CONTRIBUTING.md 文件以了解我们的行为准则、提交拉取请求的方式等详情。