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,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Schema Parser and Validator
|
|
3
|
+
* Handles loading, parsing, and validating database schema definitions
|
|
4
|
+
*/
|
|
5
|
+
import { SchemaDefinition, DatabaseSchema, SchemaViolation } from '../types.js';
|
|
6
|
+
export interface SchemaParseResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
schema?: SchemaDefinition;
|
|
9
|
+
violations: SchemaViolation[];
|
|
10
|
+
errors: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface SchemaValidationOptions {
|
|
13
|
+
checkReferences?: boolean;
|
|
14
|
+
checkNamingConventions?: boolean;
|
|
15
|
+
checkIndexes?: boolean;
|
|
16
|
+
strictMode?: boolean;
|
|
17
|
+
allowedDatabaseTypes?: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare class SchemaParser {
|
|
20
|
+
private static readonly SUPPORTED_FORMATS;
|
|
21
|
+
private static readonly DATABASE_TYPES;
|
|
22
|
+
/**
|
|
23
|
+
* Parse schema from file
|
|
24
|
+
*/
|
|
25
|
+
parseFromFile(filePath: string, options?: SchemaValidationOptions): Promise<SchemaParseResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Parse schema from string content
|
|
28
|
+
*/
|
|
29
|
+
parseFromString(content: string, format: string, options?: SchemaValidationOptions): Promise<SchemaParseResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Validate basic structure of parsed object
|
|
32
|
+
*/
|
|
33
|
+
private validateStructure;
|
|
34
|
+
/**
|
|
35
|
+
* Normalize parsed object to typed schema
|
|
36
|
+
*/
|
|
37
|
+
private normalizeSchema;
|
|
38
|
+
/**
|
|
39
|
+
* Normalize database object
|
|
40
|
+
*/
|
|
41
|
+
private normalizeDatabase;
|
|
42
|
+
/**
|
|
43
|
+
* Normalize table object
|
|
44
|
+
*/
|
|
45
|
+
private normalizeTable;
|
|
46
|
+
/**
|
|
47
|
+
* Normalize column object
|
|
48
|
+
*/
|
|
49
|
+
private normalizeColumn;
|
|
50
|
+
/**
|
|
51
|
+
* Validate schema content and relationships
|
|
52
|
+
*/
|
|
53
|
+
private validateSchema;
|
|
54
|
+
/**
|
|
55
|
+
* Validate individual database
|
|
56
|
+
*/
|
|
57
|
+
private validateDatabase;
|
|
58
|
+
/**
|
|
59
|
+
* Validate individual table
|
|
60
|
+
*/
|
|
61
|
+
private validateTable;
|
|
62
|
+
/**
|
|
63
|
+
* Validate column definitions
|
|
64
|
+
*/
|
|
65
|
+
private validateColumn;
|
|
66
|
+
/**
|
|
67
|
+
* Validate table naming conventions
|
|
68
|
+
*/
|
|
69
|
+
private validateTableNaming;
|
|
70
|
+
/**
|
|
71
|
+
* Validate references across tables
|
|
72
|
+
*/
|
|
73
|
+
private validateReferences;
|
|
74
|
+
/**
|
|
75
|
+
* Get schema statistics
|
|
76
|
+
*/
|
|
77
|
+
getSchemaStats(schema: SchemaDefinition): {
|
|
78
|
+
databaseCount: number;
|
|
79
|
+
tableCount: number;
|
|
80
|
+
columnCount: number;
|
|
81
|
+
referenceCount: number;
|
|
82
|
+
indexCount: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Find circular dependencies in schema
|
|
86
|
+
*/
|
|
87
|
+
findCircularDependencies(database: DatabaseSchema): string[][];
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=SchemaParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaParser.d.ts","sourceRoot":"","sources":["../../src/services/SchemaParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EACL,gBAAgB,EAChB,cAAc,EAId,eAAe,EAEhB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAEpC;IAEF;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBxG;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC;IAoD7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4BrB;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsD1B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG;QACxC,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB;IAyBD;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,EAAE;CAqC/D"}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Schema Parser and Validator
|
|
3
|
+
* Handles loading, parsing, and validating database schema definitions
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
// import yaml from 'js-yaml';
|
|
8
|
+
// Temporary workaround for missing dependency
|
|
9
|
+
const yaml = {
|
|
10
|
+
load: (content) => {
|
|
11
|
+
throw new Error('YAML parsing not available - js-yaml dependency not installed');
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
export class SchemaParser {
|
|
15
|
+
static SUPPORTED_FORMATS = ['.json', '.yaml', '.yml'];
|
|
16
|
+
static DATABASE_TYPES = [
|
|
17
|
+
'postgresql', 'mysql', 'mongodb', 'sqlite', 'redis', 'dynamodb', 'other'
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* Parse schema from file
|
|
21
|
+
*/
|
|
22
|
+
async parseFromFile(filePath, options = {}) {
|
|
23
|
+
try {
|
|
24
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
25
|
+
if (!SchemaParser.SUPPORTED_FORMATS.includes(ext)) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
violations: [],
|
|
29
|
+
errors: [`Unsupported file format: ${ext}. Supported formats: ${SchemaParser.SUPPORTED_FORMATS.join(', ')}`]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
33
|
+
return this.parseFromString(content, ext, options);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
violations: [],
|
|
39
|
+
errors: [`Failed to read file: ${error instanceof Error ? error.message : 'Unknown error'}`]
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse schema from string content
|
|
45
|
+
*/
|
|
46
|
+
async parseFromString(content, format, options = {}) {
|
|
47
|
+
const violations = [];
|
|
48
|
+
const errors = [];
|
|
49
|
+
try {
|
|
50
|
+
let parsed;
|
|
51
|
+
if (format === '.json') {
|
|
52
|
+
parsed = JSON.parse(content);
|
|
53
|
+
}
|
|
54
|
+
else if (format === '.yaml' || format === '.yml') {
|
|
55
|
+
parsed = yaml.load(content);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
violations,
|
|
61
|
+
errors: [`Unsupported format: ${format}`]
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Validate structure
|
|
65
|
+
const structureValidation = this.validateStructure(parsed);
|
|
66
|
+
if (!structureValidation.valid) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
violations,
|
|
70
|
+
errors: structureValidation.errors
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Convert to typed schema
|
|
74
|
+
const schema = this.normalizeSchema(parsed);
|
|
75
|
+
// Validate schema content
|
|
76
|
+
const contentViolations = this.validateSchema(schema, options);
|
|
77
|
+
violations.push(...contentViolations);
|
|
78
|
+
return {
|
|
79
|
+
success: true,
|
|
80
|
+
schema,
|
|
81
|
+
violations,
|
|
82
|
+
errors
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
violations,
|
|
89
|
+
errors: [`Parse error: ${error instanceof Error ? error.message : 'Unknown error'}`]
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validate basic structure of parsed object
|
|
95
|
+
*/
|
|
96
|
+
validateStructure(obj) {
|
|
97
|
+
const errors = [];
|
|
98
|
+
if (!obj || typeof obj !== 'object') {
|
|
99
|
+
errors.push('Schema must be an object');
|
|
100
|
+
return { valid: false, errors };
|
|
101
|
+
}
|
|
102
|
+
// Required fields
|
|
103
|
+
if (!obj.version)
|
|
104
|
+
errors.push('Missing required field: version');
|
|
105
|
+
if (!obj.name)
|
|
106
|
+
errors.push('Missing required field: name');
|
|
107
|
+
if (!obj.databases || !Array.isArray(obj.databases)) {
|
|
108
|
+
errors.push('Missing or invalid field: databases (must be an array)');
|
|
109
|
+
}
|
|
110
|
+
// Validate databases structure
|
|
111
|
+
if (obj.databases && Array.isArray(obj.databases)) {
|
|
112
|
+
obj.databases.forEach((db, index) => {
|
|
113
|
+
if (!db.name)
|
|
114
|
+
errors.push(`Database ${index}: missing name`);
|
|
115
|
+
if (!db.type)
|
|
116
|
+
errors.push(`Database ${index}: missing type`);
|
|
117
|
+
if (!db.tables || !Array.isArray(db.tables)) {
|
|
118
|
+
errors.push(`Database ${index}: missing or invalid tables array`);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return { valid: errors.length === 0, errors };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Normalize parsed object to typed schema
|
|
126
|
+
*/
|
|
127
|
+
normalizeSchema(obj) {
|
|
128
|
+
return {
|
|
129
|
+
version: obj.version,
|
|
130
|
+
name: obj.name,
|
|
131
|
+
description: obj.description,
|
|
132
|
+
databases: obj.databases.map((db) => this.normalizeDatabase(db)),
|
|
133
|
+
globalReferences: obj.globalReferences || [],
|
|
134
|
+
metadata: {
|
|
135
|
+
author: obj.metadata?.author,
|
|
136
|
+
createdAt: obj.metadata?.createdAt ? new Date(obj.metadata.createdAt) : undefined,
|
|
137
|
+
updatedAt: obj.metadata?.updatedAt ? new Date(obj.metadata.updatedAt) : undefined,
|
|
138
|
+
tags: obj.metadata?.tags || [],
|
|
139
|
+
environment: obj.metadata?.environment
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Normalize database object
|
|
145
|
+
*/
|
|
146
|
+
normalizeDatabase(db) {
|
|
147
|
+
return {
|
|
148
|
+
name: db.name,
|
|
149
|
+
type: db.type,
|
|
150
|
+
version: db.version,
|
|
151
|
+
host: db.host,
|
|
152
|
+
port: db.port,
|
|
153
|
+
database: db.database,
|
|
154
|
+
schemas: db.schemas || [],
|
|
155
|
+
tables: (db.tables || []).map((table) => this.normalizeTable(table)),
|
|
156
|
+
relationships: db.relationships || [],
|
|
157
|
+
description: db.description,
|
|
158
|
+
createdAt: db.createdAt ? new Date(db.createdAt) : undefined,
|
|
159
|
+
updatedAt: db.updatedAt ? new Date(db.updatedAt) : undefined,
|
|
160
|
+
metadata: db.metadata
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Normalize table object
|
|
165
|
+
*/
|
|
166
|
+
normalizeTable(table) {
|
|
167
|
+
return {
|
|
168
|
+
name: table.name,
|
|
169
|
+
type: table.type || 'table',
|
|
170
|
+
database: table.database,
|
|
171
|
+
schema: table.schema,
|
|
172
|
+
columns: (table.columns || []).map((col) => this.normalizeColumn(col)),
|
|
173
|
+
references: table.references || [],
|
|
174
|
+
indexes: table.indexes || [],
|
|
175
|
+
constraints: table.constraints || [],
|
|
176
|
+
description: table.description,
|
|
177
|
+
tags: table.tags || [],
|
|
178
|
+
estimatedRows: table.estimatedRows,
|
|
179
|
+
isTemporary: table.isTemporary || false,
|
|
180
|
+
partitionKey: table.partitionKey
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Normalize column object
|
|
185
|
+
*/
|
|
186
|
+
normalizeColumn(col) {
|
|
187
|
+
return {
|
|
188
|
+
name: col.name,
|
|
189
|
+
type: col.type,
|
|
190
|
+
nullable: col.nullable !== false, // Default to true if not specified
|
|
191
|
+
primaryKey: col.primaryKey || false,
|
|
192
|
+
defaultValue: col.defaultValue,
|
|
193
|
+
unique: col.unique || false,
|
|
194
|
+
indexed: col.indexed || false,
|
|
195
|
+
length: col.length,
|
|
196
|
+
precision: col.precision,
|
|
197
|
+
scale: col.scale,
|
|
198
|
+
description: col.description,
|
|
199
|
+
enum: col.enum
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Validate schema content and relationships
|
|
204
|
+
*/
|
|
205
|
+
validateSchema(schema, options) {
|
|
206
|
+
const violations = [];
|
|
207
|
+
for (const database of schema.databases) {
|
|
208
|
+
violations.push(...this.validateDatabase(database, options));
|
|
209
|
+
}
|
|
210
|
+
return violations;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Validate individual database
|
|
214
|
+
*/
|
|
215
|
+
validateDatabase(database, options) {
|
|
216
|
+
const violations = [];
|
|
217
|
+
// Check database type
|
|
218
|
+
if (!SchemaParser.DATABASE_TYPES.includes(database.type)) {
|
|
219
|
+
violations.push({
|
|
220
|
+
file: 'schema',
|
|
221
|
+
severity: 'warning',
|
|
222
|
+
message: `Unknown database type: ${database.type}`,
|
|
223
|
+
schemaType: 'naming-convention',
|
|
224
|
+
details: `Supported types: ${SchemaParser.DATABASE_TYPES.join(', ')}`
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Validate tables
|
|
228
|
+
for (const table of database.tables) {
|
|
229
|
+
violations.push(...this.validateTable(table, database, options));
|
|
230
|
+
}
|
|
231
|
+
// Check for orphaned references
|
|
232
|
+
if (options.checkReferences !== false) {
|
|
233
|
+
violations.push(...this.validateReferences(database));
|
|
234
|
+
}
|
|
235
|
+
return violations;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Validate individual table
|
|
239
|
+
*/
|
|
240
|
+
validateTable(table, database, options) {
|
|
241
|
+
const violations = [];
|
|
242
|
+
// Check for primary key
|
|
243
|
+
const hasPrimaryKey = table.columns.some(col => col.primaryKey);
|
|
244
|
+
if (!hasPrimaryKey && table.type === 'table') {
|
|
245
|
+
violations.push({
|
|
246
|
+
file: 'schema',
|
|
247
|
+
severity: 'warning',
|
|
248
|
+
message: `Table '${table.name}' has no primary key`,
|
|
249
|
+
schemaType: 'missing-index',
|
|
250
|
+
tableName: table.name
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// Check naming conventions
|
|
254
|
+
if (options.checkNamingConventions !== false) {
|
|
255
|
+
violations.push(...this.validateTableNaming(table));
|
|
256
|
+
}
|
|
257
|
+
// Validate columns
|
|
258
|
+
for (const column of table.columns) {
|
|
259
|
+
violations.push(...this.validateColumn(column, table));
|
|
260
|
+
}
|
|
261
|
+
return violations;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Validate column definitions
|
|
265
|
+
*/
|
|
266
|
+
validateColumn(column, table) {
|
|
267
|
+
const violations = [];
|
|
268
|
+
// Check for missing type
|
|
269
|
+
if (!column.type) {
|
|
270
|
+
violations.push({
|
|
271
|
+
file: 'schema',
|
|
272
|
+
severity: 'critical',
|
|
273
|
+
message: `Column '${column.name}' in table '${table.name}' is missing type`,
|
|
274
|
+
schemaType: 'missing-reference',
|
|
275
|
+
tableName: table.name,
|
|
276
|
+
columnName: column.name
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Check for enum without values
|
|
280
|
+
if (column.type === 'enum' && (!column.enum || column.enum.length === 0)) {
|
|
281
|
+
violations.push({
|
|
282
|
+
file: 'schema',
|
|
283
|
+
severity: 'warning',
|
|
284
|
+
message: `Enum column '${column.name}' in table '${table.name}' has no values defined`,
|
|
285
|
+
schemaType: 'missing-reference',
|
|
286
|
+
tableName: table.name,
|
|
287
|
+
columnName: column.name
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
return violations;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Validate table naming conventions
|
|
294
|
+
*/
|
|
295
|
+
validateTableNaming(table) {
|
|
296
|
+
const violations = [];
|
|
297
|
+
// Check snake_case convention
|
|
298
|
+
if (!/^[a-z][a-z0-9_]*$/.test(table.name)) {
|
|
299
|
+
violations.push({
|
|
300
|
+
file: 'schema',
|
|
301
|
+
severity: 'suggestion',
|
|
302
|
+
message: `Table name '${table.name}' should follow snake_case convention`,
|
|
303
|
+
schemaType: 'naming-convention',
|
|
304
|
+
tableName: table.name,
|
|
305
|
+
suggestion: 'Use lowercase letters, numbers, and underscores only'
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
// Check for plural table names
|
|
309
|
+
if (!table.name.endsWith('s') && !table.name.includes('_')) {
|
|
310
|
+
violations.push({
|
|
311
|
+
file: 'schema',
|
|
312
|
+
severity: 'suggestion',
|
|
313
|
+
message: `Table name '${table.name}' should typically be plural`,
|
|
314
|
+
schemaType: 'naming-convention',
|
|
315
|
+
tableName: table.name,
|
|
316
|
+
suggestion: 'Consider using plural form for table names'
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
return violations;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Validate references across tables
|
|
323
|
+
*/
|
|
324
|
+
validateReferences(database) {
|
|
325
|
+
const violations = [];
|
|
326
|
+
const tableNames = new Set(database.tables.map(t => t.name));
|
|
327
|
+
for (const table of database.tables) {
|
|
328
|
+
for (const reference of table.references) {
|
|
329
|
+
// Check if referenced table exists
|
|
330
|
+
if (!tableNames.has(reference.referencedTable)) {
|
|
331
|
+
violations.push({
|
|
332
|
+
file: 'schema',
|
|
333
|
+
severity: 'critical',
|
|
334
|
+
message: `Reference in table '${table.name}' points to non-existent table '${reference.referencedTable}'`,
|
|
335
|
+
schemaType: 'missing-reference',
|
|
336
|
+
tableName: table.name,
|
|
337
|
+
details: `Foreign key: ${reference.foreignKey} -> ${reference.referencedTable}.${reference.referencedColumn}`
|
|
338
|
+
});
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
// Check if referenced column exists
|
|
342
|
+
const referencedTable = database.tables.find(t => t.name === reference.referencedTable);
|
|
343
|
+
if (referencedTable) {
|
|
344
|
+
const referencedColumn = referencedTable.columns.find(c => c.name === reference.referencedColumn);
|
|
345
|
+
if (!referencedColumn) {
|
|
346
|
+
violations.push({
|
|
347
|
+
file: 'schema',
|
|
348
|
+
severity: 'critical',
|
|
349
|
+
message: `Reference in table '${table.name}' points to non-existent column '${reference.referencedColumn}' in table '${reference.referencedTable}'`,
|
|
350
|
+
schemaType: 'missing-reference',
|
|
351
|
+
tableName: table.name,
|
|
352
|
+
columnName: reference.referencedColumn,
|
|
353
|
+
details: `Foreign key: ${reference.foreignKey} -> ${reference.referencedTable}.${reference.referencedColumn}`
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Check if foreign key column exists in current table
|
|
358
|
+
const foreignKeyColumn = table.columns.find(c => c.name === reference.foreignKey);
|
|
359
|
+
if (!foreignKeyColumn) {
|
|
360
|
+
violations.push({
|
|
361
|
+
file: 'schema',
|
|
362
|
+
severity: 'critical',
|
|
363
|
+
message: `Foreign key column '${reference.foreignKey}' not found in table '${table.name}'`,
|
|
364
|
+
schemaType: 'missing-reference',
|
|
365
|
+
tableName: table.name,
|
|
366
|
+
columnName: reference.foreignKey
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return violations;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Get schema statistics
|
|
375
|
+
*/
|
|
376
|
+
getSchemaStats(schema) {
|
|
377
|
+
let tableCount = 0;
|
|
378
|
+
let columnCount = 0;
|
|
379
|
+
let referenceCount = 0;
|
|
380
|
+
let indexCount = 0;
|
|
381
|
+
for (const database of schema.databases) {
|
|
382
|
+
tableCount += database.tables.length;
|
|
383
|
+
for (const table of database.tables) {
|
|
384
|
+
columnCount += table.columns.length;
|
|
385
|
+
referenceCount += table.references.length;
|
|
386
|
+
indexCount += table.indexes?.length || 0;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return {
|
|
390
|
+
databaseCount: schema.databases.length,
|
|
391
|
+
tableCount,
|
|
392
|
+
columnCount,
|
|
393
|
+
referenceCount,
|
|
394
|
+
indexCount
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Find circular dependencies in schema
|
|
399
|
+
*/
|
|
400
|
+
findCircularDependencies(database) {
|
|
401
|
+
const cycles = [];
|
|
402
|
+
const visited = new Set();
|
|
403
|
+
const path = [];
|
|
404
|
+
const dfs = (tableName) => {
|
|
405
|
+
if (path.includes(tableName)) {
|
|
406
|
+
// Found cycle
|
|
407
|
+
const cycleStart = path.indexOf(tableName);
|
|
408
|
+
const cycle = [...path.slice(cycleStart), tableName];
|
|
409
|
+
cycles.push(cycle);
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
if (visited.has(tableName))
|
|
413
|
+
return false;
|
|
414
|
+
visited.add(tableName);
|
|
415
|
+
path.push(tableName);
|
|
416
|
+
const table = database.tables.find(t => t.name === tableName);
|
|
417
|
+
if (table) {
|
|
418
|
+
for (const ref of table.references) {
|
|
419
|
+
if (dfs(ref.referencedTable))
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
path.pop();
|
|
424
|
+
return false;
|
|
425
|
+
};
|
|
426
|
+
for (const table of database.tables) {
|
|
427
|
+
if (!visited.has(table.name)) {
|
|
428
|
+
dfs(table.name);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return cycles;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=SchemaParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaParser.js","sourceRoot":"","sources":["../../src/services/SchemaParser.ts"],"names":[],"mappings":"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"}
|