lance-context 0.1.0 → 1.0.1

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 (237) hide show
  1. package/README.md +232 -23
  2. package/dist/__tests__/ast-chunker.test.d.ts +2 -0
  3. package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
  4. package/dist/__tests__/ast-chunker.test.js +307 -0
  5. package/dist/__tests__/ast-chunker.test.js.map +1 -0
  6. package/dist/__tests__/config.test.d.ts +2 -0
  7. package/dist/__tests__/config.test.d.ts.map +1 -0
  8. package/dist/__tests__/config.test.js +242 -0
  9. package/dist/__tests__/config.test.js.map +1 -0
  10. package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
  11. package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
  12. package/dist/__tests__/dashboard/beads.test.js +151 -0
  13. package/dist/__tests__/dashboard/beads.test.js.map +1 -0
  14. package/dist/__tests__/dashboard/index.test.d.ts +2 -0
  15. package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
  16. package/dist/__tests__/dashboard/index.test.js +116 -0
  17. package/dist/__tests__/dashboard/index.test.js.map +1 -0
  18. package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
  19. package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
  20. package/dist/__tests__/dashboard/routes.test.js +125 -0
  21. package/dist/__tests__/dashboard/routes.test.js.map +1 -0
  22. package/dist/__tests__/dashboard/server.test.d.ts +2 -0
  23. package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
  24. package/dist/__tests__/dashboard/server.test.js +75 -0
  25. package/dist/__tests__/dashboard/server.test.js.map +1 -0
  26. package/dist/__tests__/dashboard/state.test.d.ts +2 -0
  27. package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
  28. package/dist/__tests__/dashboard/state.test.js +124 -0
  29. package/dist/__tests__/dashboard/state.test.js.map +1 -0
  30. package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
  31. package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
  32. package/dist/__tests__/embeddings/factory.test.js +100 -0
  33. package/dist/__tests__/embeddings/factory.test.js.map +1 -0
  34. package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
  35. package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
  36. package/dist/__tests__/embeddings/jina.test.js +156 -0
  37. package/dist/__tests__/embeddings/jina.test.js.map +1 -0
  38. package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
  39. package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
  40. package/dist/__tests__/embeddings/ollama.test.js +172 -0
  41. package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
  42. package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
  43. package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
  44. package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
  45. package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
  46. package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
  47. package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
  48. package/dist/__tests__/embeddings/retry.test.js +260 -0
  49. package/dist/__tests__/embeddings/retry.test.js.map +1 -0
  50. package/dist/__tests__/embeddings/types.test.d.ts +2 -0
  51. package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
  52. package/dist/__tests__/embeddings/types.test.js +31 -0
  53. package/dist/__tests__/embeddings/types.test.js.map +1 -0
  54. package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
  55. package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
  56. package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
  57. package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
  58. package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
  59. package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
  60. package/dist/__tests__/mocks/fetch.mock.js +74 -0
  61. package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
  62. package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
  63. package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
  64. package/dist/__tests__/mocks/lancedb.mock.js +63 -0
  65. package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
  66. package/dist/__tests__/search/clustering.test.d.ts +2 -0
  67. package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
  68. package/dist/__tests__/search/clustering.test.js +230 -0
  69. package/dist/__tests__/search/clustering.test.js.map +1 -0
  70. package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
  71. package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
  72. package/dist/__tests__/search/hybrid-search.test.js +186 -0
  73. package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
  74. package/dist/__tests__/search/indexer.test.d.ts +2 -0
  75. package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
  76. package/dist/__tests__/search/indexer.test.js +878 -0
  77. package/dist/__tests__/search/indexer.test.js.map +1 -0
  78. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
  79. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
  80. package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
  81. package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
  82. package/dist/__tests__/setup.d.ts +2 -0
  83. package/dist/__tests__/setup.d.ts.map +1 -0
  84. package/dist/__tests__/setup.js +11 -0
  85. package/dist/__tests__/setup.js.map +1 -0
  86. package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
  87. package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
  88. package/dist/__tests__/utils/concurrency.test.js +83 -0
  89. package/dist/__tests__/utils/concurrency.test.js.map +1 -0
  90. package/dist/__tests__/utils/errors.test.d.ts +2 -0
  91. package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
  92. package/dist/__tests__/utils/errors.test.js +136 -0
  93. package/dist/__tests__/utils/errors.test.js.map +1 -0
  94. package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
  95. package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
  96. package/dist/__tests__/utils/type-guards.test.js +80 -0
  97. package/dist/__tests__/utils/type-guards.test.js.map +1 -0
  98. package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
  99. package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
  100. package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
  101. package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
  102. package/dist/config.d.ts +122 -0
  103. package/dist/config.d.ts.map +1 -0
  104. package/dist/config.js +508 -0
  105. package/dist/config.js.map +1 -0
  106. package/dist/dashboard/beads.d.ts +35 -0
  107. package/dist/dashboard/beads.d.ts.map +1 -0
  108. package/dist/dashboard/beads.js +102 -0
  109. package/dist/dashboard/beads.js.map +1 -0
  110. package/dist/dashboard/events.d.ts +46 -0
  111. package/dist/dashboard/events.d.ts.map +1 -0
  112. package/dist/dashboard/events.js +141 -0
  113. package/dist/dashboard/events.js.map +1 -0
  114. package/dist/dashboard/index.d.ts +67 -0
  115. package/dist/dashboard/index.d.ts.map +1 -0
  116. package/dist/dashboard/index.js +90 -0
  117. package/dist/dashboard/index.js.map +1 -0
  118. package/dist/dashboard/routes.d.ts +6 -0
  119. package/dist/dashboard/routes.d.ts.map +1 -0
  120. package/dist/dashboard/routes.js +244 -0
  121. package/dist/dashboard/routes.js.map +1 -0
  122. package/dist/dashboard/server.d.ts +27 -0
  123. package/dist/dashboard/server.d.ts.map +1 -0
  124. package/dist/dashboard/server.js +72 -0
  125. package/dist/dashboard/server.js.map +1 -0
  126. package/dist/dashboard/state.d.ts +116 -0
  127. package/dist/dashboard/state.d.ts.map +1 -0
  128. package/dist/dashboard/state.js +251 -0
  129. package/dist/dashboard/state.js.map +1 -0
  130. package/dist/dashboard/ui.d.ts +6 -0
  131. package/dist/dashboard/ui.d.ts.map +1 -0
  132. package/dist/dashboard/ui.js +1407 -0
  133. package/dist/dashboard/ui.js.map +1 -0
  134. package/dist/embeddings/index.d.ts +20 -2
  135. package/dist/embeddings/index.d.ts.map +1 -1
  136. package/dist/embeddings/index.js +49 -6
  137. package/dist/embeddings/index.js.map +1 -1
  138. package/dist/embeddings/jina.d.ts +9 -0
  139. package/dist/embeddings/jina.d.ts.map +1 -1
  140. package/dist/embeddings/jina.js +42 -2
  141. package/dist/embeddings/jina.js.map +1 -1
  142. package/dist/embeddings/ollama.d.ts +2 -0
  143. package/dist/embeddings/ollama.d.ts.map +1 -1
  144. package/dist/embeddings/ollama.js +21 -5
  145. package/dist/embeddings/ollama.js.map +1 -1
  146. package/dist/embeddings/rate-limiter.d.ts +75 -0
  147. package/dist/embeddings/rate-limiter.d.ts.map +1 -0
  148. package/dist/embeddings/rate-limiter.js +145 -0
  149. package/dist/embeddings/rate-limiter.js.map +1 -0
  150. package/dist/embeddings/retry.d.ts +14 -0
  151. package/dist/embeddings/retry.d.ts.map +1 -0
  152. package/dist/embeddings/retry.js +89 -0
  153. package/dist/embeddings/retry.js.map +1 -0
  154. package/dist/embeddings/types.d.ts +56 -2
  155. package/dist/embeddings/types.d.ts.map +1 -1
  156. package/dist/embeddings/types.js +16 -0
  157. package/dist/embeddings/types.js.map +1 -1
  158. package/dist/index.js +1870 -44
  159. package/dist/index.js.map +1 -1
  160. package/dist/memory/index.d.ts +63 -0
  161. package/dist/memory/index.d.ts.map +1 -0
  162. package/dist/memory/index.js +168 -0
  163. package/dist/memory/index.js.map +1 -0
  164. package/dist/search/ast-chunker.d.ts +34 -0
  165. package/dist/search/ast-chunker.d.ts.map +1 -0
  166. package/dist/search/ast-chunker.js +261 -0
  167. package/dist/search/ast-chunker.js.map +1 -0
  168. package/dist/search/clustering.d.ts +77 -0
  169. package/dist/search/clustering.d.ts.map +1 -0
  170. package/dist/search/clustering.js +455 -0
  171. package/dist/search/clustering.js.map +1 -0
  172. package/dist/search/indexer.d.ts +239 -3
  173. package/dist/search/indexer.d.ts.map +1 -1
  174. package/dist/search/indexer.js +941 -45
  175. package/dist/search/indexer.js.map +1 -1
  176. package/dist/search/tree-sitter-chunker.d.ts +69 -0
  177. package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
  178. package/dist/search/tree-sitter-chunker.js +436 -0
  179. package/dist/search/tree-sitter-chunker.js.map +1 -0
  180. package/dist/symbols/index.d.ts +14 -0
  181. package/dist/symbols/index.d.ts.map +1 -0
  182. package/dist/symbols/index.js +19 -0
  183. package/dist/symbols/index.js.map +1 -0
  184. package/dist/symbols/name-path.d.ts +113 -0
  185. package/dist/symbols/name-path.d.ts.map +1 -0
  186. package/dist/symbols/name-path.js +194 -0
  187. package/dist/symbols/name-path.js.map +1 -0
  188. package/dist/symbols/pattern-search.d.ts +14 -0
  189. package/dist/symbols/pattern-search.d.ts.map +1 -0
  190. package/dist/symbols/pattern-search.js +224 -0
  191. package/dist/symbols/pattern-search.js.map +1 -0
  192. package/dist/symbols/reference-finder.d.ts +38 -0
  193. package/dist/symbols/reference-finder.d.ts.map +1 -0
  194. package/dist/symbols/reference-finder.js +376 -0
  195. package/dist/symbols/reference-finder.js.map +1 -0
  196. package/dist/symbols/symbol-editor.d.ts +81 -0
  197. package/dist/symbols/symbol-editor.d.ts.map +1 -0
  198. package/dist/symbols/symbol-editor.js +257 -0
  199. package/dist/symbols/symbol-editor.js.map +1 -0
  200. package/dist/symbols/symbol-extractor.d.ts +49 -0
  201. package/dist/symbols/symbol-extractor.d.ts.map +1 -0
  202. package/dist/symbols/symbol-extractor.js +593 -0
  203. package/dist/symbols/symbol-extractor.js.map +1 -0
  204. package/dist/symbols/symbol-renamer.d.ts +81 -0
  205. package/dist/symbols/symbol-renamer.d.ts.map +1 -0
  206. package/dist/symbols/symbol-renamer.js +204 -0
  207. package/dist/symbols/symbol-renamer.js.map +1 -0
  208. package/dist/symbols/types.d.ts +234 -0
  209. package/dist/symbols/types.d.ts.map +1 -0
  210. package/dist/symbols/types.js +106 -0
  211. package/dist/symbols/types.js.map +1 -0
  212. package/dist/utils/concurrency.d.ts +32 -0
  213. package/dist/utils/concurrency.d.ts.map +1 -0
  214. package/dist/utils/concurrency.js +57 -0
  215. package/dist/utils/concurrency.js.map +1 -0
  216. package/dist/utils/errors.d.ts +36 -0
  217. package/dist/utils/errors.d.ts.map +1 -0
  218. package/dist/utils/errors.js +91 -0
  219. package/dist/utils/errors.js.map +1 -0
  220. package/dist/utils/type-guards.d.ts +17 -0
  221. package/dist/utils/type-guards.d.ts.map +1 -0
  222. package/dist/utils/type-guards.js +25 -0
  223. package/dist/utils/type-guards.js.map +1 -0
  224. package/dist/worktree/index.d.ts +6 -0
  225. package/dist/worktree/index.d.ts.map +1 -0
  226. package/dist/worktree/index.js +6 -0
  227. package/dist/worktree/index.js.map +1 -0
  228. package/dist/worktree/types.d.ts +101 -0
  229. package/dist/worktree/types.d.ts.map +1 -0
  230. package/dist/worktree/types.js +6 -0
  231. package/dist/worktree/types.js.map +1 -0
  232. package/dist/worktree/worktree-manager.d.ts +80 -0
  233. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  234. package/dist/worktree/worktree-manager.js +407 -0
  235. package/dist/worktree/worktree-manager.js.map +1 -0
  236. package/package.json +39 -5
  237. package/scripts/postinstall.js +48 -0
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Symbol editor for modifying symbol definitions in source files.
3
+ * Provides atomic operations to replace, insert before, or insert after symbols.
4
+ */
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ import { SymbolExtractor } from './symbol-extractor.js';
8
+ import { parseNamePath, matchNamePath, getSymbolName } from './name-path.js';
9
+ /**
10
+ * Symbol editor for modifying source files.
11
+ */
12
+ export class SymbolEditor {
13
+ projectPath;
14
+ symbolExtractor;
15
+ constructor(projectPath) {
16
+ this.projectPath = projectPath;
17
+ this.symbolExtractor = new SymbolExtractor(projectPath);
18
+ }
19
+ /**
20
+ * Replace a symbol's body with new content.
21
+ */
22
+ async replaceSymbolBody(options) {
23
+ const { namePath, relativePath, body } = options;
24
+ const fullPath = path.join(this.projectPath, relativePath);
25
+ try {
26
+ // Find the target symbol
27
+ const symbols = await this.symbolExtractor.extractSymbols(relativePath, true);
28
+ const pattern = parseNamePath(namePath);
29
+ const targetSymbol = this.findSymbolByPattern(symbols, pattern);
30
+ if (!targetSymbol) {
31
+ return {
32
+ success: false,
33
+ filepath: relativePath,
34
+ symbolName: getSymbolName(namePath),
35
+ error: `Symbol not found: ${namePath}`,
36
+ };
37
+ }
38
+ // Read the file
39
+ const content = await fs.readFile(fullPath, 'utf-8');
40
+ const lines = content.split('\n');
41
+ // Get the indentation of the original symbol
42
+ const originalFirstLine = lines[targetSymbol.location.startLine - 1];
43
+ const indentation = this.detectIndentation(originalFirstLine);
44
+ // Apply indentation to the new body
45
+ const indentedBody = this.applyIndentation(body, indentation);
46
+ // Replace the lines
47
+ const beforeLines = lines.slice(0, targetSymbol.location.startLine - 1);
48
+ const afterLines = lines.slice(targetSymbol.location.endLine);
49
+ const newBodyLines = indentedBody.split('\n');
50
+ const newContent = [...beforeLines, ...newBodyLines, ...afterLines].join('\n');
51
+ // Write the file atomically
52
+ await this.atomicWrite(fullPath, newContent);
53
+ return {
54
+ success: true,
55
+ filepath: relativePath,
56
+ symbolName: targetSymbol.name,
57
+ newRange: {
58
+ startLine: targetSymbol.location.startLine,
59
+ endLine: targetSymbol.location.startLine + newBodyLines.length - 1,
60
+ },
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ success: false,
66
+ filepath: relativePath,
67
+ symbolName: getSymbolName(namePath),
68
+ error: error instanceof Error ? error.message : String(error),
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * Insert content before a symbol.
74
+ */
75
+ async insertBeforeSymbol(options) {
76
+ const { namePath, relativePath, body } = options;
77
+ const fullPath = path.join(this.projectPath, relativePath);
78
+ try {
79
+ // Find the target symbol
80
+ const symbols = await this.symbolExtractor.extractSymbols(relativePath, false);
81
+ const pattern = parseNamePath(namePath);
82
+ const targetSymbol = this.findSymbolByPattern(symbols, pattern);
83
+ if (!targetSymbol) {
84
+ return {
85
+ success: false,
86
+ filepath: relativePath,
87
+ symbolName: getSymbolName(namePath),
88
+ error: `Symbol not found: ${namePath}`,
89
+ };
90
+ }
91
+ // Read the file
92
+ const content = await fs.readFile(fullPath, 'utf-8');
93
+ const lines = content.split('\n');
94
+ // Get the indentation of the target symbol
95
+ const originalFirstLine = lines[targetSymbol.location.startLine - 1];
96
+ const indentation = this.detectIndentation(originalFirstLine);
97
+ // Apply indentation to the new body
98
+ const indentedBody = this.applyIndentation(body, indentation);
99
+ const newBodyLines = indentedBody.split('\n');
100
+ // Insert before the symbol (add blank line after if not present)
101
+ const insertPoint = targetSymbol.location.startLine - 1;
102
+ const beforeLines = lines.slice(0, insertPoint);
103
+ const afterLines = lines.slice(insertPoint);
104
+ // Add a blank line between new content and existing symbol if needed
105
+ const needsBlankLine = newBodyLines.length > 0 && afterLines.length > 0 && afterLines[0].trim() !== '';
106
+ const separator = needsBlankLine ? [''] : [];
107
+ const newContent = [...beforeLines, ...newBodyLines, ...separator, ...afterLines].join('\n');
108
+ // Write the file atomically
109
+ await this.atomicWrite(fullPath, newContent);
110
+ return {
111
+ success: true,
112
+ filepath: relativePath,
113
+ symbolName: targetSymbol.name,
114
+ newRange: {
115
+ startLine: insertPoint + 1,
116
+ endLine: insertPoint + newBodyLines.length,
117
+ },
118
+ };
119
+ }
120
+ catch (error) {
121
+ return {
122
+ success: false,
123
+ filepath: relativePath,
124
+ symbolName: getSymbolName(namePath),
125
+ error: error instanceof Error ? error.message : String(error),
126
+ };
127
+ }
128
+ }
129
+ /**
130
+ * Insert content after a symbol.
131
+ */
132
+ async insertAfterSymbol(options) {
133
+ const { namePath, relativePath, body } = options;
134
+ const fullPath = path.join(this.projectPath, relativePath);
135
+ try {
136
+ // Find the target symbol
137
+ const symbols = await this.symbolExtractor.extractSymbols(relativePath, false);
138
+ const pattern = parseNamePath(namePath);
139
+ const targetSymbol = this.findSymbolByPattern(symbols, pattern);
140
+ if (!targetSymbol) {
141
+ return {
142
+ success: false,
143
+ filepath: relativePath,
144
+ symbolName: getSymbolName(namePath),
145
+ error: `Symbol not found: ${namePath}`,
146
+ };
147
+ }
148
+ // Read the file
149
+ const content = await fs.readFile(fullPath, 'utf-8');
150
+ const lines = content.split('\n');
151
+ // Get the indentation of the target symbol
152
+ const originalFirstLine = lines[targetSymbol.location.startLine - 1];
153
+ const indentation = this.detectIndentation(originalFirstLine);
154
+ // Apply indentation to the new body
155
+ const indentedBody = this.applyIndentation(body, indentation);
156
+ const newBodyLines = indentedBody.split('\n');
157
+ // Insert after the symbol
158
+ const insertPoint = targetSymbol.location.endLine;
159
+ const beforeLines = lines.slice(0, insertPoint);
160
+ const afterLines = lines.slice(insertPoint);
161
+ // Add a blank line before new content if needed
162
+ const needsBlankLine = beforeLines.length > 0 && beforeLines[beforeLines.length - 1].trim() !== '';
163
+ const separator = needsBlankLine ? [''] : [];
164
+ const newContent = [...beforeLines, ...separator, ...newBodyLines, ...afterLines].join('\n');
165
+ // Write the file atomically
166
+ await this.atomicWrite(fullPath, newContent);
167
+ return {
168
+ success: true,
169
+ filepath: relativePath,
170
+ symbolName: targetSymbol.name,
171
+ newRange: {
172
+ startLine: insertPoint + separator.length + 1,
173
+ endLine: insertPoint + separator.length + newBodyLines.length,
174
+ },
175
+ };
176
+ }
177
+ catch (error) {
178
+ return {
179
+ success: false,
180
+ filepath: relativePath,
181
+ symbolName: getSymbolName(namePath),
182
+ error: error instanceof Error ? error.message : String(error),
183
+ };
184
+ }
185
+ }
186
+ /**
187
+ * Find a symbol by name path pattern.
188
+ */
189
+ findSymbolByPattern(symbols, pattern) {
190
+ for (const symbol of symbols) {
191
+ if (matchNamePath(symbol.namePath, pattern)) {
192
+ return symbol;
193
+ }
194
+ if (symbol.children) {
195
+ const found = this.findSymbolByPattern(symbol.children, pattern);
196
+ if (found) {
197
+ return found;
198
+ }
199
+ }
200
+ }
201
+ return null;
202
+ }
203
+ /**
204
+ * Detect the indentation used on a line.
205
+ */
206
+ detectIndentation(line) {
207
+ const match = line.match(/^(\s*)/);
208
+ return match ? match[1] : '';
209
+ }
210
+ /**
211
+ * Apply indentation to a block of code.
212
+ */
213
+ applyIndentation(code, baseIndentation) {
214
+ const lines = code.split('\n');
215
+ // Find the minimum indentation in the provided code (excluding empty lines)
216
+ let minIndent = Infinity;
217
+ for (const line of lines) {
218
+ if (line.trim().length > 0) {
219
+ const indent = line.match(/^(\s*)/)?.[1].length ?? 0;
220
+ minIndent = Math.min(minIndent, indent);
221
+ }
222
+ }
223
+ if (minIndent === Infinity)
224
+ minIndent = 0;
225
+ // Re-indent the code with the base indentation
226
+ return lines
227
+ .map((line) => {
228
+ if (line.trim().length === 0) {
229
+ return '';
230
+ }
231
+ const relativeIndent = line.substring(minIndent);
232
+ return baseIndentation + relativeIndent;
233
+ })
234
+ .join('\n');
235
+ }
236
+ /**
237
+ * Write a file atomically (write to temp file, then rename).
238
+ */
239
+ async atomicWrite(filepath, content) {
240
+ const tempPath = `${filepath}.tmp.${Date.now()}`;
241
+ try {
242
+ await fs.writeFile(tempPath, content, 'utf-8');
243
+ await fs.rename(tempPath, filepath);
244
+ }
245
+ catch (error) {
246
+ // Try to clean up temp file
247
+ try {
248
+ await fs.unlink(tempPath);
249
+ }
250
+ catch {
251
+ // Ignore cleanup errors
252
+ }
253
+ throw error;
254
+ }
255
+ }
256
+ }
257
+ //# sourceMappingURL=symbol-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-editor.js","sourceRoot":"","sources":["../../src/symbols/symbol-editor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA0C7E;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,WAAW,CAAS;IACpB,eAAe,CAAkB;IAEzC,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAA6B;QACnD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;oBACnC,KAAK,EAAE,qBAAqB,QAAQ,EAAE;iBACvC,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,6CAA6C;YAC7C,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAE9D,oCAAoC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAE9D,oBAAoB;YACpB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/E,4BAA4B;YAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,UAAU,EAAE,YAAY,CAAC,IAAI;gBAC7B,QAAQ,EAAE;oBACR,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS;oBAC1C,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;iBACnE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;gBACnC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAA4B;QACnD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC/E,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;oBACnC,KAAK,EAAE,qBAAqB,QAAQ,EAAE;iBACvC,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,2CAA2C;YAC3C,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAE9D,oCAAoC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,iEAAiE;YACjE,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE5C,qEAAqE;YACrE,MAAM,cAAc,GAClB,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE7C,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7F,4BAA4B;YAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,UAAU,EAAE,YAAY,CAAC,IAAI;gBAC7B,QAAQ,EAAE;oBACR,SAAS,EAAE,WAAW,GAAG,CAAC;oBAC1B,OAAO,EAAE,WAAW,GAAG,YAAY,CAAC,MAAM;iBAC3C;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;gBACnC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAA4B;QAClD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC/E,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;oBACnC,KAAK,EAAE,qBAAqB,QAAQ,EAAE;iBACvC,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,2CAA2C;YAC3C,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAE9D,oCAAoC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,0BAA0B;YAC1B,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;YAClD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE5C,gDAAgD;YAChD,MAAM,cAAc,GAClB,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC9E,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE7C,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7F,4BAA4B;YAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,UAAU,EAAE,YAAY,CAAC,IAAI;gBAC7B,QAAQ,EAAE;oBACR,SAAS,EAAE,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;oBAC7C,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;iBAC9D;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;gBACnC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,OAAiB,EACjB,OAAyC;QAEzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACjE,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY,EAAE,eAAuB;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,4EAA4E;QAC5E,IAAI,SAAS,GAAG,QAAQ,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACrD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,SAAS,KAAK,QAAQ;YAAE,SAAS,GAAG,CAAC,CAAC;QAE1C,+CAA+C;QAC/C,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACjD,OAAO,eAAe,GAAG,cAAc,CAAC;QAC1C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,OAAe;QACzD,MAAM,QAAQ,GAAG,GAAG,QAAQ,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4BAA4B;YAC5B,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Symbol extractor using Tree-sitter and TypeScript AST for multiple languages.
3
+ * Extracts hierarchical symbol information from source files.
4
+ */
5
+ import { Symbol, SymbolsOverview } from './types.js';
6
+ /**
7
+ * Symbol extractor for extracting hierarchical symbol information.
8
+ */
9
+ export declare class SymbolExtractor {
10
+ private static parser;
11
+ private static loadedLanguages;
12
+ private static initPromise;
13
+ private static wasmBasePath;
14
+ private projectPath;
15
+ constructor(projectPath: string);
16
+ /**
17
+ * Initialize the tree-sitter parser.
18
+ */
19
+ private static initialize;
20
+ private static findWasmBasePath;
21
+ private static getLanguageConfig;
22
+ private static loadLanguage;
23
+ /**
24
+ * Check if a file can be analyzed for symbols.
25
+ */
26
+ static canAnalyze(filepath: string): boolean;
27
+ /**
28
+ * Extract all symbols from a file.
29
+ */
30
+ extractSymbols(filepath: string, includeBody?: boolean): Promise<Symbol[]>;
31
+ /**
32
+ * Get symbols overview for a file.
33
+ */
34
+ getSymbolsOverview(filepath: string, depth?: number): Promise<SymbolsOverview>;
35
+ private countSymbols;
36
+ /**
37
+ * Extract symbols using TypeScript compiler.
38
+ */
39
+ private extractSymbolsWithTypeScript;
40
+ private nodeToSymbol;
41
+ private memberToSymbol;
42
+ /**
43
+ * Extract symbols using tree-sitter.
44
+ */
45
+ private extractSymbolsWithTreeSitter;
46
+ private processTreeSitterNode;
47
+ private getTreeSitterNodeName;
48
+ }
49
+ //# sourceMappingURL=symbol-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-extractor.d.ts","sourceRoot":"","sources":["../../src/symbols/symbol-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,MAAM,EAGN,eAAe,EAGhB,MAAM,YAAY,CAAC;AAwGpB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,CAA2B;IAChD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAoC;IAClE,OAAO,CAAC,MAAM,CAAC,WAAW,CAA8B;IACxD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAElD,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B;;OAEG;mBACkB,UAAU;mBAwBV,gBAAgB;IA8BrC,OAAO,CAAC,MAAM,CAAC,iBAAiB;mBAUX,YAAY;IAkBjC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAU5C;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBvF;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,eAAe,CAAC;IAyCvF,OAAO,CAAC,YAAY;IAYpB;;OAEG;YACW,4BAA4B;IAgF1C,OAAO,CAAC,YAAY;IA6EpB,OAAO,CAAC,cAAc;IAgEtB;;OAEG;YACW,4BAA4B;IAsC1C,OAAO,CAAC,qBAAqB;IAgN7B,OAAO,CAAC,qBAAqB;CAyB9B"}