@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,53 @@
1
+ /**
2
+ * Generate generic PHP framework configuration
3
+ */
4
+ export async function generatePhpConfig(_rootDir, _relativePath) {
5
+ return {
6
+ include: [
7
+ // PHP source code
8
+ 'src/**/*.php',
9
+ 'lib/**/*.php',
10
+ 'app/**/*.php',
11
+ 'tests/**/*.php',
12
+ '*.php',
13
+ // Common PHP project files
14
+ 'config/**/*.php',
15
+ 'public/**/*.php',
16
+ // Documentation
17
+ '**/*.md',
18
+ '**/*.mdx',
19
+ 'docs/**/*.md',
20
+ 'README.md',
21
+ 'CHANGELOG.md',
22
+ ],
23
+ exclude: [
24
+ // Composer dependencies (CRITICAL)
25
+ '**/vendor/**',
26
+ 'vendor/**',
27
+ // Node.js dependencies
28
+ '**/node_modules/**',
29
+ 'node_modules/**',
30
+ // Build outputs
31
+ '**/dist/**',
32
+ 'dist/**',
33
+ '**/build/**',
34
+ 'build/**',
35
+ '**/public/build/**',
36
+ 'public/build/**',
37
+ // Laravel/PHP system directories
38
+ 'storage/**',
39
+ 'cache/**',
40
+ 'bootstrap/cache/**',
41
+ // Test artifacts
42
+ 'coverage/**',
43
+ 'test-results/**',
44
+ '.phpunit.cache/**',
45
+ // Build outputs
46
+ '__generated__/**',
47
+ // Minified files
48
+ '**/*.min.js',
49
+ '**/*.min.css',
50
+ ],
51
+ };
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/frameworks/php/config.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,aAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,kBAAkB;YAClB,cAAc;YACd,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,OAAO;YAEP,2BAA2B;YAC3B,iBAAiB;YACjB,iBAAiB;YAEjB,gBAAgB;YAChB,SAAS;YACT,UAAU;YACV,cAAc;YACd,WAAW;YACX,cAAc;SACf;QACD,OAAO,EAAE;YACP,mCAAmC;YACnC,cAAc;YACd,WAAW;YAEX,uBAAuB;YACvB,oBAAoB;YACpB,iBAAiB;YAEjB,gBAAgB;YAChB,YAAY;YACZ,SAAS;YACT,aAAa;YACb,UAAU;YACV,oBAAoB;YACpB,iBAAiB;YAEjB,iCAAiC;YACjC,YAAY;YACZ,UAAU;YACV,oBAAoB;YAEpB,iBAAiB;YACjB,aAAa;YACb,iBAAiB;YACjB,mBAAmB;YAEnB,gBAAgB;YAChB,kBAAkB;YAElB,iBAAiB;YACjB,aAAa;YACb,cAAc;SACf;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { FrameworkDetector } from '../types.js';
2
+ /**
3
+ * Generic PHP framework detector
4
+ * Detects any PHP project with composer.json
5
+ */
6
+ export declare const phpDetector: FrameworkDetector;
7
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/frameworks/php/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAGjE;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,iBA6GzB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { generatePhpConfig } from './config.js';
4
+ /**
5
+ * Generic PHP framework detector
6
+ * Detects any PHP project with composer.json
7
+ */
8
+ export const phpDetector = {
9
+ name: 'php',
10
+ priority: 50, // Generic, yields to specific frameworks like Laravel
11
+ async detect(rootDir, relativePath) {
12
+ const fullPath = path.join(rootDir, relativePath);
13
+ const result = {
14
+ detected: false,
15
+ name: 'php',
16
+ path: relativePath,
17
+ confidence: 'low',
18
+ evidence: [],
19
+ };
20
+ // Check for composer.json
21
+ const composerJsonPath = path.join(fullPath, 'composer.json');
22
+ let composerJson = null;
23
+ try {
24
+ const content = await fs.readFile(composerJsonPath, 'utf-8');
25
+ composerJson = JSON.parse(content);
26
+ result.evidence.push('Found composer.json');
27
+ }
28
+ catch {
29
+ // No composer.json, not a PHP project
30
+ return result;
31
+ }
32
+ // Check if this is a Laravel project (Laravel detector should handle it)
33
+ const hasLaravel = composerJson.require?.['laravel/framework'] ||
34
+ composerJson['require-dev']?.['laravel/framework'];
35
+ if (hasLaravel) {
36
+ // This is a Laravel project - let the Laravel detector handle it
37
+ // Return not detected to avoid redundant "php" + "laravel" detection
38
+ return result;
39
+ }
40
+ // At this point, we know it's a generic PHP project (not Laravel)
41
+ result.detected = true;
42
+ result.confidence = 'high';
43
+ // Check for common PHP directories
44
+ const phpDirs = ['src', 'lib', 'app', 'tests'];
45
+ let foundDirs = 0;
46
+ for (const dir of phpDirs) {
47
+ try {
48
+ const dirPath = path.join(fullPath, dir);
49
+ const stats = await fs.stat(dirPath);
50
+ if (stats.isDirectory()) {
51
+ foundDirs++;
52
+ }
53
+ }
54
+ catch {
55
+ // Directory doesn't exist
56
+ }
57
+ }
58
+ if (foundDirs > 0) {
59
+ result.evidence.push(`Found PHP project structure (${foundDirs} directories)`);
60
+ }
61
+ // Check for PHP version
62
+ if (composerJson.require?.php) {
63
+ result.version = composerJson.require.php;
64
+ result.evidence.push(`PHP ${composerJson.require.php}`);
65
+ }
66
+ // Check for testing frameworks
67
+ const testFrameworks = [
68
+ { name: 'phpunit/phpunit', display: 'PHPUnit' },
69
+ { name: 'pestphp/pest', display: 'Pest' },
70
+ { name: 'codeception/codeception', display: 'Codeception' },
71
+ { name: 'behat/behat', display: 'Behat' },
72
+ ];
73
+ for (const framework of testFrameworks) {
74
+ if (composerJson.require?.[framework.name] ||
75
+ composerJson['require-dev']?.[framework.name]) {
76
+ result.evidence.push(`${framework.display} test framework detected`);
77
+ break; // Only mention first test framework found
78
+ }
79
+ }
80
+ // Check for common PHP tools/frameworks
81
+ const tools = [
82
+ { name: 'symfony/framework-bundle', display: 'Symfony' },
83
+ { name: 'symfony/http-kernel', display: 'Symfony' },
84
+ { name: 'symfony/symfony', display: 'Symfony (monolithic)' },
85
+ { name: 'doctrine/orm', display: 'Doctrine ORM' },
86
+ { name: 'guzzlehttp/guzzle', display: 'Guzzle HTTP' },
87
+ { name: 'monolog/monolog', display: 'Monolog' },
88
+ ];
89
+ for (const tool of tools) {
90
+ if (composerJson.require?.[tool.name]) {
91
+ result.evidence.push(`${tool.display} detected`);
92
+ break; // Only mention first tool found
93
+ }
94
+ }
95
+ return result;
96
+ },
97
+ async generateConfig(rootDir, relativePath) {
98
+ return generatePhpConfig(rootDir, relativePath);
99
+ },
100
+ };
101
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/frameworks/php/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { FrameworkDetector } from './types.js';
2
+ /**
3
+ * Registry of all available framework detectors
4
+ * Frameworks will be added as they are implemented
5
+ *
6
+ * Order doesn't matter for detection as priority system handles conflicts,
7
+ * but listed here in order from generic to specific for clarity:
8
+ * - Generic language detectors (Node.js, PHP)
9
+ * - Specific framework detectors (Laravel, Shopify)
10
+ */
11
+ export declare const frameworkDetectors: FrameworkDetector[];
12
+ /**
13
+ * Register a framework detector
14
+ */
15
+ export declare function registerFramework(detector: FrameworkDetector): void;
16
+ /**
17
+ * Get a framework detector by name
18
+ */
19
+ export declare function getFrameworkDetector(name: string): FrameworkDetector | undefined;
20
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/frameworks/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM/C;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,EAKjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CASnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEhF"}
@@ -0,0 +1,38 @@
1
+ import { nodejsDetector } from './nodejs/detector.js';
2
+ import { phpDetector } from './php/detector.js';
3
+ import { laravelDetector } from './laravel/detector.js';
4
+ import { shopifyDetector } from './shopify/detector.js';
5
+ /**
6
+ * Registry of all available framework detectors
7
+ * Frameworks will be added as they are implemented
8
+ *
9
+ * Order doesn't matter for detection as priority system handles conflicts,
10
+ * but listed here in order from generic to specific for clarity:
11
+ * - Generic language detectors (Node.js, PHP)
12
+ * - Specific framework detectors (Laravel, Shopify)
13
+ */
14
+ export const frameworkDetectors = [
15
+ nodejsDetector,
16
+ phpDetector,
17
+ laravelDetector,
18
+ shopifyDetector,
19
+ ];
20
+ /**
21
+ * Register a framework detector
22
+ */
23
+ export function registerFramework(detector) {
24
+ // Check if already registered
25
+ const existing = frameworkDetectors.find(d => d.name === detector.name);
26
+ if (existing) {
27
+ console.warn(`Framework detector '${detector.name}' is already registered, skipping`);
28
+ return;
29
+ }
30
+ frameworkDetectors.push(detector);
31
+ }
32
+ /**
33
+ * Get a framework detector by name
34
+ */
35
+ export function getFrameworkDetector(name) {
36
+ return frameworkDetectors.find(d => d.name === name);
37
+ }
38
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/frameworks/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,cAAc;IACd,WAAW;IACX,eAAe;IACf,eAAe;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,mCAAmC,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IAED,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { FrameworkConfig } from '../../config/schema.js';
2
+ /**
3
+ * Generate Shopify theme framework configuration
4
+ */
5
+ export declare function generateShopifyConfig(_rootDir: string, _relativePath: string): Promise<FrameworkConfig>;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/frameworks/shopify/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Generate Shopify theme framework configuration
3
+ */
4
+ export async function generateShopifyConfig(_rootDir, _relativePath) {
5
+ return {
6
+ include: [
7
+ // Core Liquid templates
8
+ 'layout/**/*.liquid',
9
+ 'sections/**/*.liquid',
10
+ 'snippets/**/*.liquid',
11
+ 'templates/**/*.liquid', // Matches any nesting level (e.g., templates/customers/account.liquid)
12
+ 'templates/**/*.json', // JSON template definitions (Shopify 2.0+)
13
+ // Theme editor blocks (Online Store 2.0)
14
+ 'blocks/**/*.liquid',
15
+ // Assets (CSS, JS with optional Liquid templating)
16
+ 'assets/**/*.js',
17
+ 'assets/**/*.js.liquid',
18
+ 'assets/**/*.css',
19
+ 'assets/**/*.css.liquid',
20
+ 'assets/**/*.scss',
21
+ 'assets/**/*.scss.liquid',
22
+ // Configuration files
23
+ 'config/*.json',
24
+ // Locales (i18n)
25
+ 'locales/*.json',
26
+ // Documentation
27
+ '*.md',
28
+ 'docs/**/*.md',
29
+ // Shopify-specific config files
30
+ 'shopify.theme.toml',
31
+ '.shopifyignore',
32
+ ],
33
+ exclude: [
34
+ 'node_modules/**',
35
+ 'dist/**',
36
+ 'build/**',
37
+ '.git/**',
38
+ // Playwright/testing artifacts
39
+ 'playwright-report/**',
40
+ 'test-results/**',
41
+ // Build/generated artifacts
42
+ '__generated__/**',
43
+ // Common frontend build outputs
44
+ '.vite/**',
45
+ '.nuxt/**',
46
+ '.next/**',
47
+ ],
48
+ };
49
+ }
50
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/frameworks/shopify/config.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,aAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,wBAAwB;YACxB,oBAAoB;YACpB,sBAAsB;YACtB,sBAAsB;YACtB,uBAAuB,EAAE,uEAAuE;YAChG,qBAAqB,EAAI,2CAA2C;YAEpE,yCAAyC;YACzC,oBAAoB;YAEpB,mDAAmD;YACnD,gBAAgB;YAChB,uBAAuB;YACvB,iBAAiB;YACjB,wBAAwB;YACxB,kBAAkB;YAClB,yBAAyB;YAEzB,sBAAsB;YACtB,eAAe;YAEf,iBAAiB;YACjB,gBAAgB;YAEhB,gBAAgB;YAChB,MAAM;YACN,cAAc;YAEd,gCAAgC;YAChC,oBAAoB;YACpB,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,iBAAiB;YACjB,SAAS;YACT,UAAU;YACV,SAAS;YAET,+BAA+B;YAC/B,sBAAsB;YACtB,iBAAiB;YAEjB,4BAA4B;YAC5B,kBAAkB;YAElB,gCAAgC;YAChC,UAAU;YACV,UAAU;YACV,UAAU;SACX;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { FrameworkDetector } from '../types.js';
2
+ /**
3
+ * Shopify Liquid theme framework detector
4
+ */
5
+ export declare const shopifyDetector: FrameworkDetector;
6
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/frameworks/shopify/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,iBAyG7B,CAAC"}
@@ -0,0 +1,103 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { generateShopifyConfig } from './config.js';
4
+ /**
5
+ * Shopify Liquid theme framework detector
6
+ */
7
+ export const shopifyDetector = {
8
+ name: 'shopify',
9
+ priority: 100, // High priority (same as Laravel)
10
+ async detect(rootDir, relativePath) {
11
+ const fullPath = path.join(rootDir, relativePath);
12
+ const result = {
13
+ detected: false,
14
+ name: 'shopify',
15
+ path: relativePath,
16
+ confidence: 'low',
17
+ evidence: [],
18
+ };
19
+ // 1. Check for config/settings_schema.json (STRONGEST signal)
20
+ const settingsSchemaPath = path.join(fullPath, 'config', 'settings_schema.json');
21
+ let hasSettingsSchema = false;
22
+ try {
23
+ await fs.access(settingsSchemaPath);
24
+ hasSettingsSchema = true;
25
+ result.evidence.push('Found config/settings_schema.json');
26
+ }
27
+ catch {
28
+ // Not present, continue checking other markers
29
+ }
30
+ // 2. Check for layout/theme.liquid
31
+ const themeLayoutPath = path.join(fullPath, 'layout', 'theme.liquid');
32
+ let hasThemeLayout = false;
33
+ try {
34
+ await fs.access(themeLayoutPath);
35
+ hasThemeLayout = true;
36
+ result.evidence.push('Found layout/theme.liquid');
37
+ }
38
+ catch {
39
+ // Not present
40
+ }
41
+ // 3. Check for typical Shopify directories
42
+ const shopifyDirs = ['sections', 'snippets', 'templates', 'locales'];
43
+ let foundDirs = 0;
44
+ for (const dir of shopifyDirs) {
45
+ try {
46
+ const dirPath = path.join(fullPath, dir);
47
+ const stats = await fs.stat(dirPath);
48
+ if (stats.isDirectory()) {
49
+ foundDirs++;
50
+ }
51
+ }
52
+ catch {
53
+ // Directory doesn't exist
54
+ }
55
+ }
56
+ if (foundDirs >= 2) {
57
+ result.evidence.push(`Shopify directory structure detected (${foundDirs}/${shopifyDirs.length} dirs)`);
58
+ }
59
+ // 4. Check for shopify.theme.toml (Shopify CLI)
60
+ try {
61
+ const tomlPath = path.join(fullPath, 'shopify.theme.toml');
62
+ await fs.access(tomlPath);
63
+ result.evidence.push('Found shopify.theme.toml');
64
+ }
65
+ catch {
66
+ // Optional file
67
+ }
68
+ // 5. Check for .shopifyignore
69
+ try {
70
+ const ignorePath = path.join(fullPath, '.shopifyignore');
71
+ await fs.access(ignorePath);
72
+ result.evidence.push('Found .shopifyignore');
73
+ }
74
+ catch {
75
+ // Optional file
76
+ }
77
+ // Determine detection confidence with early returns
78
+ // High: Has settings_schema.json + 2+ directories
79
+ if (hasSettingsSchema && foundDirs >= 2) {
80
+ result.detected = true;
81
+ result.confidence = 'high';
82
+ return result;
83
+ }
84
+ // Medium: Has settings_schema alone, OR has theme.liquid + 1+ directory
85
+ if (hasSettingsSchema || (hasThemeLayout && foundDirs >= 1)) {
86
+ result.detected = true;
87
+ result.confidence = 'medium';
88
+ return result;
89
+ }
90
+ // Medium: Has 3+ typical directories but no strong markers
91
+ if (foundDirs >= 3) {
92
+ result.detected = true;
93
+ result.confidence = 'medium';
94
+ return result;
95
+ }
96
+ // Not detected
97
+ return result;
98
+ },
99
+ async generateConfig(rootDir, relativePath) {
100
+ return generateShopifyConfig(rootDir, relativePath);
101
+ },
102
+ };
103
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/frameworks/shopify/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { FrameworkConfig } from '../config/schema.js';
2
+ /**
3
+ * Result of framework detection
4
+ */
5
+ export interface DetectionResult {
6
+ detected: boolean;
7
+ name: string;
8
+ path: string;
9
+ confidence: 'high' | 'medium' | 'low';
10
+ evidence: string[];
11
+ version?: string;
12
+ }
13
+ /**
14
+ * Interface for framework detectors
15
+ */
16
+ export interface FrameworkDetector {
17
+ name: string;
18
+ /**
19
+ * Priority for conflict resolution (higher = takes precedence)
20
+ * - 100: Specific frameworks (Laravel, Rails, Django)
21
+ * - 50: Generic frameworks (Node.js, Python)
22
+ * - 0: Fallback/generic
23
+ */
24
+ priority?: number;
25
+ /**
26
+ * Detect if this framework exists at the given path
27
+ * @param rootDir - Absolute path to project root
28
+ * @param relativePath - Relative path from root to check (e.g., '.' or 'packages/cli')
29
+ * @returns Detection result with evidence
30
+ */
31
+ detect(rootDir: string, relativePath: string): Promise<DetectionResult>;
32
+ /**
33
+ * Generate default configuration for this framework
34
+ * @param rootDir - Absolute path to project root
35
+ * @param relativePath - Relative path where framework was detected
36
+ * @returns Framework-specific configuration
37
+ */
38
+ generateConfig(rootDir: string, relativePath: string): Promise<FrameworkConfig>;
39
+ }
40
+ /**
41
+ * Options for framework detection
42
+ */
43
+ export interface DetectionOptions {
44
+ maxDepth: number;
45
+ skipDirs: string[];
46
+ }
47
+ /**
48
+ * Default detection options
49
+ */
50
+ export declare const defaultDetectionOptions: DetectionOptions;
51
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/frameworks/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAExE;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACjF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAgBrC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Default detection options
3
+ */
4
+ export const defaultDetectionOptions = {
5
+ maxDepth: 3,
6
+ skipDirs: [
7
+ 'node_modules',
8
+ 'vendor',
9
+ 'dist',
10
+ 'build',
11
+ '.next',
12
+ '.nuxt',
13
+ 'coverage',
14
+ '.git',
15
+ '.idea',
16
+ '.vscode',
17
+ 'tmp',
18
+ 'temp',
19
+ ],
20
+ };
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/frameworks/types.ts"],"names":[],"mappings":"AAqDA;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE;QACR,cAAc;QACd,QAAQ;QACR,MAAM;QACN,OAAO;QACP,OAAO;QACP,OAAO;QACP,UAAU;QACV,MAAM;QACN,OAAO;QACP,SAAS;QACT,KAAK;QACL,MAAM;KACP;CACF,CAAC"}
@@ -0,0 +1,56 @@
1
+ export interface GitState {
2
+ branch: string;
3
+ commit: string;
4
+ timestamp: number;
5
+ }
6
+ /**
7
+ * Tracks git state (branch and commit) and detects changes.
8
+ * Persists state to disk to survive server restarts.
9
+ */
10
+ export declare class GitStateTracker {
11
+ private stateFile;
12
+ private rootDir;
13
+ private currentState;
14
+ constructor(rootDir: string, indexPath: string);
15
+ /**
16
+ * Loads the last known git state from disk.
17
+ * Returns null if no state file exists (first run).
18
+ */
19
+ private loadState;
20
+ /**
21
+ * Saves the current git state to disk.
22
+ */
23
+ private saveState;
24
+ /**
25
+ * Gets the current git state from the repository.
26
+ *
27
+ * @returns Current git state
28
+ * @throws Error if git commands fail
29
+ */
30
+ private getCurrentGitState;
31
+ /**
32
+ * Initializes the tracker by loading saved state and checking current state.
33
+ * Should be called once when MCP server starts.
34
+ *
35
+ * @returns Array of changed files if state changed, null if no changes or first run
36
+ */
37
+ initialize(): Promise<string[] | null>;
38
+ /**
39
+ * Checks for git state changes since last check.
40
+ * This is called periodically by the MCP server.
41
+ *
42
+ * @returns Array of changed files if state changed, null if no changes
43
+ */
44
+ detectChanges(): Promise<string[] | null>;
45
+ /**
46
+ * Gets the current git state.
47
+ * Useful for status display.
48
+ */
49
+ getState(): GitState | null;
50
+ /**
51
+ * Manually updates the saved state.
52
+ * Useful after manual reindexing to sync state.
53
+ */
54
+ updateState(): Promise<void>;
55
+ }
56
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/git/tracker.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAyB;gBAEjC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAK9C;;;OAGG;YACW,SAAS;IAUvB;;OAEG;YACW,SAAS;IAUvB;;;;;OAKG;YACW,kBAAkB;IAWhC;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAoE5C;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAmE/C;;;OAGG;IACH,QAAQ,IAAI,QAAQ,GAAG,IAAI;IAI3B;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAQnC"}