@memberjunction/metadata-sync 3.4.0 → 4.1.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.
- package/README.md +907 -2200
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -27
- package/dist/config.js.map +1 -1
- package/dist/constants/metadata-keywords.d.ts +1 -0
- package/dist/constants/metadata-keywords.d.ts.map +1 -0
- package/dist/constants/metadata-keywords.js +31 -42
- package/dist/constants/metadata-keywords.js.map +1 -1
- package/dist/index.d.ts +39 -37
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -62
- package/dist/index.js.map +1 -1
- package/dist/lib/EntityPropertyExtractor.d.ts +1 -0
- package/dist/lib/EntityPropertyExtractor.d.ts.map +1 -0
- package/dist/lib/EntityPropertyExtractor.js +1 -5
- package/dist/lib/EntityPropertyExtractor.js.map +1 -1
- package/dist/lib/FieldExternalizer.d.ts +1 -0
- package/dist/lib/FieldExternalizer.d.ts.map +1 -0
- package/dist/lib/FieldExternalizer.js +14 -21
- package/dist/lib/FieldExternalizer.js.map +1 -1
- package/dist/lib/RecordProcessor.d.ts +3 -2
- package/dist/lib/RecordProcessor.d.ts.map +1 -0
- package/dist/lib/RecordProcessor.js +16 -25
- package/dist/lib/RecordProcessor.js.map +1 -1
- package/dist/lib/RelatedEntityHandler.d.ts +3 -2
- package/dist/lib/RelatedEntityHandler.d.ts.map +1 -0
- package/dist/lib/RelatedEntityHandler.js +3 -9
- package/dist/lib/RelatedEntityHandler.js.map +1 -1
- package/dist/lib/config-manager.d.ts +2 -1
- package/dist/lib/config-manager.d.ts.map +1 -0
- package/dist/lib/config-manager.js +10 -15
- package/dist/lib/config-manager.js.map +1 -1
- package/dist/lib/database-reference-scanner.d.ts +3 -2
- package/dist/lib/database-reference-scanner.d.ts.map +1 -0
- package/dist/lib/database-reference-scanner.js +7 -13
- package/dist/lib/database-reference-scanner.js.map +1 -1
- package/dist/lib/deletion-auditor.d.ts +18 -3
- package/dist/lib/deletion-auditor.d.ts.map +1 -0
- package/dist/lib/deletion-auditor.js +111 -20
- package/dist/lib/deletion-auditor.js.map +1 -1
- package/dist/lib/deletion-report-generator.d.ts +2 -1
- package/dist/lib/deletion-report-generator.d.ts.map +1 -0
- package/dist/lib/deletion-report-generator.js +1 -5
- package/dist/lib/deletion-report-generator.js.map +1 -1
- package/dist/lib/entity-foreign-key-helper.d.ts +1 -0
- package/dist/lib/entity-foreign-key-helper.d.ts.map +1 -0
- package/dist/lib/entity-foreign-key-helper.js +1 -5
- package/dist/lib/entity-foreign-key-helper.js.map +1 -1
- package/dist/lib/file-backup-manager.d.ts +1 -0
- package/dist/lib/file-backup-manager.d.ts.map +1 -0
- package/dist/lib/file-backup-manager.js +22 -27
- package/dist/lib/file-backup-manager.js.map +1 -1
- package/dist/lib/file-write-batch.d.ts +2 -1
- package/dist/lib/file-write-batch.d.ts.map +1 -0
- package/dist/lib/file-write-batch.js +16 -21
- package/dist/lib/file-write-batch.js.map +1 -1
- package/dist/lib/json-preprocessor.d.ts +1 -0
- package/dist/lib/json-preprocessor.d.ts.map +1 -0
- package/dist/lib/json-preprocessor.js +21 -26
- package/dist/lib/json-preprocessor.js.map +1 -1
- package/dist/lib/json-write-helper.d.ts +2 -1
- package/dist/lib/json-write-helper.d.ts.map +1 -0
- package/dist/lib/json-write-helper.js +4 -11
- package/dist/lib/json-write-helper.js.map +1 -1
- package/dist/lib/provider-utils.d.ts +2 -1
- package/dist/lib/provider-utils.d.ts.map +1 -0
- package/dist/lib/provider-utils.js +15 -46
- package/dist/lib/provider-utils.js.map +1 -1
- package/dist/lib/record-dependency-analyzer.d.ts +41 -2
- package/dist/lib/record-dependency-analyzer.d.ts.map +1 -0
- package/dist/lib/record-dependency-analyzer.js +108 -40
- package/dist/lib/record-dependency-analyzer.js.map +1 -1
- package/dist/lib/singleton-manager.d.ts +2 -1
- package/dist/lib/singleton-manager.d.ts.map +1 -0
- package/dist/lib/singleton-manager.js +4 -9
- package/dist/lib/singleton-manager.js.map +1 -1
- package/dist/lib/sql-logger.d.ts +2 -1
- package/dist/lib/sql-logger.d.ts.map +1 -0
- package/dist/lib/sql-logger.js +8 -16
- package/dist/lib/sql-logger.js.map +1 -1
- package/dist/lib/sync-engine.d.ts +2 -1
- package/dist/lib/sync-engine.d.ts.map +1 -0
- package/dist/lib/sync-engine.js +58 -76
- package/dist/lib/sync-engine.js.map +1 -1
- package/dist/lib/transaction-manager.d.ts +2 -1
- package/dist/lib/transaction-manager.d.ts.map +1 -0
- package/dist/lib/transaction-manager.js +6 -11
- package/dist/lib/transaction-manager.js.map +1 -1
- package/dist/services/FileResetService.d.ts +1 -0
- package/dist/services/FileResetService.d.ts.map +1 -0
- package/dist/services/FileResetService.js +17 -24
- package/dist/services/FileResetService.js.map +1 -1
- package/dist/services/FormattingService.d.ts +2 -1
- package/dist/services/FormattingService.d.ts.map +1 -0
- package/dist/services/FormattingService.js +68 -73
- package/dist/services/FormattingService.js.map +1 -1
- package/dist/services/InitService.d.ts +1 -0
- package/dist/services/InitService.d.ts.map +1 -0
- package/dist/services/InitService.js +12 -19
- package/dist/services/InitService.js.map +1 -1
- package/dist/services/PullService.d.ts +2 -1
- package/dist/services/PullService.d.ts.map +1 -0
- package/dist/services/PullService.js +49 -60
- package/dist/services/PullService.js.map +1 -1
- package/dist/services/PushService.d.ts +3 -1
- package/dist/services/PushService.d.ts.map +1 -0
- package/dist/services/PushService.js +144 -95
- package/dist/services/PushService.js.map +1 -1
- package/dist/services/StatusService.d.ts +2 -1
- package/dist/services/StatusService.d.ts.map +1 -0
- package/dist/services/StatusService.js +14 -22
- package/dist/services/StatusService.js.map +1 -1
- package/dist/services/ValidationService.d.ts +2 -1
- package/dist/services/ValidationService.d.ts.map +1 -0
- package/dist/services/ValidationService.js +41 -71
- package/dist/services/ValidationService.js.map +1 -1
- package/dist/services/WatchService.d.ts +4 -3
- package/dist/services/WatchService.d.ts.map +1 -0
- package/dist/services/WatchService.js +35 -43
- package/dist/services/WatchService.js.map +1 -1
- package/dist/services/index.d.ts +9 -8
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +8 -19
- package/dist/services/index.js.map +1 -1
- package/dist/types/validation.d.ts +2 -1
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +2 -23
- package/dist/types/validation.js.map +1 -1
- package/package.json +23 -21
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @fileoverview Transaction Manager for atomic database operations
|
|
4
3
|
* @module transaction-manager
|
|
@@ -6,13 +5,10 @@
|
|
|
6
5
|
* This module provides transaction support for push operations to ensure
|
|
7
6
|
* all related entities are saved atomically with rollback capability.
|
|
8
7
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const provider_utils_1 = require("./provider-utils");
|
|
12
|
-
class TransactionManager {
|
|
13
|
-
inTransaction = false;
|
|
14
|
-
sqlLogger;
|
|
8
|
+
import { getDataProvider } from './provider-utils.js';
|
|
9
|
+
export class TransactionManager {
|
|
15
10
|
constructor(sqlLogger) {
|
|
11
|
+
this.inTransaction = false;
|
|
16
12
|
this.sqlLogger = sqlLogger;
|
|
17
13
|
}
|
|
18
14
|
/**
|
|
@@ -22,7 +18,7 @@ class TransactionManager {
|
|
|
22
18
|
if (this.inTransaction) {
|
|
23
19
|
throw new Error('Transaction already in progress');
|
|
24
20
|
}
|
|
25
|
-
const provider =
|
|
21
|
+
const provider = getDataProvider();
|
|
26
22
|
if (!provider) {
|
|
27
23
|
throw new Error('No data provider available');
|
|
28
24
|
}
|
|
@@ -42,7 +38,7 @@ class TransactionManager {
|
|
|
42
38
|
if (!this.inTransaction) {
|
|
43
39
|
return; // No transaction to commit
|
|
44
40
|
}
|
|
45
|
-
const provider =
|
|
41
|
+
const provider = getDataProvider();
|
|
46
42
|
if (!provider) {
|
|
47
43
|
throw new Error('No data provider available');
|
|
48
44
|
}
|
|
@@ -61,7 +57,7 @@ class TransactionManager {
|
|
|
61
57
|
if (!this.inTransaction) {
|
|
62
58
|
return; // No transaction to rollback
|
|
63
59
|
}
|
|
64
|
-
const provider =
|
|
60
|
+
const provider = getDataProvider();
|
|
65
61
|
if (!provider) {
|
|
66
62
|
throw new Error('No data provider available');
|
|
67
63
|
}
|
|
@@ -96,5 +92,4 @@ class TransactionManager {
|
|
|
96
92
|
return this.inTransaction;
|
|
97
93
|
}
|
|
98
94
|
}
|
|
99
|
-
exports.TransactionManager = TransactionManager;
|
|
100
95
|
//# sourceMappingURL=transaction-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-manager.js","sourceRoot":"","sources":["../../src/lib/transaction-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction-manager.js","sourceRoot":"","sources":["../../src/lib/transaction-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileResetService.d.ts","sourceRoot":"","sources":["../../src/services/FileResetService.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAErB,UAAU,CAAC,OAAO,GAAE,gBAAqB,EAAE,SAAS,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuI1G,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,cAAc;CA4BvB"}
|
|
@@ -1,28 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
10
|
-
const config_1 = require("../config");
|
|
11
|
-
const config_manager_1 = require("../lib/config-manager");
|
|
12
|
-
const json_write_helper_1 = require("../lib/json-write-helper");
|
|
13
|
-
class FileResetService {
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fastGlob from 'fast-glob';
|
|
4
|
+
import { loadSyncConfig } from '../config.js';
|
|
5
|
+
import { configManager } from '../lib/config-manager.js';
|
|
6
|
+
import { JsonWriteHelper } from '../lib/json-write-helper.js';
|
|
7
|
+
export class FileResetService {
|
|
14
8
|
async resetFiles(options = {}, callbacks) {
|
|
15
9
|
const sections = options.sections || 'both';
|
|
16
10
|
// Load sync config
|
|
17
|
-
const syncConfig = await
|
|
11
|
+
const syncConfig = await loadSyncConfig(configManager.getOriginalCwd());
|
|
18
12
|
if (!syncConfig) {
|
|
19
13
|
throw new Error('No .mj-sync.json found in current directory');
|
|
20
14
|
}
|
|
21
15
|
// Find all metadata JSON files
|
|
22
16
|
callbacks?.onProgress?.('Finding metadata files');
|
|
23
17
|
const pattern = syncConfig.filePattern || '.*.json';
|
|
24
|
-
const files = await (
|
|
25
|
-
cwd:
|
|
18
|
+
const files = await fastGlob(pattern, {
|
|
19
|
+
cwd: configManager.getOriginalCwd(),
|
|
26
20
|
absolute: true,
|
|
27
21
|
dot: true,
|
|
28
22
|
ignore: ['.mj-sync.json', '.mj-folder.json'],
|
|
@@ -46,7 +40,7 @@ class FileResetService {
|
|
|
46
40
|
let totalPrimaryKeys = 0;
|
|
47
41
|
let totalSyncs = 0;
|
|
48
42
|
for (const file of files) {
|
|
49
|
-
const content = await
|
|
43
|
+
const content = await fs.readJson(file);
|
|
50
44
|
const stats = this.countSections(content);
|
|
51
45
|
if (stats.primaryKeyCount > 0) {
|
|
52
46
|
filesWithPrimaryKey++;
|
|
@@ -68,10 +62,10 @@ class FileResetService {
|
|
|
68
62
|
callbacks?.onLog?.('Dry run mode - no files will be modified');
|
|
69
63
|
if (options.verbose) {
|
|
70
64
|
for (const file of files) {
|
|
71
|
-
const content = await
|
|
65
|
+
const content = await fs.readJson(file);
|
|
72
66
|
const stats = this.countSections(content);
|
|
73
67
|
if (stats.primaryKeyCount > 0 || stats.syncCount > 0) {
|
|
74
|
-
callbacks?.onLog?.(`${
|
|
68
|
+
callbacks?.onLog?.(`${path.relative(configManager.getOriginalCwd(), file)}:`);
|
|
75
69
|
if (stats.primaryKeyCount > 0) {
|
|
76
70
|
callbacks?.onLog?.(` - ${stats.primaryKeyCount} primaryKey section${stats.primaryKeyCount === 1 ? '' : 's'}`);
|
|
77
71
|
}
|
|
@@ -98,7 +92,7 @@ class FileResetService {
|
|
|
98
92
|
let backupsCreated = 0;
|
|
99
93
|
for (const file of files) {
|
|
100
94
|
processedFiles++;
|
|
101
|
-
const content = await
|
|
95
|
+
const content = await fs.readJson(file);
|
|
102
96
|
const originalContent = JSON.stringify(content);
|
|
103
97
|
// Remove sections
|
|
104
98
|
const cleanedContent = this.removeSections(content, sections);
|
|
@@ -107,14 +101,14 @@ class FileResetService {
|
|
|
107
101
|
// Create backup if requested
|
|
108
102
|
if (!options.noBackup) {
|
|
109
103
|
const backupPath = `${file}.backup`;
|
|
110
|
-
await
|
|
104
|
+
await fs.writeJson(backupPath, content, { spaces: 2 });
|
|
111
105
|
backupsCreated++;
|
|
112
106
|
}
|
|
113
107
|
// Write cleaned content
|
|
114
|
-
await
|
|
108
|
+
await JsonWriteHelper.writeOrderedRecordData(file, cleanedContent);
|
|
115
109
|
modifiedFiles++;
|
|
116
110
|
if (options.verbose) {
|
|
117
|
-
callbacks?.onLog?.(`✓ ${
|
|
111
|
+
callbacks?.onLog?.(`✓ ${path.relative(configManager.getOriginalCwd(), file)}`);
|
|
118
112
|
}
|
|
119
113
|
}
|
|
120
114
|
}
|
|
@@ -180,5 +174,4 @@ class FileResetService {
|
|
|
180
174
|
return data;
|
|
181
175
|
}
|
|
182
176
|
}
|
|
183
|
-
exports.FileResetService = FileResetService;
|
|
184
177
|
//# sourceMappingURL=FileResetService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileResetService.js","sourceRoot":"","sources":["../../src/services/FileResetService.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport fastGlob from 'fast-glob';\nimport { loadSyncConfig } from '../config';\nimport { configManager } from '../lib/config-manager';\nimport { JsonWriteHelper } from '../lib/json-write-helper';\n\nexport interface FileResetOptions {\n sections?: 'both' | 'primaryKey' | 'sync';\n dryRun?: boolean;\n noBackup?: boolean;\n verbose?: boolean;\n}\n\nexport interface FileResetCallbacks {\n onProgress?: (message: string) => void;\n onLog?: (message: string) => void;\n onWarn?: (message: string) => void;\n onConfirm?: (message: string) => Promise<boolean>;\n}\n\nexport interface FileResetResult {\n processedFiles: number;\n modifiedFiles: number;\n totalPrimaryKeys: number;\n totalSyncs: number;\n filesWithPrimaryKey: number;\n filesWithSync: number;\n backupsCreated: number;\n}\n\nexport interface FileStats {\n primaryKeyCount: number;\n syncCount: number;\n}\n\nexport class FileResetService {\n \n async resetFiles(options: FileResetOptions = {}, callbacks?: FileResetCallbacks): Promise<FileResetResult> {\n const sections = options.sections || 'both';\n \n // Load sync config\n const syncConfig = await loadSyncConfig(configManager.getOriginalCwd());\n if (!syncConfig) {\n throw new Error('No .mj-sync.json found in current directory');\n }\n \n // Find all metadata JSON files\n callbacks?.onProgress?.('Finding metadata files');\n const pattern = syncConfig.filePattern || '.*.json';\n const files = await fastGlob(pattern, {\n cwd: configManager.getOriginalCwd(),\n absolute: true,\n dot: true,\n ignore: ['.mj-sync.json', '.mj-folder.json'],\n });\n \n if (files.length === 0) {\n callbacks?.onLog?.('No metadata files found');\n return {\n processedFiles: 0,\n modifiedFiles: 0,\n totalPrimaryKeys: 0,\n totalSyncs: 0,\n filesWithPrimaryKey: 0,\n filesWithSync: 0,\n backupsCreated: 0\n };\n }\n \n callbacks?.onLog?.(`Found ${files.length} metadata file${files.length === 1 ? '' : 's'}`);\n \n // Count what will be removed\n let filesWithPrimaryKey = 0;\n let filesWithSync = 0;\n let totalPrimaryKeys = 0;\n let totalSyncs = 0;\n \n for (const file of files) {\n const content = await fs.readJson(file);\n const stats = this.countSections(content);\n if (stats.primaryKeyCount > 0) {\n filesWithPrimaryKey++;\n totalPrimaryKeys += stats.primaryKeyCount;\n }\n if (stats.syncCount > 0) {\n filesWithSync++;\n totalSyncs += stats.syncCount;\n }\n }\n \n // Report what will be removed\n if (sections === 'both' || sections === 'primaryKey') {\n callbacks?.onLog?.(`Will remove ${totalPrimaryKeys} primaryKey section${totalPrimaryKeys === 1 ? '' : 's'} from ${filesWithPrimaryKey} file${filesWithPrimaryKey === 1 ? '' : 's'}`);\n }\n if (sections === 'both' || sections === 'sync') {\n callbacks?.onLog?.(`Will remove ${totalSyncs} sync section${totalSyncs === 1 ? '' : 's'} from ${filesWithSync} file${filesWithSync === 1 ? '' : 's'}`);\n }\n \n if (options.dryRun) {\n callbacks?.onLog?.('Dry run mode - no files will be modified');\n \n if (options.verbose) {\n for (const file of files) {\n const content = await fs.readJson(file);\n const stats = this.countSections(content);\n if (stats.primaryKeyCount > 0 || stats.syncCount > 0) {\n callbacks?.onLog?.(`${path.relative(configManager.getOriginalCwd(), file)}:`);\n if (stats.primaryKeyCount > 0) {\n callbacks?.onLog?.(` - ${stats.primaryKeyCount} primaryKey section${stats.primaryKeyCount === 1 ? '' : 's'}`);\n }\n if (stats.syncCount > 0) {\n callbacks?.onLog?.(` - ${stats.syncCount} sync section${stats.syncCount === 1 ? '' : 's'}`);\n }\n }\n }\n }\n \n return {\n processedFiles: files.length,\n modifiedFiles: 0,\n totalPrimaryKeys,\n totalSyncs,\n filesWithPrimaryKey,\n filesWithSync,\n backupsCreated: 0\n };\n }\n \n // Process files\n callbacks?.onProgress?.('Processing files');\n let processedFiles = 0;\n let modifiedFiles = 0;\n let backupsCreated = 0;\n \n for (const file of files) {\n processedFiles++;\n const content = await fs.readJson(file);\n const originalContent = JSON.stringify(content);\n \n // Remove sections\n const cleanedContent = this.removeSections(content, sections);\n \n // Only write if content changed\n if (JSON.stringify(cleanedContent) !== originalContent) {\n // Create backup if requested\n if (!options.noBackup) {\n const backupPath = `${file}.backup`;\n await fs.writeJson(backupPath, content, { spaces: 2 });\n backupsCreated++;\n }\n \n // Write cleaned content\n await JsonWriteHelper.writeOrderedRecordData(file, cleanedContent);\n modifiedFiles++;\n \n if (options.verbose) {\n callbacks?.onLog?.(`✓ ${path.relative(configManager.getOriginalCwd(), file)}`);\n }\n }\n }\n \n return {\n processedFiles,\n modifiedFiles,\n totalPrimaryKeys,\n totalSyncs,\n filesWithPrimaryKey,\n filesWithSync,\n backupsCreated\n };\n }\n \n private countSections(data: any): FileStats {\n let primaryKeyCount = 0;\n let syncCount = 0;\n \n if (Array.isArray(data)) {\n for (const item of data) {\n const stats = this.countSections(item);\n primaryKeyCount += stats.primaryKeyCount;\n syncCount += stats.syncCount;\n }\n } else if (data && typeof data === 'object') {\n if ('primaryKey' in data) primaryKeyCount++;\n if ('sync' in data) syncCount++;\n \n // Check related entities\n if (data.relatedEntities) {\n for (const entityData of Object.values(data.relatedEntities)) {\n const stats = this.countSections(entityData);\n primaryKeyCount += stats.primaryKeyCount;\n syncCount += stats.syncCount;\n }\n }\n }\n \n return { primaryKeyCount, syncCount };\n }\n \n private removeSections(data: any, sections: string): any {\n if (Array.isArray(data)) {\n return data.map(item => this.removeSections(item, sections));\n } else if (data && typeof data === 'object') {\n const cleaned = { ...data };\n \n // Remove specified sections\n if (sections === 'both' || sections === 'primaryKey') {\n delete cleaned.primaryKey;\n }\n if (sections === 'both' || sections === 'sync') {\n delete cleaned.sync;\n }\n \n // Process related entities\n if (cleaned.relatedEntities) {\n const cleanedRelated: any = {};\n for (const [entityName, entityData] of Object.entries(cleaned.relatedEntities)) {\n cleanedRelated[entityName] = this.removeSections(entityData, sections);\n }\n cleaned.relatedEntities = cleanedRelated;\n }\n \n return cleaned;\n }\n \n return data;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"FileResetService.js","sourceRoot":"","sources":["../../src/services/FileResetService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValidationResult } from '../types/validation';
|
|
1
|
+
import { ValidationResult } from '../types/validation.js';
|
|
2
2
|
export declare class FormattingService {
|
|
3
3
|
/**
|
|
4
4
|
* Format validation result as JSON
|
|
@@ -44,3 +44,4 @@ export declare class FormattingService {
|
|
|
44
44
|
*/
|
|
45
45
|
formatValidationResultAsMarkdown(result: ValidationResult): string;
|
|
46
46
|
}
|
|
47
|
+
//# sourceMappingURL=FormattingService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormattingService.d.ts","sourceRoot":"","sources":["../../src/services/FormattingService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAA4D,MAAM,qBAAqB,CAAC;AAEjH,qBAAa,iBAAiB;IAC1B;;OAEG;IACI,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IA+BrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAgBtB;IAEF;;OAEG;IACI,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,OAAe,GAAG,MAAM;IAmDzF;;OAEG;IACI,iBAAiB,CACpB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,KAAK,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,GACF,MAAM;IAgCT,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,gBAAgB;IA8DxB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACI,gCAAgC,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;CAoS5E"}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export class FormattingService {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.symbols = {
|
|
5
|
+
success: '✓',
|
|
6
|
+
error: '✗',
|
|
7
|
+
warning: '⚠',
|
|
8
|
+
info: 'ℹ',
|
|
9
|
+
arrow: '→',
|
|
10
|
+
bullet: '•',
|
|
11
|
+
box: {
|
|
12
|
+
topLeft: '┌',
|
|
13
|
+
topRight: '┐',
|
|
14
|
+
bottomLeft: '└',
|
|
15
|
+
bottomRight: '┘',
|
|
16
|
+
horizontal: '─',
|
|
17
|
+
vertical: '│',
|
|
18
|
+
cross: '┼'
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
9
22
|
/**
|
|
10
23
|
* Format validation result as JSON
|
|
11
24
|
*/
|
|
@@ -39,23 +52,6 @@ class FormattingService {
|
|
|
39
52
|
};
|
|
40
53
|
return JSON.stringify(output, null, 2);
|
|
41
54
|
}
|
|
42
|
-
symbols = {
|
|
43
|
-
success: '✓',
|
|
44
|
-
error: '✗',
|
|
45
|
-
warning: '⚠',
|
|
46
|
-
info: 'ℹ',
|
|
47
|
-
arrow: '→',
|
|
48
|
-
bullet: '•',
|
|
49
|
-
box: {
|
|
50
|
-
topLeft: '┌',
|
|
51
|
-
topRight: '┐',
|
|
52
|
-
bottomLeft: '└',
|
|
53
|
-
bottomRight: '┘',
|
|
54
|
-
horizontal: '─',
|
|
55
|
-
vertical: '│',
|
|
56
|
-
cross: '┼'
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
55
|
/**
|
|
60
56
|
* Format validation result for terminal output
|
|
61
57
|
*/
|
|
@@ -109,24 +105,24 @@ class FormattingService {
|
|
|
109
105
|
lines.push(this.formatHeader(`${operation.charAt(0).toUpperCase() + operation.slice(1)} Summary`));
|
|
110
106
|
lines.push('');
|
|
111
107
|
const total = stats.created + stats.updated + stats.deleted + stats.skipped + (stats.unchanged || 0);
|
|
112
|
-
lines.push(
|
|
108
|
+
lines.push(chalk.bold('Operation Statistics:'));
|
|
113
109
|
lines.push('');
|
|
114
|
-
lines.push(` ${
|
|
115
|
-
lines.push(` ${
|
|
110
|
+
lines.push(` ${chalk.green(this.symbols.success)} Created: ${chalk.green(stats.created)}`);
|
|
111
|
+
lines.push(` ${chalk.blue(this.symbols.info)} Updated: ${chalk.blue(stats.updated)}`);
|
|
116
112
|
if (stats.unchanged !== undefined) {
|
|
117
|
-
lines.push(` ${
|
|
113
|
+
lines.push(` ${chalk.gray('-')} Unchanged: ${chalk.gray(stats.unchanged)}`);
|
|
118
114
|
}
|
|
119
|
-
lines.push(` ${
|
|
120
|
-
lines.push(` ${
|
|
115
|
+
lines.push(` ${chalk.red(this.symbols.error)} Deleted: ${chalk.red(stats.deleted)}`);
|
|
116
|
+
lines.push(` ${chalk.gray('-')} Skipped: ${chalk.gray(stats.skipped)}`);
|
|
121
117
|
if (stats.deferred !== undefined && stats.deferred > 0) {
|
|
122
|
-
lines.push(` ${
|
|
118
|
+
lines.push(` ${chalk.yellow('⏳')} Deferred: ${chalk.yellow(stats.deferred)}`);
|
|
123
119
|
}
|
|
124
120
|
lines.push('');
|
|
125
|
-
lines.push(` Total Records: ${
|
|
126
|
-
lines.push(` Duration: ${
|
|
121
|
+
lines.push(` Total Records: ${chalk.bold(total)}`);
|
|
122
|
+
lines.push(` Duration: ${chalk.cyan(this.formatDuration(stats.duration))}`);
|
|
127
123
|
if (stats.errors > 0) {
|
|
128
124
|
lines.push('');
|
|
129
|
-
lines.push(
|
|
125
|
+
lines.push(chalk.red(` ${this.symbols.error} Errors: ${stats.errors}`));
|
|
130
126
|
}
|
|
131
127
|
return lines.join('\n');
|
|
132
128
|
}
|
|
@@ -138,7 +134,7 @@ class FormattingService {
|
|
|
138
134
|
const brandingPadding = Math.floor((width - brandingText.length - 2) / 2);
|
|
139
135
|
// Title
|
|
140
136
|
const titlePadding = Math.floor((width - title.length - 2) / 2);
|
|
141
|
-
return
|
|
137
|
+
return chalk.blue([
|
|
142
138
|
line,
|
|
143
139
|
'║' + ' '.repeat(brandingPadding) + brandingText + ' '.repeat(width - brandingPadding - brandingText.length - 2) + '║',
|
|
144
140
|
'║' + ' '.repeat(titlePadding) + title + ' '.repeat(width - titlePadding - title.length - 2) + '║',
|
|
@@ -146,12 +142,12 @@ class FormattingService {
|
|
|
146
142
|
].join('\n'));
|
|
147
143
|
}
|
|
148
144
|
formatSectionHeader(title) {
|
|
149
|
-
return
|
|
145
|
+
return chalk.bold.underline(title);
|
|
150
146
|
}
|
|
151
147
|
formatSummaryBox(result) {
|
|
152
148
|
const lines = [];
|
|
153
149
|
const width = 50;
|
|
154
|
-
lines.push(
|
|
150
|
+
lines.push(chalk.gray('┌' + '─'.repeat(width - 2) + '┐'));
|
|
155
151
|
// Basic stats
|
|
156
152
|
const items = [
|
|
157
153
|
['Files:', result.summary.totalFiles],
|
|
@@ -161,62 +157,62 @@ class FormattingService {
|
|
|
161
157
|
];
|
|
162
158
|
items.forEach(([label, value]) => {
|
|
163
159
|
const numValue = Number(value);
|
|
164
|
-
const color = label === 'Errors:' && numValue > 0 ?
|
|
165
|
-
label === 'Warnings:' && numValue > 0 ?
|
|
166
|
-
|
|
160
|
+
const color = label === 'Errors:' && numValue > 0 ? chalk.red :
|
|
161
|
+
label === 'Warnings:' && numValue > 0 ? chalk.yellow :
|
|
162
|
+
chalk.white;
|
|
167
163
|
const line = `${String(label).padEnd(15)} ${color(String(value))}`;
|
|
168
|
-
lines.push(
|
|
164
|
+
lines.push(chalk.gray('│ ') + line.padEnd(width - 4) + chalk.gray(' │'));
|
|
169
165
|
});
|
|
170
166
|
// Add separator
|
|
171
167
|
if (result.errors.length > 0 || result.warnings.length > 0) {
|
|
172
|
-
lines.push(
|
|
168
|
+
lines.push(chalk.gray('├' + '─'.repeat(width - 2) + '┤'));
|
|
173
169
|
}
|
|
174
170
|
// Error breakdown by type
|
|
175
171
|
if (result.errors.length > 0) {
|
|
176
|
-
lines.push(
|
|
172
|
+
lines.push(chalk.gray('│ ') + chalk.bold('Errors by Type:').padEnd(width - 4) + chalk.gray(' │'));
|
|
177
173
|
const errorsByType = this.getErrorsByType(result.errors);
|
|
178
174
|
for (const [type, count] of Object.entries(errorsByType)) {
|
|
179
175
|
const typeText = ` ${type}:`;
|
|
180
|
-
const countText =
|
|
176
|
+
const countText = chalk.red(count.toString());
|
|
181
177
|
const spaceBetween = width - 4 - typeText.length - count.toString().length;
|
|
182
178
|
const line = typeText + ' '.repeat(spaceBetween) + countText;
|
|
183
|
-
lines.push(
|
|
179
|
+
lines.push(chalk.gray('│ ') + line + chalk.gray(' │'));
|
|
184
180
|
}
|
|
185
181
|
}
|
|
186
182
|
// Warning breakdown by type
|
|
187
183
|
if (result.warnings.length > 0) {
|
|
188
184
|
if (result.errors.length > 0) {
|
|
189
|
-
lines.push(
|
|
185
|
+
lines.push(chalk.gray('├' + '─'.repeat(width - 2) + '┤'));
|
|
190
186
|
}
|
|
191
|
-
lines.push(
|
|
187
|
+
lines.push(chalk.gray('│ ') + chalk.bold('Warnings by Type:').padEnd(width - 4) + chalk.gray(' │'));
|
|
192
188
|
const warningsByType = this.getWarningsByType(result.warnings);
|
|
193
189
|
for (const [type, count] of Object.entries(warningsByType)) {
|
|
194
190
|
const typeText = ` ${type}:`;
|
|
195
|
-
const countText =
|
|
191
|
+
const countText = chalk.yellow(count.toString());
|
|
196
192
|
const spaceBetween = width - 4 - typeText.length - count.toString().length;
|
|
197
193
|
const line = typeText + ' '.repeat(spaceBetween) + countText;
|
|
198
|
-
lines.push(
|
|
194
|
+
lines.push(chalk.gray('│ ') + line + chalk.gray(' │'));
|
|
199
195
|
}
|
|
200
196
|
}
|
|
201
|
-
lines.push(
|
|
197
|
+
lines.push(chalk.gray('└' + '─'.repeat(width - 2) + '┘'));
|
|
202
198
|
return lines.join('\n');
|
|
203
199
|
}
|
|
204
200
|
formatFileResult(file, result, verbose) {
|
|
205
201
|
const lines = [];
|
|
206
202
|
const hasErrors = result.errors.length > 0;
|
|
207
203
|
const hasWarnings = result.warnings.length > 0;
|
|
208
|
-
const icon = hasErrors ?
|
|
209
|
-
hasWarnings ?
|
|
210
|
-
|
|
204
|
+
const icon = hasErrors ? chalk.red(this.symbols.error) :
|
|
205
|
+
hasWarnings ? chalk.yellow(this.symbols.warning) :
|
|
206
|
+
chalk.green(this.symbols.success);
|
|
211
207
|
const shortPath = this.shortenPath(file);
|
|
212
|
-
lines.push(`${icon} ${
|
|
208
|
+
lines.push(`${icon} ${chalk.bold(shortPath)}`);
|
|
213
209
|
if (verbose || hasErrors || hasWarnings) {
|
|
214
|
-
lines.push(` ${
|
|
210
|
+
lines.push(` ${chalk.gray(`Entities: ${result.entityCount}`)}`);
|
|
215
211
|
if (hasErrors) {
|
|
216
|
-
lines.push(` ${
|
|
212
|
+
lines.push(` ${chalk.red(`Errors: ${result.errors.length}`)}`);
|
|
217
213
|
}
|
|
218
214
|
if (hasWarnings) {
|
|
219
|
-
lines.push(` ${
|
|
215
|
+
lines.push(` ${chalk.yellow(`Warnings: ${result.warnings.length}`)}`);
|
|
220
216
|
}
|
|
221
217
|
}
|
|
222
218
|
lines.push('');
|
|
@@ -224,32 +220,32 @@ class FormattingService {
|
|
|
224
220
|
}
|
|
225
221
|
formatError(error, index) {
|
|
226
222
|
const lines = [];
|
|
227
|
-
lines.push(
|
|
223
|
+
lines.push(chalk.red(`${index}. ${error.message}`));
|
|
228
224
|
if (error.entity) {
|
|
229
|
-
lines.push(
|
|
225
|
+
lines.push(chalk.gray(` Entity: ${error.entity}`));
|
|
230
226
|
}
|
|
231
227
|
if (error.field) {
|
|
232
|
-
lines.push(
|
|
228
|
+
lines.push(chalk.gray(` Field: ${error.field}`));
|
|
233
229
|
}
|
|
234
|
-
lines.push(
|
|
230
|
+
lines.push(chalk.gray(` File: ${this.shortenPath(error.file)}`));
|
|
235
231
|
if (error.suggestion) {
|
|
236
|
-
lines.push(
|
|
232
|
+
lines.push(chalk.cyan(` ${this.symbols.arrow} Suggestion: ${error.suggestion}`));
|
|
237
233
|
}
|
|
238
234
|
lines.push('');
|
|
239
235
|
return lines.join('\n');
|
|
240
236
|
}
|
|
241
237
|
formatWarning(warning, index) {
|
|
242
238
|
const lines = [];
|
|
243
|
-
lines.push(
|
|
239
|
+
lines.push(chalk.yellow(`${index}. ${warning.message}`));
|
|
244
240
|
if (warning.entity) {
|
|
245
|
-
lines.push(
|
|
241
|
+
lines.push(chalk.gray(` Entity: ${warning.entity}`));
|
|
246
242
|
}
|
|
247
243
|
if (warning.field) {
|
|
248
|
-
lines.push(
|
|
244
|
+
lines.push(chalk.gray(` Field: ${warning.field}`));
|
|
249
245
|
}
|
|
250
|
-
lines.push(
|
|
246
|
+
lines.push(chalk.gray(` File: ${this.shortenPath(warning.file)}`));
|
|
251
247
|
if (warning.suggestion) {
|
|
252
|
-
lines.push(
|
|
248
|
+
lines.push(chalk.cyan(` ${this.symbols.arrow} Suggestion: ${warning.suggestion}`));
|
|
253
249
|
}
|
|
254
250
|
lines.push('');
|
|
255
251
|
return lines.join('\n');
|
|
@@ -257,16 +253,16 @@ class FormattingService {
|
|
|
257
253
|
formatFooter(result) {
|
|
258
254
|
const lines = [];
|
|
259
255
|
if (result.isValid) {
|
|
260
|
-
lines.push(
|
|
256
|
+
lines.push(chalk.green.bold(`${this.symbols.success} Validation passed!`));
|
|
261
257
|
}
|
|
262
258
|
else {
|
|
263
|
-
lines.push(
|
|
259
|
+
lines.push(chalk.red.bold(`${this.symbols.error} Validation failed with ${result.errors.length} error(s)`));
|
|
264
260
|
}
|
|
265
261
|
// Add documentation link if there are any issues
|
|
266
262
|
if (result.errors.length > 0 || result.warnings.length > 0) {
|
|
267
263
|
lines.push('');
|
|
268
|
-
lines.push(
|
|
269
|
-
lines.push(
|
|
264
|
+
lines.push(chalk.gray('For help resolving issues, see:'));
|
|
265
|
+
lines.push(chalk.cyan('https://github.com/MemberJunction/MJ/tree/next/packages/MetadataSync'));
|
|
270
266
|
}
|
|
271
267
|
return lines.join('\n');
|
|
272
268
|
}
|
|
@@ -563,5 +559,4 @@ class FormattingService {
|
|
|
563
559
|
return lines.join('\n');
|
|
564
560
|
}
|
|
565
561
|
}
|
|
566
|
-
exports.FormattingService = FormattingService;
|
|
567
562
|
//# sourceMappingURL=FormattingService.js.map
|