@mcp-graph-workflow/mcp-graph 5.31.0 → 5.32.0
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.
- package/README.md +1 -1
- package/dist/api/routes/benchmark.d.ts.map +1 -1
- package/dist/api/routes/benchmark.js +15 -2
- package/dist/api/routes/benchmark.js.map +1 -1
- package/dist/api/routes/translation-project.js +2 -2
- package/dist/api/routes/translation-project.js.map +1 -1
- package/dist/api/routes/translation.js +2 -2
- package/dist/api/routes/translation.js.map +1 -1
- package/dist/core/translation/generators/ast-placeholder-extractor.d.ts +20 -0
- package/dist/core/translation/generators/ast-placeholder-extractor.d.ts.map +1 -0
- package/dist/core/translation/generators/ast-placeholder-extractor.js +215 -0
- package/dist/core/translation/generators/ast-placeholder-extractor.js.map +1 -0
- package/dist/core/translation/generators/placeholder-resolver.d.ts +18 -0
- package/dist/core/translation/generators/placeholder-resolver.d.ts.map +1 -0
- package/dist/core/translation/generators/placeholder-resolver.js +487 -0
- package/dist/core/translation/generators/placeholder-resolver.js.map +1 -0
- package/dist/core/translation/generators/source-text-extractor.d.ts +20 -0
- package/dist/core/translation/generators/source-text-extractor.d.ts.map +1 -0
- package/dist/core/translation/generators/source-text-extractor.js +190 -0
- package/dist/core/translation/generators/source-text-extractor.js.map +1 -0
- package/dist/core/translation/generators/universal-generator.d.ts +23 -0
- package/dist/core/translation/generators/universal-generator.d.ts.map +1 -0
- package/dist/core/translation/generators/universal-generator.js +137 -0
- package/dist/core/translation/generators/universal-generator.js.map +1 -0
- package/dist/core/translation/parsers/parser-adapter.d.ts +4 -0
- package/dist/core/translation/parsers/parser-adapter.d.ts.map +1 -1
- package/dist/core/translation/project-translation-orchestrator.d.ts +3 -3
- package/dist/core/translation/project-translation-orchestrator.d.ts.map +1 -1
- package/dist/core/translation/project-translation-orchestrator.js +4 -4
- package/dist/core/translation/project-translation-orchestrator.js.map +1 -1
- package/dist/core/translation/prompt-builder.d.ts +4 -0
- package/dist/core/translation/prompt-builder.d.ts.map +1 -1
- package/dist/core/translation/prompt-builder.js +13 -3
- package/dist/core/translation/prompt-builder.js.map +1 -1
- package/dist/core/translation/translation-orchestrator.d.ts +2 -1
- package/dist/core/translation/translation-orchestrator.d.ts.map +1 -1
- package/dist/core/translation/translation-orchestrator.js +21 -2
- package/dist/core/translation/translation-orchestrator.js.map +1 -1
- package/dist/docs-manifest.json +8 -2
- package/dist/mcp/tools/translate-code.js +1 -1
- package/dist/mcp/tools/translate-code.js.map +1 -1
- package/dist/web/dashboard/dist/assets/benchmark-tab-en-UkR66.js +1 -0
- package/dist/web/dashboard/dist/assets/{circle-alert-RxlCxXj1.js → circle-alert-5GIBBP3L.js} +1 -1
- package/dist/web/dashboard/dist/assets/{context-tab-DTPFGxle.js → context-tab-DjfwQik8.js} +1 -1
- package/dist/web/dashboard/dist/assets/{docs-tab-2uo7-Ybt.js → docs-tab-gEBzBEEV.js} +1 -1
- package/dist/web/dashboard/dist/assets/{gitnexus-tab-CiiNOf3e.js → gitnexus-tab-BE2pi0xe.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-section-DKMay1zv.js → graph-section-Cwx-Bmeh.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-tab-BYRVanTv.js → graph-tab-BcS75lY0.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-utils-1O2cEKuy.js → graph-utils-OY_fOvB3.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-CSeiGgX8.js → index-1aGs8JPI.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-B5DzSMGg.js → index-4X4gmCkA.js} +1 -1
- package/dist/web/dashboard/dist/assets/index-BVhCKhGJ.css +1 -0
- package/dist/web/dashboard/dist/assets/{index-CIhDR5rf.js → index-C3Kad9YO.js} +2 -2
- package/dist/web/dashboard/dist/assets/{insights-tab-DdI7TLP7.js → insights-tab-CP2uIpid.js} +1 -1
- package/dist/web/dashboard/dist/assets/{journey-tab-CDuvIW6V.js → journey-tab-ChwNK_8S.js} +1 -1
- package/dist/web/dashboard/dist/assets/languages-tab-DnBvSh4N.js +123 -0
- package/dist/web/dashboard/dist/assets/{loader-circle-Bl0DpM5P.js → loader-circle-Bxe_TLXv.js} +1 -1
- package/dist/web/dashboard/dist/assets/{logs-tab-QYKxeHna.js → logs-tab-BH86QvKe.js} +1 -1
- package/dist/web/dashboard/dist/assets/{lsp-tab-CLO4RFMh.js → lsp-tab-DUpaQXtx.js} +1 -1
- package/dist/web/dashboard/dist/assets/{memories-tab-BT7A7YOy.js → memories-tab-CkwtNv3t.js} +1 -1
- package/dist/web/dashboard/dist/assets/{prd-backlog-tab-M1j0tAm2.js → prd-backlog-tab-CPJanaVF.js} +1 -1
- package/dist/web/dashboard/dist/assets/{refresh-cw-0ApsgAym.js → refresh-cw-DL1dUrhF.js} +1 -1
- package/dist/web/dashboard/dist/assets/{siebel-tab-CsZz2y2b.js → siebel-tab-D7x34UXy.js} +3 -3
- package/dist/web/dashboard/dist/assets/{skills-tab-BrkrK7AC.js → skills-tab-BuqCMS29.js} +1 -1
- package/dist/web/dashboard/dist/assets/{style-UgkJJqFQ.js → style-iy_ryTT6.js} +1 -1
- package/dist/web/dashboard/dist/assets/{triangle-alert-BcgxNLLr.js → triangle-alert-CPzksLkC.js} +1 -1
- package/dist/web/dashboard/dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/web/dashboard/dist/assets/benchmark-tab-BD02uofm.js +0 -1
- package/dist/web/dashboard/dist/assets/index-BxDGbcbB.css +0 -1
- package/dist/web/dashboard/dist/assets/languages-tab-CrbP4u3b.js +0 -123
|
@@ -0,0 +1,487 @@
|
|
|
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
|
+
// ── Language Families ─────────────────────────────
|
|
14
|
+
const INDENT_LANGUAGES = new Set(["python", "haskell"]);
|
|
15
|
+
const KEYWORD_END_LANGUAGES = new Set(["ruby", "lua", "elixir"]);
|
|
16
|
+
// ── Public API ────────────────────────────────────
|
|
17
|
+
/**
|
|
18
|
+
* Extract placeholder values from sourceText based on construct type and language.
|
|
19
|
+
* Returns a Record<string, string> with keys matching UCR pattern placeholders.
|
|
20
|
+
*/
|
|
21
|
+
export function resolvePlaceholders(sourceText, constructId, sourceLanguageId) {
|
|
22
|
+
if (!sourceText || sourceText.trim().length === 0) {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
// Function constructs
|
|
26
|
+
if (isFunctionConstruct(constructId)) {
|
|
27
|
+
if (INDENT_LANGUAGES.has(sourceLanguageId)) {
|
|
28
|
+
return resolveIndentFunction(sourceText);
|
|
29
|
+
}
|
|
30
|
+
if (KEYWORD_END_LANGUAGES.has(sourceLanguageId)) {
|
|
31
|
+
return resolveKeywordEndFunction(sourceText);
|
|
32
|
+
}
|
|
33
|
+
// Default: brace family
|
|
34
|
+
if (constructId === "uc_arrow_fn") {
|
|
35
|
+
return resolveArrowFunction(sourceText);
|
|
36
|
+
}
|
|
37
|
+
return resolveBraceFunction(sourceText);
|
|
38
|
+
}
|
|
39
|
+
// Class constructs
|
|
40
|
+
if (isClassConstruct(constructId)) {
|
|
41
|
+
if (INDENT_LANGUAGES.has(sourceLanguageId)) {
|
|
42
|
+
return resolveIndentClass(sourceText);
|
|
43
|
+
}
|
|
44
|
+
return resolveBraceClass(sourceText);
|
|
45
|
+
}
|
|
46
|
+
// Control flow
|
|
47
|
+
if (constructId === "uc_if_else") {
|
|
48
|
+
if (INDENT_LANGUAGES.has(sourceLanguageId)) {
|
|
49
|
+
return resolveIndentIfElse(sourceText);
|
|
50
|
+
}
|
|
51
|
+
return resolveBraceIfElse(sourceText);
|
|
52
|
+
}
|
|
53
|
+
// Loops
|
|
54
|
+
if (isLoopConstruct(constructId)) {
|
|
55
|
+
if (INDENT_LANGUAGES.has(sourceLanguageId)) {
|
|
56
|
+
return resolveIndentLoop(sourceText);
|
|
57
|
+
}
|
|
58
|
+
return resolveBraceLoop(sourceText);
|
|
59
|
+
}
|
|
60
|
+
// Try/catch
|
|
61
|
+
if (constructId === "uc_try_catch" || constructId === "uc_try_finally") {
|
|
62
|
+
return resolveBraceTryCatch(sourceText);
|
|
63
|
+
}
|
|
64
|
+
// Imports
|
|
65
|
+
if (isImportConstruct(constructId)) {
|
|
66
|
+
return resolveImport(sourceText);
|
|
67
|
+
}
|
|
68
|
+
// Return/throw
|
|
69
|
+
if (constructId === "uc_return") {
|
|
70
|
+
return resolveReturn(sourceText);
|
|
71
|
+
}
|
|
72
|
+
if (constructId === "uc_throw") {
|
|
73
|
+
return resolveThrow(sourceText);
|
|
74
|
+
}
|
|
75
|
+
// Variable declarations
|
|
76
|
+
if (isVariableConstruct(constructId)) {
|
|
77
|
+
return resolveVariable(sourceText);
|
|
78
|
+
}
|
|
79
|
+
// Switch
|
|
80
|
+
if (constructId === "uc_switch") {
|
|
81
|
+
return resolveBraceSwitch(sourceText);
|
|
82
|
+
}
|
|
83
|
+
// Unknown construct — return empty
|
|
84
|
+
return {};
|
|
85
|
+
}
|
|
86
|
+
// ── Construct Type Checks ─────────────────────────
|
|
87
|
+
function isFunctionConstruct(id) {
|
|
88
|
+
return ["uc_fn_def", "uc_method_def", "uc_arrow_fn", "uc_async_fn", "uc_constructor", "uc_generator"].includes(id);
|
|
89
|
+
}
|
|
90
|
+
function isClassConstruct(id) {
|
|
91
|
+
return ["uc_class_def", "uc_interface", "uc_abstract_class"].includes(id);
|
|
92
|
+
}
|
|
93
|
+
function isLoopConstruct(id) {
|
|
94
|
+
return ["uc_for_loop", "uc_for_each", "uc_while", "uc_do_while"].includes(id);
|
|
95
|
+
}
|
|
96
|
+
function isImportConstruct(id) {
|
|
97
|
+
return ["uc_import_named", "uc_import_default", "uc_import_namespace"].includes(id);
|
|
98
|
+
}
|
|
99
|
+
function isVariableConstruct(id) {
|
|
100
|
+
return ["uc_const_decl", "uc_let_decl", "uc_var_decl"].includes(id);
|
|
101
|
+
}
|
|
102
|
+
// ── Brace-Family Function Resolver ────────────────
|
|
103
|
+
function resolveBraceFunction(source) {
|
|
104
|
+
const result = {};
|
|
105
|
+
// Match: [async] [public/private/static/...] [returnType] functionName(params) [: returnType] { body }
|
|
106
|
+
// Also: function name(params): returnType { body }
|
|
107
|
+
// Also: func name(params) returnType { body } (Go)
|
|
108
|
+
// Extract params from first (...)
|
|
109
|
+
const paramsMatch = source.match(/\(([^)]*)\)/);
|
|
110
|
+
if (paramsMatch) {
|
|
111
|
+
result.params = paramsMatch[1].trim();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
result.params = "";
|
|
115
|
+
}
|
|
116
|
+
// Extract name — word before the opening paren
|
|
117
|
+
const beforeParen = source.substring(0, source.indexOf("("));
|
|
118
|
+
const nameMatch = beforeParen.match(/(\w+)\s*$/);
|
|
119
|
+
if (nameMatch) {
|
|
120
|
+
result.name = nameMatch[1];
|
|
121
|
+
}
|
|
122
|
+
// Extract returnType — between closing paren and opening brace
|
|
123
|
+
const closeParen = source.indexOf(")");
|
|
124
|
+
const openBrace = source.indexOf("{");
|
|
125
|
+
if (closeParen >= 0 && openBrace > closeParen) {
|
|
126
|
+
const between = source.substring(closeParen + 1, openBrace).trim();
|
|
127
|
+
// TypeScript style: ): returnType {
|
|
128
|
+
const tsReturn = between.match(/^:\s*(.+)/);
|
|
129
|
+
if (tsReturn) {
|
|
130
|
+
result.returnType = tsReturn[1].trim();
|
|
131
|
+
}
|
|
132
|
+
// Go style: ) returnType {
|
|
133
|
+
else if (between.length > 0 && !between.startsWith("{")) {
|
|
134
|
+
result.returnType = between;
|
|
135
|
+
}
|
|
136
|
+
// Java style: returnType is before the name — extract from modifiers
|
|
137
|
+
if (!result.returnType) {
|
|
138
|
+
const javaMatch = beforeParen.match(/(?:public|private|protected|static|final|abstract)?\s*(\w+)\s+\w+\s*$/);
|
|
139
|
+
if (javaMatch && javaMatch[1] !== "function" && javaMatch[1] !== "func" && javaMatch[1] !== "async") {
|
|
140
|
+
result.returnType = javaMatch[1];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Extract body — content between first { and last }
|
|
145
|
+
result.body = extractBraceBody(source);
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
function resolveArrowFunction(source) {
|
|
149
|
+
const result = {};
|
|
150
|
+
// const name = (params): returnType => { body }
|
|
151
|
+
// const name = (params) => expression
|
|
152
|
+
const assignMatch = source.match(/(?:const|let|var)\s+(\w+)\s*=/);
|
|
153
|
+
if (assignMatch) {
|
|
154
|
+
result.name = assignMatch[1];
|
|
155
|
+
}
|
|
156
|
+
const paramsMatch = source.match(/\(([^)]*)\)/);
|
|
157
|
+
if (paramsMatch) {
|
|
158
|
+
result.params = paramsMatch[1].trim();
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
result.params = "";
|
|
162
|
+
}
|
|
163
|
+
// Return type between ) and =>
|
|
164
|
+
const arrowIdx = source.indexOf("=>");
|
|
165
|
+
const closeParen = source.indexOf(")");
|
|
166
|
+
if (closeParen >= 0 && arrowIdx > closeParen) {
|
|
167
|
+
const between = source.substring(closeParen + 1, arrowIdx).trim();
|
|
168
|
+
const tsReturn = between.match(/^:\s*(.+)/);
|
|
169
|
+
if (tsReturn) {
|
|
170
|
+
result.returnType = tsReturn[1].trim();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Body
|
|
174
|
+
if (source.includes("{")) {
|
|
175
|
+
result.body = extractBraceBody(source);
|
|
176
|
+
}
|
|
177
|
+
else if (arrowIdx >= 0) {
|
|
178
|
+
result.body = source.substring(arrowIdx + 2).trim().replace(/;$/, "");
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
// ── Indent-Family Function Resolver ───────────────
|
|
183
|
+
function resolveIndentFunction(source) {
|
|
184
|
+
const result = {};
|
|
185
|
+
const lines = source.split("\n");
|
|
186
|
+
const firstLine = lines[0];
|
|
187
|
+
// def name(params) -> returnType:
|
|
188
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
189
|
+
const defMatch = firstLine.match(/def\s+(\w+)\s*\(([^)]*)\)(?:\s*->\s*(\S+))?\s*:/);
|
|
190
|
+
if (defMatch) {
|
|
191
|
+
result.name = defMatch[1];
|
|
192
|
+
result.params = defMatch[2].trim();
|
|
193
|
+
if (defMatch[3]) {
|
|
194
|
+
result.returnType = defMatch[3];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Body: everything after first line, dedented
|
|
198
|
+
if (lines.length > 1) {
|
|
199
|
+
const bodyLines = lines.slice(1);
|
|
200
|
+
const minIndent = getMinIndent(bodyLines);
|
|
201
|
+
result.body = bodyLines
|
|
202
|
+
.map((l) => l.substring(minIndent))
|
|
203
|
+
.join("\n")
|
|
204
|
+
.trim();
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
// ── Keyword-End Function Resolver ─────────────────
|
|
209
|
+
function resolveKeywordEndFunction(source) {
|
|
210
|
+
const result = {};
|
|
211
|
+
const lines = source.split("\n");
|
|
212
|
+
const firstLine = lines[0];
|
|
213
|
+
// def name(params) or function name(params)
|
|
214
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
215
|
+
const defMatch = firstLine.match(/(?:def|function)\s+(\w+)\s*(?:\(([^)]*)\))?/);
|
|
216
|
+
if (defMatch) {
|
|
217
|
+
result.name = defMatch[1];
|
|
218
|
+
result.params = (defMatch[2] ?? "").trim();
|
|
219
|
+
}
|
|
220
|
+
// Body: everything between first line and 'end', dedented
|
|
221
|
+
if (lines.length > 2) {
|
|
222
|
+
const bodyLines = lines.slice(1, -1); // Exclude first and last (end)
|
|
223
|
+
const minIndent = getMinIndent(bodyLines);
|
|
224
|
+
result.body = bodyLines
|
|
225
|
+
.map((l) => l.substring(minIndent))
|
|
226
|
+
.join("\n")
|
|
227
|
+
.trim();
|
|
228
|
+
}
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
// ── Class Resolvers ───────────────────────────────
|
|
232
|
+
function resolveBraceClass(source) {
|
|
233
|
+
const result = {};
|
|
234
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
235
|
+
const classMatch = source.match(/class\s+(\w+)(?:\s+extends\s+(\w+))?(?:\s+implements\s+(\w+))?/);
|
|
236
|
+
if (classMatch) {
|
|
237
|
+
result.name = classMatch[1];
|
|
238
|
+
if (classMatch[2])
|
|
239
|
+
result.parent = classMatch[2];
|
|
240
|
+
}
|
|
241
|
+
// Interface
|
|
242
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
243
|
+
const ifaceMatch = source.match(/interface\s+(\w+)(?:\s+extends\s+(\w+))?/);
|
|
244
|
+
if (ifaceMatch && !result.name) {
|
|
245
|
+
result.name = ifaceMatch[1];
|
|
246
|
+
if (ifaceMatch[2])
|
|
247
|
+
result.parent = ifaceMatch[2];
|
|
248
|
+
}
|
|
249
|
+
result.body = extractBraceBody(source);
|
|
250
|
+
if (result.body)
|
|
251
|
+
result.members = result.body;
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
function resolveIndentClass(source) {
|
|
255
|
+
const result = {};
|
|
256
|
+
const lines = source.split("\n");
|
|
257
|
+
const firstLine = lines[0];
|
|
258
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
259
|
+
const classMatch = firstLine.match(/class\s+(\w+)(?:\s*\(([^)]*)\))?\s*:/);
|
|
260
|
+
if (classMatch) {
|
|
261
|
+
result.name = classMatch[1];
|
|
262
|
+
if (classMatch[2])
|
|
263
|
+
result.parent = classMatch[2];
|
|
264
|
+
}
|
|
265
|
+
if (lines.length > 1) {
|
|
266
|
+
const bodyLines = lines.slice(1);
|
|
267
|
+
const minIndent = getMinIndent(bodyLines);
|
|
268
|
+
result.body = bodyLines
|
|
269
|
+
.map((l) => l.substring(minIndent))
|
|
270
|
+
.join("\n")
|
|
271
|
+
.trim();
|
|
272
|
+
result.members = result.body;
|
|
273
|
+
}
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
// ── If/Else Resolvers ─────────────────────────────
|
|
277
|
+
function resolveBraceIfElse(source) {
|
|
278
|
+
const result = {};
|
|
279
|
+
const condMatch = source.match(/if\s*\(([^)]+)\)/);
|
|
280
|
+
if (condMatch) {
|
|
281
|
+
result.condition = condMatch[1].trim();
|
|
282
|
+
}
|
|
283
|
+
result.body = extractBraceBody(source);
|
|
284
|
+
// Try to extract else body
|
|
285
|
+
const elseIdx = source.indexOf("else");
|
|
286
|
+
if (elseIdx >= 0) {
|
|
287
|
+
const afterElse = source.substring(elseIdx + 4);
|
|
288
|
+
const elseBody = extractBraceBody(afterElse);
|
|
289
|
+
if (elseBody)
|
|
290
|
+
result.elseBody = elseBody;
|
|
291
|
+
}
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
function resolveIndentIfElse(source) {
|
|
295
|
+
const result = {};
|
|
296
|
+
const lines = source.split("\n");
|
|
297
|
+
const condMatch = lines[0].match(/if\s+(.+)\s*:/);
|
|
298
|
+
if (condMatch) {
|
|
299
|
+
result.condition = condMatch[1].trim();
|
|
300
|
+
}
|
|
301
|
+
// Body: indented lines after if
|
|
302
|
+
if (lines.length > 1) {
|
|
303
|
+
const bodyLines = [];
|
|
304
|
+
for (let i = 1; i < lines.length; i++) {
|
|
305
|
+
if (lines[i].trim().startsWith("else"))
|
|
306
|
+
break;
|
|
307
|
+
bodyLines.push(lines[i]);
|
|
308
|
+
}
|
|
309
|
+
const minIndent = getMinIndent(bodyLines);
|
|
310
|
+
result.body = bodyLines.map((l) => l.substring(minIndent)).join("\n").trim();
|
|
311
|
+
}
|
|
312
|
+
return result;
|
|
313
|
+
}
|
|
314
|
+
// ── Loop Resolvers ────────────────────────────────
|
|
315
|
+
function resolveBraceLoop(source) {
|
|
316
|
+
const result = {};
|
|
317
|
+
// for (const item of items) or for (let i = 0; ...)
|
|
318
|
+
const forOfMatch = source.match(/for\s*\(\s*(?:const|let|var)?\s*(\w+)\s+(?:of|in)\s+(.+?)\)/);
|
|
319
|
+
if (forOfMatch) {
|
|
320
|
+
result.variable = forOfMatch[1];
|
|
321
|
+
result.iterable = forOfMatch[2].trim();
|
|
322
|
+
result.item = forOfMatch[1];
|
|
323
|
+
}
|
|
324
|
+
// while (condition)
|
|
325
|
+
const whileMatch = source.match(/while\s*\(([^)]+)\)/);
|
|
326
|
+
if (whileMatch) {
|
|
327
|
+
result.condition = whileMatch[1].trim();
|
|
328
|
+
}
|
|
329
|
+
result.body = extractBraceBody(source);
|
|
330
|
+
return result;
|
|
331
|
+
}
|
|
332
|
+
function resolveIndentLoop(source) {
|
|
333
|
+
const result = {};
|
|
334
|
+
const lines = source.split("\n");
|
|
335
|
+
const forMatch = lines[0].match(/for\s+(\w+)\s+in\s+(.+)\s*:/);
|
|
336
|
+
if (forMatch) {
|
|
337
|
+
result.variable = forMatch[1];
|
|
338
|
+
result.iterable = forMatch[2].trim();
|
|
339
|
+
result.item = forMatch[1];
|
|
340
|
+
}
|
|
341
|
+
const whileMatch = lines[0].match(/while\s+(.+)\s*:/);
|
|
342
|
+
if (whileMatch) {
|
|
343
|
+
result.condition = whileMatch[1].trim();
|
|
344
|
+
}
|
|
345
|
+
if (lines.length > 1) {
|
|
346
|
+
const bodyLines = lines.slice(1);
|
|
347
|
+
const minIndent = getMinIndent(bodyLines);
|
|
348
|
+
result.body = bodyLines.map((l) => l.substring(minIndent)).join("\n").trim();
|
|
349
|
+
}
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
352
|
+
// ── Try/Catch Resolver ────────────────────────────
|
|
353
|
+
function resolveBraceTryCatch(source) {
|
|
354
|
+
const result = {};
|
|
355
|
+
// Try body
|
|
356
|
+
const tryIdx = source.indexOf("try");
|
|
357
|
+
const catchIdx = source.indexOf("catch");
|
|
358
|
+
if (tryIdx >= 0 && catchIdx > tryIdx) {
|
|
359
|
+
const tryBlock = source.substring(tryIdx + 3, catchIdx);
|
|
360
|
+
result.body = extractBraceBody(tryBlock) || tryBlock.trim();
|
|
361
|
+
}
|
|
362
|
+
// Catch error variable
|
|
363
|
+
const catchMatch = source.match(/catch\s*\(\s*(\w+)\s*\)/);
|
|
364
|
+
if (catchMatch) {
|
|
365
|
+
result.error = catchMatch[1];
|
|
366
|
+
}
|
|
367
|
+
return result;
|
|
368
|
+
}
|
|
369
|
+
// ── Switch Resolver ───────────────────────────────
|
|
370
|
+
function resolveBraceSwitch(source) {
|
|
371
|
+
const result = {};
|
|
372
|
+
const switchMatch = source.match(/switch\s*\(([^)]+)\)/);
|
|
373
|
+
if (switchMatch) {
|
|
374
|
+
result.expression = switchMatch[1].trim();
|
|
375
|
+
}
|
|
376
|
+
result.body = extractBraceBody(source);
|
|
377
|
+
return result;
|
|
378
|
+
}
|
|
379
|
+
// ── Import Resolver ───────────────────────────────
|
|
380
|
+
function resolveImport(source) {
|
|
381
|
+
const result = {};
|
|
382
|
+
// import { names } from 'module'
|
|
383
|
+
const namedMatch = source.match(/import\s*\{([^}]+)\}\s*from\s*['"]([^'"]+)['"]/);
|
|
384
|
+
if (namedMatch) {
|
|
385
|
+
result.names = namedMatch[1].trim();
|
|
386
|
+
result.module = namedMatch[2];
|
|
387
|
+
return result;
|
|
388
|
+
}
|
|
389
|
+
// import name from 'module'
|
|
390
|
+
const defaultMatch = source.match(/import\s+(\w+)\s+from\s*['"]([^'"]+)['"]/);
|
|
391
|
+
if (defaultMatch) {
|
|
392
|
+
result.name = defaultMatch[1];
|
|
393
|
+
result.module = defaultMatch[2];
|
|
394
|
+
return result;
|
|
395
|
+
}
|
|
396
|
+
// import * as name from 'module'
|
|
397
|
+
const nsMatch = source.match(/import\s+\*\s+as\s+(\w+)\s+from\s*['"]([^'"]+)['"]/);
|
|
398
|
+
if (nsMatch) {
|
|
399
|
+
result.name = nsMatch[1];
|
|
400
|
+
result.module = nsMatch[2];
|
|
401
|
+
return result;
|
|
402
|
+
}
|
|
403
|
+
// Python: from module import names
|
|
404
|
+
const pyMatch = source.match(/from\s+(\S+)\s+import\s+(.+)/);
|
|
405
|
+
if (pyMatch) {
|
|
406
|
+
result.module = pyMatch[1];
|
|
407
|
+
result.names = pyMatch[2].trim();
|
|
408
|
+
return result;
|
|
409
|
+
}
|
|
410
|
+
// Go/Java: import "module" or import module.path
|
|
411
|
+
const simpleMatch = source.match(/import\s+['"]?([^'";\s]+)['"]?/);
|
|
412
|
+
if (simpleMatch) {
|
|
413
|
+
result.module = simpleMatch[1];
|
|
414
|
+
}
|
|
415
|
+
return result;
|
|
416
|
+
}
|
|
417
|
+
// ── Return/Throw Resolvers ────────────────────────
|
|
418
|
+
function resolveReturn(source) {
|
|
419
|
+
const trimmed = source.trim().replace(/;$/, "").trim();
|
|
420
|
+
const match = trimmed.match(/^return\s+([\s\S]+)$/);
|
|
421
|
+
if (match) {
|
|
422
|
+
const val = match[1].trim();
|
|
423
|
+
return { expression: val, value: val };
|
|
424
|
+
}
|
|
425
|
+
return { expression: "", value: "" };
|
|
426
|
+
}
|
|
427
|
+
function resolveThrow(source) {
|
|
428
|
+
const trimmed = source.trim().replace(/;$/, "").trim();
|
|
429
|
+
const match = trimmed.match(/^throw\s+([\s\S]+)$/);
|
|
430
|
+
if (match) {
|
|
431
|
+
return { expression: match[1].trim(), message: match[1].trim() };
|
|
432
|
+
}
|
|
433
|
+
return { expression: "", message: "" };
|
|
434
|
+
}
|
|
435
|
+
// ── Variable Resolver ─────────────────────────────
|
|
436
|
+
function resolveVariable(source) {
|
|
437
|
+
const result = {};
|
|
438
|
+
// const/let/var name [: type] = value
|
|
439
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
440
|
+
const match = source.match(/(?:const|let|var)\s+(\w+)(?:\s*:\s*(\S+))?\s*=\s*(.+?)[\s;]*$/);
|
|
441
|
+
if (match) {
|
|
442
|
+
result.name = match[1];
|
|
443
|
+
if (match[2])
|
|
444
|
+
result.type = match[2];
|
|
445
|
+
result.value = match[3].trim();
|
|
446
|
+
}
|
|
447
|
+
return result;
|
|
448
|
+
}
|
|
449
|
+
// ── Helpers ───────────────────────────────────────
|
|
450
|
+
/** Extract content between first { and last }, trimmed and dedented. */
|
|
451
|
+
function extractBraceBody(source) {
|
|
452
|
+
const openIdx = source.indexOf("{");
|
|
453
|
+
const closeIdx = source.lastIndexOf("}");
|
|
454
|
+
if (openIdx < 0 || closeIdx <= openIdx)
|
|
455
|
+
return "";
|
|
456
|
+
const body = source.substring(openIdx + 1, closeIdx);
|
|
457
|
+
const lines = body.split("\n");
|
|
458
|
+
const nonEmpty = lines.filter((l) => l.trim().length > 0);
|
|
459
|
+
if (nonEmpty.length === 0)
|
|
460
|
+
return "";
|
|
461
|
+
const minIndent = getMinIndent(nonEmpty);
|
|
462
|
+
return nonEmpty
|
|
463
|
+
.map((l) => l.substring(minIndent))
|
|
464
|
+
.join("\n")
|
|
465
|
+
.trim();
|
|
466
|
+
}
|
|
467
|
+
/** Get minimum indentation level of non-empty lines. */
|
|
468
|
+
function getMinIndent(lines) {
|
|
469
|
+
let min = Infinity;
|
|
470
|
+
for (const line of lines) {
|
|
471
|
+
if (line.trim().length === 0)
|
|
472
|
+
continue;
|
|
473
|
+
let indent = 0;
|
|
474
|
+
for (const ch of line) {
|
|
475
|
+
if (ch === " ")
|
|
476
|
+
indent++;
|
|
477
|
+
else if (ch === "\t")
|
|
478
|
+
indent += 4;
|
|
479
|
+
else
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
if (indent < min)
|
|
483
|
+
min = indent;
|
|
484
|
+
}
|
|
485
|
+
return min === Infinity ? 0 : min;
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=placeholder-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../../../src/core/translation/generators/placeholder-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SourceTextExtractor — enriches ParsedConstruct[] with sourceText
|
|
3
|
+
* by slicing original source code using startLine/endLine.
|
|
4
|
+
*
|
|
5
|
+
* For block constructs (functions, classes, if/else, loops, try/catch),
|
|
6
|
+
* detects block boundaries using language-family-specific strategies:
|
|
7
|
+
* - Brace languages: scan forward counting {/} with string/comment escaping
|
|
8
|
+
* - Indent languages: scan until indentation drops (future)
|
|
9
|
+
* - Keyword-end languages: scan until `end` keyword (future)
|
|
10
|
+
*
|
|
11
|
+
* For single-line constructs (return, import, throw, break, variable decl),
|
|
12
|
+
* extracts just the line.
|
|
13
|
+
*/
|
|
14
|
+
import type { ParsedConstruct } from "../parsers/parser-adapter.js";
|
|
15
|
+
/**
|
|
16
|
+
* Enrich ParsedConstruct[] with sourceText extracted from sourceCode.
|
|
17
|
+
* Returns a NEW array — does not mutate the input constructs.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractSourceText(sourceCode: string, constructs: ParsedConstruct[], languageId: string): ParsedConstruct[];
|
|
20
|
+
//# sourceMappingURL=source-text-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-text-extractor.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/generators/source-text-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AA8BpE;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,eAAe,EAAE,EAC7B,UAAU,EAAE,MAAM,GACjB,eAAe,EAAE,CAOnB"}
|