@aoao-y33/utils 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,60 +1,253 @@
1
- ## 功能特性
2
-
3
- - 🚀 轻量级工具函数集合
4
- - 📦 基于 TypeScript 编写,提供完整类型定义
5
- - 🌲 支持 Tree Shaking,按需加载
6
- - 🧪 包含单元测试
7
-
8
- ## 使用方法
9
-
10
- ### 导入方式
11
-
12
- ````javascript
13
- // 全量导入
14
- import * as utils from '@aoaoy33/utils'
15
- // 按需导入(推荐)
16
- import { } from '@aoaoy33/utils'
17
- ````
18
-
19
- ## API 文档
20
-
21
- ### isObject(obj)
22
-
23
- 判断传入的值是否为有效对象(非 null、非 undefined、非数组的纯对象)。
24
-
25
- **参数:**
26
- - `obj` (any) - 需要判断的值
27
-
28
- **返回值:**
29
- - `boolean` - 如果是有效对象返回 true,否则返回 false
30
-
31
- **示例:**
32
-
33
- ```typescript
34
- isObject({}) // true
35
- isObject({ a: 1 }) // true
36
- isObject(null) // false
37
- isObject(undefined) // false
38
- isObject([]) // false
39
- isObject([1, 2, 3]) // false
40
- isObject('string') // false
41
- ```
42
-
43
- ### mergeDeep(source, target)
44
-
45
- 深度合并两个对象,相同属性会以 target 为准进行覆盖。
46
-
47
- **参数:**
48
- - `source` (T) - 源对象
49
- - `target` (T | Partial<T>) - 目标对象
50
-
51
- **返回值:**
52
- - `T` - 合并后的新对象
53
-
54
- **示例:**
55
- ```javascript
56
- const source = { a: 1, b: { c: 2, d: 3 } }
57
- const target = { b: { c: 4 }, e: 5 }
58
- const result = mergeDeep(source, target)
59
- console.log(result) // { a: 1, b: { c: 4, d: 3 }, e: 5 }
60
- ```
1
+ # @aoaoy33/utils
2
+
3
+ > 一个基于 Vue 3 + TypeScript 的实用工具函数库,提供 HTTP 请求、对象操作、数组处理、类型定义、UI 工具和事件总线等功能。
4
+
5
+ ## 特性
6
+
7
+ - 🎯 **TypeScript 支持**:完整的类型定义和智能提示
8
+ - 🌐 **HTTP 请求封装**:基于 axios,支持拦截器链式处理
9
+ - 🎨 **UI 工具**:主题切换、Element Plus 动态主题色生成
10
+ - 🌳 **树形数据处理**:递归平展树形结构
11
+ - 🔧 **类型工具**:Vue Emits 与 Props 类型转换
12
+ - 📡 **事件总线**:基于 mitt 的轻量级发布/订阅
13
+ - 🚀 **ESM Only**:纯 ES Module 格式,现代化打包
14
+
15
+ ## 📦 安装
16
+
17
+ ```bash
18
+ pnpm add @aoaoy33/utils
19
+ ```
20
+
21
+ ```bash
22
+ npm install @aoaoy33/utils
23
+ yarn add @aoaoy33/utils
24
+ ```
25
+
26
+ ## 🚀 快速开始
27
+
28
+ ### 初始化配置
29
+ ```typescript
30
+ import { initConfig } from '@aoaoy33/utils'
31
+ // 初始化全局配置
32
+ initConfig({ request: { baseUrl: 'https://api.example.com', timeout: 5000 } })
33
+ ```
34
+ ## 📖 API 文档
35
+
36
+ ### 配置管理 (config)
37
+
38
+ #### `initConfig(config)`
39
+
40
+ 初始化工具模块的全局配置。
41
+
42
+ ```typescript
43
+ import { initConfig } from '@aoaoy33/utils'
44
+ initConfig({ request: { baseUrl: 'https://api.example.com', timeout: 5000 } })
45
+ ```
46
+
47
+ ---
48
+
49
+ ### HTTP 请求 (requestUtils)
50
+
51
+ #### `get<T>(url, params?, config?)`
52
+
53
+ 发送 GET 请求。
54
+
55
+ ```typescript
56
+ import { get } from '@aoaoy33/utils'
57
+ interface User { id: number ,name: string }
58
+ const user = await get<User>('/user/1', { id: 1 })
59
+ ```
60
+ #### `post<T>(url, data?, config?)`
61
+
62
+ 发送 POST 请求。
63
+ ```typescript
64
+ import { post } from '@aoaoy33/utils'
65
+ const result = await post<{ success: boolean }>('/user', { name: 'John', age: 25 })
66
+ ```
67
+
68
+ #### `addInterceptors(type, interceptor)`
69
+
70
+ 添加请求/响应拦截器。
71
+
72
+ ```typescript
73
+ import { addInterceptors } from '@aoaoy33/utils'
74
+ // 请求拦截器 - 添加认证 token
75
+ addInterceptors('requestSuccess', (config) => {
76
+ const token = localStorage.getItem('token');
77
+ if (token) {
78
+ config.headers.Authorization = `Bearer ${token}` }
79
+ return config
80
+ })
81
+ // 响应拦截器 - 统一错误处理
82
+ addInterceptors('responseError', (error) => {
83
+ if (error.response?.status === 401) { // 跳转到登录页
84
+ router.push('/login') }
85
+ return error
86
+ })
87
+ // 响应成功拦截器 - 数据转换
88
+ addInterceptors('responseSuccess', (response) => {
89
+ console.log('API Response:', response.data)
90
+ return response
91
+ })
92
+ ```
93
+
94
+ ---
95
+
96
+ ### 对象工具 (objectUtils)
97
+
98
+ #### `isObject(obj)`
99
+
100
+ 判断是否是有效对象(排除 null、undefined 和数组)。
101
+
102
+ ```typescript
103
+ import { isObject } from '@aoaoy33/utils'
104
+ isObject({}) // true
105
+ isObject({ key: 1 }) // true
106
+ isObject(null) // false
107
+ isObject([]) // false
108
+ isObject('string') // false
109
+ ```
110
+
111
+ #### `mergeDeep(source, target)`
112
+
113
+ 深度合并两个对象,递归合并嵌套对象。
114
+
115
+ ```typescript
116
+ import { mergeDeep } from '@aoaoy33/utils'
117
+ const source = { a: 1, b: { c: 2, d: 3 }, e: 4 }
118
+ const target = { b: { c: 10 }, e: 5 }
119
+ const result = mergeDeep(source, target) // 返回: { a: 1, b: { c: 10, d: 3 }, e: 5 }
120
+ ```
121
+ ---
122
+
123
+ ### 数组工具 (arrayUtils)
124
+
125
+ #### `flattenTree(treeData, childrenKey?)`
126
+
127
+ 将树形结构数组平展为一维数组。
128
+
129
+ ```typescript
130
+ import {flattenTree} from '@aoaoy33/utils'
131
+
132
+ const tree = [
133
+ {
134
+ id: 1,
135
+ name: '根节点',
136
+ children: [{id: 2, name: '子节点1'}, {id: 3, name: '子节点2', children: [{id: 4, name: '孙节点'}]}]
137
+ }]
138
+ const flat = flattenTree(tree) // 返回: [ // { id: 1, name: '根节点', children: [...] }, // { id: 2, name: '子节点1' }, // { id: 3, name: '子节点2', children: [...] }, // { id: 4, name: '孙节点' } // ]
139
+ // 使用自定义子节点键名
140
+ flattenTree(data, 'subItems')
141
+ ```
142
+
143
+ ---
144
+
145
+ ### UI 工具 (uiUtils)
146
+
147
+ #### `changeMode(isDark)`
148
+
149
+ 切换页面亮色/暗色模式。
150
+ ```typescript
151
+ import { changeMode } from '@aoaoy33/utils'
152
+ // 切换到暗色模式
153
+ changeMode(true)
154
+ // 切换到亮色模式
155
+ changeMode(false)
156
+ ```
157
+ > **注意**:需要在 CSS 中定义 `.dark` 类的样式
158
+
159
+ #### `changeElTheme(color?)`
160
+
161
+ 更改 Element Plus 主题颜色,自动生成完整的主题色系列。
162
+ ```typescript
163
+ import { changeElTheme } from '@aoaoy33/utils'
164
+ // 使用自定义主题色
165
+ changeElTheme('#67C23A')
166
+ // 使用默认蓝色主题
167
+ changeElTheme()
168
+ ```
169
+ 生成的 CSS 变量:
170
+ - `--el-color-primary`: 主色调
171
+ - `--el-color-primary-light-3`: 主色调混合 20% 白色
172
+ - `--el-color-primary-light-5`: 主色调混合 30% 白色
173
+ - `--el-color-primary-light-7`: 主色调混合 40% 白色
174
+ - `--el-color-primary-light-8`: 主色调混合 50% 白色
175
+ - `--el-color-primary-light-9`: 主色调混合 60% 白色
176
+ ---
177
+
178
+ ### 类型工具 (typeUtils)
179
+
180
+ #### `EmitsToEventProps<T>`
181
+
182
+ 将 Vue Emits 接口转换为事件 Props 类型。
183
+ ```typescript
184
+ import type { EmitsToEventProps } from '@aoaoy33/utils'
185
+ // 定义 emits
186
+ interface Emits {
187
+ change: [value: string],
188
+ click: [id: number]
189
+ }
190
+ // 转换为 props 类型
191
+ type EventProps = EmitsToEventProps<Emits> // 等价于: // { onChange?: (data: string) => void , onClick?: (data: number) => void }
192
+ ```
193
+ #### `ExtractEmitsProps<T>`
194
+
195
+ 从 Vue 组件定义中提取事件 Props 类型。
196
+ ```typescript
197
+ import type { ExtractEmitsProps } from '@aoaoy33/utils'
198
+ const emits = defineEmits<{ update: [value: string], close: [] }>()
199
+ type Props = ExtractEmitsProps<typeof emits> // 结果: { onUpdate?: (data: string) => void }
200
+ ```
201
+ ---
202
+
203
+ ### 事件总线 (busUtils)
204
+
205
+ #### `bus`
206
+
207
+ 基于 mitt 的事件总线实例。
208
+
209
+ ```typescript
210
+ import { bus } from '@aoaoy33/utils'
211
+ // 监听事件
212
+ bus.on('message', (data) => { console.log('收到消息:', data) });
213
+ // 触发事件
214
+ bus.emit('message', { text: 'Hello' });
215
+ // 移除特定监听
216
+ const handler = (data) => console.log(data);
217
+ bus.on('event', handler);
218
+ bus.off('event', handler)
219
+ // 清除所有监听
220
+ bus.all.clear()
221
+ ```
222
+
223
+ ---
224
+
225
+ ## 🛠️ 开发
226
+
227
+ ```bash
228
+ #安装依赖
229
+ pnpm install
230
+
231
+ #构建生产版本
232
+ pnpm run build
233
+ ```
234
+
235
+ ---
236
+
237
+ ## 📋 依赖
238
+
239
+ ### 运行时依赖
240
+ - **axios** (^1.16.1): HTTP 客户端
241
+ - **colord** (^2.9.3): 颜色处理库
242
+ - **mitt** (^3.0.1): 事件发射器
243
+ - **lodash** (^4.17.21): 工具函数库
244
+
245
+ ### 对等依赖
246
+ - **vue** (^3.0.0): Vue.js 框架
247
+
248
+ ---
249
+
250
+ ## 📄 License
251
+
252
+ MIT License © aoaoy33
253
+
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 数组工具模块
3
+ *
4
+ * 提供常用的数组操作方法,包括树形结构的处理
5
+ */
6
+ /**
7
+ * 平展树形对象
8
+ *
9
+ * 将嵌套的树形结构数组转换为扁平的一维数组
10
+ * 通过递归遍历所有子节点,保持父节点在前的顺序
11
+ *
12
+ * @template T - 树节点的类型
13
+ * @param treeData - 树形结构数组
14
+ * @param childrenKey - 子节点的键名,默认为 'children'
15
+ * @returns {T[]} 平展后的一维数组
16
+ *
17
+ * @example
18
+ * // 树形数据
19
+ * const tree = [
20
+ * { id: 1, name: '根节点', children: [
21
+ * { id: 2, name: '子节点1' },
22
+ * { id: 3, name: '子节点2' }
23
+ * ]}
24
+ * ]
25
+ *
26
+ * // 平展结果
27
+ * flattenTree(tree)
28
+ * // 返回: [
29
+ * // { id: 1, name: '根节点', children: [...] },
30
+ * // { id: 2, name: '子节点1' },
31
+ * // { id: 3, name: '子节点2' }
32
+ * // ]
33
+ *
34
+ * @example
35
+ * // 使用自定义的子节点键名
36
+ * flattenTree(data, 'subItems')
37
+ */
38
+ export declare const flattenTree: <T>(treeData: T[], childrenKey?: keyof T) => T[];
39
+ //# sourceMappingURL=arrayUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayUtils.d.ts","sourceRoot":"","sources":["../src/arrayUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,WAAW,GAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAAC,cAAY,MAAM,CAAwB,KAAE,CAAC,EAKvF,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 事件总线工具模块
3
+ *
4
+ * 基于 mitt 实现的轻量级事件发布/订阅系统
5
+ * 用于组件间、模块间的解耦通信
6
+ */
7
+ /**
8
+ * 全局事件总线实例
9
+ *
10
+ * 提供事件的发布(emit)和订阅(on/off)功能
11
+ * 适用于任意层级组件或模块之间的通信
12
+ *
13
+ * @example
14
+ * // 监听事件
15
+ * bus.on('message', (data) => {
16
+ * console.log('收到消息:', data)
17
+ * })
18
+ *
19
+ * @example
20
+ * // 触发事件
21
+ * bus.emit('message', { text: 'Hello' })
22
+ *
23
+ * @example
24
+ * // 移除特定事件的监听
25
+ * const handler = (data) => console.log(data)
26
+ * bus.on('event', handler)
27
+ * bus.off('event', handler)
28
+ *
29
+ * @example
30
+ * // 移除所有事件监听
31
+ * bus.all.clear()
32
+ *
33
+ * @remarks
34
+ * - mitt 是一个极简的事件 emitter,体积仅 200b
35
+ * - 支持 TypeScript 类型推断
36
+ * - 建议在应用启动时定义好事件类型
37
+ */
38
+ export declare const bus: import('mitt').Emitter<Record<import('mitt').EventType, unknown>>;
39
+ //# sourceMappingURL=busUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"busUtils.d.ts","sourceRoot":"","sources":["../src/busUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,GAAG,mEAAS,CAAA"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * 工具模块配置
3
+ *
4
+ * 提供统一的配置初始化接口,用于设置工具模块的全局配置
5
+ */
6
+ /**
7
+ * 工具配置接口
8
+ *
9
+ * 定义了整个工具模块的配置选项
10
+ */
11
+ export interface UtilsConfig {
12
+ /** HTTP 请求相关配置 */
13
+ request: {
14
+ /** API 基础URL,例如:'https://api.example.com' */
15
+ baseUrl?: string;
16
+ /** 请求超时时间(毫秒),默认 3000ms */
17
+ timeout?: number;
18
+ };
19
+ }
20
+ /**
21
+ * 初始化工具配置
22
+ *
23
+ * 根据传入的配置对象初始化整个工具模块
24
+ * 目前主要用于初始化 HTTP 请求工具的 baseURL 和 timeout
25
+ *
26
+ * @param config - 工具配置对象
27
+ *
28
+ * @example
29
+ * // 初始化配置
30
+ * initConfig({
31
+ * request: {
32
+ * baseUrl: 'https://api.example.com',
33
+ * timeout: 5000
34
+ * }
35
+ * })
36
+ *
37
+ * @example
38
+ * // 使用默认配置
39
+ * initConfig({
40
+ * request: {}
41
+ * })
42
+ */
43
+ export declare const initConfig: (config: UtilsConfig) => void;
44
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,kBAAkB;IAClB,OAAO,EAAE;QACL,6CAA6C;QAC7C,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,2BAA2B;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,SAE7C,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,20 @@
1
- export * from './object';
1
+ /**
2
+ * Utils 工具库入口文件
3
+ *
4
+ * 统一导出所有工具模块,提供完整的工具函数集合:
5
+ * - config: 配置初始化
6
+ * - objectUtils: 对象操作工具
7
+ * - requestUtils: HTTP 请求工具
8
+ * - arrayUtils: 数组操作工具
9
+ * - typeUtils: TypeScript 类型工具
10
+ * - uiUtils: UI 界面工具
11
+ * - busUtils: 事件总线工具
12
+ */
13
+ export * from './config';
14
+ export * from './objectUtils';
15
+ export * from './requestUtils';
16
+ export * from './arrayUtils.ts';
17
+ export * from './typeUtils.ts';
18
+ export * from './uiUtils.ts';
19
+ export * from './busUtils.ts';
2
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAA"}