@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.
@@ -0,0 +1,44 @@
1
+ import { DeepPartial } from 'ts-essentials';
2
+ /**
3
+ * 判断是否是有效对象
4
+ *
5
+ * 检查给定值是否为非 null、非 undefined 的普通对象类型
6
+ * 排除数组类型,确保只识别纯对象
7
+ *
8
+ * @param obj - 需要检查的值
9
+ * @returns {boolean} - 如果是有效对象返回 true,否则返回 false
10
+ *
11
+ * @example
12
+ * isObject({}) // true
13
+ * isObject({ key: 'value' }) // true
14
+ * isObject(null) // false
15
+ * isObject(undefined) // false
16
+ * isObject([]) // false
17
+ * isObject('string') // false
18
+ */
19
+ export declare const isObject: (obj: any) => boolean;
20
+ /**
21
+ * 深度合并两个对象
22
+ *
23
+ * 递归地将 target 对象的属性合并到 source 对象中
24
+ * 对于嵌套对象会进行递归合并,而不是直接覆盖
25
+ * 如果某个属性在两个对象中都是普通对象,则递归合并;否则用 target 的值覆盖 source 的值
26
+ *
27
+ * @template T - 源对象的类型,必须是 Record<string, any>
28
+ * @param source - 源对象(基础对象),作为合并的基础
29
+ * @param target - 目标对象(部分对象),包含要合并的属性,可以是深层部分类型
30
+ * @returns {T} - 合并后的新对象,保持 source 的完整类型结构
31
+ *
32
+ * @example
33
+ * const source = { a: 1, b: { c: 2, d: 3 }, e: 4 }
34
+ * const target = { b: { c: 10 }, e: 5 }
35
+ * mergeDeep(source, target)
36
+ * // 返回: { a: 1, b: { c: 10, d: 3 }, e: 5 }
37
+ *
38
+ * @remarks
39
+ * - 不会修改原始对象,而是创建新的合并对象
40
+ * - 数组会被直接覆盖,不会进行数组合并
41
+ * - null 或 undefined 值会直接覆盖源值
42
+ */
43
+ export declare const mergeDeep: <T extends Record<string, any>>(source: T, target: DeepPartial<T>) => T;
44
+ //# sourceMappingURL=objectUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectUtils.d.ts","sourceRoot":"","sources":["../src/objectUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,GAAG,KAAG,OAEnC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnD,QAAQ,CAAC,EACT,QAAQ,WAAW,CAAC,CAAC,CAAC,KACvB,CAmBF,CAAA"}
@@ -0,0 +1,84 @@
1
+ import { AxiosError, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
2
+ /**
3
+ * 拦截器集合接口
4
+ *
5
+ * 定义了请求和响应各个阶段的拦截器数组
6
+ */
7
+ interface Interceptors {
8
+ /** 请求成功拦截器数组 - 在请求发送前执行 */
9
+ requestSuccess: ((config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig)[];
10
+ /** 请求失败拦截器数组 - 处理请求错误 */
11
+ requestError: ((error: AxiosError) => AxiosError)[];
12
+ /** 响应成功拦截器数组 - 在接收到响应后执行 */
13
+ responseSuccess: ((response: AxiosResponse) => AxiosResponse)[];
14
+ /** 响应失败拦截器数组 - 处理响应错误 */
15
+ responseError: ((error: AxiosError) => AxiosError)[];
16
+ }
17
+ /** 拦截器类型工具类型 - 用于提取指定类型的拦截器函数 */
18
+ type InterceptorType<T extends keyof Interceptors> = Interceptors[T][number];
19
+ /**
20
+ * 初始化请求工具
21
+ *
22
+ * 创建新的 axios 实例并注册拦截器链
23
+ * 所有已注册的拦截器会按添加顺序依次执行
24
+ *
25
+ * @param baseUrl - API 基础URL,默认为 'http://localhost:8080'
26
+ * @param timeout - 请求超时时间(毫秒),默认为 3000ms
27
+ *
28
+ * @example
29
+ * initRequest('https://api.example.com', 5000)
30
+ */
31
+ export declare const initRequest: (baseUrl?: string, timeout?: number) => void;
32
+ /**
33
+ * 发送 GET 请求
34
+ *
35
+ * @template T - 期望的响应数据类型
36
+ * @param url - 请求URL
37
+ * @param params - URL 查询参数
38
+ * @param config - 额外的 axios 请求配置
39
+ * @returns {Promise<T>} 返回解析后的响应数据
40
+ *
41
+ * @example
42
+ * const user = await get<User>('/user/1', { id: 1 })
43
+ */
44
+ export declare const get: <T>(url: string, params?: Record<string, any>, config?: AxiosRequestConfig) => Promise<T>;
45
+ /**
46
+ * 发送 POST 请求
47
+ *
48
+ * @template T - 期望的响应数据类型
49
+ * @param url - 请求URL
50
+ * @param params - 请求体数据
51
+ * @param config - 额外的 axios 请求配置
52
+ * @returns {Promise<T>} 返回解析后的响应数据
53
+ *
54
+ * @example
55
+ * const result = await post<{ success: boolean }>('/user', { name: 'John' })
56
+ */
57
+ export declare const post: <T>(url: string, params?: Record<string, any>, config?: AxiosRequestConfig) => Promise<T>;
58
+ /**
59
+ * 添加拦截器
60
+ *
61
+ * 向指定的拦截器类型中添加自定义拦截器函数
62
+ * 拦截器会按添加顺序依次执行
63
+ *
64
+ * @template K - 拦截器类型键名
65
+ * @param type - 拦截器类型:'requestSuccess' | 'requestError' | 'responseSuccess' | 'responseError'
66
+ * @param interceptor - 拦截器函数
67
+ *
68
+ * @example
69
+ * // 添加请求拦截器 - 添加 token
70
+ * addInterceptors('requestSuccess', (config) => {
71
+ * config.headers.Authorization = `Bearer ${token}`
72
+ * return config
73
+ * })
74
+ *
75
+ * @example
76
+ * // 添加响应拦截器 - 统一处理错误
77
+ * addInterceptors('responseSuccess', (response) => {
78
+ * console.log('响应数据:', response.data)
79
+ * return response
80
+ * })
81
+ */
82
+ export declare const addInterceptors: <K extends keyof Interceptors>(type: K, interceptor: InterceptorType<K>) => void;
83
+ export {};
84
+ //# sourceMappingURL=requestUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUtils.d.ts","sourceRoot":"","sources":["../src/requestUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAc,EACV,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAClC,MAAM,OAAO,CAAC;AAEf;;;;GAIG;AACH,UAAU,YAAY;IAClB,2BAA2B;IAC3B,cAAc,EAAE,CAAC,CACb,MAAM,EAAE,0BAA0B,KACjC,0BAA0B,CAAC,EAAE,CAAC;IACnC,yBAAyB;IACzB,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;IACpD,4BAA4B;IAC5B,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,aAAa,KAAK,aAAa,CAAC,EAAE,CAAC;IAChE,yBAAyB;IACzB,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;CACxD;AAED,iCAAiC;AACjC,KAAK,eAAe,CAAC,CAAC,SAAS,MAAM,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAgB5E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,GAAI,UAAS,MAAW,EAAE,UAAS,MAAc,SAmGxE,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,GAAG,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,kBAAkB,KAAG,OAAO,CAAC,CAAC,CAG9G,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,IAAI,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,kBAAkB,KAAG,OAAO,CAAC,CAAC,CAG/G,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,YAAY,EAAE,MAAM,CAAC,EAAE,aAAa,eAAe,CAAC,CAAC,CAAC,SAErG,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { ExtractPropTypes } from 'vue';
2
+ /**
3
+ * 提取元组类型的第一个元素
4
+ *
5
+ * 用于从 emits 事件参数数组中提取第一个参数(通常是事件数据)
6
+ *
7
+ * @template T - 输入的类型数组
8
+ * @returns 数组的第一个元素类型,如果不是数组则返回 void
9
+ *
10
+ * @example
11
+ * type Args = [string, number]
12
+ * type First = ExtractFirstArg<Args> // string
13
+ *
14
+ * @example
15
+ * type Empty = ExtractFirstArg<[]> // void
16
+ */
17
+ type ExtractFirstArg<T extends any[]> = T extends [infer R, ...any[]] ? R : void;
18
+ /**
19
+ * 将 Vue Emits 接口转换为事件 Props 类型
20
+ *
21
+ * 将 Vue 组件的 emits 定义转换为父组件可以传递的事件处理器 props
22
+ * 自动将事件名转换为 onXxx 格式(如 'change' -> 'onChange')
23
+ *
24
+ * @template T - Vue 组件的 Emits 接口类型
25
+ * @returns 转换后的事件 Props 类型对象
26
+ *
27
+ * @example
28
+ * // 假设有一个 emits 定义
29
+ * interface Emits {
30
+ * change: [value: string]
31
+ * click: [id: number, event: MouseEvent]
32
+ * }
33
+ *
34
+ * // 转换后的类型
35
+ * type EventProps = EmitsToEventProps<Emits>
36
+ * // 等价于:
37
+ * // {
38
+ * // onChange?: (data: string) => void
39
+ * // onClick?: (data: number) => void // 只取第一个参数
40
+ * // }
41
+ *
42
+ * @remarks
43
+ * - 事件名会自动首字母大写并添加 'on' 前缀
44
+ * - 只提取事件回调的第一个参数作为 data 参数
45
+ * - 如果事件没有参数,则类型为 never
46
+ */
47
+ export type EmitsToEventProps<T> = {
48
+ [K in keyof T as `on${Capitalize<string & K>}`]?: (T[K] extends any[] ? (data: ExtractFirstArg<T[K]>) => void : never);
49
+ };
50
+ /**
51
+ * 从类型中提取事件 Props
52
+ *
53
+ * 过滤出所有以 'on' 开头的属性,保留事件处理器的类型定义
54
+ *
55
+ * @template T - 输入的类型对象
56
+ * @returns 只包含事件 Props 的类型对象
57
+ *
58
+ * @example
59
+ * interface AllProps {
60
+ * modelValue: string
61
+ * onChange: (value: string) => void
62
+ * onClick: () => void
63
+ * }
64
+ *
65
+ * type EventProps = RawExtractEventProps<AllProps>
66
+ * // 结果: { onChange: (value: string) => void, onClick: () => void }
67
+ */
68
+ type RawExtractEventProps<T> = {
69
+ [K in keyof T as K extends `on${infer _}` ? K : never]: T[K];
70
+ };
71
+ /**
72
+ * 从 Vue 组件的 Emits 定义中提取完整的事件 Props 类型
73
+ *
74
+ * 结合了 ExtractPropTypes 和 RawExtractEventProps,
75
+ * 用于从完整的组件定义中精确提取事件相关的 props
76
+ *
77
+ * @template T - Vue 组件的 Emits 定义或完整组件类型
78
+ * @returns 提取后的事件 Props 类型
79
+ *
80
+ * @example
81
+ * // 在组件中使用
82
+ * const emits = defineEmits<{
83
+ * change: [value: string]
84
+ * update: [data: any]
85
+ * }>()
86
+ *
87
+ * type EventProps = ExtractEmitsProps<typeof emits>
88
+ * // 结果: { onChange?: (data: string) => void, onUpdate?: (data: any) => void }
89
+ *
90
+ * @remarks
91
+ * 这个类型工具通常用于:
92
+ * - 组件封装时提取子组件事件
93
+ * - 创建高阶组件时透传事件
94
+ * - 类型安全的组件事件代理
95
+ */
96
+ export type ExtractEmitsProps<T> = RawExtractEventProps<ExtractPropTypes<T>>;
97
+ export {};
98
+ //# sourceMappingURL=typeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeUtils.d.ts","sourceRoot":"","sources":["../src/typeUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,KAAK,CAAC;AAE1C;;;;;;;;;;;;;;GAcG;AACH,KAAK,eAAe,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;KAC9B,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC;CACzH,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,oBAAoB,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * UI 工具模块
3
+ *
4
+ * 提供用户界面相关的工具函数,包括:
5
+ * - 主题模式切换(亮色/暗色)
6
+ * - Element Plus 主题颜色动态生成
7
+ */
8
+ /**
9
+ * 切换页面主题模式
10
+ *
11
+ * 通过在 html 根节点上添加或移除 'dark' class 来切换亮色/暗色模式
12
+ * 需要配合 CSS 中的 .dark 类选择器使用
13
+ *
14
+ * @param bool - true 为切换到暗色模式,false 为切换到亮色模式
15
+ *
16
+ * @example
17
+ * // 切换到暗色模式
18
+ * changeMode(true)
19
+ *
20
+ * @example
21
+ * // 切换到亮色模式
22
+ * changeMode(false)
23
+ *
24
+ * @remarks
25
+ * 该函数依赖于浏览器环境,在非浏览器环境中会直接返回
26
+ */
27
+ export declare const changeMode: (bool: boolean) => void;
28
+ /**
29
+ * 更改 Element Plus 主题颜色
30
+ *
31
+ * 根据传入的主色调生成一套完整的 Element Plus 主题色变量
32
+ * 并通过 CSS 自定义属性应用到根元素上
33
+ *
34
+ * @param color - 主色调的十六进制颜色值,如 '#409eff'。如果不传则使用默认蓝色主题
35
+ *
36
+ * @example
37
+ * // 使用自定义主题色
38
+ * changeElTheme('#67C23A')
39
+ *
40
+ * @example
41
+ * // 使用默认主题色(#409eff)
42
+ * changeElTheme()
43
+ *
44
+ * @remarks
45
+ * 生成的主题色包括:
46
+ * - --el-color-primary: 主色调
47
+ * - --el-color-primary-light-3: 主色调混合 20% 白色
48
+ * - --el-color-primary-light-5: 主色调混合 30% 白色
49
+ * - --el-color-primary-light-7: 主色调混合 40% 白色
50
+ * - --el-color-primary-light-8: 主色调混合 50% 白色
51
+ * - --el-color-primary-light-9: 主色调混合 60% 白色
52
+ *
53
+ * 这些变量会被设置到 :root 元素上,Element Plus 组件会自动使用这些变量
54
+ */
55
+ export declare const changeElTheme: (color?: string) => void;
56
+ //# sourceMappingURL=uiUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiUtils.d.ts","sourceRoot":"","sources":["../src/uiUtils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,SAUvC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,SAmC3C,CAAA"}
package/package.json CHANGED
@@ -1,25 +1,42 @@
1
1
  {
2
2
  "name": "@aoao-y33/utils",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
+ "description": "工具包",
5
+ "type": "module",
4
6
  "private": false,
5
- "description": "js工具包",
6
- "main": "index.js",
7
+ "main": "./dist/index.js",
7
8
  "module": "./dist/index.js",
8
9
  "types": "./dist/index.d.ts",
10
+ "author": "aoaoy33",
11
+ "license": "ISC",
9
12
  "exports": {
10
13
  ".": {
11
14
  "types": "./dist/index.d.ts",
12
15
  "import": "./dist/index.js"
13
16
  }
14
17
  },
18
+ "files": [
19
+ "dist"
20
+ ],
15
21
  "scripts": {
22
+ "ins": "pnpm install",
16
23
  "build": "vite build",
17
- "add": "pnpm install",
18
- "publish": "npm publish --access public"
24
+ "pub": "npm publish --access public"
19
25
  },
20
- "keywords": [],
21
- "author": "",
22
- "license": "ISC",
23
- "packageManager": "pnpm@10.32.1",
24
- "dependencies": {}
25
- }
26
+ "keywords": [
27
+ "utils",
28
+ "tools",
29
+ "vue3",
30
+ "typescript",
31
+ "axios",
32
+ "request"
33
+ ],
34
+ "dependencies": {
35
+ "axios": "^1.16.1",
36
+ "colord": "^2.9.3",
37
+ "mitt": "^3.0.1"
38
+ },
39
+ "peerDependencies": {
40
+ "axios": "^1.16.1"
41
+ }
42
+ }
package/dist/object.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export declare const isObject: (obj: any) => boolean;
2
- export declare const mergeDeep: <T>(source: T, target: T | Partial<T>) => T;
3
- //# sourceMappingURL=object.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,GAAI,KAAK,GAAG,KAAG,OAEnC,CAAA;AAGD,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,CAWhE,CAAA"}
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './object'
package/src/object.ts DELETED
@@ -1,19 +0,0 @@
1
- import {merge, mergeWith} from 'lodash';
2
- //判断是否是有效对象
3
- export const isObject = (obj: any): boolean => {
4
- return ![null, undefined].includes(obj) && typeof obj === 'object' && !Array.isArray(obj);
5
- }
6
-
7
- //深度合并两个对象
8
- export const mergeDeep = <T>(source: T, target: T | Partial<T>): T => {
9
- if (!isObject(target)) {
10
- return target as T;
11
- }
12
- return mergeWith(source, target, (a, b) => {
13
- if (!isObject(a)) {
14
- return b;
15
- }
16
- return merge(a, b);
17
- })
18
-
19
- }
@@ -1,56 +0,0 @@
1
- import {isObject, mergeDeep} from "../src";
2
- import {describe} from "vitest";
3
-
4
- describe('isObject 测试', () => {
5
- it('传入普通对象应该返回 true', () => {
6
- expect(isObject({name: 'ax-y33'})).toBe(true)
7
- })
8
-
9
- it('传入数组应该返回 true', () => {
10
- expect(isObject([1, 2, 3])).toBe(true)
11
- })
12
-
13
- it('传入字符串或数字应该返回 false', () => {
14
- expect(isObject('hello')).toBe(false)
15
- expect(isObject(123)).toBe(false)
16
- })
17
- })
18
-
19
- describe('mergeDeep 测试', () => {
20
- it('传入基本类型', () => {
21
- const source = 1;
22
- const target = 2;
23
- const result = 2;
24
- expect(mergeDeep(source, target)).toEqual(result)
25
- })
26
- it('传入数组类型', () => {
27
- const source = [1, 2];
28
- const target = [2, 3, 4];
29
- const result = [2, 3, 4];
30
- expect(mergeDeep(source, target)).toEqual(result)
31
- })
32
- it('传入浅层对象', () => {
33
- const source = {name: "admin"}
34
- const target = {name: 'system'}
35
- const result = {name: 'system'}
36
- expect(mergeDeep(source, target)).toEqual(result)
37
- })
38
- it('传入浅层对象2', () => {
39
- const source = {name: "admin"}
40
- const target = {name: 'admin', age: 12}
41
- const result = {name: 'admin', age: 12}
42
- expect(mergeDeep(source, target)).toEqual(result)
43
- })
44
- it('传入深层对象', () => {
45
- const source = {name: "admin", info: {age: 1}}
46
- const target = {name: 'system', info: {age: 12, sex: '男'}}
47
- const result = {name: 'system', info: {age: 12, sex: '男'}}
48
- expect(mergeDeep(source, target)).toEqual(result)
49
- })
50
- it('传入深层对象2', () => {
51
- const source = {name: "admin", info: {age: [1, 2], sex: '男'}}
52
- const target = {info: {age: [2, 3]}}
53
- const result = {name: 'admin', info: {age: [2, 3], sex: '男'}}
54
- expect(mergeDeep(source, target)).toEqual(result)
55
- })
56
- })
package/tsconfig.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "extends": "@vue/tsconfig/tsconfig.dom.json",
3
- "compilerOptions": {
4
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
- "types": [
6
- "vite/client",
7
- "vitest/globals"
8
- ],
9
- "declaration": true,
10
- "declarationMap": true,
11
- "emitDeclarationOnly": false,
12
- "rootDir": "./src",
13
- /* Linting */
14
- "noUnusedLocals": true,
15
- "noUnusedParameters": true,
16
- "erasableSyntaxOnly": true,
17
- "noFallthroughCasesInSwitch": true,
18
- "baseUrl": ".",
19
- "paths": {
20
- "@/*": [
21
- "src/*"
22
- ]
23
- }
24
- },
25
- "include": [
26
- "src/**/*.ts",
27
- "test/**/*.ts"
28
- ]
29
- }
package/vite.config.ts DELETED
@@ -1,46 +0,0 @@
1
- import {defineConfig} from "vitest/config";
2
- import vue from '@vitejs/plugin-vue'
3
- import {resolve} from 'path'
4
- import dts from "vite-plugin-dts"
5
-
6
- export default defineConfig({
7
- plugins: [vue(),
8
- dts({
9
- tsconfigPath: "./tsconfig.json",
10
- outDirs: "dist",
11
- exclude: ["src/test"]
12
- })
13
- ],
14
- build: {
15
- lib: {
16
- entry: resolve(__dirname, 'src/index.ts'),
17
- formats: ['es'],
18
- fileName: () => `index.js`
19
- },
20
- rollupOptions: {
21
- external: ['vue'],
22
- output: {
23
- globals: {
24
- vue: 'Vue'
25
- },
26
- assetFileNames: (assetInfo) => {
27
- if (assetInfo.name?.endsWith('.css')) {
28
- return 'index.css'; // 生成 index.css
29
- }
30
- return 'assets/[name]-[hash][extname]';
31
- }
32
- },
33
- },
34
- outDir: 'dist',
35
- sourcemap: false
36
- },
37
- resolve: {
38
- alias: {
39
- '@': resolve(__dirname, 'src')
40
- }
41
- },
42
- test: {
43
- globals: true,
44
- environment: 'jsdom',
45
- }
46
- })