@mcp-graph-workflow/mcp-graph 5.31.1 → 5.33.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 (152) hide show
  1. package/README.md +1 -1
  2. package/dist/api/router.d.ts.map +1 -1
  3. package/dist/api/router.js +2 -0
  4. package/dist/api/router.js.map +1 -1
  5. package/dist/api/routes/davinci.d.ts +3 -0
  6. package/dist/api/routes/davinci.d.ts.map +1 -0
  7. package/dist/api/routes/davinci.js +188 -0
  8. package/dist/api/routes/davinci.js.map +1 -0
  9. package/dist/api/routes/translation-project.js +2 -2
  10. package/dist/api/routes/translation-project.js.map +1 -1
  11. package/dist/api/routes/translation.js +2 -2
  12. package/dist/api/routes/translation.js.map +1 -1
  13. package/dist/core/davinci/build-runner.d.ts +37 -0
  14. package/dist/core/davinci/build-runner.d.ts.map +1 -0
  15. package/dist/core/davinci/build-runner.js +239 -0
  16. package/dist/core/davinci/build-runner.js.map +1 -0
  17. package/dist/core/davinci/davinci-parser.d.ts +6 -0
  18. package/dist/core/davinci/davinci-parser.d.ts.map +1 -0
  19. package/dist/core/davinci/davinci-parser.js +218 -0
  20. package/dist/core/davinci/davinci-parser.js.map +1 -0
  21. package/dist/core/davinci/davinci-store.d.ts +49 -0
  22. package/dist/core/davinci/davinci-store.d.ts.map +1 -0
  23. package/dist/core/davinci/davinci-store.js +121 -0
  24. package/dist/core/davinci/davinci-store.js.map +1 -0
  25. package/dist/core/davinci/davinci-types.d.ts +241 -0
  26. package/dist/core/davinci/davinci-types.d.ts.map +1 -0
  27. package/dist/core/davinci/davinci-types.js +123 -0
  28. package/dist/core/davinci/davinci-types.js.map +1 -0
  29. package/dist/core/davinci/davinci-validators.d.ts +16 -0
  30. package/dist/core/davinci/davinci-validators.d.ts.map +1 -0
  31. package/dist/core/davinci/davinci-validators.js +86 -0
  32. package/dist/core/davinci/davinci-validators.js.map +1 -0
  33. package/dist/core/davinci/descriptor-generator.d.ts +19 -0
  34. package/dist/core/davinci/descriptor-generator.d.ts.map +1 -0
  35. package/dist/core/davinci/descriptor-generator.js +52 -0
  36. package/dist/core/davinci/descriptor-generator.js.map +1 -0
  37. package/dist/core/davinci/plugin-generator.d.ts +29 -0
  38. package/dist/core/davinci/plugin-generator.d.ts.map +1 -0
  39. package/dist/core/davinci/plugin-generator.js +86 -0
  40. package/dist/core/davinci/plugin-generator.js.map +1 -0
  41. package/dist/core/davinci/plugin-type-detector.d.ts +15 -0
  42. package/dist/core/davinci/plugin-type-detector.d.ts.map +1 -0
  43. package/dist/core/davinci/plugin-type-detector.js +114 -0
  44. package/dist/core/davinci/plugin-type-detector.js.map +1 -0
  45. package/dist/core/davinci/pom-generator.d.ts +4 -0
  46. package/dist/core/davinci/pom-generator.d.ts.map +1 -0
  47. package/dist/core/davinci/pom-generator.js +179 -0
  48. package/dist/core/davinci/pom-generator.js.map +1 -0
  49. package/dist/core/davinci/template-registry.d.ts +25 -0
  50. package/dist/core/davinci/template-registry.d.ts.map +1 -0
  51. package/dist/core/davinci/template-registry.js +280 -0
  52. package/dist/core/davinci/template-registry.js.map +1 -0
  53. package/dist/core/davinci/variable-resolver.d.ts +9 -0
  54. package/dist/core/davinci/variable-resolver.d.ts.map +1 -0
  55. package/dist/core/davinci/variable-resolver.js +62 -0
  56. package/dist/core/davinci/variable-resolver.js.map +1 -0
  57. package/dist/core/parser/read-swagger.d.ts.map +1 -1
  58. package/dist/core/parser/read-swagger.js +6 -0
  59. package/dist/core/parser/read-swagger.js.map +1 -1
  60. package/dist/core/siebel/sif-parser.d.ts.map +1 -1
  61. package/dist/core/siebel/sif-parser.js +6 -0
  62. package/dist/core/siebel/sif-parser.js.map +1 -1
  63. package/dist/core/siebel/wsdl-parser.d.ts.map +1 -1
  64. package/dist/core/siebel/wsdl-parser.js +6 -0
  65. package/dist/core/siebel/wsdl-parser.js.map +1 -1
  66. package/dist/core/translation/generators/ast-placeholder-extractor.d.ts +20 -0
  67. package/dist/core/translation/generators/ast-placeholder-extractor.d.ts.map +1 -0
  68. package/dist/core/translation/generators/ast-placeholder-extractor.js +215 -0
  69. package/dist/core/translation/generators/ast-placeholder-extractor.js.map +1 -0
  70. package/dist/core/translation/generators/placeholder-resolver.d.ts +18 -0
  71. package/dist/core/translation/generators/placeholder-resolver.d.ts.map +1 -0
  72. package/dist/core/translation/generators/placeholder-resolver.js +487 -0
  73. package/dist/core/translation/generators/placeholder-resolver.js.map +1 -0
  74. package/dist/core/translation/generators/source-text-extractor.d.ts +20 -0
  75. package/dist/core/translation/generators/source-text-extractor.d.ts.map +1 -0
  76. package/dist/core/translation/generators/source-text-extractor.js +190 -0
  77. package/dist/core/translation/generators/source-text-extractor.js.map +1 -0
  78. package/dist/core/translation/generators/universal-generator.d.ts +23 -0
  79. package/dist/core/translation/generators/universal-generator.d.ts.map +1 -0
  80. package/dist/core/translation/generators/universal-generator.js +315 -0
  81. package/dist/core/translation/generators/universal-generator.js.map +1 -0
  82. package/dist/core/translation/language-detect.d.ts.map +1 -1
  83. package/dist/core/translation/language-detect.js +37 -14
  84. package/dist/core/translation/language-detect.js.map +1 -1
  85. package/dist/core/translation/parsers/parser-adapter.d.ts +4 -0
  86. package/dist/core/translation/parsers/parser-adapter.d.ts.map +1 -1
  87. package/dist/core/translation/project-translation-orchestrator.d.ts +3 -3
  88. package/dist/core/translation/project-translation-orchestrator.d.ts.map +1 -1
  89. package/dist/core/translation/project-translation-orchestrator.js +4 -4
  90. package/dist/core/translation/project-translation-orchestrator.js.map +1 -1
  91. package/dist/core/translation/prompt-builder.d.ts +4 -0
  92. package/dist/core/translation/prompt-builder.d.ts.map +1 -1
  93. package/dist/core/translation/prompt-builder.js +13 -3
  94. package/dist/core/translation/prompt-builder.js.map +1 -1
  95. package/dist/core/translation/translation-orchestrator.d.ts +2 -1
  96. package/dist/core/translation/translation-orchestrator.d.ts.map +1 -1
  97. package/dist/core/translation/translation-orchestrator.js +21 -2
  98. package/dist/core/translation/translation-orchestrator.js.map +1 -1
  99. package/dist/docs-manifest.json +64 -2
  100. package/dist/mcp/app-factory.js +1 -1
  101. package/dist/mcp/app-factory.js.map +1 -1
  102. package/dist/mcp/tools/davinci-analyze.d.ts +4 -0
  103. package/dist/mcp/tools/davinci-analyze.d.ts.map +1 -0
  104. package/dist/mcp/tools/davinci-analyze.js +31 -0
  105. package/dist/mcp/tools/davinci-analyze.js.map +1 -0
  106. package/dist/mcp/tools/davinci-build.d.ts +4 -0
  107. package/dist/mcp/tools/davinci-build.d.ts.map +1 -0
  108. package/dist/mcp/tools/davinci-build.js +43 -0
  109. package/dist/mcp/tools/davinci-build.js.map +1 -0
  110. package/dist/mcp/tools/davinci-convert.d.ts +4 -0
  111. package/dist/mcp/tools/davinci-convert.d.ts.map +1 -0
  112. package/dist/mcp/tools/davinci-convert.js +61 -0
  113. package/dist/mcp/tools/davinci-convert.js.map +1 -0
  114. package/dist/mcp/tools/index.d.ts.map +1 -1
  115. package/dist/mcp/tools/index.js +8 -0
  116. package/dist/mcp/tools/index.js.map +1 -1
  117. package/dist/mcp/tools/translate-code.js +1 -1
  118. package/dist/mcp/tools/translate-code.js.map +1 -1
  119. package/dist/web/dashboard/dist/assets/{benchmark-tab-GHO9Ji5M.js → benchmark-tab-BezNQCQh.js} +1 -1
  120. package/dist/web/dashboard/dist/assets/{circle-alert-CfDAmNcO.js → circle-alert-DKsqBTgC.js} +1 -1
  121. package/dist/web/dashboard/dist/assets/{context-tab-B_6B65lw.js → context-tab-Cmar9i-X.js} +1 -1
  122. package/dist/web/dashboard/dist/assets/davinci-tab-CkWYkDsy.js +10 -0
  123. package/dist/web/dashboard/dist/assets/{docs-tab-Dq7rtZol.js → docs-tab-CYpDJ3Rl.js} +1 -1
  124. package/dist/web/dashboard/dist/assets/file-code-B0t0xVTk.js +11 -0
  125. package/dist/web/dashboard/dist/assets/{gitnexus-tab-DAPpyAe_.js → gitnexus-tab-COEhhMeC.js} +1 -1
  126. package/dist/web/dashboard/dist/assets/{graph-section-O0mwo9kz.js → graph-section-CheOuwv_.js} +1 -1
  127. package/dist/web/dashboard/dist/assets/{graph-tab-CAx8lu7Z.js → graph-tab-B52UV5KP.js} +1 -1
  128. package/dist/web/dashboard/dist/assets/{graph-utils-BwdXFM9h.js → graph-utils-D5HpaYbf.js} +1 -1
  129. package/dist/web/dashboard/dist/assets/{index-f0wNMEe_.js → index--SYA0Gq0.js} +1 -1
  130. package/dist/web/dashboard/dist/assets/index-BcMjWikL.css +1 -0
  131. package/dist/web/dashboard/dist/assets/{index-BxYtgAYc.js → index-DFMBuNWV.js} +1 -1
  132. package/dist/web/dashboard/dist/assets/{index-D_SBClB-.js → index-DdenFaJ5.js} +24 -19
  133. package/dist/web/dashboard/dist/assets/{insights-tab-DfH4O_Gj.js → insights-tab-sPgv-iwt.js} +1 -1
  134. package/dist/web/dashboard/dist/assets/{journey-tab-D2_EXArZ.js → journey-tab-CS416bwg.js} +1 -1
  135. package/dist/web/dashboard/dist/assets/languages-tab-CcB_s-Ic.js +108 -0
  136. package/dist/web/dashboard/dist/assets/{loader-circle-D5Z5DuF4.js → loader-circle-BSNUICqd.js} +1 -1
  137. package/dist/web/dashboard/dist/assets/{logs-tab-DwVCJxNs.js → logs-tab-BbDXtvmz.js} +1 -1
  138. package/dist/web/dashboard/dist/assets/{lsp-tab-D_3asNom.js → lsp-tab-BrytF6mP.js} +3 -3
  139. package/dist/web/dashboard/dist/assets/{memories-tab-BVe3nUf6.js → memories-tab-qCFdXJIV.js} +1 -1
  140. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-DmeNjNES.js → prd-backlog-tab-BiNvyICT.js} +1 -1
  141. package/dist/web/dashboard/dist/assets/{refresh-cw-dY_ihv6e.js → refresh-cw-CqVWFFCW.js} +1 -1
  142. package/dist/web/dashboard/dist/assets/{siebel-tab-CUO3fUiF.js → siebel-tab-DFNHIBbS.js} +3 -3
  143. package/dist/web/dashboard/dist/assets/{sif-parse.worker-DZrybOHz.js → sif-parse.worker-Cty_N-lP.js} +3 -3
  144. package/dist/web/dashboard/dist/assets/{skills-tab-lUKwXrZi.js → skills-tab-DlInZCyj.js} +1 -1
  145. package/dist/web/dashboard/dist/assets/{style-Chqa3iIg.js → style-B4jQtUGE.js} +1 -1
  146. package/dist/web/dashboard/dist/assets/triangle-alert-CqXtIU3H.js +16 -0
  147. package/dist/web/dashboard/dist/assets/upload-Cb3pIYT5.js +16 -0
  148. package/dist/web/dashboard/dist/index.html +2 -2
  149. package/package.json +2 -2
  150. package/dist/web/dashboard/dist/assets/index-BVhCKhGJ.css +0 -1
  151. package/dist/web/dashboard/dist/assets/languages-tab-Cs-EF0mT.js +0 -123
  152. package/dist/web/dashboard/dist/assets/triangle-alert-CkVvjxDP.js +0 -26
@@ -0,0 +1,215 @@
1
+ /**
2
+ * AstPlaceholderExtractor — AST-based extraction via web-tree-sitter.
3
+ *
4
+ * Replaces regex-based SourceTextExtractor + PlaceholderResolver with
5
+ * a single AST-based module. Uses TreeSitterManager (already in project)
6
+ * to parse source code, walks AST nodes to extract placeholder values.
7
+ *
8
+ * Falls back to regex-based extraction for languages without WASM grammar
9
+ * (TypeScript, Kotlin, Swift, Scala, Dart, Haskell, Elixir).
10
+ */
11
+ import { TreeSitterManager } from "../../code/treesitter/treesitter-manager.js";
12
+ import { extractSourceText } from "./source-text-extractor.js";
13
+ import { resolvePlaceholders } from "./placeholder-resolver.js";
14
+ import { logger } from "../../utils/logger.js";
15
+ // ── Singleton manager ─────────────────────────────
16
+ let manager = null;
17
+ function getManager() {
18
+ if (!manager) {
19
+ manager = new TreeSitterManager();
20
+ }
21
+ return manager;
22
+ }
23
+ // ── Languages with WASM grammars ──────────────────
24
+ const AST_SUPPORTED_LANGUAGES = new Set([
25
+ "python", "go", "rust", "java", "c", "cpp", "ruby", "php", "csharp", "lua",
26
+ ]);
27
+ // ── Public API ────────────────────────────────────
28
+ /**
29
+ * Enrich ParsedConstruct[] with sourceText and resolvedPlaceholders
30
+ * using AST-based extraction (web-tree-sitter).
31
+ *
32
+ * Falls back to regex for languages without WASM grammar.
33
+ * Returns a NEW array — does not mutate input.
34
+ */
35
+ export async function extractPlaceholdersFromAst(sourceCode, constructs, sourceLanguageId) {
36
+ if (constructs.length === 0)
37
+ return [];
38
+ // Try AST-based extraction if language has WASM grammar
39
+ if (AST_SUPPORTED_LANGUAGES.has(sourceLanguageId)) {
40
+ try {
41
+ const mgr = getManager();
42
+ await mgr.initialize();
43
+ const parser = await mgr.getParser(sourceLanguageId);
44
+ if (parser) {
45
+ const tree = parser.parse(sourceCode);
46
+ if (tree?.rootNode) {
47
+ return enrichFromAst(tree.rootNode, constructs, sourceCode, sourceLanguageId);
48
+ }
49
+ }
50
+ }
51
+ catch (err) {
52
+ logger.warn("ast-extractor:fallback", {
53
+ language: sourceLanguageId,
54
+ error: String(err),
55
+ message: "AST parsing failed, falling back to regex",
56
+ });
57
+ }
58
+ }
59
+ // Fallback: regex-based extraction
60
+ return fallbackToRegex(sourceCode, constructs, sourceLanguageId);
61
+ }
62
+ // ── AST-based extraction ──────────────────────────
63
+ function enrichFromAst(rootNode, constructs, sourceCode, languageId) {
64
+ return constructs.map((c) => {
65
+ // Find AST node matching this construct's start line
66
+ const astNode = findNodeAtLine(rootNode, c.startLine);
67
+ if (!astNode) {
68
+ // No AST node found — use regex fallback for this construct
69
+ const regexResult = fallbackSingleConstruct(sourceCode, c, languageId);
70
+ return regexResult;
71
+ }
72
+ // Extract sourceText from AST node
73
+ const sourceText = astNode.text ?? "";
74
+ // Extract placeholders by walking AST node fields
75
+ const resolvedPlaceholders = extractFieldsFromNode(astNode, c.constructId, languageId);
76
+ // Include name from construct if not resolved from AST
77
+ if (c.name && !resolvedPlaceholders.name) {
78
+ resolvedPlaceholders.name = c.name;
79
+ }
80
+ return { ...c, sourceText, resolvedPlaceholders };
81
+ });
82
+ }
83
+ /**
84
+ * Find the AST node at a given 1-based line number.
85
+ * Searches for the most specific (deepest) named node at that line.
86
+ */
87
+ function findNodeAtLine(rootNode, targetLine) {
88
+ const targetRow = targetLine - 1; // tree-sitter uses 0-based rows
89
+ // Walk children to find the node that starts at targetRow
90
+ let bestMatch = null;
91
+ function walk(node) {
92
+ if (!node)
93
+ return;
94
+ const startRow = node.startPosition?.row ?? -1;
95
+ const endRow = node.endPosition?.row ?? -1;
96
+ if (startRow === targetRow && node.isNamed) {
97
+ // Prefer broader nodes (function_definition over just name identifier)
98
+ if (!bestMatch || (node.endPosition?.row ?? 0) > (bestMatch.endPosition?.row ?? 0)) {
99
+ bestMatch = node;
100
+ }
101
+ }
102
+ // Only recurse into children that overlap with target
103
+ if (startRow <= targetRow && endRow >= targetRow) {
104
+ const childCount = node.namedChildCount ?? node.childCount ?? 0;
105
+ for (let i = 0; i < childCount; i++) {
106
+ const child = node.namedChild?.(i) ?? node.child?.(i);
107
+ if (child)
108
+ walk(child);
109
+ }
110
+ }
111
+ }
112
+ walk(rootNode);
113
+ return bestMatch;
114
+ }
115
+ /**
116
+ * Extract placeholder values from AST node fields.
117
+ * Uses tree-sitter's childForFieldName API for structured extraction.
118
+ */
119
+ function extractFieldsFromNode(node, _constructId, _languageId) {
120
+ const result = {};
121
+ // Name field
122
+ const nameNode = node.childForFieldName?.("name");
123
+ if (nameNode) {
124
+ result.name = nameNode.text;
125
+ }
126
+ // Parameters field (function/method)
127
+ const paramsNode = node.childForFieldName?.("parameters");
128
+ if (paramsNode) {
129
+ // Strip outer parentheses
130
+ let params = paramsNode.text ?? "";
131
+ if (params.startsWith("(") && params.endsWith(")")) {
132
+ params = params.slice(1, -1).trim();
133
+ }
134
+ result.params = params;
135
+ }
136
+ // Body field (function/class/if/loop)
137
+ const bodyNode = node.childForFieldName?.("body");
138
+ if (bodyNode) {
139
+ let body = bodyNode.text ?? "";
140
+ // Strip outer braces for brace languages
141
+ if (body.startsWith("{") && body.endsWith("}")) {
142
+ body = body.slice(1, -1).trim();
143
+ }
144
+ // Strip leading colon for Python
145
+ if (body.startsWith(":")) {
146
+ body = body.slice(1).trim();
147
+ }
148
+ result.body = body;
149
+ result.members = body; // alias for class constructs
150
+ }
151
+ // Return type
152
+ const returnTypeNode = node.childForFieldName?.("return_type") ?? node.childForFieldName?.("type");
153
+ if (returnTypeNode) {
154
+ let returnType = returnTypeNode.text ?? "";
155
+ if (returnType.startsWith(":"))
156
+ returnType = returnType.slice(1).trim();
157
+ if (returnType.startsWith("->"))
158
+ returnType = returnType.slice(2).trim();
159
+ result.returnType = returnType;
160
+ }
161
+ // Condition (if/while/for)
162
+ const condNode = node.childForFieldName?.("condition");
163
+ if (condNode) {
164
+ let cond = condNode.text ?? "";
165
+ if (cond.startsWith("(") && cond.endsWith(")")) {
166
+ cond = cond.slice(1, -1).trim();
167
+ }
168
+ result.condition = cond;
169
+ }
170
+ // Superclass (class extends)
171
+ const superNode = node.childForFieldName?.("superclass") ?? node.childForFieldName?.("superclasses");
172
+ if (superNode) {
173
+ result.parent = superNode.text ?? "";
174
+ }
175
+ // Value (variable declarations, return)
176
+ const valueNode = node.childForFieldName?.("value") ?? node.childForFieldName?.("right");
177
+ if (valueNode) {
178
+ result.value = valueNode.text ?? "";
179
+ result.expression = valueNode.text ?? "";
180
+ }
181
+ // Module (imports)
182
+ const moduleNode = node.childForFieldName?.("module_name") ?? node.childForFieldName?.("source");
183
+ if (moduleNode) {
184
+ let mod = moduleNode.text ?? "";
185
+ if (mod.startsWith("'") || mod.startsWith('"')) {
186
+ mod = mod.slice(1, -1);
187
+ }
188
+ result.module = mod;
189
+ }
190
+ return result;
191
+ }
192
+ // ── Regex fallback ────────────────────────────────
193
+ function fallbackToRegex(sourceCode, constructs, languageId) {
194
+ const enriched = extractSourceText(sourceCode, constructs, languageId);
195
+ return enriched.map((c) => {
196
+ const resolvedPlaceholders = c.sourceText
197
+ ? resolvePlaceholders(c.sourceText, c.constructId, languageId)
198
+ : {};
199
+ if (c.name && !resolvedPlaceholders.name) {
200
+ resolvedPlaceholders.name = c.name;
201
+ }
202
+ return { ...c, resolvedPlaceholders };
203
+ });
204
+ }
205
+ function fallbackSingleConstruct(sourceCode, construct, languageId) {
206
+ const [enriched] = extractSourceText(sourceCode, [construct], languageId);
207
+ const resolvedPlaceholders = enriched.sourceText
208
+ ? resolvePlaceholders(enriched.sourceText, enriched.constructId, languageId)
209
+ : {};
210
+ if (enriched.name && !resolvedPlaceholders.name) {
211
+ resolvedPlaceholders.name = enriched.name;
212
+ }
213
+ return { ...enriched, resolvedPlaceholders };
214
+ }
215
+ //# sourceMappingURL=ast-placeholder-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-placeholder-extractor.js","sourceRoot":"","sources":["../../../../src/core/translation/generators/ast-placeholder-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK/C,qDAAqD;AAErD,IAAI,OAAO,GAA6B,IAAI,CAAC;AAE7C,SAAS,UAAU;IACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qDAAqD;AAErD,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK;CAC3E,CAAC,CAAC;AAEH,qDAAqD;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,UAA6B,EAC7B,gBAAwB;IAExB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,wDAAwD;IACxD,IAAI,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAErD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACtC,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;oBACnB,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBACpC,QAAQ,EAAE,gBAAgB;gBAC1B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;gBAClB,OAAO,EAAE,2CAA2C;aACrD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,OAAO,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACnE,CAAC;AAED,qDAAqD;AAErD,SAAS,aAAa,CACpB,QAAoB,EACpB,UAA6B,EAC7B,UAAkB,EAClB,UAAkB;IAElB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,qDAAqD;QACrD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,4DAA4D;YAC5D,MAAM,WAAW,GAAG,uBAAuB,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;YACvE,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAEtC,kDAAkD;QAClD,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEvF,uDAAuD;QACvD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACzC,oBAAoB,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;QAED,OAAO,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,QAAoB,EAAE,UAAkB;IAC9D,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,gCAAgC;IAElE,0DAA0D;IAC1D,IAAI,SAAS,GAAsB,IAAI,CAAC;IAExC,SAAS,IAAI,CAAC,IAAgB;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAE3C,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3C,uEAAuE;YACvE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnF,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,QAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,KAAK;oBAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,IAAgB,EAChB,YAAoB,EACpB,WAAmB;IAEnB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,aAAa;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,0BAA0B;QAC1B,IAAI,MAAM,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,yCAAyC;QACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,iCAAiC;QACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,6BAA6B;IACtD,CAAC;IAED,cAAc;IACd,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;IACnG,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,cAAc,CAAC,CAAC;IACrG,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,wCAAwC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC;IACzF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC;IACjG,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qDAAqD;AAErD,SAAS,eAAe,CACtB,UAAkB,EAClB,UAA6B,EAC7B,UAAkB;IAElB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,oBAAoB,GAAG,CAAC,CAAC,UAAU;YACvC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC;YAC9D,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACzC,oBAAoB,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC9B,UAAkB,EAClB,SAA0B,EAC1B,UAAkB;IAElB,MAAM,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,oBAAoB,GAAG,QAAQ,CAAC,UAAU;QAC9C,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAChD,oBAAoB,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,oBAAoB,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * PlaceholderResolver — extracts {{placeholder}} values from source text.
3
+ *
4
+ * Given a construct's sourceText, constructId, and source language,
5
+ * extracts meaningful parts (name, params, body, condition, etc.)
6
+ * that can be substituted into UCR syntax patterns for the target language.
7
+ *
8
+ * Extractors are grouped by construct type and language family:
9
+ * - Brace-C family: TS, Java, Go, Rust, C#, C++, PHP, Swift, Kotlin, Scala, Dart
10
+ * - Indent family: Python, Haskell
11
+ * - Keyword-end family: Ruby, Lua, Elixir
12
+ */
13
+ /**
14
+ * Extract placeholder values from sourceText based on construct type and language.
15
+ * Returns a Record<string, string> with keys matching UCR pattern placeholders.
16
+ */
17
+ export declare function resolvePlaceholders(sourceText: string, constructId: string, sourceLanguageId: string): Record<string, string>;
18
+ //# sourceMappingURL=placeholder-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-resolver.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/generators/placeholder-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0ExB"}