context-mapper-mcp 1.0.1 → 1.1.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/dist/generators/builtin/plantuml-adapter.d.ts +60 -0
- package/dist/generators/builtin/plantuml-adapter.d.ts.map +1 -0
- package/dist/generators/builtin/plantuml-adapter.js +119 -0
- package/dist/generators/builtin/plantuml-adapter.js.map +1 -0
- package/dist/generators/cli/config.d.ts +105 -0
- package/dist/generators/cli/config.d.ts.map +1 -0
- package/dist/generators/cli/config.js +168 -0
- package/dist/generators/cli/config.js.map +1 -0
- package/dist/generators/cli/context-map.d.ts +26 -0
- package/dist/generators/cli/context-map.d.ts.map +1 -0
- package/dist/generators/cli/context-map.js +124 -0
- package/dist/generators/cli/context-map.js.map +1 -0
- package/dist/generators/cli/executor.d.ts +95 -0
- package/dist/generators/cli/executor.d.ts.map +1 -0
- package/dist/generators/cli/executor.js +277 -0
- package/dist/generators/cli/executor.js.map +1 -0
- package/dist/generators/cli/generic.d.ts +54 -0
- package/dist/generators/cli/generic.d.ts.map +1 -0
- package/dist/generators/cli/generic.js +224 -0
- package/dist/generators/cli/generic.js.map +1 -0
- package/dist/generators/cli/manager.d.ts +83 -0
- package/dist/generators/cli/manager.d.ts.map +1 -0
- package/dist/generators/cli/manager.js +281 -0
- package/dist/generators/cli/manager.js.map +1 -0
- package/dist/generators/cli/mdsl.d.ts +26 -0
- package/dist/generators/cli/mdsl.d.ts.map +1 -0
- package/dist/generators/cli/mdsl.js +118 -0
- package/dist/generators/cli/mdsl.js.map +1 -0
- package/dist/generators/interfaces.d.ts +144 -0
- package/dist/generators/interfaces.d.ts.map +1 -0
- package/dist/generators/interfaces.js +59 -0
- package/dist/generators/interfaces.js.map +1 -0
- package/dist/generators/registry.d.ts +100 -0
- package/dist/generators/registry.d.ts.map +1 -0
- package/dist/generators/registry.js +169 -0
- package/dist/generators/registry.js.map +1 -0
- package/dist/index.js +180 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/cli-tools.d.ts +103 -0
- package/dist/tools/cli-tools.d.ts.map +1 -0
- package/dist/tools/cli-tools.js +220 -0
- package/dist/tools/cli-tools.js.map +1 -0
- package/dist/tools/generation-tools.d.ts +73 -1
- package/dist/tools/generation-tools.d.ts.map +1 -1
- package/dist/tools/generation-tools.js +160 -1
- package/dist/tools/generation-tools.js.map +1 -1
- package/dist/utils/temp-files.d.ts +77 -0
- package/dist/utils/temp-files.d.ts.map +1 -0
- package/dist/utils/temp-files.js +164 -0
- package/dist/utils/temp-files.js.map +1 -0
- package/package.json +4 -1
- package/src/templates/FullReportTemplate.md.ftl +297 -0
- package/src/templates/GlossaryTemplate.md.ftl +132 -0
- package/src/templates/JHipster-Microservices.jdl.ftl +139 -0
- package/src/templates/JHipster-Monolith.jdl.ftl +159 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/generators/cli/generic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Manager
|
|
3
|
+
* Handles CLI download, extraction, and version management
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Result of CLI verification
|
|
7
|
+
*/
|
|
8
|
+
export interface CLIVerifyResult {
|
|
9
|
+
installed: boolean;
|
|
10
|
+
version?: string;
|
|
11
|
+
path?: string;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result of CLI download
|
|
16
|
+
*/
|
|
17
|
+
export interface CLIDownloadResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
version?: string;
|
|
20
|
+
path?: string;
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* CLI Manager class
|
|
25
|
+
*/
|
|
26
|
+
export declare class CLIManager {
|
|
27
|
+
private version;
|
|
28
|
+
constructor(version?: string);
|
|
29
|
+
/**
|
|
30
|
+
* Get CLI path, downloading if not present
|
|
31
|
+
* @returns Path to CLI and version info
|
|
32
|
+
*/
|
|
33
|
+
ensureCLI(): Promise<{
|
|
34
|
+
path: string;
|
|
35
|
+
version: string;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if CLI is installed and working
|
|
39
|
+
*/
|
|
40
|
+
verify(): Promise<CLIVerifyResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Download CLI from Maven Central
|
|
43
|
+
*/
|
|
44
|
+
downloadCLI(): Promise<CLIDownloadResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Download a file from URL
|
|
47
|
+
*/
|
|
48
|
+
private downloadFile;
|
|
49
|
+
/**
|
|
50
|
+
* Extract archive (TAR or ZIP)
|
|
51
|
+
*/
|
|
52
|
+
private extractArchive;
|
|
53
|
+
/**
|
|
54
|
+
* Extract TAR archive (for Unix)
|
|
55
|
+
*/
|
|
56
|
+
private extractTar;
|
|
57
|
+
/**
|
|
58
|
+
* Extract ZIP archive (for Windows)
|
|
59
|
+
* Using native unzip as Node.js doesn't have built-in ZIP support
|
|
60
|
+
*/
|
|
61
|
+
private extractZip;
|
|
62
|
+
/**
|
|
63
|
+
* Flatten extracted directory if CLI was extracted to a subdirectory
|
|
64
|
+
*/
|
|
65
|
+
private flattenExtractedDir;
|
|
66
|
+
/**
|
|
67
|
+
* Remove installed CLI
|
|
68
|
+
*/
|
|
69
|
+
uninstall(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Get installed CLI versions
|
|
72
|
+
*/
|
|
73
|
+
static getInstalledVersions(): Promise<string[]>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the CLI manager instance
|
|
77
|
+
*/
|
|
78
|
+
export declare function getCLIManager(): CLIManager;
|
|
79
|
+
/**
|
|
80
|
+
* Set the CLI version and recreate manager
|
|
81
|
+
*/
|
|
82
|
+
export declare function setCLIVersion(version: string): CLIManager;
|
|
83
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/generators/cli/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAA4B;IAIjD;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB7D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAsBxC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAwD/C;;OAEG;YACW,YAAY;IAqC1B;;OAEG;YACW,cAAc;IAY5B;;OAEG;YACW,UAAU;IAQxB;;;OAGG;YACW,UAAU;IAsBxB;;OAEG;YACW,mBAAmB;IAkCjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;OAEG;WACU,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAyBvD;AAKD;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAGzD"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Manager
|
|
3
|
+
* Handles CLI download, extraction, and version management
|
|
4
|
+
*/
|
|
5
|
+
import { createWriteStream } from 'fs';
|
|
6
|
+
import { mkdir, rm, stat, chmod, rename, readdir } from 'fs/promises';
|
|
7
|
+
import { join, dirname } from 'path';
|
|
8
|
+
import { extract as tarExtract } from 'tar';
|
|
9
|
+
import { getCLIConfig, getCLIVersionDir, getCLIExecutablePath, getCLIDownloadUrl, isWindows, DEFAULT_CLI_VERSION, } from './config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Check if a file or directory exists
|
|
12
|
+
*/
|
|
13
|
+
async function exists(path) {
|
|
14
|
+
try {
|
|
15
|
+
await stat(path);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* CLI Manager class
|
|
24
|
+
*/
|
|
25
|
+
export class CLIManager {
|
|
26
|
+
version;
|
|
27
|
+
constructor(version = DEFAULT_CLI_VERSION) {
|
|
28
|
+
this.version = version;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get CLI path, downloading if not present
|
|
32
|
+
* @returns Path to CLI and version info
|
|
33
|
+
*/
|
|
34
|
+
async ensureCLI() {
|
|
35
|
+
const verification = await this.verify();
|
|
36
|
+
if (verification.installed && verification.path) {
|
|
37
|
+
return { path: verification.path, version: this.version };
|
|
38
|
+
}
|
|
39
|
+
// Download and install
|
|
40
|
+
const downloadResult = await this.downloadCLI();
|
|
41
|
+
if (!downloadResult.success) {
|
|
42
|
+
throw new Error(downloadResult.error || 'Failed to download CLI');
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
path: getCLIExecutablePath(this.version),
|
|
46
|
+
version: this.version,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if CLI is installed and working
|
|
51
|
+
*/
|
|
52
|
+
async verify() {
|
|
53
|
+
const cliPath = getCLIExecutablePath(this.version);
|
|
54
|
+
try {
|
|
55
|
+
const pathExists = await exists(cliPath);
|
|
56
|
+
if (!pathExists) {
|
|
57
|
+
return { installed: false, error: 'CLI not found' };
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
installed: true,
|
|
61
|
+
version: this.version,
|
|
62
|
+
path: cliPath,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return {
|
|
67
|
+
installed: false,
|
|
68
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Download CLI from Maven Central
|
|
74
|
+
*/
|
|
75
|
+
async downloadCLI() {
|
|
76
|
+
const config = getCLIConfig();
|
|
77
|
+
const versionDir = getCLIVersionDir(this.version);
|
|
78
|
+
const downloadUrl = getCLIDownloadUrl(this.version);
|
|
79
|
+
try {
|
|
80
|
+
// Create version directory
|
|
81
|
+
await mkdir(versionDir, { recursive: true });
|
|
82
|
+
// Determine archive type and temp path
|
|
83
|
+
const archiveExt = isWindows() ? 'zip' : 'tar';
|
|
84
|
+
const tempArchivePath = join(versionDir, `cli.${archiveExt}`);
|
|
85
|
+
// Download the archive
|
|
86
|
+
console.error(`Downloading Context Mapper CLI ${this.version} from Maven Central...`);
|
|
87
|
+
await this.downloadFile(downloadUrl, tempArchivePath);
|
|
88
|
+
// Extract the archive
|
|
89
|
+
console.error('Extracting CLI...');
|
|
90
|
+
await this.extractArchive(tempArchivePath, versionDir);
|
|
91
|
+
// Clean up archive
|
|
92
|
+
await rm(tempArchivePath, { force: true });
|
|
93
|
+
// Make executable on Unix
|
|
94
|
+
if (!isWindows()) {
|
|
95
|
+
const cliPath = getCLIExecutablePath(this.version);
|
|
96
|
+
try {
|
|
97
|
+
await chmod(cliPath, 0o755);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// May fail if file doesn't exist yet
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
console.error(`CLI ${this.version} installed successfully`);
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
version: this.version,
|
|
107
|
+
path: getCLIExecutablePath(this.version),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
// Clean up on failure
|
|
112
|
+
try {
|
|
113
|
+
await rm(versionDir, { recursive: true, force: true });
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Ignore cleanup errors
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: error instanceof Error ? error.message : 'Unknown download error',
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Download a file from URL
|
|
126
|
+
*/
|
|
127
|
+
async downloadFile(url, destPath) {
|
|
128
|
+
const response = await fetch(url);
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
throw new Error(`Failed to download: ${response.status} ${response.statusText}`);
|
|
131
|
+
}
|
|
132
|
+
if (!response.body) {
|
|
133
|
+
throw new Error('No response body');
|
|
134
|
+
}
|
|
135
|
+
// Ensure parent directory exists
|
|
136
|
+
await mkdir(dirname(destPath), { recursive: true });
|
|
137
|
+
// Write to file using streams
|
|
138
|
+
const fileStream = createWriteStream(destPath);
|
|
139
|
+
// Convert ReadableStream to Node.js Readable
|
|
140
|
+
const reader = response.body.getReader();
|
|
141
|
+
const chunks = [];
|
|
142
|
+
while (true) {
|
|
143
|
+
const { done, value } = await reader.read();
|
|
144
|
+
if (done)
|
|
145
|
+
break;
|
|
146
|
+
chunks.push(value);
|
|
147
|
+
}
|
|
148
|
+
const buffer = Buffer.concat(chunks);
|
|
149
|
+
fileStream.write(buffer);
|
|
150
|
+
fileStream.end();
|
|
151
|
+
await new Promise((resolve, reject) => {
|
|
152
|
+
fileStream.on('finish', resolve);
|
|
153
|
+
fileStream.on('error', reject);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Extract archive (TAR or ZIP)
|
|
158
|
+
*/
|
|
159
|
+
async extractArchive(archivePath, destDir) {
|
|
160
|
+
if (isWindows()) {
|
|
161
|
+
await this.extractZip(archivePath, destDir);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
await this.extractTar(archivePath, destDir);
|
|
165
|
+
}
|
|
166
|
+
// Handle nested directory structure
|
|
167
|
+
// The CLI archive may extract to a subdirectory like context-mapper-cli-6.12.0/
|
|
168
|
+
await this.flattenExtractedDir(destDir);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Extract TAR archive (for Unix)
|
|
172
|
+
*/
|
|
173
|
+
async extractTar(archivePath, destDir) {
|
|
174
|
+
// The TAR from Maven is not gzipped
|
|
175
|
+
await tarExtract({
|
|
176
|
+
file: archivePath,
|
|
177
|
+
cwd: destDir,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Extract ZIP archive (for Windows)
|
|
182
|
+
* Using native unzip as Node.js doesn't have built-in ZIP support
|
|
183
|
+
*/
|
|
184
|
+
async extractZip(archivePath, destDir) {
|
|
185
|
+
// Use PowerShell to extract on Windows
|
|
186
|
+
const { spawn } = await import('child_process');
|
|
187
|
+
return new Promise((resolve, reject) => {
|
|
188
|
+
const ps = spawn('powershell', [
|
|
189
|
+
'-Command',
|
|
190
|
+
`Expand-Archive -Path "${archivePath}" -DestinationPath "${destDir}" -Force`,
|
|
191
|
+
]);
|
|
192
|
+
ps.on('close', (code) => {
|
|
193
|
+
if (code === 0) {
|
|
194
|
+
resolve();
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
reject(new Error(`ZIP extraction failed with code ${code}`));
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
ps.on('error', reject);
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Flatten extracted directory if CLI was extracted to a subdirectory
|
|
205
|
+
*/
|
|
206
|
+
async flattenExtractedDir(destDir) {
|
|
207
|
+
const entries = await readdir(destDir);
|
|
208
|
+
// Look for the CLI directory pattern (context-mapper-cli-X.X.X)
|
|
209
|
+
const cliSubdir = entries.find((e) => e.startsWith('context-mapper-cli-') && !e.endsWith('.tar') && !e.endsWith('.zip'));
|
|
210
|
+
if (cliSubdir) {
|
|
211
|
+
const subdirPath = join(destDir, cliSubdir);
|
|
212
|
+
const subdirStat = await stat(subdirPath);
|
|
213
|
+
if (subdirStat.isDirectory()) {
|
|
214
|
+
// Move contents up
|
|
215
|
+
const subdirEntries = await readdir(subdirPath);
|
|
216
|
+
for (const entry of subdirEntries) {
|
|
217
|
+
const srcPath = join(subdirPath, entry);
|
|
218
|
+
const destPath = join(destDir, entry);
|
|
219
|
+
// Remove existing if present
|
|
220
|
+
if (await exists(destPath)) {
|
|
221
|
+
await rm(destPath, { recursive: true, force: true });
|
|
222
|
+
}
|
|
223
|
+
await rename(srcPath, destPath);
|
|
224
|
+
}
|
|
225
|
+
// Remove empty subdirectory
|
|
226
|
+
await rm(subdirPath, { recursive: true, force: true });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Remove installed CLI
|
|
232
|
+
*/
|
|
233
|
+
async uninstall() {
|
|
234
|
+
const versionDir = getCLIVersionDir(this.version);
|
|
235
|
+
await rm(versionDir, { recursive: true, force: true });
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get installed CLI versions
|
|
239
|
+
*/
|
|
240
|
+
static async getInstalledVersions() {
|
|
241
|
+
const config = getCLIConfig();
|
|
242
|
+
const cliDir = config.cliDir;
|
|
243
|
+
try {
|
|
244
|
+
const entries = await readdir(cliDir);
|
|
245
|
+
const versions = [];
|
|
246
|
+
for (const entry of entries) {
|
|
247
|
+
const entryPath = join(cliDir, entry);
|
|
248
|
+
const entryStat = await stat(entryPath);
|
|
249
|
+
if (entryStat.isDirectory()) {
|
|
250
|
+
// Check if it looks like a version directory
|
|
251
|
+
if (/^\d+\.\d+\.\d+/.test(entry)) {
|
|
252
|
+
versions.push(entry);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return versions.sort();
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return [];
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Singleton manager instance
|
|
264
|
+
let managerInstance = null;
|
|
265
|
+
/**
|
|
266
|
+
* Get the CLI manager instance
|
|
267
|
+
*/
|
|
268
|
+
export function getCLIManager() {
|
|
269
|
+
if (!managerInstance) {
|
|
270
|
+
managerInstance = new CLIManager();
|
|
271
|
+
}
|
|
272
|
+
return managerInstance;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Set the CLI version and recreate manager
|
|
276
|
+
*/
|
|
277
|
+
export function setCLIVersion(version) {
|
|
278
|
+
managerInstance = new CLIManager(version);
|
|
279
|
+
return managerInstance;
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/generators/cli/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDSL CLI Generator
|
|
3
|
+
* Generates MDSL (Microservice Domain Specific Language) contracts using the Context Mapper CLI
|
|
4
|
+
*/
|
|
5
|
+
import type { CMLModel } from '../../model/types.js';
|
|
6
|
+
import type { IGenerator, GeneratorResult, MDSLGeneratorOptions } from '../interfaces.js';
|
|
7
|
+
/**
|
|
8
|
+
* MDSL Generator
|
|
9
|
+
* Uses CLI to generate MDSL microservice contracts from upstream-downstream relationships
|
|
10
|
+
*/
|
|
11
|
+
export declare class MDSLGenerator implements IGenerator {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
requiresCLI: boolean;
|
|
15
|
+
outputFormats: string[];
|
|
16
|
+
generate(model: CMLModel, options?: MDSLGeneratorOptions): Promise<GeneratorResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Find generated MDSL files in the output directory
|
|
19
|
+
*/
|
|
20
|
+
private findGeneratedFiles;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create the MDSL generator
|
|
24
|
+
*/
|
|
25
|
+
export declare function createMDSLGenerator(): IGenerator;
|
|
26
|
+
//# sourceMappingURL=mdsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdsl.d.ts","sourceRoot":"","sources":["../../../src/generators/cli/mdsl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,oBAAoB,EAErB,MAAM,kBAAkB,CAAC;AAc1B;;;GAGG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAU;IACd,WAAW,SAAyE;IACpF,WAAW,UAAQ;IACnB,aAAa,WAAY;IAEnB,QAAQ,CACZ,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC;IAmH3B;;OAEG;YACW,kBAAkB;CAsBjC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAEhD"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDSL CLI Generator
|
|
3
|
+
* Generates MDSL (Microservice Domain Specific Language) contracts using the Context Mapper CLI
|
|
4
|
+
*/
|
|
5
|
+
import { readdir, readFile, stat } from 'fs/promises';
|
|
6
|
+
import { join, basename } from 'path';
|
|
7
|
+
import { createSuccessResult, createErrorResult, cliNotFoundError, javaNotFoundError, javaVersionError, executionTimeoutError, } from '../interfaces.js';
|
|
8
|
+
import { serializeCML } from '../../model/writer.js';
|
|
9
|
+
import { withTempFiles } from '../../utils/temp-files.js';
|
|
10
|
+
import { getCLIExecutor, getCLIStatus } from './executor.js';
|
|
11
|
+
import { getCLIConfig } from './config.js';
|
|
12
|
+
/**
|
|
13
|
+
* MDSL Generator
|
|
14
|
+
* Uses CLI to generate MDSL microservice contracts from upstream-downstream relationships
|
|
15
|
+
*/
|
|
16
|
+
export class MDSLGenerator {
|
|
17
|
+
name = 'mdsl';
|
|
18
|
+
description = 'Generate MDSL microservice contracts from Context Map relationships';
|
|
19
|
+
requiresCLI = true;
|
|
20
|
+
outputFormats = ['mdsl'];
|
|
21
|
+
async generate(model, options) {
|
|
22
|
+
// Check prerequisites
|
|
23
|
+
const status = await getCLIStatus();
|
|
24
|
+
if (!status.javaAvailable) {
|
|
25
|
+
return javaNotFoundError();
|
|
26
|
+
}
|
|
27
|
+
if (!status.javaCompatible) {
|
|
28
|
+
return javaVersionError(status.javaVersion || 'unknown');
|
|
29
|
+
}
|
|
30
|
+
if (!status.cliInstalled) {
|
|
31
|
+
return cliNotFoundError();
|
|
32
|
+
}
|
|
33
|
+
// Check for upstream-downstream relationships
|
|
34
|
+
if (!model.contextMap || model.contextMap.relationships.length === 0) {
|
|
35
|
+
return createErrorResult('INVALID_CML', 'No context map relationships found', 'MDSL generation requires upstream-downstream relationships in the context map');
|
|
36
|
+
}
|
|
37
|
+
const hasUpstreamDownstream = model.contextMap.relationships.some((rel) => rel.type === 'UpstreamDownstream');
|
|
38
|
+
if (!hasUpstreamDownstream) {
|
|
39
|
+
return createErrorResult('INVALID_CML', 'No upstream-downstream relationships found', 'MDSL generation requires at least one upstream-downstream relationship in the context map');
|
|
40
|
+
}
|
|
41
|
+
// Use temp files with automatic cleanup
|
|
42
|
+
return withTempFiles(async (tempContext) => {
|
|
43
|
+
try {
|
|
44
|
+
// Serialize model to CML
|
|
45
|
+
const cmlContent = serializeCML(model);
|
|
46
|
+
const tempDir = await tempContext.createDir();
|
|
47
|
+
const cmlPath = await tempContext.createCMLFile(cmlContent, tempDir);
|
|
48
|
+
// Determine output directory
|
|
49
|
+
const config = getCLIConfig();
|
|
50
|
+
const outputDir = options?.outputDir ?? config.outputDir;
|
|
51
|
+
// Build extra arguments
|
|
52
|
+
const extraArgs = [];
|
|
53
|
+
// Execute CLI
|
|
54
|
+
const executor = getCLIExecutor();
|
|
55
|
+
const result = await executor.generate(cmlPath, 'mdsl', outputDir, extraArgs, { timeout: options?.timeout });
|
|
56
|
+
if (result.timedOut) {
|
|
57
|
+
return executionTimeoutError(options?.timeout ?? config.timeout);
|
|
58
|
+
}
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
return createErrorResult('EXECUTION_FAILED', result.error || 'CLI execution failed', 'Check the CML model for errors using cml_validate_model', result.stderr);
|
|
61
|
+
}
|
|
62
|
+
// Find generated MDSL files
|
|
63
|
+
const generatedFiles = await this.findGeneratedFiles(outputDir);
|
|
64
|
+
if (generatedFiles.length === 0) {
|
|
65
|
+
return createErrorResult('OUTPUT_NOT_FOUND', 'No MDSL files were generated', 'Ensure the model has upstream-downstream relationships with exposed aggregates');
|
|
66
|
+
}
|
|
67
|
+
// Read file contents for output
|
|
68
|
+
const outputs = await Promise.all(generatedFiles.map(async (filePath) => {
|
|
69
|
+
const content = await readFile(filePath, 'utf-8');
|
|
70
|
+
return {
|
|
71
|
+
type: 'file',
|
|
72
|
+
path: filePath,
|
|
73
|
+
content,
|
|
74
|
+
format: 'mdsl',
|
|
75
|
+
description: `MDSL contract: ${basename(filePath)}`,
|
|
76
|
+
};
|
|
77
|
+
}));
|
|
78
|
+
// Include any warnings from stderr
|
|
79
|
+
const warnings = result.stderr
|
|
80
|
+
? result.stderr.split('\n').filter((line) => line.trim().length > 0)
|
|
81
|
+
: undefined;
|
|
82
|
+
return createSuccessResult(outputs, warnings);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return createErrorResult('INTERNAL_ERROR', error instanceof Error ? error.message : 'Unknown error during generation');
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Find generated MDSL files in the output directory
|
|
91
|
+
*/
|
|
92
|
+
async findGeneratedFiles(outputDir) {
|
|
93
|
+
const files = [];
|
|
94
|
+
try {
|
|
95
|
+
const entries = await readdir(outputDir);
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
if (entry.endsWith('.mdsl')) {
|
|
98
|
+
const entryPath = join(outputDir, entry);
|
|
99
|
+
const entryStat = await stat(entryPath);
|
|
100
|
+
if (entryStat.isFile()) {
|
|
101
|
+
files.push(entryPath);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Directory may not exist
|
|
108
|
+
}
|
|
109
|
+
return files;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create the MDSL generator
|
|
114
|
+
*/
|
|
115
|
+
export function createMDSLGenerator() {
|
|
116
|
+
return new MDSLGenerator();
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=mdsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdsl.js","sourceRoot":"","sources":["../../../src/generators/cli/mdsl.ts"],"names":[],"mappings":"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"}
|