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.
- package/dist/adapters/GoAdapter.d.ts +53 -0
- package/dist/adapters/GoAdapter.d.ts.map +1 -0
- package/dist/adapters/GoAdapter.js +602 -0
- package/dist/adapters/GoAdapter.js.map +1 -0
- package/dist/adapters/GoConfig.d.ts +35 -0
- package/dist/adapters/GoConfig.d.ts.map +1 -0
- package/dist/adapters/GoConfig.js +155 -0
- package/dist/adapters/GoConfig.js.map +1 -0
- package/dist/adapters/LanguageAdapter.d.ts +135 -0
- package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
- package/dist/adapters/LanguageAdapter.js +47 -0
- package/dist/adapters/LanguageAdapter.js.map +1 -0
- package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
- package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
- package/dist/adapters/TypeScriptAdapter.js +386 -0
- package/dist/adapters/TypeScriptAdapter.js.map +1 -0
- package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
- package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
- package/dist/adapters/UniversalAnalyzer.js +103 -0
- package/dist/adapters/UniversalAnalyzer.js.map +1 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
- package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
- package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
- package/dist/adapters/solidAnalyzerCompat.js +78 -0
- package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
- package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
- package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/dryAnalyzerCompat.js +44 -0
- package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/schemaAnalyzer.d.ts +21 -0
- package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/schemaAnalyzer.js +405 -0
- package/dist/analyzers/schemaAnalyzer.js.map +1 -0
- package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
- package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/solidAnalyzerCompat.js +78 -0
- package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +23 -7
- package/dist/auditRunner.js.map +1 -1
- package/dist/codeIndexDB-enhanced.d.ts +80 -0
- package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
- package/dist/codeIndexDB-enhanced.js +488 -0
- package/dist/codeIndexDB-enhanced.js.map +1 -0
- package/dist/codeIndexDb.d.ts +70 -1
- package/dist/codeIndexDb.d.ts.map +1 -1
- package/dist/codeIndexDb.js +199 -2
- package/dist/codeIndexDb.js.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +181 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
- package/dist/languages/LanguageOrchestrator.js +365 -0
- package/dist/languages/LanguageOrchestrator.js.map +1 -0
- package/dist/languages/LanguageRegistry.d.ts +43 -0
- package/dist/languages/LanguageRegistry.d.ts.map +1 -0
- package/dist/languages/LanguageRegistry.js +86 -0
- package/dist/languages/LanguageRegistry.js.map +1 -0
- package/dist/languages/RuntimeManager.d.ts +181 -0
- package/dist/languages/RuntimeManager.d.ts.map +1 -0
- package/dist/languages/RuntimeManager.js +841 -0
- package/dist/languages/RuntimeManager.js.map +1 -0
- package/dist/languages/UniversalAnalyzer.d.ts +37 -0
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
- package/dist/languages/UniversalAnalyzer.js +101 -0
- package/dist/languages/UniversalAnalyzer.js.map +1 -0
- package/dist/languages/go/GoAdapter.d.ts +57 -0
- package/dist/languages/go/GoAdapter.d.ts.map +1 -0
- package/dist/languages/go/GoAdapter.js +360 -0
- package/dist/languages/go/GoAdapter.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +23 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/types.d.ts +182 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +5 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
- package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
- package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
- package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
- package/dist/languages/typescript/test-extraction.d.ts +2 -0
- package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
- package/dist/languages/typescript/test-extraction.js +36 -0
- package/dist/languages/typescript/test-extraction.js.map +1 -0
- package/dist/mcp-hybrid.d.ts +10 -0
- package/dist/mcp-hybrid.d.ts.map +1 -0
- package/dist/mcp-hybrid.js +41 -0
- package/dist/mcp-hybrid.js.map +1 -0
- package/dist/mcp-index.d.ts +11 -0
- package/dist/mcp-index.d.ts.map +1 -0
- package/dist/mcp-index.js +101 -0
- package/dist/mcp-index.js.map +1 -0
- package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +67 -10
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts +49 -0
- package/dist/mcp-tools-shared.d.ts.map +1 -0
- package/dist/mcp-tools-shared.js +1282 -0
- package/dist/mcp-tools-shared.js.map +1 -0
- package/dist/mcp-ui-server.d.ts +27 -0
- package/dist/mcp-ui-server.d.ts.map +1 -0
- package/dist/mcp-ui-server.js +484 -0
- package/dist/mcp-ui-server.js.map +1 -0
- package/dist/mcp-ui-simple.d.ts +27 -0
- package/dist/mcp-ui-simple.d.ts.map +1 -0
- package/dist/mcp-ui-simple.js +425 -0
- package/dist/mcp-ui-simple.js.map +1 -0
- package/dist/mcp.js +7 -4
- package/dist/mcp.js.map +1 -1
- package/dist/services/SchemaParser.d.ts +89 -0
- package/dist/services/SchemaParser.d.ts.map +1 -0
- package/dist/services/SchemaParser.js +434 -0
- package/dist/services/SchemaParser.js.map +1 -0
- package/dist/types/crossLanguage.d.ts +267 -0
- package/dist/types/crossLanguage.d.ts.map +1 -0
- package/dist/types/crossLanguage.js +6 -0
- package/dist/types/crossLanguage.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +6 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +12 -1
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/examples/schema-example.json +364 -0
- package/examples/schema-example.yaml +137 -0
- 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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"}
|