driftdetect-core 0.1.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 (221) hide show
  1. package/dist/analyzers/ast-analyzer.d.ts +251 -0
  2. package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/ast-analyzer.js +548 -0
  4. package/dist/analyzers/ast-analyzer.js.map +1 -0
  5. package/dist/analyzers/flow-analyzer.d.ts +241 -0
  6. package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
  7. package/dist/analyzers/flow-analyzer.js +1219 -0
  8. package/dist/analyzers/flow-analyzer.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +18 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +19 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/semantic-analyzer.d.ts +252 -0
  14. package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
  15. package/dist/analyzers/semantic-analyzer.js +1182 -0
  16. package/dist/analyzers/semantic-analyzer.js.map +1 -0
  17. package/dist/analyzers/type-analyzer.d.ts +289 -0
  18. package/dist/analyzers/type-analyzer.d.ts.map +1 -0
  19. package/dist/analyzers/type-analyzer.js +1269 -0
  20. package/dist/analyzers/type-analyzer.js.map +1 -0
  21. package/dist/analyzers/types.d.ts +537 -0
  22. package/dist/analyzers/types.d.ts.map +1 -0
  23. package/dist/analyzers/types.js +11 -0
  24. package/dist/analyzers/types.js.map +1 -0
  25. package/dist/config/config-loader.d.ts +166 -0
  26. package/dist/config/config-loader.d.ts.map +1 -0
  27. package/dist/config/config-loader.js +429 -0
  28. package/dist/config/config-loader.js.map +1 -0
  29. package/dist/config/config-validator.d.ts +204 -0
  30. package/dist/config/config-validator.d.ts.map +1 -0
  31. package/dist/config/config-validator.js +632 -0
  32. package/dist/config/config-validator.js.map +1 -0
  33. package/dist/config/defaults.d.ts +8 -0
  34. package/dist/config/defaults.d.ts.map +1 -0
  35. package/dist/config/defaults.js +26 -0
  36. package/dist/config/defaults.js.map +1 -0
  37. package/dist/config/index.d.ts +10 -0
  38. package/dist/config/index.d.ts.map +1 -0
  39. package/dist/config/index.js +10 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/config/types.d.ts +47 -0
  42. package/dist/config/types.d.ts.map +1 -0
  43. package/dist/config/types.js +7 -0
  44. package/dist/config/types.js.map +1 -0
  45. package/dist/index.d.ts +37 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/manifest/exporter.d.ts +21 -0
  50. package/dist/manifest/exporter.d.ts.map +1 -0
  51. package/dist/manifest/exporter.js +339 -0
  52. package/dist/manifest/exporter.js.map +1 -0
  53. package/dist/manifest/index.d.ts +14 -0
  54. package/dist/manifest/index.d.ts.map +1 -0
  55. package/dist/manifest/index.js +15 -0
  56. package/dist/manifest/index.js.map +1 -0
  57. package/dist/manifest/manifest-store.d.ts +111 -0
  58. package/dist/manifest/manifest-store.d.ts.map +1 -0
  59. package/dist/manifest/manifest-store.js +418 -0
  60. package/dist/manifest/manifest-store.js.map +1 -0
  61. package/dist/manifest/types.d.ts +238 -0
  62. package/dist/manifest/types.d.ts.map +1 -0
  63. package/dist/manifest/types.js +11 -0
  64. package/dist/manifest/types.js.map +1 -0
  65. package/dist/matcher/confidence-scorer.d.ts +188 -0
  66. package/dist/matcher/confidence-scorer.d.ts.map +1 -0
  67. package/dist/matcher/confidence-scorer.js +302 -0
  68. package/dist/matcher/confidence-scorer.js.map +1 -0
  69. package/dist/matcher/index.d.ts +24 -0
  70. package/dist/matcher/index.d.ts.map +1 -0
  71. package/dist/matcher/index.js +26 -0
  72. package/dist/matcher/index.js.map +1 -0
  73. package/dist/matcher/outlier-detector.d.ts +252 -0
  74. package/dist/matcher/outlier-detector.d.ts.map +1 -0
  75. package/dist/matcher/outlier-detector.js +544 -0
  76. package/dist/matcher/outlier-detector.js.map +1 -0
  77. package/dist/matcher/pattern-matcher.d.ts +169 -0
  78. package/dist/matcher/pattern-matcher.d.ts.map +1 -0
  79. package/dist/matcher/pattern-matcher.js +692 -0
  80. package/dist/matcher/pattern-matcher.js.map +1 -0
  81. package/dist/matcher/types.d.ts +476 -0
  82. package/dist/matcher/types.d.ts.map +1 -0
  83. package/dist/matcher/types.js +36 -0
  84. package/dist/matcher/types.js.map +1 -0
  85. package/dist/parsers/base-parser.d.ts +282 -0
  86. package/dist/parsers/base-parser.d.ts.map +1 -0
  87. package/dist/parsers/base-parser.js +421 -0
  88. package/dist/parsers/base-parser.js.map +1 -0
  89. package/dist/parsers/css-parser.d.ts +225 -0
  90. package/dist/parsers/css-parser.d.ts.map +1 -0
  91. package/dist/parsers/css-parser.js +477 -0
  92. package/dist/parsers/css-parser.js.map +1 -0
  93. package/dist/parsers/index.d.ts +15 -0
  94. package/dist/parsers/index.d.ts.map +1 -0
  95. package/dist/parsers/index.js +15 -0
  96. package/dist/parsers/index.js.map +1 -0
  97. package/dist/parsers/json-parser.d.ts +219 -0
  98. package/dist/parsers/json-parser.d.ts.map +1 -0
  99. package/dist/parsers/json-parser.js +602 -0
  100. package/dist/parsers/json-parser.js.map +1 -0
  101. package/dist/parsers/markdown-parser.d.ts +276 -0
  102. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  103. package/dist/parsers/markdown-parser.js +731 -0
  104. package/dist/parsers/markdown-parser.js.map +1 -0
  105. package/dist/parsers/parser-manager.d.ts +294 -0
  106. package/dist/parsers/parser-manager.d.ts.map +1 -0
  107. package/dist/parsers/parser-manager.js +738 -0
  108. package/dist/parsers/parser-manager.js.map +1 -0
  109. package/dist/parsers/python-parser.d.ts +204 -0
  110. package/dist/parsers/python-parser.d.ts.map +1 -0
  111. package/dist/parsers/python-parser.js +517 -0
  112. package/dist/parsers/python-parser.js.map +1 -0
  113. package/dist/parsers/types.d.ts +43 -0
  114. package/dist/parsers/types.d.ts.map +1 -0
  115. package/dist/parsers/types.js +7 -0
  116. package/dist/parsers/types.js.map +1 -0
  117. package/dist/parsers/typescript-parser.d.ts +264 -0
  118. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  119. package/dist/parsers/typescript-parser.js +658 -0
  120. package/dist/parsers/typescript-parser.js.map +1 -0
  121. package/dist/rules/evaluator.d.ts +305 -0
  122. package/dist/rules/evaluator.d.ts.map +1 -0
  123. package/dist/rules/evaluator.js +579 -0
  124. package/dist/rules/evaluator.js.map +1 -0
  125. package/dist/rules/index.d.ts +13 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +13 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/quick-fix-generator.d.ts +334 -0
  130. package/dist/rules/quick-fix-generator.d.ts.map +1 -0
  131. package/dist/rules/quick-fix-generator.js +1075 -0
  132. package/dist/rules/quick-fix-generator.js.map +1 -0
  133. package/dist/rules/rule-engine.d.ts +241 -0
  134. package/dist/rules/rule-engine.d.ts.map +1 -0
  135. package/dist/rules/rule-engine.js +585 -0
  136. package/dist/rules/rule-engine.js.map +1 -0
  137. package/dist/rules/severity-manager.d.ts +394 -0
  138. package/dist/rules/severity-manager.d.ts.map +1 -0
  139. package/dist/rules/severity-manager.js +619 -0
  140. package/dist/rules/severity-manager.js.map +1 -0
  141. package/dist/rules/types.d.ts +370 -0
  142. package/dist/rules/types.d.ts.map +1 -0
  143. package/dist/rules/types.js +133 -0
  144. package/dist/rules/types.js.map +1 -0
  145. package/dist/rules/variant-manager.d.ts +388 -0
  146. package/dist/rules/variant-manager.d.ts.map +1 -0
  147. package/dist/rules/variant-manager.js +777 -0
  148. package/dist/rules/variant-manager.js.map +1 -0
  149. package/dist/scanner/change-detector.d.ts +164 -0
  150. package/dist/scanner/change-detector.d.ts.map +1 -0
  151. package/dist/scanner/change-detector.js +263 -0
  152. package/dist/scanner/change-detector.js.map +1 -0
  153. package/dist/scanner/dependency-graph.d.ts +270 -0
  154. package/dist/scanner/dependency-graph.d.ts.map +1 -0
  155. package/dist/scanner/dependency-graph.js +436 -0
  156. package/dist/scanner/dependency-graph.js.map +1 -0
  157. package/dist/scanner/file-walker.d.ts +127 -0
  158. package/dist/scanner/file-walker.d.ts.map +1 -0
  159. package/dist/scanner/file-walker.js +526 -0
  160. package/dist/scanner/file-walker.js.map +1 -0
  161. package/dist/scanner/index.d.ts +12 -0
  162. package/dist/scanner/index.d.ts.map +1 -0
  163. package/dist/scanner/index.js +12 -0
  164. package/dist/scanner/index.js.map +1 -0
  165. package/dist/scanner/types.d.ts +218 -0
  166. package/dist/scanner/types.d.ts.map +1 -0
  167. package/dist/scanner/types.js +10 -0
  168. package/dist/scanner/types.js.map +1 -0
  169. package/dist/scanner/worker-pool.d.ts +317 -0
  170. package/dist/scanner/worker-pool.d.ts.map +1 -0
  171. package/dist/scanner/worker-pool.js +571 -0
  172. package/dist/scanner/worker-pool.js.map +1 -0
  173. package/dist/store/cache-manager.d.ts +179 -0
  174. package/dist/store/cache-manager.d.ts.map +1 -0
  175. package/dist/store/cache-manager.js +391 -0
  176. package/dist/store/cache-manager.js.map +1 -0
  177. package/dist/store/history-store.d.ts +314 -0
  178. package/dist/store/history-store.d.ts.map +1 -0
  179. package/dist/store/history-store.js +707 -0
  180. package/dist/store/history-store.js.map +1 -0
  181. package/dist/store/index.d.ts +20 -0
  182. package/dist/store/index.d.ts.map +1 -0
  183. package/dist/store/index.js +26 -0
  184. package/dist/store/index.js.map +1 -0
  185. package/dist/store/lock-file-manager.d.ts +202 -0
  186. package/dist/store/lock-file-manager.d.ts.map +1 -0
  187. package/dist/store/lock-file-manager.js +475 -0
  188. package/dist/store/lock-file-manager.js.map +1 -0
  189. package/dist/store/pattern-store.d.ts +289 -0
  190. package/dist/store/pattern-store.d.ts.map +1 -0
  191. package/dist/store/pattern-store.js +936 -0
  192. package/dist/store/pattern-store.js.map +1 -0
  193. package/dist/store/schema-validator.d.ts +159 -0
  194. package/dist/store/schema-validator.d.ts.map +1 -0
  195. package/dist/store/schema-validator.js +1096 -0
  196. package/dist/store/schema-validator.js.map +1 -0
  197. package/dist/store/types.d.ts +585 -0
  198. package/dist/store/types.d.ts.map +1 -0
  199. package/dist/store/types.js +82 -0
  200. package/dist/store/types.js.map +1 -0
  201. package/dist/types/analysis.d.ts +19 -0
  202. package/dist/types/analysis.d.ts.map +1 -0
  203. package/dist/types/analysis.js +5 -0
  204. package/dist/types/analysis.js.map +1 -0
  205. package/dist/types/common.d.ts +7 -0
  206. package/dist/types/common.d.ts.map +1 -0
  207. package/dist/types/common.js +5 -0
  208. package/dist/types/common.js.map +1 -0
  209. package/dist/types/index.d.ts +12 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +10 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/dist/types/patterns.d.ts +40 -0
  214. package/dist/types/patterns.d.ts.map +1 -0
  215. package/dist/types/patterns.js +7 -0
  216. package/dist/types/patterns.js.map +1 -0
  217. package/dist/types/violations.d.ts +7 -0
  218. package/dist/types/violations.d.ts.map +1 -0
  219. package/dist/types/violations.js +7 -0
  220. package/dist/types/violations.js.map +1 -0
  221. package/package.json +46 -0
@@ -0,0 +1,517 @@
1
+ /**
2
+ * Python Parser - Python parsing for AST extraction
3
+ *
4
+ * Extracts imports, classes, functions, and decorators from
5
+ * Python files using regex-based parsing.
6
+ *
7
+ * @requirements 3.2
8
+ */
9
+ import { BaseParser } from './base-parser.js';
10
+ /**
11
+ * Python parser using regex-based parsing.
12
+ *
13
+ * Provides AST parsing and extraction of imports, classes,
14
+ * functions, and decorators from Python source files.
15
+ *
16
+ * @requirements 3.2 - Support Python parsing
17
+ * @requirements 3.3 - Graceful degradation on parse errors
18
+ */
19
+ export class PythonParser extends BaseParser {
20
+ language = 'python';
21
+ extensions = ['.py', '.pyw', '.pyi'];
22
+ /**
23
+ * Parse Python source code into an AST.
24
+ *
25
+ * @param source - The source code to parse
26
+ * @param filePath - Optional file path for error reporting
27
+ * @returns PythonParseResult containing the AST and extracted information
28
+ *
29
+ * @requirements 3.2, 3.3
30
+ */
31
+ parse(source, _filePath) {
32
+ try {
33
+ const lines = source.split('\n');
34
+ const rootChildren = [];
35
+ // Extract semantic information
36
+ const imports = this.extractImports(source, lines);
37
+ const decorators = this.extractDecorators(source, lines);
38
+ const classes = this.extractClasses(source, lines);
39
+ const functions = this.extractFunctions(source, lines);
40
+ // Build AST nodes for imports
41
+ for (const imp of imports) {
42
+ const importNode = this.createImportNode(imp, source);
43
+ rootChildren.push(importNode);
44
+ }
45
+ // Build AST nodes for classes
46
+ for (const cls of classes) {
47
+ const classNode = this.createClassNode(cls, source);
48
+ rootChildren.push(classNode);
49
+ }
50
+ // Build AST nodes for functions
51
+ for (const func of functions) {
52
+ const funcNode = this.createFunctionNode(func, source);
53
+ rootChildren.push(funcNode);
54
+ }
55
+ // Create root node
56
+ const endPosition = lines.length > 0
57
+ ? { row: lines.length - 1, column: lines[lines.length - 1]?.length ?? 0 }
58
+ : { row: 0, column: 0 };
59
+ const rootNode = this.createNode('Module', source, { row: 0, column: 0 }, endPosition, rootChildren);
60
+ const ast = this.createAST(rootNode, source);
61
+ return {
62
+ ...this.createSuccessResult(ast),
63
+ imports,
64
+ classes,
65
+ functions,
66
+ decorators,
67
+ };
68
+ }
69
+ catch (error) {
70
+ const errorMessage = error instanceof Error ? error.message : 'Unknown parse error';
71
+ return {
72
+ ...this.createFailureResult([this.createError(errorMessage, { row: 0, column: 0 })]),
73
+ imports: [],
74
+ classes: [],
75
+ functions: [],
76
+ decorators: [],
77
+ };
78
+ }
79
+ }
80
+ /**
81
+ * Query the AST for nodes matching a pattern.
82
+ *
83
+ * Supports querying by node type (e.g., 'ImportStatement', 'ClassDef', 'FunctionDef').
84
+ *
85
+ * @param ast - The AST to query
86
+ * @param pattern - The node type to search for
87
+ * @returns Array of matching AST nodes
88
+ *
89
+ * @requirements 3.5
90
+ */
91
+ query(ast, pattern) {
92
+ return this.findNodesByType(ast, pattern);
93
+ }
94
+ // ============================================
95
+ // Import Extraction
96
+ // ============================================
97
+ /**
98
+ * Extract all import statements from Python source.
99
+ */
100
+ extractImports(source, lines) {
101
+ const imports = [];
102
+ // Match 'import x' and 'import x as y' statements
103
+ // Use [ \t]* instead of \s* to avoid matching newlines as indentation
104
+ const importRegex = /^([ \t]*)import\s+(.+)$/gm;
105
+ let match;
106
+ while ((match = importRegex.exec(source)) !== null) {
107
+ const lineStart = this.getLineNumber(source, match.index);
108
+ const indent = match[1]?.length ?? 0;
109
+ const importPart = match[2]?.trim() ?? '';
110
+ // Parse the import names
111
+ const names = this.parseImportNames(importPart);
112
+ for (const nameInfo of names) {
113
+ imports.push({
114
+ module: nameInfo.name,
115
+ names: [{ name: nameInfo.name, alias: nameInfo.alias }],
116
+ isFromImport: false,
117
+ level: 0,
118
+ startPosition: { row: lineStart, column: indent },
119
+ endPosition: { row: lineStart, column: indent + (match[0]?.length ?? 0) },
120
+ });
121
+ }
122
+ }
123
+ // Match 'from x import y' statements (including multi-line)
124
+ // Use [ \t]* instead of \s* to avoid matching newlines as indentation
125
+ const fromImportRegex = /^([ \t]*)from\s+(\.*)(\S*)\s+import\s+(.+)$/gm;
126
+ while ((match = fromImportRegex.exec(source)) !== null) {
127
+ const lineStart = this.getLineNumber(source, match.index);
128
+ const indent = match[1]?.length ?? 0;
129
+ const dots = match[2] ?? '';
130
+ const module = match[3] ?? '';
131
+ let importPart = match[4]?.trim() ?? '';
132
+ // Handle parenthesized imports
133
+ if (importPart.startsWith('(')) {
134
+ const endParen = this.findMatchingParen(source, match.index + (match[0]?.indexOf('(') ?? 0));
135
+ if (endParen > 0) {
136
+ importPart = source.slice(match.index + (match[0]?.indexOf('(') ?? 0) + 1, endParen).trim();
137
+ }
138
+ }
139
+ // Parse the imported names
140
+ const names = this.parseImportNames(importPart);
141
+ const endLine = this.getLineNumber(source, match.index + (match[0]?.length ?? 0));
142
+ imports.push({
143
+ module: module,
144
+ names,
145
+ isFromImport: true,
146
+ level: dots.length,
147
+ startPosition: { row: lineStart, column: indent },
148
+ endPosition: { row: endLine, column: (lines[endLine]?.length ?? 0) },
149
+ });
150
+ }
151
+ return imports;
152
+ }
153
+ /**
154
+ * Parse comma-separated import names with optional aliases.
155
+ */
156
+ parseImportNames(importPart) {
157
+ const names = [];
158
+ // Remove parentheses and split by comma
159
+ const cleanPart = importPart.replace(/[()]/g, '').trim();
160
+ const parts = cleanPart.split(',');
161
+ for (const part of parts) {
162
+ const trimmed = part.trim();
163
+ if (!trimmed || trimmed === '\\')
164
+ continue;
165
+ // Check for 'as' alias
166
+ const asMatch = trimmed.match(/^(\S+)\s+as\s+(\S+)$/);
167
+ if (asMatch) {
168
+ names.push({
169
+ name: asMatch[1] ?? '',
170
+ alias: asMatch[2] ?? null,
171
+ });
172
+ }
173
+ else {
174
+ // Handle line continuation
175
+ const name = trimmed.replace(/\\$/, '').trim();
176
+ if (name) {
177
+ names.push({ name, alias: null });
178
+ }
179
+ }
180
+ }
181
+ return names;
182
+ }
183
+ // ============================================
184
+ // Decorator Extraction
185
+ // ============================================
186
+ /**
187
+ * Extract all decorators from Python source.
188
+ */
189
+ extractDecorators(source, _lines) {
190
+ const decorators = [];
191
+ // Use [ \t]* instead of \s* to avoid matching newlines as indentation
192
+ const decoratorRegex = /^([ \t]*)@(\w+(?:\.\w+)*)(\([^)]*\))?/gm;
193
+ let match;
194
+ while ((match = decoratorRegex.exec(source)) !== null) {
195
+ const lineStart = this.getLineNumber(source, match.index);
196
+ const indent = match[1]?.length ?? 0;
197
+ const name = match[2] ?? '';
198
+ const args = match[3] ? match[3].slice(1, -1) : null;
199
+ decorators.push({
200
+ name,
201
+ arguments: args,
202
+ startPosition: { row: lineStart, column: indent },
203
+ endPosition: { row: lineStart, column: indent + (match[0]?.length ?? 0) },
204
+ });
205
+ }
206
+ return decorators;
207
+ }
208
+ /**
209
+ * Get decorators that appear immediately before a given line.
210
+ */
211
+ getDecoratorsForLine(_source, lines, targetLine) {
212
+ const decorators = [];
213
+ let line = targetLine - 1;
214
+ while (line >= 0) {
215
+ const lineContent = lines[line]?.trim() ?? '';
216
+ if (lineContent.startsWith('@')) {
217
+ // Extract decorator name
218
+ const match = lineContent.match(/^@(\w+(?:\.\w+)*)(?:\(.*\))?$/);
219
+ if (match) {
220
+ decorators.unshift(match[1] ?? '');
221
+ }
222
+ else {
223
+ decorators.unshift(lineContent.slice(1));
224
+ }
225
+ line--;
226
+ }
227
+ else if (lineContent === '' || lineContent.startsWith('#')) {
228
+ // Skip empty lines and comments
229
+ line--;
230
+ }
231
+ else {
232
+ break;
233
+ }
234
+ }
235
+ return decorators;
236
+ }
237
+ // ============================================
238
+ // Class Extraction
239
+ // ============================================
240
+ /**
241
+ * Extract all class definitions from Python source.
242
+ */
243
+ extractClasses(source, lines) {
244
+ const classes = [];
245
+ // Use [ \t]* instead of \s* to avoid matching newlines as indentation
246
+ const classRegex = /^([ \t]*)class\s+(\w+)(?:\s*\(([^)]*)\))?\s*:/gm;
247
+ let match;
248
+ while ((match = classRegex.exec(source)) !== null) {
249
+ const lineStart = this.getLineNumber(source, match.index);
250
+ const indent = match[1]?.length ?? 0;
251
+ const name = match[2] ?? '';
252
+ const basesStr = match[3] ?? '';
253
+ // Parse base classes
254
+ const bases = basesStr
255
+ .split(',')
256
+ .map((b) => b.trim())
257
+ .filter((b) => b.length > 0);
258
+ // Get decorators
259
+ const decorators = this.getDecoratorsForLine(source, lines, lineStart);
260
+ const isDataclass = decorators.some((d) => d === 'dataclass' || d === 'dataclasses.dataclass');
261
+ // Find class body end
262
+ const classEnd = this.findBlockEnd(lines, lineStart, indent);
263
+ // Extract methods and attributes
264
+ const { methods, attributes } = this.extractClassMembers(lines, lineStart + 1, classEnd, indent);
265
+ classes.push({
266
+ name,
267
+ bases,
268
+ decorators,
269
+ methods,
270
+ attributes,
271
+ isDataclass,
272
+ startPosition: { row: lineStart, column: indent },
273
+ endPosition: { row: classEnd, column: lines[classEnd]?.length ?? 0 },
274
+ });
275
+ }
276
+ return classes;
277
+ }
278
+ /**
279
+ * Extract methods and attributes from a class body.
280
+ */
281
+ extractClassMembers(lines, startLine, endLine, classIndent) {
282
+ const methods = [];
283
+ const attributes = [];
284
+ const methodIndent = classIndent + 4; // Standard Python indentation
285
+ for (let i = startLine; i <= endLine && i < lines.length; i++) {
286
+ const line = lines[i] ?? '';
287
+ const trimmed = line.trim();
288
+ const lineIndent = line.length - line.trimStart().length;
289
+ // Skip if not at method level
290
+ if (lineIndent < methodIndent && trimmed !== '')
291
+ continue;
292
+ // Check for method definition
293
+ const methodMatch = trimmed.match(/^(?:async\s+)?def\s+(\w+)\s*\(/);
294
+ if (methodMatch && lineIndent === methodIndent) {
295
+ methods.push(methodMatch[1] ?? '');
296
+ continue;
297
+ }
298
+ // Check for class attribute (at class level, not in method)
299
+ const attrMatch = trimmed.match(/^(\w+)\s*(?::\s*\S+)?\s*=/);
300
+ if (attrMatch && lineIndent === methodIndent) {
301
+ attributes.push(attrMatch[1] ?? '');
302
+ }
303
+ }
304
+ return { methods, attributes };
305
+ }
306
+ // ============================================
307
+ // Function Extraction
308
+ // ============================================
309
+ /**
310
+ * Extract all module-level function definitions from Python source.
311
+ */
312
+ extractFunctions(source, lines) {
313
+ const functions = [];
314
+ // Use [ \t]* instead of \s* to avoid matching newlines as indentation
315
+ const funcRegex = /^([ \t]*)(async\s+)?def\s+(\w+)\s*\(([^)]*)\)(?:\s*->\s*([^:]+))?\s*:/gm;
316
+ // Collect all matches first
317
+ const allMatches = [];
318
+ for (const match of source.matchAll(funcRegex)) {
319
+ allMatches.push(match);
320
+ }
321
+ for (const match of allMatches) {
322
+ const lineStart = this.getLineNumber(source, match.index ?? 0);
323
+ const indent = match[1]?.length ?? 0;
324
+ const name = match[3] ?? '';
325
+ // Only extract module-level functions (indent 0)
326
+ // Class methods are extracted separately
327
+ if (indent !== 0)
328
+ continue;
329
+ const isAsync = !!match[2];
330
+ const paramsStr = match[4] ?? '';
331
+ const returnType = match[5]?.trim() ?? null;
332
+ // Parse parameters
333
+ const parameters = this.parseParameters(paramsStr);
334
+ // Get decorators
335
+ const decorators = this.getDecoratorsForLine(source, lines, lineStart);
336
+ // Find function body end
337
+ const funcEnd = this.findBlockEnd(lines, lineStart, indent);
338
+ // Check if function is a generator
339
+ const isGenerator = this.checkIsGenerator(lines, lineStart + 1, funcEnd);
340
+ functions.push({
341
+ name,
342
+ decorators,
343
+ parameters,
344
+ isAsync,
345
+ isGenerator,
346
+ returnType,
347
+ startPosition: { row: lineStart, column: indent },
348
+ endPosition: { row: funcEnd, column: lines[funcEnd]?.length ?? 0 },
349
+ });
350
+ }
351
+ return functions;
352
+ }
353
+ /**
354
+ * Parse function parameters.
355
+ */
356
+ parseParameters(paramsStr) {
357
+ const params = [];
358
+ const parts = paramsStr.split(',');
359
+ for (const part of parts) {
360
+ const trimmed = part.trim();
361
+ if (!trimmed)
362
+ continue;
363
+ // Extract parameter name (before : or =)
364
+ const nameMatch = trimmed.match(/^(\*{0,2}\w+)/);
365
+ if (nameMatch) {
366
+ params.push(nameMatch[1] ?? '');
367
+ }
368
+ }
369
+ return params;
370
+ }
371
+ /**
372
+ * Check if a function body contains yield statements (is a generator).
373
+ */
374
+ checkIsGenerator(lines, startLine, endLine) {
375
+ for (let i = startLine; i <= endLine && i < lines.length; i++) {
376
+ const line = lines[i]?.trim() ?? '';
377
+ if (line.match(/\byield\b/)) {
378
+ return true;
379
+ }
380
+ }
381
+ return false;
382
+ }
383
+ // ============================================
384
+ // AST Node Creation
385
+ // ============================================
386
+ /**
387
+ * Create an AST node for an import statement.
388
+ */
389
+ createImportNode(imp, source) {
390
+ const nodeType = imp.isFromImport ? 'ImportFrom' : 'Import';
391
+ const text = this.getTextForRange(source, imp.startPosition, imp.endPosition);
392
+ const children = [];
393
+ // Add module node
394
+ if (imp.module) {
395
+ children.push(this.createNode('module', imp.module, imp.startPosition, imp.endPosition, []));
396
+ }
397
+ // Add name nodes
398
+ for (const name of imp.names) {
399
+ const nameText = name.alias ? `${name.name} as ${name.alias}` : name.name;
400
+ children.push(this.createNode('alias', nameText, imp.startPosition, imp.endPosition, []));
401
+ }
402
+ return this.createNode(nodeType, text, imp.startPosition, imp.endPosition, children);
403
+ }
404
+ /**
405
+ * Create an AST node for a class definition.
406
+ */
407
+ createClassNode(cls, source) {
408
+ const text = this.getTextForRange(source, cls.startPosition, cls.endPosition);
409
+ const children = [];
410
+ // Add name node
411
+ children.push(this.createNode('name', cls.name, cls.startPosition, cls.startPosition, []));
412
+ // Add base class nodes
413
+ for (const base of cls.bases) {
414
+ children.push(this.createNode('base', base, cls.startPosition, cls.startPosition, []));
415
+ }
416
+ // Add decorator nodes
417
+ for (const dec of cls.decorators) {
418
+ children.push(this.createNode('decorator', dec, cls.startPosition, cls.startPosition, []));
419
+ }
420
+ // Add method nodes
421
+ for (const method of cls.methods) {
422
+ children.push(this.createNode('FunctionDef', method, cls.startPosition, cls.endPosition, []));
423
+ }
424
+ return this.createNode('ClassDef', text, cls.startPosition, cls.endPosition, children);
425
+ }
426
+ /**
427
+ * Create an AST node for a function definition.
428
+ */
429
+ createFunctionNode(func, source) {
430
+ const text = this.getTextForRange(source, func.startPosition, func.endPosition);
431
+ const nodeType = func.isAsync ? 'AsyncFunctionDef' : 'FunctionDef';
432
+ const children = [];
433
+ // Add name node
434
+ children.push(this.createNode('name', func.name, func.startPosition, func.startPosition, []));
435
+ // Add parameter nodes
436
+ for (const param of func.parameters) {
437
+ children.push(this.createNode('arg', param, func.startPosition, func.startPosition, []));
438
+ }
439
+ // Add decorator nodes
440
+ for (const dec of func.decorators) {
441
+ children.push(this.createNode('decorator', dec, func.startPosition, func.startPosition, []));
442
+ }
443
+ // Add return type node if present
444
+ if (func.returnType) {
445
+ children.push(this.createNode('returns', func.returnType, func.startPosition, func.startPosition, []));
446
+ }
447
+ return this.createNode(nodeType, text, func.startPosition, func.endPosition, children);
448
+ }
449
+ // ============================================
450
+ // Utility Methods
451
+ // ============================================
452
+ /**
453
+ * Get the line number for a character offset.
454
+ */
455
+ getLineNumber(source, offset) {
456
+ let line = 0;
457
+ for (let i = 0; i < offset && i < source.length; i++) {
458
+ if (source[i] === '\n') {
459
+ line++;
460
+ }
461
+ }
462
+ return line;
463
+ }
464
+ /**
465
+ * Find the end of an indented block.
466
+ */
467
+ findBlockEnd(lines, startLine, blockIndent) {
468
+ let endLine = startLine;
469
+ for (let i = startLine + 1; i < lines.length; i++) {
470
+ const line = lines[i] ?? '';
471
+ const trimmed = line.trim();
472
+ // Skip empty lines and comments
473
+ if (trimmed === '' || trimmed.startsWith('#')) {
474
+ endLine = i;
475
+ continue;
476
+ }
477
+ // Check indentation
478
+ const lineIndent = line.length - line.trimStart().length;
479
+ if (lineIndent <= blockIndent) {
480
+ break;
481
+ }
482
+ endLine = i;
483
+ }
484
+ return endLine;
485
+ }
486
+ /**
487
+ * Find the matching closing parenthesis.
488
+ */
489
+ findMatchingParen(source, openIndex) {
490
+ let depth = 1;
491
+ for (let i = openIndex + 1; i < source.length; i++) {
492
+ if (source[i] === '(')
493
+ depth++;
494
+ else if (source[i] === ')') {
495
+ depth--;
496
+ if (depth === 0)
497
+ return i;
498
+ }
499
+ }
500
+ return -1;
501
+ }
502
+ /**
503
+ * Get text between two positions.
504
+ */
505
+ getTextForRange(source, start, end) {
506
+ const lines = source.split('\n');
507
+ const result = [];
508
+ for (let row = start.row; row <= end.row && row < lines.length; row++) {
509
+ const line = lines[row] ?? '';
510
+ const startCol = row === start.row ? start.column : 0;
511
+ const endCol = row === end.row ? end.column : line.length;
512
+ result.push(line.slice(startCol, endCol));
513
+ }
514
+ return result.join('\n');
515
+ }
516
+ }
517
+ //# sourceMappingURL=python-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.js","sourceRoot":"","sources":["../../src/parsers/python-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAuG9C;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,UAAU;IACjC,QAAQ,GAAa,QAAQ,CAAC;IAC9B,UAAU,GAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAExD;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAc,EAAE,SAAkB;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,YAAY,GAAc,EAAE,CAAC;YAEnC,+BAA+B;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEvD,8BAA8B;YAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACtD,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;YAED,8BAA8B;YAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACpD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;YAED,gCAAgC;YAChC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACvD,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,mBAAmB;YACnB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;gBAClC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE;gBACzE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAC9B,QAAQ,EACR,MAAM,EACN,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EACrB,WAAW,EACX,YAAY,CACb,CAAC;YAEF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7C,OAAO;gBACL,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;gBAChC,OAAO;gBACP,OAAO;gBACP,SAAS;gBACT,UAAU;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;YACpF,OAAO;gBACL,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpF,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,EAAE;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,GAAQ,EAAE,OAAe;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,+CAA+C;IAC/C,oBAAoB;IACpB,+CAA+C;IAE/C;;OAEG;IACK,cAAc,CAAC,MAAc,EAAE,KAAe;QACpD,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,kDAAkD;QAClD,sEAAsE;QACtE,MAAM,WAAW,GAAG,2BAA2B,CAAC;QAChD,IAAI,KAA6B,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAE1C,yBAAyB;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAEhD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,QAAQ,CAAC,IAAI;oBACrB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACvD,YAAY,EAAE,KAAK;oBACnB,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;oBACjD,WAAW,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE;iBAC1E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,sEAAsE;QACtE,MAAM,eAAe,GAAG,+CAA+C,CAAC;QAExE,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAExC,+BAA+B;YAC/B,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7F,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9F,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YAElF,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,MAAM;gBACd,KAAK;gBACL,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;gBACjD,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,UAAkB;QACzC,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,wCAAwC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI;gBAAE,SAAS;YAE3C,uBAAuB;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;oBACtB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,uBAAuB;IACvB,+CAA+C;IAE/C;;OAEG;IACK,iBAAiB,CAAC,MAAc,EAAE,MAAgB;QACxD,MAAM,UAAU,GAA0B,EAAE,CAAC;QAC7C,sEAAsE;QACtE,MAAM,cAAc,GAAG,yCAAyC,CAAC;QACjE,IAAI,KAA6B,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAErD,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;gBACjD,WAAW,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE;aAC1E,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,OAAe,EACf,KAAe,EACf,UAAkB;QAElB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;QAE1B,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,yBAAyB;gBACzB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACjE,IAAI,KAAK,EAAE,CAAC;oBACV,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,IAAI,WAAW,KAAK,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7D,gCAAgC;gBAChC,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,mBAAmB;IACnB,+CAA+C;IAE/C;;OAEG;IACK,cAAc,CAAC,MAAc,EAAE,KAAe;QACpD,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,sEAAsE;QACtE,MAAM,UAAU,GAAG,iDAAiD,CAAC;QACrE,IAAI,KAA6B,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhC,qBAAqB;YACrB,MAAM,KAAK,GAAG,QAAQ;iBACnB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE/B,iBAAiB;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,uBAAuB,CAC1D,CAAC;YAEF,sBAAsB;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAE7D,iCAAiC;YACjC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,mBAAmB,CACtD,KAAK,EACL,SAAS,GAAG,CAAC,EACb,QAAQ,EACR,MAAM,CACP,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,KAAK;gBACL,UAAU;gBACV,OAAO;gBACP,UAAU;gBACV,WAAW;gBACX,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;gBACjD,WAAW,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,KAAe,EACf,SAAiB,EACjB,OAAe,EACf,WAAmB;QAEnB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,8BAA8B;QAEpE,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;YAEzD,8BAA8B;YAC9B,IAAI,UAAU,GAAG,YAAY,IAAI,OAAO,KAAK,EAAE;gBAAE,SAAS;YAE1D,8BAA8B;YAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,IAAI,WAAW,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnC,SAAS;YACX,CAAC;YAED,4DAA4D;YAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC7D,IAAI,SAAS,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAC7C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,+CAA+C;IAC/C,sBAAsB;IACtB,+CAA+C;IAE/C;;OAEG;IACK,gBAAgB,CAAC,MAAc,EAAE,KAAe;QACtD,MAAM,SAAS,GAAyB,EAAE,CAAC;QAC3C,sEAAsE;QACtE,MAAM,SAAS,GAAG,yEAAyE,CAAC;QAE5F,4BAA4B;QAC5B,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE5B,iDAAiD;YACjD,yCAAyC;YACzC,IAAI,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE3B,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;YAE5C,mBAAmB;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAEnD,iBAAiB;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAEvE,yBAAyB;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAE5D,mCAAmC;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAEzE,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI;gBACJ,UAAU;gBACV,UAAU;gBACV,OAAO;gBACP,WAAW;gBACX,UAAU;gBACV,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;gBACjD,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE;aACnE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,SAAiB;QACvC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,yCAAyC;YACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAe,EAAE,SAAiB,EAAE,OAAe;QAC1E,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,oBAAoB;IACpB,+CAA+C;IAE/C;;OAEG;IACK,gBAAgB,CAAC,GAAqB,EAAE,MAAc;QAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAE9E,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,kBAAkB;QAClB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,QAAQ,EACR,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,WAAW,EACf,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1E,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,OAAO,EACP,QAAQ,EACR,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,WAAW,EACf,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,GAAoB,EAAE,MAAc;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,gBAAgB;QAChB,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,MAAM,EACN,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,aAAa,EACjB,EAAE,CACH,CACF,CAAC;QAEF,uBAAuB;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,MAAM,EACN,IAAI,EACJ,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,aAAa,EACjB,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,WAAW,EACX,GAAG,EACH,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,aAAa,EACjB,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,aAAa,EACb,MAAM,EACN,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,WAAW,EACf,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAwB,EAAE,MAAc;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC;QACnE,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,gBAAgB;QAChB,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,MAAM,EACN,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,EAAE,CACH,CACF,CAAC;QAEF,sBAAsB;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,KAAK,EACL,KAAK,EACL,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,WAAW,EACX,GAAG,EACH,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,UAAU,CACb,SAAS,EACT,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,EAAE,CACH,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzF,CAAC;IAED,+CAA+C;IAC/C,kBAAkB;IAClB,+CAA+C;IAE/C;;OAEG;IACK,aAAa,CAAC,MAAc,EAAE,MAAc;QAClD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvB,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAe,EAAE,SAAiB,EAAE,WAAmB;QAC1E,IAAI,OAAO,GAAG,SAAS,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gCAAgC;YAChC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,GAAG,CAAC,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;YACzD,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,MAAc,EAAE,SAAiB;QACzD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC1B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC3B,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,CAAC;oBAAE,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAc,EAAE,KAAe,EAAE,GAAa;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Parser type definitions
3
+ *
4
+ * @requirements 3.1, 3.5
5
+ */
6
+ export type Language = 'typescript' | 'javascript' | 'python' | 'css' | 'scss' | 'json' | 'yaml' | 'markdown';
7
+ export interface ParseResult {
8
+ /** The parsed AST */
9
+ ast: AST | null;
10
+ /** Language of the parsed file */
11
+ language: Language;
12
+ /** Parse errors if any */
13
+ errors: ParseError[];
14
+ /** Whether parsing was successful */
15
+ success: boolean;
16
+ }
17
+ export interface AST {
18
+ /** Root node of the AST */
19
+ rootNode: ASTNode;
20
+ /** Source text */
21
+ text: string;
22
+ }
23
+ export interface ASTNode {
24
+ /** Node type */
25
+ type: string;
26
+ /** Start position */
27
+ startPosition: Position;
28
+ /** End position */
29
+ endPosition: Position;
30
+ /** Child nodes */
31
+ children: ASTNode[];
32
+ /** Node text */
33
+ text: string;
34
+ }
35
+ export interface Position {
36
+ row: number;
37
+ column: number;
38
+ }
39
+ export interface ParseError {
40
+ message: string;
41
+ position: Position;
42
+ }
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parsers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,GAAG;IAClB,2BAA2B;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,aAAa,EAAE,QAAQ,CAAC;IACxB,mBAAmB;IACnB,WAAW,EAAE,QAAQ,CAAC;IACtB,kBAAkB;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser type definitions
3
+ *
4
+ * @requirements 3.1, 3.5
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parsers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}