@edgebasejs/react-native 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.
Files changed (145) hide show
  1. package/README.md +18 -0
  2. package/dist/client-core/src/index.d.ts +4 -0
  3. package/dist/client-core/src/index.d.ts.map +1 -1
  4. package/dist/client-core/src/index.js +4 -0
  5. package/dist/client-core/src/index.js.map +1 -1
  6. package/dist/client-core/src/mutations/batch-processor-client.d.ts +67 -0
  7. package/dist/client-core/src/mutations/batch-processor-client.d.ts.map +1 -0
  8. package/dist/client-core/src/mutations/batch-processor-client.js +64 -0
  9. package/dist/client-core/src/mutations/batch-processor-client.js.map +1 -0
  10. package/dist/client-core/src/mutations/transaction-hook.d.ts +80 -0
  11. package/dist/client-core/src/mutations/transaction-hook.d.ts.map +1 -0
  12. package/dist/client-core/src/mutations/transaction-hook.js +204 -0
  13. package/dist/client-core/src/mutations/transaction-hook.js.map +1 -0
  14. package/dist/client-core/src/realtime/realtime-sync-manager.d.ts +55 -0
  15. package/dist/client-core/src/realtime/realtime-sync-manager.d.ts.map +1 -0
  16. package/dist/client-core/src/realtime/realtime-sync-manager.js +208 -0
  17. package/dist/client-core/src/realtime/realtime-sync-manager.js.map +1 -0
  18. package/dist/client-core/src/realtime/subscription-handler.d.ts +74 -0
  19. package/dist/client-core/src/realtime/subscription-handler.d.ts.map +1 -0
  20. package/dist/client-core/src/realtime/subscription-handler.js +224 -0
  21. package/dist/client-core/src/realtime/subscription-handler.js.map +1 -0
  22. package/dist/client-core/src/sync/sync-engine.d.ts +10 -0
  23. package/dist/client-core/src/sync/sync-engine.d.ts.map +1 -1
  24. package/dist/client-core/src/sync/sync-engine.js +37 -5
  25. package/dist/client-core/src/sync/sync-engine.js.map +1 -1
  26. package/dist/client-react-native/src/hooks/index.d.ts +10 -0
  27. package/dist/client-react-native/src/hooks/index.d.ts.map +1 -1
  28. package/dist/client-react-native/src/hooks/index.js +8 -0
  29. package/dist/client-react-native/src/hooks/index.js.map +1 -1
  30. package/dist/client-react-native/src/hooks/use-audit.d.ts +65 -0
  31. package/dist/client-react-native/src/hooks/use-audit.d.ts.map +1 -0
  32. package/dist/client-react-native/src/hooks/use-audit.js +201 -0
  33. package/dist/client-react-native/src/hooks/use-audit.js.map +1 -0
  34. package/dist/client-react-native/src/hooks/use-batch-mutation.d.ts +56 -0
  35. package/dist/client-react-native/src/hooks/use-batch-mutation.d.ts.map +1 -0
  36. package/dist/client-react-native/src/hooks/use-batch-mutation.js +95 -0
  37. package/dist/client-react-native/src/hooks/use-batch-mutation.js.map +1 -0
  38. package/dist/client-react-native/src/hooks/use-encryption.d.ts +45 -0
  39. package/dist/client-react-native/src/hooks/use-encryption.d.ts.map +1 -0
  40. package/dist/client-react-native/src/hooks/use-encryption.js +143 -0
  41. package/dist/client-react-native/src/hooks/use-encryption.js.map +1 -0
  42. package/dist/client-react-native/src/hooks/use-file-manager.d.ts +38 -0
  43. package/dist/client-react-native/src/hooks/use-file-manager.d.ts.map +1 -0
  44. package/dist/client-react-native/src/hooks/use-file-manager.js +174 -0
  45. package/dist/client-react-native/src/hooks/use-file-manager.js.map +1 -0
  46. package/dist/client-react-native/src/hooks/use-file-upload.d.ts +34 -0
  47. package/dist/client-react-native/src/hooks/use-file-upload.d.ts.map +1 -0
  48. package/dist/client-react-native/src/hooks/use-file-upload.js +85 -0
  49. package/dist/client-react-native/src/hooks/use-file-upload.js.map +1 -0
  50. package/dist/client-react-native/src/hooks/use-mutation.d.ts.map +1 -1
  51. package/dist/client-react-native/src/hooks/use-mutation.js +34 -6
  52. package/dist/client-react-native/src/hooks/use-mutation.js.map +1 -1
  53. package/dist/client-react-native/src/hooks/use-search.d.ts +33 -0
  54. package/dist/client-react-native/src/hooks/use-search.d.ts.map +1 -0
  55. package/dist/client-react-native/src/hooks/use-search.js +174 -0
  56. package/dist/client-react-native/src/hooks/use-search.js.map +1 -0
  57. package/dist/client-react-native/src/hooks/use-subscribe.d.ts +14 -0
  58. package/dist/client-react-native/src/hooks/use-subscribe.d.ts.map +1 -0
  59. package/dist/client-react-native/src/hooks/use-subscribe.js +165 -0
  60. package/dist/client-react-native/src/hooks/use-subscribe.js.map +1 -0
  61. package/dist/client-react-native/src/hooks/use-transaction.d.ts +27 -0
  62. package/dist/client-react-native/src/hooks/use-transaction.d.ts.map +1 -0
  63. package/dist/client-react-native/src/hooks/use-transaction.js +160 -0
  64. package/dist/client-react-native/src/hooks/use-transaction.js.map +1 -0
  65. package/dist/client-react-native/src/provider.d.ts +5 -2
  66. package/dist/client-react-native/src/provider.d.ts.map +1 -1
  67. package/dist/client-react-native/src/provider.js +23 -23
  68. package/dist/client-react-native/src/provider.js.map +1 -1
  69. package/dist/core/src/access-rules/column-security.d.ts +80 -0
  70. package/dist/core/src/access-rules/column-security.d.ts.map +1 -0
  71. package/dist/core/src/access-rules/column-security.js +191 -0
  72. package/dist/core/src/access-rules/column-security.js.map +1 -0
  73. package/dist/core/src/access-rules/engine.d.ts +26 -0
  74. package/dist/core/src/access-rules/engine.d.ts.map +1 -0
  75. package/dist/core/src/access-rules/engine.js +76 -0
  76. package/dist/core/src/access-rules/engine.js.map +1 -0
  77. package/dist/core/src/access-rules/index.d.ts +3 -0
  78. package/dist/core/src/access-rules/index.d.ts.map +1 -0
  79. package/dist/core/src/access-rules/index.js +3 -0
  80. package/dist/core/src/access-rules/index.js.map +1 -0
  81. package/dist/core/src/audit/audit-manager.d.ts +108 -0
  82. package/dist/core/src/audit/audit-manager.d.ts.map +1 -0
  83. package/dist/core/src/audit/audit-manager.js +265 -0
  84. package/dist/core/src/audit/audit-manager.js.map +1 -0
  85. package/dist/core/src/auth/auth-service.d.ts +71 -0
  86. package/dist/core/src/auth/auth-service.d.ts.map +1 -0
  87. package/dist/core/src/auth/auth-service.js +177 -0
  88. package/dist/core/src/auth/auth-service.js.map +1 -0
  89. package/dist/core/src/auth/index.d.ts +4 -0
  90. package/dist/core/src/auth/index.d.ts.map +1 -0
  91. package/dist/core/src/auth/index.js +4 -0
  92. package/dist/core/src/auth/index.js.map +1 -0
  93. package/dist/core/src/encryption/encryption-manager.d.ts +97 -0
  94. package/dist/core/src/encryption/encryption-manager.d.ts.map +1 -0
  95. package/dist/core/src/encryption/encryption-manager.js +224 -0
  96. package/dist/core/src/encryption/encryption-manager.js.map +1 -0
  97. package/dist/core/src/index.d.ts +16 -0
  98. package/dist/core/src/index.d.ts.map +1 -0
  99. package/dist/core/src/index.js +16 -0
  100. package/dist/core/src/index.js.map +1 -0
  101. package/dist/core/src/realtime/change-notifier.d.ts +50 -0
  102. package/dist/core/src/realtime/change-notifier.d.ts.map +1 -0
  103. package/dist/core/src/realtime/change-notifier.js +145 -0
  104. package/dist/core/src/realtime/change-notifier.js.map +1 -0
  105. package/dist/core/src/realtime/message-types.d.ts +39 -0
  106. package/dist/core/src/realtime/message-types.d.ts.map +1 -0
  107. package/dist/core/src/realtime/message-types.js +5 -0
  108. package/dist/core/src/realtime/message-types.js.map +1 -0
  109. package/dist/core/src/realtime/subscription-manager.d.ts +67 -0
  110. package/dist/core/src/realtime/subscription-manager.d.ts.map +1 -0
  111. package/dist/core/src/realtime/subscription-manager.js +229 -0
  112. package/dist/core/src/realtime/subscription-manager.js.map +1 -0
  113. package/dist/core/src/search/search-manager.d.ts +93 -0
  114. package/dist/core/src/search/search-manager.d.ts.map +1 -0
  115. package/dist/core/src/search/search-manager.js +258 -0
  116. package/dist/core/src/search/search-manager.js.map +1 -0
  117. package/dist/core/src/storage/file-manager.d.ts +138 -0
  118. package/dist/core/src/storage/file-manager.d.ts.map +1 -0
  119. package/dist/core/src/storage/file-manager.js +224 -0
  120. package/dist/core/src/storage/file-manager.js.map +1 -0
  121. package/dist/core/src/sync/batch-processor.d.ts +97 -0
  122. package/dist/core/src/sync/batch-processor.d.ts.map +1 -0
  123. package/dist/core/src/sync/batch-processor.js +313 -0
  124. package/dist/core/src/sync/batch-processor.js.map +1 -0
  125. package/dist/core/src/sync/csv-processor.d.ts +66 -0
  126. package/dist/core/src/sync/csv-processor.d.ts.map +1 -0
  127. package/dist/core/src/sync/csv-processor.js +223 -0
  128. package/dist/core/src/sync/csv-processor.js.map +1 -0
  129. package/dist/core/src/sync/index.d.ts +3 -0
  130. package/dist/core/src/sync/index.d.ts.map +1 -0
  131. package/dist/core/src/sync/index.js +3 -0
  132. package/dist/core/src/sync/index.js.map +1 -0
  133. package/dist/core/src/sync/sync-engine.d.ts +68 -0
  134. package/dist/core/src/sync/sync-engine.d.ts.map +1 -0
  135. package/dist/core/src/sync/sync-engine.js +317 -0
  136. package/dist/core/src/sync/sync-engine.js.map +1 -0
  137. package/dist/core/src/sync/transaction-manager.d.ts +83 -0
  138. package/dist/core/src/sync/transaction-manager.d.ts.map +1 -0
  139. package/dist/core/src/sync/transaction-manager.js +227 -0
  140. package/dist/core/src/sync/transaction-manager.js.map +1 -0
  141. package/dist/core/src/webhooks/webhook-manager.d.ts +137 -0
  142. package/dist/core/src/webhooks/webhook-manager.d.ts.map +1 -0
  143. package/dist/core/src/webhooks/webhook-manager.js +334 -0
  144. package/dist/core/src/webhooks/webhook-manager.js.map +1 -0
  145. package/package.json +4 -6
@@ -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,3 @@
1
+ export * from './sync-engine';
2
+ export { default as ServerSyncEngine } from './sync-engine';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from './sync-engine';
2
+ export { default as ServerSyncEngine } from './sync-engine';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}