@stupidloud/codegraph 0.7.7

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 (340) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +482 -0
  3. package/dist/bin/codegraph.d.ts +21 -0
  4. package/dist/bin/codegraph.d.ts.map +1 -0
  5. package/dist/bin/codegraph.js +1296 -0
  6. package/dist/bin/codegraph.js.map +1 -0
  7. package/dist/bin/node-version-check.d.ts +17 -0
  8. package/dist/bin/node-version-check.d.ts.map +1 -0
  9. package/dist/bin/node-version-check.js +39 -0
  10. package/dist/bin/node-version-check.js.map +1 -0
  11. package/dist/bin/uninstall.d.ts +14 -0
  12. package/dist/bin/uninstall.d.ts.map +1 -0
  13. package/dist/bin/uninstall.js +148 -0
  14. package/dist/bin/uninstall.js.map +1 -0
  15. package/dist/config.d.ts +51 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +342 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/context/formatter.d.ts +30 -0
  20. package/dist/context/formatter.d.ts.map +1 -0
  21. package/dist/context/formatter.js +244 -0
  22. package/dist/context/formatter.js.map +1 -0
  23. package/dist/context/index.d.ts +99 -0
  24. package/dist/context/index.d.ts.map +1 -0
  25. package/dist/context/index.js +1075 -0
  26. package/dist/context/index.js.map +1 -0
  27. package/dist/db/index.d.ts +72 -0
  28. package/dist/db/index.d.ts.map +1 -0
  29. package/dist/db/index.js +200 -0
  30. package/dist/db/index.js.map +1 -0
  31. package/dist/db/migrations.d.ts +44 -0
  32. package/dist/db/migrations.d.ts.map +1 -0
  33. package/dist/db/migrations.js +160 -0
  34. package/dist/db/migrations.js.map +1 -0
  35. package/dist/db/queries.d.ts +253 -0
  36. package/dist/db/queries.d.ts.map +1 -0
  37. package/dist/db/queries.js +1202 -0
  38. package/dist/db/queries.js.map +1 -0
  39. package/dist/db/schema.sql +169 -0
  40. package/dist/db/sqlite-adapter.d.ts +52 -0
  41. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  42. package/dist/db/sqlite-adapter.js +237 -0
  43. package/dist/db/sqlite-adapter.js.map +1 -0
  44. package/dist/directory.d.ts +57 -0
  45. package/dist/directory.d.ts.map +1 -0
  46. package/dist/directory.js +264 -0
  47. package/dist/directory.js.map +1 -0
  48. package/dist/errors.d.ts +136 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +219 -0
  51. package/dist/errors.js.map +1 -0
  52. package/dist/extraction/dfm-extractor.d.ts +31 -0
  53. package/dist/extraction/dfm-extractor.d.ts.map +1 -0
  54. package/dist/extraction/dfm-extractor.js +151 -0
  55. package/dist/extraction/dfm-extractor.js.map +1 -0
  56. package/dist/extraction/grammars.d.ts +78 -0
  57. package/dist/extraction/grammars.d.ts.map +1 -0
  58. package/dist/extraction/grammars.js +322 -0
  59. package/dist/extraction/grammars.js.map +1 -0
  60. package/dist/extraction/index.d.ts +130 -0
  61. package/dist/extraction/index.d.ts.map +1 -0
  62. package/dist/extraction/index.js +1279 -0
  63. package/dist/extraction/index.js.map +1 -0
  64. package/dist/extraction/languages/c-cpp.d.ts +4 -0
  65. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  66. package/dist/extraction/languages/c-cpp.js +126 -0
  67. package/dist/extraction/languages/c-cpp.js.map +1 -0
  68. package/dist/extraction/languages/csharp.d.ts +3 -0
  69. package/dist/extraction/languages/csharp.d.ts.map +1 -0
  70. package/dist/extraction/languages/csharp.js +72 -0
  71. package/dist/extraction/languages/csharp.js.map +1 -0
  72. package/dist/extraction/languages/dart.d.ts +3 -0
  73. package/dist/extraction/languages/dart.d.ts.map +1 -0
  74. package/dist/extraction/languages/dart.js +192 -0
  75. package/dist/extraction/languages/dart.js.map +1 -0
  76. package/dist/extraction/languages/go.d.ts +3 -0
  77. package/dist/extraction/languages/go.d.ts.map +1 -0
  78. package/dist/extraction/languages/go.js +58 -0
  79. package/dist/extraction/languages/go.js.map +1 -0
  80. package/dist/extraction/languages/index.d.ts +10 -0
  81. package/dist/extraction/languages/index.d.ts.map +1 -0
  82. package/dist/extraction/languages/index.js +45 -0
  83. package/dist/extraction/languages/index.js.map +1 -0
  84. package/dist/extraction/languages/java.d.ts +3 -0
  85. package/dist/extraction/languages/java.d.ts.map +1 -0
  86. package/dist/extraction/languages/java.js +64 -0
  87. package/dist/extraction/languages/java.js.map +1 -0
  88. package/dist/extraction/languages/javascript.d.ts +3 -0
  89. package/dist/extraction/languages/javascript.d.ts.map +1 -0
  90. package/dist/extraction/languages/javascript.js +90 -0
  91. package/dist/extraction/languages/javascript.js.map +1 -0
  92. package/dist/extraction/languages/kotlin.d.ts +3 -0
  93. package/dist/extraction/languages/kotlin.d.ts.map +1 -0
  94. package/dist/extraction/languages/kotlin.js +253 -0
  95. package/dist/extraction/languages/kotlin.js.map +1 -0
  96. package/dist/extraction/languages/pascal.d.ts +3 -0
  97. package/dist/extraction/languages/pascal.d.ts.map +1 -0
  98. package/dist/extraction/languages/pascal.js +66 -0
  99. package/dist/extraction/languages/pascal.js.map +1 -0
  100. package/dist/extraction/languages/php.d.ts +3 -0
  101. package/dist/extraction/languages/php.d.ts.map +1 -0
  102. package/dist/extraction/languages/php.js +107 -0
  103. package/dist/extraction/languages/php.js.map +1 -0
  104. package/dist/extraction/languages/python.d.ts +3 -0
  105. package/dist/extraction/languages/python.d.ts.map +1 -0
  106. package/dist/extraction/languages/python.js +56 -0
  107. package/dist/extraction/languages/python.js.map +1 -0
  108. package/dist/extraction/languages/ruby.d.ts +3 -0
  109. package/dist/extraction/languages/ruby.d.ts.map +1 -0
  110. package/dist/extraction/languages/ruby.js +114 -0
  111. package/dist/extraction/languages/ruby.js.map +1 -0
  112. package/dist/extraction/languages/rust.d.ts +3 -0
  113. package/dist/extraction/languages/rust.d.ts.map +1 -0
  114. package/dist/extraction/languages/rust.js +109 -0
  115. package/dist/extraction/languages/rust.js.map +1 -0
  116. package/dist/extraction/languages/scala.d.ts +3 -0
  117. package/dist/extraction/languages/scala.d.ts.map +1 -0
  118. package/dist/extraction/languages/scala.js +139 -0
  119. package/dist/extraction/languages/scala.js.map +1 -0
  120. package/dist/extraction/languages/swift.d.ts +3 -0
  121. package/dist/extraction/languages/swift.d.ts.map +1 -0
  122. package/dist/extraction/languages/swift.js +91 -0
  123. package/dist/extraction/languages/swift.js.map +1 -0
  124. package/dist/extraction/languages/typescript.d.ts +3 -0
  125. package/dist/extraction/languages/typescript.d.ts.map +1 -0
  126. package/dist/extraction/languages/typescript.js +129 -0
  127. package/dist/extraction/languages/typescript.js.map +1 -0
  128. package/dist/extraction/liquid-extractor.d.ts +52 -0
  129. package/dist/extraction/liquid-extractor.d.ts.map +1 -0
  130. package/dist/extraction/liquid-extractor.js +313 -0
  131. package/dist/extraction/liquid-extractor.js.map +1 -0
  132. package/dist/extraction/parse-worker.d.ts +8 -0
  133. package/dist/extraction/parse-worker.d.ts.map +1 -0
  134. package/dist/extraction/parse-worker.js +94 -0
  135. package/dist/extraction/parse-worker.js.map +1 -0
  136. package/dist/extraction/svelte-extractor.d.ts +56 -0
  137. package/dist/extraction/svelte-extractor.d.ts.map +1 -0
  138. package/dist/extraction/svelte-extractor.js +272 -0
  139. package/dist/extraction/svelte-extractor.js.map +1 -0
  140. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  141. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  142. package/dist/extraction/tree-sitter-helpers.js +103 -0
  143. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  144. package/dist/extraction/tree-sitter-types.d.ts +179 -0
  145. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  146. package/dist/extraction/tree-sitter-types.js +10 -0
  147. package/dist/extraction/tree-sitter-types.js.map +1 -0
  148. package/dist/extraction/tree-sitter.d.ts +233 -0
  149. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  150. package/dist/extraction/tree-sitter.js +2393 -0
  151. package/dist/extraction/tree-sitter.js.map +1 -0
  152. package/dist/extraction/vue-extractor.d.ts +36 -0
  153. package/dist/extraction/vue-extractor.d.ts.map +1 -0
  154. package/dist/extraction/vue-extractor.js +163 -0
  155. package/dist/extraction/vue-extractor.js.map +1 -0
  156. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  157. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  158. package/dist/graph/index.d.ts +8 -0
  159. package/dist/graph/index.d.ts.map +1 -0
  160. package/dist/graph/index.js +13 -0
  161. package/dist/graph/index.js.map +1 -0
  162. package/dist/graph/queries.d.ts +106 -0
  163. package/dist/graph/queries.d.ts.map +1 -0
  164. package/dist/graph/queries.js +366 -0
  165. package/dist/graph/queries.js.map +1 -0
  166. package/dist/graph/traversal.d.ts +127 -0
  167. package/dist/graph/traversal.d.ts.map +1 -0
  168. package/dist/graph/traversal.js +493 -0
  169. package/dist/graph/traversal.js.map +1 -0
  170. package/dist/index.d.ts +504 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +982 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/installer/claude-md-template.d.ts +10 -0
  175. package/dist/installer/claude-md-template.d.ts.map +1 -0
  176. package/dist/installer/claude-md-template.js +46 -0
  177. package/dist/installer/claude-md-template.js.map +1 -0
  178. package/dist/installer/config-writer.d.ts +36 -0
  179. package/dist/installer/config-writer.d.ts.map +1 -0
  180. package/dist/installer/config-writer.js +304 -0
  181. package/dist/installer/config-writer.js.map +1 -0
  182. package/dist/installer/index.d.ts +12 -0
  183. package/dist/installer/index.d.ts.map +1 -0
  184. package/dist/installer/index.js +201 -0
  185. package/dist/installer/index.js.map +1 -0
  186. package/dist/mcp/index.d.ts +82 -0
  187. package/dist/mcp/index.d.ts.map +1 -0
  188. package/dist/mcp/index.js +330 -0
  189. package/dist/mcp/index.js.map +1 -0
  190. package/dist/mcp/server-instructions.d.ts +19 -0
  191. package/dist/mcp/server-instructions.d.ts.map +1 -0
  192. package/dist/mcp/server-instructions.js +59 -0
  193. package/dist/mcp/server-instructions.js.map +1 -0
  194. package/dist/mcp/tools.d.ts +187 -0
  195. package/dist/mcp/tools.d.ts.map +1 -0
  196. package/dist/mcp/tools.js +1250 -0
  197. package/dist/mcp/tools.js.map +1 -0
  198. package/dist/mcp/transport.d.ts +89 -0
  199. package/dist/mcp/transport.d.ts.map +1 -0
  200. package/dist/mcp/transport.js +170 -0
  201. package/dist/mcp/transport.js.map +1 -0
  202. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  203. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  204. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  205. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  206. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  207. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  208. package/dist/resolution/frameworks/csharp.js +213 -0
  209. package/dist/resolution/frameworks/csharp.js.map +1 -0
  210. package/dist/resolution/frameworks/express.d.ts +8 -0
  211. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  212. package/dist/resolution/frameworks/express.js +225 -0
  213. package/dist/resolution/frameworks/express.js.map +1 -0
  214. package/dist/resolution/frameworks/go.d.ts +8 -0
  215. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  216. package/dist/resolution/frameworks/go.js +158 -0
  217. package/dist/resolution/frameworks/go.js.map +1 -0
  218. package/dist/resolution/frameworks/index.d.ts +41 -0
  219. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  220. package/dist/resolution/frameworks/index.js +129 -0
  221. package/dist/resolution/frameworks/index.js.map +1 -0
  222. package/dist/resolution/frameworks/java.d.ts +8 -0
  223. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  224. package/dist/resolution/frameworks/java.js +177 -0
  225. package/dist/resolution/frameworks/java.js.map +1 -0
  226. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  227. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  228. package/dist/resolution/frameworks/laravel.js +248 -0
  229. package/dist/resolution/frameworks/laravel.js.map +1 -0
  230. package/dist/resolution/frameworks/python.d.ts +10 -0
  231. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  232. package/dist/resolution/frameworks/python.js +278 -0
  233. package/dist/resolution/frameworks/python.js.map +1 -0
  234. package/dist/resolution/frameworks/react.d.ts +8 -0
  235. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  236. package/dist/resolution/frameworks/react.js +272 -0
  237. package/dist/resolution/frameworks/react.js.map +1 -0
  238. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  239. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  240. package/dist/resolution/frameworks/ruby.js +198 -0
  241. package/dist/resolution/frameworks/ruby.js.map +1 -0
  242. package/dist/resolution/frameworks/rust.d.ts +8 -0
  243. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  244. package/dist/resolution/frameworks/rust.js +207 -0
  245. package/dist/resolution/frameworks/rust.js.map +1 -0
  246. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  247. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  248. package/dist/resolution/frameworks/svelte.js +249 -0
  249. package/dist/resolution/frameworks/svelte.js.map +1 -0
  250. package/dist/resolution/frameworks/swift.d.ts +10 -0
  251. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  252. package/dist/resolution/frameworks/swift.js +376 -0
  253. package/dist/resolution/frameworks/swift.js.map +1 -0
  254. package/dist/resolution/frameworks/vue.d.ts +9 -0
  255. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  256. package/dist/resolution/frameworks/vue.js +306 -0
  257. package/dist/resolution/frameworks/vue.js.map +1 -0
  258. package/dist/resolution/import-resolver.d.ts +40 -0
  259. package/dist/resolution/import-resolver.d.ts.map +1 -0
  260. package/dist/resolution/import-resolver.js +663 -0
  261. package/dist/resolution/import-resolver.js.map +1 -0
  262. package/dist/resolution/index.d.ts +106 -0
  263. package/dist/resolution/index.d.ts.map +1 -0
  264. package/dist/resolution/index.js +709 -0
  265. package/dist/resolution/index.js.map +1 -0
  266. package/dist/resolution/name-matcher.d.ts +32 -0
  267. package/dist/resolution/name-matcher.d.ts.map +1 -0
  268. package/dist/resolution/name-matcher.js +384 -0
  269. package/dist/resolution/name-matcher.js.map +1 -0
  270. package/dist/resolution/path-aliases.d.ts +68 -0
  271. package/dist/resolution/path-aliases.d.ts.map +1 -0
  272. package/dist/resolution/path-aliases.js +238 -0
  273. package/dist/resolution/path-aliases.js.map +1 -0
  274. package/dist/resolution/strip-comments.d.ts +27 -0
  275. package/dist/resolution/strip-comments.d.ts.map +1 -0
  276. package/dist/resolution/strip-comments.js +441 -0
  277. package/dist/resolution/strip-comments.js.map +1 -0
  278. package/dist/resolution/types.d.ts +172 -0
  279. package/dist/resolution/types.d.ts.map +1 -0
  280. package/dist/resolution/types.js +8 -0
  281. package/dist/resolution/types.js.map +1 -0
  282. package/dist/search/query-parser.d.ts +57 -0
  283. package/dist/search/query-parser.d.ts.map +1 -0
  284. package/dist/search/query-parser.js +177 -0
  285. package/dist/search/query-parser.js.map +1 -0
  286. package/dist/search/query-utils.d.ts +53 -0
  287. package/dist/search/query-utils.d.ts.map +1 -0
  288. package/dist/search/query-utils.js +347 -0
  289. package/dist/search/query-utils.js.map +1 -0
  290. package/dist/sync/index.d.ts +13 -0
  291. package/dist/sync/index.d.ts.map +1 -0
  292. package/dist/sync/index.js +17 -0
  293. package/dist/sync/index.js.map +1 -0
  294. package/dist/sync/watcher.d.ts +81 -0
  295. package/dist/sync/watcher.d.ts.map +1 -0
  296. package/dist/sync/watcher.js +184 -0
  297. package/dist/sync/watcher.js.map +1 -0
  298. package/dist/types.d.ts +438 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/types.js +263 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/ui/shimmer-progress.d.ts +11 -0
  303. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  304. package/dist/ui/shimmer-progress.js +90 -0
  305. package/dist/ui/shimmer-progress.js.map +1 -0
  306. package/dist/ui/shimmer-worker.d.ts +2 -0
  307. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  308. package/dist/ui/shimmer-worker.js +112 -0
  309. package/dist/ui/shimmer-worker.js.map +1 -0
  310. package/dist/ui/types.d.ts +17 -0
  311. package/dist/ui/types.d.ts.map +1 -0
  312. package/dist/ui/types.js +3 -0
  313. package/dist/ui/types.js.map +1 -0
  314. package/dist/utils.d.ts +205 -0
  315. package/dist/utils.d.ts.map +1 -0
  316. package/dist/utils.js +549 -0
  317. package/dist/utils.js.map +1 -0
  318. package/dist/vectors/embedder.d.ts +121 -0
  319. package/dist/vectors/embedder.d.ts.map +1 -0
  320. package/dist/vectors/embedder.js +237 -0
  321. package/dist/vectors/embedder.js.map +1 -0
  322. package/dist/vectors/index.d.ts +9 -0
  323. package/dist/vectors/index.d.ts.map +1 -0
  324. package/dist/vectors/index.js +20 -0
  325. package/dist/vectors/index.js.map +1 -0
  326. package/dist/vectors/manager.d.ts +124 -0
  327. package/dist/vectors/manager.d.ts.map +1 -0
  328. package/dist/vectors/manager.js +322 -0
  329. package/dist/vectors/manager.js.map +1 -0
  330. package/dist/vectors/search.d.ts +143 -0
  331. package/dist/vectors/search.d.ts.map +1 -0
  332. package/dist/vectors/search.js +460 -0
  333. package/dist/vectors/search.js.map +1 -0
  334. package/dist/visualizer/public/index.html +1994 -0
  335. package/dist/visualizer/server.d.ts +46 -0
  336. package/dist/visualizer/server.d.ts.map +1 -0
  337. package/dist/visualizer/server.js +491 -0
  338. package/dist/visualizer/server.js.map +1 -0
  339. package/package.json +60 -0
  340. package/scripts/patch-tree-sitter-dart.js +112 -0
package/dist/utils.js ADDED
@@ -0,0 +1,549 @@
1
+ "use strict";
2
+ /**
3
+ * CodeGraph Utilities
4
+ *
5
+ * Common utility functions for memory management, concurrency, batching,
6
+ * and security validation.
7
+ *
8
+ * @module utils
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { Mutex, processInBatches, MemoryMonitor, validatePathWithinRoot } from 'codegraph';
13
+ *
14
+ * // Use mutex for concurrent safety
15
+ * const mutex = new Mutex();
16
+ * await mutex.withLock(async () => {
17
+ * await performCriticalOperation();
18
+ * });
19
+ *
20
+ * // Process items in batches to manage memory
21
+ * const results = await processInBatches(items, 100, async (item) => {
22
+ * return await processItem(item);
23
+ * });
24
+ *
25
+ * // Monitor memory usage
26
+ * const monitor = new MemoryMonitor(512, (usage) => {
27
+ * console.warn(`Memory usage exceeded 512MB: ${usage / 1024 / 1024}MB`);
28
+ * });
29
+ * monitor.start();
30
+ * ```
31
+ */
32
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
33
+ if (k2 === undefined) k2 = k;
34
+ var desc = Object.getOwnPropertyDescriptor(m, k);
35
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
36
+ desc = { enumerable: true, get: function() { return m[k]; } };
37
+ }
38
+ Object.defineProperty(o, k2, desc);
39
+ }) : (function(o, m, k, k2) {
40
+ if (k2 === undefined) k2 = k;
41
+ o[k2] = m[k];
42
+ }));
43
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
44
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
45
+ }) : function(o, v) {
46
+ o["default"] = v;
47
+ });
48
+ var __importStar = (this && this.__importStar) || (function () {
49
+ var ownKeys = function(o) {
50
+ ownKeys = Object.getOwnPropertyNames || function (o) {
51
+ var ar = [];
52
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
53
+ return ar;
54
+ };
55
+ return ownKeys(o);
56
+ };
57
+ return function (mod) {
58
+ if (mod && mod.__esModule) return mod;
59
+ var result = {};
60
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
61
+ __setModuleDefault(result, mod);
62
+ return result;
63
+ };
64
+ })();
65
+ Object.defineProperty(exports, "__esModule", { value: true });
66
+ exports.MemoryMonitor = exports.Mutex = exports.FileLock = void 0;
67
+ exports.validatePathWithinRoot = validatePathWithinRoot;
68
+ exports.validateProjectPath = validateProjectPath;
69
+ exports.isPathWithinRoot = isPathWithinRoot;
70
+ exports.isPathWithinRootReal = isPathWithinRootReal;
71
+ exports.safeJsonParse = safeJsonParse;
72
+ exports.clamp = clamp;
73
+ exports.normalizePath = normalizePath;
74
+ exports.processInBatches = processInBatches;
75
+ exports.readFileInChunks = readFileInChunks;
76
+ exports.debounce = debounce;
77
+ exports.throttle = throttle;
78
+ exports.estimateSize = estimateSize;
79
+ const fs = __importStar(require("fs"));
80
+ const path = __importStar(require("path"));
81
+ // ============================================================
82
+ // SECURITY UTILITIES
83
+ // ============================================================
84
+ /**
85
+ * Sensitive system directories that should never be used as project roots.
86
+ * Checked on all platforms; non-applicable paths are harmlessly skipped.
87
+ */
88
+ const SENSITIVE_PATHS = new Set([
89
+ '/', '/etc', '/usr', '/bin', '/sbin', '/var', '/tmp', '/dev', '/proc', '/sys',
90
+ '/root', '/boot', '/lib', '/lib64', '/opt',
91
+ 'C:\\', 'C:\\Windows', 'C:\\Windows\\System32',
92
+ ]);
93
+ /**
94
+ * Validate that a resolved file path stays within the project root.
95
+ * Prevents path traversal attacks (e.g. node.filePath = "../../etc/passwd").
96
+ *
97
+ * @param projectRoot - The project root directory
98
+ * @param filePath - The relative file path to validate
99
+ * @returns The resolved absolute path, or null if it escapes the root
100
+ */
101
+ function validatePathWithinRoot(projectRoot, filePath) {
102
+ const resolved = path.resolve(projectRoot, filePath);
103
+ const normalizedRoot = path.resolve(projectRoot);
104
+ if (!resolved.startsWith(normalizedRoot + path.sep) && resolved !== normalizedRoot) {
105
+ return null;
106
+ }
107
+ return resolved;
108
+ }
109
+ /**
110
+ * Validate that a path is a safe project root directory.
111
+ *
112
+ * Rejects sensitive system directories and ensures the path is
113
+ * a real, existing directory. Used at MCP and API entry points
114
+ * to prevent arbitrary directory access.
115
+ *
116
+ * @param dirPath - The path to validate
117
+ * @returns An error message if invalid, or null if valid
118
+ */
119
+ function validateProjectPath(dirPath) {
120
+ const resolved = path.resolve(dirPath);
121
+ // Block sensitive system directories
122
+ if (SENSITIVE_PATHS.has(resolved) || SENSITIVE_PATHS.has(resolved.toLowerCase())) {
123
+ return `Refusing to operate on sensitive system directory: ${resolved}`;
124
+ }
125
+ // Also block common sensitive home subdirectories
126
+ const homeDir = require('os').homedir();
127
+ const sensitiveHomeDirs = ['.ssh', '.gnupg', '.aws', '.config'];
128
+ for (const dir of sensitiveHomeDirs) {
129
+ const sensitivePath = path.join(homeDir, dir);
130
+ if (resolved === sensitivePath || resolved.startsWith(sensitivePath + path.sep)) {
131
+ return `Refusing to operate on sensitive directory: ${resolved}`;
132
+ }
133
+ }
134
+ // Verify it's a real directory
135
+ try {
136
+ const stats = fs.statSync(resolved);
137
+ if (!stats.isDirectory()) {
138
+ return `Path is not a directory: ${resolved}`;
139
+ }
140
+ }
141
+ catch {
142
+ return `Path does not exist or is not accessible: ${resolved}`;
143
+ }
144
+ return null;
145
+ }
146
+ /**
147
+ * Check if a file path resolves to a location within the given root directory.
148
+ *
149
+ * Prevents path traversal attacks by ensuring the resolved absolute path
150
+ * starts with the resolved root path. Handles '..' sequences, symlink-like
151
+ * relative paths, and platform-specific separators.
152
+ *
153
+ * @param filePath - The path to check (can be relative or absolute)
154
+ * @param rootDir - The root directory that filePath must stay within
155
+ * @returns true if filePath resolves to a location within rootDir
156
+ */
157
+ function isPathWithinRoot(filePath, rootDir) {
158
+ const resolvedPath = path.resolve(rootDir, filePath);
159
+ const resolvedRoot = path.resolve(rootDir);
160
+ return resolvedPath.startsWith(resolvedRoot + path.sep) || resolvedPath === resolvedRoot;
161
+ }
162
+ /**
163
+ * Like isPathWithinRoot but also resolves symlinks via fs.realpathSync.
164
+ *
165
+ * This catches symlink escapes where the logical path appears to be within
166
+ * root but the real path on disk points elsewhere. Falls back to logical
167
+ * path checking if realpath resolution fails (e.g. broken symlink).
168
+ */
169
+ function isPathWithinRootReal(filePath, rootDir) {
170
+ // First do the cheap logical check
171
+ if (!isPathWithinRoot(filePath, rootDir)) {
172
+ return false;
173
+ }
174
+ // Then verify with realpath to catch symlink escapes
175
+ try {
176
+ const realPath = fs.realpathSync(path.resolve(rootDir, filePath));
177
+ const realRoot = fs.realpathSync(rootDir);
178
+ return realPath.startsWith(realRoot + path.sep) || realPath === realRoot;
179
+ }
180
+ catch {
181
+ // If realpath fails (broken symlink, permissions), fall back to logical check
182
+ return true;
183
+ }
184
+ }
185
+ /**
186
+ * Safely parse JSON with a fallback value.
187
+ * Prevents crashes from corrupted database metadata.
188
+ */
189
+ function safeJsonParse(value, fallback) {
190
+ try {
191
+ return JSON.parse(value);
192
+ }
193
+ catch {
194
+ return fallback;
195
+ }
196
+ }
197
+ /**
198
+ * Clamp a numeric value to a range.
199
+ * Used to enforce sane limits on MCP tool inputs.
200
+ */
201
+ function clamp(value, min, max) {
202
+ return Math.max(min, Math.min(max, value));
203
+ }
204
+ /**
205
+ * Normalize a file path to use forward slashes.
206
+ * Fixes Windows backslash paths so glob matching works consistently.
207
+ */
208
+ function normalizePath(filePath) {
209
+ return filePath.replace(/\\/g, '/');
210
+ }
211
+ /**
212
+ * Cross-process file lock using a lock file with PID tracking.
213
+ *
214
+ * Prevents multiple processes (e.g., git hooks, CLI, MCP server) from
215
+ * writing to the same database simultaneously.
216
+ */
217
+ class FileLock {
218
+ lockPath;
219
+ held = false;
220
+ /** Locks older than this are considered stale regardless of PID status */
221
+ static STALE_TIMEOUT_MS = 2 * 60 * 1000; // 2 minutes
222
+ constructor(lockPath) {
223
+ this.lockPath = lockPath;
224
+ }
225
+ /**
226
+ * Acquire the lock. Throws if the lock is held by another live process.
227
+ */
228
+ acquire() {
229
+ // Check for existing lock
230
+ if (fs.existsSync(this.lockPath)) {
231
+ try {
232
+ const content = fs.readFileSync(this.lockPath, 'utf-8').trim();
233
+ const pid = parseInt(content, 10);
234
+ const stat = fs.statSync(this.lockPath);
235
+ const lockAge = Date.now() - stat.mtimeMs;
236
+ // Treat locks older than the timeout as stale, regardless of PID
237
+ if (lockAge < FileLock.STALE_TIMEOUT_MS && !isNaN(pid) && this.isProcessAlive(pid)) {
238
+ throw new Error(`CodeGraph database is locked by another process (PID ${pid}). ` +
239
+ `If this is stale, run 'codegraph unlock' or delete ${this.lockPath}`);
240
+ }
241
+ // Stale lock (dead process or timed out) - remove it
242
+ fs.unlinkSync(this.lockPath);
243
+ }
244
+ catch (err) {
245
+ if (err instanceof Error && err.message.includes('locked by another')) {
246
+ throw err;
247
+ }
248
+ // Other errors reading lock file - try to remove it
249
+ try {
250
+ fs.unlinkSync(this.lockPath);
251
+ }
252
+ catch { /* ignore */ }
253
+ }
254
+ }
255
+ // Write our PID to the lock file using exclusive create flag
256
+ try {
257
+ fs.writeFileSync(this.lockPath, String(process.pid), { flag: 'wx' });
258
+ this.held = true;
259
+ }
260
+ catch (err) {
261
+ if (err.code === 'EEXIST') {
262
+ // Race condition: another process grabbed the lock between our check and write
263
+ throw new Error('CodeGraph database is locked by another process. ' +
264
+ `If this is stale, run 'codegraph unlock' or delete ${this.lockPath}`);
265
+ }
266
+ throw err;
267
+ }
268
+ }
269
+ /**
270
+ * Release the lock
271
+ */
272
+ release() {
273
+ if (!this.held)
274
+ return;
275
+ try {
276
+ // Only remove if we still own it (check PID)
277
+ const content = fs.readFileSync(this.lockPath, 'utf-8').trim();
278
+ if (parseInt(content, 10) === process.pid) {
279
+ fs.unlinkSync(this.lockPath);
280
+ }
281
+ }
282
+ catch {
283
+ // Lock file already gone - that's fine
284
+ }
285
+ this.held = false;
286
+ }
287
+ /**
288
+ * Execute a function while holding the lock
289
+ */
290
+ withLock(fn) {
291
+ this.acquire();
292
+ try {
293
+ return fn();
294
+ }
295
+ finally {
296
+ this.release();
297
+ }
298
+ }
299
+ /**
300
+ * Execute an async function while holding the lock
301
+ */
302
+ async withLockAsync(fn) {
303
+ this.acquire();
304
+ try {
305
+ return await fn();
306
+ }
307
+ finally {
308
+ this.release();
309
+ }
310
+ }
311
+ /**
312
+ * Check if a process is still running
313
+ */
314
+ isProcessAlive(pid) {
315
+ try {
316
+ process.kill(pid, 0);
317
+ return true;
318
+ }
319
+ catch {
320
+ return false;
321
+ }
322
+ }
323
+ }
324
+ exports.FileLock = FileLock;
325
+ /**
326
+ * Process items in batches to manage memory
327
+ *
328
+ * @param items - Array of items to process
329
+ * @param batchSize - Number of items per batch
330
+ * @param processor - Function to process each item
331
+ * @param onBatchComplete - Optional callback after each batch
332
+ * @returns Array of results
333
+ */
334
+ async function processInBatches(items, batchSize, processor, onBatchComplete) {
335
+ const results = [];
336
+ for (let i = 0; i < items.length; i += batchSize) {
337
+ const batch = items.slice(i, Math.min(i + batchSize, items.length));
338
+ const batchResults = await Promise.all(batch.map((item, idx) => processor(item, i + idx)));
339
+ results.push(...batchResults);
340
+ if (onBatchComplete) {
341
+ onBatchComplete(Math.min(i + batchSize, items.length), items.length);
342
+ }
343
+ // Allow GC between batches
344
+ if (global.gc) {
345
+ global.gc();
346
+ }
347
+ }
348
+ return results;
349
+ }
350
+ /**
351
+ * Simple mutex lock for preventing concurrent operations
352
+ */
353
+ class Mutex {
354
+ locked = false;
355
+ waitQueue = [];
356
+ /**
357
+ * Acquire the lock
358
+ *
359
+ * @returns A release function to call when done
360
+ */
361
+ async acquire() {
362
+ while (this.locked) {
363
+ await new Promise((resolve) => {
364
+ this.waitQueue.push(resolve);
365
+ });
366
+ }
367
+ this.locked = true;
368
+ return () => {
369
+ this.locked = false;
370
+ const next = this.waitQueue.shift();
371
+ if (next) {
372
+ next();
373
+ }
374
+ };
375
+ }
376
+ /**
377
+ * Execute a function while holding the lock
378
+ */
379
+ async withLock(fn) {
380
+ const release = await this.acquire();
381
+ try {
382
+ return await fn();
383
+ }
384
+ finally {
385
+ release();
386
+ }
387
+ }
388
+ /**
389
+ * Check if the lock is currently held
390
+ */
391
+ isLocked() {
392
+ return this.locked;
393
+ }
394
+ }
395
+ exports.Mutex = Mutex;
396
+ /**
397
+ * Chunked file reader for large files
398
+ *
399
+ * Reads a file in chunks to avoid loading entire file into memory.
400
+ */
401
+ async function* readFileInChunks(filePath, chunkSize = 64 * 1024) {
402
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
403
+ const fd = fs.openSync(filePath, 'r');
404
+ const buffer = Buffer.alloc(chunkSize);
405
+ try {
406
+ let bytesRead;
407
+ while ((bytesRead = fs.readSync(fd, buffer, 0, chunkSize, null)) > 0) {
408
+ yield buffer.toString('utf-8', 0, bytesRead);
409
+ }
410
+ }
411
+ finally {
412
+ fs.closeSync(fd);
413
+ }
414
+ }
415
+ /**
416
+ * Debounce a function
417
+ *
418
+ * @param fn - Function to debounce
419
+ * @param delay - Delay in milliseconds
420
+ * @returns Debounced function
421
+ */
422
+ function debounce(fn, delay) {
423
+ let timeoutId = null;
424
+ return (...args) => {
425
+ if (timeoutId) {
426
+ clearTimeout(timeoutId);
427
+ }
428
+ timeoutId = setTimeout(() => {
429
+ fn(...args);
430
+ timeoutId = null;
431
+ }, delay);
432
+ };
433
+ }
434
+ /**
435
+ * Throttle a function
436
+ *
437
+ * @param fn - Function to throttle
438
+ * @param limit - Minimum time between calls in milliseconds
439
+ * @returns Throttled function
440
+ */
441
+ function throttle(fn, limit) {
442
+ let lastCall = 0;
443
+ let timeoutId = null;
444
+ return (...args) => {
445
+ const now = Date.now();
446
+ const remaining = limit - (now - lastCall);
447
+ if (remaining <= 0) {
448
+ if (timeoutId) {
449
+ clearTimeout(timeoutId);
450
+ timeoutId = null;
451
+ }
452
+ lastCall = now;
453
+ fn(...args);
454
+ }
455
+ else if (!timeoutId) {
456
+ timeoutId = setTimeout(() => {
457
+ lastCall = Date.now();
458
+ timeoutId = null;
459
+ fn(...args);
460
+ }, remaining);
461
+ }
462
+ };
463
+ }
464
+ /**
465
+ * Estimate memory usage of an object (rough approximation)
466
+ *
467
+ * @param obj - Object to measure
468
+ * @returns Approximate size in bytes
469
+ */
470
+ function estimateSize(obj) {
471
+ const seen = new WeakSet();
472
+ function sizeOf(value) {
473
+ if (value === null || value === undefined) {
474
+ return 0;
475
+ }
476
+ switch (typeof value) {
477
+ case 'boolean':
478
+ return 4;
479
+ case 'number':
480
+ return 8;
481
+ case 'string':
482
+ return 2 * value.length;
483
+ case 'object':
484
+ if (seen.has(value)) {
485
+ return 0;
486
+ }
487
+ seen.add(value);
488
+ if (Array.isArray(value)) {
489
+ return value.reduce((acc, item) => acc + sizeOf(item), 0);
490
+ }
491
+ return Object.entries(value).reduce((acc, [key, val]) => acc + sizeOf(key) + sizeOf(val), 0);
492
+ default:
493
+ return 0;
494
+ }
495
+ }
496
+ return sizeOf(obj);
497
+ }
498
+ /**
499
+ * Memory monitor for tracking usage during operations
500
+ */
501
+ class MemoryMonitor {
502
+ checkInterval = null;
503
+ peakUsage = 0;
504
+ threshold;
505
+ onThresholdExceeded;
506
+ constructor(thresholdMB = 500, onThresholdExceeded) {
507
+ this.threshold = thresholdMB * 1024 * 1024;
508
+ this.onThresholdExceeded = onThresholdExceeded;
509
+ }
510
+ /**
511
+ * Start monitoring memory usage
512
+ */
513
+ start(intervalMs = 1000) {
514
+ this.stop();
515
+ this.peakUsage = 0;
516
+ this.checkInterval = setInterval(() => {
517
+ const usage = process.memoryUsage().heapUsed;
518
+ if (usage > this.peakUsage) {
519
+ this.peakUsage = usage;
520
+ }
521
+ if (usage > this.threshold && this.onThresholdExceeded) {
522
+ this.onThresholdExceeded(usage);
523
+ }
524
+ }, intervalMs);
525
+ }
526
+ /**
527
+ * Stop monitoring
528
+ */
529
+ stop() {
530
+ if (this.checkInterval) {
531
+ clearInterval(this.checkInterval);
532
+ this.checkInterval = null;
533
+ }
534
+ }
535
+ /**
536
+ * Get peak memory usage in bytes
537
+ */
538
+ getPeakUsage() {
539
+ return this.peakUsage;
540
+ }
541
+ /**
542
+ * Get current memory usage in bytes
543
+ */
544
+ getCurrentUsage() {
545
+ return process.memoryUsage().heapUsed;
546
+ }
547
+ }
548
+ exports.MemoryMonitor = MemoryMonitor;
549
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Text Embedder
3
+ *
4
+ * Generates vector embeddings through the Gemini API. Vector storage and
5
+ * similarity search remain local.
6
+ */
7
+ /**
8
+ * Default Gemini embedding model.
9
+ */
10
+ export declare const DEFAULT_MODEL = "gemini-embedding-2";
11
+ export declare const EMBEDDING_DIMENSION = 768;
12
+ /**
13
+ * Options for the embedder
14
+ */
15
+ export interface EmbedderOptions {
16
+ /** Gemini API key */
17
+ apiKey?: string;
18
+ /** Model ID to use (default: gemini-embedding-2) */
19
+ modelId?: string;
20
+ /** Embedding dimension to request from Gemini */
21
+ outputDimensionality?: number;
22
+ /** Whether to show progress during embedding generation */
23
+ showProgress?: boolean;
24
+ }
25
+ /**
26
+ * Text embedding result
27
+ */
28
+ export interface EmbeddingResult {
29
+ /** The embedding vector */
30
+ embedding: Float32Array;
31
+ /** Dimension of the embedding */
32
+ dimension: number;
33
+ /** Model used to generate the embedding */
34
+ model: string;
35
+ }
36
+ /**
37
+ * Batch embedding result
38
+ */
39
+ export interface BatchEmbeddingResult {
40
+ /** Array of embeddings in same order as input */
41
+ embeddings: Float32Array[];
42
+ /** Dimension of each embedding */
43
+ dimension: number;
44
+ /** Model used to generate embeddings */
45
+ model: string;
46
+ /** Processing time in milliseconds */
47
+ durationMs: number;
48
+ }
49
+ /**
50
+ * Text Embedder using Gemini.
51
+ *
52
+ * Batch generation uses batchEmbedContents with one request per node text. Do
53
+ * not combine multiple nodes into one content.parts array because that produces
54
+ * a single aggregate embedding instead of node-level vectors.
55
+ */
56
+ export declare class TextEmbedder {
57
+ private apiKey?;
58
+ private modelId;
59
+ private dimension;
60
+ private initialized;
61
+ private lastRequestAt;
62
+ constructor(options?: EmbedderOptions);
63
+ /**
64
+ * Initialize the embedder by validating configuration.
65
+ */
66
+ initialize(): Promise<void>;
67
+ /**
68
+ * Check if the embedder is initialized
69
+ */
70
+ isInitialized(): boolean;
71
+ /**
72
+ * Get the model ID being used
73
+ */
74
+ getModelId(): string;
75
+ /**
76
+ * Get the embedding dimension
77
+ */
78
+ getDimension(): number;
79
+ /**
80
+ * Generate embedding for a single text
81
+ */
82
+ embed(text: string): Promise<EmbeddingResult>;
83
+ /**
84
+ * Generate embedding for a query.
85
+ */
86
+ embedQuery(query: string): Promise<EmbeddingResult>;
87
+ /**
88
+ * Generate embeddings for multiple texts in node order.
89
+ */
90
+ embedBatch(texts: string[], type?: 'document' | 'search_query'): Promise<BatchEmbeddingResult>;
91
+ private embedPreparedBatch;
92
+ private throttleRequests;
93
+ /**
94
+ * Prepare text for retrieval-oriented embedding.
95
+ */
96
+ private prepareText;
97
+ /**
98
+ * Create text representation of a code node for embedding.
99
+ */
100
+ static createNodeText(node: {
101
+ name: string;
102
+ kind: string;
103
+ qualifiedName?: string;
104
+ signature?: string;
105
+ docstring?: string;
106
+ filePath: string;
107
+ }): string;
108
+ /**
109
+ * Compute cosine similarity between two embeddings
110
+ */
111
+ static cosineSimilarity(a: Float32Array, b: Float32Array): number;
112
+ /**
113
+ * Release resources
114
+ */
115
+ dispose(): void;
116
+ }
117
+ /**
118
+ * Create a text embedder instance
119
+ */
120
+ export declare function createEmbedder(options?: EmbedderOptions): TextEmbedder;
121
+ //# sourceMappingURL=embedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/vectors/embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAClD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAKvC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,SAAS,EAAE,YAAY,CAAC;IAExB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,UAAU,EAAE,YAAY,EAAE,CAAC;IAE3B,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAElB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,GAAE,eAAoB;IAMzC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAanD;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAazD;;OAEG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,UAAU,GAAG,cAA2B,GAC7C,OAAO,CAAC,oBAAoB,CAAC;YA4BlB,kBAAkB;YAuDlB,gBAAgB;IAS9B;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,MAAM;IAsBV;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;IA2BjE;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,YAAY,CAEtE"}