agent-ide 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +11 -11
  2. package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts +1 -8
  3. package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts.map +1 -1
  4. package/dist/core/call-hierarchy/call-hierarchy-analyzer.js +9 -25
  5. package/dist/core/call-hierarchy/call-hierarchy-analyzer.js.map +1 -1
  6. package/dist/core/change-signature/call-site-updater.d.ts +5 -7
  7. package/dist/core/change-signature/call-site-updater.d.ts.map +1 -1
  8. package/dist/core/change-signature/call-site-updater.js +7 -16
  9. package/dist/core/change-signature/call-site-updater.js.map +1 -1
  10. package/dist/core/change-signature/change-signature-service.d.ts +1 -8
  11. package/dist/core/change-signature/change-signature-service.d.ts.map +1 -1
  12. package/dist/core/change-signature/change-signature-service.js +11 -29
  13. package/dist/core/change-signature/change-signature-service.js.map +1 -1
  14. package/dist/core/change-signature/signature-parser.d.ts +1 -8
  15. package/dist/core/change-signature/signature-parser.d.ts.map +1 -1
  16. package/dist/core/change-signature/signature-parser.js +7 -23
  17. package/dist/core/change-signature/signature-parser.js.map +1 -1
  18. package/dist/core/cycles/cycle-detector.d.ts +1 -1
  19. package/dist/core/cycles/cycle-detector.d.ts.map +1 -1
  20. package/dist/core/deadcode/dead-code-detector.d.ts +2 -13
  21. package/dist/core/deadcode/dead-code-detector.d.ts.map +1 -1
  22. package/dist/core/deadcode/dead-code-detector.js +6 -29
  23. package/dist/core/deadcode/dead-code-detector.js.map +1 -1
  24. package/dist/core/deadcode/import-cleaner.js +1 -1
  25. package/dist/core/deadcode/import-cleaner.js.map +1 -1
  26. package/dist/core/deadcode/import-parser.d.ts +0 -4
  27. package/dist/core/deadcode/import-parser.d.ts.map +1 -1
  28. package/dist/core/deadcode/import-parser.js +4 -10
  29. package/dist/core/deadcode/import-parser.js.map +1 -1
  30. package/dist/core/deadcode/range-expander.d.ts +0 -4
  31. package/dist/core/deadcode/range-expander.d.ts.map +1 -1
  32. package/dist/core/deadcode/range-expander.js +14 -10
  33. package/dist/core/deadcode/range-expander.js.map +1 -1
  34. package/dist/core/find-references/index.d.ts +3 -3
  35. package/dist/core/find-references/index.d.ts.map +1 -1
  36. package/dist/core/find-references/index.js +2 -2
  37. package/dist/core/find-references/index.js.map +1 -1
  38. package/dist/core/foundations/dependency-graph/dependency-graph.d.ts.map +1 -0
  39. package/dist/core/foundations/dependency-graph/dependency-graph.js.map +1 -0
  40. package/dist/core/foundations/dependency-graph/index.d.ts.map +1 -0
  41. package/dist/core/foundations/dependency-graph/index.js.map +1 -0
  42. package/dist/core/foundations/dependency-graph/types.d.ts.map +1 -0
  43. package/dist/core/foundations/dependency-graph/types.js.map +1 -0
  44. package/dist/core/foundations/file-utils.d.ts +50 -0
  45. package/dist/core/foundations/file-utils.d.ts.map +1 -0
  46. package/dist/core/foundations/file-utils.js +75 -0
  47. package/dist/core/foundations/file-utils.js.map +1 -0
  48. package/dist/core/foundations/index.d.ts +13 -0
  49. package/dist/core/foundations/index.d.ts.map +1 -0
  50. package/dist/core/foundations/index.js +17 -0
  51. package/dist/core/foundations/index.js.map +1 -0
  52. package/dist/core/foundations/indexing/file-index.d.ts.map +1 -0
  53. package/dist/core/foundations/indexing/file-index.js.map +1 -0
  54. package/dist/core/foundations/indexing/index-engine.d.ts.map +1 -0
  55. package/dist/core/foundations/indexing/index-engine.js.map +1 -0
  56. package/dist/core/foundations/indexing/index.d.ts.map +1 -0
  57. package/dist/core/foundations/indexing/index.js.map +1 -0
  58. package/dist/core/foundations/indexing/symbol-index.d.ts.map +1 -0
  59. package/dist/core/foundations/indexing/symbol-index.js.map +1 -0
  60. package/dist/core/{shared → foundations}/indexing/types.d.ts +1 -1
  61. package/dist/core/foundations/indexing/types.d.ts.map +1 -0
  62. package/dist/core/{shared → foundations}/indexing/types.js +11 -1
  63. package/dist/core/foundations/indexing/types.js.map +1 -0
  64. package/dist/core/foundations/symbol-finder/call-site-parser.d.ts.map +1 -0
  65. package/dist/core/foundations/symbol-finder/call-site-parser.js.map +1 -0
  66. package/dist/core/foundations/symbol-finder/index.d.ts.map +1 -0
  67. package/dist/core/foundations/symbol-finder/index.js.map +1 -0
  68. package/dist/core/{shared → foundations}/symbol-finder/symbol-finder.d.ts +24 -10
  69. package/dist/core/foundations/symbol-finder/symbol-finder.d.ts.map +1 -0
  70. package/dist/core/{shared → foundations}/symbol-finder/symbol-finder.js +118 -148
  71. package/dist/core/foundations/symbol-finder/symbol-finder.js.map +1 -0
  72. package/dist/core/foundations/symbol-finder/text-matcher.d.ts.map +1 -0
  73. package/dist/core/foundations/symbol-finder/text-matcher.js.map +1 -0
  74. package/dist/core/foundations/symbol-finder/types.d.ts.map +1 -0
  75. package/dist/core/foundations/symbol-finder/types.js.map +1 -0
  76. package/dist/core/impact/impact-analyzer.d.ts +1 -1
  77. package/dist/core/impact/impact-analyzer.d.ts.map +1 -1
  78. package/dist/core/impact/impact-analyzer.js +1 -1
  79. package/dist/core/impact/impact-analyzer.js.map +1 -1
  80. package/dist/core/move-member/extractors/index.d.ts +7 -0
  81. package/dist/core/move-member/extractors/index.d.ts.map +1 -0
  82. package/dist/core/move-member/extractors/index.js +9 -0
  83. package/dist/core/move-member/extractors/index.js.map +1 -0
  84. package/dist/core/move-member/extractors/javascript-extractor.d.ts +29 -0
  85. package/dist/core/move-member/extractors/javascript-extractor.d.ts.map +1 -0
  86. package/dist/core/move-member/extractors/javascript-extractor.js +33 -0
  87. package/dist/core/move-member/extractors/javascript-extractor.js.map +1 -0
  88. package/dist/core/move-member/extractors/typescript-extractor.d.ts +40 -0
  89. package/dist/core/move-member/extractors/typescript-extractor.d.ts.map +1 -0
  90. package/dist/core/move-member/extractors/typescript-extractor.js +286 -0
  91. package/dist/core/move-member/extractors/typescript-extractor.js.map +1 -0
  92. package/dist/core/move-member/member-extractor.d.ts +12 -62
  93. package/dist/core/move-member/member-extractor.d.ts.map +1 -1
  94. package/dist/core/move-member/member-extractor.js +23 -391
  95. package/dist/core/move-member/member-extractor.js.map +1 -1
  96. package/dist/core/move-member/reference-updater.d.ts.map +1 -1
  97. package/dist/core/move-member/reference-updater.js +3 -1
  98. package/dist/core/move-member/reference-updater.js.map +1 -1
  99. package/dist/core/move-member/utils/range-finder.d.ts +40 -0
  100. package/dist/core/move-member/utils/range-finder.d.ts.map +1 -0
  101. package/dist/core/move-member/utils/range-finder.js +101 -0
  102. package/dist/core/move-member/utils/range-finder.js.map +1 -0
  103. package/dist/core/rename/reference-updater.d.ts +5 -0
  104. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  105. package/dist/core/rename/reference-updater.js +17 -4
  106. package/dist/core/rename/reference-updater.js.map +1 -1
  107. package/dist/core/rename/types.d.ts.map +1 -1
  108. package/dist/core/snapshot/snapshot-generator.d.ts +0 -29
  109. package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -1
  110. package/dist/core/snapshot/snapshot-generator.js +6 -183
  111. package/dist/core/snapshot/snapshot-generator.js.map +1 -1
  112. package/dist/core/snapshot/utils/bracket-balancer.d.ts +27 -0
  113. package/dist/core/snapshot/utils/bracket-balancer.d.ts.map +1 -0
  114. package/dist/core/snapshot/utils/bracket-balancer.js +70 -0
  115. package/dist/core/snapshot/utils/bracket-balancer.js.map +1 -0
  116. package/dist/core/snapshot/utils/factory-pattern-detector.d.ts +22 -0
  117. package/dist/core/snapshot/utils/factory-pattern-detector.d.ts.map +1 -0
  118. package/dist/core/snapshot/utils/factory-pattern-detector.js +70 -0
  119. package/dist/core/snapshot/utils/factory-pattern-detector.js.map +1 -0
  120. package/dist/core/snapshot/utils/index.d.ts +7 -0
  121. package/dist/core/snapshot/utils/index.d.ts.map +1 -0
  122. package/dist/core/snapshot/utils/index.js +7 -0
  123. package/dist/core/snapshot/utils/index.js.map +1 -0
  124. package/dist/core/snapshot/utils/symbol-formatter.d.ts +37 -0
  125. package/dist/core/snapshot/utils/symbol-formatter.d.ts.map +1 -0
  126. package/dist/core/snapshot/utils/symbol-formatter.js +89 -0
  127. package/dist/core/snapshot/utils/symbol-formatter.js.map +1 -0
  128. package/dist/infrastructure/formatters/query-formatter.d.ts +8 -62
  129. package/dist/infrastructure/formatters/query-formatter.d.ts.map +1 -1
  130. package/dist/infrastructure/formatters/query-formatter.js +29 -438
  131. package/dist/infrastructure/formatters/query-formatter.js.map +1 -1
  132. package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts +24 -0
  133. package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts.map +1 -0
  134. package/dist/infrastructure/formatters/strategies/analyze-formatter.js +107 -0
  135. package/dist/infrastructure/formatters/strategies/analyze-formatter.js.map +1 -0
  136. package/dist/infrastructure/formatters/strategies/base-formatter.d.ts +67 -0
  137. package/dist/infrastructure/formatters/strategies/base-formatter.d.ts.map +1 -0
  138. package/dist/infrastructure/formatters/strategies/base-formatter.js +75 -0
  139. package/dist/infrastructure/formatters/strategies/base-formatter.js.map +1 -0
  140. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts +19 -0
  141. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts.map +1 -0
  142. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js +77 -0
  143. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js.map +1 -0
  144. package/dist/infrastructure/formatters/strategies/deps-formatter.d.ts +15 -0
  145. package/dist/infrastructure/formatters/strategies/deps-formatter.d.ts.map +1 -0
  146. package/dist/infrastructure/formatters/strategies/deps-formatter.js +47 -0
  147. package/dist/infrastructure/formatters/strategies/deps-formatter.js.map +1 -0
  148. package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts +23 -0
  149. package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts.map +1 -0
  150. package/dist/infrastructure/formatters/strategies/find-references-formatter.js +71 -0
  151. package/dist/infrastructure/formatters/strategies/find-references-formatter.js.map +1 -0
  152. package/dist/infrastructure/formatters/strategies/index.d.ts +11 -0
  153. package/dist/infrastructure/formatters/strategies/index.d.ts.map +1 -0
  154. package/dist/infrastructure/formatters/strategies/index.js +11 -0
  155. package/dist/infrastructure/formatters/strategies/index.js.map +1 -0
  156. package/dist/infrastructure/formatters/strategies/search-formatter.d.ts +15 -0
  157. package/dist/infrastructure/formatters/strategies/search-formatter.d.ts.map +1 -0
  158. package/dist/infrastructure/formatters/strategies/search-formatter.js +32 -0
  159. package/dist/infrastructure/formatters/strategies/search-formatter.js.map +1 -0
  160. package/dist/infrastructure/formatters/strategies/snapshot-formatter.d.ts +20 -0
  161. package/dist/infrastructure/formatters/strategies/snapshot-formatter.d.ts.map +1 -0
  162. package/dist/infrastructure/formatters/strategies/snapshot-formatter.js +101 -0
  163. package/dist/infrastructure/formatters/strategies/snapshot-formatter.js.map +1 -0
  164. package/dist/infrastructure/parser/registry.js.map +1 -1
  165. package/dist/interfaces/cli/commands/call-hierarchy.command.js +1 -1
  166. package/dist/interfaces/cli/commands/call-hierarchy.command.js.map +1 -1
  167. package/dist/interfaces/cli/commands/change-signature.command.js +3 -2
  168. package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -1
  169. package/dist/interfaces/cli/commands/deadcode.command.js +1 -1
  170. package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -1
  171. package/dist/interfaces/cli/commands/find-references.command.js +2 -2
  172. package/dist/interfaces/cli/commands/find-references.command.js.map +1 -1
  173. package/dist/interfaces/cli/commands/rename.command.js +2 -2
  174. package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
  175. package/dist/interfaces/cli/preview-output-handler.d.ts.map +1 -1
  176. package/dist/interfaces/cli/preview-output-handler.js.map +1 -1
  177. package/dist/interfaces/cli/unified-output-handler.d.ts.map +1 -1
  178. package/dist/interfaces/cli/unified-output-handler.js.map +1 -1
  179. package/dist/plugins/javascript/parser.d.ts +0 -2
  180. package/dist/plugins/javascript/parser.d.ts.map +1 -1
  181. package/dist/plugins/javascript/parser.js +3 -19
  182. package/dist/plugins/javascript/parser.js.map +1 -1
  183. package/dist/plugins/javascript/types.d.ts.map +1 -1
  184. package/dist/plugins/javascript/types.js.map +1 -1
  185. package/dist/plugins/shared/index.d.ts +1 -0
  186. package/dist/plugins/shared/index.d.ts.map +1 -1
  187. package/dist/plugins/shared/index.js +2 -0
  188. package/dist/plugins/shared/index.js.map +1 -1
  189. package/dist/plugins/shared/utils/async.d.ts.map +1 -1
  190. package/dist/plugins/shared/utils/async.js.map +1 -1
  191. package/dist/plugins/shared/utils/object.js +5 -5
  192. package/dist/plugins/shared/utils/object.js.map +1 -1
  193. package/dist/plugins/shared/validators.d.ts +15 -0
  194. package/dist/plugins/shared/validators.d.ts.map +1 -0
  195. package/dist/plugins/shared/validators.js +29 -0
  196. package/dist/plugins/shared/validators.js.map +1 -0
  197. package/dist/plugins/typescript/dependency-analyzer.d.ts.map +1 -1
  198. package/dist/plugins/typescript/dependency-analyzer.js.map +1 -1
  199. package/dist/plugins/typescript/parser.d.ts +0 -2
  200. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  201. package/dist/plugins/typescript/parser.js +3 -19
  202. package/dist/plugins/typescript/parser.js.map +1 -1
  203. package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -1
  204. package/dist/plugins/typescript/symbol-extractor.js.map +1 -1
  205. package/dist/plugins/typescript/types.d.ts.map +1 -1
  206. package/dist/plugins/typescript/types.js.map +1 -1
  207. package/package.json +1 -1
  208. package/dist/core/shared/dependency-graph/dependency-graph.d.ts.map +0 -1
  209. package/dist/core/shared/dependency-graph/dependency-graph.js.map +0 -1
  210. package/dist/core/shared/dependency-graph/index.d.ts.map +0 -1
  211. package/dist/core/shared/dependency-graph/index.js.map +0 -1
  212. package/dist/core/shared/dependency-graph/types.d.ts.map +0 -1
  213. package/dist/core/shared/dependency-graph/types.js.map +0 -1
  214. package/dist/core/shared/index.d.ts +0 -8
  215. package/dist/core/shared/index.d.ts.map +0 -1
  216. package/dist/core/shared/index.js +0 -11
  217. package/dist/core/shared/index.js.map +0 -1
  218. package/dist/core/shared/indexing/file-index.d.ts.map +0 -1
  219. package/dist/core/shared/indexing/file-index.js.map +0 -1
  220. package/dist/core/shared/indexing/index-engine.d.ts.map +0 -1
  221. package/dist/core/shared/indexing/index-engine.js.map +0 -1
  222. package/dist/core/shared/indexing/index.d.ts.map +0 -1
  223. package/dist/core/shared/indexing/index.js.map +0 -1
  224. package/dist/core/shared/indexing/symbol-index.d.ts.map +0 -1
  225. package/dist/core/shared/indexing/symbol-index.js.map +0 -1
  226. package/dist/core/shared/indexing/types.d.ts.map +0 -1
  227. package/dist/core/shared/indexing/types.js.map +0 -1
  228. package/dist/core/shared/symbol-finder/call-site-parser.d.ts.map +0 -1
  229. package/dist/core/shared/symbol-finder/call-site-parser.js.map +0 -1
  230. package/dist/core/shared/symbol-finder/index.d.ts.map +0 -1
  231. package/dist/core/shared/symbol-finder/index.js.map +0 -1
  232. package/dist/core/shared/symbol-finder/symbol-finder.d.ts.map +0 -1
  233. package/dist/core/shared/symbol-finder/symbol-finder.js.map +0 -1
  234. package/dist/core/shared/symbol-finder/text-matcher.d.ts.map +0 -1
  235. package/dist/core/shared/symbol-finder/text-matcher.js.map +0 -1
  236. package/dist/core/shared/symbol-finder/types.d.ts.map +0 -1
  237. package/dist/core/shared/symbol-finder/types.js.map +0 -1
  238. /package/dist/core/{shared → foundations}/dependency-graph/dependency-graph.d.ts +0 -0
  239. /package/dist/core/{shared → foundations}/dependency-graph/dependency-graph.js +0 -0
  240. /package/dist/core/{shared → foundations}/dependency-graph/index.d.ts +0 -0
  241. /package/dist/core/{shared → foundations}/dependency-graph/index.js +0 -0
  242. /package/dist/core/{shared → foundations}/dependency-graph/types.d.ts +0 -0
  243. /package/dist/core/{shared → foundations}/dependency-graph/types.js +0 -0
  244. /package/dist/core/{shared → foundations}/indexing/file-index.d.ts +0 -0
  245. /package/dist/core/{shared → foundations}/indexing/file-index.js +0 -0
  246. /package/dist/core/{shared → foundations}/indexing/index-engine.d.ts +0 -0
  247. /package/dist/core/{shared → foundations}/indexing/index-engine.js +0 -0
  248. /package/dist/core/{shared → foundations}/indexing/index.d.ts +0 -0
  249. /package/dist/core/{shared → foundations}/indexing/index.js +0 -0
  250. /package/dist/core/{shared → foundations}/indexing/symbol-index.d.ts +0 -0
  251. /package/dist/core/{shared → foundations}/indexing/symbol-index.js +0 -0
  252. /package/dist/core/{shared → foundations}/symbol-finder/call-site-parser.d.ts +0 -0
  253. /package/dist/core/{shared → foundations}/symbol-finder/call-site-parser.js +0 -0
  254. /package/dist/core/{shared → foundations}/symbol-finder/index.d.ts +0 -0
  255. /package/dist/core/{shared → foundations}/symbol-finder/index.js +0 -0
  256. /package/dist/core/{shared → foundations}/symbol-finder/text-matcher.d.ts +0 -0
  257. /package/dist/core/{shared → foundations}/symbol-finder/text-matcher.js +0 -0
  258. /package/dist/core/{shared → foundations}/symbol-finder/types.d.ts +0 -0
  259. /package/dist/core/{shared → foundations}/symbol-finder/types.js +0 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * 括號平衡算法
3
+ * 用於解析包含巢狀泛型的簽章
4
+ */
5
+ /**
6
+ * 使用括號平衡算法解析簽章
7
+ * 正確處理巢狀泛型(如 Map<K, Fn<V>>)
8
+ * @param signature 完整簽章字串
9
+ * @returns 解析結果,無法解析則返回 null
10
+ */
11
+ export function parseSignatureWithBalancing(signature) {
12
+ // 找到第一個 '(' 的位置(跳過泛型參數 '<...>')
13
+ let depth = 0;
14
+ let parenStart = -1;
15
+ for (let i = 0; i < signature.length; i++) {
16
+ const char = signature[i];
17
+ if (char === '<') {
18
+ depth++;
19
+ }
20
+ else if (char === '>') {
21
+ depth--;
22
+ }
23
+ else if (char === '(' && depth === 0) {
24
+ parenStart = i;
25
+ break;
26
+ }
27
+ }
28
+ if (parenStart === -1) {
29
+ return null;
30
+ }
31
+ // 從 parenStart 開始,使用括號平衡找到對應的 ')'
32
+ depth = 0;
33
+ let parenEnd = -1;
34
+ for (let i = parenStart; i < signature.length; i++) {
35
+ const char = signature[i];
36
+ if (char === '(' || char === '<' || char === '{' || char === '[') {
37
+ depth++;
38
+ }
39
+ else if (char === ')' || char === '>' || char === '}' || char === ']') {
40
+ depth--;
41
+ if (depth === 0 && char === ')') {
42
+ parenEnd = i;
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ if (parenEnd === -1) {
48
+ return null;
49
+ }
50
+ // 提取參數和回傳型別
51
+ const params = signature.substring(parenStart + 1, parenEnd).trim();
52
+ const afterParen = signature.substring(parenEnd + 1).trim();
53
+ // 解析回傳型別(跳過 ':' 後的部分)
54
+ let returnType = 'void';
55
+ if (afterParen.startsWith(':')) {
56
+ returnType = afterParen.substring(1).trim();
57
+ }
58
+ return { params, returnType };
59
+ }
60
+ /**
61
+ * 格式化解析結果為簽章字串
62
+ * @param parsed 解析結果
63
+ * @returns 格式化字串 "(params) → returnType"
64
+ */
65
+ export function formatParsedSignature(parsed) {
66
+ return parsed.params
67
+ ? `(${parsed.params}) → ${parsed.returnType}`
68
+ : `() → ${parsed.returnType}`;
69
+ }
70
+ //# sourceMappingURL=bracket-balancer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bracket-balancer.js","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/bracket-balancer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAiB;IAC3D,gCAAgC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACvC,UAAU,GAAG,CAAC,CAAC;YACf,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,KAAK,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjE,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxE,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBAChC,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;IACZ,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE5D,sBAAsB;IACtB,IAAI,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,OAAO,MAAM,CAAC,MAAM;QAClB,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,UAAU,EAAE;QAC7C,CAAC,CAAC,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Factory 模式識別器
3
+ * 使用 Parser 語義分析識別模組內的 factory 模式
4
+ */
5
+ import type { IFileSystem } from '../../../infrastructure/storage/index.js';
6
+ import type { PatternInfo } from '../../../infrastructure/parser/index.js';
7
+ /**
8
+ * 識別模組內的 factory 模式
9
+ * @param modulePath 模組路徑
10
+ * @param fileSystem 檔案系統
11
+ * @returns Factory 模式 Map(symbolName → PatternInfo)
12
+ */
13
+ export declare function identifyFactoryPatterns(modulePath: string, fileSystem: IFileSystem): Promise<Map<string, PatternInfo>>;
14
+ /**
15
+ * 判斷函數是否為 factory
16
+ * 優先使用 Parser 語義分析結果,若無則 fallback 到名稱比對
17
+ * @param funcName 函數名稱
18
+ * @param factoryPatterns Parser 識別的 factory 模式
19
+ * @returns 是否為 factory
20
+ */
21
+ export declare function isFactory(funcName: string, factoryPatterns: Map<string, PatternInfo>): boolean;
22
+ //# sourceMappingURL=factory-pattern-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-pattern-detector.d.ts","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/factory-pattern-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAsCnC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GACxC,OAAO,CAYT"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Factory 模式識別器
3
+ * 使用 Parser 語義分析識別模組內的 factory 模式
4
+ */
5
+ import * as path from 'path';
6
+ import { ParserRegistry } from '../../../infrastructure/parser/index.js';
7
+ /**
8
+ * 識別模組內的 factory 模式
9
+ * @param modulePath 模組路徑
10
+ * @param fileSystem 檔案系統
11
+ * @returns Factory 模式 Map(symbolName → PatternInfo)
12
+ */
13
+ export async function identifyFactoryPatterns(modulePath, fileSystem) {
14
+ const factoryMap = new Map();
15
+ try {
16
+ const entries = await fileSystem.readDirectory(modulePath);
17
+ for (const entry of entries) {
18
+ if (entry.isDirectory) {
19
+ continue;
20
+ }
21
+ const ext = path.extname(entry.name);
22
+ if (!['.ts', '.js', '.tsx', '.jsx'].includes(ext)) {
23
+ continue;
24
+ }
25
+ const filePath = path.join(modulePath, entry.name);
26
+ const parser = ParserRegistry.getInstance().getParser(ext);
27
+ if (!parser || !parser.identifyPatterns) {
28
+ continue;
29
+ }
30
+ try {
31
+ const content = await fileSystem.readFile(filePath);
32
+ const codeString = typeof content === 'string' ? content : content.toString('utf-8');
33
+ const patterns = parser.identifyPatterns(codeString);
34
+ if (patterns) {
35
+ for (const pattern of patterns) {
36
+ if (pattern.type === 'factory') {
37
+ factoryMap.set(pattern.symbolName, pattern);
38
+ }
39
+ }
40
+ }
41
+ }
42
+ catch {
43
+ // 忽略單一檔案的解析錯誤,繼續處理其他檔案
44
+ }
45
+ }
46
+ }
47
+ catch {
48
+ // 忽略目錄讀取錯誤,返回空 Map(fallback 到名稱比對)
49
+ }
50
+ return factoryMap;
51
+ }
52
+ /**
53
+ * 判斷函數是否為 factory
54
+ * 優先使用 Parser 語義分析結果,若無則 fallback 到名稱比對
55
+ * @param funcName 函數名稱
56
+ * @param factoryPatterns Parser 識別的 factory 模式
57
+ * @returns 是否為 factory
58
+ */
59
+ export function isFactory(funcName, factoryPatterns) {
60
+ // 優先使用 Parser 語義分析結果
61
+ if (factoryPatterns.has(funcName)) {
62
+ return true;
63
+ }
64
+ // Fallback:Parser 未提供任何結果時,使用名稱比對(向後相容)
65
+ if (factoryPatterns.size === 0 && funcName.startsWith('create')) {
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ //# sourceMappingURL=factory-pattern-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-pattern-detector.js","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/factory-pattern-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,UAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEhE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAE3D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEtD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAErD,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;wBAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;4BAC/B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,eAAyC;IAEzC,qBAAqB;IACrB,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Snapshot 工具模組
3
+ */
4
+ export * from './bracket-balancer.js';
5
+ export * from './factory-pattern-detector.js';
6
+ export * from './symbol-formatter.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Snapshot 工具模組
3
+ */
4
+ export * from './bracket-balancer.js';
5
+ export * from './factory-pattern-detector.js';
6
+ export * from './symbol-formatter.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 符號簽章格式化器
3
+ * 提供統一的符號簽章格式化邏輯
4
+ */
5
+ import type { Symbol } from '../../../shared/types/index.js';
6
+ /**
7
+ * 擴展 Symbol 型別,包含 Parser 額外資訊
8
+ */
9
+ export interface ExtendedSymbol extends Symbol {
10
+ readonly signature?: string;
11
+ readonly typeInfo?: string;
12
+ }
13
+ /**
14
+ * 格式化符號簽章(方法或函數)
15
+ * 優先使用 Parser AST 解析,fallback 到 simplifySignature
16
+ * @param symbol 符號
17
+ * @param fileContents 檔案內容 Map(供 Parser 使用)
18
+ * @returns 格式化後的簽章字串
19
+ */
20
+ export declare function formatSymbolSignature(symbol: ExtendedSymbol, fileContents: Map<string, string>): string;
21
+ /**
22
+ * 使用 Parser AST 格式化簽章
23
+ * @param filePath 檔案路徑(用於選擇 Parser)
24
+ * @param symbolName 符號名稱
25
+ * @param line 行號(1-based)
26
+ * @param code 檔案內容
27
+ * @returns 格式化後的簽章字串,如果無法解析則返回 null
28
+ */
29
+ export declare function formatSignatureWithParser(filePath: string, symbolName: string, line: number, code: string): string | null;
30
+ /**
31
+ * 簡化簽章格式(移除函數名稱,保留參數和回傳型別)
32
+ * 使用括號平衡算法處理巢狀泛型
33
+ * @param signature 原始簽章字串
34
+ * @returns 簡化後的簽章
35
+ */
36
+ export declare function simplifySignature(signature: string): string;
37
+ //# sourceMappingURL=symbol-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-formatter.d.ts","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/symbol-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAkBR;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe3D"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * 符號簽章格式化器
3
+ * 提供統一的符號簽章格式化邏輯
4
+ */
5
+ import * as path from 'path';
6
+ import { ParserRegistry } from '../../../infrastructure/parser/index.js';
7
+ import { parseSignatureWithBalancing, formatParsedSignature } from './bracket-balancer.js';
8
+ /**
9
+ * 格式化符號簽章(方法或函數)
10
+ * 優先使用 Parser AST 解析,fallback 到 simplifySignature
11
+ * @param symbol 符號
12
+ * @param fileContents 檔案內容 Map(供 Parser 使用)
13
+ * @returns 格式化後的簽章字串
14
+ */
15
+ export function formatSymbolSignature(symbol, fileContents) {
16
+ // 優先使用 Parser AST 解析簽章
17
+ const filePath = symbol.location?.filePath;
18
+ const line = symbol.location?.range?.start?.line;
19
+ const code = filePath ? fileContents.get(filePath) : undefined;
20
+ if (filePath && line !== undefined && code) {
21
+ const parserResult = formatSignatureWithParser(filePath, symbol.name, line, code);
22
+ if (parserResult) {
23
+ return parserResult;
24
+ }
25
+ }
26
+ // Fallback:使用 IndexEngine 提取的簽章
27
+ if (symbol.signature) {
28
+ return simplifySignature(symbol.signature);
29
+ }
30
+ return '() → unknown';
31
+ }
32
+ /**
33
+ * 使用 Parser AST 格式化簽章
34
+ * @param filePath 檔案路徑(用於選擇 Parser)
35
+ * @param symbolName 符號名稱
36
+ * @param line 行號(1-based)
37
+ * @param code 檔案內容
38
+ * @returns 格式化後的簽章字串,如果無法解析則返回 null
39
+ */
40
+ export function formatSignatureWithParser(filePath, symbolName, line, code) {
41
+ const ext = path.extname(filePath);
42
+ const parser = ParserRegistry.getInstance().getParser(ext);
43
+ if (!parser?.formatSignature) {
44
+ return null;
45
+ }
46
+ const sig = parser.formatSignature(code, symbolName, line);
47
+ if (!sig) {
48
+ return null;
49
+ }
50
+ // 轉換 FormattedSignature → 簡化字串
51
+ const params = sig.parameters
52
+ .map(p => {
53
+ let str = p.name;
54
+ if (p.optional && !p.defaultValue) {
55
+ str += '?';
56
+ }
57
+ if (p.type && p.type !== 'any') {
58
+ str += `: ${p.type}`;
59
+ }
60
+ if (p.defaultValue) {
61
+ str += ` = ${p.defaultValue}`;
62
+ }
63
+ return str;
64
+ })
65
+ .join(', ');
66
+ return params ? `(${params}) → ${sig.returnType}` : `() → ${sig.returnType}`;
67
+ }
68
+ /**
69
+ * 簡化簽章格式(移除函數名稱,保留參數和回傳型別)
70
+ * 使用括號平衡算法處理巢狀泛型
71
+ * @param signature 原始簽章字串
72
+ * @returns 簡化後的簽章
73
+ */
74
+ export function simplifySignature(signature) {
75
+ // 使用括號平衡算法找到參數列表的開始和結束位置
76
+ const result = parseSignatureWithBalancing(signature);
77
+ if (result) {
78
+ return formatParsedSignature(result);
79
+ }
80
+ // Fallback:原始正則邏輯(向後相容)
81
+ const match = signature.match(/^[^(]*\(([^)]*)\)(?:\s*:\s*(.+))?$/);
82
+ if (match) {
83
+ const params = match[1].trim();
84
+ const returnType = match[2]?.trim() || 'void';
85
+ return params ? `(${params}) → ${returnType}` : `() → ${returnType}`;
86
+ }
87
+ return signature;
88
+ }
89
+ //# sourceMappingURL=symbol-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-formatter.js","sourceRoot":"","sources":["../../../../src/core/snapshot/utils/symbol-formatter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * 唯讀命令格式化器
3
- * 提供 json 和 summary 兩種輸出格式
3
+ * 使用策略模式路由到對應的格式化策略
4
4
  */
5
5
  import { type QueryResult } from './query-types.js';
6
6
  /** QueryFormatter 選項 */
@@ -18,7 +18,12 @@ export declare enum QueryFormat {
18
18
  */
19
19
  export declare class QueryFormatter {
20
20
  private readonly color;
21
+ private readonly strategies;
21
22
  constructor(options?: Partial<QueryFormatterOptions>);
23
+ /**
24
+ * 初始化策略 Map
25
+ */
26
+ private initializeStrategies;
22
27
  /**
23
28
  * 格式化結果
24
29
  */
@@ -32,72 +37,13 @@ export declare class QueryFormatter {
32
37
  */
33
38
  toSummary(result: QueryResult): string;
34
39
  /**
35
- * 格式化 Search 摘要
36
- */
37
- private formatSearchSummary;
38
- /**
39
- * 格式化 Deps 摘要
40
- */
41
- private formatDepsSummary;
42
- /**
43
- * 將絕對路徑轉換為相對路徑
44
- * @param filePath 檔案路徑
45
- * @param basePath 專案根目錄
46
- * @returns 相對路徑(若無 basePath 則返回原路徑)
47
- */
48
- private toRelativePath;
49
- /**
50
- * 格式化 Analyze 摘要
51
- */
52
- private formatAnalyzeSummary;
53
- /**
54
- * 格式化 DeadCode 摘要
55
- */
56
- private formatDeadCodeSummary;
57
- /**
58
- * 取得類型標籤
59
- */
60
- private getTypeLabel;
61
- /**
62
- * 取得 Dead Code 圖示
63
- */
64
- private getDeadCodeIcon;
65
- /**
66
- * 格式化 Snapshot 摘要
67
- */
68
- private formatSnapshotSummary;
69
- /**
70
- * 格式化增量快照摘要
71
- */
72
- private formatIncrementalSnapshotSummary;
73
- /**
74
- * 格式化 FindReferences 摘要
75
- */
76
- private formatFindReferencesSummary;
77
- /**
78
- * 按檔案分組引用
40
+ * 取得策略(型別安全)
79
41
  */
80
- private groupReferencesByFile;
81
- /**
82
- * 取得引用類型圖示
83
- */
84
- private getReferenceTypeIcon;
85
- /**
86
- * 格式化 CallHierarchy 摘要
87
- */
88
- private formatCallHierarchySummary;
89
- /**
90
- * 按檔案分組呼叫項目
91
- */
92
- private groupCallsByFile;
42
+ private getStrategy;
93
43
  /**
94
44
  * 格式化預設摘要(fallback)
95
45
  */
96
46
  private formatDefaultSummary;
97
- /**
98
- * 套用顏色(如果啟用)
99
- */
100
- private colorize;
101
47
  }
102
48
  /**
103
49
  * 建立 QueryFormatter 的工廠函數
@@ -1 +1 @@
1
- {"version":3,"file":"query-formatter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/formatters/query-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAIL,KAAK,WAAW,EAcjB,MAAM,kBAAkB,CAAC;AAqB1B,wBAAwB;AACxB,MAAM,WAAW,qBAAqB;IACpC,eAAe;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,WAAW;AACX,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;gBAEpB,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIxD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,GAAG,MAAM;IAO9D;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAInC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAoBtC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqCzB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyD7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IA+DxC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAyCnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0DlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,QAAQ;CAIjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAAG,cAAc,CAKjG"}
1
+ {"version":3,"file":"query-formatter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/formatters/query-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,WAAW,EAOjB,MAAM,kBAAkB,CAAC;AAW1B,wBAAwB;AACxB,MAAM,WAAW,qBAAqB;IACpC,eAAe;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,WAAW;AACX,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;gBAEnD,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAKxD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,GAAG,MAAM;IAO9D;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAInC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAsBtC;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAqB7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAAG,cAAc,CAKjG"}