Skyroc Admin Docs
@core 基础设施

@skyroc/utils

平台无关的通用工具函数,含 ./path 与 ./web 子入口

概览

包名@skyroc/utils
版本2.0.2
依赖clsx、colord、crypto-js、dayjs、klona、localforage、nanoid、radash、tailwind-merge
子入口.(平台无关)、./path(路径工具)、./web(仅浏览器)
测试✅ 28 个测试文件

主入口还 export * from 'radash',即 radash 的全部工具函数都可从 @skyroc/utils 取用。

三个入口的边界

入口安全平台内容
.Web / RN / Node数组、对象、日期、加密、emitter、storage 等纯函数
./path通用深层路径读写、unflatten、变更路径收集
./web仅浏览器文件下载、开窗、HTML class、React props 合并

Native 端只引用 .,不会误打包浏览器 API。

主入口能力

模块关键导出
cncn(...inputs) — clsx + tailwind-merge 合并类名
cryptoCrypto<T> — AES 加解密(.encrypt / .decrypt
storagecreateStorage<T>(type, prefix)createLocalforage<T>(driver)
arraytoArrayarraysEqual
objectshallowEqualdiffObjectisObjectType
emitterEmitter — 类型安全事件总线(on/emit/off)
createSubject轻量 Rx Subject
singleflightSingleflight / createSingleflight — 合并并发请求
priority-queuePriorityQueue — 泛型优先级队列
queryparseQuery / stringifyQuery — URL query 解析
reg常用正则常量(REG_PHONEREG_EMAILREG_PWD…)
utilsnoopisNilisHttpUrlisMacOsisPC 等环境/类型守卫

date 子模块

提供完整的日期工具(基于 dayjs),分四类:

类别函数
边界startOfDayendOfMonthgetTodayRangegetLastDaysRange
运算addDatesubtractDatediffDatefromNowtoTimestamp
比较isBeforeisAfterisTodayisYesterdayisValidDate
格式化formatDateformatDateTimeformatDurationhumanizeDuration
import { formatDate, getTodayRange, isToday } from '@skyroc/utils';

formatDate(Date.now());        // '2026-06-02'
const [start, end] = getTodayRange();
isToday('2026-06-02');         // true

./path 子入口

围绕「对象深层路径」的读写与变更追踪:

import { deepGet, deepSet, unflatten, collectChangedLeafPaths } from '@skyroc/utils/path';

deepGet(obj, 'user.address.city');
deepSet(obj, ['list', 0, 'name'], 'Alice');
unflatten({ 'a.b': 1, 'a.c': 2 }); // { a: { b: 1, c: 2 } }

这套工具是 @skyroc/form 字段管理的底层支撑。

./web 子入口

import { downloadFileFromUrl, openWindow, toggleHtmlClass, mergeProps } from '@skyroc/utils/web';

downloadFileFromUrl('/export.xlsx', 'report.xlsx');
openWindow('https://example.com', { target: '_blank' });
toggleHtmlClass('dark', true);
函数用途
downloadFileFrom*从 url / base64 / blob 触发下载
openWindow安全地打开新窗口
toggleHtmlClass切换 <html> 上的 class(暗色模式等)
mergeProps / withClassNameReact props 合并
getEventValueisCheckBoxInput表单 input 工具

常用示例

import { Crypto, createStorage, Emitter } from '@skyroc/utils';

// 类型安全的本地存储
const storage = createStorage<{ token: string }>('local', 'app:');
storage.set('token', 'xxx');

// 加密
const crypto = new Crypto<{ id: number }>('secret-key');
const enc = crypto.encrypt({ id: 1 });
const dec = crypto.decrypt(enc); // { id: 1 } | null

// 事件总线
const emitter = new Emitter<{ login: string }>();
emitter.on('login', name => console.log(name));
emitter.emit('login', 'admin');

On this page