sa2kit 1.0.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 (218) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +298 -0
  3. package/dist/AliyunOSSProvider-7JLMJDXK.js +15 -0
  4. package/dist/AliyunOSSProvider-7JLMJDXK.js.map +1 -0
  5. package/dist/AliyunOSSProvider-GQMSDJGZ.mjs +6 -0
  6. package/dist/AliyunOSSProvider-GQMSDJGZ.mjs.map +1 -0
  7. package/dist/LocalStorageProvider-FVLLHBHO.mjs +6 -0
  8. package/dist/LocalStorageProvider-FVLLHBHO.mjs.map +1 -0
  9. package/dist/LocalStorageProvider-NBNHHWLY.js +15 -0
  10. package/dist/LocalStorageProvider-NBNHHWLY.js.map +1 -0
  11. package/dist/analytics/index.d.mts +1084 -0
  12. package/dist/analytics/index.d.ts +1084 -0
  13. package/dist/analytics/index.js +2595 -0
  14. package/dist/analytics/index.js.map +1 -0
  15. package/dist/analytics/index.mjs +2518 -0
  16. package/dist/analytics/index.mjs.map +1 -0
  17. package/dist/analytics/server/index.d.mts +499 -0
  18. package/dist/analytics/server/index.d.ts +499 -0
  19. package/dist/analytics/server/index.js +529 -0
  20. package/dist/analytics/server/index.js.map +1 -0
  21. package/dist/analytics/server/index.mjs +525 -0
  22. package/dist/analytics/server/index.mjs.map +1 -0
  23. package/dist/auth/client/index.d.mts +104 -0
  24. package/dist/auth/client/index.d.ts +104 -0
  25. package/dist/auth/client/index.js +21 -0
  26. package/dist/auth/client/index.js.map +1 -0
  27. package/dist/auth/client/index.mjs +4 -0
  28. package/dist/auth/client/index.mjs.map +1 -0
  29. package/dist/auth/components/index.d.mts +82 -0
  30. package/dist/auth/components/index.d.ts +82 -0
  31. package/dist/auth/components/index.js +93 -0
  32. package/dist/auth/components/index.js.map +1 -0
  33. package/dist/auth/components/index.mjs +86 -0
  34. package/dist/auth/components/index.mjs.map +1 -0
  35. package/dist/auth/hooks/index.d.mts +2 -0
  36. package/dist/auth/hooks/index.d.ts +2 -0
  37. package/dist/auth/hooks/index.js +17 -0
  38. package/dist/auth/hooks/index.js.map +1 -0
  39. package/dist/auth/hooks/index.mjs +4 -0
  40. package/dist/auth/hooks/index.mjs.map +1 -0
  41. package/dist/auth/index.d.mts +15 -0
  42. package/dist/auth/index.d.ts +15 -0
  43. package/dist/auth/index.js +110 -0
  44. package/dist/auth/index.js.map +1 -0
  45. package/dist/auth/index.mjs +9 -0
  46. package/dist/auth/index.mjs.map +1 -0
  47. package/dist/auth/middleware/index.d.mts +75 -0
  48. package/dist/auth/middleware/index.d.ts +75 -0
  49. package/dist/auth/middleware/index.js +15 -0
  50. package/dist/auth/middleware/index.js.map +1 -0
  51. package/dist/auth/middleware/index.mjs +6 -0
  52. package/dist/auth/middleware/index.mjs.map +1 -0
  53. package/dist/auth/routes/index.d.mts +163 -0
  54. package/dist/auth/routes/index.d.ts +163 -0
  55. package/dist/auth/routes/index.js +27 -0
  56. package/dist/auth/routes/index.js.map +1 -0
  57. package/dist/auth/routes/index.mjs +6 -0
  58. package/dist/auth/routes/index.mjs.map +1 -0
  59. package/dist/auth/schema/index.d.mts +789 -0
  60. package/dist/auth/schema/index.d.ts +789 -0
  61. package/dist/auth/schema/index.js +41 -0
  62. package/dist/auth/schema/index.js.map +1 -0
  63. package/dist/auth/schema/index.mjs +4 -0
  64. package/dist/auth/schema/index.mjs.map +1 -0
  65. package/dist/auth/services/index.d.mts +47 -0
  66. package/dist/auth/services/index.d.ts +47 -0
  67. package/dist/auth/services/index.js +34 -0
  68. package/dist/auth/services/index.js.map +1 -0
  69. package/dist/auth/services/index.mjs +5 -0
  70. package/dist/auth/services/index.mjs.map +1 -0
  71. package/dist/chunk-3RFBUDRA.js +507 -0
  72. package/dist/chunk-3RFBUDRA.js.map +1 -0
  73. package/dist/chunk-3XG5OHFD.mjs +37 -0
  74. package/dist/chunk-3XG5OHFD.mjs.map +1 -0
  75. package/dist/chunk-6BL3AZGD.js +285 -0
  76. package/dist/chunk-6BL3AZGD.js.map +1 -0
  77. package/dist/chunk-6FNUWAIV.js +394 -0
  78. package/dist/chunk-6FNUWAIV.js.map +1 -0
  79. package/dist/chunk-6PRFP5EG.js +171 -0
  80. package/dist/chunk-6PRFP5EG.js.map +1 -0
  81. package/dist/chunk-6VHWOPRR.mjs +90 -0
  82. package/dist/chunk-6VHWOPRR.mjs.map +1 -0
  83. package/dist/chunk-AIKEVVDR.mjs +122 -0
  84. package/dist/chunk-AIKEVVDR.mjs.map +1 -0
  85. package/dist/chunk-APY57REU.js +300 -0
  86. package/dist/chunk-APY57REU.js.map +1 -0
  87. package/dist/chunk-BJTO5JO5.mjs +10 -0
  88. package/dist/chunk-BJTO5JO5.mjs.map +1 -0
  89. package/dist/chunk-C64RY2OW.mjs +295 -0
  90. package/dist/chunk-C64RY2OW.mjs.map +1 -0
  91. package/dist/chunk-DGUM43GV.js +12 -0
  92. package/dist/chunk-DGUM43GV.js.map +1 -0
  93. package/dist/chunk-FV3FNHQY.js +92 -0
  94. package/dist/chunk-FV3FNHQY.js.map +1 -0
  95. package/dist/chunk-GSTLV3MB.mjs +316 -0
  96. package/dist/chunk-GSTLV3MB.mjs.map +1 -0
  97. package/dist/chunk-HEMA7SWK.mjs +212 -0
  98. package/dist/chunk-HEMA7SWK.mjs.map +1 -0
  99. package/dist/chunk-HWJ34NL6.js +43 -0
  100. package/dist/chunk-HWJ34NL6.js.map +1 -0
  101. package/dist/chunk-HXFFYNIF.mjs +385 -0
  102. package/dist/chunk-HXFFYNIF.mjs.map +1 -0
  103. package/dist/chunk-KGRQNEIR.mjs +183 -0
  104. package/dist/chunk-KGRQNEIR.mjs.map +1 -0
  105. package/dist/chunk-KH6RQ4J5.js +28 -0
  106. package/dist/chunk-KH6RQ4J5.js.map +1 -0
  107. package/dist/chunk-KQGP6BTS.mjs +165 -0
  108. package/dist/chunk-KQGP6BTS.mjs.map +1 -0
  109. package/dist/chunk-NMF4ANIC.js +365 -0
  110. package/dist/chunk-NMF4ANIC.js.map +1 -0
  111. package/dist/chunk-O26VCNS3.js +216 -0
  112. package/dist/chunk-O26VCNS3.js.map +1 -0
  113. package/dist/chunk-OLHGZXN3.mjs +86 -0
  114. package/dist/chunk-OLHGZXN3.mjs.map +1 -0
  115. package/dist/chunk-QU5OT4DF.js +88 -0
  116. package/dist/chunk-QU5OT4DF.js.map +1 -0
  117. package/dist/chunk-RCNNVNLT.mjs +356 -0
  118. package/dist/chunk-RCNNVNLT.mjs.map +1 -0
  119. package/dist/chunk-ROEYW4A7.js +186 -0
  120. package/dist/chunk-ROEYW4A7.js.map +1 -0
  121. package/dist/chunk-SVWQN2LR.js +131 -0
  122. package/dist/chunk-SVWQN2LR.js.map +1 -0
  123. package/dist/chunk-TKCYPDWU.js +338 -0
  124. package/dist/chunk-TKCYPDWU.js.map +1 -0
  125. package/dist/chunk-U2L6V7KD.mjs +273 -0
  126. package/dist/chunk-U2L6V7KD.mjs.map +1 -0
  127. package/dist/chunk-YVBU7QDJ.mjs +505 -0
  128. package/dist/chunk-YVBU7QDJ.mjs.map +1 -0
  129. package/dist/chunk-ZGVB35L2.mjs +25 -0
  130. package/dist/chunk-ZGVB35L2.mjs.map +1 -0
  131. package/dist/config/index.d.mts +64 -0
  132. package/dist/config/index.d.ts +64 -0
  133. package/dist/config/index.js +136 -0
  134. package/dist/config/index.js.map +1 -0
  135. package/dist/config/index.mjs +128 -0
  136. package/dist/config/index.mjs.map +1 -0
  137. package/dist/drizzle-auth-service-Bxlovhv8.d.ts +145 -0
  138. package/dist/drizzle-auth-service-DZY2F1sv.d.mts +145 -0
  139. package/dist/enums-Dume-V5Y.d.mts +16 -0
  140. package/dist/enums-Dume-V5Y.d.ts +16 -0
  141. package/dist/i18n/index.d.mts +416 -0
  142. package/dist/i18n/index.d.ts +416 -0
  143. package/dist/i18n/index.js +671 -0
  144. package/dist/i18n/index.js.map +1 -0
  145. package/dist/i18n/index.mjs +650 -0
  146. package/dist/i18n/index.mjs.map +1 -0
  147. package/dist/index-8VoHap_4.d.mts +105 -0
  148. package/dist/index-8VoHap_4.d.ts +105 -0
  149. package/dist/index.d.mts +4 -0
  150. package/dist/index.d.ts +4 -0
  151. package/dist/index.js +84 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/index.mjs +7 -0
  154. package/dist/index.mjs.map +1 -0
  155. package/dist/logger/index.d.mts +125 -0
  156. package/dist/logger/index.d.ts +125 -0
  157. package/dist/logger/index.js +29 -0
  158. package/dist/logger/index.js.map +1 -0
  159. package/dist/logger/index.mjs +4 -0
  160. package/dist/logger/index.mjs.map +1 -0
  161. package/dist/request/index.d.mts +51 -0
  162. package/dist/request/index.d.ts +51 -0
  163. package/dist/request/index.js +85 -0
  164. package/dist/request/index.js.map +1 -0
  165. package/dist/request/index.mjs +82 -0
  166. package/dist/request/index.mjs.map +1 -0
  167. package/dist/storage/index.d.mts +74 -0
  168. package/dist/storage/index.d.ts +74 -0
  169. package/dist/storage/index.js +46 -0
  170. package/dist/storage/index.js.map +1 -0
  171. package/dist/storage/index.mjs +5 -0
  172. package/dist/storage/index.mjs.map +1 -0
  173. package/dist/types-BINlP9MK.d.mts +286 -0
  174. package/dist/types-BINlP9MK.d.ts +286 -0
  175. package/dist/types-BaZccpvk.d.mts +48 -0
  176. package/dist/types-BaZccpvk.d.ts +48 -0
  177. package/dist/types-CbTsi9CZ.d.mts +31 -0
  178. package/dist/types-CbTsi9CZ.d.ts +31 -0
  179. package/dist/types-CoGG1rNV.d.mts +258 -0
  180. package/dist/types-CoGG1rNV.d.ts +258 -0
  181. package/dist/types-DAxQ1MeY.d.ts +70 -0
  182. package/dist/types-DT8LVCvE.d.mts +70 -0
  183. package/dist/types-DW9qar-w.d.mts +52 -0
  184. package/dist/types-DW9qar-w.d.ts +52 -0
  185. package/dist/universalExport/index.d.mts +235 -0
  186. package/dist/universalExport/index.d.ts +235 -0
  187. package/dist/universalExport/index.js +621 -0
  188. package/dist/universalExport/index.js.map +1 -0
  189. package/dist/universalExport/index.mjs +580 -0
  190. package/dist/universalExport/index.mjs.map +1 -0
  191. package/dist/universalExport/server/index.d.mts +429 -0
  192. package/dist/universalExport/server/index.d.ts +429 -0
  193. package/dist/universalExport/server/index.js +263 -0
  194. package/dist/universalExport/server/index.js.map +1 -0
  195. package/dist/universalExport/server/index.mjs +242 -0
  196. package/dist/universalExport/server/index.mjs.map +1 -0
  197. package/dist/universalFile/index.d.mts +310 -0
  198. package/dist/universalFile/index.d.ts +310 -0
  199. package/dist/universalFile/index.js +811 -0
  200. package/dist/universalFile/index.js.map +1 -0
  201. package/dist/universalFile/index.mjs +736 -0
  202. package/dist/universalFile/index.mjs.map +1 -0
  203. package/dist/universalFile/server/index.d.mts +2428 -0
  204. package/dist/universalFile/server/index.d.ts +2428 -0
  205. package/dist/universalFile/server/index.js +4578 -0
  206. package/dist/universalFile/server/index.js.map +1 -0
  207. package/dist/universalFile/server/index.mjs +4518 -0
  208. package/dist/universalFile/server/index.mjs.map +1 -0
  209. package/dist/useElectronStorage-Dj0rcorG.d.mts +65 -0
  210. package/dist/useElectronStorage-DwnNfIhl.d.ts +65 -0
  211. package/dist/utils/index.d.mts +188 -0
  212. package/dist/utils/index.d.ts +188 -0
  213. package/dist/utils/index.js +42 -0
  214. package/dist/utils/index.js.map +1 -0
  215. package/dist/utils/index.mjs +5 -0
  216. package/dist/utils/index.mjs.map +1 -0
  217. package/package.json +220 -0
  218. package/tailwind.animations.js +34 -0
@@ -0,0 +1,286 @@
1
+ /**
2
+ * 通用导出服务类型定义
3
+ *
4
+ * 定义了导出功能的核心接口和类型
5
+ */
6
+ /** 导出格式类型 */
7
+ type ExportFormat = 'csv' | 'excel' | 'json';
8
+ /** 字段类型 */
9
+ type FieldType = 'string' | 'number' | 'date' | 'boolean' | 'array' | 'object';
10
+ /** 字段对齐方式 */
11
+ type FieldAlignment = 'left' | 'center' | 'right';
12
+ /** 导出状态 */
13
+ type ExportStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
14
+ /** 分组模式 */
15
+ type GroupingMode = 'merge' | 'separate' | 'nested';
16
+ /** 分组处理类型 */
17
+ type GroupValueProcessing = 'first' | 'last' | 'concat' | 'sum' | 'count' | 'custom';
18
+ /** 导出字段定义 */
19
+ interface ExportField {
20
+ /** 字段键名 */
21
+ key: string;
22
+ /** 字段显示名称 */
23
+ label: string;
24
+ /** 字段类型 */
25
+ type: FieldType;
26
+ /** 是否启用 */
27
+ enabled: boolean;
28
+ /** 字段宽度 */
29
+ width?: number;
30
+ /** 对齐方式 */
31
+ alignment?: FieldAlignment;
32
+ /** 格式化函数 */
33
+ formatter?: (value: any) => string;
34
+ /** 排序权重 */
35
+ sortOrder?: number;
36
+ /** 是否必填 */
37
+ required?: boolean;
38
+ /** 字段描述 */
39
+ description?: string;
40
+ /** 自定义样式 */
41
+ style?: Record<string, any>;
42
+ }
43
+ /** 分组字段配置 */
44
+ interface GroupingField {
45
+ /** 分组字段键名 */
46
+ key: string;
47
+ /** 分组字段显示名称 */
48
+ label: string;
49
+ /** 分组模式 */
50
+ mode: GroupingMode;
51
+ /** 其他字段的值处理方式 */
52
+ valueProcessing: GroupValueProcessing;
53
+ /** 自定义处理函数 */
54
+ customProcessor?: (values: any[]) => any;
55
+ /** 是否显示分组行 */
56
+ showGroupHeader: boolean;
57
+ /** 分组行模板 */
58
+ groupHeaderTemplate?: string;
59
+ /** 是否合并单元格(仅Excel格式支持) */
60
+ mergeCells: boolean;
61
+ }
62
+ /** 分组配置 */
63
+ interface GroupingConfig {
64
+ /** 是否启用分组 */
65
+ enabled: boolean;
66
+ /** 分组字段列表(支持多级分组) */
67
+ fields: GroupingField[];
68
+ /** 分组后是否保持原始顺序 */
69
+ preserveOrder: boolean;
70
+ /** 空值处理方式 */
71
+ nullValueHandling: 'skip' | 'group' | 'separate';
72
+ /** 空值分组名称 */
73
+ nullGroupName?: string;
74
+ }
75
+ /** 导出配置 */
76
+ interface ExportConfig {
77
+ /** 配置ID */
78
+ id: string;
79
+ /** 配置名称 */
80
+ name: string;
81
+ /** 配置描述 */
82
+ description?: string;
83
+ /** 导出格式 */
84
+ format: ExportFormat;
85
+ /** 字段定义 */
86
+ fields: ExportField[];
87
+ /** 分组配置 */
88
+ grouping?: GroupingConfig;
89
+ /** 文件名模板 */
90
+ fileNameTemplate: string;
91
+ /** 是否包含表头 */
92
+ includeHeader: boolean;
93
+ /** 分隔符 */
94
+ delimiter: string;
95
+ /** 编码格式 */
96
+ encoding: string;
97
+ /** 是否添加BOM */
98
+ addBOM: boolean;
99
+ /** 最大行数限制 */
100
+ maxRows?: number;
101
+ /** 创建时间 */
102
+ createdAt: Date;
103
+ /** 更新时间 */
104
+ updatedAt: Date;
105
+ /** 模块标识 */
106
+ moduleId: string;
107
+ /** 业务标识 */
108
+ businessId?: string;
109
+ /** 创建者ID */
110
+ createdBy?: string;
111
+ }
112
+ /** 导出请求 */
113
+ interface ExportRequest {
114
+ /** 导出配置ID或配置对象 */
115
+ configId: string | ExportConfig;
116
+ /** 数据源 */
117
+ dataSource: string | (() => Promise<any[]>);
118
+ /** 查询参数 */
119
+ queryParams?: Record<string, any>;
120
+ /** 自定义字段映射 */
121
+ fieldMapping?: Record<string, string>;
122
+ /** 过滤条件 */
123
+ filters?: ExportFilter[];
124
+ /** 排序条件 */
125
+ sortBy?: ExportSort[];
126
+ /** 分页参数 */
127
+ pagination?: {
128
+ page: number;
129
+ pageSize: number;
130
+ };
131
+ /** 自定义文件名 */
132
+ customFileName?: string;
133
+ /** 回调函数 */
134
+ callbacks?: {
135
+ onProgress?: (progress: ExportProgress) => void;
136
+ onSuccess?: (result: ExportResult) => void;
137
+ onError?: (error: ExportError) => void;
138
+ };
139
+ }
140
+ /** 导出过滤器 */
141
+ interface ExportFilter {
142
+ /** 字段名 */
143
+ field: string;
144
+ /** 操作符 */
145
+ operator: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'startsWith' | 'endsWith' | 'in' | 'notIn';
146
+ /** 值 */
147
+ value: any;
148
+ }
149
+ /** 导出排序 */
150
+ interface ExportSort {
151
+ /** 字段名 */
152
+ field: string;
153
+ /** 排序方向 */
154
+ direction: 'asc' | 'desc';
155
+ }
156
+ /** 导出进度 */
157
+ interface ExportProgress {
158
+ /** 导出ID */
159
+ exportId: string;
160
+ /** 状态 */
161
+ status: ExportStatus;
162
+ /** 进度百分比 */
163
+ progress: number;
164
+ /** 已处理行数 */
165
+ processedRows: number;
166
+ /** 总行数 */
167
+ totalRows: number;
168
+ /** 开始时间 */
169
+ startTime: Date;
170
+ /** 预计完成时间 */
171
+ estimatedEndTime?: Date;
172
+ /** 当前处理的数据 */
173
+ currentData?: any;
174
+ /** 错误信息 */
175
+ error?: string;
176
+ }
177
+ /** 导出结果 */
178
+ interface ExportResult {
179
+ /** 导出ID */
180
+ exportId: string;
181
+ /** 文件名 */
182
+ fileName: string;
183
+ /** 文件大小 */
184
+ fileSize: number;
185
+ /** 文件URL */
186
+ fileUrl?: string;
187
+ /** 文件Blob */
188
+ fileBlob?: Blob;
189
+ /** 导出行数 */
190
+ exportedRows: number;
191
+ /** 开始时间 */
192
+ startTime: Date;
193
+ /** 完成时间 */
194
+ endTime: Date;
195
+ /** 耗时(毫秒) */
196
+ duration: number;
197
+ /** 统计信息 */
198
+ statistics?: {
199
+ totalRows: number;
200
+ filteredRows: number;
201
+ exportedRows: number;
202
+ skippedRows: number;
203
+ };
204
+ }
205
+ /** 导出错误 */
206
+ interface ExportError {
207
+ /** 错误代码 */
208
+ code: string;
209
+ /** 错误消息 */
210
+ message: string;
211
+ /** 错误详情 */
212
+ details?: Record<string, any>;
213
+ /** 错误时间 */
214
+ timestamp: Date;
215
+ }
216
+ /** 通用导出服务配置 */
217
+ interface UniversalExportServiceConfig {
218
+ /** 默认导出格式 */
219
+ defaultFormat: ExportFormat;
220
+ /** 默认分隔符 */
221
+ defaultDelimiter: string;
222
+ /** 默认编码 */
223
+ defaultEncoding: string;
224
+ /** 是否默认添加BOM */
225
+ defaultAddBOM: boolean;
226
+ /** 最大文件大小限制(字节) */
227
+ maxFileSize: number;
228
+ /** 最大行数限制 */
229
+ maxRowsLimit: number;
230
+ /** 并发导出数量限制 */
231
+ maxConcurrentExports: number;
232
+ /** 导出超时时间(毫秒) */
233
+ exportTimeout: number;
234
+ /** 缓存配置 */
235
+ cache: {
236
+ /** 配置缓存TTL(秒) */
237
+ configTTL: number;
238
+ /** 结果缓存TTL(秒) */
239
+ resultTTL: number;
240
+ };
241
+ }
242
+ /** 导出服务基础异常 */
243
+ declare class ExportServiceError extends Error {
244
+ readonly code: string;
245
+ readonly details?: Record<string, any> | undefined;
246
+ constructor(message: string, code: string, details?: Record<string, any> | undefined);
247
+ }
248
+ /** 导出配置错误 */
249
+ declare class ExportConfigError extends ExportServiceError {
250
+ constructor(message: string, details?: Record<string, any>);
251
+ }
252
+ /** 导出数据处理错误 */
253
+ declare class ExportDataError extends ExportServiceError {
254
+ constructor(message: string, details?: Record<string, any>);
255
+ }
256
+ /** 导出文件生成错误 */
257
+ declare class ExportFileError extends ExportServiceError {
258
+ constructor(message: string, details?: Record<string, any>);
259
+ }
260
+ /** 导出事件类型 */
261
+ type ExportEventType = 'export:start' | 'export:progress' | 'export:complete' | 'export:error' | 'export:cancel' | 'config:save' | 'config:delete';
262
+ /** 导出事件 */
263
+ interface ExportEvent {
264
+ /** 事件类型 */
265
+ type: ExportEventType;
266
+ /** 导出ID */
267
+ exportId: string;
268
+ /** 事件时间 */
269
+ timestamp: Date;
270
+ /** 事件数据 */
271
+ data?: Record<string, any>;
272
+ /** 错误信息 */
273
+ error?: string;
274
+ }
275
+ /** 导出事件监听器 */
276
+ type ExportEventListener = (event: ExportEvent) => void | Promise<void>;
277
+ /** 字段映射函数 */
278
+ type FieldMapper<T = any> = (item: T, index: number) => Record<string, any>;
279
+ /** 数据转换函数 */
280
+ type DataTransformer<T = any, R = any> = (data: T[]) => R[];
281
+ /** 验证函数 */
282
+ type Validator<T = any> = (data: T) => boolean | string;
283
+ /** 格式化函数 */
284
+ type Formatter<T = any> = (value: T) => string;
285
+
286
+ export { type DataTransformer as D, type ExportConfig as E, type Formatter as F, type GroupingMode as G, type UniversalExportServiceConfig as U, type Validator as V, type ExportRequest as a, type ExportResult as b, type ExportProgress as c, type ExportFormat as d, ExportServiceError as e, ExportConfigError as f, ExportDataError as g, ExportFileError as h, type FieldType as i, type FieldAlignment as j, type ExportStatus as k, type GroupValueProcessing as l, type ExportField as m, type GroupingField as n, type GroupingConfig as o, type ExportFilter as p, type ExportSort as q, type ExportError as r, type ExportEventType as s, type ExportEvent as t, type ExportEventListener as u, type FieldMapper as v };
@@ -0,0 +1,286 @@
1
+ /**
2
+ * 通用导出服务类型定义
3
+ *
4
+ * 定义了导出功能的核心接口和类型
5
+ */
6
+ /** 导出格式类型 */
7
+ type ExportFormat = 'csv' | 'excel' | 'json';
8
+ /** 字段类型 */
9
+ type FieldType = 'string' | 'number' | 'date' | 'boolean' | 'array' | 'object';
10
+ /** 字段对齐方式 */
11
+ type FieldAlignment = 'left' | 'center' | 'right';
12
+ /** 导出状态 */
13
+ type ExportStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
14
+ /** 分组模式 */
15
+ type GroupingMode = 'merge' | 'separate' | 'nested';
16
+ /** 分组处理类型 */
17
+ type GroupValueProcessing = 'first' | 'last' | 'concat' | 'sum' | 'count' | 'custom';
18
+ /** 导出字段定义 */
19
+ interface ExportField {
20
+ /** 字段键名 */
21
+ key: string;
22
+ /** 字段显示名称 */
23
+ label: string;
24
+ /** 字段类型 */
25
+ type: FieldType;
26
+ /** 是否启用 */
27
+ enabled: boolean;
28
+ /** 字段宽度 */
29
+ width?: number;
30
+ /** 对齐方式 */
31
+ alignment?: FieldAlignment;
32
+ /** 格式化函数 */
33
+ formatter?: (value: any) => string;
34
+ /** 排序权重 */
35
+ sortOrder?: number;
36
+ /** 是否必填 */
37
+ required?: boolean;
38
+ /** 字段描述 */
39
+ description?: string;
40
+ /** 自定义样式 */
41
+ style?: Record<string, any>;
42
+ }
43
+ /** 分组字段配置 */
44
+ interface GroupingField {
45
+ /** 分组字段键名 */
46
+ key: string;
47
+ /** 分组字段显示名称 */
48
+ label: string;
49
+ /** 分组模式 */
50
+ mode: GroupingMode;
51
+ /** 其他字段的值处理方式 */
52
+ valueProcessing: GroupValueProcessing;
53
+ /** 自定义处理函数 */
54
+ customProcessor?: (values: any[]) => any;
55
+ /** 是否显示分组行 */
56
+ showGroupHeader: boolean;
57
+ /** 分组行模板 */
58
+ groupHeaderTemplate?: string;
59
+ /** 是否合并单元格(仅Excel格式支持) */
60
+ mergeCells: boolean;
61
+ }
62
+ /** 分组配置 */
63
+ interface GroupingConfig {
64
+ /** 是否启用分组 */
65
+ enabled: boolean;
66
+ /** 分组字段列表(支持多级分组) */
67
+ fields: GroupingField[];
68
+ /** 分组后是否保持原始顺序 */
69
+ preserveOrder: boolean;
70
+ /** 空值处理方式 */
71
+ nullValueHandling: 'skip' | 'group' | 'separate';
72
+ /** 空值分组名称 */
73
+ nullGroupName?: string;
74
+ }
75
+ /** 导出配置 */
76
+ interface ExportConfig {
77
+ /** 配置ID */
78
+ id: string;
79
+ /** 配置名称 */
80
+ name: string;
81
+ /** 配置描述 */
82
+ description?: string;
83
+ /** 导出格式 */
84
+ format: ExportFormat;
85
+ /** 字段定义 */
86
+ fields: ExportField[];
87
+ /** 分组配置 */
88
+ grouping?: GroupingConfig;
89
+ /** 文件名模板 */
90
+ fileNameTemplate: string;
91
+ /** 是否包含表头 */
92
+ includeHeader: boolean;
93
+ /** 分隔符 */
94
+ delimiter: string;
95
+ /** 编码格式 */
96
+ encoding: string;
97
+ /** 是否添加BOM */
98
+ addBOM: boolean;
99
+ /** 最大行数限制 */
100
+ maxRows?: number;
101
+ /** 创建时间 */
102
+ createdAt: Date;
103
+ /** 更新时间 */
104
+ updatedAt: Date;
105
+ /** 模块标识 */
106
+ moduleId: string;
107
+ /** 业务标识 */
108
+ businessId?: string;
109
+ /** 创建者ID */
110
+ createdBy?: string;
111
+ }
112
+ /** 导出请求 */
113
+ interface ExportRequest {
114
+ /** 导出配置ID或配置对象 */
115
+ configId: string | ExportConfig;
116
+ /** 数据源 */
117
+ dataSource: string | (() => Promise<any[]>);
118
+ /** 查询参数 */
119
+ queryParams?: Record<string, any>;
120
+ /** 自定义字段映射 */
121
+ fieldMapping?: Record<string, string>;
122
+ /** 过滤条件 */
123
+ filters?: ExportFilter[];
124
+ /** 排序条件 */
125
+ sortBy?: ExportSort[];
126
+ /** 分页参数 */
127
+ pagination?: {
128
+ page: number;
129
+ pageSize: number;
130
+ };
131
+ /** 自定义文件名 */
132
+ customFileName?: string;
133
+ /** 回调函数 */
134
+ callbacks?: {
135
+ onProgress?: (progress: ExportProgress) => void;
136
+ onSuccess?: (result: ExportResult) => void;
137
+ onError?: (error: ExportError) => void;
138
+ };
139
+ }
140
+ /** 导出过滤器 */
141
+ interface ExportFilter {
142
+ /** 字段名 */
143
+ field: string;
144
+ /** 操作符 */
145
+ operator: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'startsWith' | 'endsWith' | 'in' | 'notIn';
146
+ /** 值 */
147
+ value: any;
148
+ }
149
+ /** 导出排序 */
150
+ interface ExportSort {
151
+ /** 字段名 */
152
+ field: string;
153
+ /** 排序方向 */
154
+ direction: 'asc' | 'desc';
155
+ }
156
+ /** 导出进度 */
157
+ interface ExportProgress {
158
+ /** 导出ID */
159
+ exportId: string;
160
+ /** 状态 */
161
+ status: ExportStatus;
162
+ /** 进度百分比 */
163
+ progress: number;
164
+ /** 已处理行数 */
165
+ processedRows: number;
166
+ /** 总行数 */
167
+ totalRows: number;
168
+ /** 开始时间 */
169
+ startTime: Date;
170
+ /** 预计完成时间 */
171
+ estimatedEndTime?: Date;
172
+ /** 当前处理的数据 */
173
+ currentData?: any;
174
+ /** 错误信息 */
175
+ error?: string;
176
+ }
177
+ /** 导出结果 */
178
+ interface ExportResult {
179
+ /** 导出ID */
180
+ exportId: string;
181
+ /** 文件名 */
182
+ fileName: string;
183
+ /** 文件大小 */
184
+ fileSize: number;
185
+ /** 文件URL */
186
+ fileUrl?: string;
187
+ /** 文件Blob */
188
+ fileBlob?: Blob;
189
+ /** 导出行数 */
190
+ exportedRows: number;
191
+ /** 开始时间 */
192
+ startTime: Date;
193
+ /** 完成时间 */
194
+ endTime: Date;
195
+ /** 耗时(毫秒) */
196
+ duration: number;
197
+ /** 统计信息 */
198
+ statistics?: {
199
+ totalRows: number;
200
+ filteredRows: number;
201
+ exportedRows: number;
202
+ skippedRows: number;
203
+ };
204
+ }
205
+ /** 导出错误 */
206
+ interface ExportError {
207
+ /** 错误代码 */
208
+ code: string;
209
+ /** 错误消息 */
210
+ message: string;
211
+ /** 错误详情 */
212
+ details?: Record<string, any>;
213
+ /** 错误时间 */
214
+ timestamp: Date;
215
+ }
216
+ /** 通用导出服务配置 */
217
+ interface UniversalExportServiceConfig {
218
+ /** 默认导出格式 */
219
+ defaultFormat: ExportFormat;
220
+ /** 默认分隔符 */
221
+ defaultDelimiter: string;
222
+ /** 默认编码 */
223
+ defaultEncoding: string;
224
+ /** 是否默认添加BOM */
225
+ defaultAddBOM: boolean;
226
+ /** 最大文件大小限制(字节) */
227
+ maxFileSize: number;
228
+ /** 最大行数限制 */
229
+ maxRowsLimit: number;
230
+ /** 并发导出数量限制 */
231
+ maxConcurrentExports: number;
232
+ /** 导出超时时间(毫秒) */
233
+ exportTimeout: number;
234
+ /** 缓存配置 */
235
+ cache: {
236
+ /** 配置缓存TTL(秒) */
237
+ configTTL: number;
238
+ /** 结果缓存TTL(秒) */
239
+ resultTTL: number;
240
+ };
241
+ }
242
+ /** 导出服务基础异常 */
243
+ declare class ExportServiceError extends Error {
244
+ readonly code: string;
245
+ readonly details?: Record<string, any> | undefined;
246
+ constructor(message: string, code: string, details?: Record<string, any> | undefined);
247
+ }
248
+ /** 导出配置错误 */
249
+ declare class ExportConfigError extends ExportServiceError {
250
+ constructor(message: string, details?: Record<string, any>);
251
+ }
252
+ /** 导出数据处理错误 */
253
+ declare class ExportDataError extends ExportServiceError {
254
+ constructor(message: string, details?: Record<string, any>);
255
+ }
256
+ /** 导出文件生成错误 */
257
+ declare class ExportFileError extends ExportServiceError {
258
+ constructor(message: string, details?: Record<string, any>);
259
+ }
260
+ /** 导出事件类型 */
261
+ type ExportEventType = 'export:start' | 'export:progress' | 'export:complete' | 'export:error' | 'export:cancel' | 'config:save' | 'config:delete';
262
+ /** 导出事件 */
263
+ interface ExportEvent {
264
+ /** 事件类型 */
265
+ type: ExportEventType;
266
+ /** 导出ID */
267
+ exportId: string;
268
+ /** 事件时间 */
269
+ timestamp: Date;
270
+ /** 事件数据 */
271
+ data?: Record<string, any>;
272
+ /** 错误信息 */
273
+ error?: string;
274
+ }
275
+ /** 导出事件监听器 */
276
+ type ExportEventListener = (event: ExportEvent) => void | Promise<void>;
277
+ /** 字段映射函数 */
278
+ type FieldMapper<T = any> = (item: T, index: number) => Record<string, any>;
279
+ /** 数据转换函数 */
280
+ type DataTransformer<T = any, R = any> = (data: T[]) => R[];
281
+ /** 验证函数 */
282
+ type Validator<T = any> = (data: T) => boolean | string;
283
+ /** 格式化函数 */
284
+ type Formatter<T = any> = (value: T) => string;
285
+
286
+ export { type DataTransformer as D, type ExportConfig as E, type Formatter as F, type GroupingMode as G, type UniversalExportServiceConfig as U, type Validator as V, type ExportRequest as a, type ExportResult as b, type ExportProgress as c, type ExportFormat as d, ExportServiceError as e, ExportConfigError as f, ExportDataError as g, ExportFileError as h, type FieldType as i, type FieldAlignment as j, type ExportStatus as k, type GroupValueProcessing as l, type ExportField as m, type GroupingField as n, type GroupingConfig as o, type ExportFilter as p, type ExportSort as q, type ExportError as r, type ExportEventType as s, type ExportEvent as t, type ExportEventListener as u, type FieldMapper as v };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 存储适配器类型定义
3
+ */
4
+ /**
5
+ * 存储适配器接口
6
+ * 用于抽象不同平台的本地存储实现
7
+ */
8
+ interface StorageAdapter {
9
+ /**
10
+ * 获取存储的值
11
+ * @param key 存储键
12
+ * @returns 存储的值,不存在则返回 null
13
+ */
14
+ getItem(key: string): Promise<string | null>;
15
+ /**
16
+ * 设置存储的值
17
+ * @param key 存储键
18
+ * @param value 要存储的值
19
+ */
20
+ setItem(key: string, value: string): Promise<void>;
21
+ /**
22
+ * 删除存储的值
23
+ * @param key 存储键
24
+ */
25
+ removeItem(key: string): Promise<void>;
26
+ /**
27
+ * 清空所有存储(可选)
28
+ */
29
+ clear?(): Promise<void>;
30
+ /**
31
+ * 监听存储变化(可选,部分平台支持)
32
+ */
33
+ addChangeListener?(callback: (key: string, value: string | null) => void): () => void;
34
+ /**
35
+ * 移除存储变化监听器(可选)
36
+ */
37
+ removeChangeListener?(callback: (key: string, value: string | null) => void): void;
38
+ }
39
+ /**
40
+ * 存储事件
41
+ */
42
+ interface StorageChangeEvent {
43
+ key: string;
44
+ value: any;
45
+ oldValue?: any;
46
+ }
47
+
48
+ export type { StorageAdapter as S, StorageChangeEvent as a };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 存储适配器类型定义
3
+ */
4
+ /**
5
+ * 存储适配器接口
6
+ * 用于抽象不同平台的本地存储实现
7
+ */
8
+ interface StorageAdapter {
9
+ /**
10
+ * 获取存储的值
11
+ * @param key 存储键
12
+ * @returns 存储的值,不存在则返回 null
13
+ */
14
+ getItem(key: string): Promise<string | null>;
15
+ /**
16
+ * 设置存储的值
17
+ * @param key 存储键
18
+ * @param value 要存储的值
19
+ */
20
+ setItem(key: string, value: string): Promise<void>;
21
+ /**
22
+ * 删除存储的值
23
+ * @param key 存储键
24
+ */
25
+ removeItem(key: string): Promise<void>;
26
+ /**
27
+ * 清空所有存储(可选)
28
+ */
29
+ clear?(): Promise<void>;
30
+ /**
31
+ * 监听存储变化(可选,部分平台支持)
32
+ */
33
+ addChangeListener?(callback: (key: string, value: string | null) => void): () => void;
34
+ /**
35
+ * 移除存储变化监听器(可选)
36
+ */
37
+ removeChangeListener?(callback: (key: string, value: string | null) => void): void;
38
+ }
39
+ /**
40
+ * 存储事件
41
+ */
42
+ interface StorageChangeEvent {
43
+ key: string;
44
+ value: any;
45
+ oldValue?: any;
46
+ }
47
+
48
+ export type { StorageAdapter as S, StorageChangeEvent as a };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 请求配置接口
3
+ */
4
+ interface RequestConfig {
5
+ /** 请求 URL */
6
+ url: string;
7
+ /** HTTP 方法 */
8
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
9
+ /** 请求头 */
10
+ headers?: Record<string, string>;
11
+ /** 请求体 */
12
+ body?: any;
13
+ /** 查询参数 */
14
+ params?: Record<string, any>;
15
+ }
16
+ /**
17
+ * 请求适配器接口
18
+ * 用于抽象不同平台的网络请求实现
19
+ * - Mobile/Desktop: fetch API
20
+ * - Miniapp: Taro.request
21
+ */
22
+ interface RequestAdapter {
23
+ /**
24
+ * 发送 HTTP 请求
25
+ * @param config 请求配置
26
+ * @returns 响应数据
27
+ */
28
+ request<T = any>(config: RequestConfig): Promise<T>;
29
+ }
30
+
31
+ export type { RequestAdapter as R, RequestConfig as a };