@mcp-consultant-tools/powerplatform 32.0.0 → 33.0.1

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 (45) hide show
  1. package/build/cli/commands/metadata-commands.js +2 -2
  2. package/build/cli/commands/metadata-commands.js.map +1 -1
  3. package/build/cli.js +0 -0
  4. package/build/http-server.js +0 -0
  5. package/build/index.js +0 -0
  6. package/build/tools/metadata-tools.js +2 -2
  7. package/build/tools/metadata-tools.js.map +1 -1
  8. package/build/tools/solution-tools.js +5 -5
  9. package/package.json +3 -3
  10. package/build/auth/index.d.ts +0 -64
  11. package/build/auth/index.d.ts.map +0 -1
  12. package/build/auth/index.js +0 -39
  13. package/build/auth/index.js.map +0 -1
  14. package/build/auth/interactive-auth.d.ts +0 -60
  15. package/build/auth/interactive-auth.d.ts.map +0 -1
  16. package/build/auth/interactive-auth.js +0 -429
  17. package/build/auth/interactive-auth.js.map +0 -1
  18. package/build/auth/service-principal-auth.d.ts +0 -26
  19. package/build/auth/service-principal-auth.d.ts.map +0 -1
  20. package/build/auth/service-principal-auth.js +0 -60
  21. package/build/auth/service-principal-auth.js.map +0 -1
  22. package/build/auth/token-cache.d.ts +0 -40
  23. package/build/auth/token-cache.d.ts.map +0 -1
  24. package/build/auth/token-cache.js +0 -108
  25. package/build/auth/token-cache.js.map +0 -1
  26. package/build/utils/best-practices-formatters.d.ts +0 -26
  27. package/build/utils/best-practices-formatters.d.ts.map +0 -1
  28. package/build/utils/best-practices-formatters.js +0 -238
  29. package/build/utils/best-practices-formatters.js.map +0 -1
  30. package/build/utils/bestPractices.d.ts +0 -152
  31. package/build/utils/bestPractices.d.ts.map +0 -1
  32. package/build/utils/bestPractices.js +0 -338
  33. package/build/utils/bestPractices.js.map +0 -1
  34. package/build/utils/iconManager.d.ts +0 -84
  35. package/build/utils/iconManager.d.ts.map +0 -1
  36. package/build/utils/iconManager.js +0 -342
  37. package/build/utils/iconManager.js.map +0 -1
  38. package/build/utils/prompt-templates.d.ts +0 -9
  39. package/build/utils/prompt-templates.d.ts.map +0 -1
  40. package/build/utils/prompt-templates.js +0 -31
  41. package/build/utils/prompt-templates.js.map +0 -1
  42. package/build/utils/rate-limiter.d.ts +0 -108
  43. package/build/utils/rate-limiter.d.ts.map +0 -1
  44. package/build/utils/rate-limiter.js +0 -241
  45. package/build/utils/rate-limiter.js.map +0 -1
@@ -1,108 +0,0 @@
1
- /**
2
- * Token Cache for Interactive Authentication
3
- *
4
- * Provides encrypted file-based storage for MSAL tokens.
5
- * Tokens are encrypted using AES-256-GCM with a machine-specific key.
6
- *
7
- * Storage location: ~/.mcp-consultant-tools/token-cache-{clientId}.enc
8
- */
9
- import fs from 'node:fs';
10
- import path from 'node:path';
11
- import os from 'node:os';
12
- import crypto from 'node:crypto';
13
- export class TokenCache {
14
- cacheFile;
15
- encryptionKey;
16
- cacheDir;
17
- constructor(clientId) {
18
- this.cacheDir = path.join(os.homedir(), '.mcp-consultant-tools');
19
- // Create cache directory if it doesn't exist
20
- if (!fs.existsSync(this.cacheDir)) {
21
- fs.mkdirSync(this.cacheDir, { recursive: true, mode: 0o700 });
22
- }
23
- this.cacheFile = path.join(this.cacheDir, `token-cache-${clientId}.enc`);
24
- // Derive encryption key from machine-specific data
25
- // Uses hostname + username as salt for key derivation
26
- const machineId = os.hostname() + os.userInfo().username;
27
- this.encryptionKey = crypto.scryptSync(machineId, 'mcp-powerplatform-auth', 32);
28
- }
29
- /**
30
- * Create MSAL cache plugin for automatic token persistence
31
- */
32
- createPlugin() {
33
- return {
34
- beforeCacheAccess: async (context) => {
35
- if (fs.existsSync(this.cacheFile)) {
36
- try {
37
- const encrypted = fs.readFileSync(this.cacheFile);
38
- const decrypted = this.decrypt(encrypted);
39
- context.tokenCache.deserialize(decrypted);
40
- }
41
- catch (error) {
42
- // Cache corrupted or from different machine, ignore
43
- // MSAL will proceed with empty cache
44
- console.error('Token cache read error (will re-authenticate):', error.message);
45
- }
46
- }
47
- },
48
- afterCacheAccess: async (context) => {
49
- if (context.cacheHasChanged) {
50
- try {
51
- const data = context.tokenCache.serialize();
52
- const encrypted = this.encrypt(data);
53
- fs.writeFileSync(this.cacheFile, encrypted, { mode: 0o600 });
54
- }
55
- catch (error) {
56
- console.error('Token cache write error:', error.message);
57
- }
58
- }
59
- },
60
- };
61
- }
62
- /**
63
- * Encrypt data using AES-256-GCM
64
- */
65
- encrypt(data) {
66
- const iv = crypto.randomBytes(16);
67
- const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);
68
- const encrypted = Buffer.concat([cipher.update(data, 'utf8'), cipher.final()]);
69
- const tag = cipher.getAuthTag();
70
- // Format: IV (16 bytes) + Auth Tag (16 bytes) + Encrypted Data
71
- return Buffer.concat([iv, tag, encrypted]);
72
- }
73
- /**
74
- * Decrypt data using AES-256-GCM
75
- */
76
- decrypt(data) {
77
- if (data.length < 33) {
78
- throw new Error('Invalid encrypted data: too short');
79
- }
80
- const iv = data.subarray(0, 16);
81
- const tag = data.subarray(16, 32);
82
- const encrypted = data.subarray(32);
83
- const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);
84
- decipher.setAuthTag(tag);
85
- return decipher.update(encrypted) + decipher.final('utf8');
86
- }
87
- /**
88
- * Clear the token cache (logout)
89
- */
90
- clear() {
91
- if (fs.existsSync(this.cacheFile)) {
92
- fs.unlinkSync(this.cacheFile);
93
- }
94
- }
95
- /**
96
- * Check if a token cache exists
97
- */
98
- exists() {
99
- return fs.existsSync(this.cacheFile);
100
- }
101
- /**
102
- * Get the cache file path (for diagnostics)
103
- */
104
- getCachePath() {
105
- return this.cacheFile;
106
- }
107
- }
108
- //# sourceMappingURL=token-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-cache.js","sourceRoot":"","sources":["../../src/auth/token-cache.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Formatting utilities for best practices validation reports
3
- * Transforms validation results into human-readable markdown reports
4
- */
5
- import type { BestPracticesValidationResult, EntityValidationResult, Violation } from '../PowerPlatformService.js';
6
- /**
7
- * Format complete best practices validation report as markdown
8
- */
9
- export declare function formatBestPracticesReport(result: BestPracticesValidationResult): string;
10
- /**
11
- * Format violations grouped by severity
12
- */
13
- export declare function formatViolationsBySeverity(violations: Violation[]): string;
14
- /**
15
- * Format compliant entities list
16
- */
17
- export declare function formatCompliantEntities(entities: EntityValidationResult[]): string;
18
- /**
19
- * Format execution statistics
20
- */
21
- export declare function formatExecutionStats(result: BestPracticesValidationResult): string;
22
- /**
23
- * Generate quick summary for CLI output
24
- */
25
- export declare function formatQuickSummary(result: BestPracticesValidationResult): string;
26
- //# sourceMappingURL=best-practices-formatters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"best-practices-formatters.d.ts","sourceRoot":"","sources":["../../src/utils/best-practices-formatters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEnH;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CA4KvF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA4B1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAsBlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CA0BlF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CAShF"}
@@ -1,238 +0,0 @@
1
- /**
2
- * Formatting utilities for best practices validation reports
3
- * Transforms validation results into human-readable markdown reports
4
- */
5
- /**
6
- * Format complete best practices validation report as markdown
7
- */
8
- export function formatBestPracticesReport(result) {
9
- const sections = [];
10
- // Header
11
- sections.push('# Dataverse Best Practice Validation Report\n');
12
- if (result.metadata.solutionName) {
13
- sections.push(`**Solution**: ${result.metadata.solutionName} (\`${result.metadata.solutionUniqueName}\`)`);
14
- }
15
- else {
16
- sections.push(`**Entities**: Custom entity validation`);
17
- }
18
- sections.push(`**Generated**: ${new Date(result.metadata.generatedAt).toLocaleString()}`);
19
- sections.push(`**Publisher Prefix**: \`${result.metadata.publisherPrefix}\``);
20
- sections.push(`**Time Filter**: Columns created in last ${result.metadata.recentDays} days`);
21
- sections.push('');
22
- sections.push('---\n');
23
- // Summary
24
- sections.push('## Summary\n');
25
- sections.push('| Metric | Count |');
26
- sections.push('|--------|-------|');
27
- sections.push(`| Entities Checked | ${result.summary.entitiesChecked} |`);
28
- sections.push(`| Attributes Checked | ${result.summary.attributesChecked} |`);
29
- sections.push(`| **Total Violations** | **${result.summary.totalViolations}** |`);
30
- sections.push(`| Critical (MUST) | ${result.summary.criticalViolations} |`);
31
- sections.push(`| Warnings (SHOULD) | ${result.summary.warnings} |`);
32
- sections.push(`| Compliant Entities | ${result.summary.compliantEntities} |`);
33
- sections.push('');
34
- if (result.summary.totalViolations > 0) {
35
- sections.push('**Overall Status**: ⚠️ Issues Found\n');
36
- }
37
- else {
38
- sections.push('**Overall Status**: ✅ All Compliant\n');
39
- }
40
- sections.push('---\n');
41
- // Violations Summary - Complete Lists of Affected Items
42
- if (result.summary.totalViolations > 0) {
43
- sections.push('## 📋 Violations Summary (Complete Lists)\n');
44
- sections.push('_This section provides complete lists of ALL affected tables and columns grouped by violation type._\n');
45
- // Use pre-computed violations summary from the result
46
- for (const ruleSummary of result.violationsSummary) {
47
- const severityIcon = ruleSummary.severity === 'MUST' ? '🔴' : '⚠️';
48
- sections.push(`### ${severityIcon} ${ruleSummary.rule} (${ruleSummary.severity})\n`);
49
- sections.push(`**Affected Items**: ${ruleSummary.totalCount}\n`);
50
- // Show affected tables (entity-level violations)
51
- if (ruleSummary.affectedEntities.length > 0) {
52
- sections.push(`**Affected Tables**:`);
53
- const tableList = ruleSummary.affectedEntities.map(e => `\`${e}\``).join(', ');
54
- sections.push(tableList);
55
- sections.push('');
56
- }
57
- // Show affected columns (column-level violations)
58
- if (ruleSummary.affectedColumns.length > 0) {
59
- sections.push(`**Affected Columns**:`);
60
- const columnList = ruleSummary.affectedColumns.map(c => `\`${c}\``).join(', ');
61
- sections.push(columnList);
62
- sections.push('');
63
- }
64
- // Add recommended action and recommendation
65
- sections.push(`**Recommended Action**: ${ruleSummary.action}`);
66
- if (ruleSummary.recommendation) {
67
- sections.push(`**Why**: ${ruleSummary.recommendation}`);
68
- }
69
- sections.push('');
70
- }
71
- sections.push('---\n');
72
- }
73
- // Critical Violations (MUST Fix)
74
- if (result.summary.criticalViolations > 0) {
75
- sections.push('## 🔴 Critical Violations (MUST Fix)\n');
76
- for (const entity of result.entities) {
77
- const criticalViolations = entity.violations.filter(v => v.severity === 'MUST');
78
- if (criticalViolations.length > 0) {
79
- sections.push(`### Entity: ${entity.displayName} (\`${entity.logicalName}\`)\n`);
80
- for (const violation of criticalViolations) {
81
- if (violation.attributeLogicalName) {
82
- sections.push(`#### Column: ${violation.attributeLogicalName}${violation.createdOn ? ` (Created: ${new Date(violation.createdOn).toLocaleDateString()})` : ''}\n`);
83
- }
84
- else {
85
- sections.push(`#### Entity-Level Issue\n`);
86
- }
87
- sections.push(`- **Rule**: ${violation.rule}`);
88
- sections.push(`- **Issue**: ${violation.message}`);
89
- sections.push(`- **Current**: \`${violation.currentValue}\``);
90
- sections.push(`- **Expected**: \`${violation.expectedValue}\``);
91
- sections.push(`- **Action**: ${violation.action}`);
92
- if (violation.recommendation) {
93
- sections.push(`- **Recommendation**: ${violation.recommendation}`);
94
- }
95
- sections.push('');
96
- }
97
- }
98
- }
99
- sections.push('---\n');
100
- }
101
- // Warnings (SHOULD Fix)
102
- if (result.summary.warnings > 0) {
103
- sections.push('## ⚠️ Warnings (SHOULD Fix)\n');
104
- for (const entity of result.entities) {
105
- const warnings = entity.violations.filter(v => v.severity === 'SHOULD');
106
- if (warnings.length > 0) {
107
- sections.push(`### Entity: ${entity.displayName} (\`${entity.logicalName}\`)\n`);
108
- for (const violation of warnings) {
109
- if (violation.attributeLogicalName) {
110
- sections.push(`#### Column: ${violation.attributeLogicalName}${violation.createdOn ? ` (Created: ${new Date(violation.createdOn).toLocaleDateString()})` : ''}\n`);
111
- }
112
- else {
113
- sections.push(`#### Entity-Level Issue\n`);
114
- }
115
- sections.push(`- **Rule**: ${violation.rule}`);
116
- sections.push(`- **Issue**: ${violation.message}`);
117
- sections.push(`- **Current**: \`${violation.currentValue}\``);
118
- sections.push(`- **Expected**: \`${violation.expectedValue}\``);
119
- sections.push(`- **Recommendation**: ${violation.recommendation || violation.action}`);
120
- sections.push('');
121
- }
122
- }
123
- }
124
- sections.push('---\n');
125
- }
126
- // Compliant Entities
127
- sections.push('## ✅ Compliant Entities\n');
128
- const compliantEntities = result.entities.filter(e => e.isCompliant);
129
- if (compliantEntities.length > 0) {
130
- sections.push('The following entities have no violations:\n');
131
- for (const entity of compliantEntities) {
132
- sections.push(`- **${entity.displayName}** (\`${entity.logicalName}\`) - ${entity.attributesChecked} columns checked${entity.isRefData ? ' (RefData table)' : ''}`);
133
- }
134
- sections.push('');
135
- }
136
- else {
137
- sections.push('No fully compliant entities found.\n');
138
- }
139
- sections.push('---\n');
140
- // Exclusions and Statistics
141
- sections.push('## Exclusions\n');
142
- sections.push(`- System columns excluded: ${result.statistics.systemColumnsExcluded}`);
143
- sections.push(`- Columns older than ${result.metadata.recentDays} days: ${result.statistics.oldColumnsExcluded}`);
144
- sections.push(`- RefData tables (updatedbyprocess check skipped): ${result.statistics.refDataTablesSkipped}`);
145
- sections.push('');
146
- sections.push('---\n');
147
- // Footer
148
- sections.push(`**Execution Time**: ${result.metadata.executionTimeMs}ms`);
149
- return sections.join('\n');
150
- }
151
- /**
152
- * Format violations grouped by severity
153
- */
154
- export function formatViolationsBySeverity(violations) {
155
- const sections = [];
156
- const critical = violations.filter(v => v.severity === 'MUST');
157
- const warnings = violations.filter(v => v.severity === 'SHOULD');
158
- sections.push(`### Violations by Severity\n`);
159
- sections.push(`- **Critical (MUST)**: ${critical.length}`);
160
- sections.push(`- **Warnings (SHOULD)**: ${warnings.length}`);
161
- sections.push(`- **Total**: ${violations.length}\n`);
162
- if (critical.length > 0) {
163
- sections.push('#### Critical Issues\n');
164
- for (const violation of critical) {
165
- sections.push(`- ${violation.rule}: ${violation.message}`);
166
- }
167
- sections.push('');
168
- }
169
- if (warnings.length > 0) {
170
- sections.push('#### Warnings\n');
171
- for (const violation of warnings) {
172
- sections.push(`- ${violation.rule}: ${violation.message}`);
173
- }
174
- sections.push('');
175
- }
176
- return sections.join('\n');
177
- }
178
- /**
179
- * Format compliant entities list
180
- */
181
- export function formatCompliantEntities(entities) {
182
- const sections = [];
183
- const compliant = entities.filter(e => e.isCompliant);
184
- sections.push('### Compliant Entities\n');
185
- if (compliant.length > 0) {
186
- for (const entity of compliant) {
187
- sections.push(`- **${entity.displayName}** (\`${entity.logicalName}\`)`);
188
- sections.push(` - Attributes checked: ${entity.attributesChecked}`);
189
- sections.push(` - Status: ✅ No violations`);
190
- if (entity.isRefData) {
191
- sections.push(` - Type: RefData table`);
192
- }
193
- sections.push('');
194
- }
195
- }
196
- else {
197
- sections.push('No compliant entities found.');
198
- }
199
- return sections.join('\n');
200
- }
201
- /**
202
- * Format execution statistics
203
- */
204
- export function formatExecutionStats(result) {
205
- const sections = [];
206
- sections.push('### Execution Statistics\n');
207
- sections.push('| Metric | Value |');
208
- sections.push('|--------|-------|');
209
- sections.push(`| Execution Time | ${result.metadata.executionTimeMs}ms |`);
210
- sections.push(`| Entities Processed | ${result.summary.entitiesChecked} |`);
211
- sections.push(`| Attributes Analyzed | ${result.summary.attributesChecked} |`);
212
- sections.push(`| System Columns Excluded | ${result.statistics.systemColumnsExcluded} |`);
213
- sections.push(`| Old Columns Excluded | ${result.statistics.oldColumnsExcluded} |`);
214
- sections.push(`| RefData Tables | ${result.statistics.refDataTablesSkipped} |`);
215
- sections.push('');
216
- // Performance metrics
217
- if (result.summary.entitiesChecked > 0) {
218
- const avgTimePerEntity = Math.round(result.metadata.executionTimeMs / result.summary.entitiesChecked);
219
- sections.push(`**Average time per entity**: ${avgTimePerEntity}ms`);
220
- }
221
- if (result.summary.attributesChecked > 0) {
222
- const avgTimePerAttribute = Math.round(result.metadata.executionTimeMs / result.summary.attributesChecked);
223
- sections.push(`**Average time per attribute**: ${avgTimePerAttribute}ms`);
224
- }
225
- return sections.join('\n');
226
- }
227
- /**
228
- * Generate quick summary for CLI output
229
- */
230
- export function formatQuickSummary(result) {
231
- const lines = [];
232
- lines.push(`Validation Complete: ${result.summary.entitiesChecked} entities checked`);
233
- lines.push(`Total Violations: ${result.summary.totalViolations} (${result.summary.criticalViolations} critical, ${result.summary.warnings} warnings)`);
234
- lines.push(`Compliant Entities: ${result.summary.compliantEntities}/${result.summary.entitiesChecked}`);
235
- lines.push(`Execution Time: ${result.metadata.executionTimeMs}ms`);
236
- return lines.join('\n');
237
- }
238
- //# sourceMappingURL=best-practices-formatters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"best-practices-formatters.js","sourceRoot":"","sources":["../../src/utils/best-practices-formatters.ts"],"names":[],"mappings":"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"}
@@ -1,152 +0,0 @@
1
- /**
2
- * Best Practices Validation Module
3
- *
4
- * Hard-coded SmartImpact CRM best practices for entity and attribute customization.
5
- * These rules are enforced during entity and attribute creation/update operations.
6
- */
7
- export interface ValidationResult {
8
- isValid: boolean;
9
- issues: string[];
10
- warnings: string[];
11
- missingColumns?: RequiredColumn[];
12
- }
13
- export interface RequiredColumn {
14
- schemaName: string;
15
- displayName: string;
16
- description: string;
17
- type: string;
18
- maxLength?: number;
19
- format?: string;
20
- behavior?: string;
21
- [key: string]: any;
22
- }
23
- /**
24
- * Hard-coded best practices rules for SmartImpact CRM customizations
25
- */
26
- export declare const BEST_PRACTICES: {
27
- publisher: {
28
- prefix: string;
29
- name: string;
30
- optionValuePrefix: number;
31
- };
32
- entity: {
33
- ownershipType: {
34
- allowed: string[];
35
- forbidden: string[];
36
- default: string;
37
- };
38
- prefix: string;
39
- refDataInfix: string;
40
- caseRule: string;
41
- };
42
- attribute: {
43
- lookupSuffix: string;
44
- caseRule: string;
45
- avoidBooleans: boolean;
46
- dateTimeDefaultBehavior: string;
47
- };
48
- requiredColumns: {
49
- allTables: {
50
- schemaName: string;
51
- displayName: string;
52
- description: string;
53
- type: string;
54
- maxLength: number;
55
- }[];
56
- refDataTables: ({
57
- schemaName: string;
58
- displayName: string;
59
- description: string;
60
- type: string;
61
- format: string;
62
- behavior: string;
63
- maxLength?: undefined;
64
- } | {
65
- schemaName: string;
66
- displayName: string;
67
- description: string;
68
- type: string;
69
- maxLength: number;
70
- format?: undefined;
71
- behavior?: undefined;
72
- })[];
73
- };
74
- form: {
75
- firstColumnMustBeName: boolean;
76
- standardColumnOrder: string[];
77
- colorPalette: {
78
- amber: string;
79
- green: string;
80
- red: string;
81
- grey: string;
82
- };
83
- timelineActivityLimit: number;
84
- };
85
- status: {
86
- preferGlobalOptionSets: boolean;
87
- avoidOOTBStateStatus: boolean;
88
- };
89
- };
90
- /**
91
- * Best Practices Validator Class
92
- */
93
- export declare class BestPracticesValidator {
94
- /**
95
- * Validate entity naming conventions
96
- * Pattern for RefData: prefix + "ref_" + tablename (e.g., sic_ref_cancellationreason)
97
- * Pattern for BAU: prefix + tablename (e.g., sic_application)
98
- */
99
- validateEntityName(schemaName: string, isRefData: boolean): ValidationResult;
100
- /**
101
- * Validate attribute naming conventions
102
- */
103
- validateAttributeName(schemaName: string, isLookup: boolean): ValidationResult;
104
- /**
105
- * Validate entity ownership type
106
- */
107
- validateOwnershipType(ownershipType: string): ValidationResult;
108
- /**
109
- * Check if required columns are present
110
- */
111
- validateRequiredColumns(existingColumns: string[], isRefData: boolean): ValidationResult;
112
- /**
113
- * Validate boolean usage (discouraged)
114
- */
115
- validateBooleanUsage(attributeType: string, schemaName: string): ValidationResult;
116
- /**
117
- * Validate DateTime behavior
118
- */
119
- validateDateTimeBehavior(behavior: string | undefined): ValidationResult;
120
- /**
121
- * Get required columns for entity type
122
- */
123
- getRequiredColumns(isRefData: boolean): RequiredColumn[];
124
- /**
125
- * Validate option set value prefix
126
- */
127
- validateOptionSetValuePrefix(value: number): ValidationResult;
128
- /**
129
- * Generate next option set value with proper prefix
130
- */
131
- getNextOptionSetValue(existingValues: number[]): number;
132
- /**
133
- * Comprehensive entity validation
134
- */
135
- validateEntity(params: {
136
- schemaName: string;
137
- displayName: string;
138
- ownershipType: string;
139
- isRefData: boolean;
140
- existingColumns?: string[];
141
- }): ValidationResult;
142
- /**
143
- * Comprehensive attribute validation
144
- */
145
- validateAttribute(params: {
146
- schemaName: string;
147
- attributeType: string;
148
- dateTimeBehavior?: string;
149
- }): ValidationResult;
150
- }
151
- export declare const bestPracticesValidator: BestPracticesValidator;
152
- //# sourceMappingURL=bestPractices.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bestPractices.d.ts","sourceRoot":"","sources":["../../src/utils/bestPractices.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwF1B,CAAC;AAEF;;GAEG;AACH,qBAAa,sBAAsB;IAEjC;;;;OAIG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,gBAAgB;IA+B5E;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,gBAAgB;IA2B9E;;OAEG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB;IAmB9D;;OAEG;IACH,uBAAuB,CACrB,eAAe,EAAE,MAAM,EAAE,EACzB,SAAS,EAAE,OAAO,GACjB,gBAAgB;IA+BnB;;OAEG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB;IAkBjF;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB;IAmBxE;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,cAAc,EAAE;IAQxD;;OAEG;IACH,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;IAsB7D;;OAEG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM;IAkBvD;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,GAAG,gBAAgB;IA+BpB;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,gBAAgB;CA0BrB;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}