@memberjunction/metadata-sync 3.4.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/config.d.ts +1 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +17 -27
  4. package/dist/config.js.map +1 -1
  5. package/dist/constants/metadata-keywords.d.ts +1 -0
  6. package/dist/constants/metadata-keywords.d.ts.map +1 -0
  7. package/dist/constants/metadata-keywords.js +31 -42
  8. package/dist/constants/metadata-keywords.js.map +1 -1
  9. package/dist/index.d.ts +39 -37
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +26 -62
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/EntityPropertyExtractor.d.ts +1 -0
  14. package/dist/lib/EntityPropertyExtractor.d.ts.map +1 -0
  15. package/dist/lib/EntityPropertyExtractor.js +1 -5
  16. package/dist/lib/EntityPropertyExtractor.js.map +1 -1
  17. package/dist/lib/FieldExternalizer.d.ts +1 -0
  18. package/dist/lib/FieldExternalizer.d.ts.map +1 -0
  19. package/dist/lib/FieldExternalizer.js +14 -21
  20. package/dist/lib/FieldExternalizer.js.map +1 -1
  21. package/dist/lib/RecordProcessor.d.ts +3 -2
  22. package/dist/lib/RecordProcessor.d.ts.map +1 -0
  23. package/dist/lib/RecordProcessor.js +16 -25
  24. package/dist/lib/RecordProcessor.js.map +1 -1
  25. package/dist/lib/RelatedEntityHandler.d.ts +3 -2
  26. package/dist/lib/RelatedEntityHandler.d.ts.map +1 -0
  27. package/dist/lib/RelatedEntityHandler.js +3 -9
  28. package/dist/lib/RelatedEntityHandler.js.map +1 -1
  29. package/dist/lib/config-manager.d.ts +2 -1
  30. package/dist/lib/config-manager.d.ts.map +1 -0
  31. package/dist/lib/config-manager.js +10 -15
  32. package/dist/lib/config-manager.js.map +1 -1
  33. package/dist/lib/database-reference-scanner.d.ts +3 -2
  34. package/dist/lib/database-reference-scanner.d.ts.map +1 -0
  35. package/dist/lib/database-reference-scanner.js +7 -13
  36. package/dist/lib/database-reference-scanner.js.map +1 -1
  37. package/dist/lib/deletion-auditor.d.ts +3 -2
  38. package/dist/lib/deletion-auditor.d.ts.map +1 -0
  39. package/dist/lib/deletion-auditor.js +9 -15
  40. package/dist/lib/deletion-auditor.js.map +1 -1
  41. package/dist/lib/deletion-report-generator.d.ts +2 -1
  42. package/dist/lib/deletion-report-generator.d.ts.map +1 -0
  43. package/dist/lib/deletion-report-generator.js +1 -5
  44. package/dist/lib/deletion-report-generator.js.map +1 -1
  45. package/dist/lib/entity-foreign-key-helper.d.ts +1 -0
  46. package/dist/lib/entity-foreign-key-helper.d.ts.map +1 -0
  47. package/dist/lib/entity-foreign-key-helper.js +1 -5
  48. package/dist/lib/entity-foreign-key-helper.js.map +1 -1
  49. package/dist/lib/file-backup-manager.d.ts +1 -0
  50. package/dist/lib/file-backup-manager.d.ts.map +1 -0
  51. package/dist/lib/file-backup-manager.js +22 -27
  52. package/dist/lib/file-backup-manager.js.map +1 -1
  53. package/dist/lib/file-write-batch.d.ts +2 -1
  54. package/dist/lib/file-write-batch.d.ts.map +1 -0
  55. package/dist/lib/file-write-batch.js +16 -21
  56. package/dist/lib/file-write-batch.js.map +1 -1
  57. package/dist/lib/json-preprocessor.d.ts +1 -0
  58. package/dist/lib/json-preprocessor.d.ts.map +1 -0
  59. package/dist/lib/json-preprocessor.js +21 -26
  60. package/dist/lib/json-preprocessor.js.map +1 -1
  61. package/dist/lib/json-write-helper.d.ts +2 -1
  62. package/dist/lib/json-write-helper.d.ts.map +1 -0
  63. package/dist/lib/json-write-helper.js +4 -11
  64. package/dist/lib/json-write-helper.js.map +1 -1
  65. package/dist/lib/provider-utils.d.ts +2 -1
  66. package/dist/lib/provider-utils.d.ts.map +1 -0
  67. package/dist/lib/provider-utils.js +15 -46
  68. package/dist/lib/provider-utils.js.map +1 -1
  69. package/dist/lib/record-dependency-analyzer.d.ts +2 -1
  70. package/dist/lib/record-dependency-analyzer.d.ts.map +1 -0
  71. package/dist/lib/record-dependency-analyzer.js +26 -31
  72. package/dist/lib/record-dependency-analyzer.js.map +1 -1
  73. package/dist/lib/singleton-manager.d.ts +2 -1
  74. package/dist/lib/singleton-manager.d.ts.map +1 -0
  75. package/dist/lib/singleton-manager.js +4 -9
  76. package/dist/lib/singleton-manager.js.map +1 -1
  77. package/dist/lib/sql-logger.d.ts +2 -1
  78. package/dist/lib/sql-logger.d.ts.map +1 -0
  79. package/dist/lib/sql-logger.js +8 -16
  80. package/dist/lib/sql-logger.js.map +1 -1
  81. package/dist/lib/sync-engine.d.ts +2 -1
  82. package/dist/lib/sync-engine.d.ts.map +1 -0
  83. package/dist/lib/sync-engine.js +58 -76
  84. package/dist/lib/sync-engine.js.map +1 -1
  85. package/dist/lib/transaction-manager.d.ts +2 -1
  86. package/dist/lib/transaction-manager.d.ts.map +1 -0
  87. package/dist/lib/transaction-manager.js +6 -11
  88. package/dist/lib/transaction-manager.js.map +1 -1
  89. package/dist/services/FileResetService.d.ts +1 -0
  90. package/dist/services/FileResetService.d.ts.map +1 -0
  91. package/dist/services/FileResetService.js +17 -24
  92. package/dist/services/FileResetService.js.map +1 -1
  93. package/dist/services/FormattingService.d.ts +2 -1
  94. package/dist/services/FormattingService.d.ts.map +1 -0
  95. package/dist/services/FormattingService.js +68 -73
  96. package/dist/services/FormattingService.js.map +1 -1
  97. package/dist/services/InitService.d.ts +1 -0
  98. package/dist/services/InitService.d.ts.map +1 -0
  99. package/dist/services/InitService.js +12 -19
  100. package/dist/services/InitService.js.map +1 -1
  101. package/dist/services/PullService.d.ts +2 -1
  102. package/dist/services/PullService.d.ts.map +1 -0
  103. package/dist/services/PullService.js +49 -60
  104. package/dist/services/PullService.js.map +1 -1
  105. package/dist/services/PushService.d.ts +2 -1
  106. package/dist/services/PushService.d.ts.map +1 -0
  107. package/dist/services/PushService.js +59 -68
  108. package/dist/services/PushService.js.map +1 -1
  109. package/dist/services/StatusService.d.ts +2 -1
  110. package/dist/services/StatusService.d.ts.map +1 -0
  111. package/dist/services/StatusService.js +14 -22
  112. package/dist/services/StatusService.js.map +1 -1
  113. package/dist/services/ValidationService.d.ts +2 -1
  114. package/dist/services/ValidationService.d.ts.map +1 -0
  115. package/dist/services/ValidationService.js +41 -71
  116. package/dist/services/ValidationService.js.map +1 -1
  117. package/dist/services/WatchService.d.ts +4 -3
  118. package/dist/services/WatchService.d.ts.map +1 -0
  119. package/dist/services/WatchService.js +35 -43
  120. package/dist/services/WatchService.js.map +1 -1
  121. package/dist/services/index.d.ts +9 -8
  122. package/dist/services/index.d.ts.map +1 -0
  123. package/dist/services/index.js +8 -19
  124. package/dist/services/index.js.map +1 -1
  125. package/dist/types/validation.d.ts +2 -1
  126. package/dist/types/validation.d.ts.map +1 -0
  127. package/dist/types/validation.js +2 -23
  128. package/dist/types/validation.js.map +1 -1
  129. package/package.json +23 -21
@@ -1,28 +1,18 @@
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
- exports.PullService = void 0;
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const path_1 = __importDefault(require("path"));
9
- const core_1 = require("@memberjunction/core");
10
- const config_1 = require("../config");
11
- const config_manager_1 = require("../lib/config-manager");
12
- const file_write_batch_1 = require("../lib/file-write-batch");
13
- const RecordProcessor_1 = require("../lib/RecordProcessor");
14
- class PullService {
15
- syncEngine;
16
- contextUser;
17
- createdBackupFiles = [];
18
- createdBackupDirs = new Set();
19
- fileWriteBatch;
20
- recordProcessor;
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { RunView } from '@memberjunction/core';
4
+ import { loadEntityConfig } from '../config.js';
5
+ import { configManager } from '../lib/config-manager.js';
6
+ import { FileWriteBatch } from '../lib/file-write-batch.js';
7
+ import { RecordProcessor } from '../lib/RecordProcessor.js';
8
+ export class PullService {
21
9
  constructor(syncEngine, contextUser) {
10
+ this.createdBackupFiles = [];
11
+ this.createdBackupDirs = new Set();
22
12
  this.syncEngine = syncEngine;
23
13
  this.contextUser = contextUser;
24
- this.fileWriteBatch = new file_write_batch_1.FileWriteBatch();
25
- this.recordProcessor = new RecordProcessor_1.RecordProcessor(syncEngine, contextUser);
14
+ this.fileWriteBatch = new FileWriteBatch();
15
+ this.recordProcessor = new RecordProcessor(syncEngine, contextUser);
26
16
  }
27
17
  async pull(options, callbacks) {
28
18
  // Validate that include and exclude are not used together
@@ -43,7 +33,7 @@ class PullService {
43
33
  process.chdir(options.targetDir);
44
34
  targetDir = process.cwd();
45
35
  // Load entity config from the current directory
46
- entityConfig = await (0, config_1.loadEntityConfig)(targetDir);
36
+ entityConfig = await loadEntityConfig(targetDir);
47
37
  if (!entityConfig) {
48
38
  throw new Error(`No .mj-sync.json found in ${targetDir}`);
49
39
  }
@@ -65,23 +55,23 @@ class PullService {
65
55
  // The CLI can handle prompting for selection
66
56
  throw new Error(`Multiple directories found for entity "${options.entity}". Please specify target directory.`);
67
57
  }
68
- entityConfig = await (0, config_1.loadEntityConfig)(targetDir);
58
+ entityConfig = await loadEntityConfig(targetDir);
69
59
  if (!entityConfig) {
70
60
  throw new Error(`Invalid entity configuration in ${targetDir}`);
71
61
  }
72
62
  }
73
63
  // Show configuration notice only if relevant and in verbose mode
74
64
  if (options.verbose && entityConfig?.pull?.appendRecordsToExistingFile && entityConfig?.pull?.newFileName) {
75
- const targetFile = path_1.default.join(targetDir, entityConfig.pull.newFileName.endsWith('.json')
65
+ const targetFile = path.join(targetDir, entityConfig.pull.newFileName.endsWith('.json')
76
66
  ? entityConfig.pull.newFileName
77
67
  : `${entityConfig.pull.newFileName}.json`);
78
- if (await fs_extra_1.default.pathExists(targetFile)) {
79
- callbacks?.onLog?.(`\nšŸ“ Configuration: New records will be appended to existing file '${path_1.default.basename(targetFile)}'`);
68
+ if (await fs.pathExists(targetFile)) {
69
+ callbacks?.onLog?.(`\nšŸ“ Configuration: New records will be appended to existing file '${path.basename(targetFile)}'`);
80
70
  }
81
71
  }
82
72
  // Pull records
83
73
  callbacks?.onProgress?.(`Pulling ${options.entity} records`);
84
- const rv = new core_1.RunView();
74
+ const rv = new RunView();
85
75
  let filter = '';
86
76
  if (options.filter) {
87
77
  filter = options.filter;
@@ -190,9 +180,9 @@ class PullService {
190
180
  // Queue all records to single file for batched write
191
181
  if (allRecords.length > 0) {
192
182
  const fileName = options.multiFile.endsWith('.json') ? options.multiFile : `${options.multiFile}.json`;
193
- const filePath = path_1.default.join(targetDir, fileName);
183
+ const filePath = path.join(targetDir, fileName);
194
184
  this.fileWriteBatch.queueWrite(filePath, allRecords);
195
- callbacks?.onSuccess?.(`Queued ${processed} records for ${path_1.default.basename(filePath)}`);
185
+ callbacks?.onSuccess?.(`Queued ${processed} records for ${path.basename(filePath)}`);
196
186
  }
197
187
  // If there were errors during parallel processing, throw them
198
188
  if (errors.length > 0) {
@@ -230,8 +220,8 @@ class PullService {
230
220
  // Remove backup files
231
221
  for (const backupPath of this.createdBackupFiles) {
232
222
  try {
233
- if (await fs_extra_1.default.pathExists(backupPath)) {
234
- await fs_extra_1.default.remove(backupPath);
223
+ if (await fs.pathExists(backupPath)) {
224
+ await fs.remove(backupPath);
235
225
  }
236
226
  }
237
227
  catch (error) {
@@ -260,7 +250,7 @@ class PullService {
260
250
  async removeEmptyBackupDirectory(backupDir) {
261
251
  try {
262
252
  // Check if directory exists
263
- if (!(await fs_extra_1.default.pathExists(backupDir))) {
253
+ if (!(await fs.pathExists(backupDir))) {
264
254
  return;
265
255
  }
266
256
  // Only remove if it's actually a .backups directory for safety
@@ -268,9 +258,9 @@ class PullService {
268
258
  return;
269
259
  }
270
260
  // Check if directory is empty
271
- const files = await fs_extra_1.default.readdir(backupDir);
261
+ const files = await fs.readdir(backupDir);
272
262
  if (files.length === 0) {
273
- await fs_extra_1.default.remove(backupDir);
263
+ await fs.remove(backupDir);
274
264
  }
275
265
  }
276
266
  catch (error) {
@@ -300,13 +290,13 @@ class PullService {
300
290
  for (const backupPath of this.createdBackupFiles) {
301
291
  try {
302
292
  // Extract original file path from backup path
303
- const backupDir = path_1.default.dirname(backupPath);
304
- const backupFileName = path_1.default.basename(backupPath);
293
+ const backupDir = path.dirname(backupPath);
294
+ const backupFileName = path.basename(backupPath);
305
295
  // Remove timestamp and .backup extension to get original filename
306
296
  const originalFileName = backupFileName.replace(/\.\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z\.backup$/, '.json');
307
- const originalFilePath = path_1.default.join(path_1.default.dirname(backupDir), originalFileName);
308
- if (await fs_extra_1.default.pathExists(backupPath)) {
309
- await fs_extra_1.default.copy(backupPath, originalFilePath);
297
+ const originalFilePath = path.join(path.dirname(backupDir), originalFileName);
298
+ if (await fs.pathExists(backupPath)) {
299
+ await fs.copy(backupPath, originalFilePath);
310
300
  restoredCount++;
311
301
  }
312
302
  }
@@ -329,7 +319,7 @@ class PullService {
329
319
  const existingFiles = await this.findExistingFiles(targetDir, filePattern);
330
320
  if (options.verbose) {
331
321
  callbacks?.onLog?.(`Found ${existingFiles.length} existing files matching pattern '${filePattern}'`);
332
- existingFiles.forEach(f => callbacks?.onLog?.(` - ${path_1.default.basename(f)}`));
322
+ existingFiles.forEach(f => callbacks?.onLog?.(` - ${path.basename(f)}`));
333
323
  }
334
324
  // Load existing records and build lookup map
335
325
  const existingRecordsMap = await this.loadExistingRecords(existingFiles, entityInfo);
@@ -387,7 +377,7 @@ class PullService {
387
377
  backedUpFiles.add(filePath);
388
378
  }
389
379
  // Load existing file data
390
- const existingData = await fs_extra_1.default.readJson(filePath);
380
+ const existingData = await fs.readJson(filePath);
391
381
  // Find the specific existing record that matches this primary key
392
382
  let existingRecordData;
393
383
  if (Array.isArray(existingData)) {
@@ -439,7 +429,7 @@ class PullService {
439
429
  const fileName = entityConfig.pull.newFileName.endsWith('.json')
440
430
  ? entityConfig.pull.newFileName
441
431
  : `${entityConfig.pull.newFileName}.json`;
442
- const filePath = path_1.default.join(targetDir, fileName);
432
+ const filePath = path.join(targetDir, fileName);
443
433
  // Process all new records in parallel
444
434
  const newRecordPromises = newRecords.map(async ({ record, primaryKey }, index) => {
445
435
  try {
@@ -497,7 +487,7 @@ class PullService {
497
487
  const recordData = await this.recordProcessor.processRecord(record, primaryKey, targetDir, entityConfig, verbose, true);
498
488
  // Determine file path
499
489
  const fileName = this.buildFileName(primaryKey, entityConfig);
500
- const filePath = path_1.default.join(targetDir, fileName);
490
+ const filePath = path.join(targetDir, fileName);
501
491
  // Queue JSON file for batched write with controlled property order
502
492
  this.fileWriteBatch.queueWrite(filePath, recordData);
503
493
  }
@@ -505,11 +495,11 @@ class PullService {
505
495
  const dirs = [];
506
496
  // Search for directories with matching entity config
507
497
  const searchDirs = async (dir) => {
508
- const entries = await fs_extra_1.default.readdir(dir, { withFileTypes: true });
498
+ const entries = await fs.readdir(dir, { withFileTypes: true });
509
499
  for (const entry of entries) {
510
500
  if (entry.isDirectory()) {
511
- const fullPath = path_1.default.join(dir, entry.name);
512
- const config = await (0, config_1.loadEntityConfig)(fullPath);
501
+ const fullPath = path.join(dir, entry.name);
502
+ const config = await loadEntityConfig(fullPath);
513
503
  if (config && config.entity === entityName) {
514
504
  dirs.push(fullPath);
515
505
  }
@@ -520,7 +510,7 @@ class PullService {
520
510
  }
521
511
  }
522
512
  };
523
- await searchDirs(config_manager_1.configManager.getOriginalCwd());
513
+ await searchDirs(configManager.getOriginalCwd());
524
514
  return dirs;
525
515
  }
526
516
  buildFileName(primaryKey, _entityConfig) {
@@ -544,7 +534,7 @@ class PullService {
544
534
  async findExistingFiles(dir, pattern) {
545
535
  const files = [];
546
536
  try {
547
- const entries = await fs_extra_1.default.readdir(dir, { withFileTypes: true });
537
+ const entries = await fs.readdir(dir, { withFileTypes: true });
548
538
  for (const entry of entries) {
549
539
  if (entry.isFile()) {
550
540
  const fileName = entry.name;
@@ -552,13 +542,13 @@ class PullService {
552
542
  const normalizedPattern = pattern.startsWith('**/') ? pattern.substring(3) : pattern;
553
543
  // Simple pattern matching
554
544
  if (normalizedPattern === '*.json' && fileName.endsWith('.json')) {
555
- files.push(path_1.default.join(dir, fileName));
545
+ files.push(path.join(dir, fileName));
556
546
  }
557
547
  else if (normalizedPattern === '.*.json' && fileName.startsWith('.') && fileName.endsWith('.json')) {
558
- files.push(path_1.default.join(dir, fileName));
548
+ files.push(path.join(dir, fileName));
559
549
  }
560
550
  else if (normalizedPattern === fileName) {
561
- files.push(path_1.default.join(dir, fileName));
551
+ files.push(path.join(dir, fileName));
562
552
  }
563
553
  }
564
554
  }
@@ -575,7 +565,7 @@ class PullService {
575
565
  const recordsMap = new Map();
576
566
  for (const filePath of files) {
577
567
  try {
578
- const fileData = await fs_extra_1.default.readJson(filePath);
568
+ const fileData = await fs.readJson(filePath);
579
569
  const records = Array.isArray(fileData) ? fileData : [fileData];
580
570
  for (const record of records) {
581
571
  if (record.primaryKey) {
@@ -643,19 +633,19 @@ class PullService {
643
633
  return result;
644
634
  }
645
635
  async createBackup(filePath, backupDirName) {
646
- const dir = path_1.default.dirname(filePath);
647
- const fileName = path_1.default.basename(filePath);
648
- const backupDir = path_1.default.join(dir, backupDirName || '.backups');
636
+ const dir = path.dirname(filePath);
637
+ const fileName = path.basename(filePath);
638
+ const backupDir = path.join(dir, backupDirName || '.backups');
649
639
  // Ensure backup directory exists
650
- await fs_extra_1.default.ensureDir(backupDir);
640
+ await fs.ensureDir(backupDir);
651
641
  // Track the backup directory for cleanup
652
642
  this.createdBackupDirs.add(backupDir);
653
643
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
654
644
  // Remove .json extension, add timestamp, then add .backup extension
655
645
  const backupFileName = fileName.replace(/\.json$/, `.${timestamp}.backup`);
656
- const backupPath = path_1.default.join(backupDir, backupFileName);
646
+ const backupPath = path.join(backupDir, backupFileName);
657
647
  try {
658
- await fs_extra_1.default.copy(filePath, backupPath);
648
+ await fs.copy(filePath, backupPath);
659
649
  // Track the created backup file for cleanup
660
650
  this.createdBackupFiles.push(backupPath);
661
651
  }
@@ -664,5 +654,4 @@ class PullService {
664
654
  }
665
655
  }
666
656
  }
667
- exports.PullService = PullService;
668
657
  //# sourceMappingURL=PullService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PullService.js","sourceRoot":"","sources":["../../src/services/PullService.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport { RunView, EntityInfo, UserInfo, BaseEntity } from '@memberjunction/core';\nimport { SyncEngine, RecordData } from '../lib/sync-engine';\nimport { loadEntityConfig, EntityConfig } from '../config';\nimport { configManager } from '../lib/config-manager';\nimport { FileWriteBatch } from '../lib/file-write-batch';\nimport { JsonWriteHelper } from '../lib/json-write-helper';\nimport { RecordProcessor } from '../lib/RecordProcessor';\n\nexport interface PullOptions {\n entity: string;\n filter?: string;\n dryRun?: boolean;\n multiFile?: string;\n verbose?: boolean;\n noValidate?: boolean;\n targetDir?: string;\n updateExistingRecords?: boolean;\n createNewFileIfNotFound?: boolean;\n include?: string[]; // Only process these directories (whitelist, supports patterns)\n exclude?: string[]; // Skip these directories (blacklist, supports patterns)\n}\n\nexport interface PullCallbacks {\n onProgress?: (message: string) => void;\n onSuccess?: (message: string) => void;\n onError?: (message: string) => void;\n onWarn?: (message: string) => void;\n onLog?: (message: string) => void;\n}\n\nexport interface PullResult {\n processed: number;\n created: number;\n updated: number;\n skipped: number;\n targetDir: string;\n}\n\nexport class PullService {\n private syncEngine: SyncEngine;\n private contextUser: UserInfo;\n private createdBackupFiles: string[] = [];\n private createdBackupDirs: Set<string> = new Set();\n private fileWriteBatch: FileWriteBatch;\n private recordProcessor: RecordProcessor;\n \n constructor(syncEngine: SyncEngine, contextUser: UserInfo) {\n this.syncEngine = syncEngine;\n this.contextUser = contextUser;\n this.fileWriteBatch = new FileWriteBatch();\n this.recordProcessor = new RecordProcessor(syncEngine, contextUser);\n }\n \n async pull(options: PullOptions, callbacks?: PullCallbacks): Promise<PullResult> {\n // Validate that include and exclude are not used together\n if (options.include && options.exclude) {\n throw new Error('Cannot specify both --include and --exclude options. Please use one or the other.');\n }\n\n // Clear any previous batch operations\n this.fileWriteBatch.clear();\n this.createdBackupFiles = [];\n this.createdBackupDirs.clear();\n \n let targetDir: string;\n let entityConfig: EntityConfig | null;\n \n // Check if we should use a specific target directory\n if (options.targetDir) {\n if (options.verbose) {\n callbacks?.onLog?.(`Using specified target directory: ${options.targetDir}`);\n }\n process.chdir(options.targetDir);\n targetDir = process.cwd();\n \n // Load entity config from the current directory\n entityConfig = await loadEntityConfig(targetDir);\n if (!entityConfig) {\n throw new Error(`No .mj-sync.json found in ${targetDir}`);\n }\n if (entityConfig.entity !== options.entity) {\n throw new Error(`Directory ${targetDir} is configured for entity \"${entityConfig.entity}\", not \"${options.entity}\"`);\n }\n } else {\n // Original behavior - find entity directory\n const entityDirs = await this.findEntityDirectories(options.entity);\n \n if (entityDirs.length === 0) {\n throw new Error(`No directory found for entity \"${options.entity}\". Run \"mj sync init\" first.`);\n }\n \n if (entityDirs.length === 1) {\n targetDir = entityDirs[0];\n } else {\n // Multiple directories found - in service mode, we'll use the first one\n // The CLI can handle prompting for selection\n throw new Error(`Multiple directories found for entity \"${options.entity}\". Please specify target directory.`);\n }\n \n entityConfig = await loadEntityConfig(targetDir);\n if (!entityConfig) {\n throw new Error(`Invalid entity configuration in ${targetDir}`);\n }\n }\n \n // Show configuration notice only if relevant and in verbose mode\n if (options.verbose && entityConfig?.pull?.appendRecordsToExistingFile && entityConfig?.pull?.newFileName) {\n const targetFile = path.join(targetDir, entityConfig.pull.newFileName.endsWith('.json') \n ? entityConfig.pull.newFileName \n : `${entityConfig.pull.newFileName}.json`);\n \n if (await fs.pathExists(targetFile)) {\n callbacks?.onLog?.(`\\nšŸ“ Configuration: New records will be appended to existing file '${path.basename(targetFile)}'`);\n }\n }\n \n // Pull records\n callbacks?.onProgress?.(`Pulling ${options.entity} records`);\n const rv = new RunView();\n \n let filter = '';\n if (options.filter) {\n filter = options.filter;\n } else if (entityConfig?.pull?.filter) {\n filter = entityConfig.pull.filter;\n }\n \n const result = await rv.RunView({\n EntityName: options.entity,\n ExtraFilter: filter,\n ResultType: 'entity_object'\n }, this.contextUser);\n \n if (!result.Success) {\n throw new Error(`Failed to pull records: ${result.ErrorMessage}`);\n }\n \n callbacks?.onSuccess?.(`Found ${result.Results.length} records`);\n \n if (options.dryRun) {\n callbacks?.onLog?.(`\\nDry run mode - would pull ${result.Results.length} records to ${targetDir}`);\n return {\n processed: 0,\n created: 0,\n updated: 0,\n skipped: 0,\n targetDir\n };\n }\n \n // Process records with error handling and rollback\n let pullResult: Omit<PullResult, 'targetDir'>;\n \n try {\n pullResult = await this.processRecords(\n result.Results,\n options,\n targetDir,\n entityConfig,\n callbacks\n );\n \n // Write all batched file changes at once\n if (!options.dryRun) {\n const filesWritten = await this.fileWriteBatch.flush();\n if (options.verbose && filesWritten > 0) {\n callbacks?.onSuccess?.(`Wrote ${filesWritten} files with consistent property ordering`);\n }\n }\n \n // Operation succeeded - clean up backup files\n if (!options.dryRun) {\n await this.cleanupBackupFiles();\n }\n \n } catch (error) {\n callbacks?.onError?.(`Pull operation failed: ${(error as any).message || error}`);\n \n // Attempt to rollback file changes if not in dry run mode\n if (!options.dryRun) {\n try {\n await this.rollbackFileChanges(callbacks);\n callbacks?.onWarn?.('File changes have been rolled back due to operation failure');\n } catch (rollbackError) {\n callbacks?.onError?.(`Rollback failed: ${(rollbackError as any).message || rollbackError}`);\n }\n }\n \n throw error;\n }\n \n return {\n ...pullResult,\n targetDir\n };\n }\n \n private async processRecords(\n records: BaseEntity[],\n options: PullOptions,\n targetDir: string,\n entityConfig: EntityConfig,\n callbacks?: PullCallbacks\n ): Promise<Omit<PullResult, 'targetDir'>> {\n const entityInfo = this.syncEngine.getEntityInfo(options.entity);\n if (!entityInfo) {\n throw new Error(`Entity information not found for: ${options.entity}`);\n }\n \n callbacks?.onProgress?.('Processing records');\n let processed = 0;\n let updated = 0;\n let created = 0;\n let skipped = 0;\n \n // If multi-file flag is set, collect all records\n if (options.multiFile) {\n const allRecords: RecordData[] = [];\n const errors: string[] = [];\n \n // Process records in parallel for multi-file mode\n const recordPromises = records.map(async (record, index) => {\n try {\n // Build primary key\n const primaryKey: Record<string, any> = {};\n for (const pk of entityInfo.PrimaryKeys) {\n primaryKey[pk.Name] = (record as any)[pk.Name];\n }\n \n // Process record for multi-file\n const recordData = await this.recordProcessor.processRecord(\n record, \n primaryKey, \n targetDir, \n entityConfig, \n options.verbose, \n true\n );\n \n return { success: true, recordData, index };\n } catch (error) {\n const errorMessage = `Failed to process record ${index + 1}: ${(error as any).message || error}`;\n errors.push(errorMessage);\n callbacks?.onWarn?.(errorMessage);\n return { success: false, recordData: null, index };\n }\n });\n \n const recordResults = await Promise.all(recordPromises);\n \n // Collect successful records\n for (const result of recordResults) {\n if (result.success && result.recordData) {\n allRecords.push(result.recordData);\n processed++;\n }\n }\n \n if (options.verbose) {\n callbacks?.onProgress?.(`Processed ${processed}/${records.length} records in parallel`);\n }\n \n // Queue all records to single file for batched write\n if (allRecords.length > 0) {\n const fileName = options.multiFile.endsWith('.json') ? options.multiFile : `${options.multiFile}.json`;\n const filePath = path.join(targetDir, fileName);\n this.fileWriteBatch.queueWrite(filePath, allRecords);\n callbacks?.onSuccess?.(`Queued ${processed} records for ${path.basename(filePath)}`);\n }\n \n // If there were errors during parallel processing, throw them\n if (errors.length > 0) {\n throw new Error(`Multi-file processing completed with ${errors.length} errors:\\n${errors.join('\\n')}`);\n }\n } else {\n // Smart update logic for single-file-per-record\n const result = await this.processIndividualRecords(\n records,\n options,\n targetDir,\n entityConfig,\n entityInfo,\n callbacks\n );\n \n processed = result.processed;\n updated = result.updated;\n created = result.created;\n skipped = result.skipped;\n \n // Final status\n const statusParts = [`Processed ${processed} records`];\n if (updated > 0) statusParts.push(`updated ${updated}`);\n if (created > 0) statusParts.push(`created ${created}`);\n if (skipped > 0) statusParts.push(`skipped ${skipped}`);\n \n callbacks?.onSuccess?.(statusParts.join(', '));\n }\n \n return { processed, created, updated, skipped };\n }\n \n /**\n * Clean up backup files created during the pull operation\n * Should be called after successful pull operations to remove persistent backup files\n */\n async cleanupBackupFiles(): Promise<void> {\n if (this.createdBackupFiles.length === 0 && this.createdBackupDirs.size === 0) {\n return;\n }\n \n const errors: string[] = [];\n \n // Remove backup files\n for (const backupPath of this.createdBackupFiles) {\n try {\n if (await fs.pathExists(backupPath)) {\n await fs.remove(backupPath);\n }\n } catch (error) {\n errors.push(`Failed to remove backup file ${backupPath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n // Remove empty backup directories\n for (const backupDir of this.createdBackupDirs) {\n try {\n await this.removeEmptyBackupDirectory(backupDir);\n } catch (error) {\n errors.push(`Failed to remove backup directory ${backupDir}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n // Clear the tracking arrays\n this.createdBackupFiles = [];\n this.createdBackupDirs.clear();\n \n if (errors.length > 0) {\n throw new Error(`Backup cleanup completed with errors:\\n${errors.join('\\n')}`);\n }\n }\n\n /**\n * Remove a backup directory if it's empty\n */\n private async removeEmptyBackupDirectory(backupDir: string): Promise<void> {\n try {\n // Check if directory exists\n if (!(await fs.pathExists(backupDir))) {\n return;\n }\n \n // Only remove if it's actually a .backups directory for safety\n if (!backupDir.endsWith('.backups')) {\n return;\n }\n \n // Check if directory is empty\n const files = await fs.readdir(backupDir);\n if (files.length === 0) {\n await fs.remove(backupDir);\n }\n } catch (error) {\n // Log error but don't throw - cleanup should be non-critical\n // The error will be caught by the caller and included in the error list\n throw error;\n }\n }\n \n /**\n * Get the list of backup files created during the current pull operation\n */\n getCreatedBackupFiles(): string[] {\n return [...this.createdBackupFiles];\n }\n \n /**\n * Rollback file changes by restoring from backup files\n * Called when pull operation fails after files have been modified\n */\n private async rollbackFileChanges(callbacks?: PullCallbacks): Promise<void> {\n if (this.createdBackupFiles.length === 0) {\n callbacks?.onLog?.('No backup files found - no rollback needed');\n return;\n }\n \n callbacks?.onProgress?.(`Rolling back ${this.createdBackupFiles.length} file changes...`);\n \n const errors: string[] = [];\n let restoredCount = 0;\n \n for (const backupPath of this.createdBackupFiles) {\n try {\n // Extract original file path from backup path\n const backupDir = path.dirname(backupPath);\n const backupFileName = path.basename(backupPath);\n \n // Remove timestamp and .backup extension to get original filename\n const originalFileName = backupFileName.replace(/\\.\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}-\\d{3}Z\\.backup$/, '.json');\n const originalFilePath = path.join(path.dirname(backupDir), originalFileName);\n \n if (await fs.pathExists(backupPath)) {\n await fs.copy(backupPath, originalFilePath);\n restoredCount++;\n }\n } catch (error) {\n errors.push(`Failed to restore ${backupPath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n if (errors.length > 0) {\n throw new Error(`Rollback completed with ${errors.length} errors (${restoredCount} files restored):\\n${errors.join('\\n')}`);\n }\n \n callbacks?.onSuccess?.(`Successfully rolled back ${restoredCount} file changes`);\n }\n \n private async processIndividualRecords(\n records: BaseEntity[],\n options: PullOptions,\n targetDir: string,\n entityConfig: EntityConfig,\n entityInfo: EntityInfo,\n callbacks?: PullCallbacks\n ): Promise<{ processed: number; updated: number; created: number; skipped: number }> {\n let processed = 0;\n let updated = 0;\n let created = 0;\n let skipped = 0;\n \n // Find existing files\n const filePattern = entityConfig.pull?.filePattern || entityConfig.filePattern || '*.json';\n const existingFiles = await this.findExistingFiles(targetDir, filePattern);\n \n if (options.verbose) {\n callbacks?.onLog?.(`Found ${existingFiles.length} existing files matching pattern '${filePattern}'`);\n existingFiles.forEach(f => callbacks?.onLog?.(` - ${path.basename(f)}`));\n }\n \n // Load existing records and build lookup map\n const existingRecordsMap = await this.loadExistingRecords(existingFiles, entityInfo);\n \n if (options.verbose) {\n callbacks?.onLog?.(`Loaded ${existingRecordsMap.size} existing records from files`);\n }\n \n // Separate records into new and existing\n const newRecords: Array<{ record: BaseEntity; primaryKey: Record<string, any> }> = [];\n const existingRecordsToUpdate: Array<{ record: BaseEntity; primaryKey: Record<string, any>; filePath: string }> = [];\n \n for (const record of records) {\n // Build primary key\n const primaryKey: Record<string, any> = {};\n for (const pk of entityInfo.PrimaryKeys) {\n primaryKey[pk.Name] = (record as any)[pk.Name];\n }\n \n // Create lookup key\n const lookupKey = this.createPrimaryKeyLookup(primaryKey);\n const existingFileInfo = existingRecordsMap.get(lookupKey);\n \n if (existingFileInfo) {\n // Record exists locally\n if (entityConfig.pull?.updateExistingRecords !== false) {\n existingRecordsToUpdate.push({ record, primaryKey, filePath: existingFileInfo.filePath });\n } else {\n skipped++;\n if (options.verbose) {\n callbacks?.onLog?.(`Skipping existing record: ${lookupKey}`);\n }\n }\n } else {\n // Record doesn't exist locally\n if (entityConfig.pull?.createNewFileIfNotFound !== false) {\n newRecords.push({ record, primaryKey });\n } else {\n skipped++;\n if (options.verbose) {\n callbacks?.onLog?.(`Skipping new record (createNewFileIfNotFound=false): ${lookupKey}`);\n }\n }\n }\n }\n \n // Track which files have been backed up to avoid duplicates\n const backedUpFiles = new Set<string>();\n const errors: string[] = [];\n \n // Process existing records updates in parallel\n if (existingRecordsToUpdate.length > 0) {\n callbacks?.onProgress?.(`Updating existing records (parallel processing)`);\n \n const updatePromises = existingRecordsToUpdate.map(async ({ record, primaryKey, filePath }, index) => {\n try {\n // Create backup if configured (only once per file)\n if (entityConfig.pull?.backupBeforeUpdate && !backedUpFiles.has(filePath)) {\n await this.createBackup(filePath, entityConfig.pull?.backupDirectory);\n backedUpFiles.add(filePath);\n }\n \n // Load existing file data\n const existingData = await fs.readJson(filePath);\n \n // Find the specific existing record that matches this primary key\n let existingRecordData: RecordData;\n if (Array.isArray(existingData)) {\n // Find the matching record in the array\n const matchingRecord = existingData.find(r => \n this.createPrimaryKeyLookup(r.primaryKey || {}) === this.createPrimaryKeyLookup(primaryKey)\n );\n existingRecordData = matchingRecord || existingData[0]; // Fallback to first if not found\n } else {\n existingRecordData = existingData;\n }\n \n // Process the new record data (isNewRecord = false for updates)\n const newRecordData = await this.recordProcessor.processRecord(\n record, \n primaryKey, \n targetDir, \n entityConfig, \n options.verbose, \n false, \n existingRecordData\n );\n \n // Apply merge strategy\n const mergedData = await this.mergeRecords(\n existingRecordData,\n newRecordData,\n entityConfig.pull?.mergeStrategy || 'merge',\n entityConfig.pull?.preserveFields || []\n );\n \n // Queue updated data for batched write\n if (Array.isArray(existingData)) {\n // Queue array update - batch will handle merging\n const primaryKeyLookup = this.createPrimaryKeyLookup(primaryKey);\n this.fileWriteBatch.queueArrayUpdate(filePath, mergedData, primaryKeyLookup);\n } else {\n // Queue single record update\n this.fileWriteBatch.queueSingleUpdate(filePath, mergedData);\n }\n \n if (options.verbose) {\n callbacks?.onLog?.(`Updated: ${filePath}`);\n }\n \n return { success: true, index };\n } catch (error) {\n const errorMessage = `Failed to update record ${index + 1}: ${(error as any).message || error}`;\n errors.push(errorMessage);\n callbacks?.onWarn?.(errorMessage);\n return { success: false, index };\n }\n });\n \n const updateResults = await Promise.all(updatePromises);\n updated = updateResults.filter(r => r.success).length;\n processed += updated;\n \n if (options.verbose) {\n callbacks?.onSuccess?.(`Completed ${updated}/${existingRecordsToUpdate.length} record updates`);\n }\n }\n \n // Process new records in parallel\n if (newRecords.length > 0) {\n callbacks?.onProgress?.(`Creating new records (parallel processing)`);\n \n if (entityConfig.pull?.appendRecordsToExistingFile && entityConfig.pull?.newFileName) {\n // Append all new records to a single file using parallel processing\n const fileName = entityConfig.pull.newFileName.endsWith('.json') \n ? entityConfig.pull.newFileName \n : `${entityConfig.pull.newFileName}.json`;\n const filePath = path.join(targetDir, fileName);\n \n // Process all new records in parallel\n const newRecordPromises = newRecords.map(async ({ record, primaryKey }, index) => {\n try {\n // For new records, pass isNewRecord = true (default)\n const recordData = await this.recordProcessor.processRecord(\n record, \n primaryKey, \n targetDir, \n entityConfig, \n options.verbose, \n true\n );\n \n // Use queueArrayUpdate to append the new record without overwriting existing updates\n // For new records, we can use a special lookup key since they don't exist yet\n const newRecordLookup = this.createPrimaryKeyLookup(primaryKey);\n this.fileWriteBatch.queueArrayUpdate(filePath, recordData, newRecordLookup);\n \n return { success: true, index };\n } catch (error) {\n const errorMessage = `Failed to process new record ${index + 1}: ${(error as any).message || error}`;\n errors.push(errorMessage);\n callbacks?.onWarn?.(errorMessage);\n return { success: false, index };\n }\n });\n \n const newRecordResults = await Promise.all(newRecordPromises);\n created = newRecordResults.filter(r => r.success).length;\n processed += created;\n \n if (options.verbose) {\n callbacks?.onLog?.(`Queued ${created} new records for: ${filePath}`);\n }\n } else {\n // Create individual files for each new record in parallel\n const individualRecordPromises = newRecords.map(async ({ record, primaryKey }, index) => {\n try {\n await this.processRecord(record, primaryKey, targetDir, entityConfig, options.verbose);\n return { success: true, index };\n } catch (error) {\n const errorMessage = `Failed to process new record ${index + 1}: ${(error as any).message || error}`;\n errors.push(errorMessage);\n callbacks?.onWarn?.(errorMessage);\n return { success: false, index };\n }\n });\n \n const individualResults = await Promise.all(individualRecordPromises);\n created = individualResults.filter(r => r.success).length;\n processed += created;\n \n if (options.verbose) {\n callbacks?.onSuccess?.(`Created ${created}/${newRecords.length} individual record files`);\n }\n }\n }\n \n // If there were errors during parallel processing, throw them\n if (errors.length > 0) {\n throw new Error(`Parallel processing completed with ${errors.length} errors:\\n${errors.join('\\n')}`);\n }\n \n return { processed, updated, created, skipped };\n }\n \n private async processRecord(\n record: BaseEntity, \n primaryKey: Record<string, any>,\n targetDir: string, \n entityConfig: EntityConfig,\n verbose?: boolean\n ): Promise<void> {\n const recordData = await this.recordProcessor.processRecord(\n record, \n primaryKey, \n targetDir, \n entityConfig, \n verbose, \n true\n );\n \n // Determine file path\n const fileName = this.buildFileName(primaryKey, entityConfig);\n const filePath = path.join(targetDir, fileName);\n \n // Queue JSON file for batched write with controlled property order\n this.fileWriteBatch.queueWrite(filePath, recordData);\n }\n\n \n\n\n\n private async findEntityDirectories(entityName: string): Promise<string[]> {\n const dirs: string[] = [];\n \n // Search for directories with matching entity config\n const searchDirs = async (dir: string) => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n if (entry.isDirectory()) {\n const fullPath = path.join(dir, entry.name);\n const config = await loadEntityConfig(fullPath);\n \n if (config && config.entity === entityName) {\n dirs.push(fullPath);\n } else {\n // Recurse\n await searchDirs(fullPath);\n }\n }\n }\n };\n \n await searchDirs(configManager.getOriginalCwd());\n return dirs;\n }\n \n private buildFileName(primaryKey: Record<string, any>, _entityConfig: EntityConfig): string {\n // Use primary key values to build filename\n const keys = Object.values(primaryKey);\n \n if (keys.length === 1 && typeof keys[0] === 'string') {\n // Single string key - use as base if it's a guid\n const key = keys[0];\n if (key.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i)) {\n // It's a GUID, use first 8 chars, prefixed with dot, lowercase\n return `.${key.substring(0, 8).toLowerCase()}.json`;\n }\n // Use the whole key if not too long, prefixed with dot\n if (key.length <= 50) {\n return `.${key.replace(/[^a-zA-Z0-9\\-_]/g, '').toLowerCase()}.json`;\n }\n }\n \n // Multiple keys or numeric - create composite name, prefixed with dot\n return '.' + keys.map(k => String(k).replace(/[^a-zA-Z0-9\\-_]/g, '').toLowerCase()).join('-') + '.json';\n }\n \n private async findExistingFiles(dir: string, pattern: string): Promise<string[]> {\n const files: string[] = [];\n\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile()) {\n const fileName = entry.name;\n\n // Normalize pattern by removing leading **/ (glob recursion prefix)\n const normalizedPattern = pattern.startsWith('**/') ? pattern.substring(3) : pattern;\n\n // Simple pattern matching\n if (normalizedPattern === '*.json' && fileName.endsWith('.json')) {\n files.push(path.join(dir, fileName));\n } else if (normalizedPattern === '.*.json' && fileName.startsWith('.') && fileName.endsWith('.json')) {\n files.push(path.join(dir, fileName));\n } else if (normalizedPattern === fileName) {\n files.push(path.join(dir, fileName));\n }\n }\n }\n } catch (error) {\n // Directory might not exist yet\n if ((error as any).code !== 'ENOENT') {\n throw error;\n }\n }\n\n return files;\n }\n \n private async loadExistingRecords(\n files: string[], \n _entityInfo: EntityInfo\n ): Promise<Map<string, { filePath: string; recordData: RecordData }>> {\n const recordsMap = new Map<string, { filePath: string; recordData: RecordData }>();\n \n for (const filePath of files) {\n try {\n const fileData = await fs.readJson(filePath);\n const records = Array.isArray(fileData) ? fileData : [fileData];\n \n for (const record of records) {\n if (record.primaryKey) {\n const lookupKey = this.createPrimaryKeyLookup(record.primaryKey);\n recordsMap.set(lookupKey, { filePath, recordData: record });\n }\n }\n } catch (error) {\n // Skip files that can't be parsed\n }\n }\n \n return recordsMap;\n }\n \n private createPrimaryKeyLookup(primaryKey: Record<string, any>): string {\n const keys = Object.keys(primaryKey).sort();\n return keys.map(k => `${k}:${primaryKey[k]}`).join('|');\n }\n \n private async mergeRecords(\n existing: RecordData,\n newData: RecordData,\n strategy: 'overwrite' | 'merge' | 'skip',\n preserveFields: string[]\n ): Promise<RecordData> {\n if (strategy === 'skip') {\n return existing;\n }\n\n if (strategy === 'overwrite') {\n // Create result with correct property order: fields, relatedEntities, primaryKey, sync\n const result: RecordData = {\n fields: { ...newData.fields }\n } as RecordData;\n\n // Restore preserved fields from existing\n if (preserveFields.length > 0 && existing.fields) {\n for (const field of preserveFields) {\n if (field in existing.fields) {\n result.fields[field] = existing.fields[field];\n }\n }\n }\n\n // Add relatedEntities before primaryKey and sync\n if (newData.relatedEntities) {\n result.relatedEntities = newData.relatedEntities;\n }\n\n result.primaryKey = newData.primaryKey;\n result.sync = newData.sync;\n\n return result;\n }\n\n // Default 'merge' strategy - create with correct property order\n const result: RecordData = {\n fields: { ...existing.fields, ...newData.fields }\n } as RecordData;\n\n // Restore preserved fields\n if (preserveFields.length > 0 && existing.fields) {\n for (const field of preserveFields) {\n if (field in existing.fields) {\n result.fields[field] = existing.fields[field];\n }\n }\n }\n\n // Add relatedEntities before primaryKey and sync\n if (existing.relatedEntities || newData.relatedEntities) {\n result.relatedEntities = {\n ...existing.relatedEntities,\n ...newData.relatedEntities\n };\n }\n\n result.primaryKey = newData.primaryKey || existing.primaryKey;\n result.sync = newData.sync;\n\n return result;\n }\n \n private async createBackup(filePath: string, backupDirName?: string): Promise<void> {\n const dir = path.dirname(filePath);\n const fileName = path.basename(filePath);\n const backupDir = path.join(dir, backupDirName || '.backups');\n \n // Ensure backup directory exists\n await fs.ensureDir(backupDir);\n // Track the backup directory for cleanup\n this.createdBackupDirs.add(backupDir);\n \n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n // Remove .json extension, add timestamp, then add .backup extension\n const backupFileName = fileName.replace(/\\.json$/, `.${timestamp}.backup`);\n const backupPath = path.join(backupDir, backupFileName);\n \n try {\n await fs.copy(filePath, backupPath);\n // Track the created backup file for cleanup\n this.createdBackupFiles.push(backupPath);\n } catch (error) {\n // Log error but don't throw\n }\n }\n}"]}
1
+ {"version":3,"file":"PullService.js","sourceRoot":"","sources":["../../src/services/PullService.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { UserInfo } from '@memberjunction/core';
2
- import { SyncEngine } from '../lib/sync-engine';
2
+ import { SyncEngine } from '../lib/sync-engine.js';
3
3
  export interface PushOptions {
4
4
  dir?: string;
5
5
  dryRun?: boolean;
@@ -112,3 +112,4 @@ export declare class PushService {
112
112
  private recordsMatch;
113
113
  private _buildBatchContextKey;
114
114
  }
115
+ //# sourceMappingURL=PushService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PushService.d.ts","sourceRoot":"","sources":["../../src/services/PushService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,UAAU,EAA8D,MAAM,oBAAoB,CAAC;AAkB5G,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAyBD,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,eAAe,CAAwB;gBAEnC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ;IAKzD;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IASrB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;YAwVlE,sBAAsB;YA8NtB,sBAAsB;IAmgBpC,OAAO,CAAC,gBAAgB;YAgBV,mBAAmB;IAmIjC;;;OAGG;YACW,qBAAqB;IAgDnC;;;OAGG;YACW,iBAAiB;IAgK/B;;OAEG;YACW,yBAAyB;IA0CvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;;;;;;;;OAYG;YACW,sBAAsB;IA+EpC;;;OAGG;YACW,kBAAkB;IA0BhC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAchC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,qBAAqB;CAqB9B"}