@memberjunction/metadata-sync 2.50.0 → 2.52.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 +423 -2
- package/dist/commands/file-reset/index.d.ts +15 -0
- package/dist/commands/file-reset/index.js +221 -0
- package/dist/commands/file-reset/index.js.map +1 -0
- package/dist/commands/pull/index.d.ts +1 -0
- package/dist/commands/pull/index.js +82 -10
- package/dist/commands/pull/index.js.map +1 -1
- package/dist/commands/push/index.d.ts +21 -0
- package/dist/commands/push/index.js +589 -45
- package/dist/commands/push/index.js.map +1 -1
- package/dist/commands/validate/index.d.ts +15 -0
- package/dist/commands/validate/index.js +149 -0
- package/dist/commands/validate/index.js.map +1 -0
- package/dist/commands/watch/index.js +39 -1
- package/dist/commands/watch/index.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/file-backup-manager.d.ts +90 -0
- package/dist/lib/file-backup-manager.js +186 -0
- package/dist/lib/file-backup-manager.js.map +1 -0
- package/dist/lib/provider-utils.d.ts +2 -2
- package/dist/lib/provider-utils.js +3 -4
- package/dist/lib/provider-utils.js.map +1 -1
- package/dist/lib/sync-engine.js +29 -3
- package/dist/lib/sync-engine.js.map +1 -1
- package/dist/services/FormattingService.d.ts +45 -0
- package/dist/services/FormattingService.js +564 -0
- package/dist/services/FormattingService.js.map +1 -0
- package/dist/services/ValidationService.d.ts +110 -0
- package/dist/services/ValidationService.js +737 -0
- package/dist/services/ValidationService.js.map +1 -0
- package/dist/types/validation.d.ts +98 -0
- package/dist/types/validation.js +97 -0
- package/dist/types/validation.js.map +1 -0
- package/oclif.manifest.json +205 -39
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormattingService.js","sourceRoot":"","sources":["../../src/services/FormattingService.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { ValidationResult, ValidationError, ValidationWarning, FileValidationResult } from '../types/validation';\n\nexport class FormattingService {\n /**\n * Format validation result as JSON\n */\n public formatValidationResultAsJson(result: ValidationResult): string {\n const output = {\n isValid: result.isValid,\n summary: {\n totalFiles: result.summary.totalFiles,\n totalEntities: result.summary.totalEntities,\n totalErrors: result.summary.totalErrors,\n totalWarnings: result.summary.totalWarnings,\n errorsByType: this.getErrorsByType(result.errors),\n warningsByType: this.getWarningsByType(result.warnings)\n },\n errors: result.errors.map(e => ({\n type: e.type,\n entity: e.entity,\n field: e.field,\n file: e.file,\n message: e.message,\n suggestion: e.suggestion\n })),\n warnings: result.warnings.map(w => ({\n type: w.type,\n entity: w.entity,\n field: w.field,\n file: w.file,\n message: w.message,\n suggestion: w.suggestion\n }))\n };\n \n return JSON.stringify(output, null, 2);\n }\n private readonly symbols = {\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n arrow: '→',\n bullet: '•',\n box: {\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n horizontal: '─',\n vertical: '│',\n cross: '┼'\n }\n };\n\n /**\n * Format validation result for terminal output\n */\n public formatValidationResult(result: ValidationResult, verbose: boolean = false): string {\n const lines: string[] = [];\n \n // Header\n lines.push(this.formatHeader('Validation Report'));\n lines.push('');\n\n // Summary box\n lines.push(this.formatSummaryBox(result));\n lines.push('');\n\n // File results\n if (result.summary.fileResults.size > 0) {\n lines.push(this.formatSectionHeader('File Results'));\n lines.push('');\n \n for (const [file, fileResult] of result.summary.fileResults) {\n const hasIssues = fileResult.errors.length > 0 || fileResult.warnings.length > 0;\n if (!verbose && !hasIssues) continue;\n \n lines.push(this.formatFileResult(file, fileResult, verbose));\n }\n }\n\n // Detailed errors\n if (result.errors.length > 0) {\n lines.push('');\n lines.push(this.formatSectionHeader('Errors'));\n lines.push('');\n result.errors.forEach((error, index) => {\n lines.push(this.formatError(error, index + 1));\n });\n }\n\n // Detailed warnings\n if (result.warnings.length > 0) {\n lines.push('');\n lines.push(this.formatSectionHeader('Warnings'));\n lines.push('');\n result.warnings.forEach((warning, index) => {\n lines.push(this.formatWarning(warning, index + 1));\n });\n }\n\n // Footer\n lines.push('');\n lines.push(this.formatFooter(result));\n\n return lines.join('\\n');\n }\n\n /**\n * Format push/pull summary report\n */\n public formatSyncSummary(\n operation: 'push' | 'pull',\n stats: {\n created: number;\n updated: number;\n deleted: number;\n skipped: number;\n errors: number;\n duration: number;\n unchanged?: number;\n }\n ): string {\n const lines: string[] = [];\n \n lines.push(this.formatHeader(`${operation.charAt(0).toUpperCase() + operation.slice(1)} Summary`));\n lines.push('');\n \n const total = stats.created + stats.updated + stats.deleted + stats.skipped + (stats.unchanged || 0);\n \n lines.push(chalk.bold('Operation Statistics:'));\n lines.push('');\n lines.push(` ${chalk.green(this.symbols.success)} Created: ${chalk.green(stats.created)}`);\n lines.push(` ${chalk.blue(this.symbols.info)} Updated: ${chalk.blue(stats.updated)}`);\n if (stats.unchanged !== undefined) {\n lines.push(` ${chalk.gray('-')} Unchanged: ${chalk.gray(stats.unchanged)}`);\n }\n lines.push(` ${chalk.red(this.symbols.error)} Deleted: ${chalk.red(stats.deleted)}`);\n lines.push(` ${chalk.gray('-')} Skipped: ${chalk.gray(stats.skipped)}`);\n lines.push('');\n lines.push(` Total Records: ${chalk.bold(total)}`);\n lines.push(` Duration: ${chalk.cyan(this.formatDuration(stats.duration))}`);\n \n if (stats.errors > 0) {\n lines.push('');\n lines.push(chalk.red(` ${this.symbols.error} Errors: ${stats.errors}`));\n }\n \n return lines.join('\\n');\n }\n\n private formatHeader(title: string): string {\n const width = 60;\n const line = '═'.repeat(width);\n \n // MemberJunction branding\n const brandingText = 'MemberJunction Metadata Sync';\n const brandingPadding = Math.floor((width - brandingText.length - 2) / 2);\n \n // Title\n const titlePadding = Math.floor((width - title.length - 2) / 2);\n \n return chalk.blue([\n line,\n '║' + ' '.repeat(brandingPadding) + brandingText + ' '.repeat(width - brandingPadding - brandingText.length - 2) + '║',\n '║' + ' '.repeat(titlePadding) + title + ' '.repeat(width - titlePadding - title.length - 2) + '║',\n line\n ].join('\\n'));\n }\n\n private formatSectionHeader(title: string): string {\n return chalk.bold.underline(title);\n }\n\n private formatSummaryBox(result: ValidationResult): string {\n const lines: string[] = [];\n const width = 50;\n \n lines.push(chalk.gray('┌' + '─'.repeat(width - 2) + '┐'));\n \n // Basic stats\n const items = [\n ['Files:', result.summary.totalFiles],\n ['Entities:', result.summary.totalEntities],\n ['Errors:', result.summary.totalErrors],\n ['Warnings:', result.summary.totalWarnings]\n ];\n \n items.forEach(([label, value]) => {\n const numValue = Number(value);\n const color = label === 'Errors:' && numValue > 0 ? chalk.red :\n label === 'Warnings:' && numValue > 0 ? chalk.yellow :\n chalk.white;\n const line = `${String(label).padEnd(15)} ${color(String(value))}`;\n lines.push(chalk.gray('│ ') + line.padEnd(width - 4) + chalk.gray(' │'));\n });\n \n // Add separator\n if (result.errors.length > 0 || result.warnings.length > 0) {\n lines.push(chalk.gray('├' + '─'.repeat(width - 2) + '┤'));\n }\n \n // Error breakdown by type\n if (result.errors.length > 0) {\n lines.push(chalk.gray('│ ') + chalk.bold('Errors by Type:').padEnd(width - 4) + chalk.gray(' │'));\n const errorsByType = this.getErrorsByType(result.errors);\n for (const [type, count] of Object.entries(errorsByType)) {\n const typeText = ` ${type}:`;\n const countText = chalk.red(count.toString());\n const spaceBetween = width - 4 - typeText.length - count.toString().length;\n const line = typeText + ' '.repeat(spaceBetween) + countText;\n lines.push(chalk.gray('│ ') + line + chalk.gray(' │'));\n }\n }\n \n // Warning breakdown by type\n if (result.warnings.length > 0) {\n if (result.errors.length > 0) {\n lines.push(chalk.gray('├' + '─'.repeat(width - 2) + '┤'));\n }\n lines.push(chalk.gray('│ ') + chalk.bold('Warnings by Type:').padEnd(width - 4) + chalk.gray(' │'));\n const warningsByType = this.getWarningsByType(result.warnings);\n for (const [type, count] of Object.entries(warningsByType)) {\n const typeText = ` ${type}:`;\n const countText = chalk.yellow(count.toString());\n const spaceBetween = width - 4 - typeText.length - count.toString().length;\n const line = typeText + ' '.repeat(spaceBetween) + countText;\n lines.push(chalk.gray('│ ') + line + chalk.gray(' │'));\n }\n }\n \n lines.push(chalk.gray('└' + '─'.repeat(width - 2) + '┘'));\n \n return lines.join('\\n');\n }\n\n private formatFileResult(file: string, result: FileValidationResult, verbose: boolean): string {\n const lines: string[] = [];\n const hasErrors = result.errors.length > 0;\n const hasWarnings = result.warnings.length > 0;\n \n const icon = hasErrors ? chalk.red(this.symbols.error) :\n hasWarnings ? chalk.yellow(this.symbols.warning) :\n chalk.green(this.symbols.success);\n \n const shortPath = this.shortenPath(file);\n lines.push(`${icon} ${chalk.bold(shortPath)}`);\n \n if (verbose || hasErrors || hasWarnings) {\n lines.push(` ${chalk.gray(`Entities: ${result.entityCount}`)}`);\n \n if (hasErrors) {\n lines.push(` ${chalk.red(`Errors: ${result.errors.length}`)}`);\n }\n \n if (hasWarnings) {\n lines.push(` ${chalk.yellow(`Warnings: ${result.warnings.length}`)}`);\n }\n }\n \n lines.push('');\n return lines.join('\\n');\n }\n\n private formatError(error: ValidationError, index: number): string {\n const lines: string[] = [];\n \n lines.push(chalk.red(`${index}. ${error.message}`));\n \n if (error.entity) {\n lines.push(chalk.gray(` Entity: ${error.entity}`));\n }\n if (error.field) {\n lines.push(chalk.gray(` Field: ${error.field}`));\n }\n lines.push(chalk.gray(` File: ${this.shortenPath(error.file)}`));\n \n if (error.suggestion) {\n lines.push(chalk.cyan(` ${this.symbols.arrow} Suggestion: ${error.suggestion}`));\n }\n \n lines.push('');\n return lines.join('\\n');\n }\n\n private formatWarning(warning: ValidationWarning, index: number): string {\n const lines: string[] = [];\n \n lines.push(chalk.yellow(`${index}. ${warning.message}`));\n \n if (warning.entity) {\n lines.push(chalk.gray(` Entity: ${warning.entity}`));\n }\n if (warning.field) {\n lines.push(chalk.gray(` Field: ${warning.field}`));\n }\n lines.push(chalk.gray(` File: ${this.shortenPath(warning.file)}`));\n \n if (warning.suggestion) {\n lines.push(chalk.cyan(` ${this.symbols.arrow} Suggestion: ${warning.suggestion}`));\n }\n \n lines.push('');\n return lines.join('\\n');\n }\n\n private formatFooter(result: ValidationResult): string {\n const lines: string[] = [];\n \n if (result.isValid) {\n lines.push(chalk.green.bold(`${this.symbols.success} Validation passed!`));\n } else {\n lines.push(chalk.red.bold(`${this.symbols.error} Validation failed with ${result.errors.length} error(s)`));\n }\n \n // Add documentation link if there are any issues\n if (result.errors.length > 0 || result.warnings.length > 0) {\n lines.push('');\n lines.push(chalk.gray('For help resolving issues, see:'));\n lines.push(chalk.cyan('https://github.com/MemberJunction/MJ/tree/next/packages/MetadataSync'));\n }\n \n return lines.join('\\n');\n }\n\n private shortenPath(filePath: string): string {\n const cwd = process.cwd();\n if (filePath.startsWith(cwd)) {\n return '.' + filePath.slice(cwd.length);\n }\n return filePath;\n }\n\n private formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n }\n \n /**\n * Get count of errors by type\n */\n private getErrorsByType(errors: ValidationError[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const error of errors) {\n counts[error.type] = (counts[error.type] || 0) + 1;\n }\n return counts;\n }\n \n /**\n * Get count of warnings by type\n */\n private getWarningsByType(warnings: ValidationWarning[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const warning of warnings) {\n counts[warning.type] = (counts[warning.type] || 0) + 1;\n }\n return counts;\n }\n \n /**\n * Format validation result as markdown\n */\n public formatValidationResultAsMarkdown(result: ValidationResult): string {\n const lines: string[] = [];\n const timestamp = new Date();\n const dateStr = timestamp.toLocaleDateString('en-US', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n const timeStr = timestamp.toLocaleTimeString('en-US', { \n hour: '2-digit', \n minute: '2-digit', \n second: '2-digit' \n });\n \n // Header with branding\n lines.push('# 🚀 MemberJunction Metadata Sync');\n lines.push('## Validation Report');\n lines.push('');\n lines.push(`📅 **Date:** ${dateStr} `);\n lines.push(`🕐 **Time:** ${timeStr} `);\n lines.push(`📍 **Directory:** \\`${process.cwd()}\\` `);\n lines.push('');\n \n // Table of Contents\n lines.push('## 📑 Table of Contents');\n lines.push('');\n lines.push('- [Executive Summary](#executive-summary)');\n lines.push('- [Validation Results](#validation-results)');\n if (result.errors.length > 0 || result.warnings.length > 0) {\n lines.push('- [Issue Analysis](#issue-analysis)');\n }\n lines.push('- [File-by-File Breakdown](#file-by-file-breakdown)');\n if (result.errors.length > 0) {\n lines.push('- [Error Details](#error-details)');\n }\n if (result.warnings.length > 0) {\n lines.push('- [Warning Details](#warning-details)');\n }\n lines.push('- [Next Steps](#next-steps)');\n lines.push('- [Resources](#resources)');\n lines.push('');\n \n // Executive Summary\n lines.push('## 📊 Executive Summary');\n lines.push('');\n \n const statusEmoji = result.isValid ? '✅' : '❌';\n const statusText = result.isValid ? 'PASSED' : 'FAILED';\n const statusColor = result.isValid ? 'green' : 'red';\n \n lines.push(`### Overall Status: ${statusEmoji} **${statusText}**`);\n lines.push('');\n \n if (result.isValid) {\n lines.push('> 🎉 **Congratulations!** Your metadata validation passed with no errors.');\n } else {\n lines.push(`> ⚠️ **Action Required:** ${result.errors.length} error(s) need to be resolved before proceeding.`);\n }\n lines.push('');\n \n // Quick Stats\n lines.push('### 📈 Quick Statistics');\n lines.push('');\n lines.push(`**📁 Files Validated:** ${result.summary.totalFiles} `);\n lines.push(`**📦 Entities Processed:** ${result.summary.totalEntities} `);\n lines.push(`**❌ Errors Found:** ${result.summary.totalErrors} `);\n lines.push(`**⚠️ Warnings Found:** ${result.summary.totalWarnings} `);\n lines.push('');\n \n // Validation Results\n lines.push('## 🔍 Validation Results');\n lines.push('');\n \n // Issue Analysis\n if (result.errors.length > 0 || result.warnings.length > 0) {\n lines.push('## 📊 Issue Analysis');\n lines.push('');\n \n if (result.errors.length > 0) {\n lines.push('### ❌ Error Distribution');\n lines.push('');\n const errorsByType = this.getErrorsByType(result.errors);\n \n lines.push('<details>');\n lines.push('<summary>Click to expand error breakdown</summary>');\n lines.push('');\n \n for (const [type, count] of Object.entries(errorsByType)) {\n const percentage = ((count / result.errors.length) * 100).toFixed(1);\n lines.push(`- **${type}**: ${count} errors (${percentage}%)`);\n }\n lines.push('');\n lines.push('</details>');\n lines.push('');\n }\n \n if (result.warnings.length > 0) {\n lines.push('### ⚠️ Warning Distribution');\n lines.push('');\n const warningsByType = this.getWarningsByType(result.warnings);\n \n lines.push('<details>');\n lines.push('<summary>Click to expand warning breakdown</summary>');\n lines.push('');\n \n for (const [type, count] of Object.entries(warningsByType)) {\n const percentage = ((count / result.warnings.length) * 100).toFixed(1);\n lines.push(`- **${type}**: ${count} warnings (${percentage}%)`);\n }\n lines.push('');\n lines.push('</details>');\n lines.push('');\n }\n }\n \n // File Results\n lines.push('## 📁 File-by-File Breakdown');\n lines.push('');\n \n const sortedFiles = Array.from(result.summary.fileResults.entries())\n .sort(([a], [b]) => {\n // Sort by error count (descending), then warning count, then name\n const aResult = result.summary.fileResults.get(a)!;\n const bResult = result.summary.fileResults.get(b)!;\n \n if (aResult.errors.length !== bResult.errors.length) {\n return bResult.errors.length - aResult.errors.length;\n }\n if (aResult.warnings.length !== bResult.warnings.length) {\n return bResult.warnings.length - aResult.warnings.length;\n }\n return a.localeCompare(b);\n });\n \n for (const [file, fileResult] of sortedFiles) {\n const shortPath = this.shortenPath(file);\n const hasErrors = fileResult.errors.length > 0;\n const hasWarnings = fileResult.warnings.length > 0;\n const icon = hasErrors ? '❌' : hasWarnings ? '⚠️' : '✅';\n const status = hasErrors ? 'Has Errors' : hasWarnings ? 'Has Warnings' : 'Clean';\n \n lines.push(`<details>`);\n lines.push(`<summary>${icon} <strong>${shortPath}</strong> - ${status}</summary>`);\n lines.push('');\n lines.push('#### File Statistics');\n lines.push(`- **Entities:** ${fileResult.entityCount}`);\n lines.push(`- **Errors:** ${fileResult.errors.length}`);\n lines.push(`- **Warnings:** ${fileResult.warnings.length}`);\n \n if (hasErrors) {\n lines.push('');\n lines.push('#### Errors in this file:');\n fileResult.errors.forEach((error, idx) => {\n lines.push(`${idx + 1}. ${error.message}`);\n });\n }\n \n if (hasWarnings) {\n lines.push('');\n lines.push('#### Warnings in this file:');\n fileResult.warnings.forEach((warning, idx) => {\n lines.push(`${idx + 1}. ${warning.message}`);\n });\n }\n \n lines.push('');\n lines.push('</details>');\n lines.push('');\n }\n \n // Detailed Errors\n if (result.errors.length > 0) {\n lines.push('## ❌ Error Details');\n lines.push('');\n lines.push(`> Found ${result.errors.length} error(s) that must be fixed.`);\n lines.push('');\n \n result.errors.forEach((error, index) => {\n lines.push(`### Error ${index + 1}: ${error.message}`);\n lines.push('');\n \n lines.push(`**Type:** \\`${error.type}\\` `);\n if (error.entity) lines.push(`**Entity:** ${error.entity} `);\n if (error.field) lines.push(`**Field:** \\`${error.field}\\` `);\n lines.push(`**File:** \\`${this.shortenPath(error.file)}\\` `);\n lines.push(`**Severity:** ${error.severity} `);\n \n if (error.suggestion) {\n lines.push('');\n lines.push('> 💡 **Suggestion:** ' + error.suggestion);\n }\n \n lines.push('');\n lines.push('---');\n lines.push('');\n });\n }\n \n // Detailed Warnings\n if (result.warnings.length > 0) {\n lines.push('## ⚠️ Warning Details');\n lines.push('');\n lines.push(`> Found ${result.warnings.length} warning(s) for your review.`);\n lines.push('');\n \n // Group warnings by type for better organization\n const warningsByType = new Map<string, ValidationWarning[]>();\n result.warnings.forEach(warning => {\n if (!warningsByType.has(warning.type)) {\n warningsByType.set(warning.type, []);\n }\n warningsByType.get(warning.type)!.push(warning);\n });\n \n for (const [type, warnings] of warningsByType) {\n lines.push(`### Warning Type: \\`${type}\\``);\n lines.push('');\n \n warnings.forEach((warning, index) => {\n lines.push(`#### ${index + 1}. ${warning.message}`);\n lines.push('');\n \n if (warning.entity) lines.push(`**Entity:** ${warning.entity} `);\n if (warning.field) lines.push(`**Field:** \\`${warning.field}\\` `);\n lines.push(`**File:** \\`${this.shortenPath(warning.file)}\\` `);\n \n if (warning.suggestion) {\n lines.push('');\n lines.push('> 💡 **Suggestion:** ' + warning.suggestion);\n }\n \n lines.push('');\n });\n }\n }\n \n // Next Steps\n lines.push('## 🚀 Next Steps');\n lines.push('');\n \n if (result.errors.length > 0) {\n lines.push('### To fix errors:');\n lines.push('');\n lines.push('1. Review each error in the [Error Details](#error-details) section');\n lines.push('2. Follow the suggestions provided for each error');\n lines.push('3. Run validation again after making changes');\n lines.push('4. Repeat until all errors are resolved');\n lines.push('');\n }\n \n if (result.warnings.length > 0) {\n lines.push('### To address warnings:');\n lines.push('');\n lines.push('1. Review warnings in the [Warning Details](#warning-details) section');\n lines.push('2. Determine which warnings are relevant to your use case');\n lines.push('3. Apply suggested fixes where appropriate');\n lines.push('');\n }\n \n if (result.isValid) {\n lines.push('Your metadata is valid and ready to sync! 🎉');\n lines.push('');\n lines.push('```bash');\n lines.push('# Push your metadata to the database');\n lines.push('mj-sync push');\n lines.push('```');\n }\n \n // Resources\n lines.push('');\n lines.push('## 📚 Resources');\n lines.push('');\n lines.push('- 📖 [MetadataSync Documentation](https://github.com/MemberJunction/MJ/tree/next/packages/MetadataSync)');\n lines.push('- 🐛 [Report Issues](https://github.com/MemberJunction/MJ/issues)');\n lines.push('- 💬 [MemberJunction Community](https://memberjunction.org)');\n lines.push('- 📝 [Validation Rules Guide](https://github.com/MemberJunction/MJ/tree/next/packages/MetadataSync#validation-features)');\n lines.push('');\n \n // Footer\n lines.push('---');\n lines.push('');\n lines.push('<div align=\"center\">');\n lines.push('');\n lines.push('**Generated by [MemberJunction](https://memberjunction.org) Metadata Sync**');\n lines.push('');\n lines.push(`<sub>${timestamp.toISOString()}</sub>`);\n lines.push('');\n lines.push('</div>');\n \n return lines.join('\\n');\n }\n}"]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ValidationResult, ValidationOptions } from '../types/validation';
|
|
2
|
+
export declare class ValidationService {
|
|
3
|
+
private metadata;
|
|
4
|
+
private errors;
|
|
5
|
+
private warnings;
|
|
6
|
+
private entityDependencies;
|
|
7
|
+
private processedEntities;
|
|
8
|
+
private options;
|
|
9
|
+
constructor(options?: Partial<ValidationOptions>);
|
|
10
|
+
/**
|
|
11
|
+
* Validates all metadata files in the specified directory
|
|
12
|
+
*/
|
|
13
|
+
validateDirectory(dir: string): Promise<ValidationResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Validates a single entity directory
|
|
16
|
+
*/
|
|
17
|
+
private validateEntityDirectory;
|
|
18
|
+
/**
|
|
19
|
+
* Validates a single metadata file
|
|
20
|
+
*/
|
|
21
|
+
private validateFile;
|
|
22
|
+
/**
|
|
23
|
+
* Validates a single entity data object
|
|
24
|
+
*/
|
|
25
|
+
private validateEntityData;
|
|
26
|
+
/**
|
|
27
|
+
* Validates entity fields
|
|
28
|
+
*/
|
|
29
|
+
private validateFields;
|
|
30
|
+
/**
|
|
31
|
+
* Validates field values and references
|
|
32
|
+
*/
|
|
33
|
+
private validateFieldValue;
|
|
34
|
+
/**
|
|
35
|
+
* Validates special references (@file:, @lookup:, etc.)
|
|
36
|
+
*/
|
|
37
|
+
private validateReference;
|
|
38
|
+
/**
|
|
39
|
+
* Parses a reference string
|
|
40
|
+
*/
|
|
41
|
+
private parseReference;
|
|
42
|
+
/**
|
|
43
|
+
* Validates @file: references
|
|
44
|
+
*/
|
|
45
|
+
private validateFileReference;
|
|
46
|
+
/**
|
|
47
|
+
* Validates @lookup: references
|
|
48
|
+
*/
|
|
49
|
+
private validateLookupReference;
|
|
50
|
+
/**
|
|
51
|
+
* Validates @template: references
|
|
52
|
+
*/
|
|
53
|
+
private validateTemplateReference;
|
|
54
|
+
/**
|
|
55
|
+
* Validates @parent: references
|
|
56
|
+
*/
|
|
57
|
+
private validateParentReference;
|
|
58
|
+
/**
|
|
59
|
+
* Validates @root: references
|
|
60
|
+
*/
|
|
61
|
+
private validateRootReference;
|
|
62
|
+
/**
|
|
63
|
+
* Track entity dependencies
|
|
64
|
+
*/
|
|
65
|
+
private trackEntityDependencies;
|
|
66
|
+
/**
|
|
67
|
+
* Add an entity dependency
|
|
68
|
+
*/
|
|
69
|
+
private addEntityDependency;
|
|
70
|
+
/**
|
|
71
|
+
* Validates dependency order
|
|
72
|
+
*/
|
|
73
|
+
private validateDependencyOrder;
|
|
74
|
+
/**
|
|
75
|
+
* Check for circular dependencies
|
|
76
|
+
*/
|
|
77
|
+
private checkCircularDependency;
|
|
78
|
+
/**
|
|
79
|
+
* Get directories in order based on config
|
|
80
|
+
*/
|
|
81
|
+
private getDirectoriesInOrder;
|
|
82
|
+
/**
|
|
83
|
+
* Get files matching pattern
|
|
84
|
+
*/
|
|
85
|
+
private getMatchingFiles;
|
|
86
|
+
/**
|
|
87
|
+
* Add an error
|
|
88
|
+
*/
|
|
89
|
+
private addError;
|
|
90
|
+
/**
|
|
91
|
+
* Add a warning
|
|
92
|
+
*/
|
|
93
|
+
private addWarning;
|
|
94
|
+
/**
|
|
95
|
+
* Check if current directory order satisfies dependencies
|
|
96
|
+
*/
|
|
97
|
+
private checkDependencyOrder;
|
|
98
|
+
/**
|
|
99
|
+
* Perform topological sort on entity dependencies
|
|
100
|
+
*/
|
|
101
|
+
private topologicalSort;
|
|
102
|
+
/**
|
|
103
|
+
* Reset validation state
|
|
104
|
+
*/
|
|
105
|
+
private reset;
|
|
106
|
+
/**
|
|
107
|
+
* Get validation result
|
|
108
|
+
*/
|
|
109
|
+
private getResult;
|
|
110
|
+
}
|