@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,35 +1,27 @@
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.PushService = void 0;
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const path_1 = __importDefault(require("path"));
9
- const fast_glob_1 = __importDefault(require("fast-glob"));
10
- const core_1 = require("@memberjunction/core");
11
- const sync_engine_1 = require("../lib/sync-engine");
12
- const config_1 = require("../config");
13
- const file_backup_manager_1 = require("../lib/file-backup-manager");
14
- const config_manager_1 = require("../lib/config-manager");
15
- const sql_logger_1 = require("../lib/sql-logger");
16
- const transaction_manager_1 = require("../lib/transaction-manager");
17
- const json_write_helper_1 = require("../lib/json-write-helper");
18
- const record_dependency_analyzer_1 = require("../lib/record-dependency-analyzer");
19
- const json_preprocessor_1 = require("../lib/json-preprocessor");
20
- const provider_utils_1 = require("../lib/provider-utils");
21
- const deletion_auditor_1 = require("../lib/deletion-auditor");
22
- const deletion_report_generator_1 = require("../lib/deletion-report-generator");
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import fastGlob from 'fast-glob';
4
+ import { Metadata } from '@memberjunction/core';
5
+ import { DeferrableLookupError } from '../lib/sync-engine.js';
6
+ import { loadEntityConfig, loadSyncConfig } from '../config.js';
7
+ import { FileBackupManager } from '../lib/file-backup-manager.js';
8
+ import { configManager } from '../lib/config-manager.js';
9
+ import { SQLLogger } from '../lib/sql-logger.js';
10
+ import { TransactionManager } from '../lib/transaction-manager.js';
11
+ import { JsonWriteHelper } from '../lib/json-write-helper.js';
12
+ import { RecordDependencyAnalyzer } from '../lib/record-dependency-analyzer.js';
13
+ import { JsonPreprocessor } from '../lib/json-preprocessor.js';
14
+ import { findEntityDirectories } from '../lib/provider-utils.js';
15
+ import { DeletionAuditor } from '../lib/deletion-auditor.js';
16
+ import { DeletionReportGenerator } from '../lib/deletion-report-generator.js';
23
17
  // Configuration for parallel processing
24
18
  const PARALLEL_BATCH_SIZE = 1; // Number of records to process in parallel at each dependency level
25
- class PushService {
26
- syncEngine;
27
- contextUser;
28
- warnings = [];
29
- syncConfig = null;
30
- deferredFileWrites = new Map();
31
- deferredRecords = [];
19
+ export class PushService {
32
20
  constructor(syncEngine, contextUser) {
21
+ this.warnings = [];
22
+ this.syncConfig = null;
23
+ this.deferredFileWrites = new Map();
24
+ this.deferredRecords = [];
33
25
  this.syncEngine = syncEngine;
34
26
  this.contextUser = contextUser;
35
27
  }
@@ -56,11 +48,11 @@ class PushService {
56
48
  // Reset deferred tracking for this push operation
57
49
  this.deferredFileWrites.clear();
58
50
  this.deferredRecords = [];
59
- const fileBackupManager = new file_backup_manager_1.FileBackupManager();
51
+ const fileBackupManager = new FileBackupManager();
60
52
  // Load sync config for SQL logging settings and autoCreateMissingRecords flag
61
53
  // If dir option is specified, load from that directory, otherwise use original CWD
62
- const configDir = options.dir ? path_1.default.resolve(config_manager_1.configManager.getOriginalCwd(), options.dir) : config_manager_1.configManager.getOriginalCwd();
63
- this.syncConfig = await (0, config_1.loadSyncConfig)(configDir);
54
+ const configDir = options.dir ? path.resolve(configManager.getOriginalCwd(), options.dir) : configManager.getOriginalCwd();
55
+ this.syncConfig = await loadSyncConfig(configDir);
64
56
  // Display warnings for special flags that are enabled
65
57
  if (this.syncConfig?.push?.alwaysPush && !options.dryRun) {
66
58
  callbacks?.onWarn?.('\n⚡ WARNING: alwaysPush is enabled - ALL records will be saved to database regardless of changes\n');
@@ -69,14 +61,14 @@ class PushService {
69
61
  callbacks?.onWarn?.('\n🔧 WARNING: autoCreateMissingRecords is enabled - Missing records with primaryKey will be created\n');
70
62
  }
71
63
  if (options.verbose) {
72
- callbacks?.onLog?.(`Original working directory: ${config_manager_1.configManager.getOriginalCwd()}`);
64
+ callbacks?.onLog?.(`Original working directory: ${configManager.getOriginalCwd()}`);
73
65
  callbacks?.onLog?.(`Config directory (with dir option): ${configDir}`);
74
- callbacks?.onLog?.(`Config file path: ${path_1.default.join(configDir, '.mj-sync.json')}`);
66
+ callbacks?.onLog?.(`Config file path: ${path.join(configDir, '.mj-sync.json')}`);
75
67
  callbacks?.onLog?.(`Full sync config loaded: ${JSON.stringify(this.syncConfig, null, 2)}`);
76
68
  callbacks?.onLog?.(`SQL logging config: ${JSON.stringify(this.syncConfig?.sqlLogging)}`);
77
69
  }
78
- const sqlLogger = new sql_logger_1.SQLLogger(this.syncConfig);
79
- const transactionManager = new transaction_manager_1.TransactionManager(sqlLogger);
70
+ const sqlLogger = new SQLLogger(this.syncConfig);
71
+ const transactionManager = new TransactionManager(sqlLogger);
80
72
  if (options.verbose) {
81
73
  callbacks?.onLog?.(`SQLLogger enabled status: ${sqlLogger.enabled}`);
82
74
  }
@@ -85,7 +77,7 @@ class PushService {
85
77
  try {
86
78
  // Initialize SQL logger if enabled and not dry-run
87
79
  if (sqlLogger.enabled && !options.dryRun) {
88
- const provider = core_1.Metadata.Provider;
80
+ const provider = Metadata.Provider;
89
81
  if (options.verbose) {
90
82
  callbacks?.onLog?.(`SQL logging enabled: ${sqlLogger.enabled}`);
91
83
  callbacks?.onLog?.(`Provider type: ${provider?.constructor?.name || 'Unknown'}`);
@@ -98,10 +90,10 @@ class PushService {
98
90
  ? `MetadataSync_Push_${timestamp}.sql`
99
91
  : `push_${timestamp}.sql`;
100
92
  // Use .sql-log-push directory in the config directory (where sync was initiated)
101
- const outputDir = path_1.default.join(configDir, this.syncConfig?.sqlLogging?.outputDirectory || './sql-log-push');
102
- const filepath = path_1.default.join(outputDir, filename);
93
+ const outputDir = path.join(configDir, this.syncConfig?.sqlLogging?.outputDirectory || './sql-log-push');
94
+ const filepath = path.join(outputDir, filename);
103
95
  // Ensure the directory exists
104
- await fs_extra_1.default.ensureDir(path_1.default.dirname(filepath));
96
+ await fs.ensureDir(path.dirname(filepath));
105
97
  // Create the SQL logging session
106
98
  sqlLoggingSession = await provider.CreateSqlLogger(filepath, {
107
99
  formatAsMigration: this.syncConfig?.sqlLogging?.formatAsMigration || false,
@@ -125,7 +117,7 @@ class PushService {
125
117
  // Find entity directories to process
126
118
  // Note: If options.dir is specified, configDir already points to that directory
127
119
  // So we don't need to pass it as specificDir
128
- const entityDirs = (0, provider_utils_1.findEntityDirectories)(configDir, undefined, this.syncConfig?.directoryOrder, this.syncConfig?.ignoreDirectories, options.include, options.exclude);
120
+ const entityDirs = findEntityDirectories(configDir, undefined, this.syncConfig?.directoryOrder, this.syncConfig?.ignoreDirectories, options.include, options.exclude);
129
121
  if (entityDirs.length === 0) {
130
122
  throw new Error('No entity directories found');
131
123
  }
@@ -167,8 +159,8 @@ class PushService {
167
159
  try {
168
160
  await sqlLoggingSession.dispose();
169
161
  // Delete the empty SQL log file since no operations occurred
170
- if (await fs_extra_1.default.pathExists(sqlLogPath)) {
171
- await fs_extra_1.default.remove(sqlLogPath);
162
+ if (await fs.pathExists(sqlLogPath)) {
163
+ await fs.remove(sqlLogPath);
172
164
  if (options.verbose) {
173
165
  callbacks?.onLog?.(`🗑️ Removed empty SQL log file: ${sqlLogPath}`);
174
166
  }
@@ -198,7 +190,7 @@ class PushService {
198
190
  // PHASE 1: Process creates/updates for all entities
199
191
  callbacks?.onLog?.('📝 Processing creates and updates...\n');
200
192
  for (const entityDir of entityDirs) {
201
- const entityConfig = await (0, config_1.loadEntityConfig)(entityDir);
193
+ const entityConfig = await loadEntityConfig(entityDir);
202
194
  if (!entityConfig) {
203
195
  const warning = `Skipping ${entityDir} - no valid entity configuration`;
204
196
  this.warnings.push(warning);
@@ -207,7 +199,7 @@ class PushService {
207
199
  continue;
208
200
  }
209
201
  // Show folder with spinner at start
210
- const dirName = path_1.default.relative(process.cwd(), entityDir) || '.';
202
+ const dirName = path.relative(process.cwd(), entityDir) || '.';
211
203
  callbacks?.onLog?.(`\n📁 ${dirName}:`);
212
204
  // Use onProgress for animated spinner if available
213
205
  if (callbacks?.onProgress) {
@@ -350,7 +342,7 @@ class PushService {
350
342
  let errors = 0;
351
343
  // Find all JSON files in the directory
352
344
  const pattern = entityConfig.filePattern || '*.json';
353
- const files = await (0, fast_glob_1.default)(pattern, {
345
+ const files = await fastGlob(pattern, {
354
346
  cwd: entityDir,
355
347
  absolute: true,
356
348
  onlyFiles: true,
@@ -368,7 +360,7 @@ class PushService {
368
360
  await fileBackupManager.backupFile(filePath);
369
361
  }
370
362
  // Read the raw file data first
371
- const rawFileData = await fs_extra_1.default.readJson(filePath);
363
+ const rawFileData = await fs.readJson(filePath);
372
364
  // Keep unprocessed data to write back (preserves @file: references)
373
365
  const unprocessedRecords = Array.isArray(rawFileData) ? rawFileData : [rawFileData];
374
366
  const isArray = Array.isArray(rawFileData);
@@ -379,12 +371,12 @@ class PushService {
379
371
  if (hasIncludes) {
380
372
  // Preprocess the JSON file to handle @include directives
381
373
  // Create a new preprocessor instance for each file to ensure clean state
382
- const jsonPreprocessor = new json_preprocessor_1.JsonPreprocessor();
374
+ const jsonPreprocessor = new JsonPreprocessor();
383
375
  fileData = await jsonPreprocessor.processFile(filePath);
384
376
  }
385
377
  const records = Array.isArray(fileData) ? fileData : [fileData];
386
378
  // Analyze dependencies and get sorted records
387
- const analyzer = new record_dependency_analyzer_1.RecordDependencyAnalyzer();
379
+ const analyzer = new RecordDependencyAnalyzer();
388
380
  const analysisResult = await analyzer.analyzeFileRecords(records, entityConfig.entity);
389
381
  if (analysisResult.circularDependencies.length > 0) {
390
382
  callbacks?.onWarn?.(`⚠️ Circular dependencies detected in ${filePath}`);
@@ -521,10 +513,10 @@ class PushService {
521
513
  else {
522
514
  // Write immediately for files without deletions
523
515
  if (isArray) {
524
- await json_write_helper_1.JsonWriteHelper.writeOrderedRecordData(filePath, unprocessedRecords);
516
+ await JsonWriteHelper.writeOrderedRecordData(filePath, unprocessedRecords);
525
517
  }
526
518
  else {
527
- await json_write_helper_1.JsonWriteHelper.writeOrderedRecordData(filePath, unprocessedRecords[0]);
519
+ await JsonWriteHelper.writeOrderedRecordData(filePath, unprocessedRecords[0]);
528
520
  }
529
521
  }
530
522
  }
@@ -537,7 +529,7 @@ class PushService {
537
529
  return { created, updated, unchanged, deleted, skipped, deferred, errors };
538
530
  }
539
531
  async processFlattenedRecord(flattenedRecord, entityDir, options, batchContext, callbacks, entityConfig, allowDefer = true) {
540
- const metadata = new core_1.Metadata();
532
+ const metadata = new Metadata();
541
533
  const { record, entityName, parentContext, id: recordId } = flattenedRecord;
542
534
  // Skip deletion records - they're handled in Phase 2
543
535
  // File writing is deferred for files containing deletions
@@ -584,7 +576,7 @@ class PushService {
584
576
  }
585
577
  catch (pkError) {
586
578
  // Check if this is a deferrable lookup error
587
- if (pkError instanceof sync_engine_1.DeferrableLookupError) {
579
+ if (pkError instanceof DeferrableLookupError) {
588
580
  throw new Error(`Cannot defer lookup in primaryKey field '${pkField}': ${pkError.message}. Primary key lookups must resolve immediately.`);
589
581
  }
590
582
  throw pkError;
@@ -660,7 +652,7 @@ class PushService {
660
652
  }
661
653
  catch (fieldError) {
662
654
  // Check if this is a deferrable lookup error first
663
- if (fieldError instanceof sync_engine_1.DeferrableLookupError) {
655
+ if (fieldError instanceof DeferrableLookupError) {
664
656
  // If allowDefer is false, we're in deferred processing mode - can't defer again
665
657
  if (!allowDefer) {
666
658
  const err = fieldError;
@@ -1156,12 +1148,12 @@ class PushService {
1156
1148
  for (const entityDir of entityDirs) {
1157
1149
  if (hasAnyDeletions)
1158
1150
  break; // Early exit once we find any deletion
1159
- const entityConfig = await (0, config_1.loadEntityConfig)(entityDir);
1151
+ const entityConfig = await loadEntityConfig(entityDir);
1160
1152
  if (!entityConfig) {
1161
1153
  continue;
1162
1154
  }
1163
1155
  const pattern = entityConfig.filePattern || '*.json';
1164
- const files = await (0, fast_glob_1.default)(pattern, {
1156
+ const files = await fastGlob(pattern, {
1165
1157
  cwd: entityDir,
1166
1158
  absolute: true,
1167
1159
  onlyFiles: true,
@@ -1171,7 +1163,7 @@ class PushService {
1171
1163
  // Quick scan for delete directives without full processing
1172
1164
  for (const filePath of files) {
1173
1165
  try {
1174
- const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
1166
+ const content = await fs.readFile(filePath, 'utf-8');
1175
1167
  // Fast string check for delete directives
1176
1168
  if (content.includes('"delete"') && content.includes('true')) {
1177
1169
  // More precise check - parse JSON to confirm
@@ -1200,15 +1192,15 @@ class PushService {
1200
1192
  callbacks?.onLog?.('\n🔍 Analyzing deletion operations...\n');
1201
1193
  // Load all records from all entity directories
1202
1194
  const allRecords = [];
1203
- const analyzer = new record_dependency_analyzer_1.RecordDependencyAnalyzer();
1195
+ const analyzer = new RecordDependencyAnalyzer();
1204
1196
  for (const entityDir of entityDirs) {
1205
- const entityConfig = await (0, config_1.loadEntityConfig)(entityDir);
1197
+ const entityConfig = await loadEntityConfig(entityDir);
1206
1198
  if (!entityConfig) {
1207
1199
  continue;
1208
1200
  }
1209
1201
  // Find all JSON files
1210
1202
  const pattern = entityConfig.filePattern || '*.json';
1211
- const files = await (0, fast_glob_1.default)(pattern, {
1203
+ const files = await fastGlob(pattern, {
1212
1204
  cwd: entityDir,
1213
1205
  absolute: true,
1214
1206
  onlyFiles: true,
@@ -1218,13 +1210,13 @@ class PushService {
1218
1210
  // Load and flatten records from each file
1219
1211
  for (const filePath of files) {
1220
1212
  try {
1221
- const rawFileData = await fs_extra_1.default.readJson(filePath);
1213
+ const rawFileData = await fs.readJson(filePath);
1222
1214
  // Handle @include directives if present
1223
1215
  let fileData = rawFileData;
1224
1216
  const jsonString = JSON.stringify(rawFileData);
1225
1217
  const hasIncludes = jsonString.includes('"@include"') || jsonString.includes('"@include.');
1226
1218
  if (hasIncludes) {
1227
- const jsonPreprocessor = new json_preprocessor_1.JsonPreprocessor();
1219
+ const jsonPreprocessor = new JsonPreprocessor();
1228
1220
  fileData = await jsonPreprocessor.processFile(filePath);
1229
1221
  }
1230
1222
  const records = Array.isArray(fileData) ? fileData : [fileData];
@@ -1240,8 +1232,8 @@ class PushService {
1240
1232
  }
1241
1233
  }
1242
1234
  // Perform comprehensive deletion audit
1243
- const md = new core_1.Metadata();
1244
- const auditor = new deletion_auditor_1.DeletionAuditor(md, this.contextUser);
1235
+ const md = new Metadata();
1236
+ const auditor = new DeletionAuditor(md, this.contextUser);
1245
1237
  const audit = await auditor.auditDeletions(allRecords);
1246
1238
  // Check if any records actually need deletion
1247
1239
  const totalMarkedForDeletion = audit.explicitDeletes.size + audit.implicitDeletes.size;
@@ -1255,7 +1247,7 @@ class PushService {
1255
1247
  return null; // Signal that no deletion audit is needed
1256
1248
  }
1257
1249
  // Generate and display report (only if records need deletion)
1258
- const report = deletion_report_generator_1.DeletionReportGenerator.generateReport(audit, options.verbose);
1250
+ const report = DeletionReportGenerator.generateReport(audit, options.verbose);
1259
1251
  callbacks?.onLog?.(report);
1260
1252
  callbacks?.onLog?.('');
1261
1253
  // Check for blocking issues (only circular dependencies block execution)
@@ -1419,10 +1411,10 @@ class PushService {
1419
1411
  for (const deferredWrite of this.deferredFileWrites.values()) {
1420
1412
  try {
1421
1413
  if (deferredWrite.isArray) {
1422
- await json_write_helper_1.JsonWriteHelper.writeOrderedRecordData(deferredWrite.filePath, deferredWrite.records);
1414
+ await JsonWriteHelper.writeOrderedRecordData(deferredWrite.filePath, deferredWrite.records);
1423
1415
  }
1424
1416
  else {
1425
- await json_write_helper_1.JsonWriteHelper.writeOrderedRecordData(deferredWrite.filePath, deferredWrite.records[0]);
1417
+ await JsonWriteHelper.writeOrderedRecordData(deferredWrite.filePath, deferredWrite.records[0]);
1426
1418
  }
1427
1419
  }
1428
1420
  catch (error) {
@@ -1517,5 +1509,4 @@ class PushService {
1517
1509
  return keyParts.join('|');
1518
1510
  }
1519
1511
  }
1520
- exports.PushService = PushService;
1521
1512
  //# sourceMappingURL=PushService.js.map