code-auditor-mcp 1.20.0 → 2.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 (180) hide show
  1. package/dist/adapters/GoAdapter.d.ts +53 -0
  2. package/dist/adapters/GoAdapter.d.ts.map +1 -0
  3. package/dist/adapters/GoAdapter.js +602 -0
  4. package/dist/adapters/GoAdapter.js.map +1 -0
  5. package/dist/adapters/GoConfig.d.ts +35 -0
  6. package/dist/adapters/GoConfig.d.ts.map +1 -0
  7. package/dist/adapters/GoConfig.js +155 -0
  8. package/dist/adapters/GoConfig.js.map +1 -0
  9. package/dist/adapters/LanguageAdapter.d.ts +135 -0
  10. package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
  11. package/dist/adapters/LanguageAdapter.js +47 -0
  12. package/dist/adapters/LanguageAdapter.js.map +1 -0
  13. package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
  14. package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
  15. package/dist/adapters/TypeScriptAdapter.js +386 -0
  16. package/dist/adapters/TypeScriptAdapter.js.map +1 -0
  17. package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
  18. package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
  19. package/dist/adapters/UniversalAnalyzer.js +103 -0
  20. package/dist/adapters/UniversalAnalyzer.js.map +1 -0
  21. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
  22. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  23. package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
  24. package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
  25. package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
  26. package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
  27. package/dist/adapters/solidAnalyzerCompat.js +78 -0
  28. package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
  29. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
  30. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
  31. package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
  32. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
  33. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
  34. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
  35. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
  36. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
  37. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
  38. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
  39. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
  40. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
  41. package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
  42. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
  43. package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
  44. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
  45. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
  46. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
  47. package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
  48. package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
  49. package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
  50. package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
  51. package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
  52. package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
  53. package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
  54. package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
  55. package/dist/analyzers/dryAnalyzerCompat.js +44 -0
  56. package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
  57. package/dist/analyzers/schemaAnalyzer.d.ts +21 -0
  58. package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -0
  59. package/dist/analyzers/schemaAnalyzer.js +405 -0
  60. package/dist/analyzers/schemaAnalyzer.js.map +1 -0
  61. package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
  62. package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
  63. package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
  64. package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
  65. package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
  66. package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
  67. package/dist/analyzers/solidAnalyzerCompat.js +78 -0
  68. package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
  69. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
  70. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
  71. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
  72. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
  73. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
  74. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
  75. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
  76. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
  77. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
  78. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
  79. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
  80. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
  81. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
  82. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  83. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
  84. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
  85. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
  86. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
  87. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
  88. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
  89. package/dist/auditRunner.d.ts.map +1 -1
  90. package/dist/auditRunner.js +23 -7
  91. package/dist/auditRunner.js.map +1 -1
  92. package/dist/codeIndexDB-enhanced.d.ts +80 -0
  93. package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
  94. package/dist/codeIndexDB-enhanced.js +488 -0
  95. package/dist/codeIndexDB-enhanced.js.map +1 -0
  96. package/dist/codeIndexDb.d.ts +70 -1
  97. package/dist/codeIndexDb.d.ts.map +1 -1
  98. package/dist/codeIndexDb.js +199 -2
  99. package/dist/codeIndexDb.js.map +1 -1
  100. package/dist/config/defaults.js +1 -1
  101. package/dist/config/defaults.js.map +1 -1
  102. package/dist/languages/LanguageOrchestrator.d.ts +181 -0
  103. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
  104. package/dist/languages/LanguageOrchestrator.js +365 -0
  105. package/dist/languages/LanguageOrchestrator.js.map +1 -0
  106. package/dist/languages/LanguageRegistry.d.ts +43 -0
  107. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  108. package/dist/languages/LanguageRegistry.js +86 -0
  109. package/dist/languages/LanguageRegistry.js.map +1 -0
  110. package/dist/languages/RuntimeManager.d.ts +181 -0
  111. package/dist/languages/RuntimeManager.d.ts.map +1 -0
  112. package/dist/languages/RuntimeManager.js +841 -0
  113. package/dist/languages/RuntimeManager.js.map +1 -0
  114. package/dist/languages/UniversalAnalyzer.d.ts +37 -0
  115. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
  116. package/dist/languages/UniversalAnalyzer.js +101 -0
  117. package/dist/languages/UniversalAnalyzer.js.map +1 -0
  118. package/dist/languages/go/GoAdapter.d.ts +57 -0
  119. package/dist/languages/go/GoAdapter.d.ts.map +1 -0
  120. package/dist/languages/go/GoAdapter.js +360 -0
  121. package/dist/languages/go/GoAdapter.js.map +1 -0
  122. package/dist/languages/index.d.ts +13 -0
  123. package/dist/languages/index.d.ts.map +1 -0
  124. package/dist/languages/index.js +23 -0
  125. package/dist/languages/index.js.map +1 -0
  126. package/dist/languages/types.d.ts +182 -0
  127. package/dist/languages/types.d.ts.map +1 -0
  128. package/dist/languages/types.js +5 -0
  129. package/dist/languages/types.js.map +1 -0
  130. package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
  131. package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
  132. package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
  133. package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
  134. package/dist/languages/typescript/test-extraction.d.ts +2 -0
  135. package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
  136. package/dist/languages/typescript/test-extraction.js +36 -0
  137. package/dist/languages/typescript/test-extraction.js.map +1 -0
  138. package/dist/mcp-hybrid.d.ts +10 -0
  139. package/dist/mcp-hybrid.d.ts.map +1 -0
  140. package/dist/mcp-hybrid.js +41 -0
  141. package/dist/mcp-hybrid.js.map +1 -0
  142. package/dist/mcp-index.d.ts +11 -0
  143. package/dist/mcp-index.d.ts.map +1 -0
  144. package/dist/mcp-index.js +101 -0
  145. package/dist/mcp-index.js.map +1 -0
  146. package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
  147. package/dist/mcp-tools/workflowGuide.js +67 -10
  148. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  149. package/dist/mcp-tools-shared.d.ts +49 -0
  150. package/dist/mcp-tools-shared.d.ts.map +1 -0
  151. package/dist/mcp-tools-shared.js +1282 -0
  152. package/dist/mcp-tools-shared.js.map +1 -0
  153. package/dist/mcp-ui-server.d.ts +27 -0
  154. package/dist/mcp-ui-server.d.ts.map +1 -0
  155. package/dist/mcp-ui-server.js +484 -0
  156. package/dist/mcp-ui-server.js.map +1 -0
  157. package/dist/mcp-ui-simple.d.ts +27 -0
  158. package/dist/mcp-ui-simple.d.ts.map +1 -0
  159. package/dist/mcp-ui-simple.js +425 -0
  160. package/dist/mcp-ui-simple.js.map +1 -0
  161. package/dist/mcp.js +7 -4
  162. package/dist/mcp.js.map +1 -1
  163. package/dist/services/SchemaParser.d.ts +89 -0
  164. package/dist/services/SchemaParser.d.ts.map +1 -0
  165. package/dist/services/SchemaParser.js +434 -0
  166. package/dist/services/SchemaParser.js.map +1 -0
  167. package/dist/types/crossLanguage.d.ts +267 -0
  168. package/dist/types/crossLanguage.d.ts.map +1 -0
  169. package/dist/types/crossLanguage.js +6 -0
  170. package/dist/types/crossLanguage.js.map +1 -0
  171. package/dist/types.d.ts +128 -0
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/types.js.map +1 -1
  174. package/dist/utils/fileDiscovery.d.ts +6 -0
  175. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  176. package/dist/utils/fileDiscovery.js +12 -1
  177. package/dist/utils/fileDiscovery.js.map +1 -1
  178. package/examples/schema-example.json +364 -0
  179. package/examples/schema-example.yaml +137 -0
  180. package/package.json +10 -3
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Cross-Language Schema Validator
3
+ * Validates schema consistency across language boundaries
4
+ */
5
+ import { CrossLanguageEntity } from '../../types/crossLanguage.js';
6
+ import { Violation } from '../../types.js';
7
+ export interface SchemaDefinition {
8
+ id: string;
9
+ name: string;
10
+ type: 'protobuf' | 'graphql' | 'json-schema' | 'openapi' | 'typescript-interface' | 'go-struct';
11
+ language: string;
12
+ file: string;
13
+ line: number;
14
+ fields: SchemaField[];
15
+ version?: string;
16
+ deprecated?: boolean;
17
+ }
18
+ export interface SchemaField {
19
+ name: string;
20
+ type: string;
21
+ required: boolean;
22
+ description?: string;
23
+ constraints?: FieldConstraints;
24
+ deprecated?: boolean;
25
+ }
26
+ export interface FieldConstraints {
27
+ minLength?: number;
28
+ maxLength?: number;
29
+ pattern?: string;
30
+ minimum?: number;
31
+ maximum?: number;
32
+ enum?: string[];
33
+ }
34
+ export interface SchemaViolation extends Violation {
35
+ violationType: 'field-mismatch' | 'type-mismatch' | 'missing-field' | 'extra-field' | 'constraint-mismatch' | 'version-mismatch';
36
+ schemas: SchemaDefinition[];
37
+ fieldName?: string;
38
+ expectedType?: string;
39
+ actualType?: string;
40
+ suggestion: string;
41
+ }
42
+ export interface SchemaValidationOptions {
43
+ strictTypeChecking?: boolean;
44
+ allowAdditionalFields?: boolean;
45
+ checkDeprecated?: boolean;
46
+ versionTolerance?: 'strict' | 'minor' | 'major';
47
+ ignoreOptionalFields?: boolean;
48
+ }
49
+ export declare class SchemaValidator {
50
+ private options;
51
+ constructor(options?: SchemaValidationOptions);
52
+ /**
53
+ * Validate schema consistency across multiple languages
54
+ */
55
+ validateSchemas(schemas: SchemaDefinition[]): Promise<SchemaViolation[]>;
56
+ /**
57
+ * Extract schema definitions from entities
58
+ */
59
+ static extractSchemas(entities: CrossLanguageEntity[]): SchemaDefinition[];
60
+ /**
61
+ * Validate a group of schemas that should be equivalent
62
+ */
63
+ private validateSchemaGroup;
64
+ /**
65
+ * Compare two schemas for compatibility
66
+ */
67
+ private compareSchemas;
68
+ /**
69
+ * Validate individual schema for internal consistency
70
+ */
71
+ private validateIndividualSchema;
72
+ /**
73
+ * Check version compatibility between schemas
74
+ */
75
+ private checkVersionCompatibility;
76
+ /**
77
+ * Compare field types between schemas
78
+ */
79
+ private compareFieldTypes;
80
+ /**
81
+ * Compare field constraints
82
+ */
83
+ private compareFieldConstraints;
84
+ /**
85
+ * Check field naming consistency
86
+ */
87
+ private checkFieldNaming;
88
+ /**
89
+ * Group schemas by name
90
+ */
91
+ private groupSchemasByName;
92
+ /**
93
+ * Normalize schema name for comparison
94
+ */
95
+ private normalizeSchemaName;
96
+ /**
97
+ * Normalize type names across languages
98
+ */
99
+ private normalizeType;
100
+ /**
101
+ * Check if types are compatible across languages
102
+ */
103
+ private areTypesCompatible;
104
+ /**
105
+ * Parse version string
106
+ */
107
+ private parseVersion;
108
+ /**
109
+ * Check if versions are compatible
110
+ */
111
+ private areVersionsCompatible;
112
+ /**
113
+ * Check if field name follows language conventions
114
+ */
115
+ private isConsistentNaming;
116
+ /**
117
+ * Get recommended naming convention
118
+ */
119
+ private getRecommendedNaming;
120
+ private static extractTypeScriptInterface;
121
+ private static extractGoStruct;
122
+ private static extractProtobufMessage;
123
+ private static extractGraphQLType;
124
+ private static extractJSONSchema;
125
+ }
126
+ //# sourceMappingURL=SchemaValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaValidator.d.ts","sourceRoot":"","sources":["../../../src/analyzers/cross-language/SchemaValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,522 @@
1
+ /**
2
+ * Cross-Language Schema Validator
3
+ * Validates schema consistency across language boundaries
4
+ */
5
+ export class SchemaValidator {
6
+ options;
7
+ constructor(options = {}) {
8
+ this.options = {
9
+ strictTypeChecking: true,
10
+ allowAdditionalFields: false,
11
+ checkDeprecated: true,
12
+ versionTolerance: 'minor',
13
+ ignoreOptionalFields: false,
14
+ ...options
15
+ };
16
+ }
17
+ /**
18
+ * Validate schema consistency across multiple languages
19
+ */
20
+ async validateSchemas(schemas) {
21
+ console.log(`[SchemaValidator] Validating ${schemas.length} schemas`);
22
+ const violations = [];
23
+ // Group schemas by name (different language implementations of same schema)
24
+ const schemaGroups = this.groupSchemasByName(schemas);
25
+ for (const [schemaName, groupSchemas] of schemaGroups) {
26
+ if (groupSchemas.length > 1) {
27
+ console.log(`[SchemaValidator] Validating ${groupSchemas.length} implementations of ${schemaName}`);
28
+ violations.push(...await this.validateSchemaGroup(schemaName, groupSchemas));
29
+ }
30
+ }
31
+ // Validate individual schema consistency
32
+ for (const schema of schemas) {
33
+ violations.push(...await this.validateIndividualSchema(schema));
34
+ }
35
+ console.log(`[SchemaValidator] Found ${violations.length} schema violations`);
36
+ return violations;
37
+ }
38
+ /**
39
+ * Extract schema definitions from entities
40
+ */
41
+ static extractSchemas(entities) {
42
+ const schemas = [];
43
+ for (const entity of entities) {
44
+ // TypeScript interfaces
45
+ if (entity.language === 'typescript' && entity.type === 'interface') {
46
+ const schema = this.extractTypeScriptInterface(entity);
47
+ if (schema)
48
+ schemas.push(schema);
49
+ }
50
+ // Go structs
51
+ if (entity.language === 'go' && entity.type === 'struct') {
52
+ const schema = this.extractGoStruct(entity);
53
+ if (schema)
54
+ schemas.push(schema);
55
+ }
56
+ // Protocol buffer definitions
57
+ if (entity.file.endsWith('.proto')) {
58
+ const schema = this.extractProtobufMessage(entity);
59
+ if (schema)
60
+ schemas.push(schema);
61
+ }
62
+ // GraphQL types
63
+ if (entity.file.endsWith('.graphql') || entity.file.endsWith('.gql')) {
64
+ const schema = this.extractGraphQLType(entity);
65
+ if (schema)
66
+ schemas.push(schema);
67
+ }
68
+ // JSON Schema
69
+ if (entity.file.endsWith('.json') && entity.name.toLowerCase().includes('schema')) {
70
+ const schema = this.extractJSONSchema(entity);
71
+ if (schema)
72
+ schemas.push(schema);
73
+ }
74
+ }
75
+ return schemas;
76
+ }
77
+ /**
78
+ * Validate a group of schemas that should be equivalent
79
+ */
80
+ async validateSchemaGroup(schemaName, schemas) {
81
+ const violations = [];
82
+ // Use the first schema as the reference
83
+ const reference = schemas[0];
84
+ for (let i = 1; i < schemas.length; i++) {
85
+ const current = schemas[i];
86
+ violations.push(...await this.compareSchemas(reference, current));
87
+ }
88
+ return violations;
89
+ }
90
+ /**
91
+ * Compare two schemas for compatibility
92
+ */
93
+ async compareSchemas(reference, current) {
94
+ const violations = [];
95
+ // Check version compatibility
96
+ if (reference.version && current.version) {
97
+ const versionViolation = this.checkVersionCompatibility(reference, current);
98
+ if (versionViolation)
99
+ violations.push(versionViolation);
100
+ }
101
+ // Create field maps for easier comparison
102
+ const refFields = new Map(reference.fields.map(f => [f.name, f]));
103
+ const curFields = new Map(current.fields.map(f => [f.name, f]));
104
+ // Check for missing required fields
105
+ for (const [fieldName, refField] of refFields) {
106
+ if (refField.required && !curFields.has(fieldName)) {
107
+ violations.push({
108
+ file: current.file,
109
+ line: current.line,
110
+ severity: 'critical',
111
+ message: `Missing required field '${fieldName}' in ${current.type} ${current.name}`,
112
+ violationType: 'missing-field',
113
+ schemas: [reference, current],
114
+ fieldName,
115
+ suggestion: `Add field '${fieldName}: ${refField.type}' to ${current.name}`,
116
+ analyzer: 'schema-validator',
117
+ category: 'cross-language-schema'
118
+ });
119
+ }
120
+ }
121
+ // Check for extra fields (if not allowed)
122
+ if (!this.options.allowAdditionalFields) {
123
+ for (const [fieldName, curField] of curFields) {
124
+ if (!refFields.has(fieldName)) {
125
+ violations.push({
126
+ file: current.file,
127
+ line: current.line,
128
+ severity: 'warning',
129
+ message: `Extra field '${fieldName}' in ${current.type} ${current.name}`,
130
+ violationType: 'extra-field',
131
+ schemas: [reference, current],
132
+ fieldName,
133
+ suggestion: `Remove field '${fieldName}' or add it to the reference schema`,
134
+ analyzer: 'schema-validator',
135
+ category: 'cross-language-schema'
136
+ });
137
+ }
138
+ }
139
+ }
140
+ // Check field type compatibility
141
+ for (const [fieldName, refField] of refFields) {
142
+ const curField = curFields.get(fieldName);
143
+ if (curField) {
144
+ const typeViolation = this.compareFieldTypes(fieldName, refField, curField, reference, current);
145
+ if (typeViolation)
146
+ violations.push(typeViolation);
147
+ const constraintViolations = this.compareFieldConstraints(fieldName, refField, curField, reference, current);
148
+ violations.push(...constraintViolations);
149
+ }
150
+ }
151
+ return violations;
152
+ }
153
+ /**
154
+ * Validate individual schema for internal consistency
155
+ */
156
+ async validateIndividualSchema(schema) {
157
+ const violations = [];
158
+ // Check for deprecated field usage
159
+ if (this.options.checkDeprecated) {
160
+ const deprecatedFields = schema.fields.filter(f => f.deprecated);
161
+ if (deprecatedFields.length > 0) {
162
+ violations.push({
163
+ file: schema.file,
164
+ line: schema.line,
165
+ severity: 'warning',
166
+ message: `Schema ${schema.name} contains ${deprecatedFields.length} deprecated fields`,
167
+ violationType: 'field-mismatch',
168
+ schemas: [schema],
169
+ suggestion: 'Review and migrate away from deprecated fields',
170
+ analyzer: 'schema-validator',
171
+ category: 'cross-language-schema'
172
+ });
173
+ }
174
+ }
175
+ // Check for naming consistency
176
+ const namingViolations = this.checkFieldNaming(schema);
177
+ violations.push(...namingViolations);
178
+ return violations;
179
+ }
180
+ /**
181
+ * Check version compatibility between schemas
182
+ */
183
+ checkVersionCompatibility(reference, current) {
184
+ if (!reference.version || !current.version)
185
+ return null;
186
+ const refVersion = this.parseVersion(reference.version);
187
+ const curVersion = this.parseVersion(current.version);
188
+ const compatible = this.areVersionsCompatible(refVersion, curVersion);
189
+ if (!compatible) {
190
+ return {
191
+ file: current.file,
192
+ line: current.line,
193
+ severity: 'warning',
194
+ message: `Version mismatch: ${reference.name} v${reference.version} vs v${current.version}`,
195
+ violationType: 'version-mismatch',
196
+ schemas: [reference, current],
197
+ suggestion: 'Ensure schemas are using compatible versions',
198
+ analyzer: 'schema-validator',
199
+ category: 'cross-language-schema'
200
+ };
201
+ }
202
+ return null;
203
+ }
204
+ /**
205
+ * Compare field types between schemas
206
+ */
207
+ compareFieldTypes(fieldName, refField, curField, refSchema, curSchema) {
208
+ const normalizedRefType = this.normalizeType(refField.type, refSchema.language);
209
+ const normalizedCurType = this.normalizeType(curField.type, curSchema.language);
210
+ if (this.options.strictTypeChecking) {
211
+ if (normalizedRefType !== normalizedCurType) {
212
+ return {
213
+ file: curSchema.file,
214
+ line: curSchema.line,
215
+ severity: 'critical',
216
+ message: `Type mismatch for field '${fieldName}': expected ${normalizedRefType}, got ${normalizedCurType}`,
217
+ violationType: 'type-mismatch',
218
+ schemas: [refSchema, curSchema],
219
+ fieldName,
220
+ expectedType: normalizedRefType,
221
+ actualType: normalizedCurType,
222
+ suggestion: `Change field type to ${normalizedRefType} or update the reference schema`,
223
+ analyzer: 'schema-validator',
224
+ category: 'cross-language-schema'
225
+ };
226
+ }
227
+ }
228
+ else {
229
+ // Loose type checking - check for compatibility
230
+ if (!this.areTypesCompatible(normalizedRefType, normalizedCurType)) {
231
+ return {
232
+ file: curSchema.file,
233
+ line: curSchema.line,
234
+ severity: 'warning',
235
+ message: `Potentially incompatible types for field '${fieldName}': ${normalizedRefType} vs ${normalizedCurType}`,
236
+ violationType: 'type-mismatch',
237
+ schemas: [refSchema, curSchema],
238
+ fieldName,
239
+ expectedType: normalizedRefType,
240
+ actualType: normalizedCurType,
241
+ suggestion: 'Verify type compatibility across language boundaries',
242
+ analyzer: 'schema-validator',
243
+ category: 'cross-language-schema'
244
+ };
245
+ }
246
+ }
247
+ return null;
248
+ }
249
+ /**
250
+ * Compare field constraints
251
+ */
252
+ compareFieldConstraints(fieldName, refField, curField, refSchema, curSchema) {
253
+ const violations = [];
254
+ if (!refField.constraints || !curField.constraints)
255
+ return violations;
256
+ const refConstraints = refField.constraints;
257
+ const curConstraints = curField.constraints;
258
+ // Check length constraints
259
+ if (refConstraints.minLength !== curConstraints.minLength ||
260
+ refConstraints.maxLength !== curConstraints.maxLength) {
261
+ violations.push({
262
+ file: curSchema.file,
263
+ line: curSchema.line,
264
+ severity: 'warning',
265
+ message: `Length constraint mismatch for field '${fieldName}'`,
266
+ violationType: 'constraint-mismatch',
267
+ schemas: [refSchema, curSchema],
268
+ fieldName,
269
+ suggestion: 'Align length constraints across schema implementations',
270
+ analyzer: 'schema-validator',
271
+ category: 'cross-language-schema'
272
+ });
273
+ }
274
+ // Check numeric constraints
275
+ if (refConstraints.minimum !== curConstraints.minimum ||
276
+ refConstraints.maximum !== curConstraints.maximum) {
277
+ violations.push({
278
+ file: curSchema.file,
279
+ line: curSchema.line,
280
+ severity: 'warning',
281
+ message: `Numeric constraint mismatch for field '${fieldName}'`,
282
+ violationType: 'constraint-mismatch',
283
+ schemas: [refSchema, curSchema],
284
+ fieldName,
285
+ suggestion: 'Align numeric constraints across schema implementations',
286
+ analyzer: 'schema-validator',
287
+ category: 'cross-language-schema'
288
+ });
289
+ }
290
+ return violations;
291
+ }
292
+ /**
293
+ * Check field naming consistency
294
+ */
295
+ checkFieldNaming(schema) {
296
+ const violations = [];
297
+ for (const field of schema.fields) {
298
+ // Check for consistent naming convention
299
+ if (!this.isConsistentNaming(field.name, schema.language)) {
300
+ violations.push({
301
+ file: schema.file,
302
+ line: schema.line,
303
+ severity: 'suggestion',
304
+ message: `Field '${field.name}' doesn't follow ${schema.language} naming conventions`,
305
+ violationType: 'field-mismatch',
306
+ schemas: [schema],
307
+ fieldName: field.name,
308
+ suggestion: `Use ${this.getRecommendedNaming(field.name, schema.language)} naming convention`,
309
+ analyzer: 'schema-validator',
310
+ category: 'cross-language-schema'
311
+ });
312
+ }
313
+ }
314
+ return violations;
315
+ }
316
+ /**
317
+ * Group schemas by name
318
+ */
319
+ groupSchemasByName(schemas) {
320
+ const groups = new Map();
321
+ for (const schema of schemas) {
322
+ const normalizedName = this.normalizeSchemaName(schema.name);
323
+ if (!groups.has(normalizedName)) {
324
+ groups.set(normalizedName, []);
325
+ }
326
+ groups.get(normalizedName).push(schema);
327
+ }
328
+ return groups;
329
+ }
330
+ /**
331
+ * Normalize schema name for comparison
332
+ */
333
+ normalizeSchemaName(name) {
334
+ return name.toLowerCase()
335
+ .replace(/[-_]/g, '')
336
+ .replace(/request|response|dto|model/g, '');
337
+ }
338
+ /**
339
+ * Normalize type names across languages
340
+ */
341
+ normalizeType(type, language) {
342
+ const typeMap = {
343
+ 'typescript': {
344
+ 'string': 'string',
345
+ 'number': 'number',
346
+ 'boolean': 'boolean',
347
+ 'Date': 'datetime',
348
+ 'any': 'any'
349
+ },
350
+ 'go': {
351
+ 'string': 'string',
352
+ 'int': 'number',
353
+ 'int32': 'number',
354
+ 'int64': 'number',
355
+ 'float32': 'number',
356
+ 'float64': 'number',
357
+ 'bool': 'boolean',
358
+ 'time.Time': 'datetime'
359
+ },
360
+ 'python': {
361
+ 'str': 'string',
362
+ 'int': 'number',
363
+ 'float': 'number',
364
+ 'bool': 'boolean',
365
+ 'datetime': 'datetime'
366
+ }
367
+ };
368
+ return typeMap[language]?.[type] || type;
369
+ }
370
+ /**
371
+ * Check if types are compatible across languages
372
+ */
373
+ areTypesCompatible(type1, type2) {
374
+ // Allow some common compatible types
375
+ const compatibilityMatrix = {
376
+ 'string': ['string'],
377
+ 'number': ['number', 'integer', 'float'],
378
+ 'boolean': ['boolean', 'bool'],
379
+ 'datetime': ['datetime', 'timestamp', 'date'],
380
+ 'any': ['any', 'object', 'interface{}']
381
+ };
382
+ for (const [baseType, compatibleTypes] of Object.entries(compatibilityMatrix)) {
383
+ if (compatibleTypes.includes(type1) && compatibleTypes.includes(type2)) {
384
+ return true;
385
+ }
386
+ }
387
+ return type1 === type2;
388
+ }
389
+ /**
390
+ * Parse version string
391
+ */
392
+ parseVersion(version) {
393
+ const parts = version.replace(/^v/, '').split('.').map(Number);
394
+ return {
395
+ major: parts[0] || 0,
396
+ minor: parts[1] || 0,
397
+ patch: parts[2] || 0
398
+ };
399
+ }
400
+ /**
401
+ * Check if versions are compatible
402
+ */
403
+ areVersionsCompatible(v1, v2) {
404
+ switch (this.options.versionTolerance) {
405
+ case 'strict':
406
+ return v1.major === v2.major && v1.minor === v2.minor && v1.patch === v2.patch;
407
+ case 'minor':
408
+ return v1.major === v2.major && v1.minor === v2.minor;
409
+ case 'major':
410
+ return v1.major === v2.major;
411
+ default:
412
+ return true;
413
+ }
414
+ }
415
+ /**
416
+ * Check if field name follows language conventions
417
+ */
418
+ isConsistentNaming(fieldName, language) {
419
+ switch (language) {
420
+ case 'typescript':
421
+ case 'javascript':
422
+ return /^[a-z][a-zA-Z0-9]*$/.test(fieldName); // camelCase
423
+ case 'go':
424
+ return /^[A-Z][a-zA-Z0-9]*$/.test(fieldName); // PascalCase for exported
425
+ case 'python':
426
+ return /^[a-z][a-z0-9_]*$/.test(fieldName); // snake_case
427
+ default:
428
+ return true;
429
+ }
430
+ }
431
+ /**
432
+ * Get recommended naming convention
433
+ */
434
+ getRecommendedNaming(fieldName, language) {
435
+ switch (language) {
436
+ case 'typescript':
437
+ case 'javascript':
438
+ return 'camelCase';
439
+ case 'go':
440
+ return 'PascalCase';
441
+ case 'python':
442
+ return 'snake_case';
443
+ default:
444
+ return 'consistent';
445
+ }
446
+ }
447
+ // Static methods for extracting schemas from different sources
448
+ static extractTypeScriptInterface(entity) {
449
+ if (entity.type !== 'interface')
450
+ return null;
451
+ return {
452
+ id: entity.id,
453
+ name: entity.name,
454
+ type: 'typescript-interface',
455
+ language: 'typescript',
456
+ file: entity.file,
457
+ line: entity.startLine || 0,
458
+ fields: entity.parameters?.map(param => ({
459
+ name: param.name,
460
+ type: param.type || 'any',
461
+ required: !param.optional,
462
+ description: param.description
463
+ })) || []
464
+ };
465
+ }
466
+ static extractGoStruct(entity) {
467
+ if (entity.type !== 'struct')
468
+ return null;
469
+ const fields = entity.metadata?.fields?.map((field) => ({
470
+ name: field.name,
471
+ type: field.type,
472
+ required: field.isExported, // Simplified assumption
473
+ description: field.tag
474
+ })) || [];
475
+ return {
476
+ id: entity.id,
477
+ name: entity.name,
478
+ type: 'go-struct',
479
+ language: 'go',
480
+ file: entity.file,
481
+ line: entity.startLine || 0,
482
+ fields
483
+ };
484
+ }
485
+ static extractProtobufMessage(entity) {
486
+ // Simplified protobuf extraction
487
+ return {
488
+ id: entity.id,
489
+ name: entity.name,
490
+ type: 'protobuf',
491
+ language: 'protobuf',
492
+ file: entity.file,
493
+ line: entity.startLine || 0,
494
+ fields: [] // Would parse .proto file in real implementation
495
+ };
496
+ }
497
+ static extractGraphQLType(entity) {
498
+ // Simplified GraphQL extraction
499
+ return {
500
+ id: entity.id,
501
+ name: entity.name,
502
+ type: 'graphql',
503
+ language: 'graphql',
504
+ file: entity.file,
505
+ line: entity.startLine || 0,
506
+ fields: [] // Would parse .graphql file in real implementation
507
+ };
508
+ }
509
+ static extractJSONSchema(entity) {
510
+ // Simplified JSON Schema extraction
511
+ return {
512
+ id: entity.id,
513
+ name: entity.name,
514
+ type: 'json-schema',
515
+ language: 'json',
516
+ file: entity.file,
517
+ line: entity.startLine || 0,
518
+ fields: [] // Would parse JSON schema in real implementation
519
+ };
520
+ }
521
+ }
522
+ //# sourceMappingURL=SchemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../../src/analyzers/cross-language/SchemaValidator.ts"],"names":[],"mappings":"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"}