@edgebasejs/client-core 0.1.8 → 0.1.9
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/README.md +15 -0
- package/dist/client-core/src/index.d.ts +4 -0
- package/dist/client-core/src/index.d.ts.map +1 -1
- package/dist/client-core/src/index.js +4 -0
- package/dist/client-core/src/index.js.map +1 -1
- package/dist/client-core/src/mutations/batch-processor-client.d.ts +67 -0
- package/dist/client-core/src/mutations/batch-processor-client.d.ts.map +1 -0
- package/dist/client-core/src/mutations/batch-processor-client.js +64 -0
- package/dist/client-core/src/mutations/batch-processor-client.js.map +1 -0
- package/dist/client-core/src/mutations/transaction-hook.d.ts +80 -0
- package/dist/client-core/src/mutations/transaction-hook.d.ts.map +1 -0
- package/dist/client-core/src/mutations/transaction-hook.js +204 -0
- package/dist/client-core/src/mutations/transaction-hook.js.map +1 -0
- package/dist/client-core/src/realtime/realtime-sync-manager.d.ts +55 -0
- package/dist/client-core/src/realtime/realtime-sync-manager.d.ts.map +1 -0
- package/dist/client-core/src/realtime/realtime-sync-manager.js +208 -0
- package/dist/client-core/src/realtime/realtime-sync-manager.js.map +1 -0
- package/dist/client-core/src/realtime/subscription-handler.d.ts +74 -0
- package/dist/client-core/src/realtime/subscription-handler.d.ts.map +1 -0
- package/dist/client-core/src/realtime/subscription-handler.js +224 -0
- package/dist/client-core/src/realtime/subscription-handler.js.map +1 -0
- package/dist/client-core/src/sync/sync-engine.d.ts +10 -0
- package/dist/client-core/src/sync/sync-engine.d.ts.map +1 -1
- package/dist/client-core/src/sync/sync-engine.js +37 -5
- package/dist/client-core/src/sync/sync-engine.js.map +1 -1
- package/dist/core/src/access-rules/column-security.d.ts +80 -0
- package/dist/core/src/access-rules/column-security.d.ts.map +1 -0
- package/dist/core/src/access-rules/column-security.js +191 -0
- package/dist/core/src/access-rules/column-security.js.map +1 -0
- package/dist/core/src/access-rules/engine.d.ts +26 -0
- package/dist/core/src/access-rules/engine.d.ts.map +1 -0
- package/dist/core/src/access-rules/engine.js +76 -0
- package/dist/core/src/access-rules/engine.js.map +1 -0
- package/dist/core/src/access-rules/index.d.ts +3 -0
- package/dist/core/src/access-rules/index.d.ts.map +1 -0
- package/dist/core/src/access-rules/index.js +3 -0
- package/dist/core/src/access-rules/index.js.map +1 -0
- package/dist/core/src/audit/audit-manager.d.ts +108 -0
- package/dist/core/src/audit/audit-manager.d.ts.map +1 -0
- package/dist/core/src/audit/audit-manager.js +265 -0
- package/dist/core/src/audit/audit-manager.js.map +1 -0
- package/dist/core/src/auth/auth-service.d.ts +71 -0
- package/dist/core/src/auth/auth-service.d.ts.map +1 -0
- package/dist/core/src/auth/auth-service.js +177 -0
- package/dist/core/src/auth/auth-service.js.map +1 -0
- package/dist/core/src/auth/index.d.ts +4 -0
- package/dist/core/src/auth/index.d.ts.map +1 -0
- package/dist/core/src/auth/index.js +4 -0
- package/dist/core/src/auth/index.js.map +1 -0
- package/dist/core/src/encryption/encryption-manager.d.ts +97 -0
- package/dist/core/src/encryption/encryption-manager.d.ts.map +1 -0
- package/dist/core/src/encryption/encryption-manager.js +224 -0
- package/dist/core/src/encryption/encryption-manager.js.map +1 -0
- package/dist/core/src/index.d.ts +16 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/index.js +16 -0
- package/dist/core/src/index.js.map +1 -0
- package/dist/core/src/realtime/change-notifier.d.ts +50 -0
- package/dist/core/src/realtime/change-notifier.d.ts.map +1 -0
- package/dist/core/src/realtime/change-notifier.js +145 -0
- package/dist/core/src/realtime/change-notifier.js.map +1 -0
- package/dist/core/src/realtime/message-types.d.ts +39 -0
- package/dist/core/src/realtime/message-types.d.ts.map +1 -0
- package/dist/core/src/realtime/message-types.js +5 -0
- package/dist/core/src/realtime/message-types.js.map +1 -0
- package/dist/core/src/realtime/subscription-manager.d.ts +67 -0
- package/dist/core/src/realtime/subscription-manager.d.ts.map +1 -0
- package/dist/core/src/realtime/subscription-manager.js +229 -0
- package/dist/core/src/realtime/subscription-manager.js.map +1 -0
- package/dist/core/src/search/search-manager.d.ts +93 -0
- package/dist/core/src/search/search-manager.d.ts.map +1 -0
- package/dist/core/src/search/search-manager.js +258 -0
- package/dist/core/src/search/search-manager.js.map +1 -0
- package/dist/core/src/storage/file-manager.d.ts +138 -0
- package/dist/core/src/storage/file-manager.d.ts.map +1 -0
- package/dist/core/src/storage/file-manager.js +224 -0
- package/dist/core/src/storage/file-manager.js.map +1 -0
- package/dist/core/src/sync/batch-processor.d.ts +97 -0
- package/dist/core/src/sync/batch-processor.d.ts.map +1 -0
- package/dist/core/src/sync/batch-processor.js +313 -0
- package/dist/core/src/sync/batch-processor.js.map +1 -0
- package/dist/core/src/sync/csv-processor.d.ts +66 -0
- package/dist/core/src/sync/csv-processor.d.ts.map +1 -0
- package/dist/core/src/sync/csv-processor.js +223 -0
- package/dist/core/src/sync/csv-processor.js.map +1 -0
- package/dist/core/src/sync/index.d.ts +3 -0
- package/dist/core/src/sync/index.d.ts.map +1 -0
- package/dist/core/src/sync/index.js +3 -0
- package/dist/core/src/sync/index.js.map +1 -0
- package/dist/core/src/sync/sync-engine.d.ts +68 -0
- package/dist/core/src/sync/sync-engine.d.ts.map +1 -0
- package/dist/core/src/sync/sync-engine.js +317 -0
- package/dist/core/src/sync/sync-engine.js.map +1 -0
- package/dist/core/src/sync/transaction-manager.d.ts +83 -0
- package/dist/core/src/sync/transaction-manager.d.ts.map +1 -0
- package/dist/core/src/sync/transaction-manager.js +227 -0
- package/dist/core/src/sync/transaction-manager.js.map +1 -0
- package/dist/core/src/webhooks/webhook-manager.d.ts +137 -0
- package/dist/core/src/webhooks/webhook-manager.d.ts.map +1 -0
- package/dist/core/src/webhooks/webhook-manager.js +334 -0
- package/dist/core/src/webhooks/webhook-manager.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch processing for multiple CRUD operations
|
|
3
|
+
* Supports atomic transactions and individual operation processing
|
|
4
|
+
*/
|
|
5
|
+
import { AccessRulesEngine } from '../access-rules/engine';
|
|
6
|
+
/**
|
|
7
|
+
* Batch processor for handling multiple CRUD operations
|
|
8
|
+
*/
|
|
9
|
+
export class BatchProcessor {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.schemas = options.schemas;
|
|
12
|
+
this.db = options.db;
|
|
13
|
+
this.user = options.user;
|
|
14
|
+
this.serverTimestamp = Date.now();
|
|
15
|
+
this.maxBatchSize = options.maxBatchSize || 1000;
|
|
16
|
+
this.encryption = options.encryption;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Process a batch of operations
|
|
20
|
+
*/
|
|
21
|
+
async processBatch(request) {
|
|
22
|
+
const result = {
|
|
23
|
+
applied: [],
|
|
24
|
+
conflicts: [],
|
|
25
|
+
errors: [],
|
|
26
|
+
appliedCount: 0,
|
|
27
|
+
conflictCount: 0,
|
|
28
|
+
errorCount: 0,
|
|
29
|
+
};
|
|
30
|
+
// Collect all operations
|
|
31
|
+
const allOperations = [];
|
|
32
|
+
allOperations.push(...(request.create || []));
|
|
33
|
+
allOperations.push(...(request.update || []));
|
|
34
|
+
allOperations.push(...(request.delete || []));
|
|
35
|
+
// Check batch size
|
|
36
|
+
if (allOperations.length > this.maxBatchSize) {
|
|
37
|
+
result.errors.push({
|
|
38
|
+
entity: '',
|
|
39
|
+
id: '',
|
|
40
|
+
operation: 'batch',
|
|
41
|
+
error: `Batch size (${allOperations.length}) exceeds maximum (${this.maxBatchSize})`,
|
|
42
|
+
code: 'BATCH_TOO_LARGE',
|
|
43
|
+
});
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
if (allOperations.length === 0) {
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
// Process atomically or individually
|
|
50
|
+
if (request.atomic) {
|
|
51
|
+
return this.processBatchAtomic(allOperations, request, result);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return this.processBatchIndividual(allOperations, request, result);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Process batch atomically - all succeed or all fail
|
|
59
|
+
*/
|
|
60
|
+
async processBatchAtomic(operations, request, result) {
|
|
61
|
+
const statements = [];
|
|
62
|
+
const operationMap = new Map();
|
|
63
|
+
try {
|
|
64
|
+
// Validate and prepare all operations
|
|
65
|
+
for (const op of operations) {
|
|
66
|
+
const key = `${op.entity}:${op.id}`;
|
|
67
|
+
operationMap.set(key, op);
|
|
68
|
+
// Validate operation
|
|
69
|
+
const validation = await this.validateOperation(op);
|
|
70
|
+
if (validation.error) {
|
|
71
|
+
throw new Error(`Operation validation failed for ${key}: ${validation.error}`);
|
|
72
|
+
}
|
|
73
|
+
// Check access rules
|
|
74
|
+
const accessCheck = await this.checkAccess(op);
|
|
75
|
+
if (!accessCheck.allowed) {
|
|
76
|
+
throw new Error(`Access denied for ${key}: ${accessCheck.reason}`);
|
|
77
|
+
}
|
|
78
|
+
// Check conflicts
|
|
79
|
+
const conflictCheck = await this.checkConflict(op);
|
|
80
|
+
if (conflictCheck.hasConflict) {
|
|
81
|
+
throw new Error(`Conflict detected for ${key}`);
|
|
82
|
+
}
|
|
83
|
+
// Prepare SQL statements
|
|
84
|
+
const preparedStatements = this.prepareStatements(op);
|
|
85
|
+
statements.push(...preparedStatements);
|
|
86
|
+
}
|
|
87
|
+
// Execute all statements atomically
|
|
88
|
+
if (statements.length > 0) {
|
|
89
|
+
await this.db.batch(statements);
|
|
90
|
+
}
|
|
91
|
+
// Add all operations to applied list
|
|
92
|
+
let version = 1;
|
|
93
|
+
for (const op of operations) {
|
|
94
|
+
const currentVersion = (await this.getVersion(op.entity, op.id)) || 0;
|
|
95
|
+
result.applied.push({
|
|
96
|
+
...op,
|
|
97
|
+
version: currentVersion + 1,
|
|
98
|
+
serverTimestamp: this.serverTimestamp,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
result.appliedCount = result.applied.length;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
// Atomic transaction failed - return error
|
|
105
|
+
const errorMsg = error instanceof Error ? error.message : 'Atomic batch failed';
|
|
106
|
+
for (const op of operations) {
|
|
107
|
+
result.errors.push({
|
|
108
|
+
entity: op.entity,
|
|
109
|
+
id: op.id,
|
|
110
|
+
operation: op.operation,
|
|
111
|
+
error: errorMsg,
|
|
112
|
+
code: 'ATOMIC_BATCH_FAILED',
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
result.errorCount = result.errors.length;
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Process batch operations individually
|
|
121
|
+
*/
|
|
122
|
+
async processBatchIndividual(operations, request, result) {
|
|
123
|
+
for (const op of operations) {
|
|
124
|
+
try {
|
|
125
|
+
// Validate operation
|
|
126
|
+
const validation = await this.validateOperation(op);
|
|
127
|
+
if (validation.error) {
|
|
128
|
+
result.errors.push({
|
|
129
|
+
entity: op.entity,
|
|
130
|
+
id: op.id,
|
|
131
|
+
operation: op.operation,
|
|
132
|
+
error: validation.error,
|
|
133
|
+
code: 'VALIDATION_ERROR',
|
|
134
|
+
});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// Check access rules
|
|
138
|
+
const accessCheck = await this.checkAccess(op);
|
|
139
|
+
if (!accessCheck.allowed) {
|
|
140
|
+
result.errors.push({
|
|
141
|
+
entity: op.entity,
|
|
142
|
+
id: op.id,
|
|
143
|
+
operation: op.operation,
|
|
144
|
+
error: accessCheck.reason || 'Access denied',
|
|
145
|
+
code: 'ACCESS_DENIED',
|
|
146
|
+
});
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// Check for conflicts
|
|
150
|
+
const conflictCheck = await this.checkConflict(op);
|
|
151
|
+
if (conflictCheck.hasConflict) {
|
|
152
|
+
result.conflicts.push({
|
|
153
|
+
entity: op.entity,
|
|
154
|
+
id: op.id,
|
|
155
|
+
operation: op.operation,
|
|
156
|
+
clientVersion: op.version,
|
|
157
|
+
serverVersion: conflictCheck.serverVersion || 0,
|
|
158
|
+
serverData: conflictCheck.serverData || {},
|
|
159
|
+
});
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
// Apply operation
|
|
163
|
+
const currentVersion = (await this.getVersion(op.entity, op.id)) || 0;
|
|
164
|
+
const newVersion = currentVersion + 1;
|
|
165
|
+
const statements = this.prepareStatements(op, newVersion);
|
|
166
|
+
if (statements.length > 0) {
|
|
167
|
+
await this.db.batch(statements);
|
|
168
|
+
}
|
|
169
|
+
result.applied.push({
|
|
170
|
+
...op,
|
|
171
|
+
version: newVersion,
|
|
172
|
+
serverTimestamp: this.serverTimestamp,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const errorMsg = error instanceof Error ? error.message : 'Processing failed';
|
|
177
|
+
result.errors.push({
|
|
178
|
+
entity: op.entity,
|
|
179
|
+
id: op.id,
|
|
180
|
+
operation: op.operation,
|
|
181
|
+
error: errorMsg,
|
|
182
|
+
code: 'PROCESSING_ERROR',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
result.appliedCount = result.applied.length;
|
|
187
|
+
result.conflictCount = result.conflicts.length;
|
|
188
|
+
result.errorCount = result.errors.length;
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Validate a single operation
|
|
193
|
+
*/
|
|
194
|
+
async validateOperation(op) {
|
|
195
|
+
if (!op.entity) {
|
|
196
|
+
return { error: 'Missing entity' };
|
|
197
|
+
}
|
|
198
|
+
if (!op.id) {
|
|
199
|
+
return { error: 'Missing record id' };
|
|
200
|
+
}
|
|
201
|
+
if ((op.operation === 'create' || op.operation === 'update') && (!op.data || typeof op.data !== 'object')) {
|
|
202
|
+
return { error: 'Missing data' };
|
|
203
|
+
}
|
|
204
|
+
const schema = this.schemas.get(op.entity);
|
|
205
|
+
if (!schema) {
|
|
206
|
+
return { error: 'Unknown entity' };
|
|
207
|
+
}
|
|
208
|
+
return {};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Check access rules for operation
|
|
212
|
+
*/
|
|
213
|
+
async checkAccess(op) {
|
|
214
|
+
const schema = this.schemas.get(op.entity);
|
|
215
|
+
if (!schema) {
|
|
216
|
+
return { allowed: false, reason: 'Unknown entity' };
|
|
217
|
+
}
|
|
218
|
+
const accessContext = {
|
|
219
|
+
user: this.user,
|
|
220
|
+
operation: op.operation,
|
|
221
|
+
data: op.data ?? {},
|
|
222
|
+
};
|
|
223
|
+
// Get existing data for update/delete operations
|
|
224
|
+
if (op.operation === 'update' || op.operation === 'delete') {
|
|
225
|
+
const existing = await this.db.getOne(`SELECT * FROM ${op.entity} WHERE id = ?`, [op.id]);
|
|
226
|
+
if (existing) {
|
|
227
|
+
accessContext.existingData = existing;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Evaluate access rules
|
|
231
|
+
const accessDecision = await AccessRulesEngine.evaluate(accessContext, schema.accessRules);
|
|
232
|
+
return {
|
|
233
|
+
allowed: accessDecision.allowed,
|
|
234
|
+
reason: accessDecision.reason,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Check for conflicts (version mismatch)
|
|
239
|
+
*/
|
|
240
|
+
async checkConflict(op) {
|
|
241
|
+
const metadata = await this.db.getOne('SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?', [op.entity, op.id]);
|
|
242
|
+
const serverVersion = metadata?.version || 0;
|
|
243
|
+
// Check if operation version matches server version
|
|
244
|
+
if (metadata && op.version !== undefined && op.version !== serverVersion) {
|
|
245
|
+
const serverData = await this.db.getOne(`SELECT * FROM ${op.entity} WHERE id = ?`, [op.id]);
|
|
246
|
+
return {
|
|
247
|
+
hasConflict: true,
|
|
248
|
+
serverVersion,
|
|
249
|
+
serverData: serverData || {},
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
return { hasConflict: false, serverVersion };
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get current version for an entity record
|
|
256
|
+
*/
|
|
257
|
+
async getVersion(entity, recordId) {
|
|
258
|
+
const metadata = await this.db.getOne('SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?', [entity, recordId]);
|
|
259
|
+
return metadata?.version ?? null;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Prepare SQL statements for an operation
|
|
263
|
+
*/
|
|
264
|
+
prepareStatements(op, version) {
|
|
265
|
+
const now = Date.now();
|
|
266
|
+
const finalVersion = version !== undefined ? version : 1;
|
|
267
|
+
const statements = [];
|
|
268
|
+
switch (op.operation) {
|
|
269
|
+
case 'create': {
|
|
270
|
+
const columns = ['id', ...Object.keys(op.data || {})];
|
|
271
|
+
const values = [op.id, ...Object.values(op.data || {})];
|
|
272
|
+
const placeholders = columns.map(() => '?').join(', ');
|
|
273
|
+
statements.push({
|
|
274
|
+
sql: `INSERT INTO ${op.entity} (${columns.join(', ')}) VALUES (${placeholders})`,
|
|
275
|
+
params: values,
|
|
276
|
+
});
|
|
277
|
+
statements.push({
|
|
278
|
+
sql: 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)',
|
|
279
|
+
params: [op.entity, op.id, finalVersion, now],
|
|
280
|
+
});
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
case 'update': {
|
|
284
|
+
const updates = Object.entries(op.data || {})
|
|
285
|
+
.map(([key]) => `${key} = ?`)
|
|
286
|
+
.join(', ');
|
|
287
|
+
const values = [...Object.values(op.data || {}), op.id];
|
|
288
|
+
statements.push({
|
|
289
|
+
sql: `UPDATE ${op.entity} SET ${updates} WHERE id = ?`,
|
|
290
|
+
params: values,
|
|
291
|
+
});
|
|
292
|
+
statements.push({
|
|
293
|
+
sql: 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)',
|
|
294
|
+
params: [op.entity, op.id, finalVersion, now],
|
|
295
|
+
});
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
case 'delete': {
|
|
299
|
+
statements.push({
|
|
300
|
+
sql: `DELETE FROM ${op.entity} WHERE id = ?`,
|
|
301
|
+
params: [op.id],
|
|
302
|
+
});
|
|
303
|
+
statements.push({
|
|
304
|
+
sql: 'DELETE FROM sync_metadata WHERE entity = ? AND record_id = ?',
|
|
305
|
+
params: [op.entity, op.id],
|
|
306
|
+
});
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return statements;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=batch-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-processor.js","sourceRoot":"","sources":["../../../../../core/src/sync/batch-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV import/export processor
|
|
3
|
+
* Handles CSV data transformation for bulk import/export operations
|
|
4
|
+
*/
|
|
5
|
+
export interface CSVImportOptions {
|
|
6
|
+
entity: string;
|
|
7
|
+
data: string;
|
|
8
|
+
hasHeader?: boolean;
|
|
9
|
+
skipErrors?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface CSVImportResult {
|
|
12
|
+
entity: string;
|
|
13
|
+
totalRows: number;
|
|
14
|
+
validRows: number;
|
|
15
|
+
invalidRows: number;
|
|
16
|
+
errors: Array<{
|
|
17
|
+
row: number;
|
|
18
|
+
error: string;
|
|
19
|
+
data?: any;
|
|
20
|
+
}>;
|
|
21
|
+
data: Array<Record<string, any>>;
|
|
22
|
+
}
|
|
23
|
+
export interface CSVExportOptions {
|
|
24
|
+
entity: string;
|
|
25
|
+
data: Array<Record<string, any>>;
|
|
26
|
+
columns?: string[];
|
|
27
|
+
includeMetadata?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface CSVExportResult {
|
|
30
|
+
entity: string;
|
|
31
|
+
columns: string[];
|
|
32
|
+
rows: Array<string[]>;
|
|
33
|
+
csv: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* CSV processor for import/export operations
|
|
37
|
+
*/
|
|
38
|
+
export declare class CSVProcessor {
|
|
39
|
+
/**
|
|
40
|
+
* Parse CSV string to objects
|
|
41
|
+
*/
|
|
42
|
+
static parseCSV(content: string, hasHeader?: boolean): CSVImportResult & {
|
|
43
|
+
data: Array<Record<string, any>>;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Convert CSV string to objects for import
|
|
47
|
+
*/
|
|
48
|
+
static importFromCSV(options: CSVImportOptions): Promise<CSVImportResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Convert objects to CSV string for export
|
|
51
|
+
*/
|
|
52
|
+
static exportToCSV(options: CSVExportOptions): CSVExportResult;
|
|
53
|
+
/**
|
|
54
|
+
* Parse a single CSV line, handling quoted fields
|
|
55
|
+
*/
|
|
56
|
+
private static parseCSVLine;
|
|
57
|
+
/**
|
|
58
|
+
* Convert CSV string value to appropriate type
|
|
59
|
+
*/
|
|
60
|
+
private static convertValue;
|
|
61
|
+
/**
|
|
62
|
+
* Format a value for CSV output
|
|
63
|
+
*/
|
|
64
|
+
private static formatCSVValue;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=csv-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-processor.d.ts","sourceRoot":"","sources":["../../../../../core/src/sync/csv-processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC,CAAC;IACH,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,eAAe,GAAG;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;KAAE;IAmE1G;;OAEG;WACU,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB/E;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe;IAoD9D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAiC3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAgC3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAuB9B"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV import/export processor
|
|
3
|
+
* Handles CSV data transformation for bulk import/export operations
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* CSV processor for import/export operations
|
|
7
|
+
*/
|
|
8
|
+
export class CSVProcessor {
|
|
9
|
+
/**
|
|
10
|
+
* Parse CSV string to objects
|
|
11
|
+
*/
|
|
12
|
+
static parseCSV(content, hasHeader = true) {
|
|
13
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
14
|
+
if (lines.length === 0) {
|
|
15
|
+
return {
|
|
16
|
+
entity: '',
|
|
17
|
+
totalRows: 0,
|
|
18
|
+
validRows: 0,
|
|
19
|
+
invalidRows: 0,
|
|
20
|
+
errors: [],
|
|
21
|
+
data: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
let headers = [];
|
|
25
|
+
let startIndex = 0;
|
|
26
|
+
// Parse header if present
|
|
27
|
+
if (hasHeader && lines.length > 0) {
|
|
28
|
+
headers = this.parseCSVLine(lines[0]);
|
|
29
|
+
startIndex = 1;
|
|
30
|
+
}
|
|
31
|
+
if (headers.length === 0) {
|
|
32
|
+
throw new Error('No headers found in CSV');
|
|
33
|
+
}
|
|
34
|
+
const data = [];
|
|
35
|
+
const errors = [];
|
|
36
|
+
// Parse data rows
|
|
37
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
38
|
+
try {
|
|
39
|
+
const values = this.parseCSVLine(lines[i]);
|
|
40
|
+
if (values.length === 0) {
|
|
41
|
+
continue; // Skip empty rows
|
|
42
|
+
}
|
|
43
|
+
// Create object from headers and values
|
|
44
|
+
const record = {};
|
|
45
|
+
for (let j = 0; j < headers.length; j++) {
|
|
46
|
+
const value = values[j] || '';
|
|
47
|
+
record[headers[j]] = this.convertValue(value);
|
|
48
|
+
}
|
|
49
|
+
data.push(record);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const errorMsg = error instanceof Error ? error.message : 'Parse error';
|
|
53
|
+
errors.push({
|
|
54
|
+
row: i + 1,
|
|
55
|
+
error: errorMsg,
|
|
56
|
+
data: lines[i],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
entity: '',
|
|
62
|
+
totalRows: lines.length - (hasHeader ? 1 : 0),
|
|
63
|
+
validRows: data.length,
|
|
64
|
+
invalidRows: errors.length,
|
|
65
|
+
errors,
|
|
66
|
+
data,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert CSV string to objects for import
|
|
71
|
+
*/
|
|
72
|
+
static async importFromCSV(options) {
|
|
73
|
+
try {
|
|
74
|
+
const parsed = this.parseCSV(options.data, options.hasHeader !== false);
|
|
75
|
+
return {
|
|
76
|
+
entity: options.entity,
|
|
77
|
+
totalRows: parsed.totalRows,
|
|
78
|
+
validRows: parsed.validRows,
|
|
79
|
+
invalidRows: parsed.invalidRows,
|
|
80
|
+
errors: options.skipErrors ? [] : parsed.errors,
|
|
81
|
+
data: parsed.data,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new Error(`CSV import failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convert objects to CSV string for export
|
|
90
|
+
*/
|
|
91
|
+
static exportToCSV(options) {
|
|
92
|
+
if (options.data.length === 0) {
|
|
93
|
+
return {
|
|
94
|
+
entity: options.entity,
|
|
95
|
+
columns: [],
|
|
96
|
+
rows: [],
|
|
97
|
+
csv: '',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Determine columns
|
|
101
|
+
let columns = options.columns || [];
|
|
102
|
+
if (columns.length === 0) {
|
|
103
|
+
// Extract all unique columns from data
|
|
104
|
+
const columnSet = new Set();
|
|
105
|
+
for (const record of options.data) {
|
|
106
|
+
Object.keys(record).forEach((key) => {
|
|
107
|
+
if (!key.startsWith('_')) {
|
|
108
|
+
columnSet.add(key);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
columns = Array.from(columnSet).sort();
|
|
113
|
+
}
|
|
114
|
+
// Build CSV rows
|
|
115
|
+
const rows = [];
|
|
116
|
+
// Add header row
|
|
117
|
+
rows.push(columns);
|
|
118
|
+
// Add data rows
|
|
119
|
+
for (const record of options.data) {
|
|
120
|
+
const row = [];
|
|
121
|
+
for (const column of columns) {
|
|
122
|
+
const value = record[column];
|
|
123
|
+
row.push(this.formatCSVValue(value));
|
|
124
|
+
}
|
|
125
|
+
rows.push(row);
|
|
126
|
+
}
|
|
127
|
+
// Convert to CSV string
|
|
128
|
+
const csv = rows.map((row) => row.map((val) => `"${val}"`).join(',')).join('\n');
|
|
129
|
+
return {
|
|
130
|
+
entity: options.entity,
|
|
131
|
+
columns,
|
|
132
|
+
rows,
|
|
133
|
+
csv,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse a single CSV line, handling quoted fields
|
|
138
|
+
*/
|
|
139
|
+
static parseCSVLine(line) {
|
|
140
|
+
const result = [];
|
|
141
|
+
let current = '';
|
|
142
|
+
let inQuotes = false;
|
|
143
|
+
for (let i = 0; i < line.length; i++) {
|
|
144
|
+
const char = line[i];
|
|
145
|
+
const nextChar = line[i + 1];
|
|
146
|
+
if (char === '"') {
|
|
147
|
+
if (inQuotes && nextChar === '"') {
|
|
148
|
+
// Escaped quote
|
|
149
|
+
current += '"';
|
|
150
|
+
i++; // Skip next quote
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Toggle quote mode
|
|
154
|
+
inQuotes = !inQuotes;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (char === ',' && !inQuotes) {
|
|
158
|
+
// Field separator
|
|
159
|
+
result.push(current.trim());
|
|
160
|
+
current = '';
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
current += char;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Add last field
|
|
167
|
+
result.push(current.trim());
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Convert CSV string value to appropriate type
|
|
172
|
+
*/
|
|
173
|
+
static convertValue(value) {
|
|
174
|
+
if (!value || value === 'null' || value === 'undefined') {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// Try to parse as boolean
|
|
178
|
+
if (value.toLowerCase() === 'true') {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
if (value.toLowerCase() === 'false') {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
// Try to parse as number
|
|
185
|
+
const num = parseFloat(value);
|
|
186
|
+
if (!isNaN(num) && value !== '') {
|
|
187
|
+
return num;
|
|
188
|
+
}
|
|
189
|
+
// Try to parse as JSON (for objects/arrays)
|
|
190
|
+
if ((value.startsWith('{') && value.endsWith('}')) || (value.startsWith('[') && value.endsWith(']'))) {
|
|
191
|
+
try {
|
|
192
|
+
return JSON.parse(value);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Fall through to string
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Return as string
|
|
199
|
+
return value;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Format a value for CSV output
|
|
203
|
+
*/
|
|
204
|
+
static formatCSVValue(value) {
|
|
205
|
+
if (value === null || value === undefined) {
|
|
206
|
+
return '';
|
|
207
|
+
}
|
|
208
|
+
if (typeof value === 'string') {
|
|
209
|
+
return value;
|
|
210
|
+
}
|
|
211
|
+
if (typeof value === 'boolean') {
|
|
212
|
+
return value ? 'true' : 'false';
|
|
213
|
+
}
|
|
214
|
+
if (typeof value === 'number') {
|
|
215
|
+
return value.toString();
|
|
216
|
+
}
|
|
217
|
+
if (typeof value === 'object') {
|
|
218
|
+
return JSON.stringify(value);
|
|
219
|
+
}
|
|
220
|
+
return String(value);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=csv-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-processor.js","sourceRoot":"","sources":["../../../../../core/src/sync/csv-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../core/src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../core/src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|