@viso/shared-utils

v0.2.3

Published

一个全面的 JavaScript/TypeScript 工具库,提供各种实用的工具函数,专为现代 Web 开发设计。

Readme

@viso/shared-utils

一个全面的 JavaScript/TypeScript 工具库,提供各种实用的工具函数,专为现代 Web 开发设计。

安装

npm install @viso/shared-utils

功能特点

  • 🎯 类型安全: 完全基于 TypeScript 实现,提供完整的类型检查和智能提示
  • 🔧 工具丰富: 包含字符串、数组、对象、日期、文件等各类工具函数
  • 🌐 URL 处理: 强大的 URL 解析和处理功能
  • 📅 日期工具: 便捷的日期格式化和处理函数
  • 🔍 类型检查: 完善的类型检查和验证函数
  • 📁 文件处理: 文件大小、类型检查等实用功能
  • 🆔 UUID 生成: UUID 生成和验证工具
  • 🎭 事件系统: 轻量级事件发射器
  • 🧪 经过测试: 完整的单元测试覆盖,确保稳定性和可靠性

使用方法

字符串工具

import { validURL, getUrlWithParams, getUrlParams } from '@viso/shared-utils'

// URL 验证
const isValid = validURL('https://example.com') // true

// 添加 URL 参数
const urlWithParams = getUrlWithParams('https://api.example.com', {
  page: 1,
  size: 20
}) // 'https://api.example.com?page=1&size=20'

// 解析 URL 参数
const params = getUrlParams('https://example.com?name=John&age=25')
// { name: 'John', age: '25' }

数组工具

import { arrayUtils } from '@viso/shared-utils'

const numbers = [1, 2, 3, 4, 5]

// 数组去重
const unique = arrayUtils.unique([1, 2, 2, 3, 3, 4]) // [1, 2, 3, 4]

// 数组分块
const chunks = arrayUtils.chunk(numbers, 2) // [[1, 2], [3, 4], [5]]

// 数组扁平化
const flattened = arrayUtils.flatten([[1, 2], [3, [4, 5]]]) // [1, 2, 3, 4, 5]

对象工具

import { objectUtils } from '@viso/shared-utils'

const obj = { a: 1, b: 2, c: 3 }

// 深拷贝
const cloned = objectUtils.deepClone(obj)

// 对象合并
const merged = objectUtils.merge({ a: 1 }, { b: 2 }, { c: 3 })

// 获取嵌套属性
const value = objectUtils.get(obj, 'nested.property', 'default')

类型检查

import { isString, isNumber, isArray, isObject } from '@viso/shared-utils'

function processValue(value: unknown) {
  if (isString(value)) {
    console.log('字符串:', value.toUpperCase())
  } else if (isNumber(value)) {
    console.log('数字:', value.toFixed(2))
  } else if (isArray(value)) {
    console.log('数组长度:', value.length)
  } else if (isObject(value)) {
    console.log('对象:', Object.keys(value))
  }
}

日期工具

import { formatDate, parseDate, addDays } from '@viso/shared-utils'

const now = new Date()

// 格式化日期
const formatted = formatDate(now, 'YYYY-MM-DD') // '2024-01-15'

// 解析日期
const parsed = parseDate('2024-01-15', 'YYYY-MM-DD')

// 日期计算
const futureDate = addDays(now, 7) // 7天后的日期

文件工具

import { formatFileSize, getFileExtension, validateFileType } from '@viso/shared-utils'

// 文件大小格式化
const size = formatFileSize(1024 * 1024) // '1 MB'

// 获取文件扩展名
const ext = getFileExtension('document.pdf') // 'pdf'

// 验证文件类型
const isImage = validateFileType('image.jpg', ['jpg', 'png', 'gif']) // true

UUID 生成

import { generateUUID, validateUUID } from '@viso/shared-utils'

// 生成 UUID
const id = generateUUID() // 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'

// 验证 UUID
const isValid = validateUUID(id) // true

事件发射器

import { createEmitter } from '@viso/shared-utils'

interface Events {
  userLogin: { userId: string }
  userLogout: void
}

const emitter = createEmitter<Events>()

// 监听事件
emitter.on('userLogin', ({ userId }) => {
  console.log('用户登录:', userId)
})

// 触发事件
emitter.emit('userLogin', { userId: '123' })

枚举工具

import { enumUtils } from '@viso/shared-utils'

enum Status {
  PENDING = 'pending',
  APPROVED = 'approved',
  REJECTED = 'rejected'
}

// 获取枚举值数组
const values = enumUtils.getValues(Status) // ['pending', 'approved', 'rejected']

// 获取枚举键数组
const keys = enumUtils.getKeys(Status) // ['PENDING', 'APPROVED', 'REJECTED']

// 检查是否为有效的枚举值
const isValid = enumUtils.isValidValue(Status, 'pending') // true

模块说明

核心模块

  • is: 类型检查和验证函数
  • string: 字符串处理工具(URL、格式化等)
  • array: 数组操作工具
  • object: 对象操作工具
  • date: 日期处理工具
  • file: 文件处理工具
  • uuid: UUID 生成和验证
  • emitter: 事件发射器
  • enum: 枚举工具
  • func: 函数工具

API 参考

字符串工具

  • validURL(str): 验证是否为有效 URL
  • getUrlWithParams(url, params): 为 URL 添加查询参数
  • getUrlParams(url): 解析 URL 查询参数
  • getUrlParamValue(name): 获取指定参数值
  • getUrlHash(url): 获取 URL hash
  • getUrlScheme(url): 获取 URL 协议
  • isURL(url): 判断是否为 URL
  • isNotURL(url): 判断是否不是 URL

数组工具

  • unique(array): 数组去重
  • chunk(array, size): 数组分块
  • flatten(array): 数组扁平化
  • compact(array): 移除假值
  • intersection(arrays): 数组交集
  • union(arrays): 数组并集

对象工具

  • deepClone(obj): 深拷贝
  • merge(objects): 对象合并
  • get(obj, path, defaultValue): 获取嵌套属性
  • set(obj, path, value): 设置嵌套属性
  • pick(obj, keys): 选择指定属性
  • omit(obj, keys): 排除指定属性

类型检查

  • isString(value): 检查是否为字符串
  • isNumber(value): 检查是否为数字
  • isBoolean(value): 检查是否为布尔值
  • isArray(value): 检查是否为数组
  • isObject(value): 检查是否为对象
  • isFunction(value): 检查是否为函数
  • isDate(value): 检查是否为日期对象
  • isRegExp(value): 检查是否为正则表达式

许可证

MIT