@liendev/core 0.19.5

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 (298) hide show
  1. package/README.md +336 -0
  2. package/dist/config/loader.d.ts +12 -0
  3. package/dist/config/loader.d.ts.map +1 -0
  4. package/dist/config/loader.js +46 -0
  5. package/dist/config/loader.js.map +1 -0
  6. package/dist/config/merge.d.ts +20 -0
  7. package/dist/config/merge.d.ts.map +1 -0
  8. package/dist/config/merge.js +71 -0
  9. package/dist/config/merge.js.map +1 -0
  10. package/dist/config/migration-manager.d.ts +46 -0
  11. package/dist/config/migration-manager.d.ts.map +1 -0
  12. package/dist/config/migration-manager.js +119 -0
  13. package/dist/config/migration-manager.js.map +1 -0
  14. package/dist/config/migration.d.ts +20 -0
  15. package/dist/config/migration.d.ts.map +1 -0
  16. package/dist/config/migration.js +155 -0
  17. package/dist/config/migration.js.map +1 -0
  18. package/dist/config/schema.d.ts +101 -0
  19. package/dist/config/schema.d.ts.map +1 -0
  20. package/dist/config/schema.js +58 -0
  21. package/dist/config/schema.js.map +1 -0
  22. package/dist/config/service.d.ts +122 -0
  23. package/dist/config/service.d.ts.map +1 -0
  24. package/dist/config/service.js +477 -0
  25. package/dist/config/service.js.map +1 -0
  26. package/dist/constants.d.ts +20 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +43 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/embeddings/cache.d.ts +45 -0
  31. package/dist/embeddings/cache.d.ts.map +1 -0
  32. package/dist/embeddings/cache.js +109 -0
  33. package/dist/embeddings/cache.js.map +1 -0
  34. package/dist/embeddings/local.d.ts +10 -0
  35. package/dist/embeddings/local.d.ts.map +1 -0
  36. package/dist/embeddings/local.js +63 -0
  37. package/dist/embeddings/local.js.map +1 -0
  38. package/dist/embeddings/types.d.ts +9 -0
  39. package/dist/embeddings/types.d.ts.map +1 -0
  40. package/dist/embeddings/types.js +5 -0
  41. package/dist/embeddings/types.js.map +1 -0
  42. package/dist/errors/codes.d.ts +18 -0
  43. package/dist/errors/codes.d.ts.map +1 -0
  44. package/dist/errors/codes.js +25 -0
  45. package/dist/errors/codes.js.map +1 -0
  46. package/dist/errors/index.d.ts +85 -0
  47. package/dist/errors/index.d.ts.map +1 -0
  48. package/dist/errors/index.js +134 -0
  49. package/dist/errors/index.js.map +1 -0
  50. package/dist/frameworks/detector-service.d.ts +59 -0
  51. package/dist/frameworks/detector-service.d.ts.map +1 -0
  52. package/dist/frameworks/detector-service.js +219 -0
  53. package/dist/frameworks/detector-service.js.map +1 -0
  54. package/dist/frameworks/laravel/config.d.ts +6 -0
  55. package/dist/frameworks/laravel/config.d.ts.map +1 -0
  56. package/dist/frameworks/laravel/config.js +68 -0
  57. package/dist/frameworks/laravel/config.js.map +1 -0
  58. package/dist/frameworks/laravel/detector.d.ts +6 -0
  59. package/dist/frameworks/laravel/detector.d.ts.map +1 -0
  60. package/dist/frameworks/laravel/detector.js +96 -0
  61. package/dist/frameworks/laravel/detector.js.map +1 -0
  62. package/dist/frameworks/nodejs/config.d.ts +6 -0
  63. package/dist/frameworks/nodejs/config.d.ts.map +1 -0
  64. package/dist/frameworks/nodejs/config.js +57 -0
  65. package/dist/frameworks/nodejs/config.js.map +1 -0
  66. package/dist/frameworks/nodejs/detector.d.ts +6 -0
  67. package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
  68. package/dist/frameworks/nodejs/detector.js +77 -0
  69. package/dist/frameworks/nodejs/detector.js.map +1 -0
  70. package/dist/frameworks/php/config.d.ts +6 -0
  71. package/dist/frameworks/php/config.d.ts.map +1 -0
  72. package/dist/frameworks/php/config.js +53 -0
  73. package/dist/frameworks/php/config.js.map +1 -0
  74. package/dist/frameworks/php/detector.d.ts +7 -0
  75. package/dist/frameworks/php/detector.d.ts.map +1 -0
  76. package/dist/frameworks/php/detector.js +101 -0
  77. package/dist/frameworks/php/detector.js.map +1 -0
  78. package/dist/frameworks/registry.d.ts +20 -0
  79. package/dist/frameworks/registry.d.ts.map +1 -0
  80. package/dist/frameworks/registry.js +38 -0
  81. package/dist/frameworks/registry.js.map +1 -0
  82. package/dist/frameworks/shopify/config.d.ts +6 -0
  83. package/dist/frameworks/shopify/config.d.ts.map +1 -0
  84. package/dist/frameworks/shopify/config.js +50 -0
  85. package/dist/frameworks/shopify/config.js.map +1 -0
  86. package/dist/frameworks/shopify/detector.d.ts +6 -0
  87. package/dist/frameworks/shopify/detector.d.ts.map +1 -0
  88. package/dist/frameworks/shopify/detector.js +103 -0
  89. package/dist/frameworks/shopify/detector.js.map +1 -0
  90. package/dist/frameworks/types.d.ts +51 -0
  91. package/dist/frameworks/types.d.ts.map +1 -0
  92. package/dist/frameworks/types.js +21 -0
  93. package/dist/frameworks/types.js.map +1 -0
  94. package/dist/git/tracker.d.ts +56 -0
  95. package/dist/git/tracker.d.ts.map +1 -0
  96. package/dist/git/tracker.js +189 -0
  97. package/dist/git/tracker.js.map +1 -0
  98. package/dist/git/utils.d.ts +60 -0
  99. package/dist/git/utils.d.ts.map +1 -0
  100. package/dist/git/utils.js +152 -0
  101. package/dist/git/utils.js.map +1 -0
  102. package/dist/index.d.ts +77 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +95 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/indexer/ast/chunker.d.ts +28 -0
  107. package/dist/indexer/ast/chunker.d.ts.map +1 -0
  108. package/dist/indexer/ast/chunker.js +268 -0
  109. package/dist/indexer/ast/chunker.js.map +1 -0
  110. package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
  111. package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
  112. package/dist/indexer/ast/complexity/cognitive.js +106 -0
  113. package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
  114. package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
  115. package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
  116. package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
  117. package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
  118. package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
  119. package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
  120. package/dist/indexer/ast/complexity/halstead.js +290 -0
  121. package/dist/indexer/ast/complexity/halstead.js.map +1 -0
  122. package/dist/indexer/ast/complexity/index.d.ts +13 -0
  123. package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
  124. package/dist/indexer/ast/complexity/index.js +12 -0
  125. package/dist/indexer/ast/complexity/index.js.map +1 -0
  126. package/dist/indexer/ast/parser.d.ts +27 -0
  127. package/dist/indexer/ast/parser.d.ts.map +1 -0
  128. package/dist/indexer/ast/parser.js +103 -0
  129. package/dist/indexer/ast/parser.js.map +1 -0
  130. package/dist/indexer/ast/symbols.d.ts +17 -0
  131. package/dist/indexer/ast/symbols.d.ts.map +1 -0
  132. package/dist/indexer/ast/symbols.js +265 -0
  133. package/dist/indexer/ast/symbols.js.map +1 -0
  134. package/dist/indexer/ast/traversers/index.d.ts +19 -0
  135. package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
  136. package/dist/indexer/ast/traversers/index.js +42 -0
  137. package/dist/indexer/ast/traversers/index.js.map +1 -0
  138. package/dist/indexer/ast/traversers/php.d.ts +21 -0
  139. package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
  140. package/dist/indexer/ast/traversers/php.js +67 -0
  141. package/dist/indexer/ast/traversers/php.js.map +1 -0
  142. package/dist/indexer/ast/traversers/python.d.ts +28 -0
  143. package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
  144. package/dist/indexer/ast/traversers/python.js +67 -0
  145. package/dist/indexer/ast/traversers/python.js.map +1 -0
  146. package/dist/indexer/ast/traversers/types.d.ts +98 -0
  147. package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
  148. package/dist/indexer/ast/traversers/types.js +2 -0
  149. package/dist/indexer/ast/traversers/types.js.map +1 -0
  150. package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
  151. package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
  152. package/dist/indexer/ast/traversers/typescript.js +88 -0
  153. package/dist/indexer/ast/traversers/typescript.js.map +1 -0
  154. package/dist/indexer/ast/types.d.ts +59 -0
  155. package/dist/indexer/ast/types.d.ts.map +1 -0
  156. package/dist/indexer/ast/types.js +2 -0
  157. package/dist/indexer/ast/types.js.map +1 -0
  158. package/dist/indexer/change-detector.d.ts +17 -0
  159. package/dist/indexer/change-detector.d.ts.map +1 -0
  160. package/dist/indexer/change-detector.js +207 -0
  161. package/dist/indexer/change-detector.js.map +1 -0
  162. package/dist/indexer/chunk-batch-processor.d.ts +103 -0
  163. package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
  164. package/dist/indexer/chunk-batch-processor.js +179 -0
  165. package/dist/indexer/chunk-batch-processor.js.map +1 -0
  166. package/dist/indexer/chunker.d.ts +10 -0
  167. package/dist/indexer/chunker.d.ts.map +1 -0
  168. package/dist/indexer/chunker.js +96 -0
  169. package/dist/indexer/chunker.js.map +1 -0
  170. package/dist/indexer/dependency-analyzer.d.ts +60 -0
  171. package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
  172. package/dist/indexer/dependency-analyzer.js +261 -0
  173. package/dist/indexer/dependency-analyzer.js.map +1 -0
  174. package/dist/indexer/incremental.d.ts +47 -0
  175. package/dist/indexer/incremental.d.ts.map +1 -0
  176. package/dist/indexer/incremental.js +284 -0
  177. package/dist/indexer/incremental.js.map +1 -0
  178. package/dist/indexer/index.d.ts +80 -0
  179. package/dist/indexer/index.d.ts.map +1 -0
  180. package/dist/indexer/index.js +364 -0
  181. package/dist/indexer/index.js.map +1 -0
  182. package/dist/indexer/json-template-chunker.d.ts +9 -0
  183. package/dist/indexer/json-template-chunker.d.ts.map +1 -0
  184. package/dist/indexer/json-template-chunker.js +83 -0
  185. package/dist/indexer/json-template-chunker.js.map +1 -0
  186. package/dist/indexer/liquid-chunker.d.ts +13 -0
  187. package/dist/indexer/liquid-chunker.d.ts.map +1 -0
  188. package/dist/indexer/liquid-chunker.js +272 -0
  189. package/dist/indexer/liquid-chunker.js.map +1 -0
  190. package/dist/indexer/manifest.d.ts +122 -0
  191. package/dist/indexer/manifest.d.ts.map +1 -0
  192. package/dist/indexer/manifest.js +262 -0
  193. package/dist/indexer/manifest.js.map +1 -0
  194. package/dist/indexer/progress-tracker.d.ts +35 -0
  195. package/dist/indexer/progress-tracker.d.ts.map +1 -0
  196. package/dist/indexer/progress-tracker.js +33 -0
  197. package/dist/indexer/progress-tracker.js.map +1 -0
  198. package/dist/indexer/scanner.d.ts +16 -0
  199. package/dist/indexer/scanner.d.ts.map +1 -0
  200. package/dist/indexer/scanner.js +159 -0
  201. package/dist/indexer/scanner.js.map +1 -0
  202. package/dist/indexer/symbol-extractor.d.ts +18 -0
  203. package/dist/indexer/symbol-extractor.d.ts.map +1 -0
  204. package/dist/indexer/symbol-extractor.js +351 -0
  205. package/dist/indexer/symbol-extractor.js.map +1 -0
  206. package/dist/indexer/types.d.ts +34 -0
  207. package/dist/indexer/types.d.ts.map +1 -0
  208. package/dist/indexer/types.js +2 -0
  209. package/dist/indexer/types.js.map +1 -0
  210. package/dist/insights/complexity-analyzer.d.ts +82 -0
  211. package/dist/insights/complexity-analyzer.d.ts.map +1 -0
  212. package/dist/insights/complexity-analyzer.js +356 -0
  213. package/dist/insights/complexity-analyzer.js.map +1 -0
  214. package/dist/insights/formatters/index.d.ts +11 -0
  215. package/dist/insights/formatters/index.d.ts.map +1 -0
  216. package/dist/insights/formatters/index.js +20 -0
  217. package/dist/insights/formatters/index.js.map +1 -0
  218. package/dist/insights/formatters/json.d.ts +7 -0
  219. package/dist/insights/formatters/json.d.ts.map +1 -0
  220. package/dist/insights/formatters/json.js +14 -0
  221. package/dist/insights/formatters/json.js.map +1 -0
  222. package/dist/insights/formatters/sarif.d.ts +6 -0
  223. package/dist/insights/formatters/sarif.d.ts.map +1 -0
  224. package/dist/insights/formatters/sarif.js +113 -0
  225. package/dist/insights/formatters/sarif.js.map +1 -0
  226. package/dist/insights/formatters/text.d.ts +6 -0
  227. package/dist/insights/formatters/text.d.ts.map +1 -0
  228. package/dist/insights/formatters/text.js +154 -0
  229. package/dist/insights/formatters/text.js.map +1 -0
  230. package/dist/insights/types.d.ts +73 -0
  231. package/dist/insights/types.d.ts.map +1 -0
  232. package/dist/insights/types.js +9 -0
  233. package/dist/insights/types.js.map +1 -0
  234. package/dist/types/index.d.ts +14 -0
  235. package/dist/types/index.d.ts.map +1 -0
  236. package/dist/types/index.js +8 -0
  237. package/dist/types/index.js.map +1 -0
  238. package/dist/utils/path-matching.d.ts +69 -0
  239. package/dist/utils/path-matching.d.ts.map +1 -0
  240. package/dist/utils/path-matching.js +123 -0
  241. package/dist/utils/path-matching.js.map +1 -0
  242. package/dist/utils/result.d.ts +65 -0
  243. package/dist/utils/result.d.ts.map +1 -0
  244. package/dist/utils/result.js +67 -0
  245. package/dist/utils/result.js.map +1 -0
  246. package/dist/utils/version.d.ts +22 -0
  247. package/dist/utils/version.d.ts.map +1 -0
  248. package/dist/utils/version.js +28 -0
  249. package/dist/utils/version.js.map +1 -0
  250. package/dist/vectordb/batch-insert.d.ts +14 -0
  251. package/dist/vectordb/batch-insert.d.ts.map +1 -0
  252. package/dist/vectordb/batch-insert.js +185 -0
  253. package/dist/vectordb/batch-insert.js.map +1 -0
  254. package/dist/vectordb/boosting/composer.d.ts +51 -0
  255. package/dist/vectordb/boosting/composer.d.ts.map +1 -0
  256. package/dist/vectordb/boosting/composer.js +65 -0
  257. package/dist/vectordb/boosting/composer.js.map +1 -0
  258. package/dist/vectordb/boosting/index.d.ts +22 -0
  259. package/dist/vectordb/boosting/index.d.ts.map +1 -0
  260. package/dist/vectordb/boosting/index.js +22 -0
  261. package/dist/vectordb/boosting/index.js.map +1 -0
  262. package/dist/vectordb/boosting/strategies.d.ts +40 -0
  263. package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
  264. package/dist/vectordb/boosting/strategies.js +174 -0
  265. package/dist/vectordb/boosting/strategies.js.map +1 -0
  266. package/dist/vectordb/boosting/types.d.ts +20 -0
  267. package/dist/vectordb/boosting/types.d.ts.map +1 -0
  268. package/dist/vectordb/boosting/types.js +2 -0
  269. package/dist/vectordb/boosting/types.js.map +1 -0
  270. package/dist/vectordb/intent-classifier.d.ts +99 -0
  271. package/dist/vectordb/intent-classifier.d.ts.map +1 -0
  272. package/dist/vectordb/intent-classifier.js +193 -0
  273. package/dist/vectordb/intent-classifier.js.map +1 -0
  274. package/dist/vectordb/lancedb.d.ts +45 -0
  275. package/dist/vectordb/lancedb.d.ts.map +1 -0
  276. package/dist/vectordb/lancedb.js +203 -0
  277. package/dist/vectordb/lancedb.js.map +1 -0
  278. package/dist/vectordb/maintenance.d.ts +18 -0
  279. package/dist/vectordb/maintenance.d.ts.map +1 -0
  280. package/dist/vectordb/maintenance.js +87 -0
  281. package/dist/vectordb/maintenance.js.map +1 -0
  282. package/dist/vectordb/query.d.ts +34 -0
  283. package/dist/vectordb/query.d.ts.map +1 -0
  284. package/dist/vectordb/query.js +303 -0
  285. package/dist/vectordb/query.js.map +1 -0
  286. package/dist/vectordb/relevance.d.ts +15 -0
  287. package/dist/vectordb/relevance.d.ts.map +1 -0
  288. package/dist/vectordb/relevance.js +19 -0
  289. package/dist/vectordb/relevance.js.map +1 -0
  290. package/dist/vectordb/types.d.ts +29 -0
  291. package/dist/vectordb/types.d.ts.map +1 -0
  292. package/dist/vectordb/types.js +2 -0
  293. package/dist/vectordb/types.js.map +1 -0
  294. package/dist/vectordb/version.d.ts +16 -0
  295. package/dist/vectordb/version.d.ts.map +1 -0
  296. package/dist/vectordb/version.js +40 -0
  297. package/dist/vectordb/version.js.map +1 -0
  298. package/package.json +66 -0
@@ -0,0 +1,477 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { defaultConfig, isLegacyConfig, isModernConfig } from './schema.js';
4
+ import { deepMergeConfig } from './merge.js';
5
+ import { needsMigration as checkNeedsMigration, migrateConfig as performMigration } from './migration.js';
6
+ import { ConfigError, wrapError } from '../errors/index.js';
7
+ /**
8
+ * ConfigService encapsulates all configuration operations including
9
+ * loading, saving, migration, and validation.
10
+ *
11
+ * This service provides a single point of truth for config management
12
+ * with comprehensive error handling and validation.
13
+ */
14
+ export class ConfigService {
15
+ static CONFIG_FILENAME = '.lien.config.json';
16
+ /**
17
+ * Load configuration from the specified directory.
18
+ * Automatically handles migration if needed.
19
+ *
20
+ * @param rootDir - Root directory containing the config file
21
+ * @returns Loaded and validated configuration
22
+ * @throws {ConfigError} If config is invalid or cannot be loaded
23
+ */
24
+ async load(rootDir = process.cwd()) {
25
+ const configPath = this.getConfigPath(rootDir);
26
+ try {
27
+ const configContent = await fs.readFile(configPath, 'utf-8');
28
+ const userConfig = JSON.parse(configContent);
29
+ // Check if migration is needed
30
+ if (this.needsMigration(userConfig)) {
31
+ console.log('🔄 Migrating config from v0.2.0 to v0.3.0...');
32
+ const result = await this.migrate(rootDir);
33
+ if (result.migrated && result.backupPath) {
34
+ const backupFilename = path.basename(result.backupPath);
35
+ console.log(`✅ Migration complete! Backup saved as ${backupFilename}`);
36
+ console.log('📝 Your config now uses the framework-based structure.');
37
+ }
38
+ return result.config;
39
+ }
40
+ // Merge with defaults first
41
+ const mergedConfig = deepMergeConfig(defaultConfig, userConfig);
42
+ // Then validate the merged config
43
+ const validation = this.validate(mergedConfig);
44
+ if (!validation.valid) {
45
+ throw new ConfigError(`Invalid configuration:\n${validation.errors.join('\n')}`, { errors: validation.errors, warnings: validation.warnings });
46
+ }
47
+ // Show warnings if any
48
+ if (validation.warnings.length > 0) {
49
+ console.warn('⚠️ Configuration warnings:');
50
+ validation.warnings.forEach(warning => console.warn(` ${warning}`));
51
+ }
52
+ return mergedConfig;
53
+ }
54
+ catch (error) {
55
+ if (error.code === 'ENOENT') {
56
+ // Config doesn't exist, return defaults
57
+ return defaultConfig;
58
+ }
59
+ if (error instanceof ConfigError) {
60
+ throw error;
61
+ }
62
+ if (error instanceof SyntaxError) {
63
+ throw new ConfigError('Failed to parse config file: Invalid JSON syntax', { path: configPath, originalError: error.message });
64
+ }
65
+ throw wrapError(error, 'Failed to load configuration', { path: configPath });
66
+ }
67
+ }
68
+ /**
69
+ * Save configuration to the specified directory.
70
+ * Validates the config before saving.
71
+ *
72
+ * @param rootDir - Root directory to save the config file
73
+ * @param config - Configuration to save
74
+ * @throws {ConfigError} If config is invalid or cannot be saved
75
+ */
76
+ async save(rootDir, config) {
77
+ const configPath = this.getConfigPath(rootDir);
78
+ // Validate before saving
79
+ const validation = this.validate(config);
80
+ if (!validation.valid) {
81
+ throw new ConfigError(`Cannot save invalid configuration:\n${validation.errors.join('\n')}`, { errors: validation.errors });
82
+ }
83
+ try {
84
+ const configJson = JSON.stringify(config, null, 2) + '\n';
85
+ await fs.writeFile(configPath, configJson, 'utf-8');
86
+ }
87
+ catch (error) {
88
+ throw wrapError(error, 'Failed to save configuration', { path: configPath });
89
+ }
90
+ }
91
+ /**
92
+ * Check if a configuration file exists in the specified directory.
93
+ *
94
+ * @param rootDir - Root directory to check
95
+ * @returns True if config file exists
96
+ */
97
+ async exists(rootDir = process.cwd()) {
98
+ const configPath = this.getConfigPath(rootDir);
99
+ try {
100
+ await fs.access(configPath);
101
+ return true;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ /**
108
+ * Migrate configuration from v0.2.0 to v0.3.0 format.
109
+ * Creates a backup of the original config file.
110
+ *
111
+ * @param rootDir - Root directory containing the config file
112
+ * @returns Migration result with status and new config
113
+ * @throws {ConfigError} If migration fails
114
+ */
115
+ async migrate(rootDir = process.cwd()) {
116
+ const configPath = this.getConfigPath(rootDir);
117
+ try {
118
+ // Read existing config
119
+ const configContent = await fs.readFile(configPath, 'utf-8');
120
+ const oldConfig = JSON.parse(configContent);
121
+ // Check if migration is needed
122
+ if (!this.needsMigration(oldConfig)) {
123
+ return {
124
+ migrated: false,
125
+ config: oldConfig,
126
+ };
127
+ }
128
+ // Perform migration
129
+ const newConfig = performMigration(oldConfig);
130
+ // Validate migrated config
131
+ const validation = this.validate(newConfig);
132
+ if (!validation.valid) {
133
+ throw new ConfigError(`Migration produced invalid configuration:\n${validation.errors.join('\n')}`, { errors: validation.errors });
134
+ }
135
+ // Create backup
136
+ const backupPath = `${configPath}.v0.2.0.backup`;
137
+ await fs.copyFile(configPath, backupPath);
138
+ // Write migrated config
139
+ await this.save(rootDir, newConfig);
140
+ return {
141
+ migrated: true,
142
+ backupPath,
143
+ config: newConfig,
144
+ };
145
+ }
146
+ catch (error) {
147
+ if (error.code === 'ENOENT') {
148
+ return {
149
+ migrated: false,
150
+ config: defaultConfig,
151
+ };
152
+ }
153
+ if (error instanceof ConfigError) {
154
+ throw error;
155
+ }
156
+ throw wrapError(error, 'Configuration migration failed', { path: configPath });
157
+ }
158
+ }
159
+ /**
160
+ * Check if a config object needs migration from v0.2.0 to v0.3.0.
161
+ *
162
+ * @param config - Config object to check
163
+ * @returns True if migration is needed
164
+ */
165
+ needsMigration(config) {
166
+ return checkNeedsMigration(config);
167
+ }
168
+ /**
169
+ * Validate a configuration object.
170
+ * Checks all constraints and returns detailed validation results.
171
+ *
172
+ * @param config - Configuration to validate
173
+ * @returns Validation result with errors and warnings
174
+ */
175
+ validate(config) {
176
+ const errors = [];
177
+ const warnings = [];
178
+ // Type check
179
+ if (!config || typeof config !== 'object') {
180
+ return {
181
+ valid: false,
182
+ errors: ['Configuration must be an object'],
183
+ warnings: [],
184
+ };
185
+ }
186
+ const cfg = config;
187
+ // Check for required top-level fields
188
+ if (!cfg.version) {
189
+ errors.push('Missing required field: version');
190
+ }
191
+ // Validate based on config type
192
+ if (isModernConfig(cfg)) {
193
+ this.validateModernConfig(cfg, errors, warnings);
194
+ }
195
+ else if (isLegacyConfig(cfg)) {
196
+ this.validateLegacyConfig(cfg, errors, warnings);
197
+ }
198
+ else {
199
+ errors.push('Configuration format not recognized. Must have either "frameworks" or "indexing" field');
200
+ }
201
+ return {
202
+ valid: errors.length === 0,
203
+ errors,
204
+ warnings,
205
+ };
206
+ }
207
+ /**
208
+ * Validate a partial configuration object.
209
+ * Useful for validating user input before merging with defaults.
210
+ *
211
+ * @param config - Partial configuration to validate
212
+ * @returns Validation result with errors and warnings
213
+ */
214
+ validatePartial(config) {
215
+ const errors = [];
216
+ const warnings = [];
217
+ // Validate core settings if present
218
+ if (config.core) {
219
+ this.validateCoreConfig(config.core, errors, warnings);
220
+ }
221
+ // Validate MCP settings if present
222
+ if (config.mcp) {
223
+ this.validateMCPConfig(config.mcp, errors, warnings);
224
+ }
225
+ // Validate git detection settings if present
226
+ if (config.gitDetection) {
227
+ this.validateGitDetectionConfig(config.gitDetection, errors, warnings);
228
+ }
229
+ // Validate file watching settings if present
230
+ if (config.fileWatching) {
231
+ this.validateFileWatchingConfig(config.fileWatching, errors, warnings);
232
+ }
233
+ // Validate frameworks if present
234
+ if (config.frameworks) {
235
+ this.validateFrameworks(config.frameworks, errors, warnings);
236
+ }
237
+ return {
238
+ valid: errors.length === 0,
239
+ errors,
240
+ warnings,
241
+ };
242
+ }
243
+ /**
244
+ * Get the full path to the config file
245
+ */
246
+ getConfigPath(rootDir) {
247
+ return path.join(rootDir, ConfigService.CONFIG_FILENAME);
248
+ }
249
+ /**
250
+ * Validate modern (v0.3.0+) configuration
251
+ */
252
+ validateModernConfig(config, errors, warnings) {
253
+ // Validate core settings
254
+ if (!config.core) {
255
+ errors.push('Missing required field: core');
256
+ return;
257
+ }
258
+ this.validateCoreConfig(config.core, errors, warnings);
259
+ // Validate MCP settings
260
+ if (!config.mcp) {
261
+ errors.push('Missing required field: mcp');
262
+ return;
263
+ }
264
+ this.validateMCPConfig(config.mcp, errors, warnings);
265
+ // Validate git detection settings
266
+ if (!config.gitDetection) {
267
+ errors.push('Missing required field: gitDetection');
268
+ return;
269
+ }
270
+ this.validateGitDetectionConfig(config.gitDetection, errors, warnings);
271
+ // Validate file watching settings
272
+ if (!config.fileWatching) {
273
+ errors.push('Missing required field: fileWatching');
274
+ return;
275
+ }
276
+ this.validateFileWatchingConfig(config.fileWatching, errors, warnings);
277
+ // Validate frameworks
278
+ if (!config.frameworks) {
279
+ errors.push('Missing required field: frameworks');
280
+ return;
281
+ }
282
+ this.validateFrameworks(config.frameworks, errors, warnings);
283
+ }
284
+ /**
285
+ * Validate legacy (v0.2.0) configuration
286
+ */
287
+ validateLegacyConfig(config, errors, warnings) {
288
+ warnings.push('Using legacy configuration format. Consider running "lien init" to migrate to v0.3.0');
289
+ // Validate indexing settings
290
+ if (!config.indexing) {
291
+ errors.push('Missing required field: indexing');
292
+ return;
293
+ }
294
+ const { indexing } = config;
295
+ if (typeof indexing.chunkSize !== 'number' || indexing.chunkSize <= 0) {
296
+ errors.push('indexing.chunkSize must be a positive number');
297
+ }
298
+ if (typeof indexing.chunkOverlap !== 'number' || indexing.chunkOverlap < 0) {
299
+ errors.push('indexing.chunkOverlap must be a non-negative number');
300
+ }
301
+ if (typeof indexing.concurrency !== 'number' || indexing.concurrency < 1 || indexing.concurrency > 16) {
302
+ errors.push('indexing.concurrency must be between 1 and 16');
303
+ }
304
+ if (typeof indexing.embeddingBatchSize !== 'number' || indexing.embeddingBatchSize <= 0) {
305
+ errors.push('indexing.embeddingBatchSize must be a positive number');
306
+ }
307
+ // Validate MCP settings (same for both)
308
+ if (config.mcp) {
309
+ this.validateMCPConfig(config.mcp, errors, warnings);
310
+ }
311
+ }
312
+ /**
313
+ * Validate core configuration settings
314
+ */
315
+ validateCoreConfig(core, errors, warnings) {
316
+ if (core.chunkSize !== undefined) {
317
+ if (typeof core.chunkSize !== 'number' || core.chunkSize <= 0) {
318
+ errors.push('core.chunkSize must be a positive number');
319
+ }
320
+ else if (core.chunkSize < 50) {
321
+ warnings.push('core.chunkSize is very small (<50 lines). This may result in poor search quality');
322
+ }
323
+ else if (core.chunkSize > 500) {
324
+ warnings.push('core.chunkSize is very large (>500 lines). This may impact performance');
325
+ }
326
+ }
327
+ if (core.chunkOverlap !== undefined) {
328
+ if (typeof core.chunkOverlap !== 'number' || core.chunkOverlap < 0) {
329
+ errors.push('core.chunkOverlap must be a non-negative number');
330
+ }
331
+ }
332
+ if (core.concurrency !== undefined) {
333
+ if (typeof core.concurrency !== 'number' || core.concurrency < 1 || core.concurrency > 16) {
334
+ errors.push('core.concurrency must be between 1 and 16');
335
+ }
336
+ }
337
+ if (core.embeddingBatchSize !== undefined) {
338
+ if (typeof core.embeddingBatchSize !== 'number' || core.embeddingBatchSize <= 0) {
339
+ errors.push('core.embeddingBatchSize must be a positive number');
340
+ }
341
+ else if (core.embeddingBatchSize > 100) {
342
+ warnings.push('core.embeddingBatchSize is very large (>100). This may cause memory issues');
343
+ }
344
+ }
345
+ }
346
+ /**
347
+ * Validate MCP configuration settings
348
+ */
349
+ validateMCPConfig(mcp, errors, _warnings) {
350
+ if (mcp.port !== undefined) {
351
+ if (typeof mcp.port !== 'number' || mcp.port < 1024 || mcp.port > 65535) {
352
+ errors.push('mcp.port must be between 1024 and 65535');
353
+ }
354
+ }
355
+ if (mcp.transport !== undefined) {
356
+ if (mcp.transport !== 'stdio' && mcp.transport !== 'socket') {
357
+ errors.push('mcp.transport must be either "stdio" or "socket"');
358
+ }
359
+ }
360
+ if (mcp.autoIndexOnFirstRun !== undefined) {
361
+ if (typeof mcp.autoIndexOnFirstRun !== 'boolean') {
362
+ errors.push('mcp.autoIndexOnFirstRun must be a boolean');
363
+ }
364
+ }
365
+ }
366
+ /**
367
+ * Validate git detection configuration settings
368
+ */
369
+ validateGitDetectionConfig(gitDetection, errors, _warnings) {
370
+ if (gitDetection.enabled !== undefined) {
371
+ if (typeof gitDetection.enabled !== 'boolean') {
372
+ errors.push('gitDetection.enabled must be a boolean');
373
+ }
374
+ }
375
+ if (gitDetection.pollIntervalMs !== undefined) {
376
+ if (typeof gitDetection.pollIntervalMs !== 'number' || gitDetection.pollIntervalMs < 100) {
377
+ errors.push('gitDetection.pollIntervalMs must be at least 100ms');
378
+ }
379
+ else if (gitDetection.pollIntervalMs < 1000) {
380
+ _warnings.push('gitDetection.pollIntervalMs is very short (<1s). This may impact performance');
381
+ }
382
+ }
383
+ }
384
+ /**
385
+ * Validate file watching configuration settings
386
+ */
387
+ validateFileWatchingConfig(fileWatching, errors, warnings) {
388
+ if (fileWatching.enabled !== undefined) {
389
+ if (typeof fileWatching.enabled !== 'boolean') {
390
+ errors.push('fileWatching.enabled must be a boolean');
391
+ }
392
+ }
393
+ if (fileWatching.debounceMs !== undefined) {
394
+ if (typeof fileWatching.debounceMs !== 'number' || fileWatching.debounceMs < 0) {
395
+ errors.push('fileWatching.debounceMs must be a non-negative number');
396
+ }
397
+ else if (fileWatching.debounceMs < 100) {
398
+ warnings.push('fileWatching.debounceMs is very short (<100ms). This may cause excessive reindexing');
399
+ }
400
+ }
401
+ }
402
+ /**
403
+ * Validate frameworks configuration
404
+ */
405
+ validateFrameworks(frameworks, errors, warnings) {
406
+ if (!Array.isArray(frameworks)) {
407
+ errors.push('frameworks must be an array');
408
+ return;
409
+ }
410
+ frameworks.forEach((framework, index) => {
411
+ if (!framework || typeof framework !== 'object') {
412
+ errors.push(`frameworks[${index}] must be an object`);
413
+ return;
414
+ }
415
+ const fw = framework;
416
+ // Validate required fields
417
+ if (!fw.name) {
418
+ errors.push(`frameworks[${index}] missing required field: name`);
419
+ }
420
+ if (fw.path === undefined) {
421
+ errors.push(`frameworks[${index}] missing required field: path`);
422
+ }
423
+ else if (typeof fw.path !== 'string') {
424
+ errors.push(`frameworks[${index}].path must be a string`);
425
+ }
426
+ else if (path.isAbsolute(fw.path)) {
427
+ errors.push(`frameworks[${index}].path must be relative, got: ${fw.path}`);
428
+ }
429
+ if (fw.enabled === undefined) {
430
+ errors.push(`frameworks[${index}] missing required field: enabled`);
431
+ }
432
+ else if (typeof fw.enabled !== 'boolean') {
433
+ errors.push(`frameworks[${index}].enabled must be a boolean`);
434
+ }
435
+ if (!fw.config) {
436
+ errors.push(`frameworks[${index}] missing required field: config`);
437
+ }
438
+ else {
439
+ this.validateFrameworkConfig(fw.config, `frameworks[${index}].config`, errors, warnings);
440
+ }
441
+ });
442
+ }
443
+ /**
444
+ * Validate framework-specific configuration
445
+ */
446
+ validateFrameworkConfig(config, prefix, errors, _warnings) {
447
+ if (!config || typeof config !== 'object') {
448
+ errors.push(`${prefix} must be an object`);
449
+ return;
450
+ }
451
+ // Validate include patterns
452
+ if (!Array.isArray(config.include)) {
453
+ errors.push(`${prefix}.include must be an array`);
454
+ }
455
+ else {
456
+ config.include.forEach((pattern, i) => {
457
+ if (typeof pattern !== 'string') {
458
+ errors.push(`${prefix}.include[${i}] must be a string`);
459
+ }
460
+ });
461
+ }
462
+ // Validate exclude patterns
463
+ if (!Array.isArray(config.exclude)) {
464
+ errors.push(`${prefix}.exclude must be an array`);
465
+ }
466
+ else {
467
+ config.exclude.forEach((pattern, i) => {
468
+ if (typeof pattern !== 'string') {
469
+ errors.push(`${prefix}.exclude[${i}] must be a string`);
470
+ }
471
+ });
472
+ }
473
+ }
474
+ }
475
+ // Export a singleton instance for convenience
476
+ export const configService = new ConfigService();
477
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/config/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Centralized constants for @liendev/core.
3
+ * This file contains all magic numbers and configuration defaults.
4
+ */
5
+ export declare const DEFAULT_CHUNK_SIZE = 75;
6
+ export declare const DEFAULT_CHUNK_OVERLAP = 10;
7
+ export declare const DEFAULT_CONCURRENCY = 4;
8
+ export declare const DEFAULT_EMBEDDING_BATCH_SIZE = 50;
9
+ export declare const EMBEDDING_MICRO_BATCH_SIZE = 10;
10
+ export declare const VECTOR_DB_MAX_BATCH_SIZE = 1000;
11
+ export declare const VECTOR_DB_MIN_BATCH_SIZE = 10;
12
+ export declare const EMBEDDING_DIMENSIONS = 384;
13
+ export declare const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
14
+ export declare const DEFAULT_PORT = 7133;
15
+ export declare const VERSION_CHECK_INTERVAL_MS = 2000;
16
+ export declare const DEFAULT_GIT_POLL_INTERVAL_MS = 10000;
17
+ export declare const DEFAULT_DEBOUNCE_MS = 1000;
18
+ export declare const CURRENT_CONFIG_VERSION = "0.19.5";
19
+ export declare const INDEX_FORMAT_VERSION = 4;
20
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAGxC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAK/C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAI7C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAG3C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAGjE,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAG9C,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAGlD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAIxC,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAW/C,eAAO,MAAM,oBAAoB,IAAI,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Centralized constants for @liendev/core.
3
+ * This file contains all magic numbers and configuration defaults.
4
+ */
5
+ // Chunking settings
6
+ export const DEFAULT_CHUNK_SIZE = 75;
7
+ export const DEFAULT_CHUNK_OVERLAP = 10;
8
+ // Concurrency and batching
9
+ export const DEFAULT_CONCURRENCY = 4;
10
+ export const DEFAULT_EMBEDDING_BATCH_SIZE = 50;
11
+ // Micro-batching for event loop yielding
12
+ // Process N embeddings at a time, then yield to event loop
13
+ // This prevents UI freezing during CPU-intensive embedding generation
14
+ export const EMBEDDING_MICRO_BATCH_SIZE = 10;
15
+ // Vector database batch size limits
16
+ // Maximum batch size before splitting (prevents LanceDB errors on very large batches)
17
+ export const VECTOR_DB_MAX_BATCH_SIZE = 1000;
18
+ // Minimum batch size for retry logic (stop splitting below this size)
19
+ export const VECTOR_DB_MIN_BATCH_SIZE = 10;
20
+ // Embedding model configuration
21
+ export const EMBEDDING_DIMENSIONS = 384; // all-MiniLM-L6-v2
22
+ export const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
23
+ // MCP server configuration
24
+ export const DEFAULT_PORT = 7133; // LIEN in leetspeak
25
+ export const VERSION_CHECK_INTERVAL_MS = 2000;
26
+ // Git detection
27
+ export const DEFAULT_GIT_POLL_INTERVAL_MS = 10000; // Check every 10 seconds
28
+ // File watching
29
+ export const DEFAULT_DEBOUNCE_MS = 1000;
30
+ // Configuration version - matches the CLI/core release version
31
+ // Core and CLI are always released together with matching versions
32
+ export const CURRENT_CONFIG_VERSION = '0.19.5';
33
+ // Index format version - bump on ANY breaking change to indexing
34
+ // Examples that require version bump:
35
+ // - Chunking algorithm changes
36
+ // - Embedding model changes (e.g., switch from all-MiniLM-L6-v2 to another model)
37
+ // - Vector DB schema changes (new metadata fields)
38
+ // - Metadata structure changes
39
+ // v2: AST-based chunking + enhanced metadata (symbolName, complexity, etc.)
40
+ // v3: Added cognitiveComplexity field to schema
41
+ // v4: Added Halstead metrics (volume, difficulty, effort, bugs)
42
+ export const INDEX_FORMAT_VERSION = 4;
43
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAoB;AACpB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAE/C,yCAAyC;AACzC,2DAA2D;AAC3D,sEAAsE;AACtE,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,oCAAoC;AACpC,sFAAsF;AACtF,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,gCAAgC;AAChC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,mBAAmB;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEjE,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,oBAAoB;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,gBAAgB;AAChB,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC,CAAC,yBAAyB;AAE5E,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,+DAA+D;AAC/D,mEAAmE;AACnE,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAE/C,iEAAiE;AACjE,sCAAsC;AACtC,+BAA+B;AAC/B,kFAAkF;AAClF,mDAAmD;AACnD,+BAA+B;AAC/B,4EAA4E;AAC5E,gDAAgD;AAChD,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { EmbeddingService } from './types.js';
2
+ /**
3
+ * LRU cache for embeddings with configurable max size.
4
+ * Wraps any EmbeddingService to add caching functionality.
5
+ *
6
+ * Benefits:
7
+ * - Faster repeated searches
8
+ * - Reduced CPU usage
9
+ * - Better user experience for common queries
10
+ */
11
+ export declare class CachedEmbeddings implements EmbeddingService {
12
+ private cache;
13
+ private readonly maxSize;
14
+ private readonly underlying;
15
+ /**
16
+ * Creates a new cached embeddings service
17
+ * @param underlying - The underlying embedding service to wrap
18
+ * @param maxSize - Maximum number of embeddings to cache (default: 1000)
19
+ */
20
+ constructor(underlying: EmbeddingService, maxSize?: number);
21
+ initialize(): Promise<void>;
22
+ embed(text: string): Promise<Float32Array>;
23
+ embedBatch(texts: string[]): Promise<Float32Array[]>;
24
+ /**
25
+ * Gets the current cache size
26
+ */
27
+ getCacheSize(): number;
28
+ /**
29
+ * Gets cache statistics
30
+ */
31
+ getCacheStats(): {
32
+ size: number;
33
+ maxSize: number;
34
+ hitRate?: number;
35
+ };
36
+ /**
37
+ * Clears the cache
38
+ */
39
+ clearCache(): void;
40
+ /**
41
+ * Checks if a text is in the cache
42
+ */
43
+ has(text: string): boolean;
44
+ }
45
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/embeddings/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAE9C;;;;OAIG;gBACS,UAAU,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAa;IAK1D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB1C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0C1D;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAOpE;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}