@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.
Files changed (71) hide show
  1. package/README.md +1 -1
  2. package/dist/api/routes/benchmark.d.ts.map +1 -1
  3. package/dist/api/routes/benchmark.js +15 -2
  4. package/dist/api/routes/benchmark.js.map +1 -1
  5. package/dist/api/routes/translation-project.js +2 -2
  6. package/dist/api/routes/translation-project.js.map +1 -1
  7. package/dist/api/routes/translation.js +2 -2
  8. package/dist/api/routes/translation.js.map +1 -1
  9. package/dist/core/translation/generators/ast-placeholder-extractor.d.ts +20 -0
  10. package/dist/core/translation/generators/ast-placeholder-extractor.d.ts.map +1 -0
  11. package/dist/core/translation/generators/ast-placeholder-extractor.js +215 -0
  12. package/dist/core/translation/generators/ast-placeholder-extractor.js.map +1 -0
  13. package/dist/core/translation/generators/placeholder-resolver.d.ts +18 -0
  14. package/dist/core/translation/generators/placeholder-resolver.d.ts.map +1 -0
  15. package/dist/core/translation/generators/placeholder-resolver.js +487 -0
  16. package/dist/core/translation/generators/placeholder-resolver.js.map +1 -0
  17. package/dist/core/translation/generators/source-text-extractor.d.ts +20 -0
  18. package/dist/core/translation/generators/source-text-extractor.d.ts.map +1 -0
  19. package/dist/core/translation/generators/source-text-extractor.js +190 -0
  20. package/dist/core/translation/generators/source-text-extractor.js.map +1 -0
  21. package/dist/core/translation/generators/universal-generator.d.ts +23 -0
  22. package/dist/core/translation/generators/universal-generator.d.ts.map +1 -0
  23. package/dist/core/translation/generators/universal-generator.js +137 -0
  24. package/dist/core/translation/generators/universal-generator.js.map +1 -0
  25. package/dist/core/translation/parsers/parser-adapter.d.ts +4 -0
  26. package/dist/core/translation/parsers/parser-adapter.d.ts.map +1 -1
  27. package/dist/core/translation/project-translation-orchestrator.d.ts +3 -3
  28. package/dist/core/translation/project-translation-orchestrator.d.ts.map +1 -1
  29. package/dist/core/translation/project-translation-orchestrator.js +4 -4
  30. package/dist/core/translation/project-translation-orchestrator.js.map +1 -1
  31. package/dist/core/translation/prompt-builder.d.ts +4 -0
  32. package/dist/core/translation/prompt-builder.d.ts.map +1 -1
  33. package/dist/core/translation/prompt-builder.js +13 -3
  34. package/dist/core/translation/prompt-builder.js.map +1 -1
  35. package/dist/core/translation/translation-orchestrator.d.ts +2 -1
  36. package/dist/core/translation/translation-orchestrator.d.ts.map +1 -1
  37. package/dist/core/translation/translation-orchestrator.js +21 -2
  38. package/dist/core/translation/translation-orchestrator.js.map +1 -1
  39. package/dist/docs-manifest.json +8 -2
  40. package/dist/mcp/tools/translate-code.js +1 -1
  41. package/dist/mcp/tools/translate-code.js.map +1 -1
  42. package/dist/web/dashboard/dist/assets/benchmark-tab-en-UkR66.js +1 -0
  43. package/dist/web/dashboard/dist/assets/{circle-alert-RxlCxXj1.js → circle-alert-5GIBBP3L.js} +1 -1
  44. package/dist/web/dashboard/dist/assets/{context-tab-DTPFGxle.js → context-tab-DjfwQik8.js} +1 -1
  45. package/dist/web/dashboard/dist/assets/{docs-tab-2uo7-Ybt.js → docs-tab-gEBzBEEV.js} +1 -1
  46. package/dist/web/dashboard/dist/assets/{gitnexus-tab-CiiNOf3e.js → gitnexus-tab-BE2pi0xe.js} +1 -1
  47. package/dist/web/dashboard/dist/assets/{graph-section-DKMay1zv.js → graph-section-Cwx-Bmeh.js} +1 -1
  48. package/dist/web/dashboard/dist/assets/{graph-tab-BYRVanTv.js → graph-tab-BcS75lY0.js} +1 -1
  49. package/dist/web/dashboard/dist/assets/{graph-utils-1O2cEKuy.js → graph-utils-OY_fOvB3.js} +1 -1
  50. package/dist/web/dashboard/dist/assets/{index-CSeiGgX8.js → index-1aGs8JPI.js} +1 -1
  51. package/dist/web/dashboard/dist/assets/{index-B5DzSMGg.js → index-4X4gmCkA.js} +1 -1
  52. package/dist/web/dashboard/dist/assets/index-BVhCKhGJ.css +1 -0
  53. package/dist/web/dashboard/dist/assets/{index-CIhDR5rf.js → index-C3Kad9YO.js} +2 -2
  54. package/dist/web/dashboard/dist/assets/{insights-tab-DdI7TLP7.js → insights-tab-CP2uIpid.js} +1 -1
  55. package/dist/web/dashboard/dist/assets/{journey-tab-CDuvIW6V.js → journey-tab-ChwNK_8S.js} +1 -1
  56. package/dist/web/dashboard/dist/assets/languages-tab-DnBvSh4N.js +123 -0
  57. package/dist/web/dashboard/dist/assets/{loader-circle-Bl0DpM5P.js → loader-circle-Bxe_TLXv.js} +1 -1
  58. package/dist/web/dashboard/dist/assets/{logs-tab-QYKxeHna.js → logs-tab-BH86QvKe.js} +1 -1
  59. package/dist/web/dashboard/dist/assets/{lsp-tab-CLO4RFMh.js → lsp-tab-DUpaQXtx.js} +1 -1
  60. package/dist/web/dashboard/dist/assets/{memories-tab-BT7A7YOy.js → memories-tab-CkwtNv3t.js} +1 -1
  61. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-M1j0tAm2.js → prd-backlog-tab-CPJanaVF.js} +1 -1
  62. package/dist/web/dashboard/dist/assets/{refresh-cw-0ApsgAym.js → refresh-cw-DL1dUrhF.js} +1 -1
  63. package/dist/web/dashboard/dist/assets/{siebel-tab-CsZz2y2b.js → siebel-tab-D7x34UXy.js} +3 -3
  64. package/dist/web/dashboard/dist/assets/{skills-tab-BrkrK7AC.js → skills-tab-BuqCMS29.js} +1 -1
  65. package/dist/web/dashboard/dist/assets/{style-UgkJJqFQ.js → style-iy_ryTT6.js} +1 -1
  66. package/dist/web/dashboard/dist/assets/{triangle-alert-BcgxNLLr.js → triangle-alert-CPzksLkC.js} +1 -1
  67. package/dist/web/dashboard/dist/index.html +2 -2
  68. package/package.json +2 -2
  69. package/dist/web/dashboard/dist/assets/benchmark-tab-BD02uofm.js +0 -1
  70. package/dist/web/dashboard/dist/assets/index-BxDGbcbB.css +0 -1
  71. 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"}