zcw-shared 2.0.1 → 2.4.0

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.
Files changed (58) hide show
  1. package/README.md +17 -180
  2. package/dist/constants/apiErrorCodes.d.ts +17 -0
  3. package/dist/constants/apiErrorCodes.js +26 -0
  4. package/dist/constants/apiErrorCodes.js.map +1 -0
  5. package/dist/constants/authStorage.d.ts +4 -0
  6. package/dist/constants/authStorage.js +5 -0
  7. package/dist/constants/authStorage.js.map +1 -0
  8. package/dist/functions/file/getIconfontNameByExtension.d.ts +7 -0
  9. package/dist/functions/file/getIconfontNameByExtension.js +140 -0
  10. package/dist/functions/file/getIconfontNameByExtension.js.map +1 -0
  11. package/dist/functions/im/formatImChatConversationListTime.d.ts +1 -0
  12. package/dist/functions/im/formatImChatConversationListTime.js +19 -0
  13. package/dist/functions/im/formatImChatConversationListTime.js.map +1 -0
  14. package/dist/functions/image/getImageDimensions.js +15 -5
  15. package/dist/functions/image/getImageDimensions.js.map +1 -1
  16. package/dist/functions/qiankun/createQiankunVueApp.d.ts +17 -0
  17. package/dist/functions/qiankun/createQiankunVueApp.js +40 -0
  18. package/dist/functions/qiankun/createQiankunVueApp.js.map +1 -0
  19. package/dist/functions/storage/useDexieShortcuts.d.ts +28 -0
  20. package/dist/functions/storage/useDexieShortcuts.js +54 -0
  21. package/dist/functions/storage/useDexieShortcuts.js.map +1 -0
  22. package/dist/functions/storage/useLocalStorage.js +11 -12
  23. package/dist/functions/storage/useLocalStorage.js.map +1 -1
  24. package/dist/functions/storage/useSessionStorage.js +11 -12
  25. package/dist/functions/storage/useSessionStorage.js.map +1 -1
  26. package/dist/functions/storage/useStorageWithIndexedDB.js +4 -5
  27. package/dist/functions/storage/useStorageWithIndexedDB.js.map +1 -1
  28. package/dist/functions/uniapp/app-plus/buildIOSApp.js +12 -0
  29. package/dist/functions/uniapp/app-plus/buildIOSApp.js.map +1 -1
  30. package/dist/schemas/auth.schema.d.ts +10 -5
  31. package/dist/schemas/auth.schema.js +2 -1
  32. package/dist/schemas/auth.schema.js.map +1 -1
  33. package/dist/schemas/video.schema.d.ts +21 -21
  34. package/dist/schemas/video.schema.js +2 -2
  35. package/dist/vue-hooks/browser/useBridgeMessage.js +7 -8
  36. package/dist/vue-hooks/browser/useBridgeMessage.js.map +1 -1
  37. package/package.json +34 -1
  38. package/types/address.d.ts +38 -0
  39. package/types/auth.d.ts +3 -1
  40. package/types/checkin-config.d.ts +28 -0
  41. package/types/cloud-disk-config.d.ts +36 -0
  42. package/types/im-api.d.ts +118 -0
  43. package/types/im-chat.d.ts +49 -0
  44. package/types/music.d.ts +33 -0
  45. package/types/notification.d.ts +37 -0
  46. package/types/order.d.ts +61 -0
  47. package/types/oss.d.ts +26 -0
  48. package/types/page-config.d.ts +14 -0
  49. package/types/payment.d.ts +21 -0
  50. package/types/performance.d.ts +12 -0
  51. package/types/points-config.d.ts +44 -0
  52. package/types/product.d.ts +41 -0
  53. package/types/rbac.d.ts +24 -0
  54. package/types/report.d.ts +29 -0
  55. package/types/review.d.ts +13 -0
  56. package/types/uniapp-ios-build.d.ts +2 -0
  57. package/types/user.d.ts +36 -0
  58. package/types/video.d.ts +2 -2
package/README.md CHANGED
@@ -38,7 +38,8 @@ src/
38
38
  ├── schemas/ # Zod Schema 定义(用于运行时验证)
39
39
  │ ├── auth.schema.ts # 认证相关 Schema
40
40
  │ └── video.schema.ts # 视频相关 Schema
41
- └── hooks/ # React/Vue Hooks
41
+ ├── vue-hooks/ # Vue 组合式 API(依赖注入 env)
42
+ └── reactive/ # 跨框架响应式辅助(可选)
42
43
 
43
44
  types/ # 应用层类型定义
44
45
  ├── auth.d.ts # 认证相关类型
@@ -53,14 +54,13 @@ references/ # 环境API类型声明
53
54
  ├── dom.d.ts # DOM API
54
55
  └── ...
55
56
 
56
- playground/ # 测试和验证环境
57
- └── tests/ # 测试用例
57
+ docs/ # VitePress 文档站(含 API 与浏览器端交互演示组件)
58
58
  ```
59
59
 
60
60
  ### 架构层次关系
61
61
 
62
62
  ```
63
- 应用层 (functions/ + hooks/)
63
+ 应用层 (functions/ + vue-hooks/ + reactive/)
64
64
  ↓ 依赖注入
65
65
  环境抽象层 (references/)
66
66
  ↓ 类型约束
@@ -173,7 +173,8 @@ import type { Ref } from '../../references/vue.d' // Vue 没有 references 文
173
173
  - 必须组合 `useStorage` 与具体适配器(如 `useLocalStorage`、`useSessionStorage`、`useStorageWithIndexedDB`)创建 `storage` 对象
174
174
  - Env 类型统一定义为 `ReturnType<typeof useStorage<string>>`(或自定义 value 类型)
175
175
  - 在实现中仅使用 `storage.get/set/remove/clear` 等 Promise API,避免混用同步方法
176
- - Playground、测试、文档示例同样需要使用 `useStorage`,确保行为与生产代码一致
176
+ - 文档站中的 VitePress 交互示例同样需要使用 `useStorage` 与适配器,确保行为与生产代码一致
177
+ - **多表结构化 IndexedDB**(多 object store、复合索引、`transaction`)可使用 **`useDexieShortcuts`**:将 `Dexie` 构造器与 `indexedDB` 注入 `deps`,应用侧安装 peer 依赖 **`dexie`**(版本范围见 `package.json` 的 `peerDependencies`)。详见 `docs/api/storage/useDexieShortcuts.md`。
177
178
 
178
179
  #### 规则 5:每个函数维护自己完整的依赖,不要分散
179
180
 
@@ -471,161 +472,11 @@ import { COLOR_VALIDATION_PATTERNS } from 'zcw-shared/constants/colorPatterns'
471
472
  import { LoginResponseSchema, VideoSchema } from 'zcw-shared/schemas/auth.schema'
472
473
  import { VideoListResponseSchema } from 'zcw-shared/schemas/video.schema'
473
474
 
474
- // 导入Hooks
475
- import { useStorage } from 'zcw-shared/hooks/useStorage'
475
+ // 导入存储抽象(具体路径以 package.json exports 为准)
476
+ import useStorage from 'zcw-shared/functions/storage/useStorage'
476
477
  ```
477
478
 
478
- ### Playground 集成
479
-
480
- `playground` 通过 workspace 引用 `zcw-shared`:
481
-
482
- ```json
483
- // playground/package.json
484
- {
485
- "dependencies": {
486
- "zcw-shared": "workspace:*" // 引用本地workspace
487
- }
488
- }
489
- ```
490
-
491
- 在测试中直接导入:
492
-
493
- ```typescript
494
- // playground/tests/convertColor.test.ts
495
- import { convertColor } from 'zcw-shared/functions/color/convertColor'
496
- import type { RgbColor } from 'zcw-shared/types/color'
497
- ```
498
-
499
- ## Playground 测试指南
500
-
501
- ### 测试环境特点
502
-
503
- - **Workspace 引用**:直接使用 `shared` 包名导入
504
- - **独立依赖**:可安装测试专用的依赖包
505
- - **TypeScript 支持**:完整的类型检查和智能提示
506
- - **实时测试**:修改函数后立即验证
507
-
508
- ### 测试文件结构
509
-
510
- 每个函数都应该有对应的测试文件:
511
-
512
- ```
513
- playground/tests/
514
- ├── convertColor.test.ts # 颜色转换测试
515
- ├── colorValidation.test.ts # 颜色验证测试
516
- ├── extractColors.test.ts # 颜色提取测试
517
- ├── modifyGradle.test.ts # Android构建测试
518
- └── ...
519
- ```
520
-
521
- ### 测试用例编写规范
522
-
523
- #### 1. 基础功能测试
524
-
525
- ```typescript
526
- import { convertColor } from 'zcw-shared/functions/color/convertColor'
527
- import type { ColorFormat } from 'zcw-shared/types/color'
528
-
529
- // 基础测试用例
530
- const testCases = [
531
- { input: '#ff0000', target: 'rgb' as ColorFormat, expected: 'rgb(255, 0, 0)' },
532
- { input: 'rgb(255, 0, 0)', target: 'hex' as ColorFormat, expected: '#ff0000' },
533
- // 错误输入测试
534
- { input: 'invalid-color', target: 'hex' as ColorFormat, expected: null },
535
- ]
536
-
537
- function runBasicTests() {
538
- testCases.forEach((testCase, index) => {
539
- const result = convertColor(testCase.input, testCase.target)
540
- const passed = result === testCase.expected
541
- console.log(passed ? '✅' : '❌', `测试 ${index + 1}:`, testCase.input, '->', result)
542
- })
543
- }
544
- ```
545
-
546
- #### 2. 边界值测试
547
-
548
- ```typescript
549
- // 边界值和异常情况
550
- const edgeCases = [
551
- { input: '#000000', target: 'rgb', expected: 'rgb(0, 0, 0)' },
552
- { input: '#ffffff', target: 'rgb', expected: 'rgb(255, 255, 255)' },
553
- { input: 'rgb(300, 0, 0)', target: 'hex', expected: null }, // 超出范围
554
- ]
555
- ```
556
-
557
- #### 3. 环境依赖测试
558
-
559
- **重要说明**:Playground测试运行在Node.js环境中,可以直接使用Node.js的原生API和第三方库。
560
-
561
- - **Node.js环境**:可以直接使用`fs`、`path`、`crypto`等Node.js API
562
- - **第三方库**:可以安装和导入npm包进行测试
563
- - **类型兼容**:如遇类型不兼容,可使用`fs as any`等方式处理
564
- - **特殊环境模拟**:只有无法在Node.js中运行的环境(如微信`wx`、浏览器特定API)才需要模拟
565
-
566
- 对于需要特殊环境模拟的函数:
567
-
568
- ```typescript
569
- import { buildProject } from 'zcw-shared/functions/android/buildProject'
570
-
571
- // 创建模拟的依赖函数
572
- const mockDeps = {
573
- existsSync: (path: string) => path.includes('build.gradle'),
574
- readFileSync: (path: string) => 'mock file content',
575
- readdirSync: (path: string) => ['file1.txt', 'file2.txt'],
576
- statSync: (path: string) => ({ isDirectory: () => false, isFile: () => true }),
577
- join: (...paths: string[]) => paths.join('/'),
578
- platform: 'darwin',
579
- exec: (cmd: string, callback: any) => callback(null, 'success', ''),
580
- setTimeout: (fn: () => void, delay: number) => global.setTimeout(fn, delay)
581
- }
582
-
583
- function testBuildProject() {
584
- const result = buildProject(
585
- { projectPath: '/mock/project', buildVariant: 'debug' },
586
- mockDeps
587
- )
588
- console.log('构建结果:', result)
589
- }
590
- ```
591
-
592
- #### 4. 类型安全测试
593
-
594
- ```typescript
595
- // 测试类型定义的正确性
596
- function testTypes() {
597
- const rgbColor: RgbColor = { r: 255, g: 0, b: 0 }
598
- const result = convertColor(rgbColor, 'hex')
599
-
600
- // TypeScript 应该能正确推断类型
601
- if (result) {
602
- console.log('转换结果:', result.toUpperCase()) // string 方法
603
- }
604
- }
605
- ```
606
-
607
- ### 运行测试
608
-
609
- ```bash
610
- # 进入 playground 目录
611
- cd playground
612
-
613
- # 运行单个测试
614
- npx tsx tests/convertColor.test.ts
615
-
616
- # 运行所有测试
617
- npx tsx tests/*.test.ts
618
- ```
619
-
620
- ### 测试覆盖要求
621
-
622
- 每个函数的测试应该包含:
623
-
624
- 1. **正常输入**:典型使用场景
625
- 2. **边界值**:最小值、最大值、临界点
626
- 3. **异常输入**:null、undefined、错误类型
627
- 4. **环境兼容性**:不同环境下的行为
628
- 5. **性能测试**:大数据量或复杂场景
479
+ 本地校验以 **`pnpm exec tsc --noEmit`**、**`pnpm run build`** 与 **`pnpm run docs:build`**(文档站)为准;交互演示统一在 **`docs/`** 内维护,说明见 **`docs/guide/documentation.md`**(本站内路径为 `/guide/documentation`)。
629
480
 
630
481
  ## 开发工作流程
631
482
 
@@ -633,11 +484,9 @@ npx tsx tests/*.test.ts
633
484
 
634
485
  **重要提醒:**
635
486
 
636
- 1. **测试驱动开发**:改动函数时,优先在对应的test中添加新的测试用例,确保功能正确性和回归测试覆盖。
487
+ 1. **文档同步更新**:每次新增或修改函数后,**必须**同步更新 VitePress 文档。详细规范见下方「文档规范」章节。
637
488
 
638
- 2. **编译依赖**:改动了函数以后,因为playground中引用的是编译后的shared包,所以需要先编译shared包(`npm run build`),test中才能用到最新的代码。
639
-
640
- 3. **文档同步更新**:每次新增或修改函数后,**必须**同步更新 VitePress 文档。详细规范见下方"文档规范"章节。
489
+ 2. **构建验证**:改动后在本包根目录执行 `pnpm exec tsc --noEmit` 与 `pnpm run build`,确保类型与导出正确。
641
490
 
642
491
  ### 1. 添加新函数
643
492
 
@@ -648,22 +497,19 @@ src/functions/category/newFunction.ts
648
497
  # 2. 定义类型(如需要)
649
498
  types/category.d.ts
650
499
 
651
- # 3. 创建测试
652
- playground/tests/newFunction.test.ts
653
-
654
- # 4. 创建函数文档(必须!)
500
+ # 3. 创建函数文档(必须!)
655
501
  docs/api/category/newFunction.md
656
502
 
657
- # 5. 创建 Playground 组件(如果是浏览器端函数)
503
+ # 4. 创建 Playground 组件(如果是浏览器端函数)
658
504
  docs/.vitepress/components/NewFunctionPlayground.vue
659
505
 
660
- # 6. 更新侧边栏配置
506
+ # 5. 更新侧边栏配置
661
507
  docs/.vitepress/config.ts
662
508
 
663
- # 7. 验证文档编译
509
+ # 6. 验证文档编译
664
510
  npm run docs:dev
665
511
 
666
- # 8. 构建和导出
512
+ # 7. 构建和导出
667
513
  npm run build
668
514
  ```
669
515
 
@@ -809,8 +655,7 @@ export function useNewHook<T>(
809
655
  - [ ] 错误处理完善,不会意外抛出异常
810
656
  - [ ] 有完整的 JSDoc 文档注释
811
657
 
812
- #### ✅ 测试和文档检查
813
- - [ ] 创建了对应的测试文件
658
+ #### ✅ 文档检查
814
659
  - [ ] 创建了 VitePress 文档
815
660
  - [ ] 浏览器函数创建了 Playground 组件
816
661
  - [ ] 更新了侧边栏配置
@@ -862,13 +707,6 @@ npm run publish:major # 主要版本
862
707
  4. **接口命名规范**:`{FunctionName}Deps`,例如 `BuildProjectDeps`、`ModifyManifestDeps`
863
708
  5. **使用 deps. 前缀**:所有依赖访问都使用 `deps.methodName()`,不解构
864
709
 
865
- ### 测试要求
866
-
867
- 1. **全面覆盖**:正常、边界、异常情况
868
- 2. **环境模拟**:使用mock对象测试环境依赖
869
- 3. **文档化**:测试即文档,展示函数的使用方法
870
- 4. **依赖注入测试**:验证函数在不同依赖注入下的行为
871
-
872
710
  ### 快速检查清单
873
711
 
874
712
  在编写新函数或修改现有函数时,快速检查以下要点:
@@ -890,7 +728,6 @@ npm run publish:major # 主要版本
890
728
  **✅ 文档完整性:**
891
729
  - [ ] Markdown 文档(`docs/api/category/functionName.md`)
892
730
  - [ ] Playground 组件(浏览器函数必须)
893
- - [ ] 测试文件(`playground/tests/functionName.test.ts`)
894
731
  - [ ] 侧边栏配置已更新
895
732
 
896
733
  ### 常见错误和解决方案
@@ -0,0 +1,17 @@
1
+ export interface ApiErrorResponse {
2
+ statusCode: number;
3
+ message?: string | string[];
4
+ path?: string;
5
+ timestamp?: string;
6
+ }
7
+ export declare const API_HTTP_STATUS: {
8
+ readonly NO_CONTENT: 204;
9
+ readonly BAD_REQUEST: 400;
10
+ readonly UNAUTHORIZED: 401;
11
+ readonly FORBIDDEN: 403;
12
+ readonly NOT_FOUND: 404;
13
+ readonly INTERNAL_SERVER_ERROR: 500;
14
+ readonly SERVICE_UNAVAILABLE: 503;
15
+ };
16
+ export declare const API_ERROR_MESSAGES: Record<number, string>;
17
+ export declare function getApiErrorMessage(statusCode: number, body?: ApiErrorResponse | null): string;
@@ -0,0 +1,26 @@
1
+ export const API_HTTP_STATUS = {
2
+ NO_CONTENT: 204,
3
+ BAD_REQUEST: 400,
4
+ UNAUTHORIZED: 401,
5
+ FORBIDDEN: 403,
6
+ NOT_FOUND: 404,
7
+ INTERNAL_SERVER_ERROR: 500,
8
+ SERVICE_UNAVAILABLE: 503,
9
+ };
10
+ export const API_ERROR_MESSAGES = {
11
+ [API_HTTP_STATUS.BAD_REQUEST]: '请求参数错误',
12
+ [API_HTTP_STATUS.UNAUTHORIZED]: '未授权,请重新登录',
13
+ [API_HTTP_STATUS.FORBIDDEN]: '没有权限访问此资源',
14
+ [API_HTTP_STATUS.NOT_FOUND]: '请求的资源不存在',
15
+ [API_HTTP_STATUS.INTERNAL_SERVER_ERROR]: '服务器错误,请稍后重试',
16
+ [API_HTTP_STATUS.SERVICE_UNAVAILABLE]: '服务暂不可用,请稍后重试',
17
+ };
18
+ const DEFAULT_MESSAGE = '请求失败';
19
+ export function getApiErrorMessage(statusCode, body) {
20
+ if (body?.message != null) {
21
+ const msg = body.message;
22
+ return Array.isArray(msg) ? msg[0] ?? DEFAULT_MESSAGE : msg;
23
+ }
24
+ return API_ERROR_MESSAGES[statusCode] ?? DEFAULT_MESSAGE;
25
+ }
26
+ //# sourceMappingURL=apiErrorCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiErrorCodes.js","sourceRoot":"","sources":["../../src/constants/apiErrorCodes.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,qBAAqB,EAAE,GAAG;IAC1B,mBAAmB,EAAE,GAAG;CAChB,CAAA;AAGV,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,QAAQ;IACvC,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,WAAW;IAC3C,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,WAAW;IACxC,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,UAAU;IACvC,CAAC,eAAe,CAAC,qBAAqB,CAAC,EAAE,aAAa;IACtD,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,cAAc;CACtD,CAAA;AAED,MAAM,eAAe,GAAG,MAAM,CAAA;AAK9B,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,IAA8B;IAE9B,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAA;QACxB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAA;IAC7D,CAAC;IACD,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,eAAe,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const AUTH_STORAGE_KEY_ACCESS = "auth:access";
2
+ export declare const AUTH_STORAGE_KEY_REFRESH = "auth:refresh";
3
+ export declare const AUTH_STORAGE_KEY_EXPIRES = "auth:expires";
4
+ export declare const AUTH_STORAGE_KEY_USER_INFO = "auth:userInfo";
@@ -0,0 +1,5 @@
1
+ export const AUTH_STORAGE_KEY_ACCESS = 'auth:access';
2
+ export const AUTH_STORAGE_KEY_REFRESH = 'auth:refresh';
3
+ export const AUTH_STORAGE_KEY_EXPIRES = 'auth:expires';
4
+ export const AUTH_STORAGE_KEY_USER_INFO = 'auth:userInfo';
5
+ //# sourceMappingURL=authStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authStorage.js","sourceRoot":"","sources":["../../src/constants/authStorage.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAA;AAGpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAA;AAGtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAA;AAGtD,MAAM,CAAC,MAAM,0BAA0B,GAAG,eAAe,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const extensionToMimeMap: Record<string, string>;
2
+ export declare const mimeToIconfontMap: Record<string, string>;
3
+ export interface GetIconfontNameByExtensionOptions {
4
+ defaultIcon?: string;
5
+ }
6
+ export declare function getIconfontNameByMime(mime: string | undefined | null, options?: GetIconfontNameByExtensionOptions): string;
7
+ export declare function getIconfontNameByExtension(filenameOrExtension: string, options?: GetIconfontNameByExtensionOptions): string;
@@ -0,0 +1,140 @@
1
+ import { getFileExtension } from './getFileExtension';
2
+ export const extensionToMimeMap = {
3
+ pdf: 'application/pdf',
4
+ doc: 'application/msword',
5
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
6
+ ppt: 'application/vnd.ms-powerpoint',
7
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
8
+ xls: 'application/vnd.ms-excel',
9
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
10
+ csv: 'text/csv',
11
+ txt: 'text/plain',
12
+ log: 'text/plain',
13
+ md: 'text/markdown',
14
+ json: 'application/json',
15
+ zip: 'application/zip',
16
+ rar: 'application/x-rar-compressed',
17
+ '7z': 'application/x-7z-compressed',
18
+ tar: 'application/x-tar',
19
+ gz: 'application/gzip',
20
+ png: 'image/png',
21
+ jpg: 'image/jpeg',
22
+ jpeg: 'image/jpeg',
23
+ jpe: 'image/jpeg',
24
+ gif: 'image/gif',
25
+ bmp: 'image/bmp',
26
+ webp: 'image/webp',
27
+ svg: 'image/svg+xml',
28
+ mp3: 'audio/mpeg',
29
+ wav: 'audio/wav',
30
+ flac: 'audio/flac',
31
+ aac: 'audio/aac',
32
+ ogg: 'audio/ogg',
33
+ mp4: 'video/mp4',
34
+ mov: 'video/quicktime',
35
+ avi: 'video/x-msvideo',
36
+ mkv: 'video/x-matroska',
37
+ webm: 'video/webm',
38
+ psd: 'application/x-photoshop',
39
+ ai: 'application/postscript',
40
+ xd: 'application/vnd.adobe.xd',
41
+ aep: 'application/vnd.adobe.aftereffects.project',
42
+ prproj: 'application/vnd.adobe.premiere.project',
43
+ epub: 'application/epub+zip',
44
+ mobi: 'application/x-mobipocket-ebook',
45
+ azw3: 'application/vnd.amazon.ebook',
46
+ xmind: 'application/xmind',
47
+ };
48
+ export const mimeToIconfontMap = {
49
+ 'application/pdf': 'PDF',
50
+ 'application/msword': 'Doc',
51
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Doc',
52
+ 'application/vnd.ms-powerpoint': 'PPT',
53
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'PPT',
54
+ 'application/vnd.ms-excel': 'Excel',
55
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'Excel',
56
+ 'text/csv': 'Excel',
57
+ 'text/plain': 'TXT',
58
+ 'text/markdown': 'TXT',
59
+ 'application/json': 'TXT',
60
+ 'application/zip': 'Zip',
61
+ 'application/x-rar-compressed': 'Zip',
62
+ 'application/x-7z-compressed': 'Zip',
63
+ 'application/x-tar': 'Zip',
64
+ 'application/gzip': 'Zip',
65
+ 'image/png': 'tupian',
66
+ 'image/jpeg': 'tupian',
67
+ 'image/bmp': 'tupian',
68
+ 'image/webp': 'tupian',
69
+ 'image/gif': 'Gif',
70
+ 'image/svg+xml': 'Svg',
71
+ 'audio/mpeg': 'Mp3',
72
+ 'audio/wav': 'Wav',
73
+ 'audio/flac': 'Mp3',
74
+ 'audio/aac': 'Mp3',
75
+ 'audio/ogg': 'Mp3',
76
+ 'video/mp4': 'Mov',
77
+ 'video/quicktime': 'Mov',
78
+ 'video/x-msvideo': 'Mov',
79
+ 'video/x-matroska': 'Mov',
80
+ 'video/webm': 'Mov',
81
+ 'application/x-photoshop': 'Ps',
82
+ 'application/postscript': 'Ai',
83
+ 'application/vnd.adobe.xd': 'Xd',
84
+ 'application/vnd.adobe.aftereffects.project': 'Ae',
85
+ 'application/vnd.adobe.premiere.project': 'Pr',
86
+ 'application/epub+zip': 'tushu',
87
+ 'application/x-mobipocket-ebook': 'tushu',
88
+ 'application/vnd.amazon.ebook': 'tushu',
89
+ 'application/xmind': 'siweidaotu',
90
+ };
91
+ export function getIconfontNameByMime(mime, options = {}) {
92
+ const { defaultIcon = 'others' } = options;
93
+ if (!mime)
94
+ return defaultIcon;
95
+ const normalized = mime.toLowerCase().trim();
96
+ if (mimeToIconfontMap[normalized]) {
97
+ return mimeToIconfontMap[normalized];
98
+ }
99
+ if (normalized.startsWith('image/'))
100
+ return 'tupian';
101
+ if (normalized.startsWith('audio/'))
102
+ return 'Mp3';
103
+ if (normalized.startsWith('video/'))
104
+ return 'Mov';
105
+ if (normalized.startsWith('text/'))
106
+ return 'TXT';
107
+ return defaultIcon;
108
+ }
109
+ export function getIconfontNameByExtension(filenameOrExtension, options = {}) {
110
+ const { defaultIcon = 'others' } = options;
111
+ if (!filenameOrExtension)
112
+ return defaultIcon;
113
+ let ext = getFileExtension(filenameOrExtension, { lowercase: true });
114
+ if (!ext) {
115
+ ext = filenameOrExtension.trim().toLowerCase();
116
+ if (ext.startsWith('.')) {
117
+ ext = ext.slice(1);
118
+ }
119
+ }
120
+ if (!ext)
121
+ return defaultIcon;
122
+ const mime = extensionToMimeMap[ext];
123
+ if (mime) {
124
+ return getIconfontNameByMime(mime, options);
125
+ }
126
+ if (['png', 'jpg', 'jpeg', 'jpe', 'bmp', 'webp', 'gif', 'svg'].includes(ext)) {
127
+ return ext === 'gif' ? 'Gif' : ext === 'svg' ? 'Svg' : 'tupian';
128
+ }
129
+ if (['mp3', 'flac', 'aac', 'ogg'].includes(ext)) {
130
+ return ext === 'wav' ? 'Wav' : 'Mp3';
131
+ }
132
+ if (['mp4', 'mov', 'avi', 'mkv', 'webm'].includes(ext)) {
133
+ return 'Mov';
134
+ }
135
+ if (['zip', 'rar', '7z', 'tar', 'gz'].includes(ext)) {
136
+ return 'Zip';
137
+ }
138
+ return defaultIcon;
139
+ }
140
+ //# sourceMappingURL=getIconfontNameByExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIconfontNameByExtension.js","sourceRoot":"","sources":["../../../src/functions/file/getIconfontNameByExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function formatImChatConversationListTime(timestamp?: Date): string;
@@ -0,0 +1,19 @@
1
+ export function formatImChatConversationListTime(timestamp) {
2
+ if (!timestamp)
3
+ return '';
4
+ const now = new Date();
5
+ const diff = now.getTime() - timestamp.getTime();
6
+ const minutes = Math.floor(diff / (1000 * 60));
7
+ const hours = Math.floor(diff / (1000 * 60 * 60));
8
+ const days = Math.floor(diff / (1000 * 60 * 60 * 24));
9
+ if (minutes < 1)
10
+ return '刚刚';
11
+ if (minutes < 60)
12
+ return `${minutes}分钟前`;
13
+ if (hours < 24)
14
+ return `${hours}小时前`;
15
+ if (days < 7)
16
+ return `${days}天前`;
17
+ return timestamp.toLocaleDateString();
18
+ }
19
+ //# sourceMappingURL=formatImChatConversationListTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatImChatConversationListTime.js","sourceRoot":"","sources":["../../../src/functions/im/formatImChatConversationListTime.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,gCAAgC,CAAC,SAAgB;IAC/D,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IAEzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAA;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAErD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,KAAK,CAAA;IACxC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,KAAK,CAAA;IACpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,CAAA;IAChC,OAAO,SAAS,CAAC,kBAAkB,EAAE,CAAA;AACvC,CAAC"}
@@ -1,16 +1,26 @@
1
1
  export async function getImageDimensions(file, deps) {
2
2
  return new Promise((resolve, reject) => {
3
+ const url = deps.createObjectURL(file);
3
4
  const img = new deps.Image();
5
+ const revoke = () => {
6
+ try {
7
+ const urlApi = globalThis.URL;
8
+ urlApi?.revokeObjectURL?.(url);
9
+ }
10
+ catch {
11
+ }
12
+ };
4
13
  img.onload = () => {
5
- resolve({
6
- width: img.naturalWidth,
7
- height: img.naturalHeight
8
- });
14
+ const w = img.naturalWidth;
15
+ const h = img.naturalHeight;
16
+ revoke();
17
+ resolve({ width: w, height: h });
9
18
  };
10
19
  img.onerror = () => {
20
+ revoke();
11
21
  reject(new Error('获取图片尺寸失败'));
12
22
  };
13
- img.src = deps.createObjectURL(file);
23
+ img.src = url;
14
24
  });
15
25
  }
16
26
  //# sourceMappingURL=getImageDimensions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getImageDimensions.js","sourceRoot":"","sources":["../../../src/functions/image/getImageDimensions.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,IAA4B;IAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;QAC5B,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YAChB,OAAO,CAAC;gBACN,KAAK,EAAE,GAAG,CAAC,YAAY;gBACvB,MAAM,EAAE,GAAG,CAAC,aAAa;aAC1B,CAAC,CAAA;QACJ,CAAC,CAAA;QACD,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;YACjB,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;QAC/B,CAAC,CAAA;QACD,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"getImageDimensions.js","sourceRoot":"","sources":["../../../src/functions/image/getImageDimensions.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,IAA4B;IAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAI,UAA6E,CAAC,GAAG,CAAA;gBACjG,MAAM,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,CAAA;YAChC,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC,CAAA;QACD,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,GAAG,CAAC,YAAY,CAAA;YAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAA;YAC3B,MAAM,EAAE,CAAA;YACR,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAClC,CAAC,CAAA;QACD,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;YACjB,MAAM,EAAE,CAAA;YACR,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;QAC/B,CAAC,CAAA;QACD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface QiankunProps {
2
+ container?: unknown;
3
+ routerBase?: string;
4
+ [key: string]: unknown;
5
+ }
6
+ export interface CreateQiankunVueAppOptions {
7
+ App: any;
8
+ createAppRouter: (routerBase?: string) => any;
9
+ createApp: (rootComponent: any) => any;
10
+ createPinia: () => any;
11
+ document: any;
12
+ renderWithQiankun: (lifecycle: any) => void;
13
+ qiankunWindow: {
14
+ __POWERED_BY_QIANKUN__?: boolean;
15
+ };
16
+ }
17
+ export declare function createQiankunVueApp(options: CreateQiankunVueAppOptions): void;
@@ -0,0 +1,40 @@
1
+ export function createQiankunVueApp(options) {
2
+ const { App, createAppRouter, createApp, createPinia, document: doc, renderWithQiankun, qiankunWindow, } = options;
3
+ let app = null;
4
+ function render(props = {}) {
5
+ const { container, routerBase } = props;
6
+ let mountTarget;
7
+ if (container) {
8
+ const containerEl = container;
9
+ let appEl = containerEl.querySelector?.('#app');
10
+ if (!appEl) {
11
+ appEl = doc.createElement('div');
12
+ appEl.id = 'app';
13
+ containerEl.appendChild(appEl);
14
+ }
15
+ mountTarget = appEl;
16
+ }
17
+ else {
18
+ mountTarget = '#app';
19
+ }
20
+ app = createApp(App);
21
+ app.use(createPinia());
22
+ app.use(createAppRouter(routerBase));
23
+ app.mount(mountTarget);
24
+ }
25
+ renderWithQiankun({
26
+ bootstrap() { },
27
+ mount(props) {
28
+ render(props);
29
+ },
30
+ unmount() {
31
+ app?.unmount();
32
+ app = null;
33
+ },
34
+ update() { },
35
+ });
36
+ if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
37
+ render();
38
+ }
39
+ }
40
+ //# sourceMappingURL=createQiankunVueApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createQiankunVueApp.js","sourceRoot":"","sources":["../../../src/functions/qiankun/createQiankunVueApp.ts"],"names":[],"mappings":"AAmCA,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,EACJ,GAAG,EACH,eAAe,EACf,SAAS,EACT,WAAW,EACX,QAAQ,EAAE,GAAG,EACb,iBAAiB,EACjB,aAAa,GACd,GAAG,OAAO,CAAA;IAGX,IAAI,GAAG,GAAQ,IAAI,CAAA;IAEnB,SAAS,MAAM,CAAC,QAAsB,EAAE;QACtC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;QAEvC,IAAI,WAAiC,CAAA;QACrC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,WAAW,GAAG,SAAgB,CAAA;YACpC,IAAI,KAAK,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC,MAAM,CAAQ,CAAA;YACtD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAQ,CAAA;gBACvC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAA;gBAChB,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAChC,CAAC;YACD,WAAW,GAAG,KAAK,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,CAAA;QACtB,CAAC;QAED,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QACpB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QACtB,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAA;QACpC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC;IAED,iBAAiB,CAAC;QAChB,SAAS,KAAI,CAAC;QACd,KAAK,CAAC,KAAmB;YACvB,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,CAAC;QACD,OAAO;YACL,GAAG,EAAE,OAAO,EAAE,CAAA;YACd,GAAG,GAAG,IAAI,CAAA;QACZ,CAAC;QACD,MAAM,KAAI,CAAC;KACZ,CAAC,CAAA;IAEF,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;QAC1C,MAAM,EAAE,CAAA;IACV,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { IDBFactory } from '../../../references/indexeddb.d';
2
+ import type { Console } from '../../../references/console.d';
3
+ export type DexieConstructor = typeof import('dexie').default;
4
+ export type DexieDatabase = InstanceType<DexieConstructor>;
5
+ export interface UseDexieShortcutsDeps {
6
+ Dexie: DexieConstructor;
7
+ indexedDB: IDBFactory | null | undefined;
8
+ consoleError: Console['error'];
9
+ }
10
+ export interface DexieSchemaVersionSpec {
11
+ version: number;
12
+ stores: Record<string, string>;
13
+ }
14
+ export interface OpenDexieWithSchemaOptions {
15
+ dbName: string;
16
+ versions: DexieSchemaVersionSpec[];
17
+ }
18
+ export type DexieTransactionMode = 'r' | 'rw' | 'r!';
19
+ export declare function assertIndexedDbAvailable(deps: UseDexieShortcutsDeps): void;
20
+ export declare function openDexieWithSchema(deps: UseDexieShortcutsDeps, options: OpenDexieWithSchemaOptions): Promise<DexieDatabase>;
21
+ export declare function deleteDexieDatabase(deps: UseDexieShortcutsDeps, dbName: string): Promise<void>;
22
+ export declare function runDexieTransaction<T>(deps: UseDexieShortcutsDeps, db: DexieDatabase, mode: DexieTransactionMode, storeNames: string[], run: (trans: unknown) => Promise<T> | T): Promise<T>;
23
+ export default function useDexieShortcuts(deps: UseDexieShortcutsDeps): {
24
+ assertIndexedDbAvailable: () => void;
25
+ openWithSchema: (opts: OpenDexieWithSchemaOptions) => Promise<import("dexie").Dexie>;
26
+ deleteDatabase: (dbName: string) => Promise<void>;
27
+ transaction: <T>(db: DexieDatabase, mode: DexieTransactionMode, storeNames: string[], run: (trans: unknown) => Promise<T> | T) => Promise<T>;
28
+ };