@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.
- package/README.md +1 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +2 -0
- package/dist/api/router.js.map +1 -1
- package/dist/api/routes/davinci.d.ts +3 -0
- package/dist/api/routes/davinci.d.ts.map +1 -0
- package/dist/api/routes/davinci.js +188 -0
- package/dist/api/routes/davinci.js.map +1 -0
- 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/davinci/build-runner.d.ts +37 -0
- package/dist/core/davinci/build-runner.d.ts.map +1 -0
- package/dist/core/davinci/build-runner.js +239 -0
- package/dist/core/davinci/build-runner.js.map +1 -0
- package/dist/core/davinci/davinci-parser.d.ts +6 -0
- package/dist/core/davinci/davinci-parser.d.ts.map +1 -0
- package/dist/core/davinci/davinci-parser.js +218 -0
- package/dist/core/davinci/davinci-parser.js.map +1 -0
- package/dist/core/davinci/davinci-store.d.ts +49 -0
- package/dist/core/davinci/davinci-store.d.ts.map +1 -0
- package/dist/core/davinci/davinci-store.js +121 -0
- package/dist/core/davinci/davinci-store.js.map +1 -0
- package/dist/core/davinci/davinci-types.d.ts +241 -0
- package/dist/core/davinci/davinci-types.d.ts.map +1 -0
- package/dist/core/davinci/davinci-types.js +123 -0
- package/dist/core/davinci/davinci-types.js.map +1 -0
- package/dist/core/davinci/davinci-validators.d.ts +16 -0
- package/dist/core/davinci/davinci-validators.d.ts.map +1 -0
- package/dist/core/davinci/davinci-validators.js +86 -0
- package/dist/core/davinci/davinci-validators.js.map +1 -0
- package/dist/core/davinci/descriptor-generator.d.ts +19 -0
- package/dist/core/davinci/descriptor-generator.d.ts.map +1 -0
- package/dist/core/davinci/descriptor-generator.js +52 -0
- package/dist/core/davinci/descriptor-generator.js.map +1 -0
- package/dist/core/davinci/plugin-generator.d.ts +29 -0
- package/dist/core/davinci/plugin-generator.d.ts.map +1 -0
- package/dist/core/davinci/plugin-generator.js +86 -0
- package/dist/core/davinci/plugin-generator.js.map +1 -0
- package/dist/core/davinci/plugin-type-detector.d.ts +15 -0
- package/dist/core/davinci/plugin-type-detector.d.ts.map +1 -0
- package/dist/core/davinci/plugin-type-detector.js +114 -0
- package/dist/core/davinci/plugin-type-detector.js.map +1 -0
- package/dist/core/davinci/pom-generator.d.ts +4 -0
- package/dist/core/davinci/pom-generator.d.ts.map +1 -0
- package/dist/core/davinci/pom-generator.js +179 -0
- package/dist/core/davinci/pom-generator.js.map +1 -0
- package/dist/core/davinci/template-registry.d.ts +25 -0
- package/dist/core/davinci/template-registry.d.ts.map +1 -0
- package/dist/core/davinci/template-registry.js +280 -0
- package/dist/core/davinci/template-registry.js.map +1 -0
- package/dist/core/davinci/variable-resolver.d.ts +9 -0
- package/dist/core/davinci/variable-resolver.d.ts.map +1 -0
- package/dist/core/davinci/variable-resolver.js +62 -0
- package/dist/core/davinci/variable-resolver.js.map +1 -0
- package/dist/core/parser/read-swagger.d.ts.map +1 -1
- package/dist/core/parser/read-swagger.js +6 -0
- package/dist/core/parser/read-swagger.js.map +1 -1
- package/dist/core/siebel/sif-parser.d.ts.map +1 -1
- package/dist/core/siebel/sif-parser.js +6 -0
- package/dist/core/siebel/sif-parser.js.map +1 -1
- package/dist/core/siebel/wsdl-parser.d.ts.map +1 -1
- package/dist/core/siebel/wsdl-parser.js +6 -0
- package/dist/core/siebel/wsdl-parser.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 +315 -0
- package/dist/core/translation/generators/universal-generator.js.map +1 -0
- package/dist/core/translation/language-detect.d.ts.map +1 -1
- package/dist/core/translation/language-detect.js +37 -14
- package/dist/core/translation/language-detect.js.map +1 -1
- 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 +64 -2
- package/dist/mcp/app-factory.js +1 -1
- package/dist/mcp/app-factory.js.map +1 -1
- package/dist/mcp/tools/davinci-analyze.d.ts +4 -0
- package/dist/mcp/tools/davinci-analyze.d.ts.map +1 -0
- package/dist/mcp/tools/davinci-analyze.js +31 -0
- package/dist/mcp/tools/davinci-analyze.js.map +1 -0
- package/dist/mcp/tools/davinci-build.d.ts +4 -0
- package/dist/mcp/tools/davinci-build.d.ts.map +1 -0
- package/dist/mcp/tools/davinci-build.js +43 -0
- package/dist/mcp/tools/davinci-build.js.map +1 -0
- package/dist/mcp/tools/davinci-convert.d.ts +4 -0
- package/dist/mcp/tools/davinci-convert.d.ts.map +1 -0
- package/dist/mcp/tools/davinci-convert.js +61 -0
- package/dist/mcp/tools/davinci-convert.js.map +1 -0
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +8 -0
- package/dist/mcp/tools/index.js.map +1 -1
- 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-GHO9Ji5M.js → benchmark-tab-BezNQCQh.js} +1 -1
- package/dist/web/dashboard/dist/assets/{circle-alert-CfDAmNcO.js → circle-alert-DKsqBTgC.js} +1 -1
- package/dist/web/dashboard/dist/assets/{context-tab-B_6B65lw.js → context-tab-Cmar9i-X.js} +1 -1
- package/dist/web/dashboard/dist/assets/davinci-tab-CkWYkDsy.js +10 -0
- package/dist/web/dashboard/dist/assets/{docs-tab-Dq7rtZol.js → docs-tab-CYpDJ3Rl.js} +1 -1
- package/dist/web/dashboard/dist/assets/file-code-B0t0xVTk.js +11 -0
- package/dist/web/dashboard/dist/assets/{gitnexus-tab-DAPpyAe_.js → gitnexus-tab-COEhhMeC.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-section-O0mwo9kz.js → graph-section-CheOuwv_.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-tab-CAx8lu7Z.js → graph-tab-B52UV5KP.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-utils-BwdXFM9h.js → graph-utils-D5HpaYbf.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-f0wNMEe_.js → index--SYA0Gq0.js} +1 -1
- package/dist/web/dashboard/dist/assets/index-BcMjWikL.css +1 -0
- package/dist/web/dashboard/dist/assets/{index-BxYtgAYc.js → index-DFMBuNWV.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-D_SBClB-.js → index-DdenFaJ5.js} +24 -19
- package/dist/web/dashboard/dist/assets/{insights-tab-DfH4O_Gj.js → insights-tab-sPgv-iwt.js} +1 -1
- package/dist/web/dashboard/dist/assets/{journey-tab-D2_EXArZ.js → journey-tab-CS416bwg.js} +1 -1
- package/dist/web/dashboard/dist/assets/languages-tab-CcB_s-Ic.js +108 -0
- package/dist/web/dashboard/dist/assets/{loader-circle-D5Z5DuF4.js → loader-circle-BSNUICqd.js} +1 -1
- package/dist/web/dashboard/dist/assets/{logs-tab-DwVCJxNs.js → logs-tab-BbDXtvmz.js} +1 -1
- package/dist/web/dashboard/dist/assets/{lsp-tab-D_3asNom.js → lsp-tab-BrytF6mP.js} +3 -3
- package/dist/web/dashboard/dist/assets/{memories-tab-BVe3nUf6.js → memories-tab-qCFdXJIV.js} +1 -1
- package/dist/web/dashboard/dist/assets/{prd-backlog-tab-DmeNjNES.js → prd-backlog-tab-BiNvyICT.js} +1 -1
- package/dist/web/dashboard/dist/assets/{refresh-cw-dY_ihv6e.js → refresh-cw-CqVWFFCW.js} +1 -1
- package/dist/web/dashboard/dist/assets/{siebel-tab-CUO3fUiF.js → siebel-tab-DFNHIBbS.js} +3 -3
- package/dist/web/dashboard/dist/assets/{sif-parse.worker-DZrybOHz.js → sif-parse.worker-Cty_N-lP.js} +3 -3
- package/dist/web/dashboard/dist/assets/{skills-tab-lUKwXrZi.js → skills-tab-DlInZCyj.js} +1 -1
- package/dist/web/dashboard/dist/assets/{style-Chqa3iIg.js → style-B4jQtUGE.js} +1 -1
- package/dist/web/dashboard/dist/assets/triangle-alert-CqXtIU3H.js +16 -0
- package/dist/web/dashboard/dist/assets/upload-Cb3pIYT5.js +16 -0
- package/dist/web/dashboard/dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/web/dashboard/dist/assets/index-BVhCKhGJ.css +0 -1
- package/dist/web/dashboard/dist/assets/languages-tab-Cs-EF0mT.js +0 -123
- package/dist/web/dashboard/dist/assets/triangle-alert-CkVvjxDP.js +0 -26
|
@@ -0,0 +1,190 @@
|
|
|
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
|
+
// ── Language Families ─────────────────────────────
|
|
15
|
+
const BRACE_LANGUAGES = new Set([
|
|
16
|
+
"typescript", "javascript", "java", "go", "rust", "csharp",
|
|
17
|
+
"cpp", "php", "swift", "kotlin", "scala", "dart",
|
|
18
|
+
]);
|
|
19
|
+
const INDENT_LANGUAGES = new Set(["python", "haskell"]);
|
|
20
|
+
const KEYWORD_END_LANGUAGES = new Set(["ruby", "lua", "elixir"]);
|
|
21
|
+
/** Construct IDs that are always single-line (no block body). */
|
|
22
|
+
const SINGLE_LINE_CONSTRUCTS = new Set([
|
|
23
|
+
"uc_return", "uc_break", "uc_continue", "uc_throw",
|
|
24
|
+
"uc_import_named", "uc_import_default", "uc_import_namespace",
|
|
25
|
+
"uc_export_named", "uc_export_default",
|
|
26
|
+
"uc_const_decl", "uc_let_decl", "uc_var_decl", "uc_assign",
|
|
27
|
+
"uc_fn_call", "uc_await", "uc_promise_all",
|
|
28
|
+
"uc_arr_map", "uc_arr_filter", "uc_arr_reduce", "uc_arr_push", "uc_arr_includes",
|
|
29
|
+
"uc_obj_keys", "uc_nullish", "uc_optional_chain", "uc_spread",
|
|
30
|
+
"uc_destruct_obj", "uc_destruct_arr", "uc_template_lit",
|
|
31
|
+
"uc_type_alias", "uc_type_enum", "uc_type_generic",
|
|
32
|
+
"uc_default_param", "uc_rest_param",
|
|
33
|
+
"uc_property", "uc_extends", "uc_implements",
|
|
34
|
+
]);
|
|
35
|
+
// ── Public API ────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Enrich ParsedConstruct[] with sourceText extracted from sourceCode.
|
|
38
|
+
* Returns a NEW array — does not mutate the input constructs.
|
|
39
|
+
*/
|
|
40
|
+
export function extractSourceText(sourceCode, constructs, languageId) {
|
|
41
|
+
const lines = sourceCode.split("\n");
|
|
42
|
+
return constructs.map((c) => {
|
|
43
|
+
const sourceText = extractForConstruct(lines, c, languageId);
|
|
44
|
+
return { ...c, sourceText };
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// ── Internal ──────────────────────────────────────
|
|
48
|
+
function extractForConstruct(lines, construct, languageId) {
|
|
49
|
+
const startIdx = construct.startLine - 1; // 0-based
|
|
50
|
+
if (startIdx < 0 || startIdx >= lines.length) {
|
|
51
|
+
return lines[Math.max(0, Math.min(startIdx, lines.length - 1))] ?? "";
|
|
52
|
+
}
|
|
53
|
+
// Single-line constructs: just return the line
|
|
54
|
+
if (SINGLE_LINE_CONSTRUCTS.has(construct.constructId)) {
|
|
55
|
+
return lines[startIdx];
|
|
56
|
+
}
|
|
57
|
+
// Block constructs: detect end based on language family
|
|
58
|
+
if (BRACE_LANGUAGES.has(languageId)) {
|
|
59
|
+
return extractBraceBlock(lines, startIdx);
|
|
60
|
+
}
|
|
61
|
+
if (INDENT_LANGUAGES.has(languageId)) {
|
|
62
|
+
return extractIndentBlock(lines, startIdx);
|
|
63
|
+
}
|
|
64
|
+
if (KEYWORD_END_LANGUAGES.has(languageId)) {
|
|
65
|
+
return extractKeywordEndBlock(lines, startIdx);
|
|
66
|
+
}
|
|
67
|
+
// Fallback: use startLine to endLine
|
|
68
|
+
const endIdx = Math.min(construct.endLine - 1, lines.length - 1);
|
|
69
|
+
return lines.slice(startIdx, endIdx + 1).join("\n");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract a brace-delimited block starting from startIdx.
|
|
73
|
+
* Scans forward counting { and } with string/comment escaping.
|
|
74
|
+
* Returns lines from startIdx to the line containing the matching closing brace.
|
|
75
|
+
*/
|
|
76
|
+
function extractBraceBlock(lines, startIdx) {
|
|
77
|
+
let depth = 0;
|
|
78
|
+
let foundOpen = false;
|
|
79
|
+
for (let i = startIdx; i < lines.length; i++) {
|
|
80
|
+
const line = lines[i];
|
|
81
|
+
const braceChange = countBraceChange(line);
|
|
82
|
+
depth += braceChange;
|
|
83
|
+
if (braceChange > 0 || depth > 0) {
|
|
84
|
+
foundOpen = true;
|
|
85
|
+
}
|
|
86
|
+
// If we opened a brace and depth returned to 0, we found the closing
|
|
87
|
+
if (foundOpen && depth <= 0) {
|
|
88
|
+
return lines.slice(startIdx, i + 1).join("\n");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// If no braces found at all (single-line statement), return just the start line
|
|
92
|
+
if (!foundOpen) {
|
|
93
|
+
return lines[startIdx];
|
|
94
|
+
}
|
|
95
|
+
// Unclosed brace: return from start to end of file
|
|
96
|
+
return lines.slice(startIdx).join("\n");
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Count net brace change in a line, ignoring braces inside strings and comments.
|
|
100
|
+
*/
|
|
101
|
+
function countBraceChange(line) {
|
|
102
|
+
let depth = 0;
|
|
103
|
+
let inSingleQuote = false;
|
|
104
|
+
let inDoubleQuote = false;
|
|
105
|
+
let inBacktick = false;
|
|
106
|
+
for (let i = 0; i < line.length; i++) {
|
|
107
|
+
const ch = line[i];
|
|
108
|
+
const prev = i > 0 ? line[i - 1] : "";
|
|
109
|
+
// Skip escaped characters
|
|
110
|
+
if (prev === "\\")
|
|
111
|
+
continue;
|
|
112
|
+
// Toggle string states
|
|
113
|
+
if (ch === "'" && !inDoubleQuote && !inBacktick) {
|
|
114
|
+
inSingleQuote = !inSingleQuote;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (ch === '"' && !inSingleQuote && !inBacktick) {
|
|
118
|
+
inDoubleQuote = !inDoubleQuote;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (ch === "`" && !inSingleQuote && !inDoubleQuote) {
|
|
122
|
+
inBacktick = !inBacktick;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
// Skip if inside any string
|
|
126
|
+
if (inSingleQuote || inDoubleQuote || inBacktick)
|
|
127
|
+
continue;
|
|
128
|
+
// Line comment: stop processing rest of line
|
|
129
|
+
if (ch === "/" && i + 1 < line.length && line[i + 1] === "/") {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
// Count braces
|
|
133
|
+
if (ch === "{")
|
|
134
|
+
depth++;
|
|
135
|
+
if (ch === "}")
|
|
136
|
+
depth--;
|
|
137
|
+
}
|
|
138
|
+
return depth;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Extract an indent-delimited block (Python, Haskell).
|
|
142
|
+
* Scans forward from startIdx until indentation drops below the construct level.
|
|
143
|
+
*/
|
|
144
|
+
function extractIndentBlock(lines, startIdx) {
|
|
145
|
+
const startLine = lines[startIdx];
|
|
146
|
+
const baseIndent = getIndentLevel(startLine);
|
|
147
|
+
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
148
|
+
const line = lines[i];
|
|
149
|
+
// Skip blank lines
|
|
150
|
+
if (line.trim() === "")
|
|
151
|
+
continue;
|
|
152
|
+
const indent = getIndentLevel(line);
|
|
153
|
+
if (indent <= baseIndent) {
|
|
154
|
+
// This line is at or below base indent — block ends at previous line
|
|
155
|
+
return lines.slice(startIdx, i).join("\n");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Block extends to end of file
|
|
159
|
+
return lines.slice(startIdx).join("\n");
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Extract a keyword-end block (Ruby, Lua, Elixir).
|
|
163
|
+
* Scans forward from startIdx until matching `end` keyword at base indent.
|
|
164
|
+
*/
|
|
165
|
+
function extractKeywordEndBlock(lines, startIdx) {
|
|
166
|
+
const baseIndent = getIndentLevel(lines[startIdx]);
|
|
167
|
+
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
168
|
+
const line = lines[i];
|
|
169
|
+
const trimmed = line.trim();
|
|
170
|
+
if (trimmed === "end" && getIndentLevel(line) <= baseIndent) {
|
|
171
|
+
return lines.slice(startIdx, i + 1).join("\n");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// No matching end found — return to end of file
|
|
175
|
+
return lines.slice(startIdx).join("\n");
|
|
176
|
+
}
|
|
177
|
+
/** Get indentation level (number of leading spaces; tabs count as 4). */
|
|
178
|
+
function getIndentLevel(line) {
|
|
179
|
+
let level = 0;
|
|
180
|
+
for (const ch of line) {
|
|
181
|
+
if (ch === " ")
|
|
182
|
+
level++;
|
|
183
|
+
else if (ch === "\t")
|
|
184
|
+
level += 4;
|
|
185
|
+
else
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
return level;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=source-text-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-text-extractor.js","sourceRoot":"","sources":["../../../../src/core/translation/generators/source-text-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UniversalGenerator — UCR-based code generation for all language pairs.
|
|
3
|
+
*
|
|
4
|
+
* Uses:
|
|
5
|
+
* 1. SourceTextExtractor — enriches constructs with source text from line ranges
|
|
6
|
+
* 2. PlaceholderResolver — extracts {{name}}, {{params}}, {{body}} from source text
|
|
7
|
+
* 3. UCR getPrimaryMapping — looks up target language syntax pattern
|
|
8
|
+
* 4. Substitution — fills target pattern with resolved values
|
|
9
|
+
*
|
|
10
|
+
* Works for all 12x12 language pairs via UCR (831 patterns across 12 languages).
|
|
11
|
+
*/
|
|
12
|
+
import type { ConstructRegistry } from "../ucr/construct-registry.js";
|
|
13
|
+
import type { GeneratorAdapter, GeneratedCode } from "./generator-adapter.js";
|
|
14
|
+
import type { ParsedConstruct } from "../parsers/parser-adapter.js";
|
|
15
|
+
export declare class UniversalGenerator implements GeneratorAdapter {
|
|
16
|
+
private readonly registry;
|
|
17
|
+
private readonly sourceCode;
|
|
18
|
+
private readonly sourceLanguageId;
|
|
19
|
+
readonly languageId: string;
|
|
20
|
+
constructor(registry: ConstructRegistry, targetLanguageId: string, sourceCode: string, sourceLanguageId: string);
|
|
21
|
+
generate(constructs: ParsedConstruct[]): GeneratedCode;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=universal-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"universal-generator.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/generators/universal-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAgEpE,qBAAa,kBAAmB,YAAW,gBAAgB;IAIvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAGT,QAAQ,EAAE,iBAAiB,EAC5C,gBAAgB,EAAE,MAAM,EACP,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM;IAK3C,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,aAAa;CAqEvD"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UniversalGenerator — UCR-based code generation for all language pairs.
|
|
3
|
+
*
|
|
4
|
+
* Uses:
|
|
5
|
+
* 1. SourceTextExtractor — enriches constructs with source text from line ranges
|
|
6
|
+
* 2. PlaceholderResolver — extracts {{name}}, {{params}}, {{body}} from source text
|
|
7
|
+
* 3. UCR getPrimaryMapping — looks up target language syntax pattern
|
|
8
|
+
* 4. Substitution — fills target pattern with resolved values
|
|
9
|
+
*
|
|
10
|
+
* Works for all 12x12 language pairs via UCR (831 patterns across 12 languages).
|
|
11
|
+
*/
|
|
12
|
+
import { extractSourceText } from "./source-text-extractor.js";
|
|
13
|
+
import { resolvePlaceholders } from "./placeholder-resolver.js";
|
|
14
|
+
// ── Language-Specific Defaults ────────────────────
|
|
15
|
+
const DEFAULTS_BY_LANGUAGE = {
|
|
16
|
+
python: {
|
|
17
|
+
body: "pass # TODO: implement",
|
|
18
|
+
members: "pass # TODO: members",
|
|
19
|
+
params: "",
|
|
20
|
+
value: "None",
|
|
21
|
+
condition: "True # condition",
|
|
22
|
+
type: "Any",
|
|
23
|
+
module: "module",
|
|
24
|
+
expression: "None # expression",
|
|
25
|
+
error: "e",
|
|
26
|
+
message: "'Error'",
|
|
27
|
+
parent: "object",
|
|
28
|
+
items: "items",
|
|
29
|
+
item: "item",
|
|
30
|
+
elseBody: "pass",
|
|
31
|
+
variable: "item",
|
|
32
|
+
iterable: "items",
|
|
33
|
+
},
|
|
34
|
+
go: {
|
|
35
|
+
body: "// TODO: implement",
|
|
36
|
+
members: "// TODO: members",
|
|
37
|
+
params: "",
|
|
38
|
+
value: "nil",
|
|
39
|
+
condition: "true /* condition */",
|
|
40
|
+
type: "interface{}",
|
|
41
|
+
module: "\"module\"",
|
|
42
|
+
expression: "nil /* expression */",
|
|
43
|
+
error: "err",
|
|
44
|
+
message: "\"Error\"",
|
|
45
|
+
items: "items",
|
|
46
|
+
item: "item",
|
|
47
|
+
elseBody: "// TODO",
|
|
48
|
+
variable: "item",
|
|
49
|
+
iterable: "items",
|
|
50
|
+
},
|
|
51
|
+
// Default for brace-family languages (TS, Java, C#, Rust, C++, PHP, Swift, Kotlin, Scala, Dart)
|
|
52
|
+
_default: {
|
|
53
|
+
body: "// TODO: implement",
|
|
54
|
+
members: "// TODO: members",
|
|
55
|
+
params: "",
|
|
56
|
+
value: "undefined",
|
|
57
|
+
condition: "/* condition */",
|
|
58
|
+
type: "unknown",
|
|
59
|
+
module: "'./module'",
|
|
60
|
+
expression: "/* expression */",
|
|
61
|
+
error: "e",
|
|
62
|
+
message: "'Error'",
|
|
63
|
+
items: "items",
|
|
64
|
+
item: "item",
|
|
65
|
+
elseBody: "// TODO",
|
|
66
|
+
variable: "item",
|
|
67
|
+
iterable: "items",
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
// ── UniversalGenerator ────────────────────────────
|
|
71
|
+
export class UniversalGenerator {
|
|
72
|
+
registry;
|
|
73
|
+
sourceCode;
|
|
74
|
+
sourceLanguageId;
|
|
75
|
+
languageId;
|
|
76
|
+
constructor(registry, targetLanguageId, sourceCode, sourceLanguageId) {
|
|
77
|
+
this.registry = registry;
|
|
78
|
+
this.sourceCode = sourceCode;
|
|
79
|
+
this.sourceLanguageId = sourceLanguageId;
|
|
80
|
+
this.languageId = targetLanguageId;
|
|
81
|
+
}
|
|
82
|
+
generate(constructs) {
|
|
83
|
+
if (constructs.length === 0) {
|
|
84
|
+
return { code: "", mappedConstructs: [], unmappedConstructs: [] };
|
|
85
|
+
}
|
|
86
|
+
// Step 1: Enrich constructs with source text (only if not already enriched by AST extractor)
|
|
87
|
+
const needsEnrichment = constructs.length > 0 && !constructs[0].sourceText;
|
|
88
|
+
const enriched = needsEnrichment
|
|
89
|
+
? extractSourceText(this.sourceCode, constructs, this.sourceLanguageId)
|
|
90
|
+
: constructs;
|
|
91
|
+
// Step 2: Filter out child constructs (contained within parent line ranges)
|
|
92
|
+
// Only generate top-level constructs — children are part of the parent's body
|
|
93
|
+
const topLevel = filterTopLevelConstructs(enriched);
|
|
94
|
+
const lines = [];
|
|
95
|
+
const mapped = [];
|
|
96
|
+
const unmapped = [];
|
|
97
|
+
for (const construct of topLevel) {
|
|
98
|
+
// Step 3: Look up target UCR pattern
|
|
99
|
+
const mapping = this.registry.getPrimaryMapping(construct.constructId, this.languageId);
|
|
100
|
+
if (!mapping || !mapping.syntaxPattern) {
|
|
101
|
+
unmapped.push(construct.constructId);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// Step 4: Use pre-resolved placeholders (from AST) or resolve from source text (regex fallback)
|
|
105
|
+
const resolved = construct.resolvedPlaceholders
|
|
106
|
+
? { ...construct.resolvedPlaceholders }
|
|
107
|
+
: construct.sourceText
|
|
108
|
+
? resolvePlaceholders(construct.sourceText, construct.constructId, this.sourceLanguageId)
|
|
109
|
+
: {};
|
|
110
|
+
// Always include name from construct if available and not already resolved
|
|
111
|
+
if (construct.name && !resolved.name) {
|
|
112
|
+
resolved.name = construct.name;
|
|
113
|
+
}
|
|
114
|
+
// Step 5: Transform params and types for target language
|
|
115
|
+
if (resolved.params) {
|
|
116
|
+
resolved.params = transformParams(resolved.params, this.sourceLanguageId, this.languageId);
|
|
117
|
+
}
|
|
118
|
+
if (resolved.returnType) {
|
|
119
|
+
const typeMap = TYPE_MAP[this.languageId] ?? {};
|
|
120
|
+
resolved.returnType = typeMap[resolved.returnType] ?? resolved.returnType;
|
|
121
|
+
}
|
|
122
|
+
// Step 6: Substitute resolved values into target pattern
|
|
123
|
+
const code = substituteValues(mapping.syntaxPattern, resolved, this.languageId);
|
|
124
|
+
lines.push(code);
|
|
125
|
+
mapped.push(construct.constructId);
|
|
126
|
+
}
|
|
127
|
+
// Track all constructs (including filtered children) as mapped
|
|
128
|
+
for (const c of enriched) {
|
|
129
|
+
if (!topLevel.includes(c) && !unmapped.includes(c.constructId)) {
|
|
130
|
+
mapped.push(c.constructId);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
code: lines.join("\n\n"),
|
|
135
|
+
mappedConstructs: mapped,
|
|
136
|
+
unmappedConstructs: unmapped,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ── Substitution ──────────────────────────────────
|
|
141
|
+
/**
|
|
142
|
+
* Substitute resolved placeholder values into a UCR syntax pattern.
|
|
143
|
+
* Any remaining unresolved {{...}} get language-appropriate defaults.
|
|
144
|
+
*/
|
|
145
|
+
function substituteValues(pattern, resolved, targetLanguageId) {
|
|
146
|
+
let result = pattern;
|
|
147
|
+
// First pass: substitute resolved values
|
|
148
|
+
for (const [key, value] of Object.entries(resolved)) {
|
|
149
|
+
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
150
|
+
result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, "g"), value);
|
|
151
|
+
}
|
|
152
|
+
// Second pass: replace remaining unresolved {{...}} with defaults
|
|
153
|
+
const defaults = DEFAULTS_BY_LANGUAGE[targetLanguageId] ?? DEFAULTS_BY_LANGUAGE._default;
|
|
154
|
+
result = result.replace(/\{\{(\w+)\}\}/g, (_, key) => {
|
|
155
|
+
return defaults[key] ?? `/* ${key} */`;
|
|
156
|
+
});
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
// ── Hierarchy Filter ──────────────────────────────
|
|
160
|
+
/**
|
|
161
|
+
* Filter out child constructs that are contained within a parent's line range.
|
|
162
|
+
* Only keep top-level constructs — children are already part of the parent's body.
|
|
163
|
+
*/
|
|
164
|
+
function filterTopLevelConstructs(constructs) {
|
|
165
|
+
if (constructs.length <= 1)
|
|
166
|
+
return constructs;
|
|
167
|
+
// Compute effective endLine from sourceText (parsers often set endLine = startLine)
|
|
168
|
+
const withEffectiveEnd = constructs.map((c) => {
|
|
169
|
+
const textLines = c.sourceText ? c.sourceText.split("\n").length : 1;
|
|
170
|
+
const effectiveEnd = Math.max(c.endLine, c.startLine + textLines - 1);
|
|
171
|
+
return { construct: c, effectiveEnd };
|
|
172
|
+
});
|
|
173
|
+
const topLevel = [];
|
|
174
|
+
for (const { construct: current } of withEffectiveEnd) {
|
|
175
|
+
const found = withEffectiveEnd.find((w) => w.construct === current);
|
|
176
|
+
const currentEnd = found ? found.effectiveEnd : current.endLine;
|
|
177
|
+
// Check if this construct is contained within ANY other construct
|
|
178
|
+
const isChild = withEffectiveEnd.some(({ construct: other, effectiveEnd: otherEnd }) => other !== current &&
|
|
179
|
+
current.startLine >= other.startLine &&
|
|
180
|
+
currentEnd <= otherEnd &&
|
|
181
|
+
// Only filter if the parent is strictly larger
|
|
182
|
+
(current.startLine > other.startLine || currentEnd < otherEnd));
|
|
183
|
+
if (!isChild) {
|
|
184
|
+
topLevel.push(current);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return topLevel;
|
|
188
|
+
}
|
|
189
|
+
// ── Param Transformation ──────────────────────────
|
|
190
|
+
/** Type mappings from source to target language. */
|
|
191
|
+
const TYPE_MAP = {
|
|
192
|
+
python: {
|
|
193
|
+
string: "str", number: "int", boolean: "bool", void: "None",
|
|
194
|
+
String: "str", Integer: "int", Boolean: "bool",
|
|
195
|
+
"int": "int", "float": "float", "double": "float",
|
|
196
|
+
any: "Any", undefined: "None", null: "None",
|
|
197
|
+
},
|
|
198
|
+
go: {
|
|
199
|
+
string: "string", number: "int", boolean: "bool", void: "",
|
|
200
|
+
String: "string", Integer: "int", Boolean: "bool",
|
|
201
|
+
"int": "int", "float": "float64", "double": "float64",
|
|
202
|
+
any: "interface{}", undefined: "nil", null: "nil",
|
|
203
|
+
},
|
|
204
|
+
rust: {
|
|
205
|
+
string: "String", number: "i32", boolean: "bool", void: "()",
|
|
206
|
+
String: "String", Integer: "i32", Boolean: "bool",
|
|
207
|
+
"int": "i32", "float": "f64", "double": "f64",
|
|
208
|
+
any: "Box<dyn Any>", undefined: "()", null: "()",
|
|
209
|
+
},
|
|
210
|
+
typescript: {
|
|
211
|
+
str: "string", int: "number", float: "number", bool: "boolean",
|
|
212
|
+
None: "void", dict: "Record<string, unknown>", list: "unknown[]",
|
|
213
|
+
String: "string", Integer: "number", Boolean: "boolean",
|
|
214
|
+
},
|
|
215
|
+
java: {
|
|
216
|
+
string: "String", number: "int", boolean: "boolean", void: "void",
|
|
217
|
+
str: "String", int: "int", float: "float", bool: "boolean",
|
|
218
|
+
None: "void",
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
/** Languages where types come AFTER the parameter name (e.g., Go: `name string`). */
|
|
222
|
+
const TYPE_AFTER_NAME = new Set(["go", "rust"]);
|
|
223
|
+
/** Languages that are dynamically typed (strip type annotations). */
|
|
224
|
+
const DYNAMIC_TYPED = new Set(["python", "ruby", "php", "lua", "elixir"]);
|
|
225
|
+
/**
|
|
226
|
+
* Transform parameter string from source language syntax to target language syntax.
|
|
227
|
+
* Handles: type stripping for dynamic languages, type reordering for Go/Rust,
|
|
228
|
+
* and type name mapping.
|
|
229
|
+
*/
|
|
230
|
+
function transformParams(params, sourceLang, targetLang) {
|
|
231
|
+
if (!params.trim())
|
|
232
|
+
return params;
|
|
233
|
+
// For dynamic targets: strip type annotations
|
|
234
|
+
if (DYNAMIC_TYPED.has(targetLang)) {
|
|
235
|
+
return stripTypeAnnotations(params, sourceLang);
|
|
236
|
+
}
|
|
237
|
+
// For typed targets: map type names
|
|
238
|
+
const typeMap = TYPE_MAP[targetLang] ?? {};
|
|
239
|
+
return mapParamTypes(params, sourceLang, targetLang, typeMap);
|
|
240
|
+
}
|
|
241
|
+
/** Strip type annotations from params for dynamically-typed targets. */
|
|
242
|
+
function stripTypeAnnotations(params, sourceLang) {
|
|
243
|
+
return params
|
|
244
|
+
.split(",")
|
|
245
|
+
.map((p) => {
|
|
246
|
+
const trimmed = p.trim();
|
|
247
|
+
if (!trimmed)
|
|
248
|
+
return trimmed;
|
|
249
|
+
// TS style: `name: string`
|
|
250
|
+
const tsMatch = trimmed.match(/^(\w+)\s*:\s*.+$/);
|
|
251
|
+
if (tsMatch)
|
|
252
|
+
return tsMatch[1];
|
|
253
|
+
// Go style first (when source is Go): `name type` — must check before javaMatch
|
|
254
|
+
// because javaMatch matches the same pattern but with inverted semantics
|
|
255
|
+
if (sourceLang === "go") {
|
|
256
|
+
const goMatch = trimmed.match(/^(\w+)\s+\w+$/);
|
|
257
|
+
if (goMatch)
|
|
258
|
+
return goMatch[1];
|
|
259
|
+
}
|
|
260
|
+
// Java/C# style: `Type name` or `final Type name`
|
|
261
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
262
|
+
const javaMatch = trimmed.match(/^(?:(?:final|const)\s+)?(\w+(?:<[^>]+>)?)\s+(\w+)$/);
|
|
263
|
+
if (javaMatch)
|
|
264
|
+
return javaMatch[2];
|
|
265
|
+
return trimmed;
|
|
266
|
+
})
|
|
267
|
+
.join(", ");
|
|
268
|
+
}
|
|
269
|
+
/** Map type names in params for statically-typed targets. */
|
|
270
|
+
function mapParamTypes(params, sourceLang, targetLang, typeMap) {
|
|
271
|
+
return params
|
|
272
|
+
.split(",")
|
|
273
|
+
.map((p) => {
|
|
274
|
+
const trimmed = p.trim();
|
|
275
|
+
if (!trimmed)
|
|
276
|
+
return trimmed;
|
|
277
|
+
// TS style: `name: string` → target style
|
|
278
|
+
const tsMatch = trimmed.match(/^(\w+)\s*:\s*(\w+)$/);
|
|
279
|
+
if (tsMatch) {
|
|
280
|
+
const [, name, type] = tsMatch;
|
|
281
|
+
const mappedType = typeMap[type] ?? type;
|
|
282
|
+
if (TYPE_AFTER_NAME.has(targetLang))
|
|
283
|
+
return `${name} ${mappedType}`;
|
|
284
|
+
return `${name}: ${mappedType}`;
|
|
285
|
+
}
|
|
286
|
+
// Go style first (when source is Go): `name type` — name comes first
|
|
287
|
+
if (sourceLang === "go") {
|
|
288
|
+
const goMatch = trimmed.match(/^(\w+)\s+(\w+)$/);
|
|
289
|
+
if (goMatch) {
|
|
290
|
+
const [, name, type] = goMatch;
|
|
291
|
+
const mappedType = typeMap[type] ?? type;
|
|
292
|
+
if (TYPE_AFTER_NAME.has(targetLang))
|
|
293
|
+
return `${name} ${mappedType}`;
|
|
294
|
+
if (targetLang === "typescript")
|
|
295
|
+
return `${name}: ${mappedType}`;
|
|
296
|
+
return `${mappedType} ${name}`;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Java/C# style: `Type name` → target style
|
|
300
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
301
|
+
const javaMatch = trimmed.match(/^(\w+(?:<[^>]+>)?)\s+(\w+)$/);
|
|
302
|
+
if (javaMatch) {
|
|
303
|
+
const [, type, name] = javaMatch;
|
|
304
|
+
const mappedType = typeMap[type] ?? type;
|
|
305
|
+
if (TYPE_AFTER_NAME.has(targetLang))
|
|
306
|
+
return `${name} ${mappedType}`;
|
|
307
|
+
if (targetLang === "typescript")
|
|
308
|
+
return `${name}: ${mappedType}`;
|
|
309
|
+
return `${mappedType} ${name}`;
|
|
310
|
+
}
|
|
311
|
+
return trimmed;
|
|
312
|
+
})
|
|
313
|
+
.join(", ");
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=universal-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"universal-generator.js","sourceRoot":"","sources":["../../../../src/core/translation/generators/universal-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../../src/core/translation/language-detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../../src/core/translation/language-detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAyQD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CA4C5E"}
|