Skip to content

@mbjia/utils

Package

@mbjia/utils

工具函数包,包含文件处理、URL、时间格式、事件总线、权限判断、上传辅助、并发任务等通用和业务工具。

安装

bash
npm install @mbjia/utils

何时使用

场景推荐能力
跨组件通信eventBus
文件名、文件类型、图片信息处理getFileTypetrimFileNamegetImageInfo
URL 转换和参数读取convertToHttpsgetUrlParams
上传列表合并、文件类型判断上传辅助函数和常量
并发任务或队列处理LoopWorkerPoolp-limit

主要能力

能力示例
文件与媒体getFileTypetrimFileNamegetVideoCovercheckUploadImageOrVideo
URLconvertToHttpsformatUrlFIT_IMAGE
时间格式musicDurationFormattervideoDurationFormatter
事件eventBus
权限userActionsJudgejudgePersonalUser
上传辅助mergeUploadingAssetsAndAssetListfileExtensions
并发任务LoopWorkerPoolTimer

utils 内容较多,最终使用时建议优先通过 IDE 跳转查看函数签名。

常用函数速查

函数 / 常量入参返回值说明
getFileTypefileName: stringstring获取文件扩展名,包含点号。
trimFileNamefileName: stringstring去掉扩展名后的文件名。
file2base64file: FilePromise<any>文件转 base64。
getImgRotationfile: FilePromise<number>读取图片 EXIF 方向并返回旋转角度。
convertToHttpsurl: stringstringhttp:// 转为 https://
getImageInfourl: stringPromise<{ success; image?; width?; height? }>加载图片并返回尺寸。
imageTypeList-string[]支持的图片扩展名。
videoTypeList-string[]支持的视频扩展名。

文件与媒体

名称入参返回值说明
getFileTypefileName: stringstring返回扩展名,包含 .
trimFileNamefileName: stringstring去掉扩展名。
file2base64file: FilePromise<any>文件转 data URL。
getImgRotationfile: FilePromise<number>读取 EXIF 方向,返回旋转角度。
getVideoInfourl: stringPromise<{ width; height; duration } | string>读取视频元信息,5 秒失败兜底。
getAudioInfourl: stringPromise<{ duration } | string>读取音频时长,5 秒失败兜底。
isVideourl: stringboolean根据扩展名或 data URL 判断视频。
isMusicurl: stringboolean根据扩展名或 data URL 判断音频。
getVideoCoverfile: FilePromise<string>获取视频第一秒截图;图片文件直接返回 object URL。
getMediaCoverfile: File, callbackPromise<string>生成图片/视频预览图并回调。
isGifurl: stringboolean判断 gif。
getImageFromUrlurl: stringPromise<File>从图片 URL 生成 File
getAudioStatusfile: File, supportExtensions: string[]Promise<UploadFileType>校验音频格式、大小和时长。
getVideoInfoByFileFile[] | FileList, preId?Promise<any[]>批量读取本地视频文件元信息。

常量:

名称类型说明
IMAGE_WIDTHSnumber[]七牛/OSS 图片裁剪可选宽度。
defaultImagestring默认兜底图片,OEM 站点会使用 OEM 图片。
audioExtensionsstring[]支持音频扩展名。
unSupportVideoCoverstring[]不支持直接生成视频封面的扩展名。
imageTypeListstring[]图片扩展名。
videoTypeListstring[]视频扩展名。
imgMimeType / videoMimeType / meidaMimeType / musicMimeTypestring[]文件选择器 MIME 类型。
docMimeType / excleMimeTypestring[]文档和表格 MIME 类型。
fileExtensionsRecord<string, string[]>特殊文件扩展名,如字体、cube。

URL 与图片处理

名称入参返回值说明
convertToHttpsurl: stringstringhttp://https://
transformUrlToBloburl: stringPromise<Blob>通过 XHR 获取远程文件。
wipeOffQueryStringurl: stringstring移除 ? 后的查询参数。
hasWipeOffurl?: stringboolean | string判断是否包含 ?! 裁剪信息。
wipeOffPixelInfourl: stringstring移除末尾 !1080 一类分辨率信息。
addUrlProtocolurl: stringstring// 开头地址补 https:
formatUrlurl: stringstring组合移除 query、移除像素信息、补协议。
FIT_IMAGEurl, width, height?string内网资源按最接近宽度拼接图片裁剪后缀。
normalUrlurl: stringstring移除查询参数。
rgb2Hexcolor: stringstringRGB 或短 hex 转标准 hex。
dataURLtoBlobdataurl: stringBlobdata URL 转 Blob。
getCanvasPixelColorcanvas, x, y{ rgba; rgb; hex; r; g; b; a } | null获取 canvas 指定像素颜色。
preLoadImagesrc, onload?, onerror?void预加载图片。

上传与文件选择

名称入参返回值说明
getUploadFileListStatusfiles, maxSize?, assetType?UploadFileType[] | undefined返回不合规文件列表。
checkUploadImageOrVideofiles, maxSize?, assetType?File[]返回合规文件列表。
showPicker{ mimeType; multiple? }Promise<File[]>使用 browser-fs-access 打开文件选择器。
getFileWithHandleDragEventPromise<any>从拖拽项读取 FileSystem handle。
getFileTypeByMimeTypemimeType: string{ video; image; audio }根据 MIME 判断素材类型。
mergeUploadingAssetsAndAssetList{ uploadingList; assetList }{ finalUploadingList; finalAssetList }合并上传中素材和正式素材列表,去重。
generateAssetIdfile: Filestring基于文件名、大小、类型生成本地 id。

数据结构:

ts
export type UploadFileType = {
  name: string
  file: File
  status?: 'success' | 'fail'
  reason?: string
}

时间、格式与浏览器

名称入参返回值说明
musicDurationFormatterseconds: numberstring秒转 mm:ss
videoDurationFormattertotalSeconds: numberstring秒转 hh:mm:ss
formatTimeFromMillisecondsmilliseconds, ratio?string微秒/毫秒转 hh:mm:ss,默认按 1000000 换算。
preFixZeronum, lengthstring数字前补 0。
convertBitbit: numberstringbit 转 MB/GB 文案。
checkBrowserSupportVESdk-{ WasmSupport; SABSupport; WebcodecSupport; VESdkSupport }检查 VE SDK 运行能力。
os-'windows' | 'mac' | 'linux' | undefined根据 navigator 判断系统。
isTextEllipsisbox, contentvoid监听元素判断文本是否溢出。

请求、并发与定时

名称入参返回值说明
toPromise[err, data]Promise 错误捕获工具。
SendRequest.addRequestrequest, limits?, callback?Promise限制并发请求。
SendRequestWithTimeOut.addRequestrequest, limits?, callback?Promise类似 SendRequest,队列继续执行时异步调度。
Timer.addTimercallback, firstTime?, restTime?, name?symbol模拟 interval,可等待前一次执行完成。
Timer.clearTimername: symbolvoid清除指定计时器。
Timer.clearAll-void清除所有计时器。
IIntervaltypeof Timer-Timer 别名。
strictThrottlefunc, wait, options?Function & { cancel }更严格的节流实现。

业务判断与权限

名称入参返回值说明
isLogin-string | undefined从 Cookie 读取当前 token。
getHostName-string获取当前主域名,第三方站点返回空。
handleJumpOutSideenv, blankvoid按当前环境跳转不同地址。
resetOnLogin-void清理 ORIGIN
isAliCloudMarketplaceUser-boolean判断阿里云服务市场用户。
isQiniuUser-boolean判断七牛用户。
isJdUser-boolean判断京东用户。
judgePersonalUserorganizeListboolean判断是否个人用户。
userActionsJudgeuserRightsDataobject从权益数据解析素材、作品、团队字体等操作权限。
PRODUCT_STATUSProductStatusstring | undefined转换作品状态文案。
assetStatusRecord<number, string>-素材状态文案。

AI 搜索与素材常量

ts
export enum AI_SEARCH_TYPE {
  LENS = 'lens',
  CAPTIONS = 'captions',
  CONTENT = 'content',
}

export enum AI_SEARCH_RANGE {
  CURRENT_DIR = 'currentDir',
  ALL = 'all',
  PERSONAL = 'personal',
}
名称说明
AI_SEARCH_TYPE_NONE无 AI 搜索类型。
searchRangeIsAllOrPersonal(range)判断搜索范围是否全部或个人。
searchRangeIsAll(range)判断搜索范围是否全部。
isAiSearch(type)判断是否 AI 搜索类型。
SearchBarAiSearchAfterOptionsFilter搜索栏后置选项过滤配置。
homePagePath / landingPagePath首页和未登录落地页路径。
isDefaultDir(data)判断素材目录是否默认目录。
getRatioTag(returnValue)素材比例枚举转展示文案。

其他工具

名称入参返回值说明
forEachlist, callbackvoid支持数组或对象遍历。
middleSaveDispatchdispatch, namespace, datavoidUmi dva save 分发辅助。
generateUUID-string生成 UUID 风格字符串。
getQueryParamsurl: stringRecord<string, string>解析 URL query。
getRandomId-string随机 id。
deleteSessionStorageByFieldfield: stringvoid删除 key 包含字段的 sessionStorage。
stopPropagationeventvoid阻止冒泡。
copyToClipboardtext: stringvoid复制文本。
dynamicLoading.css/jspath, callback?void动态加载 CSS 或 JS。
setupClarityprojectId?void初始化 Microsoft Clarity。

低频导出索引

这些导出在业务里出现频率较低,建议先确认已有组件是否已经封装好对应能力。

名称类型说明
loop模块导出循环/轮询工具模块。
fakeProgress模块导出假进度工具模块,常用于等待态。
filterHiddenFile模块导出过滤隐藏文件。
getNodeContent模块导出获取 DOM 节点内容。
smartSizeCovert模块导出智能尺寸转换。
veCache模块导出VE 缓存工具。
getAssetActionTypesOptions模块导出素材操作类型选项。
fromThirdWebsiteboolean是否第三方站点。
setTokenNameFunction根据站点来源设置 token cookie key。
USER_INFO / USER / USER_IDstring用户信息相关存储 key。
GUANGHE_TYPE / FROMstring渠道/来源相关常量。
isInNet(url: string) => boolean判断是否内部资源域名。
VeEnvclass/module环境判断工具。
unSupportVideoCoverMimeTypestring[]不支持生成视频封面的 MIME 类型。
USER_SOURCEenum用户来源枚举,含京东、七牛。
getImageSize(ratio: number) => string比例转尺寸枚举。
getLinkAssets / getLinkAssetsByKeyFunction根据素材 link 关系查关联素材。
eqAssetUrl(originUrl, crtUrl) => boolean比较素材 URL,忽略视频截图 query。
needAiMat(materia) => boolean判断素材是否需要 AI 抠图。
isJSON(str: string) => boolean判断字符串是否 JSON。
pipe(...fns) => Function管道函数。
isAiSaas来源于 site-envAI SaaS 环境判断。
trimmedStr(value) => string去掉首尾空格。
timerSym() => symbol生成定时器标识。
NotUseMimeTypestring[]使用扩展名而非 MIME 的文件类型。
getExtension(url: string) => string | null从 URL 获取扩展名。

MBJIA Tools 文档