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,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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"}