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.
- package/LICENSE +22 -0
- package/README.md +298 -0
- package/dist/AliyunOSSProvider-7JLMJDXK.js +15 -0
- package/dist/AliyunOSSProvider-7JLMJDXK.js.map +1 -0
- package/dist/AliyunOSSProvider-GQMSDJGZ.mjs +6 -0
- package/dist/AliyunOSSProvider-GQMSDJGZ.mjs.map +1 -0
- package/dist/LocalStorageProvider-FVLLHBHO.mjs +6 -0
- package/dist/LocalStorageProvider-FVLLHBHO.mjs.map +1 -0
- package/dist/LocalStorageProvider-NBNHHWLY.js +15 -0
- package/dist/LocalStorageProvider-NBNHHWLY.js.map +1 -0
- package/dist/analytics/index.d.mts +1084 -0
- package/dist/analytics/index.d.ts +1084 -0
- package/dist/analytics/index.js +2595 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +2518 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/analytics/server/index.d.mts +499 -0
- package/dist/analytics/server/index.d.ts +499 -0
- package/dist/analytics/server/index.js +529 -0
- package/dist/analytics/server/index.js.map +1 -0
- package/dist/analytics/server/index.mjs +525 -0
- package/dist/analytics/server/index.mjs.map +1 -0
- package/dist/auth/client/index.d.mts +104 -0
- package/dist/auth/client/index.d.ts +104 -0
- package/dist/auth/client/index.js +21 -0
- package/dist/auth/client/index.js.map +1 -0
- package/dist/auth/client/index.mjs +4 -0
- package/dist/auth/client/index.mjs.map +1 -0
- package/dist/auth/components/index.d.mts +82 -0
- package/dist/auth/components/index.d.ts +82 -0
- package/dist/auth/components/index.js +93 -0
- package/dist/auth/components/index.js.map +1 -0
- package/dist/auth/components/index.mjs +86 -0
- package/dist/auth/components/index.mjs.map +1 -0
- package/dist/auth/hooks/index.d.mts +2 -0
- package/dist/auth/hooks/index.d.ts +2 -0
- package/dist/auth/hooks/index.js +17 -0
- package/dist/auth/hooks/index.js.map +1 -0
- package/dist/auth/hooks/index.mjs +4 -0
- package/dist/auth/hooks/index.mjs.map +1 -0
- package/dist/auth/index.d.mts +15 -0
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.js +110 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/index.mjs +9 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth/middleware/index.d.mts +75 -0
- package/dist/auth/middleware/index.d.ts +75 -0
- package/dist/auth/middleware/index.js +15 -0
- package/dist/auth/middleware/index.js.map +1 -0
- package/dist/auth/middleware/index.mjs +6 -0
- package/dist/auth/middleware/index.mjs.map +1 -0
- package/dist/auth/routes/index.d.mts +163 -0
- package/dist/auth/routes/index.d.ts +163 -0
- package/dist/auth/routes/index.js +27 -0
- package/dist/auth/routes/index.js.map +1 -0
- package/dist/auth/routes/index.mjs +6 -0
- package/dist/auth/routes/index.mjs.map +1 -0
- package/dist/auth/schema/index.d.mts +789 -0
- package/dist/auth/schema/index.d.ts +789 -0
- package/dist/auth/schema/index.js +41 -0
- package/dist/auth/schema/index.js.map +1 -0
- package/dist/auth/schema/index.mjs +4 -0
- package/dist/auth/schema/index.mjs.map +1 -0
- package/dist/auth/services/index.d.mts +47 -0
- package/dist/auth/services/index.d.ts +47 -0
- package/dist/auth/services/index.js +34 -0
- package/dist/auth/services/index.js.map +1 -0
- package/dist/auth/services/index.mjs +5 -0
- package/dist/auth/services/index.mjs.map +1 -0
- package/dist/chunk-3RFBUDRA.js +507 -0
- package/dist/chunk-3RFBUDRA.js.map +1 -0
- package/dist/chunk-3XG5OHFD.mjs +37 -0
- package/dist/chunk-3XG5OHFD.mjs.map +1 -0
- package/dist/chunk-6BL3AZGD.js +285 -0
- package/dist/chunk-6BL3AZGD.js.map +1 -0
- package/dist/chunk-6FNUWAIV.js +394 -0
- package/dist/chunk-6FNUWAIV.js.map +1 -0
- package/dist/chunk-6PRFP5EG.js +171 -0
- package/dist/chunk-6PRFP5EG.js.map +1 -0
- package/dist/chunk-6VHWOPRR.mjs +90 -0
- package/dist/chunk-6VHWOPRR.mjs.map +1 -0
- package/dist/chunk-AIKEVVDR.mjs +122 -0
- package/dist/chunk-AIKEVVDR.mjs.map +1 -0
- package/dist/chunk-APY57REU.js +300 -0
- package/dist/chunk-APY57REU.js.map +1 -0
- package/dist/chunk-BJTO5JO5.mjs +10 -0
- package/dist/chunk-BJTO5JO5.mjs.map +1 -0
- package/dist/chunk-C64RY2OW.mjs +295 -0
- package/dist/chunk-C64RY2OW.mjs.map +1 -0
- package/dist/chunk-DGUM43GV.js +12 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-FV3FNHQY.js +92 -0
- package/dist/chunk-FV3FNHQY.js.map +1 -0
- package/dist/chunk-GSTLV3MB.mjs +316 -0
- package/dist/chunk-GSTLV3MB.mjs.map +1 -0
- package/dist/chunk-HEMA7SWK.mjs +212 -0
- package/dist/chunk-HEMA7SWK.mjs.map +1 -0
- package/dist/chunk-HWJ34NL6.js +43 -0
- package/dist/chunk-HWJ34NL6.js.map +1 -0
- package/dist/chunk-HXFFYNIF.mjs +385 -0
- package/dist/chunk-HXFFYNIF.mjs.map +1 -0
- package/dist/chunk-KGRQNEIR.mjs +183 -0
- package/dist/chunk-KGRQNEIR.mjs.map +1 -0
- package/dist/chunk-KH6RQ4J5.js +28 -0
- package/dist/chunk-KH6RQ4J5.js.map +1 -0
- package/dist/chunk-KQGP6BTS.mjs +165 -0
- package/dist/chunk-KQGP6BTS.mjs.map +1 -0
- package/dist/chunk-NMF4ANIC.js +365 -0
- package/dist/chunk-NMF4ANIC.js.map +1 -0
- package/dist/chunk-O26VCNS3.js +216 -0
- package/dist/chunk-O26VCNS3.js.map +1 -0
- package/dist/chunk-OLHGZXN3.mjs +86 -0
- package/dist/chunk-OLHGZXN3.mjs.map +1 -0
- package/dist/chunk-QU5OT4DF.js +88 -0
- package/dist/chunk-QU5OT4DF.js.map +1 -0
- package/dist/chunk-RCNNVNLT.mjs +356 -0
- package/dist/chunk-RCNNVNLT.mjs.map +1 -0
- package/dist/chunk-ROEYW4A7.js +186 -0
- package/dist/chunk-ROEYW4A7.js.map +1 -0
- package/dist/chunk-SVWQN2LR.js +131 -0
- package/dist/chunk-SVWQN2LR.js.map +1 -0
- package/dist/chunk-TKCYPDWU.js +338 -0
- package/dist/chunk-TKCYPDWU.js.map +1 -0
- package/dist/chunk-U2L6V7KD.mjs +273 -0
- package/dist/chunk-U2L6V7KD.mjs.map +1 -0
- package/dist/chunk-YVBU7QDJ.mjs +505 -0
- package/dist/chunk-YVBU7QDJ.mjs.map +1 -0
- package/dist/chunk-ZGVB35L2.mjs +25 -0
- package/dist/chunk-ZGVB35L2.mjs.map +1 -0
- package/dist/config/index.d.mts +64 -0
- package/dist/config/index.d.ts +64 -0
- package/dist/config/index.js +136 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +128 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/drizzle-auth-service-Bxlovhv8.d.ts +145 -0
- package/dist/drizzle-auth-service-DZY2F1sv.d.mts +145 -0
- package/dist/enums-Dume-V5Y.d.mts +16 -0
- package/dist/enums-Dume-V5Y.d.ts +16 -0
- package/dist/i18n/index.d.mts +416 -0
- package/dist/i18n/index.d.ts +416 -0
- package/dist/i18n/index.js +671 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/index.mjs +650 -0
- package/dist/i18n/index.mjs.map +1 -0
- package/dist/index-8VoHap_4.d.mts +105 -0
- package/dist/index-8VoHap_4.d.ts +105 -0
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +7 -0
- package/dist/index.mjs.map +1 -0
- package/dist/logger/index.d.mts +125 -0
- package/dist/logger/index.d.ts +125 -0
- package/dist/logger/index.js +29 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/index.mjs +4 -0
- package/dist/logger/index.mjs.map +1 -0
- package/dist/request/index.d.mts +51 -0
- package/dist/request/index.d.ts +51 -0
- package/dist/request/index.js +85 -0
- package/dist/request/index.js.map +1 -0
- package/dist/request/index.mjs +82 -0
- package/dist/request/index.mjs.map +1 -0
- package/dist/storage/index.d.mts +74 -0
- package/dist/storage/index.d.ts +74 -0
- package/dist/storage/index.js +46 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.mjs +5 -0
- package/dist/storage/index.mjs.map +1 -0
- package/dist/types-BINlP9MK.d.mts +286 -0
- package/dist/types-BINlP9MK.d.ts +286 -0
- package/dist/types-BaZccpvk.d.mts +48 -0
- package/dist/types-BaZccpvk.d.ts +48 -0
- package/dist/types-CbTsi9CZ.d.mts +31 -0
- package/dist/types-CbTsi9CZ.d.ts +31 -0
- package/dist/types-CoGG1rNV.d.mts +258 -0
- package/dist/types-CoGG1rNV.d.ts +258 -0
- package/dist/types-DAxQ1MeY.d.ts +70 -0
- package/dist/types-DT8LVCvE.d.mts +70 -0
- package/dist/types-DW9qar-w.d.mts +52 -0
- package/dist/types-DW9qar-w.d.ts +52 -0
- package/dist/universalExport/index.d.mts +235 -0
- package/dist/universalExport/index.d.ts +235 -0
- package/dist/universalExport/index.js +621 -0
- package/dist/universalExport/index.js.map +1 -0
- package/dist/universalExport/index.mjs +580 -0
- package/dist/universalExport/index.mjs.map +1 -0
- package/dist/universalExport/server/index.d.mts +429 -0
- package/dist/universalExport/server/index.d.ts +429 -0
- package/dist/universalExport/server/index.js +263 -0
- package/dist/universalExport/server/index.js.map +1 -0
- package/dist/universalExport/server/index.mjs +242 -0
- package/dist/universalExport/server/index.mjs.map +1 -0
- package/dist/universalFile/index.d.mts +310 -0
- package/dist/universalFile/index.d.ts +310 -0
- package/dist/universalFile/index.js +811 -0
- package/dist/universalFile/index.js.map +1 -0
- package/dist/universalFile/index.mjs +736 -0
- package/dist/universalFile/index.mjs.map +1 -0
- package/dist/universalFile/server/index.d.mts +2428 -0
- package/dist/universalFile/server/index.d.ts +2428 -0
- package/dist/universalFile/server/index.js +4578 -0
- package/dist/universalFile/server/index.js.map +1 -0
- package/dist/universalFile/server/index.mjs +4518 -0
- package/dist/universalFile/server/index.mjs.map +1 -0
- package/dist/useElectronStorage-Dj0rcorG.d.mts +65 -0
- package/dist/useElectronStorage-DwnNfIhl.d.ts +65 -0
- package/dist/utils/index.d.mts +188 -0
- package/dist/utils/index.d.ts +188 -0
- package/dist/utils/index.js +42 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +5 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +220 -0
- package/tailwind.animations.js +34 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { d as ExportFormat, E as ExportConfig, k as ExportStatus, m as ExportField, i as FieldType } from '../../types-BINlP9MK.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* UniversalExport Server 端类型定义
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** 导出服务配置 */
|
|
8
|
+
interface UniversalExportServiceConfig {
|
|
9
|
+
/** 数据库连接(可选) */
|
|
10
|
+
db?: any;
|
|
11
|
+
/** 导出文件存储目录 */
|
|
12
|
+
exportDir?: string;
|
|
13
|
+
/** 临时文件目录 */
|
|
14
|
+
tempDir?: string;
|
|
15
|
+
/** 最大导出行数 */
|
|
16
|
+
maxRows?: number;
|
|
17
|
+
/** 是否启用流式导出 */
|
|
18
|
+
enableStreaming?: boolean;
|
|
19
|
+
/** 导出超时时间(毫秒) */
|
|
20
|
+
timeout?: number;
|
|
21
|
+
}
|
|
22
|
+
/** 导出引擎接口 */
|
|
23
|
+
interface IExportEngine {
|
|
24
|
+
/** 引擎格式 */
|
|
25
|
+
readonly format: ExportFormat;
|
|
26
|
+
/** 导出数据 */
|
|
27
|
+
export(data: any[], config: ExportConfig): Promise<ExportResult>;
|
|
28
|
+
/** 流式导出 */
|
|
29
|
+
exportStream?(data: AsyncIterable<any>, config: ExportConfig): Promise<ExportResult>;
|
|
30
|
+
/** 验证配置 */
|
|
31
|
+
validateConfig(config: ExportConfig): boolean;
|
|
32
|
+
/** 获取引擎信息 */
|
|
33
|
+
getInfo(): EngineInfo;
|
|
34
|
+
}
|
|
35
|
+
/** 引擎信息 */
|
|
36
|
+
interface EngineInfo {
|
|
37
|
+
/** 引擎名称 */
|
|
38
|
+
name: string;
|
|
39
|
+
/** 支持的格式 */
|
|
40
|
+
format: ExportFormat;
|
|
41
|
+
/** 支持流式导出 */
|
|
42
|
+
supportsStreaming: boolean;
|
|
43
|
+
/** 最大行数限制 */
|
|
44
|
+
maxRows?: number;
|
|
45
|
+
}
|
|
46
|
+
/** 导出结果 */
|
|
47
|
+
interface ExportResult {
|
|
48
|
+
/** 是否成功 */
|
|
49
|
+
success: boolean;
|
|
50
|
+
/** 文件路径 */
|
|
51
|
+
filePath?: string;
|
|
52
|
+
/** 文件大小(字节) */
|
|
53
|
+
fileSize?: number;
|
|
54
|
+
/** 导出行数 */
|
|
55
|
+
rowCount: number;
|
|
56
|
+
/** 导出时长(毫秒) */
|
|
57
|
+
duration: number;
|
|
58
|
+
/** 错误信息 */
|
|
59
|
+
error?: string;
|
|
60
|
+
/** 元数据 */
|
|
61
|
+
metadata?: Record<string, any>;
|
|
62
|
+
}
|
|
63
|
+
/** 导出进度 */
|
|
64
|
+
interface ExportProgress {
|
|
65
|
+
/** 任务 ID */
|
|
66
|
+
taskId: string;
|
|
67
|
+
/** 当前状态 */
|
|
68
|
+
status: ExportStatus;
|
|
69
|
+
/** 已处理行数 */
|
|
70
|
+
processedRows: number;
|
|
71
|
+
/** 总行数 */
|
|
72
|
+
totalRows: number;
|
|
73
|
+
/** 进度百分比 */
|
|
74
|
+
percentage: number;
|
|
75
|
+
/** 剩余时间(秒) */
|
|
76
|
+
estimatedTime?: number;
|
|
77
|
+
/** 错误信息 */
|
|
78
|
+
error?: string;
|
|
79
|
+
}
|
|
80
|
+
/** 数据转换器 */
|
|
81
|
+
interface DataTransformer {
|
|
82
|
+
/** 转换数据行 */
|
|
83
|
+
transform(row: any, config: ExportConfig): any;
|
|
84
|
+
/** 批量转换 */
|
|
85
|
+
transformBatch?(rows: any[], config: ExportConfig): any[];
|
|
86
|
+
}
|
|
87
|
+
/** 字段映射器 */
|
|
88
|
+
interface FieldMapper {
|
|
89
|
+
/** 映射字段 */
|
|
90
|
+
map(value: any, field: ExportField): any;
|
|
91
|
+
}
|
|
92
|
+
/** 数据验证器 */
|
|
93
|
+
interface Validator {
|
|
94
|
+
/** 验证数据 */
|
|
95
|
+
validate(data: any[], config: ExportConfig): ValidationResult;
|
|
96
|
+
}
|
|
97
|
+
/** 验证结果 */
|
|
98
|
+
interface ValidationResult {
|
|
99
|
+
/** 是否有效 */
|
|
100
|
+
valid: boolean;
|
|
101
|
+
/** 错误列表 */
|
|
102
|
+
errors: ValidationError[];
|
|
103
|
+
}
|
|
104
|
+
/** 验证错误 */
|
|
105
|
+
interface ValidationError {
|
|
106
|
+
/** 行号 */
|
|
107
|
+
row: number;
|
|
108
|
+
/** 字段 */
|
|
109
|
+
field: string;
|
|
110
|
+
/** 错误消息 */
|
|
111
|
+
message: string;
|
|
112
|
+
}
|
|
113
|
+
/** 数据源接口 */
|
|
114
|
+
interface IDataSource {
|
|
115
|
+
/** 获取数据 */
|
|
116
|
+
getData(query: any, options?: DataQueryOptions): Promise<any[]>;
|
|
117
|
+
/** 获取数据流 */
|
|
118
|
+
getDataStream?(query: any, options?: DataQueryOptions): AsyncIterable<any>;
|
|
119
|
+
/** 获取总数 */
|
|
120
|
+
getCount(query: any): Promise<number>;
|
|
121
|
+
}
|
|
122
|
+
/** 数据查询选项 */
|
|
123
|
+
interface DataQueryOptions {
|
|
124
|
+
/** 分页 */
|
|
125
|
+
page?: number;
|
|
126
|
+
pageSize?: number;
|
|
127
|
+
/** 排序 */
|
|
128
|
+
orderBy?: string;
|
|
129
|
+
orderDirection?: 'asc' | 'desc';
|
|
130
|
+
/** 过滤 */
|
|
131
|
+
filters?: Record<string, any>;
|
|
132
|
+
}
|
|
133
|
+
/** 任务创建选项 */
|
|
134
|
+
interface TaskCreateOptions {
|
|
135
|
+
/** 配置 ID */
|
|
136
|
+
configId: string;
|
|
137
|
+
/** 导出格式 */
|
|
138
|
+
format: ExportFormat;
|
|
139
|
+
/** 查询条件 */
|
|
140
|
+
query?: any;
|
|
141
|
+
/** 创建者 ID */
|
|
142
|
+
creatorId?: string;
|
|
143
|
+
/** 任务名称 */
|
|
144
|
+
name?: string;
|
|
145
|
+
/** 任务描述 */
|
|
146
|
+
description?: string;
|
|
147
|
+
}
|
|
148
|
+
/** 任务更新选项 */
|
|
149
|
+
interface TaskUpdateOptions {
|
|
150
|
+
/** 任务状态 */
|
|
151
|
+
status?: ExportStatus;
|
|
152
|
+
/** 进度 */
|
|
153
|
+
progress?: number;
|
|
154
|
+
/** 文件路径 */
|
|
155
|
+
filePath?: string;
|
|
156
|
+
/** 文件大小 */
|
|
157
|
+
fileSize?: number;
|
|
158
|
+
/** 导出行数 */
|
|
159
|
+
rowCount?: number;
|
|
160
|
+
/** 错误信息 */
|
|
161
|
+
error?: string;
|
|
162
|
+
}
|
|
163
|
+
/** 导出配置记录 */
|
|
164
|
+
interface ExportConfigRecord {
|
|
165
|
+
/** 配置 ID */
|
|
166
|
+
id: string;
|
|
167
|
+
/** 配置名称 */
|
|
168
|
+
name: string;
|
|
169
|
+
/** 配置描述 */
|
|
170
|
+
description?: string;
|
|
171
|
+
/** 导出格式 */
|
|
172
|
+
format: ExportFormat;
|
|
173
|
+
/** 字段定义 */
|
|
174
|
+
fields: ExportField[];
|
|
175
|
+
/** 创建时间 */
|
|
176
|
+
createdAt: Date | string;
|
|
177
|
+
/** 更新时间 */
|
|
178
|
+
updatedAt: Date | string;
|
|
179
|
+
/** 创建者 ID */
|
|
180
|
+
creatorId?: string;
|
|
181
|
+
}
|
|
182
|
+
/** 导出任务记录 */
|
|
183
|
+
interface ExportTaskRecord {
|
|
184
|
+
/** 任务 ID */
|
|
185
|
+
id: string;
|
|
186
|
+
/** 配置 ID */
|
|
187
|
+
configId: string;
|
|
188
|
+
/** 任务状态 */
|
|
189
|
+
status: ExportStatus;
|
|
190
|
+
/** 文件路径 */
|
|
191
|
+
filePath?: string;
|
|
192
|
+
/** 导出进度 */
|
|
193
|
+
progress?: number;
|
|
194
|
+
/** 创建时间 */
|
|
195
|
+
createdAt: Date | string;
|
|
196
|
+
/** 更新时间 */
|
|
197
|
+
updatedAt: Date | string;
|
|
198
|
+
/** 完成时间 */
|
|
199
|
+
completedAt?: Date | string;
|
|
200
|
+
}
|
|
201
|
+
/** 导出历史记录 */
|
|
202
|
+
interface ExportHistoryRecord {
|
|
203
|
+
/** 历史 ID */
|
|
204
|
+
id: string;
|
|
205
|
+
/** 任务 ID */
|
|
206
|
+
taskId: string;
|
|
207
|
+
/** 配置 ID */
|
|
208
|
+
configId: string;
|
|
209
|
+
/** 导出格式 */
|
|
210
|
+
format: ExportFormat;
|
|
211
|
+
/** 导出状态 */
|
|
212
|
+
status: ExportStatus;
|
|
213
|
+
/** 文件路径 */
|
|
214
|
+
filePath?: string;
|
|
215
|
+
/** 文件大小 */
|
|
216
|
+
fileSize?: number;
|
|
217
|
+
/** 导出行数 */
|
|
218
|
+
rowCount: number;
|
|
219
|
+
/** 导出时长 */
|
|
220
|
+
duration: number;
|
|
221
|
+
/** 创建者 ID */
|
|
222
|
+
creatorId?: string;
|
|
223
|
+
/** 创建时间 */
|
|
224
|
+
createdAt: Date | string;
|
|
225
|
+
/** 错误信息 */
|
|
226
|
+
error?: string;
|
|
227
|
+
}
|
|
228
|
+
/** 导出事件类型 */
|
|
229
|
+
type ExportEventType = 'task:created' | 'task:started' | 'task:progress' | 'task:completed' | 'task:failed' | 'task:cancelled' | 'config:created' | 'config:updated' | 'config:deleted';
|
|
230
|
+
/** 导出事件 */
|
|
231
|
+
interface ExportEvent {
|
|
232
|
+
/** 事件类型 */
|
|
233
|
+
type: ExportEventType;
|
|
234
|
+
/** 任务 ID */
|
|
235
|
+
taskId?: string;
|
|
236
|
+
/** 配置 ID */
|
|
237
|
+
configId?: string;
|
|
238
|
+
/** 事件数据 */
|
|
239
|
+
data?: any;
|
|
240
|
+
/** 时间戳 */
|
|
241
|
+
timestamp: Date;
|
|
242
|
+
}
|
|
243
|
+
/** 事件监听器 */
|
|
244
|
+
type ExportEventListener = (event: ExportEvent) => void | Promise<void>;
|
|
245
|
+
/** 格式化器函数 */
|
|
246
|
+
type FormatterFunction = (value: any) => string;
|
|
247
|
+
/** 聚合函数 */
|
|
248
|
+
type AggregateFunction = (values: any[]) => any;
|
|
249
|
+
/** 自定义处理函数 */
|
|
250
|
+
type CustomProcessor = (values: any[]) => any;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* UniversalExport Service 工厂函数
|
|
254
|
+
* 提供简化的服务初始化方式
|
|
255
|
+
*/
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* 创建导出服务配置(带智能默认值)
|
|
259
|
+
*/
|
|
260
|
+
declare function createExportServiceConfig(options?: Partial<UniversalExportServiceConfig>): UniversalExportServiceConfig;
|
|
261
|
+
/**
|
|
262
|
+
* 创建导出服务实例(简化版)
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* // 最简配置
|
|
267
|
+
* const service = createUniversalExportService();
|
|
268
|
+
*
|
|
269
|
+
* // 标准配置
|
|
270
|
+
* const service = createUniversalExportService({
|
|
271
|
+
* db: drizzleDb,
|
|
272
|
+
* exportDir: './exports',
|
|
273
|
+
* maxRows: 50000,
|
|
274
|
+
* });
|
|
275
|
+
* ```
|
|
276
|
+
*/
|
|
277
|
+
declare function createUniversalExportService(options?: Partial<UniversalExportServiceConfig>): {
|
|
278
|
+
config: UniversalExportServiceConfig;
|
|
279
|
+
export(): Promise<never>;
|
|
280
|
+
createTask(): Promise<never>;
|
|
281
|
+
};
|
|
282
|
+
/**
|
|
283
|
+
* 从环境变量创建配置(便利函数)
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* ```typescript
|
|
287
|
+
* // .env
|
|
288
|
+
* // EXPORT_DIR=./exports
|
|
289
|
+
* // EXPORT_MAX_ROWS=50000
|
|
290
|
+
*
|
|
291
|
+
* const service = createExportServiceFromEnv();
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
declare function createExportServiceFromEnv(db?: any): {
|
|
295
|
+
config: UniversalExportServiceConfig;
|
|
296
|
+
export(): Promise<never>;
|
|
297
|
+
createTask(): Promise<never>;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* UniversalExport 预设配置
|
|
302
|
+
* 提供常见场景的开箱即用配置
|
|
303
|
+
*/
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* 小型应用预设(数据量小)
|
|
307
|
+
*/
|
|
308
|
+
declare function createSmallAppPreset(): Partial<UniversalExportServiceConfig>;
|
|
309
|
+
/**
|
|
310
|
+
* 中型应用预设(默认配置)
|
|
311
|
+
*/
|
|
312
|
+
declare function createMediumAppPreset(): Partial<UniversalExportServiceConfig>;
|
|
313
|
+
/**
|
|
314
|
+
* 大型应用预设(数据量大)
|
|
315
|
+
*/
|
|
316
|
+
declare function createLargeAppPreset(): Partial<UniversalExportServiceConfig>;
|
|
317
|
+
/**
|
|
318
|
+
* 实时导出预设(快速响应)
|
|
319
|
+
*/
|
|
320
|
+
declare function createRealtimeExportPreset(): Partial<UniversalExportServiceConfig>;
|
|
321
|
+
/**
|
|
322
|
+
* 批量导出预设(大批量、离线处理)
|
|
323
|
+
*/
|
|
324
|
+
declare function createBatchExportPreset(): Partial<UniversalExportServiceConfig>;
|
|
325
|
+
/**
|
|
326
|
+
* 智能预设:根据环境自动选择
|
|
327
|
+
*/
|
|
328
|
+
declare function createSmartExportPreset(): Partial<UniversalExportServiceConfig>;
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* UniversalExport 配置验证
|
|
332
|
+
*/
|
|
333
|
+
|
|
334
|
+
declare class ConfigValidationError extends Error {
|
|
335
|
+
field: string;
|
|
336
|
+
constructor(message: string, field: string);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* 验证导出服务配置
|
|
340
|
+
*/
|
|
341
|
+
declare function validateExportConfig(config: UniversalExportServiceConfig): void;
|
|
342
|
+
/**
|
|
343
|
+
* 验证环境变量
|
|
344
|
+
*/
|
|
345
|
+
declare function validateEnvironment(requiredVars: string[]): void;
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* UniversalExport Server 工具函数
|
|
349
|
+
*/
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* 格式化字段值
|
|
353
|
+
*
|
|
354
|
+
* @param value 原始值
|
|
355
|
+
* @param field 字段定义
|
|
356
|
+
* @returns 格式化后的值
|
|
357
|
+
*/
|
|
358
|
+
declare function formatFieldValue(value: any, field: ExportField): string;
|
|
359
|
+
/**
|
|
360
|
+
* 验证字段值
|
|
361
|
+
*
|
|
362
|
+
* @param value 字段值
|
|
363
|
+
* @param field 字段定义
|
|
364
|
+
* @returns 是否有效
|
|
365
|
+
*/
|
|
366
|
+
declare function validateFieldValue(value: any, field: ExportField): boolean;
|
|
367
|
+
/**
|
|
368
|
+
* 转换字段类型
|
|
369
|
+
*
|
|
370
|
+
* @param value 原始值
|
|
371
|
+
* @param targetType 目标类型
|
|
372
|
+
* @returns 转换后的值
|
|
373
|
+
*/
|
|
374
|
+
declare function convertFieldType(value: any, targetType: FieldType): any;
|
|
375
|
+
/**
|
|
376
|
+
* 安全获取嵌套属性值
|
|
377
|
+
*
|
|
378
|
+
* @param obj 对象
|
|
379
|
+
* @param path 属性路径(支持点号分隔)
|
|
380
|
+
* @returns 属性值
|
|
381
|
+
*
|
|
382
|
+
* @example
|
|
383
|
+
* ```typescript
|
|
384
|
+
* const obj = { user: { name: 'John', age: 30 } };
|
|
385
|
+
* getNestedValue(obj, 'user.name') // 'John'
|
|
386
|
+
* getNestedValue(obj, 'user.email') // undefined
|
|
387
|
+
* ```
|
|
388
|
+
*/
|
|
389
|
+
declare function getNestedValue(obj: any, path: string): any;
|
|
390
|
+
/**
|
|
391
|
+
* 转义 CSV 字段值
|
|
392
|
+
*
|
|
393
|
+
* @param value 字段值
|
|
394
|
+
* @returns 转义后的值
|
|
395
|
+
*/
|
|
396
|
+
declare function escapeCsvValue(value: string): string;
|
|
397
|
+
/**
|
|
398
|
+
* 生成唯一的文件名
|
|
399
|
+
*
|
|
400
|
+
* @param prefix 前缀
|
|
401
|
+
* @param extension 扩展名
|
|
402
|
+
* @returns 唯一文件名
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* ```typescript
|
|
406
|
+
* generateUniqueFilename('export', 'xlsx')
|
|
407
|
+
* // 'export_20231111_123456_abc123.xlsx'
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
declare function generateUniqueFilename(prefix: string, extension: string): string;
|
|
411
|
+
/**
|
|
412
|
+
* 计算导出进度百分比
|
|
413
|
+
*
|
|
414
|
+
* @param processed 已处理行数
|
|
415
|
+
* @param total 总行数
|
|
416
|
+
* @returns 百分比(0-100)
|
|
417
|
+
*/
|
|
418
|
+
declare function calculateProgress(processed: number, total: number): number;
|
|
419
|
+
/**
|
|
420
|
+
* 估算剩余时间(秒)
|
|
421
|
+
*
|
|
422
|
+
* @param processed 已处理行数
|
|
423
|
+
* @param total 总行数
|
|
424
|
+
* @param elapsedMs 已用时间(毫秒)
|
|
425
|
+
* @returns 剩余时间(秒)
|
|
426
|
+
*/
|
|
427
|
+
declare function estimateRemainingTime(processed: number, total: number, elapsedMs: number): number;
|
|
428
|
+
|
|
429
|
+
export { type AggregateFunction, type CustomProcessor, type DataQueryOptions, type DataTransformer, type EngineInfo, type ExportConfigRecord, ConfigValidationError as ExportConfigValidationError, type ExportEvent, type ExportEventListener, type ExportEventType, type ExportHistoryRecord, type ExportProgress, type ExportResult, type ExportTaskRecord, type FieldMapper, type FormatterFunction, type IDataSource, type IExportEngine, type TaskCreateOptions, type TaskUpdateOptions, type UniversalExportServiceConfig, type ValidationError, type ValidationResult, type Validator, calculateProgress, convertFieldType, createBatchExportPreset, createExportServiceConfig, createExportServiceFromEnv, createLargeAppPreset, createMediumAppPreset, createRealtimeExportPreset, createSmallAppPreset, createSmartExportPreset, createUniversalExportService, escapeCsvValue, estimateRemainingTime, formatFieldValue, generateUniqueFilename, getNestedValue, validateExportConfig, validateEnvironment as validateExportEnvironment, validateFieldValue };
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('../../chunk-DGUM43GV.js');
|
|
4
|
+
|
|
5
|
+
// src/universalExport/server/factory.ts
|
|
6
|
+
function createExportServiceConfig(options = {}) {
|
|
7
|
+
return {
|
|
8
|
+
db: options.db,
|
|
9
|
+
exportDir: options.exportDir || process.env.EXPORT_DIR || "./exports",
|
|
10
|
+
tempDir: options.tempDir || process.env.TEMP_DIR || "./temp",
|
|
11
|
+
maxRows: options.maxRows || 1e5,
|
|
12
|
+
// 默认最多导出 10 万行
|
|
13
|
+
enableStreaming: options.enableStreaming !== false,
|
|
14
|
+
// 默认启用流式导出
|
|
15
|
+
timeout: options.timeout || 3e5
|
|
16
|
+
// 默认超时 5 分钟
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function createUniversalExportService(options = {}) {
|
|
20
|
+
const config = createExportServiceConfig(options);
|
|
21
|
+
console.warn(
|
|
22
|
+
"\u26A0\uFE0F UniversalExportService \u7684\u5B8C\u6574\u5B9E\u73B0\u5C06\u5728\u540E\u7EED Phase \u4E2D\u8FC1\u79FB\u5230 Sa2kit\u3002\n \u5F53\u524D\u7248\u672C\u4EC5\u5305\u542B\u7C7B\u578B\u5B9A\u4E49\u548C\u914D\u7F6E\u5DE5\u5382\u51FD\u6570\u3002\n \u8BF7\u6682\u65F6\u7EE7\u7EED\u4ECE LyricNote \u7684 lib/universalExport \u5BFC\u5165\u670D\u52A1\u7C7B\u3002"
|
|
23
|
+
);
|
|
24
|
+
return {
|
|
25
|
+
config,
|
|
26
|
+
// 占位方法
|
|
27
|
+
async export() {
|
|
28
|
+
throw new Error("UniversalExportService \u5C1A\u672A\u5B8C\u5168\u8FC1\u79FB\uFF0C\u8BF7\u4ECE LyricNote \u5BFC\u5165");
|
|
29
|
+
},
|
|
30
|
+
async createTask() {
|
|
31
|
+
throw new Error("UniversalExportService \u5C1A\u672A\u5B8C\u5168\u8FC1\u79FB\uFF0C\u8BF7\u4ECE LyricNote \u5BFC\u5165");
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function createExportServiceFromEnv(db) {
|
|
36
|
+
return createUniversalExportService({
|
|
37
|
+
db,
|
|
38
|
+
exportDir: process.env.EXPORT_DIR,
|
|
39
|
+
tempDir: process.env.TEMP_DIR,
|
|
40
|
+
maxRows: process.env.EXPORT_MAX_ROWS ? parseInt(process.env.EXPORT_MAX_ROWS) : void 0
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// src/universalExport/server/presets.ts
|
|
45
|
+
function createSmallAppPreset() {
|
|
46
|
+
return {
|
|
47
|
+
maxRows: 1e4,
|
|
48
|
+
// 1万行
|
|
49
|
+
timeout: 6e4,
|
|
50
|
+
// 1分钟
|
|
51
|
+
enableStreaming: false
|
|
52
|
+
// 小数据量不需要流式导出
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function createMediumAppPreset() {
|
|
56
|
+
return {
|
|
57
|
+
maxRows: 1e5,
|
|
58
|
+
// 10万行
|
|
59
|
+
timeout: 3e5,
|
|
60
|
+
// 5分钟
|
|
61
|
+
enableStreaming: true
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function createLargeAppPreset() {
|
|
65
|
+
return {
|
|
66
|
+
maxRows: 1e6,
|
|
67
|
+
// 100万行
|
|
68
|
+
timeout: 6e5,
|
|
69
|
+
// 10分钟
|
|
70
|
+
enableStreaming: true
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function createRealtimeExportPreset() {
|
|
74
|
+
return {
|
|
75
|
+
maxRows: 5e3,
|
|
76
|
+
// 5千行
|
|
77
|
+
timeout: 3e4,
|
|
78
|
+
// 30秒
|
|
79
|
+
enableStreaming: false
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function createBatchExportPreset() {
|
|
83
|
+
return {
|
|
84
|
+
maxRows: Number.MAX_SAFE_INTEGER,
|
|
85
|
+
// 不限制
|
|
86
|
+
timeout: 18e5,
|
|
87
|
+
// 30分钟
|
|
88
|
+
enableStreaming: true
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function createSmartExportPreset() {
|
|
92
|
+
const envMaxRows = process.env.EXPORT_MAX_ROWS;
|
|
93
|
+
if (envMaxRows) {
|
|
94
|
+
const maxRows = parseInt(envMaxRows);
|
|
95
|
+
if (maxRows <= 1e4) {
|
|
96
|
+
return createSmallAppPreset();
|
|
97
|
+
} else if (maxRows <= 1e5) {
|
|
98
|
+
return createMediumAppPreset();
|
|
99
|
+
} else {
|
|
100
|
+
return createLargeAppPreset();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return createMediumAppPreset();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/universalExport/server/validation.ts
|
|
107
|
+
var ConfigValidationError = class extends Error {
|
|
108
|
+
constructor(message, field) {
|
|
109
|
+
super(message);
|
|
110
|
+
this.field = field;
|
|
111
|
+
this.name = "ConfigValidationError";
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
function validateExportConfig(config) {
|
|
115
|
+
if (!config.exportDir) {
|
|
116
|
+
throw new ConfigValidationError("exportDir is required", "exportDir");
|
|
117
|
+
}
|
|
118
|
+
if (!config.tempDir) {
|
|
119
|
+
throw new ConfigValidationError("tempDir is required", "tempDir");
|
|
120
|
+
}
|
|
121
|
+
if (config.maxRows && config.maxRows <= 0) {
|
|
122
|
+
throw new ConfigValidationError(
|
|
123
|
+
"maxRows must be greater than 0",
|
|
124
|
+
"maxRows"
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
if (config.timeout && config.timeout <= 0) {
|
|
128
|
+
throw new ConfigValidationError(
|
|
129
|
+
"timeout must be greater than 0",
|
|
130
|
+
"timeout"
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
if (config.maxRows && config.maxRows > 1e6) {
|
|
134
|
+
console.warn(
|
|
135
|
+
`\u26A0\uFE0F Warning: maxRows (${config.maxRows}) is very large. Consider using pagination or streaming for better performance.`
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function validateEnvironment(requiredVars) {
|
|
140
|
+
const missing = [];
|
|
141
|
+
for (const varName of requiredVars) {
|
|
142
|
+
if (!process.env[varName]) {
|
|
143
|
+
missing.push(varName);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (missing.length > 0) {
|
|
147
|
+
throw new ConfigValidationError(
|
|
148
|
+
`Missing required environment variables: ${missing.join(", ")}`,
|
|
149
|
+
"environment"
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// src/universalExport/server/utils/index.ts
|
|
155
|
+
function formatFieldValue(value, field) {
|
|
156
|
+
if (field.formatter) {
|
|
157
|
+
return field.formatter(value);
|
|
158
|
+
}
|
|
159
|
+
if (value === null || value === void 0) {
|
|
160
|
+
return "";
|
|
161
|
+
}
|
|
162
|
+
switch (field.type) {
|
|
163
|
+
case "date":
|
|
164
|
+
return value instanceof Date ? value.toISOString().split("T")[0] || "" : String(value);
|
|
165
|
+
case "boolean":
|
|
166
|
+
return value ? "\u662F" : "\u5426";
|
|
167
|
+
case "array":
|
|
168
|
+
return Array.isArray(value) ? value.join(", ") : String(value);
|
|
169
|
+
case "object":
|
|
170
|
+
return typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
171
|
+
case "number":
|
|
172
|
+
return typeof value === "number" ? value.toLocaleString() : String(value);
|
|
173
|
+
default:
|
|
174
|
+
return String(value);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function validateFieldValue(value, field) {
|
|
178
|
+
if (field.required && (value === null || value === void 0 || value === "")) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
switch (field.type) {
|
|
182
|
+
case "number":
|
|
183
|
+
return typeof value === "number" || !isNaN(Number(value));
|
|
184
|
+
case "boolean":
|
|
185
|
+
return typeof value === "boolean";
|
|
186
|
+
case "array":
|
|
187
|
+
return Array.isArray(value);
|
|
188
|
+
case "object":
|
|
189
|
+
return typeof value === "object";
|
|
190
|
+
case "date":
|
|
191
|
+
return value instanceof Date || !isNaN(Date.parse(value));
|
|
192
|
+
default:
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function convertFieldType(value, targetType) {
|
|
197
|
+
if (value === null || value === void 0) {
|
|
198
|
+
return value;
|
|
199
|
+
}
|
|
200
|
+
switch (targetType) {
|
|
201
|
+
case "string":
|
|
202
|
+
return String(value);
|
|
203
|
+
case "number":
|
|
204
|
+
return Number(value);
|
|
205
|
+
case "boolean":
|
|
206
|
+
return Boolean(value);
|
|
207
|
+
case "date":
|
|
208
|
+
return value instanceof Date ? value : new Date(value);
|
|
209
|
+
case "array":
|
|
210
|
+
return Array.isArray(value) ? value : [value];
|
|
211
|
+
case "object":
|
|
212
|
+
return typeof value === "object" ? value : { value };
|
|
213
|
+
default:
|
|
214
|
+
return value;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function getNestedValue(obj, path) {
|
|
218
|
+
return path.split(".").reduce((current, key) => current?.[key], obj);
|
|
219
|
+
}
|
|
220
|
+
function escapeCsvValue(value) {
|
|
221
|
+
if (value.includes(",") || value.includes('"') || value.includes("\n")) {
|
|
222
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
223
|
+
}
|
|
224
|
+
return value;
|
|
225
|
+
}
|
|
226
|
+
function generateUniqueFilename(prefix, extension) {
|
|
227
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, -5);
|
|
228
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
229
|
+
return `${prefix}_${timestamp}_${random}.${extension}`;
|
|
230
|
+
}
|
|
231
|
+
function calculateProgress(processed, total) {
|
|
232
|
+
if (total === 0) return 0;
|
|
233
|
+
return Math.min(Math.round(processed / total * 100), 100);
|
|
234
|
+
}
|
|
235
|
+
function estimateRemainingTime(processed, total, elapsedMs) {
|
|
236
|
+
if (processed === 0) return 0;
|
|
237
|
+
const avgTimePerRow = elapsedMs / processed;
|
|
238
|
+
const remainingRows = total - processed;
|
|
239
|
+
return Math.round(remainingRows * avgTimePerRow / 1e3);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
exports.ExportConfigValidationError = ConfigValidationError;
|
|
243
|
+
exports.calculateProgress = calculateProgress;
|
|
244
|
+
exports.convertFieldType = convertFieldType;
|
|
245
|
+
exports.createBatchExportPreset = createBatchExportPreset;
|
|
246
|
+
exports.createExportServiceConfig = createExportServiceConfig;
|
|
247
|
+
exports.createExportServiceFromEnv = createExportServiceFromEnv;
|
|
248
|
+
exports.createLargeAppPreset = createLargeAppPreset;
|
|
249
|
+
exports.createMediumAppPreset = createMediumAppPreset;
|
|
250
|
+
exports.createRealtimeExportPreset = createRealtimeExportPreset;
|
|
251
|
+
exports.createSmallAppPreset = createSmallAppPreset;
|
|
252
|
+
exports.createSmartExportPreset = createSmartExportPreset;
|
|
253
|
+
exports.createUniversalExportService = createUniversalExportService;
|
|
254
|
+
exports.escapeCsvValue = escapeCsvValue;
|
|
255
|
+
exports.estimateRemainingTime = estimateRemainingTime;
|
|
256
|
+
exports.formatFieldValue = formatFieldValue;
|
|
257
|
+
exports.generateUniqueFilename = generateUniqueFilename;
|
|
258
|
+
exports.getNestedValue = getNestedValue;
|
|
259
|
+
exports.validateExportConfig = validateExportConfig;
|
|
260
|
+
exports.validateExportEnvironment = validateEnvironment;
|
|
261
|
+
exports.validateFieldValue = validateFieldValue;
|
|
262
|
+
//# sourceMappingURL=index.js.map
|
|
263
|
+
//# sourceMappingURL=index.js.map
|