@sinoia/hubdoc-tools 1.3.4 → 1.3.6
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/dist/plugins/alfresco/index.d.ts +26 -0
- package/dist/plugins/alfresco/index.d.ts.map +1 -0
- package/dist/plugins/alfresco/index.js +405 -0
- package/dist/plugins/alfresco/index.js.map +1 -0
- package/dist/plugins/aws-s3/index.d.ts +23 -0
- package/dist/plugins/aws-s3/index.d.ts.map +1 -0
- package/dist/plugins/aws-s3/index.js +383 -0
- package/dist/plugins/aws-s3/index.js.map +1 -0
- package/dist/plugins/azure-blob/index.d.ts +23 -0
- package/dist/plugins/azure-blob/index.d.ts.map +1 -0
- package/dist/plugins/azure-blob/index.js +340 -0
- package/dist/plugins/azure-blob/index.js.map +1 -0
- package/dist/plugins/box/index.d.ts +26 -0
- package/dist/plugins/box/index.d.ts.map +1 -0
- package/dist/plugins/box/index.js +387 -0
- package/dist/plugins/box/index.js.map +1 -0
- package/dist/plugins/dropbox/index.d.ts +27 -0
- package/dist/plugins/dropbox/index.d.ts.map +1 -0
- package/dist/plugins/dropbox/index.js +375 -0
- package/dist/plugins/dropbox/index.js.map +1 -0
- package/dist/plugins/googledrive/index.d.ts +27 -0
- package/dist/plugins/googledrive/index.d.ts.map +1 -0
- package/dist/plugins/googledrive/index.js +383 -0
- package/dist/plugins/googledrive/index.js.map +1 -0
- package/dist/plugins/nuxeo/index.d.ts +24 -0
- package/dist/plugins/nuxeo/index.d.ts.map +1 -0
- package/dist/plugins/nuxeo/index.js +405 -0
- package/dist/plugins/nuxeo/index.js.map +1 -0
- package/dist/plugins/onedrive/index.d.ts +25 -0
- package/dist/plugins/onedrive/index.d.ts.map +1 -0
- package/dist/plugins/onedrive/index.js +362 -0
- package/dist/plugins/onedrive/index.js.map +1 -0
- package/dist/plugins/opentext/index.d.ts +26 -0
- package/dist/plugins/opentext/index.d.ts.map +1 -0
- package/dist/plugins/opentext/index.js +440 -0
- package/dist/plugins/opentext/index.js.map +1 -0
- package/dist/plugins/sharepoint/index.d.ts +27 -0
- package/dist/plugins/sharepoint/index.d.ts.map +1 -0
- package/dist/plugins/sharepoint/index.js +397 -0
- package/dist/plugins/sharepoint/index.js.map +1 -0
- package/package.json +7 -2
- package/plugins/aws-s3/index.ts +2 -2
- package/plugins/sharepoint/index.ts +1 -1
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const axios_1 = __importDefault(require("axios"));
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
class BoxPlugin {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.name = 'box';
|
|
12
|
+
this.version = '1.0.0';
|
|
13
|
+
this.description = 'Box cloud storage document source';
|
|
14
|
+
this.supportedOperations = ['import', 'export', 'both'];
|
|
15
|
+
this.baseUrl = 'https://api.box.com/2.0';
|
|
16
|
+
}
|
|
17
|
+
async testConnection(config) {
|
|
18
|
+
try {
|
|
19
|
+
const client = this.createApiClient(config);
|
|
20
|
+
const response = await client.get('/users/me');
|
|
21
|
+
return response.status === 200;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error(`Box connection test failed: ${error.message}`);
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async scan(config, options) {
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.apiClient = this.createApiClient(this.config);
|
|
31
|
+
const sources = [];
|
|
32
|
+
const errors = [];
|
|
33
|
+
let totalSize = 0;
|
|
34
|
+
try {
|
|
35
|
+
const limit = this.config.limit || options?.limit;
|
|
36
|
+
console.log(`🔍 Scanning Box documents${limit ? ` (limit: ${limit})` : ''}...`);
|
|
37
|
+
const rootFolderId = this.config.rootFolderId || '0';
|
|
38
|
+
const items = await this.scanFolder(rootFolderId, '', options);
|
|
39
|
+
let processedCount = 0;
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
if (item.type === 'file') {
|
|
42
|
+
const source = {
|
|
43
|
+
id: item.id,
|
|
44
|
+
name: item.name,
|
|
45
|
+
path: this.getItemPath(item),
|
|
46
|
+
size: item.size || 0,
|
|
47
|
+
mimeType: this.getMimeType(item.name),
|
|
48
|
+
lastModified: new Date(item.modified_at),
|
|
49
|
+
metadata: {
|
|
50
|
+
boxId: item.id,
|
|
51
|
+
description: item.description,
|
|
52
|
+
createdAt: item.created_at,
|
|
53
|
+
createdBy: item.created_by?.name,
|
|
54
|
+
modifiedBy: item.modified_by?.name,
|
|
55
|
+
tags: item.tags,
|
|
56
|
+
sharedLink: item.shared_link?.url,
|
|
57
|
+
pathCollection: item.path_collection
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// Apply filters
|
|
61
|
+
if (this.shouldIncludeSource(source, options)) {
|
|
62
|
+
sources.push(source);
|
|
63
|
+
totalSize += source.size;
|
|
64
|
+
processedCount++;
|
|
65
|
+
// Check limit
|
|
66
|
+
if (limit && processedCount >= limit) {
|
|
67
|
+
console.log(`📏 Reached limit of ${limit} files`);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
sources,
|
|
75
|
+
totalCount: sources.length,
|
|
76
|
+
totalSize,
|
|
77
|
+
errors
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
sources: [],
|
|
83
|
+
totalCount: 0,
|
|
84
|
+
totalSize: 0,
|
|
85
|
+
errors: [`Box scan failed: ${error.message}`]
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async scanFolder(folderId, parentPath, options) {
|
|
90
|
+
if (!this.apiClient)
|
|
91
|
+
throw new Error('API client not initialized');
|
|
92
|
+
const allItems = [];
|
|
93
|
+
let offset = 0;
|
|
94
|
+
const limit = 1000; // Box API max
|
|
95
|
+
try {
|
|
96
|
+
while (true) {
|
|
97
|
+
const response = await this.apiClient.get(`/folders/${folderId}/items`, {
|
|
98
|
+
params: {
|
|
99
|
+
fields: 'id,name,type,size,modified_at,created_at,description,path_collection,created_by,modified_by,shared_link,tags',
|
|
100
|
+
limit,
|
|
101
|
+
offset
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
const items = response.data.entries || [];
|
|
105
|
+
for (const item of items) {
|
|
106
|
+
const itemPath = parentPath ? `${parentPath}/${item.name}` : item.name;
|
|
107
|
+
if (item.type === 'file') {
|
|
108
|
+
// Add path information to the item
|
|
109
|
+
item.fullPath = itemPath;
|
|
110
|
+
allItems.push(item);
|
|
111
|
+
}
|
|
112
|
+
else if (item.type === 'folder') {
|
|
113
|
+
// Recursively scan subfolders
|
|
114
|
+
const subItems = await this.scanFolder(item.id, itemPath, options);
|
|
115
|
+
allItems.push(...subItems);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Check if there are more items
|
|
119
|
+
if (items.length < limit) {
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
offset += limit;
|
|
123
|
+
}
|
|
124
|
+
return allItems;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (error.response?.status === 404) {
|
|
128
|
+
console.warn(`Warning: Folder not found: ${folderId}`);
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async import(config, sources, targetDir, options) {
|
|
135
|
+
this.config = config;
|
|
136
|
+
this.apiClient = this.createApiClient(this.config);
|
|
137
|
+
const results = [];
|
|
138
|
+
const batchSize = options?.batchSize || 5;
|
|
139
|
+
// Process in batches to respect API limits
|
|
140
|
+
for (let i = 0; i < sources.length; i += batchSize) {
|
|
141
|
+
const batch = sources.slice(i, i + batchSize);
|
|
142
|
+
for (const source of batch) {
|
|
143
|
+
const result = await this.importSingle(source, targetDir);
|
|
144
|
+
results.push(result);
|
|
145
|
+
// Small delay to respect rate limits
|
|
146
|
+
await this.sleep(200);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return results;
|
|
150
|
+
}
|
|
151
|
+
async importSingle(source, targetDir) {
|
|
152
|
+
try {
|
|
153
|
+
if (!this.apiClient)
|
|
154
|
+
throw new Error('API client not initialized');
|
|
155
|
+
const targetPath = path_1.default.join(targetDir, source.path);
|
|
156
|
+
const targetDirectory = path_1.default.dirname(targetPath);
|
|
157
|
+
await fs_extra_1.default.ensureDir(targetDirectory);
|
|
158
|
+
// Download file from Box
|
|
159
|
+
const response = await this.apiClient.get(`/files/${source.id}/content`, {
|
|
160
|
+
responseType: 'stream',
|
|
161
|
+
maxRedirects: 5 // Box returns redirects to download URLs
|
|
162
|
+
});
|
|
163
|
+
const writer = fs_extra_1.default.createWriteStream(targetPath);
|
|
164
|
+
response.data.pipe(writer);
|
|
165
|
+
return new Promise((resolve) => {
|
|
166
|
+
writer.on('finish', () => {
|
|
167
|
+
resolve({
|
|
168
|
+
success: true,
|
|
169
|
+
source,
|
|
170
|
+
localPath: targetPath,
|
|
171
|
+
bytesTransferred: source.size
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
writer.on('error', (error) => {
|
|
175
|
+
resolve({
|
|
176
|
+
success: false,
|
|
177
|
+
source,
|
|
178
|
+
error: error.message
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return {
|
|
185
|
+
success: false,
|
|
186
|
+
source,
|
|
187
|
+
error: error.message
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async export(config, localSources, options) {
|
|
192
|
+
this.config = config;
|
|
193
|
+
this.apiClient = this.createApiClient(this.config);
|
|
194
|
+
const results = [];
|
|
195
|
+
const rootFolderId = this.config.rootFolderId || '0';
|
|
196
|
+
for (const source of localSources) {
|
|
197
|
+
try {
|
|
198
|
+
// Determine target folder
|
|
199
|
+
let targetFolderId = rootFolderId;
|
|
200
|
+
if (options?.preserveStructure && source.path.includes('/')) {
|
|
201
|
+
const folderPath = path_1.default.dirname(source.path);
|
|
202
|
+
targetFolderId = await this.createFolderStructure(folderPath, rootFolderId);
|
|
203
|
+
}
|
|
204
|
+
// Upload file to Box
|
|
205
|
+
const fileContent = await fs_extra_1.default.readFile(source.id);
|
|
206
|
+
// Normalize filename to NFC to handle accented characters consistently across platforms
|
|
207
|
+
const fileName = (options?.preserveStructure ? path_1.default.basename(source.path) : source.name).normalize('NFC');
|
|
208
|
+
// Box requires multipart form data for uploads
|
|
209
|
+
const FormData = require('form-data');
|
|
210
|
+
const form = new FormData();
|
|
211
|
+
form.append('attributes', JSON.stringify({
|
|
212
|
+
name: fileName,
|
|
213
|
+
parent: { id: targetFolderId }
|
|
214
|
+
}));
|
|
215
|
+
form.append('file', fileContent, fileName);
|
|
216
|
+
const response = await this.apiClient.post('/files/content', form, {
|
|
217
|
+
headers: {
|
|
218
|
+
...form.getHeaders()
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
const targetPath = options?.preserveStructure ? source.path : source.name;
|
|
222
|
+
results.push({
|
|
223
|
+
success: true,
|
|
224
|
+
targetPath,
|
|
225
|
+
source,
|
|
226
|
+
bytesTransferred: source.size
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
results.push({
|
|
231
|
+
success: false,
|
|
232
|
+
targetPath: options?.targetPath || '',
|
|
233
|
+
source,
|
|
234
|
+
error: error.message
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return results;
|
|
239
|
+
}
|
|
240
|
+
async createFolderStructure(folderPath, parentId) {
|
|
241
|
+
if (!this.apiClient)
|
|
242
|
+
throw new Error('API client not initialized');
|
|
243
|
+
const parts = folderPath.split('/').filter(part => part.length > 0);
|
|
244
|
+
let currentParentId = parentId;
|
|
245
|
+
for (const folderName of parts) {
|
|
246
|
+
// Check if folder already exists
|
|
247
|
+
try {
|
|
248
|
+
const response = await this.apiClient.get(`/folders/${currentParentId}/items`, {
|
|
249
|
+
params: {
|
|
250
|
+
fields: 'id,name,type',
|
|
251
|
+
limit: 1000
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
const existingFolder = response.data.entries.find((item) => item.type === 'folder' && item.name === folderName);
|
|
255
|
+
if (existingFolder) {
|
|
256
|
+
currentParentId = existingFolder.id;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
// Create new folder
|
|
260
|
+
const createResponse = await this.apiClient.post('/folders', {
|
|
261
|
+
name: folderName,
|
|
262
|
+
parent: { id: currentParentId }
|
|
263
|
+
});
|
|
264
|
+
currentParentId = createResponse.data.id;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
throw new Error(`Failed to create folder structure: ${error.message}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return currentParentId;
|
|
272
|
+
}
|
|
273
|
+
getConfigSchema() {
|
|
274
|
+
return {
|
|
275
|
+
type: 'object',
|
|
276
|
+
properties: {
|
|
277
|
+
accessToken: {
|
|
278
|
+
type: 'string',
|
|
279
|
+
description: 'Box Access Token (get from Box Developer Console)',
|
|
280
|
+
required: true
|
|
281
|
+
},
|
|
282
|
+
clientId: {
|
|
283
|
+
type: 'string',
|
|
284
|
+
description: 'Box Client ID (optional, for OAuth flow)',
|
|
285
|
+
required: false
|
|
286
|
+
},
|
|
287
|
+
clientSecret: {
|
|
288
|
+
type: 'string',
|
|
289
|
+
description: 'Box Client Secret (optional, for OAuth flow)',
|
|
290
|
+
required: false
|
|
291
|
+
},
|
|
292
|
+
rootFolderId: {
|
|
293
|
+
type: 'string',
|
|
294
|
+
description: 'Root folder ID to scan (default: 0 for root)',
|
|
295
|
+
default: '0'
|
|
296
|
+
},
|
|
297
|
+
limit: {
|
|
298
|
+
type: 'number',
|
|
299
|
+
description: 'Maximum number of documents to scan (useful for testing)',
|
|
300
|
+
required: false
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
required: ['accessToken']
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
async initialize(config) {
|
|
307
|
+
this.config = config;
|
|
308
|
+
if (!this.config.accessToken) {
|
|
309
|
+
throw new Error('Box access token is required');
|
|
310
|
+
}
|
|
311
|
+
this.apiClient = this.createApiClient(this.config);
|
|
312
|
+
}
|
|
313
|
+
async destroy() {
|
|
314
|
+
this.config = undefined;
|
|
315
|
+
this.apiClient = undefined;
|
|
316
|
+
}
|
|
317
|
+
createApiClient(config) {
|
|
318
|
+
return axios_1.default.create({
|
|
319
|
+
baseURL: this.baseUrl,
|
|
320
|
+
headers: {
|
|
321
|
+
'Authorization': `Bearer ${config.accessToken}`,
|
|
322
|
+
'Content-Type': 'application/json'
|
|
323
|
+
},
|
|
324
|
+
timeout: 30000
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
getItemPath(item) {
|
|
328
|
+
// Use the full path if available, otherwise construct from path_collection
|
|
329
|
+
if (item.fullPath) {
|
|
330
|
+
return item.fullPath;
|
|
331
|
+
}
|
|
332
|
+
if (item.path_collection && item.path_collection.entries) {
|
|
333
|
+
const pathParts = item.path_collection.entries
|
|
334
|
+
.filter(entry => entry.type === 'folder' && entry.id !== '0')
|
|
335
|
+
.map(entry => entry.name);
|
|
336
|
+
pathParts.push(item.name);
|
|
337
|
+
return pathParts.join('/');
|
|
338
|
+
}
|
|
339
|
+
return item.name;
|
|
340
|
+
}
|
|
341
|
+
getMimeType(fileName) {
|
|
342
|
+
const ext = path_1.default.extname(fileName).toLowerCase();
|
|
343
|
+
const mimeTypes = {
|
|
344
|
+
'.pdf': 'application/pdf',
|
|
345
|
+
'.doc': 'application/msword',
|
|
346
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
347
|
+
'.xls': 'application/vnd.ms-excel',
|
|
348
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
349
|
+
'.ppt': 'application/vnd.ms-powerpoint',
|
|
350
|
+
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
351
|
+
'.txt': 'text/plain',
|
|
352
|
+
'.csv': 'text/csv',
|
|
353
|
+
'.json': 'application/json',
|
|
354
|
+
'.xml': 'application/xml',
|
|
355
|
+
'.jpg': 'image/jpeg',
|
|
356
|
+
'.jpeg': 'image/jpeg',
|
|
357
|
+
'.png': 'image/png',
|
|
358
|
+
'.gif': 'image/gif',
|
|
359
|
+
'.zip': 'application/zip'
|
|
360
|
+
};
|
|
361
|
+
return mimeTypes[ext] || 'application/octet-stream';
|
|
362
|
+
}
|
|
363
|
+
shouldIncludeSource(source, options) {
|
|
364
|
+
// Apply size filter
|
|
365
|
+
if (options?.filters?.maxSize && source.size > options.filters.maxSize) {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
// Apply date range filter
|
|
369
|
+
if (options?.filters?.dateRange) {
|
|
370
|
+
const { from, to } = options.filters.dateRange;
|
|
371
|
+
if (from && source.lastModified < from)
|
|
372
|
+
return false;
|
|
373
|
+
if (to && source.lastModified > to)
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
// Apply MIME type filter
|
|
377
|
+
if (options?.filters?.mimeTypes && !options.filters.mimeTypes.includes(source.mimeType)) {
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
sleep(ms) {
|
|
383
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.default = BoxPlugin;
|
|
387
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../plugins/box/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DocumentSourcePlugin, DocumentSource, PluginConfig, ScanResult, PluginImportOptions, PluginExportOptions, ImportResult, ExportResult } from '../../src/types/plugins';
|
|
2
|
+
export default class DropboxPlugin implements DocumentSourcePlugin {
|
|
3
|
+
readonly name = "dropbox";
|
|
4
|
+
readonly version = "1.0.0";
|
|
5
|
+
readonly description = "Dropbox document source";
|
|
6
|
+
readonly supportedOperations: readonly ["import", "export", "both"];
|
|
7
|
+
private config?;
|
|
8
|
+
private apiClient?;
|
|
9
|
+
private readonly apiUrl;
|
|
10
|
+
private readonly contentUrl;
|
|
11
|
+
testConnection(config: PluginConfig): Promise<boolean>;
|
|
12
|
+
scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
|
|
13
|
+
private scanFolder;
|
|
14
|
+
import(config: PluginConfig, sources: DocumentSource[], targetDir: string, options?: PluginImportOptions): Promise<ImportResult[]>;
|
|
15
|
+
private importSingle;
|
|
16
|
+
export?(config: PluginConfig, localSources: DocumentSource[], options?: PluginExportOptions): Promise<ExportResult[]>;
|
|
17
|
+
private uploadLargeFile;
|
|
18
|
+
getConfigSchema(): Record<string, any>;
|
|
19
|
+
initialize(config: PluginConfig): Promise<void>;
|
|
20
|
+
destroy(): Promise<void>;
|
|
21
|
+
private createApiClient;
|
|
22
|
+
private getRelativePath;
|
|
23
|
+
private getMimeType;
|
|
24
|
+
private shouldIncludeSource;
|
|
25
|
+
private sleep;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugins/dropbox/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AAqBjC,MAAM,CAAC,OAAO,OAAO,aAAc,YAAW,oBAAoB;IAChE,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,6BAA6B;IACjD,QAAQ,CAAC,mBAAmB,wCAAyC;IAErE,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IAE3D,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;YAoDtE,UAAU;IA0ClB,MAAM,CACV,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAuBZ,YAAY;IAqDpB,MAAM,CAAC,CACX,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;YAyDZ,eAAe;IA+C7B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA6BhC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,KAAK;CAGd"}
|