@memberjunction/db-auto-doc 2.117.0 → 2.118.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 (251) hide show
  1. package/README.md +652 -165
  2. package/bin/run.js +7 -0
  3. package/dist/api/DBAutoDocAPI.d.ts +252 -0
  4. package/dist/api/DBAutoDocAPI.d.ts.map +1 -0
  5. package/dist/api/DBAutoDocAPI.js +530 -0
  6. package/dist/api/DBAutoDocAPI.js.map +1 -0
  7. package/dist/api/index.d.ts +7 -0
  8. package/dist/api/index.d.ts.map +1 -0
  9. package/dist/api/index.js +10 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/commands/analyze.d.ts +6 -4
  12. package/dist/commands/analyze.d.ts.map +1 -1
  13. package/dist/commands/analyze.js +58 -71
  14. package/dist/commands/analyze.js.map +1 -1
  15. package/dist/commands/export.d.ts +14 -4
  16. package/dist/commands/export.d.ts.map +1 -1
  17. package/dist/commands/export.js +156 -61
  18. package/dist/commands/export.js.map +1 -1
  19. package/dist/commands/init.d.ts +3 -4
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +155 -146
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/reset.d.ts +4 -1
  24. package/dist/commands/reset.d.ts.map +1 -1
  25. package/dist/commands/reset.js +33 -19
  26. package/dist/commands/reset.js.map +1 -1
  27. package/dist/commands/status.d.ts +10 -0
  28. package/dist/commands/status.d.ts.map +1 -0
  29. package/dist/commands/status.js +66 -0
  30. package/dist/commands/status.js.map +1 -0
  31. package/dist/core/AnalysisEngine.d.ts +108 -0
  32. package/dist/core/AnalysisEngine.d.ts.map +1 -0
  33. package/dist/core/AnalysisEngine.js +716 -0
  34. package/dist/core/AnalysisEngine.js.map +1 -0
  35. package/dist/core/AnalysisOrchestrator.d.ts +37 -0
  36. package/dist/core/AnalysisOrchestrator.d.ts.map +1 -0
  37. package/dist/core/AnalysisOrchestrator.js +294 -0
  38. package/dist/core/AnalysisOrchestrator.js.map +1 -0
  39. package/dist/core/BackpropagationEngine.d.ts +32 -0
  40. package/dist/core/BackpropagationEngine.d.ts.map +1 -0
  41. package/dist/core/BackpropagationEngine.js +121 -0
  42. package/dist/core/BackpropagationEngine.js.map +1 -0
  43. package/dist/core/ConvergenceDetector.d.ts +27 -0
  44. package/dist/core/ConvergenceDetector.d.ts.map +1 -0
  45. package/dist/core/ConvergenceDetector.js +92 -0
  46. package/dist/core/ConvergenceDetector.js.map +1 -0
  47. package/dist/core/GuardrailsManager.d.ts +78 -0
  48. package/dist/core/GuardrailsManager.d.ts.map +1 -0
  49. package/dist/core/GuardrailsManager.js +367 -0
  50. package/dist/core/GuardrailsManager.js.map +1 -0
  51. package/dist/core/index.d.ts +7 -0
  52. package/dist/core/index.d.ts.map +1 -0
  53. package/dist/core/index.js +13 -0
  54. package/dist/core/index.js.map +1 -0
  55. package/dist/database/Database.d.ts +56 -0
  56. package/dist/database/Database.d.ts.map +1 -0
  57. package/dist/database/Database.js +172 -0
  58. package/dist/database/Database.js.map +1 -0
  59. package/dist/database/TopologicalSorter.d.ts +25 -0
  60. package/dist/database/TopologicalSorter.d.ts.map +1 -0
  61. package/dist/database/TopologicalSorter.js +150 -0
  62. package/dist/database/TopologicalSorter.js.map +1 -0
  63. package/dist/database/index.d.ts +6 -0
  64. package/dist/database/index.d.ts.map +1 -0
  65. package/dist/database/index.js +14 -0
  66. package/dist/database/index.js.map +1 -0
  67. package/dist/discovery/ColumnStatsCache.d.ts +91 -0
  68. package/dist/discovery/ColumnStatsCache.d.ts.map +1 -0
  69. package/dist/discovery/ColumnStatsCache.js +231 -0
  70. package/dist/discovery/ColumnStatsCache.js.map +1 -0
  71. package/dist/discovery/DiscoveryEngine.d.ts +100 -0
  72. package/dist/discovery/DiscoveryEngine.d.ts.map +1 -0
  73. package/dist/discovery/DiscoveryEngine.js +726 -0
  74. package/dist/discovery/DiscoveryEngine.js.map +1 -0
  75. package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts +57 -0
  76. package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts.map +1 -0
  77. package/dist/discovery/DiscoveryTriggerAnalyzer.js +186 -0
  78. package/dist/discovery/DiscoveryTriggerAnalyzer.js.map +1 -0
  79. package/dist/discovery/FKDetector.d.ts +47 -0
  80. package/dist/discovery/FKDetector.d.ts.map +1 -0
  81. package/dist/discovery/FKDetector.js +317 -0
  82. package/dist/discovery/FKDetector.js.map +1 -0
  83. package/dist/discovery/LLMDiscoveryValidator.d.ts +64 -0
  84. package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -0
  85. package/dist/discovery/LLMDiscoveryValidator.js +431 -0
  86. package/dist/discovery/LLMDiscoveryValidator.js.map +1 -0
  87. package/dist/discovery/LLMSanityChecker.d.ts +38 -0
  88. package/dist/discovery/LLMSanityChecker.d.ts.map +1 -0
  89. package/dist/discovery/LLMSanityChecker.js +156 -0
  90. package/dist/discovery/LLMSanityChecker.js.map +1 -0
  91. package/dist/discovery/PKDetector.d.ts +62 -0
  92. package/dist/discovery/PKDetector.d.ts.map +1 -0
  93. package/dist/discovery/PKDetector.js +436 -0
  94. package/dist/discovery/PKDetector.js.map +1 -0
  95. package/dist/discovery/index.d.ts +9 -0
  96. package/dist/discovery/index.d.ts.map +1 -0
  97. package/dist/discovery/index.js +25 -0
  98. package/dist/discovery/index.js.map +1 -0
  99. package/dist/drivers/BaseAutoDocDriver.d.ts +132 -0
  100. package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -0
  101. package/dist/drivers/BaseAutoDocDriver.js +121 -0
  102. package/dist/drivers/BaseAutoDocDriver.js.map +1 -0
  103. package/dist/drivers/MySQLDriver.d.ts +61 -0
  104. package/dist/drivers/MySQLDriver.d.ts.map +1 -0
  105. package/dist/drivers/MySQLDriver.js +668 -0
  106. package/dist/drivers/MySQLDriver.js.map +1 -0
  107. package/dist/drivers/PostgreSQLDriver.d.ts +65 -0
  108. package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -0
  109. package/dist/drivers/PostgreSQLDriver.js +704 -0
  110. package/dist/drivers/PostgreSQLDriver.js.map +1 -0
  111. package/dist/drivers/SQLServerDriver.d.ts +61 -0
  112. package/dist/drivers/SQLServerDriver.d.ts.map +1 -0
  113. package/dist/drivers/SQLServerDriver.js +667 -0
  114. package/dist/drivers/SQLServerDriver.js.map +1 -0
  115. package/dist/generators/CSVGenerator.d.ts +35 -0
  116. package/dist/generators/CSVGenerator.d.ts.map +1 -0
  117. package/dist/generators/CSVGenerator.js +154 -0
  118. package/dist/generators/CSVGenerator.js.map +1 -0
  119. package/dist/generators/HTMLGenerator.d.ts +29 -0
  120. package/dist/generators/HTMLGenerator.d.ts.map +1 -0
  121. package/dist/generators/HTMLGenerator.js +710 -0
  122. package/dist/generators/HTMLGenerator.js.map +1 -0
  123. package/dist/generators/MarkdownGenerator.d.ts +27 -0
  124. package/dist/generators/MarkdownGenerator.d.ts.map +1 -0
  125. package/dist/generators/MarkdownGenerator.js +361 -0
  126. package/dist/generators/MarkdownGenerator.js.map +1 -0
  127. package/dist/generators/MermaidGenerator.d.ts +35 -0
  128. package/dist/generators/MermaidGenerator.d.ts.map +1 -0
  129. package/dist/generators/MermaidGenerator.js +321 -0
  130. package/dist/generators/MermaidGenerator.js.map +1 -0
  131. package/dist/generators/ReportGenerator.d.ts +22 -0
  132. package/dist/generators/ReportGenerator.d.ts.map +1 -0
  133. package/dist/generators/ReportGenerator.js +176 -0
  134. package/dist/generators/ReportGenerator.js.map +1 -0
  135. package/dist/generators/SQLGenerator.d.ts +31 -0
  136. package/dist/generators/SQLGenerator.d.ts.map +1 -0
  137. package/dist/generators/SQLGenerator.js +168 -0
  138. package/dist/generators/SQLGenerator.js.map +1 -0
  139. package/dist/generators/index.d.ts +10 -0
  140. package/dist/generators/index.d.ts.map +1 -0
  141. package/dist/generators/index.js +19 -0
  142. package/dist/generators/index.js.map +1 -0
  143. package/dist/index.d.ts +11 -20
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +19 -20
  146. package/dist/index.js.map +1 -1
  147. package/dist/prompts/PromptEngine.d.ts +65 -0
  148. package/dist/prompts/PromptEngine.d.ts.map +1 -0
  149. package/dist/prompts/PromptEngine.js +282 -0
  150. package/dist/prompts/PromptEngine.js.map +1 -0
  151. package/dist/prompts/PromptFileLoader.d.ts +21 -0
  152. package/dist/prompts/PromptFileLoader.d.ts.map +1 -0
  153. package/dist/prompts/PromptFileLoader.js +74 -0
  154. package/dist/prompts/PromptFileLoader.js.map +1 -0
  155. package/dist/prompts/index.d.ts +6 -0
  156. package/dist/prompts/index.d.ts.map +1 -0
  157. package/dist/prompts/index.js +11 -0
  158. package/dist/prompts/index.js.map +1 -0
  159. package/dist/state/IterationTracker.d.ts +64 -0
  160. package/dist/state/IterationTracker.d.ts.map +1 -0
  161. package/dist/state/IterationTracker.js +136 -0
  162. package/dist/state/IterationTracker.js.map +1 -0
  163. package/dist/state/StateManager.d.ts +79 -0
  164. package/dist/state/StateManager.d.ts.map +1 -0
  165. package/dist/state/StateManager.js +348 -0
  166. package/dist/state/StateManager.js.map +1 -0
  167. package/dist/state/StateValidator.d.ts +24 -0
  168. package/dist/state/StateValidator.d.ts.map +1 -0
  169. package/dist/state/StateValidator.js +147 -0
  170. package/dist/state/StateValidator.js.map +1 -0
  171. package/dist/state/index.d.ts +7 -0
  172. package/dist/state/index.d.ts.map +1 -0
  173. package/dist/state/index.js +13 -0
  174. package/dist/state/index.js.map +1 -0
  175. package/dist/types/analysis.d.ts +76 -0
  176. package/dist/types/analysis.d.ts.map +1 -0
  177. package/dist/types/analysis.js +6 -0
  178. package/dist/types/analysis.js.map +1 -0
  179. package/dist/types/config.d.ts +132 -0
  180. package/dist/types/config.d.ts.map +1 -0
  181. package/dist/types/config.js +7 -0
  182. package/dist/types/config.js.map +1 -0
  183. package/dist/types/discovery.d.ts +277 -0
  184. package/dist/types/discovery.d.ts.map +1 -0
  185. package/dist/types/discovery.js +7 -0
  186. package/dist/types/discovery.js.map +1 -0
  187. package/dist/types/driver.d.ts +148 -0
  188. package/dist/types/driver.d.ts.map +1 -0
  189. package/dist/types/driver.js +7 -0
  190. package/dist/types/driver.js.map +1 -0
  191. package/dist/types/index.d.ts +8 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +24 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/types/prompts.d.ts +158 -0
  196. package/dist/types/prompts.d.ts.map +1 -0
  197. package/dist/types/prompts.js +6 -0
  198. package/dist/types/prompts.js.map +1 -0
  199. package/dist/types/state.d.ts +278 -0
  200. package/dist/types/state.d.ts.map +1 -0
  201. package/dist/types/state.js +7 -0
  202. package/dist/types/state.js.map +1 -0
  203. package/dist/utils/config-loader.d.ts +29 -0
  204. package/dist/utils/config-loader.d.ts.map +1 -0
  205. package/dist/utils/config-loader.js +163 -0
  206. package/dist/utils/config-loader.js.map +1 -0
  207. package/dist/utils/index.d.ts +5 -0
  208. package/dist/utils/index.d.ts.map +1 -0
  209. package/dist/utils/index.js +9 -0
  210. package/dist/utils/index.js.map +1 -0
  211. package/package.json +24 -3
  212. package/dist/ai/simple-ai-client.d.ts +0 -70
  213. package/dist/ai/simple-ai-client.d.ts.map +0 -1
  214. package/dist/ai/simple-ai-client.js +0 -181
  215. package/dist/ai/simple-ai-client.js.map +0 -1
  216. package/dist/analyzers/analyzer.d.ts +0 -23
  217. package/dist/analyzers/analyzer.d.ts.map +0 -1
  218. package/dist/analyzers/analyzer.js +0 -127
  219. package/dist/analyzers/analyzer.js.map +0 -1
  220. package/dist/cli-old/cli.d.ts +0 -3
  221. package/dist/cli-old/cli.d.ts.map +0 -1
  222. package/dist/cli-old/cli.js +0 -388
  223. package/dist/cli-old/cli.js.map +0 -1
  224. package/dist/commands/review.d.ts +0 -11
  225. package/dist/commands/review.d.ts.map +0 -1
  226. package/dist/commands/review.js +0 -82
  227. package/dist/commands/review.js.map +0 -1
  228. package/dist/database/connection.d.ts +0 -40
  229. package/dist/database/connection.d.ts.map +0 -1
  230. package/dist/database/connection.js +0 -136
  231. package/dist/database/connection.js.map +0 -1
  232. package/dist/database/introspection.d.ts +0 -59
  233. package/dist/database/introspection.d.ts.map +0 -1
  234. package/dist/database/introspection.js +0 -124
  235. package/dist/database/introspection.js.map +0 -1
  236. package/dist/generators/markdown-generator.d.ts +0 -8
  237. package/dist/generators/markdown-generator.d.ts.map +0 -1
  238. package/dist/generators/markdown-generator.js +0 -106
  239. package/dist/generators/markdown-generator.js.map +0 -1
  240. package/dist/generators/sql-generator.d.ts +0 -20
  241. package/dist/generators/sql-generator.d.ts.map +0 -1
  242. package/dist/generators/sql-generator.js +0 -83
  243. package/dist/generators/sql-generator.js.map +0 -1
  244. package/dist/state/state-manager.d.ts +0 -95
  245. package/dist/state/state-manager.d.ts.map +0 -1
  246. package/dist/state/state-manager.js +0 -236
  247. package/dist/state/state-manager.js.map +0 -1
  248. package/dist/types/state-file.d.ts +0 -124
  249. package/dist/types/state-file.d.ts.map +0 -1
  250. package/dist/types/state-file.js +0 -79
  251. package/dist/types/state-file.js.map +0 -1
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * Database connection and introspection classes
4
+ * Primary interface for all database operations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DataSampler = exports.Introspector = exports.DatabaseConnection = exports.createDriver = void 0;
8
+ const global_1 = require("@memberjunction/global");
9
+ const BaseAutoDocDriver_js_1 = require("../drivers/BaseAutoDocDriver.js");
10
+ require("../drivers/SQLServerDriver.js"); // Import to ensure registration
11
+ require("../drivers/MySQLDriver.js"); // Import to ensure registration
12
+ require("../drivers/PostgreSQLDriver.js"); // Import to ensure registration
13
+ /**
14
+ * Create a database driver instance
15
+ */
16
+ function createDriver(config) {
17
+ const providerKey = config.provider === 'sqlserver' || !config.provider ? 'SQLServer' :
18
+ config.provider === 'mysql' ? 'MySQL' :
19
+ config.provider === 'postgresql' ? 'PostgreSQL' :
20
+ config.provider === 'oracle' ? 'Oracle' : 'SQLServer';
21
+ const driver = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(BaseAutoDocDriver_js_1.BaseAutoDocDriver, providerKey, config);
22
+ if (!driver) {
23
+ throw new Error(`Database provider '${providerKey}' is not registered`);
24
+ }
25
+ return driver;
26
+ }
27
+ exports.createDriver = createDriver;
28
+ /**
29
+ * Database connection class
30
+ * Provides connection management and query execution
31
+ */
32
+ class DatabaseConnection {
33
+ constructor(dbConfig) {
34
+ this.driver = createDriver(dbConfig);
35
+ }
36
+ async connect() {
37
+ await this.driver.connect();
38
+ }
39
+ async test() {
40
+ return await this.driver.test();
41
+ }
42
+ async query(queryText, maxRetries = 3) {
43
+ return await this.driver.executeQuery(queryText, maxRetries);
44
+ }
45
+ async close() {
46
+ await this.driver.close();
47
+ }
48
+ // Expose the underlying driver for advanced usage
49
+ getDriver() {
50
+ return this.driver;
51
+ }
52
+ }
53
+ exports.DatabaseConnection = DatabaseConnection;
54
+ /**
55
+ * Database introspector
56
+ * Retrieves schema and table information from the database
57
+ */
58
+ class Introspector {
59
+ constructor(driver) {
60
+ this.driver = driver;
61
+ }
62
+ async getSchemas(schemaFilter, tableFilter) {
63
+ const autoDocSchemas = await this.driver.getSchemas(schemaFilter, tableFilter);
64
+ // Convert AutoDocSchema[] to SchemaDefinition[]
65
+ const schemas = [];
66
+ for (const autoDocSchema of autoDocSchemas) {
67
+ const tables = [];
68
+ for (const autoDocTable of autoDocSchema.tables) {
69
+ // Convert foreign keys to dependsOn/dependents format
70
+ const dependsOn = autoDocTable.foreignKeys.map(fk => ({
71
+ schema: fk.referencedSchema,
72
+ table: fk.referencedTable,
73
+ column: fk.columnName,
74
+ referencedColumn: fk.referencedColumn
75
+ }));
76
+ // Convert columns
77
+ const columns = autoDocTable.columns.map(col => ({
78
+ name: col.name,
79
+ dataType: col.dataType,
80
+ isNullable: col.isNullable,
81
+ isPrimaryKey: col.isPrimaryKey,
82
+ isForeignKey: col.isForeignKey,
83
+ checkConstraint: col.checkConstraint,
84
+ defaultValue: col.defaultValue,
85
+ descriptionIterations: []
86
+ }));
87
+ tables.push({
88
+ name: autoDocTable.tableName,
89
+ rowCount: autoDocTable.rowCount,
90
+ dependsOn,
91
+ dependents: [], // Will be populated later
92
+ columns,
93
+ descriptionIterations: []
94
+ });
95
+ }
96
+ schemas.push({
97
+ name: autoDocSchema.name,
98
+ tables,
99
+ descriptionIterations: []
100
+ });
101
+ }
102
+ // Populate dependents (reverse FKs)
103
+ for (const schema of schemas) {
104
+ for (const table of schema.tables) {
105
+ for (const dep of table.dependsOn) {
106
+ const parentSchema = schemas.find(s => s.name === dep.schema);
107
+ if (parentSchema) {
108
+ const parentTable = parentSchema.tables.find(t => t.name === dep.table);
109
+ if (parentTable) {
110
+ if (!parentTable.dependents.some(d => d.schema === schema.name && d.table === table.name)) {
111
+ parentTable.dependents.push({
112
+ schema: schema.name,
113
+ table: table.name,
114
+ column: dep.referencedColumn,
115
+ referencedColumn: dep.column
116
+ });
117
+ }
118
+ }
119
+ }
120
+ }
121
+ }
122
+ }
123
+ return schemas;
124
+ }
125
+ async getExistingDescriptions(schemaName, tableName) {
126
+ const descriptions = await this.driver.getExistingDescriptions(schemaName, tableName);
127
+ const map = new Map();
128
+ for (const desc of descriptions) {
129
+ const key = desc.target === 'table' ? '__TABLE__' : desc.targetName;
130
+ map.set(key, desc.description);
131
+ }
132
+ return map;
133
+ }
134
+ }
135
+ exports.Introspector = Introspector;
136
+ /**
137
+ * Data sampler
138
+ * Analyzes table data and gathers column statistics
139
+ */
140
+ class DataSampler {
141
+ constructor(driver, config) {
142
+ this.driver = driver;
143
+ this.config = config;
144
+ }
145
+ async analyzeTable(schemaName, tableName, columns) {
146
+ for (const column of columns) {
147
+ const stats = await this.driver.getColumnStatistics(schemaName, tableName, column.name, column.dataType, this.config.cardinalityThreshold, this.config.sampleSize);
148
+ // Convert AutoDocColumnStatistics to ColumnStatistics
149
+ column.statistics = {
150
+ totalRows: stats.totalRows,
151
+ distinctCount: stats.distinctCount,
152
+ uniquenessRatio: stats.uniquenessRatio,
153
+ nullCount: stats.nullCount,
154
+ nullPercentage: stats.nullPercentage,
155
+ sampleValues: stats.sampleValues,
156
+ min: stats.min,
157
+ max: stats.max,
158
+ avg: stats.avg,
159
+ stdDev: stats.stdDev,
160
+ avgLength: stats.avgLength,
161
+ maxLength: stats.maxLength,
162
+ minLength: stats.minLength
163
+ };
164
+ // Set possible values if low cardinality
165
+ if (stats.valueDistribution && stats.valueDistribution.length > 0) {
166
+ column.possibleValues = stats.valueDistribution.map(v => v.value);
167
+ }
168
+ }
169
+ }
170
+ }
171
+ exports.DataSampler = DataSampler;
172
+ //# sourceMappingURL=Database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Database.js","sourceRoot":"","sources":["../../src/database/Database.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAAkD;AAClD,0EAAoE;AAIpE,yCAAuC,CAAC,gCAAgC;AACxE,qCAAmC,CAAC,gCAAgC;AACpE,0CAAwC,CAAC,gCAAgC;AAEzE;;GAEG;AACH,SAAgB,YAAY,CAAC,MAA+B;IAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBACjD,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;IAE1E,MAAM,MAAM,GAAG,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAC1D,wCAAiB,EACjB,WAAW,EACX,MAAM,CACP,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,qBAAqB,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAjBD,oCAiBC;AAED;;;GAGG;AACH,MAAa,kBAAkB;IAG7B,YAAY,QAAiC;QAC3C,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,SAAiB,EACjB,aAAqB,CAAC;QAEtB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAI,SAAS,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,kDAAkD;IAC3C,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AA9BD,gDA8BC;AAED;;;GAGG;AACH,MAAa,YAAY;IACvB,YAAoB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAE1C,KAAK,CAAC,UAAU,CACrB,YAAgC,EAChC,WAA8B;QAE9B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAE/E,gDAAgD;QAChD,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;YAErC,KAAK,MAAM,YAAY,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBAChD,sDAAsD;gBACtD,MAAM,SAAS,GAA0B,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC3E,MAAM,EAAE,EAAE,CAAC,gBAAgB;oBAC3B,KAAK,EAAE,EAAE,CAAC,eAAe;oBACzB,MAAM,EAAE,EAAE,CAAC,UAAU;oBACrB,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;iBACtC,CAAC,CAAC,CAAC;gBAEJ,kBAAkB;gBAClB,MAAM,OAAO,GAAuB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnE,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,YAAY,EAAE,GAAG,CAAC,YAAY;oBAC9B,YAAY,EAAE,GAAG,CAAC,YAAY;oBAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;oBACpC,YAAY,EAAE,GAAG,CAAC,YAAY;oBAC9B,qBAAqB,EAAE,EAAE;iBAC1B,CAAC,CAAC,CAAC;gBAEJ,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,YAAY,CAAC,SAAS;oBAC5B,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,SAAS;oBACT,UAAU,EAAE,EAAE,EAAE,0BAA0B;oBAC1C,OAAO;oBACP,qBAAqB,EAAE,EAAE;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,MAAM;gBACN,qBAAqB,EAAE,EAAE;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC9D,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;wBACxE,IAAI,WAAW,EAAE,CAAC;4BAChB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gCAC1F,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;oCAC1B,MAAM,EAAE,MAAM,CAAC,IAAI;oCACnB,KAAK,EAAE,KAAK,CAAC,IAAI;oCACjB,MAAM,EAAE,GAAG,CAAC,gBAAgB;oCAC5B,gBAAgB,EAAE,GAAG,CAAC,MAAM;iCAC7B,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAClC,UAAkB,EAClB,SAAiB;QAEjB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACtF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEtC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YACpE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA3FD,oCA2FC;AAED;;;GAGG;AACH,MAAa,WAAW;IACtB,YACU,MAAyB,EACzB,MAAsB;QADtB,WAAM,GAAN,MAAM,CAAmB;QACzB,WAAM,GAAN,MAAM,CAAgB;IAC7B,CAAC;IAEG,KAAK,CAAC,YAAY,CACvB,UAAkB,EAClB,SAAiB,EACjB,OAA2B;QAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CACjD,UAAU,EACV,SAAS,EACT,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CACvB,CAAC;YAEF,sDAAsD;YACtD,MAAM,CAAC,UAAU,GAAG;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC;YAEF,yCAAyC;YACzC,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA5CD,kCA4CC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Topological sorting of database tables based on foreign key dependencies
3
+ * Implements Kahn's algorithm
4
+ */
5
+ import { SchemaDefinition } from '../types/state.js';
6
+ import { DependencyGraph, TableNode } from '../types/analysis.js';
7
+ export declare class TopologicalSorter {
8
+ /**
9
+ * Build dependency graph and sort topologically
10
+ */
11
+ buildAndSort(schemas: SchemaDefinition[]): DependencyGraph;
12
+ /**
13
+ * Build dependency graph from schemas
14
+ */
15
+ private buildGraph;
16
+ /**
17
+ * Perform topological sort using Kahn's algorithm
18
+ */
19
+ private sort;
20
+ /**
21
+ * Detect cycles in the dependency graph
22
+ */
23
+ detectCycles(nodes: Map<string, TableNode>): string[][];
24
+ }
25
+ //# sourceMappingURL=TopologicalSorter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopologicalSorter.d.ts","sourceRoot":"","sources":["../../src/database/TopologicalSorter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAElE,qBAAa,iBAAiB;IAC5B;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,eAAe;IAUjE;;OAEG;IACH,OAAO,CAAC,UAAU;IAyClB;;OAEG;IACH,OAAO,CAAC,IAAI;IAsEZ;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE;CAiC/D"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Topological sorting of database tables based on foreign key dependencies
4
+ * Implements Kahn's algorithm
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TopologicalSorter = void 0;
8
+ class TopologicalSorter {
9
+ /**
10
+ * Build dependency graph and sort topologically
11
+ */
12
+ buildAndSort(schemas) {
13
+ // Build graph from schemas
14
+ const nodes = this.buildGraph(schemas);
15
+ // Perform topological sort
16
+ const levels = this.sort(nodes);
17
+ return { nodes, levels };
18
+ }
19
+ /**
20
+ * Build dependency graph from schemas
21
+ */
22
+ buildGraph(schemas) {
23
+ const nodes = new Map();
24
+ // Create all nodes first
25
+ for (const schema of schemas) {
26
+ for (const table of schema.tables) {
27
+ const fullName = `${schema.name}.${table.name}`;
28
+ nodes.set(fullName, {
29
+ schema: schema.name,
30
+ table: table.name,
31
+ fullName,
32
+ dependsOn: [],
33
+ dependents: [],
34
+ level: -1,
35
+ tableDefinition: table
36
+ });
37
+ }
38
+ }
39
+ // Wire up dependencies
40
+ for (const schema of schemas) {
41
+ for (const table of schema.tables) {
42
+ const fullName = `${schema.name}.${table.name}`;
43
+ const node = nodes.get(fullName);
44
+ // Add dependencies
45
+ for (const dep of table.dependsOn) {
46
+ const depFullName = `${dep.schema}.${dep.table}`;
47
+ const depNode = nodes.get(depFullName);
48
+ if (depNode) {
49
+ node.dependsOn.push(depNode);
50
+ depNode.dependents.push(node);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ return nodes;
56
+ }
57
+ /**
58
+ * Perform topological sort using Kahn's algorithm
59
+ */
60
+ sort(nodes) {
61
+ const levels = [];
62
+ const inDegree = new Map();
63
+ const processed = new Set();
64
+ // Calculate in-degrees
65
+ for (const [fullName, node] of nodes) {
66
+ inDegree.set(fullName, node.dependsOn.length);
67
+ }
68
+ let currentLevel = 0;
69
+ while (processed.size < nodes.size) {
70
+ // Find all nodes with in-degree 0 (no unprocessed dependencies)
71
+ const currentLevelNodes = [];
72
+ for (const [fullName, node] of nodes) {
73
+ if (!processed.has(fullName) && inDegree.get(fullName) === 0) {
74
+ currentLevelNodes.push(node);
75
+ node.level = currentLevel;
76
+ }
77
+ }
78
+ // Check for cycles
79
+ if (currentLevelNodes.length === 0 && processed.size < nodes.size) {
80
+ // We have a cycle - find remaining nodes and assign them to current level
81
+ const remaining = [];
82
+ for (const [fullName, node] of nodes) {
83
+ if (!processed.has(fullName)) {
84
+ node.level = currentLevel;
85
+ remaining.push(node);
86
+ }
87
+ }
88
+ if (remaining.length > 0) {
89
+ levels.push(remaining);
90
+ }
91
+ break;
92
+ }
93
+ // Add current level to results
94
+ if (currentLevelNodes.length > 0) {
95
+ levels.push(currentLevelNodes);
96
+ // Mark nodes as processed
97
+ for (const node of currentLevelNodes) {
98
+ processed.add(node.fullName);
99
+ // Decrement in-degree for dependents
100
+ for (const dependent of node.dependents) {
101
+ const currentInDegree = inDegree.get(dependent.fullName);
102
+ inDegree.set(dependent.fullName, currentInDegree - 1);
103
+ }
104
+ }
105
+ }
106
+ currentLevel++;
107
+ }
108
+ // Update table definitions with dependency level
109
+ for (const [fullName, node] of nodes) {
110
+ if (node.tableDefinition) {
111
+ node.tableDefinition.dependencyLevel = node.level;
112
+ }
113
+ }
114
+ return levels;
115
+ }
116
+ /**
117
+ * Detect cycles in the dependency graph
118
+ */
119
+ detectCycles(nodes) {
120
+ const cycles = [];
121
+ const visited = new Set();
122
+ const recursionStack = new Set();
123
+ const dfs = (node, path) => {
124
+ visited.add(node.fullName);
125
+ recursionStack.add(node.fullName);
126
+ path.push(node.fullName);
127
+ for (const dep of node.dependsOn) {
128
+ if (!visited.has(dep.fullName)) {
129
+ dfs(dep, [...path]);
130
+ }
131
+ else if (recursionStack.has(dep.fullName)) {
132
+ // Found a cycle
133
+ const cycleStart = path.indexOf(dep.fullName);
134
+ const cycle = path.slice(cycleStart);
135
+ cycle.push(dep.fullName);
136
+ cycles.push(cycle);
137
+ }
138
+ }
139
+ recursionStack.delete(node.fullName);
140
+ };
141
+ for (const [fullName, node] of nodes) {
142
+ if (!visited.has(fullName)) {
143
+ dfs(node, []);
144
+ }
145
+ }
146
+ return cycles;
147
+ }
148
+ }
149
+ exports.TopologicalSorter = TopologicalSorter;
150
+ //# sourceMappingURL=TopologicalSorter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopologicalSorter.js","sourceRoot":"","sources":["../../src/database/TopologicalSorter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Exports for database module
3
+ */
4
+ export { DatabaseConnection, Introspector, DataSampler, createDriver } from './Database.js';
5
+ export { TopologicalSorter } from './TopologicalSorter.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Exports for database module
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TopologicalSorter = exports.createDriver = exports.DataSampler = exports.Introspector = exports.DatabaseConnection = void 0;
7
+ var Database_js_1 = require("./Database.js");
8
+ Object.defineProperty(exports, "DatabaseConnection", { enumerable: true, get: function () { return Database_js_1.DatabaseConnection; } });
9
+ Object.defineProperty(exports, "Introspector", { enumerable: true, get: function () { return Database_js_1.Introspector; } });
10
+ Object.defineProperty(exports, "DataSampler", { enumerable: true, get: function () { return Database_js_1.DataSampler; } });
11
+ Object.defineProperty(exports, "createDriver", { enumerable: true, get: function () { return Database_js_1.createDriver; } });
12
+ var TopologicalSorter_js_1 = require("./TopologicalSorter.js");
13
+ Object.defineProperty(exports, "TopologicalSorter", { enumerable: true, get: function () { return TopologicalSorter_js_1.TopologicalSorter; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA4F;AAAnF,iHAAA,kBAAkB,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,2GAAA,YAAY,OAAA;AACpE,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Column Statistics Cache
3
+ * Stores pre-computed column statistics to avoid redundant database queries
4
+ * Used across discovery and analysis phases
5
+ */
6
+ import { CachedColumnStats, TableStatsCache } from '../types/discovery.js';
7
+ export declare class ColumnStatsCache {
8
+ private tableCache;
9
+ /**
10
+ * Get table key for cache lookup
11
+ */
12
+ private getTableKey;
13
+ /**
14
+ * Get column key for cache lookup
15
+ */
16
+ private getColumnKey;
17
+ /**
18
+ * Store column statistics
19
+ */
20
+ setColumnStats(stats: CachedColumnStats): void;
21
+ /**
22
+ * Get column statistics
23
+ */
24
+ getColumnStats(schemaName: string, tableName: string, columnName: string): CachedColumnStats | undefined;
25
+ /**
26
+ * Get all column statistics for a table
27
+ */
28
+ getTableStats(schemaName: string, tableName: string): TableStatsCache | undefined;
29
+ /**
30
+ * Get all columns in a table
31
+ */
32
+ getTableColumns(schemaName: string, tableName: string): CachedColumnStats[];
33
+ /**
34
+ * Check if column stats exist
35
+ */
36
+ hasColumnStats(schemaName: string, tableName: string, columnName: string): boolean;
37
+ /**
38
+ * Check if table stats exist
39
+ */
40
+ hasTableStats(schemaName: string, tableName: string): boolean;
41
+ /**
42
+ * Get all tables with cached stats
43
+ */
44
+ getAllTables(): TableStatsCache[];
45
+ /**
46
+ * Find columns matching a pattern across all tables
47
+ * Useful for finding potential FK relationships
48
+ */
49
+ findColumnsMatching(predicate: (stats: CachedColumnStats) => boolean): CachedColumnStats[];
50
+ /**
51
+ * Find columns with similar names across tables
52
+ * Example: Find all columns named "*_id" or "*ID"
53
+ */
54
+ findColumnsByNamePattern(pattern: RegExp): CachedColumnStats[];
55
+ /**
56
+ * Find highly unique columns (potential PKs)
57
+ */
58
+ findUniqueColumns(minUniqueness?: number): CachedColumnStats[];
59
+ /**
60
+ * Find columns with same name across multiple tables
61
+ * Returns Map of columnName -> array of CachedColumnStats
62
+ */
63
+ findDuplicateColumnNames(): Map<string, CachedColumnStats[]>;
64
+ /**
65
+ * Get cache statistics
66
+ */
67
+ getCacheStats(): {
68
+ totalTables: number;
69
+ totalColumns: number;
70
+ totalStatsBytes: number;
71
+ avgColumnsPerTable: number;
72
+ };
73
+ /**
74
+ * Clear all cached stats
75
+ */
76
+ clear(): void;
77
+ /**
78
+ * Export cache to JSON for persistence in state file
79
+ */
80
+ toStateJSON(): import('../types/state.js').ColumnStatisticsCache;
81
+ /**
82
+ * Import cache from state JSON
83
+ */
84
+ fromStateJSON(data: import('../types/state.js').ColumnStatisticsCache): void;
85
+ /**
86
+ * Merge cached stats into schema column definitions
87
+ * Replaces separate columnStatistics cache with embedded stats
88
+ */
89
+ mergeIntoSchemas(schemas: import('../types/state.js').SchemaDefinition[]): void;
90
+ }
91
+ //# sourceMappingURL=ColumnStatsCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnStatsCache.d.ts","sourceRoot":"","sources":["../../src/discovery/ColumnStatsCache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE3E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAA2C;IAE7D;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACI,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAkBrD;;OAEG;IACI,cAAc,CACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,iBAAiB,GAAG,SAAS;IAMhC;;OAEG;IACI,aAAa,CAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,SAAS;IAK9B;;OAEG;IACI,eAAe,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,iBAAiB,EAAE;IAKtB;;OAEG;IACI,cAAc,CACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO;IAIV;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAIpE;;OAEG;IACI,YAAY,IAAI,eAAe,EAAE;IAIxC;;;OAGG;IACI,mBAAmB,CACxB,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAC/C,iBAAiB,EAAE;IActB;;;OAGG;IACI,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAIrE;;OAEG;IACI,iBAAiB,CAAC,aAAa,GAAE,MAAa,GAAG,iBAAiB,EAAE;IAM3E;;;OAGG;IACI,wBAAwB,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAiBnE;;OAEG;IACI,aAAa,IAAI;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IAmBD;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACI,WAAW,IAAI,OAAO,mBAAmB,EAAE,qBAAqB;IA2BvE;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,OAAO,mBAAmB,EAAE,qBAAqB,GAAG,IAAI;IAmBnF;;;OAGG;IACI,gBAAgB,CAAC,OAAO,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,IAAI;CAgCvF"}